diff --git a/db_worker.bc.js b/db_worker.bc.js index 0143c51..4d4d690 100644 --- a/db_worker.bc.js +++ b/db_worker.bc.js @@ -1,3732 +1,15180 @@ // Generated by js_of_ocaml //# buildInfo:effects=false, kind=exe, use-js-string=true, version=5.7.2+5.7.2 -(function(a){typeof -globalThis!=="object"&&(this?b():(a.defineProperty(a.prototype,"_T_",{configurable:true,get:b}),_T_));function -b(){var -b=this||self;b.globalThis=b;delete -a.prototype._T_}}(Object));(function(u){"use strict";var -ao="0",cH="unexpected character '",nk="Budget",ll="console",er="int_of_string",ks="%u",lk="ImageBlurHashes",gj="fields",ni="%a",nj="%ni",a5=0xff,nh="music",kr="Series",kp="LiveTvProgram",kq=0x7ff0,nf="ThemeVideoIds",ng="SeasonUserData",ko="End_of_file",ne="Out_of_memory",z=963043957,bC=870828711,mg="ProductionLocations",mf="AlbumId",gL="Failure",lj=19279,eq="Unix.Unix_error",md=NaN,me="^",ep="\\b",gz="Audio",mc="Genres",d9=-375152890,f_="null",mb="DateLastRefreshed",gy="ENOTDIR",nd="Program",nc="src/core/CCString.pp.ml",gx=17732,b0="+",nb="DateLastMediaAdded",gK="false",na=", characters ",bS=726928360,ma=308570827,gJ=869834347,bW="SortName",li="MusicArtist",aA=928231259,l$="",m$="MediaSources",kn="Chapters",gw=125,l_="Pervasives.do_at_exit",lh="ChannelFolderItem",f9=65536,gI="recursive",km=945120947,lg=16620,gv=0xf,lf="ids",ld="ProviderIds",le="closedir",m_="Match_failure",lc=-32,m9="%s",lb="MusicAlbum",i="",kl="SeriesStudio",la="Year",l9="Photo",gH="fut",kk="infinity",kj="CollectionFolder",l8="fd ",k$="Id",bV=": ",k_="ChildCount",el=874173192,ki="Playlist",k9=0xe0,l7="sortOrder",gu='\\"',l6=0xf0,kh="Sys_error",az=0x80,l5=297481262,m8="EEXIST",l4="PhotoAlbum",d8=1073741823,m7="Studios",gt="e",l3="PremiereDate",gs="ENOENT",m6="Locations",k8="Undefined_recursive_module",m4="RecursiveItemCount",m5="Height",d7="NaN",k7="AirTime",l2=-Infinity,ef="\\t",bZ="item",aP=0x8000,m3="SpecialEpisodeNumbers",kg=0x800,kf="@{",l1="Division_by_zero",kd="MusicGenre",ke="(Program not linked with -g, cannot print stack backtrace)\n",l0="Channel",gr="variants not supported in yojson basic mode",bl=0x3f,k5="Taglines",k6="CustomRating",kc="total_record_count",k4=297481260,kb=110,k3="Settings",f8=" : file already exists",lZ=101,m2=297481263,au="'",J=128,m1="<",eo=": No such file or directory",k2="CanDelete",k1="enableUserData",U=255,bB=256,ka="Revenue",cE="id",bY=100,lX="OriginalTitle",lY="DisplayPreferencesId",d=-976970511,f=848054398,m0="PresentationUniqueKey",k0="SpecialFeatureCount",cK="Infinity",en=":",f7="true",kZ=")",j$=102,d6="Items",gq=-97,mZ="Printexc.handle_uncaught_exception",mY="Type",mX="BasicSyncInfo",gG=" : flags Open_rdonly and Open_wronly are not compatible",gi=123,lW="IsHD",mW="item.Id",gh=148000204,gF="sorts",mV="LiveTvChannel",mU="Genre",kY="PlayAccess",gg=">",lV="([^/]+)",ee="Name",f6="sort_name",bU=127,aR=0xffff,kX="Sys_blocked_io",lU=308570829,lT="CanDownload",mT="ExternalEtag",lS="MusicVideo",j_="Etag",kV=Infinity,kW="People",mS="_",at=748194550,ek="\\n",mR="AggregateFolder",ed="_bigarr02",j9="DateLastSaved",gf="\\f",aH=" ",gE="compare: functional value",ge="mkdir",mQ="parentId",cJ=1000,lR="to",kU="@[",em="\\\\",mP="Primary",f5="fs",kS=308570828,kT="BoxSet",j8="ExternalSeriesId",gD=14596,mO="/static/",d5="StartIndex",j7=116,lQ="ExtraIds",mN="empty input",lP="%i",cI="lib/db/stores.ml",kR="Assert_failure",mM=18847,lO="SeriesPresentationUniqueKey",ec=3900603,lN="0x",f4=14610,mL="Movie",lL="PlayCount",lM=0xdfff,kQ="start_index",ag=365180284,mK="OCAMLRUNPARAM",lK=": closedir failed",gp=17718,j6="ServerId",lJ="Not_found",mJ=".0",go="\\u00",lI="Studio",gC="views",mI="CommunityRating",b2="",gn="tuples not supported in yojson basic mode",kP=18833,gd="items",lH="EnableMediaSourceDisplay",mH="ThemeSongIds",lG="%Li",mG="Recording",j5="Invalid_argument",ej=254,eb="Set.bal",mF="HomePageUrl",a4=0xffffff,ei="DateCreated",kO=120,kN=1027,bT=1024,lF="MediaSourceCount",kL=246,kM="(",j4="Trailer",kK="Season",lE="Video",mE=3456156,mD="includeItemTypes",j3=308570830,d4=512,bA=-752863768,lD=", ",mC="SyncInfo",lC="Descending",mB=297481261,j1="%li",j2=1026,lB="BasePluginFolder",j0="b",jZ="Person",d3="\\r",kJ="AlbumArtist",f3="nan",mA="ScreenshotImageTags",f2="rmdir",kI="Album",gc="Fatal error: exception ",a="camlinternalFormat.ml",mz="@;<1 -2>",lA="startIndex",lz="DatePlayed",kH="CriticRating",b1=708012133,kG=308569555,my="RefreshState",y=248,mx=24029,gb="ItemId",ly="ChannelInfo",lx="PrimaryImageAspectRatio",ga="date_added",mw="ENOTEMPTY",gB=1255,mv="sortBy",gm=" : flags Open_text and Open_binary are not compatible",kF="Ascending",mu="Overview",kD="Book",kE="Stack_overflow",gl=": Not a directory",mt="Random",cF="-Infinity",lw="ExternalUrls",ms="junk after end of JSON value: ",ea="Path",mr="@;<1 0>",gA=-48,jY=" : is a directory",eh="error",jX="userId",bk=".",mq="TvProgram",jW="ServiceName",lv="music\0",jV="CollectionType",gk="name",lu="Artist",mp="Folder",mo="limit",a3=737456202,d$=-10,jU="ItemCounts",kC="UserView",lt="ProductionYear",mn="CumulativeRunTimeTicks",kB="LocalTrailerCount",a2=",",d_="ParentId",f1="index out of bounds",aQ="/",kA="Tags",cG=252,jT="Runtime",f0="%d",bm=3654863,mm="Episode",lr="PlaylistsFolder",ls=": file descriptor already closed",bD="-",ml="Width",fZ="EBADF",mk="includeExternalContent",ky=19293,kz="RemoteTrailers",lq=12520,kx="enableImages",jS="items_by_date_added",kw="Fatal error: exception %s\n",mi="sorts.views",mj="InheritedParentalRatingValue",kv="ChannelImage",d2=250,eg="TotalRecordCount",jR="MediaStreams",f$="jsError",fY=103,bX='"',lp=0xdc00,lo="TvChannel",ku="UserRootFolder",ln="SeriesPrimaryImage",lm="buffer.ml",mh="AudioBook",kt="ManualPlaylistsFolder";function -Dm(a,b,c,d,e){if(d<=b)for(var -f=1;f<=e;f++)c[d+f]=a[b+f];else -for(var -f=e;f>=1;f--)c[d+f]=a[b+f];return 0}function -cX(a,b,c){var -d=String.fromCharCode;if(b==0&&c<=4096&&c==a.length)return d.apply(null,a);var -e=i;for(;0=c.l||c.t==2&&e>=c.c.length)){c.c=a.t==4?cX(a.c,b,e):b==0&&a.c.length==e?a.c:a.c.substr(b,e);c.t=c.c.length==c.l?0:2}else if(c.t==2&&d==c.c.length){c.c+=a.t==4?cX(a.c,b,e):b==0&&a.c.length==e?a.c:a.c.substr(b,e);c.t=c.c.length==c.l?0:2}else{if(c.t!=4)ew(c);var -g=a.c,h=c.c;if(a.t==4)if(d<=b)for(var -f=0;f=0;f--)h[d+f]=g[b+f];else{var -i=Math.min(e,g.length-b);for(var -f=0;f>=1;if(a==0)return d;b+=b;c++;if(c==9)b.slice(0,1)}}function -cN(a){if(a.t==2)a.c+=b7(a.l-a.c.length,"\0");else -a.c=cX(a.c,0,a.c.length);a.t=0}function -g7(a){if(a.length<24){for(var -b=0;bbU)return false;return true}else -return!/[^\x00-\x7f]/.test(a)}function -nO(a){for(var -k=i,d=i,g,f,h,b,c=0,j=a.length;cd4){d.substr(0,1);k+=d;d=i;k+=a.slice(c,e)}else -d+=a.slice(c,e);if(e==j)break;c=e}b=1;if(++c=0xd7ff&&b<0xe000)b=2}else{b=3;if(++c0x10ffff)b=3}}}}}if(b<4){c-=b;d+="\ufffd"}else if(b>aR)d+=String.fromCharCode(0xd7c0+(b>>10),lp+(b&0x3FF));else -d+=String.fromCharCode(b);if(d.length>bT){d.substr(0,1);k+=d;d=i}}return k+d}function -a6(a,b,c){this.t=a;this.c=b;this.l=c}a6.prototype.toString=function(){switch(this.t){case -9:return this.c;default:cN(this);case -0:if(g7(this.c)){this.t=9;return this.c}this.t=8;case -8:return this.c}};a6.prototype.toUtf16=function(){var -a=this.toString();if(this.t==9)return a;return nO(a)};a6.prototype.slice=function(){var -a=this.t==4?this.c.slice():this.c;return new -a6(this.t,a,this.l)};function -ns(a){return new -a6(0,a,a.length)}function -aJ(a){return a}function -bo(a){return ns(aJ(a))}function -aS(a,b,c,d,e){a7(bo(a),b,c,d,e);return 0}function -nQ(a){var -b=u.process;if(b&&b.env&&b.env[a]!=undefined)return b.env[a];if(u.jsoo_static_env&&u.jsoo_static_env[a])return u.jsoo_static_env[a]}var -g4=0;(function(){var -c=nQ(mK);if(c!==undefined){var -b=c.split(a2);for(var -a=0;a>>0>=a.l)Dq();return w(a,b,c)}function -gO(a,b){switch(a.t&6){default:if(b>=a.c.length)return 0;case -0:return a.c.charCodeAt(b);case -4:return a.c[b]}}function -a8(d,c){var -f=d.l>=0?d.l:d.l=d.length,e=c.length,b=f-e;if(b==0)return d.apply(null,c);else if(b<0){var -a=d.apply(null,c.slice(0,f));if(typeof -a!=="function")return a;return a8(a,c.slice(f))}else{switch(b){case -1:{var -a=function(a){var -f=new -Array(e+1);for(var -b=0;b>>0>=a.length-1)cM();return a}function -eu(a){if(isFinite(a)){if(Math.abs(a)>=2.2250738585072014e-308)return 0;if(a!=0)return 1;return 2}return isNaN(a)?4:3}function -nA(a){return 0}var -Em=Math.log2&&Math.log2(1.1235582092889474E+307)==1020;function -El(a){if(Em)return Math.floor(Math.log2(a));var -b=0;if(a==0)return-Infinity;if(a>=1)while(a>=2){a/=2;b++}else -while(a<1){a*=2;b--}return b}function -gT(a){var -b=new -Float32Array(1);b[0]=a;var -c=new -Int32Array(b.buffer);return c[0]|0}var -ny=Math.pow(2,-24);function -nI(a){throw a}function -g3(){nI(Y.Division_by_zero)}function -m(a,b,c){this.lo=a&a4;this.mi=b&a4;this.hi=c&aR}m.prototype.caml_custom="_j";m.prototype.copy=function(){return new -m(this.lo,this.mi,this.hi)};m.prototype.ucompare=function(a){if(this.hi>a.hi)return 1;if(this.hia.mi)return 1;if(this.mia.lo)return 1;if(this.loc)return 1;if(ba.mi)return 1;if(this.mia.lo)return 1;if(this.lo>24),c=-this.hi+(b>>24);return new -m(a,b,c)};m.prototype.add=function(a){var -b=this.lo+a.lo,c=this.mi+a.mi+(b>>24),d=this.hi+a.hi+(c>>24);return new -m(b,c,d)};m.prototype.sub=function(a){var -b=this.lo-a.lo,c=this.mi-a.mi+(b>>24),d=this.hi-a.hi+(c>>24);return new -m(b,c,d)};m.prototype.mul=function(a){var -b=this.lo*a.lo,c=(b*ny|0)+this.mi*a.lo+this.lo*a.mi,d=(c*ny|0)+this.hi*a.lo+this.mi*a.mi+this.lo*a.hi;return new -m(b,c,d)};m.prototype.isZero=function(){return(this.lo|this.mi|this.hi)==0};m.prototype.isNeg=function(){return this.hi<<16<0};m.prototype.and=function(a){return new -m(this.lo&a.lo,this.mi&a.mi,this.hi&a.hi)};m.prototype.or=function(a){return new -m(this.lo|a.lo,this.mi|a.mi,this.hi|a.hi)};m.prototype.xor=function(a){return new -m(this.lo^a.lo,this.mi^a.mi,this.hi^a.hi)};m.prototype.shift_left=function(a){a=a&63;if(a==0)return this;if(a<24)return new -m(this.lo<>24-a,this.hi<>24-a);if(a<48)return new -m(0,this.lo<>48-a);return new -m(0,0,this.lo<>a|this.mi<<24-a,this.mi>>a|this.hi<<24-a,this.hi>>a);if(a<48)return new -m(this.mi>>a-24|this.hi<<48-a,this.hi>>a-24,0);return new -m(this.hi>>a-48,0,0)};m.prototype.shift_right=function(a){a=a&63;if(a==0)return this;var -c=this.hi<<16>>16;if(a<24)return new -m(this.lo>>a|this.mi<<24-a,this.mi>>a|c<<24-a,this.hi<<16>>a>>>16);var -b=this.hi<<16>>31;if(a<48)return new -m(this.mi>>a-24|this.hi<<48-a,this.hi<<16>>a-24>>16,b&aR);return new -m(this.hi<<16>>a-32,b,b)};m.prototype.lsl1=function(){this.hi=this.hi<<1|this.mi>>23;this.mi=(this.mi<<1|this.lo>>23)&a4;this.lo=this.lo<<1&a4};m.prototype.lsr1=function(){this.lo=(this.lo>>>1|this.mi<<23)&a4;this.mi=(this.mi>>>1|this.hi<<23)&a4;this.hi=this.hi>>>1};m.prototype.udivmod=function(a){var -d=0,c=this.copy(),b=a.copy(),e=new -m(0,0,0);while(c.ucompare(b)>0){d++;b.lsl1()}while(d>=0){d--;e.lsl1();if(c.ucompare(b)>=0){e.lo++;c=c.sub(b)}b.lsr1()}return{quotient:e,modulus:c}};m.prototype.div=function(a){var -b=this;if(a.isZero())g3();var -d=b.hi^a.hi;if(b.hi&aP)b=b.neg();if(a.hi&aP)a=a.neg();var -c=b.udivmod(a).quotient;if(d&aP)c=c.neg();return c};m.prototype.mod=function(a){var -b=this;if(a.isZero())g3();var -d=b.hi;if(b.hi&aP)b=b.neg();if(a.hi&aP)a=a.neg();var -c=b.udivmod(a).modulus;if(d&aP)c=c.neg();return c};m.prototype.toInt=function(){return this.lo|this.mi<<24};m.prototype.toFloat=function(){return(this.hi<<16)*Math.pow(2,32)+this.mi*Math.pow(2,24)+this.lo};m.prototype.toArray=function(){return[this.hi>>8,this.hi&a5,this.mi>>16,this.mi>>8&a5,this.mi&a5,this.lo>>16,this.lo>>8&a5,this.lo&a5]};m.prototype.lo32=function(){return this.lo|(this.mi&a5)<<24};m.prototype.hi32=function(){return this.mi>>>8&aR|this.hi<<16};function -eA(a,b,c){return new -m(a,b,c)}function -ez(a){if(!isFinite(a)){if(isNaN(a))return eA(1,0,kq);return a>0?eA(0,0,kq):eA(0,0,0xfff0)}var -f=a==0&&1/a==-Infinity?aP:a>=0?0:aP;if(f)a=-a;var -b=El(a)+1023;if(b<=0){b=0;a/=Math.pow(2,-j2)}else{a/=Math.pow(2,b-kN);if(a<16){a*=2;b-=1}if(b==0)a/=2}var -d=Math.pow(2,24),c=a|0;a=(a-c)*d;var -e=a|0;a=(a-e)*d;var -g=a|0;c=c&gv|f|b<<4;return eA(g,e,c)}function -cS(a){return a.toArray()}function -nr(a,b,c){a.write(32,b.dims.length);a.write(32,b.kind|b.layout<<8);if(b.caml_custom==ed)for(var -d=0;d>4;if(d==2047)return(f|g|c&gv)==0?c&aP?-Infinity:Infinity:NaN;var -e=Math.pow(2,-24),b=(f*e+g)*e+(c&gv);if(d>0){b+=16;b*=Math.pow(2,d-kN)}else -b*=Math.pow(2,-j2);if(c&aP)b=-b;return b}function -gM(a){var -d=a.length,c=1;for(var -b=0;b>>24&a5|(b&aR)<<8,b>>>16&aR)}function -gW(a){return a.hi32()}function -gX(a){return a.lo32()}var -Do=ed;function -bn(a,b,c,d){this.kind=a;this.layout=b;this.dims=c;this.data=d}bn.prototype.caml_custom=Do;bn.prototype.offset=function(a){var -c=0;if(typeof -a==="number")a=[a];if(!(a -instanceof -Array))L("bigarray.js: invalid offset");if(this.dims.length!=a.length)L("Bigarray.get/set: bad number of dimensions");if(this.layout==0)for(var -b=0;b=this.dims[b])cM();c=c*this.dims[b]+a[b]}else -for(var -b=this.dims.length-1;b>=0;b--){if(a[b]<1||a[b]>this.dims[b])cM();c=c*this.dims[b]+(a[b]-1)}return c};bn.prototype.get=function(a){switch(this.kind){case -7:var -d=this.data[a*2+0],b=this.data[a*2+1];return DH(d,b);case -10:case -11:var -e=this.data[a*2+0],c=this.data[a*2+1];return[ej,e,c];default:return this.data[a]}};bn.prototype.set=function(a,b){switch(this.kind){case -7:this.data[a*2+0]=gX(b);this.data[a*2+1]=gW(b);break;case -10:case -11:this.data[a*2+0]=b[1];this.data[a*2+1]=b[2];break;default:this.data[a]=b;break}return 0};bn.prototype.fill=function(a){switch(this.kind){case -7:var -c=gX(a),e=gW(a);if(c==e)this.data.fill(c);else -for(var -b=0;be)return 1;if(d!=e){if(!b)return NaN;if(d==d)return 1;if(e==e)return-1}}break;case -7:for(var -c=0;ca.data[c+1])return 1;if(this.data[c]>>>0>>0)return-1;if(this.data[c]>>>0>a.data[c]>>>0)return 1}break;case -2:case -3:case -4:case -5:case -6:case -8:case -9:case -12:for(var -c=0;ca.data[c])return 1}break}return 0};function -b3(a,b,c,d){this.kind=a;this.layout=b;this.dims=c;this.data=d}b3.prototype=new -bn();b3.prototype.offset=function(a){if(typeof -a!=="number")if(a -instanceof -Array&&a.length==1)a=a[0];else -L("Ml_Bigarray_c_1_1.offset");if(a<0||a>=this.dims[0])cM();return a};b3.prototype.get=function(a){return this.data[a]};b3.prototype.set=function(a,b){this.data[a]=b;return 0};b3.prototype.fill=function(a){this.data.fill(a);return 0};function -nn(a,b,c,d){var -e=np(a);if(gM(c)*e!=d.length)L("length doesn't match dims");if(b==0&&c.length==1&&e==1)return new -b3(a,b,c,d);return new -bn(a,b,c,d)}function -ap(a){if(!Y.Failure)Y.Failure=[y,aw(gL),-3];g2(Y.Failure,a)}function -no(a,b,c){var -k=a.read32s();if(k<0||k>16)ap("input_value: wrong number of bigarray dimensions");var -r=a.read32s(),l=r&a5,q=r>>8&1,j=[];if(c==ed)for(var -d=0;d>>32-15;b=eE(b,0x1b873593);a^=b;a=a<<13|a>>>32-13;return(a+(a<<2)|0)+(0xe6546b64|0)|0}function -DC(a,b){a=Z(a,gX(b));a=Z(a,gW(b));return a}function -gR(a,b){return DC(a,ez(b))}function -nq(a){var -c=gM(a.dims),d=0;switch(a.kind){case -2:case -3:case -12:if(c>bB)c=bB;var -e=0,b=0;for(b=0;b+4<=a.data.length;b+=4){e=a.data[b+0]|a.data[b+1]<<8|a.data[b+2]<<16|a.data[b+3]<<24;d=Z(d,e)}e=0;switch(c&3){case -3:e=a.data[b+2]<<16;case -2:e|=a.data[b+1]<<8;case -1:e|=a.data[b+0];d=Z(d,e)}break;case -4:case -5:if(c>J)c=J;var -e=0,b=0;for(b=0;b+2<=a.data.length;b+=2){e=a.data[b+0]|a.data[b+1]<<16;d=Z(d,e)}if((c&1)!=0)d=Z(d,a.data[b]);break;case -6:if(c>64)c=64;for(var -b=0;b64)c=64;for(var -b=0;b32)c=32;c*=2;for(var -b=0;b64)c=64;for(var -b=0;b32)c=32;for(var -b=0;b0?f(b,a,d):f(a,b,d);if(d&&e!=e)return c;if(+e!=+e)return+e;if((e|0)!=0)return e|0}return c}function -eC(a){return typeof -a==="string"&&!/[^\x00-\xff]/.test(a)}function -eB(a){return a -instanceof -a6}function -nu(a){if(typeof -a==="number")return cJ;else if(eB(a))return cG;else if(eC(a))return 1252;else if(a -instanceof -Array&&a[0]===a[0]>>>0&&a[0]<=U){var -b=a[0]|0;return b==ej?0:b}else if(a -instanceof -String)return lq;else if(typeof -a=="string")return lq;else if(a -instanceof -Number)return cJ;else if(a&&a.caml_custom)return gB;else if(a&&a.compare)return 1256;else if(typeof -a=="function")return 1247;else if(typeof -a=="symbol")return 1251;return 1001}function -DR(a,b){if(ab?1:0}function -Dr(a,b){a.t&6&&cN(a);b.t&6&&cN(b);return a.cb.c?1:0}function -ev(a,b,c){var -f=[];for(;;){if(!(c&&a===b)){var -e=nu(a);if(e==d2){a=a[1];continue}var -g=nu(b);if(g==d2){b=b[1];continue}if(e!==g){if(e==cJ){if(g==gB)return nt(a,b,-1,c);return-1}if(g==cJ){if(e==gB)return nt(b,a,1,c);return 1}return eb)return 1;if(a!=b){if(!c)return NaN;if(a==a)return 1;if(b==b)return-1}break;case -1001:if(ab)return 1;if(a!=b){if(!c)return NaN;if(a==a)return 1;if(b==b)return-1}break;case -1251:if(a!==b){if(!c)return NaN;return 1}break;case -1252:var -a=aJ(a),b=aJ(b);if(a!==b){if(ab)return 1}break;case -12520:var -a=a.toString(),b=b.toString();if(a!==b){if(ab)return 1}break;case -246:case -254:default:if(nA(e)){L("compare: continuation value");break}if(a.length!=b.length)return a.length1)f.push(a,b,1);break}}if(f.length==0)return 0;var -h=f.pop();b=f.pop();a=f.pop();if(h+10)if(b==0&&(c>=a.l||a.t==2&&c>=a.c.length))if(d==0){a.c=i;a.t=2}else{a.c=b7(c,String.fromCharCode(d));a.t=c==a.l?0:2}else{if(a.t!=4)ew(a);for(c+=b;b0&&b===b)return b;a=a.replace(/_/g,i);b=+a;if(a.length>0&&b===b||/^[+-]?nan$/i.test(a))return b;var -c=/^ *([+-]?)0x([0-9a-f]+)\.?([0-9a-f]*)(p([+-]?[0-9]+))?/i.exec(a);if(c){var -d=c[3].replace(/0+$/,i),f=parseInt(c[1]+c[2]+d,16),e=(c[5]|0)-4*d.length;b=f*Math.pow(2,e);return b}if(/^\+?inf(inity)?$/i.test(a))return Infinity;if(/^-inf(inity)?$/i.test(a))return-Infinity;ap("float_of_string")}function -g1(a){a=aJ(a);var -e=a.length;if(e>31)L("format_int: format too long");var -b={justify:b0,signstyle:bD,filler:aH,alternate:false,base:0,signedconv:false,width:0,uppercase:false,sign:1,prec:-1,conv:"f"};for(var -d=0;d=0&&c<=9){b.width=b.width*10+c;d++}d--;break;case".":b.prec=0;d++;while(c=a.charCodeAt(d)-48,c>=0&&c<=9){b.prec=b.prec*10+c;d++}d--;case"d":case"i":b.signedconv=true;case"u":b.base=10;break;case"x":b.base=16;break;case"X":b.base=16;b.uppercase=true;break;case"o":b.base=8;break;case"e":case"f":case"g":b.signedconv=true;b.conv=c;break;case"E":case"F":case"G":b.signedconv=true;b.uppercase=true;b.conv=c.toLowerCase();break}}return b}function -gQ(a,b){if(a.uppercase)b=b.toUpperCase();var -e=b.length;if(a.signedconv&&(a.sign<0||a.signstyle!=bD))e++;if(a.alternate){if(a.base==8)e+=1;if(a.base==16)e+=2}var -c=i;if(a.justify==b0&&a.filler==aH)for(var -d=e;d20){c-=20;a/=Math.pow(10,c);a+=new -Array(c+1).join(ao);if(b>0)a=a+bk+new -Array(b+1).join(ao);return a}else -return a.toFixed(b)}}var -c,f=g1(a),e=f.prec<0?6:f.prec;if(b<0||b==0&&1/b==-Infinity){f.sign=-1;b=-b}if(isNaN(b)){c=f3;f.filler=aH}else if(!isFinite(b)){c="inf";f.filler=aH}else -switch(f.conv){case"e":var -c=b.toExponential(e),d=c.length;if(c.charAt(d-3)==gt)c=c.slice(0,d-1)+ao+c.slice(d-1);break;case"f":c=j(b,e);break;case"g":e=e?e:1;c=b.toExponential(e-1);var -i=c.indexOf(gt),h=+c.slice(i+1);if(h<-4||b>=1e21||b.toFixed(0).length>e){var -d=i-1;while(c.charAt(d)==ao)d--;if(c.charAt(d)==bk)d--;c=c.slice(0,d+1)+c.slice(i);d=c.length;if(c.charAt(d-3)==gt)c=c.slice(0,d-1)+ao+c.slice(d-1);break}else{var -g=e;if(h<0){g-=h+1;c=b.toFixed(g)}else -while(c=b.toFixed(g),c.length>e+1)g--;if(g){var -d=c.length-1;while(c.charAt(d)==ao)d--;if(c.charAt(d)==bk)d--;c=c.slice(0,d+1)}}break}return gQ(f,c)}function -ey(a,b){if(aJ(a)==f0)return aw(i+b);var -c=g1(a);if(b<0)if(c.signedconv){c.sign=-1;b=-b}else -b>>>=0;var -d=b.toString(c.base);if(c.prec>=0){c.filler=aH;var -e=c.prec-d.length;if(e>0)d=b7(e,ao)+d}return gQ(c,d)}var -D_=0;function -aB(){return D_++}function -av(a){if(g7(a))return a;return nO(a)}function -c0(){return typeof -u.process!=="undefined"&&typeof -u.process.versions!=="undefined"&&typeof -u.process.versions.node!=="undefined"}function -En(){function -a(a){if(a.charAt(0)===aQ)return[i,a.substring(1)];return}function -b(a){var -g=/^([a-zA-Z]:|[\\/]{2}[^\\/]+[\\/]+[^\\/]+)?([\\/])?([\s\S]*?)$/,b=g.exec(a),c=b[1]||i,e=Boolean(c&&c.charAt(1)!==en);if(Boolean(b[2]||e)){var -d=b[1]||i,f=b[2]||i;return[d,a.substring(d.length+f.length)]}return}return c0()&&u.process&&u.process.platform?u.process.platform==="win32"?b:a:a}var -g8=En();function -nN(a){return a.slice(-1)!==aQ?a+aQ:a}if(c0()&&u.process&&u.process.cwd)var -cO=u.process.cwd().replace(/\\/g,aQ);else -var -cO="/static";cO=nN(cO);function -DY(a){a=av(a);if(!g8(a))a=cO+a;var -e=g8(a),d=e[1].split(aQ),b=[];for(var -c=0;c1)b.pop();break;case".":break;case"":break;default:b.push(d[c]);break}b.unshift(e[0]);b.orig=a;return b}function -Ek(a){for(var -f=i,c=f,b,h,d=0,g=a.length;dd4){c.substr(0,1);f+=c;c=i;f+=a.slice(d,e)}else -c+=a.slice(d,e);if(e==g)break;d=e}if(b>6);c+=String.fromCharCode(az|b&bl)}else if(b<0xd800||b>=lM)c+=String.fromCharCode(k9|b>>12,az|b>>6&bl,az|b&bl);else if(b>=0xdbff||d+1==g||(h=a.charCodeAt(d+1))lM)c+="\xef\xbf\xbd";else{d++;b=(b<<10)+h-0x35fdc00;c+=String.fromCharCode(l6|b>>18,az|b>>12&bl,az|b>>6&bl,az|b&bl)}if(c.length>bT){c.substr(0,1);f+=c;c=i}}return f+c}function -aE(a){return g7(a)?aw(a):aw(Ek(a))}var -Eo=["E2BIG","EACCES","EAGAIN",fZ,"EBUSY","ECHILD","EDEADLK","EDOM",m8,"EFAULT","EFBIG","EINTR","EINVAL","EIO","EISDIR","EMFILE","EMLINK","ENAMETOOLONG","ENFILE","ENODEV",gs,"ENOEXEC","ENOLCK","ENOMEM","ENOSPC","ENOSYS",gy,mw,"ENOTTY","ENXIO","EPERM","EPIPE","ERANGE","EROFS","ESPIPE","ESRCH","EXDEV","EWOULDBLOCK","EINPROGRESS","EALREADY","ENOTSOCK","EDESTADDRREQ","EMSGSIZE","EPROTOTYPE","ENOPROTOOPT","EPROTONOSUPPORT","ESOCKTNOSUPPORT","EOPNOTSUPP","EPFNOSUPPORT","EAFNOSUPPORT","EADDRINUSE","EADDRNOTAVAIL","ENETDOWN","ENETUNREACH","ENETRESET","ECONNABORTED","ECONNRESET","ENOBUFS","EISCONN","ENOTCONN","ESHUTDOWN","ETOOMANYREFS","ETIMEDOUT","ECONNREFUSED","EHOSTDOWN","EHOSTUNREACH","ELOOP","EOVERFLOW"];function -a_(a,b,c,d){var -e=Eo.indexOf(a);if(e<0){if(d==null)d=-9999;e=[0,d]}var -f=[e,aE(b||i),aE(c||i)];return f}var -nG={};function -br(a){return nG[a]}function -a9(a,b){throw h([0,a].concat(b))}function -gN(a){if(!(a -instanceof -Uint8Array))a=new -Uint8Array(a);return new -a6(4,a,a.length)}function -r(a){g2(Y.Sys_error,a)}function -nJ(a){r(a+eo)}function -cZ(a){if(a.t!=4)ew(a);return a.c}function -_(a){return a.l}function -nl(){}function -ab(a){this.data=a}ab.prototype=new -nl();ab.prototype.constructor=ab;ab.prototype.truncate=function(a){var -b=this.data;this.data=E(a|0);a7(b,0,this.data,0,a)};ab.prototype.length=function(){return _(this.data)};ab.prototype.write=function(a,b,c,d){var -e=this.length();if(a+d>=e){var -f=E(a+d),g=this.data;this.data=f;a7(g,0,this.data,0,e)}a7(gN(b),c,this.data,a,d);return 0};ab.prototype.read=function(a,b,c,d){var -e=this.length();if(a+d>=e)d=e-a;if(d){var -f=E(d|0);a7(this.data,a,f,0,d);b.set(cZ(f),c)}return d};function -bE(a,b,c){this.file=b;this.name=a;this.flags=c}bE.prototype.err_closed=function(){r(this.name+ls)};bE.prototype.length=function(){if(this.file)return this.file.length();this.err_closed()};bE.prototype.write=function(a,b,c,d){if(this.file)return this.file.write(a,b,c,d);this.err_closed()};bE.prototype.read=function(a,b,c,d){if(this.file)return this.file.read(a,b,c,d);this.err_closed()};bE.prototype.close=function(){this.file=undefined};function -Q(a,b){this.content={};this.root=a;this.lookupFun=b}Q.prototype.nm=function(a){return this.root+a};Q.prototype.create_dir_if_needed=function(a){var -d=a.split(aQ),c=i;for(var -b=0;b>>16;a=eE(a,0x85ebca6b|0);a^=a>>>13;a=eE(a,0xc2b2ae35|0);a^=a>>>16;return a}function -nx(a,b,c,d){var -j,k,l,h,g,f,e,i,m;h=b;if(h<0||h>bB)h=bB;g=a;f=c;j=[d];k=0;l=1;while(k0){e=j[k++];if(e&&e.caml_custom){if(cP[e.caml_custom]&&cP[e.caml_custom].hash){var -n=cP[e.caml_custom].hash(e);f=Z(f,n);g--}}else if(e -instanceof -Array&&e[0]===(e[0]|0))switch(e[0]){case -248:f=Z(f,e[2]);g--;break;case -250:j[--k]=e[1];break;default:if(nA(e[0]))break;var -o=e.length-1<<10|e[0];f=Z(f,o);for(i=1,m=e.length;i=h)break;j[l++]=e[i]}break}else if(eB(e)){f=Dz(f,e);g--}else if(eC(e)){f=DD(f,e);g--}else if(typeof -e==="string"){f=gS(f,e);g--}else if(e===(e|0)){f=Z(f,e+e+1);g--}else if(typeof -e==="number"){f=gR(f,e);g--}}f=DB(f);return f&0x3FFFFFFF}function -DE(a,b,c){if(!isFinite(a)){if(isNaN(a))return aE(f3);return aE(a>0?kk:"-infinity")}var -k=a==0&&1/a==-Infinity?1:a>=0?0:1;if(k)a=-a;var -e=0;if(a==0);else if(a<1)while(a<1&&e>-1022){a*=2;e--}else -while(a>=2){a/=2;e++}var -l=e<0?i:b0,f=i;if(k)f=bD;else -switch(c){case -43:f=b0;break;case -32:f=aH;break;default:break}if(b>=0&&b<13){var -h=Math.pow(2,b*4);a=Math.round(a*h)/h}var -d=a.toString(16);if(b>=0){var -j=d.indexOf(bk);if(j<0)d+=bk+b7(b,ao);else{var -g=j+1+b;if(d.length>24&a4,a>>31&aR)}function -DP(a){return a.toInt()}function -DK(a){return+a.isNeg()}function -DN(a){return a.neg()}function -DI(a,b){var -c=g1(a);if(c.signedconv&&DK(b)){c.sign=-1;b=DN(b)}var -d=i,h=DO(c.base),g="0123456789abcdef";do{var -f=b.udivmod(h);b=f.quotient;d=g.charAt(DP(f.modulus))+d}while(!DL(b));if(c.prec>=0){c.filler=aH;var -e=c.prec-d.length;if(e>0)d=b7(e,ao)+d}return gQ(c,d)}function -D$(a){var -b=0,e=l(a),c=10,d=1;if(e>0)switch(ax(a,b)){case -45:b++;d=-1;break;case -43:b++;d=1;break}if(b+1=48&&a<=57)return a-48;if(a>=65&&a<=90)return a-55;if(a>=97&&a<=122)return a-87;return-1}function -nz(a){var -h=D$(a),d=h[0],i=h[1],e=h[2],g=l(a),j=-1>>>0,f=d=e)ap(er);var -b=c;for(d++;d=e)break;b=e*b+c;if(b>j)ap(er)}if(d!=g)ap(er);b=i*b;if(e==10&&(b|0)!=b)ap(er);return b|0}function -gY(a){return a.slice(1)}function -b5(a,b,c){return a[av(b)].apply(a,gY(c))}function -DT(a,b){switch(b.length){case -1:return new -a;case -2:return new -a(b[1]);case -3:return new -a(b[1],b[2]);case -4:return new -a(b[1],b[2],b[3]);case -5:return new -a(b[1],b[2],b[3],b[4]);case -6:return new -a(b[1],b[2],b[3],b[4],b[5]);case -7:return new -a(b[1],b[2],b[3],b[4],b[5],b[6]);case -8:return new -a(b[1],b[2],b[3],b[4],b[5],b[6],b[7])}function -c(){return a.apply(this,gY(b))}c.prototype=a.prototype;return new -c}function -DU(a){var -c={};for(var -b=1;b>16;return c}function -DX(a,b,c){var -o=2,p=3,s=5,e=6,i=7,h=8,k=9,n=1,m=2,r=3,t=4,q=5;if(!a.lex_default){a.lex_base=cU(a[n]);a.lex_backtrk=cU(a[m]);a.lex_check=cU(a[q]);a.lex_trans=cU(a[t]);a.lex_default=cU(a[r])}var -f,d=b,l=cZ(c[o]);if(d>=0){c[i]=c[s]=c[e];c[h]=-1}else -d=-d-1;for(;;){var -g=a.lex_base[d];if(g<0)return-g-1;var -j=a.lex_backtrk[d];if(j>=0){c[i]=c[e];c[h]=j}if(c[e]>=c[p])if(c[k]==0)return-d-1;else -f=bB;else{f=l[c[e]];c[e]++}if(a.lex_check[g+f]==d)d=a.lex_trans[g+f];else -d=a.lex_default[d];if(d<0){c[e]=c[i];if(c[h]==-1)ap("lexing: empty token");else -return c[h]}else if(f==bB)c[k]=0}}function -bp(a,b){if(a<0)cM();var -a=a+1|0,c=new -Array(a);c[0]=0;for(var -d=1;d>>32-e,c)}function -g(a,b,c,d,e,f,g){return l(b&c|~b&d,a,b,e,f,g)}function -h(a,b,c,d,e,f,g){return l(b&d|c&~d,a,b,e,f,g)}function -i(a,b,c,d,e,f,g){return l(b^c^d,a,b,e,f,g)}function -j(a,b,c,d,e,f,g){return l(c^(b|~d),a,b,e,f,g)}return function(a,b){var -c=a[0],d=a[1],e=a[2],f=a[3];c=g(c,d,e,f,b[0],7,0xD76AA478);f=g(f,c,d,e,b[1],12,0xE8C7B756);e=g(e,f,c,d,b[2],17,0x242070DB);d=g(d,e,f,c,b[3],22,0xC1BDCEEE);c=g(c,d,e,f,b[4],7,0xF57C0FAF);f=g(f,c,d,e,b[5],12,0x4787C62A);e=g(e,f,c,d,b[6],17,0xA8304613);d=g(d,e,f,c,b[7],22,0xFD469501);c=g(c,d,e,f,b[8],7,0x698098D8);f=g(f,c,d,e,b[9],12,0x8B44F7AF);e=g(e,f,c,d,b[10],17,0xFFFF5BB1);d=g(d,e,f,c,b[11],22,0x895CD7BE);c=g(c,d,e,f,b[12],7,0x6B901122);f=g(f,c,d,e,b[13],12,0xFD987193);e=g(e,f,c,d,b[14],17,0xA679438E);d=g(d,e,f,c,b[15],22,0x49B40821);c=h(c,d,e,f,b[1],5,0xF61E2562);f=h(f,c,d,e,b[6],9,0xC040B340);e=h(e,f,c,d,b[11],14,0x265E5A51);d=h(d,e,f,c,b[0],20,0xE9B6C7AA);c=h(c,d,e,f,b[5],5,0xD62F105D);f=h(f,c,d,e,b[10],9,0x02441453);e=h(e,f,c,d,b[15],14,0xD8A1E681);d=h(d,e,f,c,b[4],20,0xE7D3FBC8);c=h(c,d,e,f,b[9],5,0x21E1CDE6);f=h(f,c,d,e,b[14],9,0xC33707D6);e=h(e,f,c,d,b[3],14,0xF4D50D87);d=h(d,e,f,c,b[8],20,0x455A14ED);c=h(c,d,e,f,b[13],5,0xA9E3E905);f=h(f,c,d,e,b[2],9,0xFCEFA3F8);e=h(e,f,c,d,b[7],14,0x676F02D9);d=h(d,e,f,c,b[12],20,0x8D2A4C8A);c=i(c,d,e,f,b[5],4,0xFFFA3942);f=i(f,c,d,e,b[8],11,0x8771F681);e=i(e,f,c,d,b[11],16,0x6D9D6122);d=i(d,e,f,c,b[14],23,0xFDE5380C);c=i(c,d,e,f,b[1],4,0xA4BEEA44);f=i(f,c,d,e,b[4],11,0x4BDECFA9);e=i(e,f,c,d,b[7],16,0xF6BB4B60);d=i(d,e,f,c,b[10],23,0xBEBFBC70);c=i(c,d,e,f,b[13],4,0x289B7EC6);f=i(f,c,d,e,b[0],11,0xEAA127FA);e=i(e,f,c,d,b[3],16,0xD4EF3085);d=i(d,e,f,c,b[6],23,0x04881D05);c=i(c,d,e,f,b[9],4,0xD9D4D039);f=i(f,c,d,e,b[12],11,0xE6DB99E5);e=i(e,f,c,d,b[15],16,0x1FA27CF8);d=i(d,e,f,c,b[2],23,0xC4AC5665);c=j(c,d,e,f,b[0],6,0xF4292244);f=j(f,c,d,e,b[7],10,0x432AFF97);e=j(e,f,c,d,b[14],15,0xAB9423A7);d=j(d,e,f,c,b[5],21,0xFC93A039);c=j(c,d,e,f,b[12],6,0x655B59C3);f=j(f,c,d,e,b[3],10,0x8F0CCC92);e=j(e,f,c,d,b[10],15,0xFFEFF47D);d=j(d,e,f,c,b[1],21,0x85845DD1);c=j(c,d,e,f,b[8],6,0x6FA87E4F);f=j(f,c,d,e,b[15],10,0xFE2CE6E0);e=j(e,f,c,d,b[6],15,0xA3014314);d=j(d,e,f,c,b[13],21,0x4E0811A1);c=j(c,d,e,f,b[4],6,0xF7537E82);f=j(f,c,d,e,b[11],10,0xBD3AF235);e=j(e,f,c,d,b[2],15,0x2AD7D2BB);d=j(d,e,f,c,b[9],21,0xEB86D391);a[0]=k(c,a[0]);a[1]=k(d,a[1]);a[2]=k(e,a[2]);a[3]=k(f,a[3])}}();function -Dl(a,b,c){var -e=a.len&bl,d=0;a.len+=c;if(e){var -f=64-e;if(c=64){a.b8.set(b.subarray(d,d+64),0);es(a.w,a.b32);c-=64;d+=64}if(c)a.b8.set(b.subarray(d,d+c),0)}function -Dj(a){var -c=a.len&bl;a.b8[c]=az;c++;if(c>56){for(var -b=c;b<64;b++)a.b8[b]=0;es(a.w,a.b32);for(var -b=0;b<56;b++)a.b8[b]=0}else -for(var -b=c;b<56;b++)a.b8[b]=0;a.b32[14]=a.len<<3;a.b32[15]=a.len>>29&0x1FFFFFFF;es(a.w,a.b32);var -e=new -Uint8Array(16);for(var -d=0;d<4;d++)for(var -b=0;b<4;b++)e[d*4+b]=a.w[d]>>8*b&0xFF;return e}function -Ef(a){return aw(cX(a,0,a.length))}function -DZ(a,b,c){var -d=Dk(),e=cZ(a);Dl(d,e.subarray(b,b+c),c);return Ef(Dj(d))}function -D0(a,b,c){return DZ(bo(a),b,c)}var -b8=new -Array(3);function -Eg(a){var -b=b8[a];if(b)b.close();delete -b8[a];return 0}var -aC=new -Array();function -bq(a){var -b=aC[a];if(!b.opened)r("Cannot flush a closed channel");if(!b.buffer||b.buffer_curr==0)return 0;if(b.output)b.output(cX(b.buffer,0,b.buffer_curr));else -b.file.write(b.offset,b.buffer,0,b.buffer_curr);b.offset+=b.buffer_curr;b.buffer_curr=0;return 0}function -nB(a){var -b=aC[a];if(b.opened){b.opened=false;Eg(b.fd);b.fd=-1;b.buffer=new -Uint8Array(0);b.buffer_curr=0;b.buffer_max=0}return 0}function -D2(){return 0}function -Ec(a){if(a.refill!=null){var -e=a.refill(),b=Ej(e);if(b.length==0)a.refill=null;else{if(a.buffer.length0){b.set(e.buffer.subarray(e.buffer_curr,e.buffer_curr+f),c);e.buffer_curr+=f;g=f}else{e.buffer_curr=0;e.buffer_max=0;Ec(e);var -f=e.buffer_max-e.buffer_curr;if(g>f)g=f;b.set(e.buffer.subarray(e.buffer_curr,e.buffer_curr+g),c);e.buffer_curr+=g}return g|0}function -D3(a,b,c,d){var -e=cZ(b);return D4(a,e,c,d)}function -Ei(a,b){if(b.name)try{var -d=require(f5),c=d.openSync(b.name,"rs");return new -aI(c,b)}catch(f){}return new -aI(a,b)}function -cL(a,b){ab.call(this,E(0));this.log=function(a){return 0};if(a==1&&typeof -console.log=="function")this.log=console.log;else if(a==2&&typeof -console.error=="function")this.log=console.error;else if(typeof -console.log=="function")this.log=console.log;this.flags=b}cL.prototype.length=function(){return 0};cL.prototype.write=function(a,b,c,d){if(this.log){if(d>0&&c>=0&&c+d<=b.length&&b[c+d-1]==10)d--;var -e=E(d);a7(gN(b),c,e,0,d);this.log(e.toUtf16());return 0}r(this.fd+ls)};cL.prototype.read=function(a,b,c,d){r(this.fd+": file descriptor is write only")};cL.prototype.close=function(){this.log=undefined};function -eG(a,b){if(b==undefined)b=b8.length;b8[b]=a;return b|0}function -nL(a,b,c){var -d={};while(b){switch(b[1]){case -0:d.rdonly=1;break;case -1:d.wronly=1;break;case -2:d.append=1;break;case -3:d.create=1;break;case -4:d.truncate=1;break;case -5:d.excl=1;break;case -6:d.binary=1;break;case -7:d.text=1;break;case -8:d.nonblock=1;break}b=b[2]}if(d.rdonly&&d.wronly)r(aJ(a)+gG);if(d.text&&d.binary)r(aJ(a)+gm);var -e=nR(a),f=e.device.open(e.rest,d);return eG(f,undefined)}(function(){function -a(a,b){return c0()?Ei(a,b):new -cL(a,b)}eG(a(0,{rdonly:1,altname:"/dev/stdin",isCharacterDevice:true}),0);eG(a(1,{buffered:2,wronly:1,isCharacterDevice:true}),1);eG(a(2,{buffered:2,wronly:1,isCharacterDevice:true}),2)}());function -nC(a){var -b=b8[a];if(b.flags.wronly)r(l8+a+" is writeonly");var -d=null,c={file:b,offset:b.flags.append?b.length():0,fd:a,opened:true,out:false,buffer_curr:0,buffer_max:0,buffer:new -Uint8Array(f9),refill:d};aC[c.fd]=c;return c.fd}function -gZ(a){var -b=b8[a];if(b.flags.rdonly)r(l8+a+" is readonly");var -d=b.flags.buffered!==undefined?b.flags.buffered:1,c={file:b,offset:b.flags.append?b.length():0,fd:a,opened:true,out:true,buffer_curr:0,buffer:new -Uint8Array(f9),buffered:d};aC[c.fd]=c;return c.fd}function -D5(){var -b=0;for(var -a=0;ae.buffer.length){var -g=new -Uint8Array(e.buffer_curr+b.length);g.set(e.buffer);e.buffer=g}switch(e.buffered){case -0:e.buffer.set(b,e.buffer_curr);e.buffer_curr+=b.length;bq(a);break;case -1:e.buffer.set(b,e.buffer_curr);e.buffer_curr+=b.length;if(e.buffer_curr>=e.buffer.length)bq(a);break;case -2:var -f=b.lastIndexOf(10);if(f<0){e.buffer.set(b,e.buffer_curr);e.buffer_curr+=b.length;if(e.buffer_curr>=e.buffer.length)bq(a)}else{e.buffer.set(b.subarray(0,f+1),e.buffer_curr);e.buffer_curr+=f+1;bq(a);e.buffer.set(b.subarray(f+1),e.buffer_curr);e.buffer_curr+=b.length-f-1}break}return 0}function -D6(a,b,c,d){var -b=cZ(b);return D7(a,b,c,d)}function -g0(a,b,c,d){return D6(a,bo(b),c,d)}function -nD(a,b){var -c=aw(String.fromCharCode(b));g0(a,c,0,1);return 0}function -nE(a,b){var -c=aC[a];c.name=b;return 0}function -nF(a,b){if(b==0)g3();return a%b}function -cV(a,b){return+(ev(a,b,false)!=0)}function -D9(a,b){a[0]=d2;a[1]=b;return 0}function -b6(a){if(a -instanceof -Array&&a[0]==a[0]>>>0)return a[0];else if(eB(a))return cG;else if(eC(a))return cG;else if(a -instanceof -Function||typeof -a=="function")return 247;else if(a&&a.caml_custom)return U;else -return cJ}function -Dp(a){var -c={};if(a)for(var -b=1;b=0)a=e;else -ap("caml_register_global: cannot locate "+d)}}Y[a+1]=b;if(c)Y[c]=b}function -g5(a,b){nG[aJ(a)]=b;return 0}function -g6(a,b){if(a===b)return 1;return 0}function -Ee(){L(f1)}function -n(a,b){if(b>>>0>=l(a))Ee();return ax(a,b)}function -c(a,b){return 1-g6(a,b)}function -cW(a){a.t&6&&cN(a);return aw(a.c)}function -Eh(){return 0x7FFFFFFF/4|0}function -Ea(){nI(Y.Not_found)}function -nK(a){var -b=nQ(av(a));if(b===undefined)Ea();return aE(b)}function -nM(){if(u.crypto)if(u.crypto.getRandomValues){var -a=u.crypto.getRandomValues(new -Int32Array(4));return[0,a[0],a[1],a[2],a[3]]}else if(u.crypto.randomBytes){var -a=new -Int32Array(u.crypto.randomBytes(16).buffer);return[0,a[0],a[1],a[2],a[3]]}var -b=new -Date().getTime(),c=b^0xffffffff*Math.random();return[0,c]}function -cY(a){var -b=1;while(a&&a.joo_tramp){a=a.joo_tramp.apply(null,a.joo_args);b++}return a}function -B(a,b){return{joo_tramp:a,joo_args:b}}function -O(a){{if(a -instanceof -Array)return a;var -b;if(u.RangeError&&a -instanceof -u.RangeError&&a.message&&a.message.match(/maximum call stack/i))b=Y.Stack_overflow;else if(u.InternalError&&a -instanceof -u.InternalError&&a.message&&a.message.match(/too much recursion/i))b=Y.Stack_overflow;else if(a -instanceof -u.Error&&br(f$))b=[0,br(f$),a];else -b=[0,Y.Failure,aE(String(a))];if(a -instanceof -u.Error)b.js_error=a;return b}}function -DS(a){switch(a[2]){case-8:case-11:case-12:return 1;default:return 0}}function -Dw(a){var -b=i;if(a[0]==0){b+=a[1][1];if(a.length==3&&a[2][0]==0&&DS(a[1]))var -e=a[2],f=1;else -var -f=2,e=a;b+=kM;for(var -d=f;df)b+=lD;var -c=e[d];if(typeof -c=="number")b+=c.toString();else if(c -instanceof -a6)b+=bX+c.toString()+bX;else if(typeof -c=="string")b+=bX+c.toString()+bX;else -b+=mS}b+=kZ}else if(a[0]==y)b+=a[1];return b}function -nv(a){if(a -instanceof -Array&&(a[0]==0||a[0]==y)){var -c=br(mZ);if(c)et(c,[a,false]);else{var -d=Dw(a),b=br(l_);if(b)et(b,[0]);console.error(gc+d);if(a.js_error)throw a.js_error}}else -throw a}function -Ed(){var -c=u.process;if(c&&c.on)c.on("uncaughtException",function(a,b){nv(a);c.exit(2)});else if(u.addEventListener)u.addEventListener(eh,function(a){if(a.error)nv(a.error)})}Ed();function -g(a,b){return(a.l>=0?a.l:a.l=a.length)==1?a(b):a8(a,[b])}function -q(a,b,c){return(a.l>=0?a.l:a.l=a.length)==2?a(b,c):a8(a,[b,c])}function -bz(a,b,c,d){return(a.l>=0?a.l:a.l=a.length)==3?a(b,c,d):a8(a,[b,c,d])}function -Di(a,b,c,d,e){return(a.l>=0?a.l:a.l=a.length)==4?a(b,c,d,e):a8(a,[b,c,d,e])}function -fX(a,b,c,d,e,f){return(a.l>=0?a.l:a.l=a.length)==5?a(b,c,d,e,f):a8(a,[b,c,d,e,f])}function -Dh(a,b,c,d,e,f,g,h){return(a.l>=0?a.l:a.l=a.length)==7?a(b,c,d,e,f,g,h):a8(a,[b,c,d,e,f,g,h])}var -Ep=undefined;Dx();var -eJ=[y,ne,-1],eK=[y,kh,-2],ah=[y,gL,-3],g9=[y,j5,-4],aF=[y,lJ,-7],g_=[y,m_,-8],g$=[y,kE,-9],v=[y,kR,-11],ha=[y,k8,-12],c8=[0,i,0,0,-1],c9=[0,i,1,0,0],Dg=[4,0,0,0,[12,45,[4,0,0,0,0]]],e5=[0,[11,'File "',[2,0,[11,'", line ',[4,0,0,0,[11,na,[4,0,0,0,[12,45,[4,0,0,0,[11,bV,[2,0,0]]]]]]]]]],'File "%s", line %d, characters %d-%d: %s'],iB=[0,"\0\0\xe5\xff\x11\0\xe8\xff\x03\0\xea\xff~\0\0\0q\0\0\0\x01\0\x01\0\x02\0{\0\xf3\xff\xf4\xff\xf5\xff\xf6\xff\xf7\xff\xf8\xff\xf9\xff\xfa\xff\xfb\xff\xfc\xff\x01\0\x02\0\0\0\0\0\x02\0\xff\xff\0\0\0\0\x03\0\xfe\xff\x03\0\x01\0\x0b\0\xfd\xff\xef\xff\x03\0\n\0\x0b\0\x05\0\xf2\xff\x14\0\x13\x000\0L\0C\0?\0K\0T\0\xf1\xffU\0S\0O\0U\0K\0G\0S\0T\0]\0\xf0\xff_\0]\0Y\0_\0U\0Q\0\x01\0 \0\x9b\0\xba\0\xd1\0\xdb\0\xe5\0\xf0\0\xfa\0\x12\x01B\x01\xec\xff\xeb\xff^\x01u\x01\x9b\x01\xb2\x015\0\xe7\xffX\x01\xfc\xff\xfd\xff\xfe\xff\x0e\0\xff\xff","\xff\xff\xff\xff\x1a\0\xff\xff\x16\0\xff\xff\x1a\0\x11\0\x11\0\x1a\0\x1a\0\x1a\0\x1a\0\x1a\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\0\x1a\0\x1a\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\0\xff\xff\x12\0\xff\xff\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff","\x01\0\0\0\xff\xff\0\0\xff\xff\0\0O\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffO\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xffV\0\0\0Y\0\0\0\0\0\0\0\xff\xff\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\x03\0\0\0\x04\0\x04\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\x06\0\x04\0\0\0\0\0\0\0\0\0\x13\0\x12\0\0\0\n\0\x0f\0\r\0G\0\x02\0\x07\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\x0e\0W\0\x11\0]\0\x10\0\xff\xffV\0\0\0\0\0\0\0\0\0F\0\0\0\0\0\0\0\x0b\0;\0M\0\0\0M\0\t\0&\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0\0\0\x15\0\0\0\x14\0\0\0\0\0\0\0E\0\"\0\x1e\x002\0F\0\x19\0\x1d\0!\0\f\0<\0+\0\x1f\0$\0\x18\x005\x003\0&\0\x1b\0 \0\x1a\0\x1c\0#\0%\0,\0*\0-\0\x17\0.\0\x16\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff/\0G\0P\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\x07\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\x000\0F\x001\0+\0&\x004\x006\x007\x008\x009\0:\x004\0?\0=\0>\0(\0@\0A\0B\0C\0D\0>\0H\0H\0H\0H\0H\0H\0H\0H\0H\0H\0\0\0F\0\0\0\0\0\0\0N\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\0\0\0\0\0\0\0\0\0'\0H\0H\0H\0H\0H\0H\0H\0H\0H\0H\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0K\0\0\0K\0I\0\x05\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0I\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0O\0\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0O\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff[\0\0\0Q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0O\0\0\0\0\0\0\0\0\0\0\0O\0\0\0\0\0\0\0O\0\0\0\0\0\0\0\0\0\0\0\xff\xff\0\0O\0\0\0\\\0\0\0O\0\0\0O\0R\0\0\0\0\0\0\0\0\0\0\0\0\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0\0\0\0\0\0\0\0\0\0\0\0\0N\0S\0S\0S\0S\0S\0S\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0T\0T\0T\0T\0T\0T\0\0\0\0\0\0\0S\0S\0S\0S\0S\0S\0\0\0\0\0\0\0\0\0\0\0\0\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0\0\0T\0T\0T\0T\0T\0T\0U\0U\0U\0U\0U\0U\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0O\0O\0O\0O\0O\0O\0\0\0\0\0\0\0U\0U\0U\0U\0U\0U\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0O\0O\0O\0O\0O\0O\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\x04\0\0\0\xff\xff\xff\xff\x04\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\0\0\x04\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\0\0\0\0\0\0\x07\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x02\0\0\0\\\0\0\0V\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\xff\xff\xff\xff\xff\xff\0\0\n\0F\0\xff\xffF\0\0\0E\0F\0F\0F\0F\0F\0F\0F\0F\0F\0F\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\t\0\x18\0\x19\0'\0\x07\0\0\0\x1c\0 \0\0\0\n\0*\0\x1e\0#\0\0\0\x0b\0\f\0\"\0\x1a\0\x1f\0\0\0\x1b\0\x18\0$\0(\0)\0,\0\0\0-\0\0\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0.\0\b\0\x06\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0/\0\b\x000\x001\x002\x003\x005\x006\x007\x008\x009\0:\0;\0<\0=\0\r\0?\0@\0A\0B\0C\0D\0G\0G\0G\0G\0G\0G\0G\0G\0G\0G\0\xff\xff\b\0\xff\xff\xff\xff\xff\xff\x06\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\r\0\xff\xff\xff\xff\xff\xff\xff\xff\r\0H\0H\0H\0H\0H\0H\0H\0H\0H\0H\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffI\0\xff\xffI\0H\0\0\0I\0I\0I\0I\0I\0I\0I\0I\0I\0I\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0K\0K\0K\0K\0K\0K\0K\0K\0K\0K\0H\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0M\0M\0M\0M\0M\0M\0M\0M\0M\0M\0N\0V\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffN\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0X\0\xff\xffO\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffN\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffN\0\xff\xff\xff\xff\xff\xffN\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x06\0\xff\xffN\0\xff\xffX\0\xff\xffN\0\xff\xffN\0N\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffR\0R\0R\0R\0R\0R\0R\0R\0R\0R\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffO\0R\0R\0R\0R\0R\0R\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffS\0S\0S\0S\0S\0S\0\xff\xff\xff\xff\xff\xffR\0R\0R\0R\0R\0R\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffT\0T\0T\0T\0T\0T\0T\0T\0T\0T\0\xff\xffS\0S\0S\0S\0S\0S\0T\0T\0T\0T\0T\0T\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffU\0U\0U\0U\0U\0U\0\xff\xff\xff\xff\xff\xffT\0T\0T\0T\0T\0T\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffU\0U\0U\0U\0U\0U\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffO\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffX\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",i,i,i,i,i,i],ct="lib/data_source/jellyfin_api.ml.Types.order",T="lib/data_source/jellyfin_api.ml.Types.sort",fO="lib/data_source/jellyfin_api.ml.Item.image_blur_hashes",p="lib/data_source/jellyfin_api.ml.Item.type_",j="lib/data_source/jellyfin_api.ml.Item.field",dN="lib/data_source/jellyfin_api.ml.Item.t",dO="lib/data_source/jellyfin_api.ml.Items.params",dR="lib/data_source/jellyfin_api.ml.Items.response",dW="lib/data_source/jellyfin_api.ml.Views.params",dX="lib/data_source/jellyfin_api.ml.Views.response",dY="lib/data_source/jellyfin_api.ml.Virtual_folders.virtual_folder",dZ="lib/db/stores.ml.Orderred_items.t",d0="lib/db/stores.ml.Items.sorts",d1="lib/db/stores.ml.Items.t",cy=gd,jO=[0,17,[0,16,[0,1,0]]];aD(11,ha,k8);aD(10,v,kR);aD(9,[y,kX,d$],kX);aD(8,g$,kE);aD(7,g_,m_);aD(6,aF,lJ);aD(5,[y,l1,-6],l1);aD(4,[y,ko,-5],ko);aD(3,g9,j5);aD(2,ah,gL);aD(1,eK,kh);aD(0,eJ,ne);var -n7="input",n5=[0,0,[0,7,0]],n3="output_substring",n1=[0,1,[0,3,[0,4,[0,7,0]]]],nX=bk,nU=f7,nV=gK,nT="char_of_int",n9="CamlinternalLazy.Undefined",ob="result is Error _",of=em,og="\\'",oh=ep,oi=ef,oj=ek,ok=d3,od="Char.chr",ot="List.init",op="hd",oz="String.blit / Bytes.blit_string",oy="Bytes.blit",ox="String.sub / Bytes.sub",oM="String.contains_from / Bytes.contains_from",oK="String.index_from / Bytes.index_from",oH=i,oE="String.concat",oR="Array.blit",oP="Array.init",oU="Lexing.lex_refill: cannot grow buffer",oY=eb,oZ=eb,o0=eb,o1=eb,o4="Stdlib.Queue.Empty",pf="Buffer.add_substring/add_subbytes",pd="Buffer.add: cannot grow buffer",pc=[0,lm,93,2],pb=[0,lm,94,2],o_="Buffer.sub",pq="%c",pr=m9,ps=lP,pt=j1,pu=nj,pv=lG,pw="%f",px="%B",py="%{",pz="%}",pA="%(",pB="%)",pC=ni,pD="%t",pE="%?",pF="%r",pG="%_r",pH=[0,a,850,23],pS=[0,a,814,21],pK=[0,a,815,21],pT=[0,a,818,21],pL=[0,a,819,21],pU=[0,a,822,19],pM=[0,a,823,19],pV=[0,a,826,22],pN=[0,a,827,22],pW=[0,a,831,30],pO=[0,a,832,30],pQ=[0,a,836,26],pI=[0,a,837,26],pR=[0,a,846,28],pJ=[0,a,847,28],pP=[0,a,851,23],q8=[0,a,1558,4],q9="Printf: bad conversion %[",q_=[0,a,1626,39],q$=[0,a,1649,31],ra=[0,a,1650,31],rb="Printf: bad conversion %_",rc=kf,rd=kU,re=kf,rf=kU,rj=[0,[11,"invalid box description ",[3,0,0]],"invalid box description %S"],ri=[0,0,4],q3=f3,q1="neg_infinity",q2=kk,q0=bk,qV=[0,fY],qJ="%+nd",qK="% nd",qM="%+ni",qN="% ni",qO="%nx",qP="%#nx",qQ="%nX",qR="%#nX",qS="%no",qT="%#no",qI="%nd",qL=nj,qU="%nu",qv="%+ld",qw="% ld",qy="%+li",qz="% li",qA="%lx",qB="%#lx",qC="%lX",qD="%#lX",qE="%lo",qF="%#lo",qu="%ld",qx=j1,qG="%lu",qh="%+Ld",qi="% Ld",qk="%+Li",ql="% Li",qm="%Lx",qn="%#Lx",qo="%LX",qp="%#LX",qq="%Lo",qr="%#Lo",qg="%Ld",qj=lG,qs="%Lu",p5="%+d",p6="% d",p8="%+i",p9="% i",p_="%x",p$="%#x",qa="%X",qb="%#X",qc="%o",qd="%#o",p4=f0,p7=lP,qe=ks,pi="@]",pj="@}",pk="@?",pl="@\n",pm="@.",pn="@@",po="@%",pp="@",pX="CamlinternalFormat.Type_mismatch",rp=i,rq=[0,[11,lD,[2,0,[2,0,0]]],", %s%s"],rY=[0,[11,gc,[2,0,[12,10,0]]],kw],rZ=[0,[11,"Fatal error in uncaught exception handler: exception ",[2,0,[12,10,0]]],"Fatal error in uncaught exception handler: exception %s\n"],rX="Fatal error: out of memory in uncaught exception handler",rU=[0,[11,gc,[2,0,[12,10,0]]],kw],rO=[0,[2,0,[12,10,0]],"%s\n"],rP=[0,[11,ke,0],ke],rF="Raised at",rG="Re-raised at",rH="Raised by primitive operation at",rI="Called from",rJ=" (inlined)",rL=i,rK=[0,[2,0,[12,32,[2,0,[11,' in file "',[2,0,[12,34,[2,0,[11,", line ",[4,0,0,0,[11,na,Dg]]]]]]]]]],'%s %s in file "%s"%s, line %d, characters %d-%d'],rM=[0,[2,0,[11," unknown location",0]],"%s unknown location"],ry="Out of memory",rz="Stack overflow",rA="Pattern matching failed",rB="Assertion failed",rC="Undefined recursive module",rs=[0,[12,40,[2,0,[2,0,[12,41,0]]]],"(%s%s)"],rt=i,ru=i,rv=[0,[12,40,[2,0,[12,41,0]]],"(%s)"],ro=[0,[4,0,0,0,0],f0],rm=[0,[3,0,0],"%S"],rn=mS,rR=[0,i,"(Cannot print locations:\n bytecode executable program file not found)","(Cannot print locations:\n bytecode executable program file appears to be corrupt)","(Cannot print locations:\n bytecode executable program file has wrong magic number)","(Cannot print locations:\n bytecode executable program file cannot be opened;\n -- too many open files. Try running with OCAMLRUNPARAM=b=2)"],r2="Fun.Finally_raised: ",r0="Stdlib.Fun.Finally_raised",r_="Random.int",r5="x",r$=[0,987910699,495797812,364182224,414272206,318284740,990407751,383018966,270373319,840823159,24560019,536292337,512266505,189156120,730249596,143776328,51606627,140166561,366354223,1003410265,700563762,981890670,913149062,526082594,1021425055,784300257,667753350,630144451,949649812,48546892,415514493,258888527,511570777,89983870,283659902,308386020,242688715,482270760,865188196,1027664170,207196989,193777847,619708188,671350186,149669678,257044018,87658204,558145612,183450813,28133145,901332182,710253903,510646120,652377910,409934019,801085050],sl="Hashtbl: unsupported hash table format",sf=i,s6=[3,0,3],s7=bk,s0=gg,s1="<\/",s2=i,sW=gg,sX=m1,sY=i,sU="\n",sO=i,sP=i,sQ=i,sR=i,sE=[0,i],sz=i,sA=i,sB=i,sC=i,sv=[0,i,0,i],sr="Stdlib.Format.String_tag",th="Jsoo_runtime.Error.Exn",ti=f$,tu=[0,"src/fut.ml",34,25],tG="info",tF=eh,tE="log",tC="search",tH="isSecureContext",tM="cache",tN="credentials",tO="headers",tP="integrity",tQ="keepalive",tR="method",tS="mode",tT="redirect",tU="referrer",tV="referrerPolicy",uo="open",uj="autoIncrement",uk="keyPath",ul="new object store with options:",ug="readonly",uh="readwrite",ui="readwriteflush",t_="next",t$="nextUnique",ua="prev",ub="prevUnique",uB="CCResult.Get_error",uN=[0,nc,j7,10],uK=[0,nc,89,10],uG=i,u3="expected low surrogate escape sequence (u)",u4="invalid low surrogate for code point beyond U+FFFF'",u5="expected low surrogate escape char (\\)",u6="invalid escape in string",u2="end of string in escape sequence",uX="' ",uY=" '",u1=i,uZ=bV,u0=" at offset ",uU=au,uV="invalid hex char in unicode escape: '",uR="Jsonxt__Lexxer_utils.Lex_error",u8=[6,1],u9=[6,0],u_=au,u$=cH,va=au,vb=cH,vc=au,vd=cH,ve=au,vf=cH,vg=[0,i],vh=au,vi=cH,vj="unexpected EOF in comment",vk="Jsonxt__Error_info.Json_error_info",vn=mJ,vo=mJ,vp="unexpected '{'",vq="unexpected '}'",vr="unexpected null value",vs="unexpected negative infinity",vt="unexpected Not-a-Number",vu="unexpected infinity",vv="unexpected end-of-input",vw="unexpected ','",vx="unexpected ':'",vy="unexpected '['",vz="unexpected ']'",vA="unexpected '<'",vB="unexpected '>'",vC="unexpected '('",vD="unexpected ')'",vE=au,vF="unexpected string '",vG=au,vH="unexpected large integer '",vI=au,vJ="unexpected integer '",vK=au,vL="unexpected float '",vM=au,vN="compliance error '",vO=au,vP=f7,vR=gK,vQ="unexpected boolean '",vW=[1,"Unexpected end-of-input"],vU=[0,gh,"tuple must have at least 2 elements"],vV=[0,gh,"variant must have at least a string"],vT="Jsonxt__Parser.Make(Compliance).Parse_error",v1=ep,v2=ef,v3=ek,v4=gf,v5=d3,v6=gu,vZ=em,v0=go,v9=f_,v_=a2,v$=[0,[12,gi,[17,[0,mr,1,0],[15,[17,[0,mz,1,-2],[12,gw,0]]]]],"{@;<1 0>%a@;<1 -2>}"],wa="{}",wb=a2,wc=[0,[12,91,[17,[0,mr,1,0],[18,[1,[0,[11,l$,0],l$]],[15,[17,0,[17,[0,mz,1,-2],[12,93,0]]]]]]],"[@;<1 0>@[%a@]@;<1 -2>]"],wd="[]",we="()",wf=a2,wg=[0,[12,40,[17,[0,"@,",0,0],[15,[17,[0,"@;<0 -2>",0,-2],[12,41,0]]]]],"(@,%a@;<0 -2>)"],wh=[0,[12,60,[18,[1,[0,[11,b2,0],b2]],[2,0,[11,bV,[15,[17,0,[12,62,0]]]]]]],"<@[%s: %a@]>"],wi=[0,[12,60,[2,0,[12,62,0]]],"<%s>"],wj=[0,[18,[1,[0,[11,b2,0],b2]],[2,0,[11,bV,[15,[17,0,0]]]]],"@[%s: %a@]"],wm=[0,[15,[17,2,0]],"%a@?"],wl=[0,[15,0],ni],wk=[0,[18,[1,[0,[11,b2,0],b2]],[15,[17,0,0]]],"@[%a@]"],v8=[0,[2,0,[17,[0,"@ ",1,0],0]],"%s@ "],wp="Expected `String",wo="Expected `Assoc",wr="{",ws="}",wt="Null",wu=cF,wv="NAN",ww=cK,wx="end-of-file",wy=a2,wz=en,wA="[",wB="]",wC=m1,wD=gg,wE=kM,wF=kZ,wG=au,wH="input error '",wI=f7,wJ=gK,wN=ms,wO=[0,0],wP=[1,mN],wL=ms,wM=[1,mN],w3=i,w4=i,w0=f_,w1=a2,w2=a2,wZ=en,wT=ep,wU=ef,wV=ek,wW=gf,wX=d3,wY=gu,wR=em,wS=go,xc=f_,xe=a2,xd=i,xg=a2,xf=i,w8=ep,w9=ef,w_=ek,w$=gf,xa=d3,xb=gu,w6=em,w7=go,xM=[0,aA,cK],xN=[0,aA,cF],xL=[0,aA,d7],xK=d7,xI=cF,xJ=cK,xH=[0,0],xF=bX,xG=bX,xE="floatlit not supported in yojson safe mode",xD=d7,xB=cF,xC=cK,xA=[0,0],xz=gr,xy=gr,xx=gn,xw=gn,xv="floatlit not supported in yojson basic mode",xu=gr,xt=gn,xs=d7,xq=cF,xr=cK,xp=[0,0],xo=[5,"Integer out of bounds"],xk=", line",xl="File ",xn="Line",xm=[0,[2,0,[12,32,[4,0,0,0,[11," chars ",[4,0,0,0,[12,45,[4,0,0,0,[11,bV,0]]]]]]]],"%s %d chars %d-%d: "],xh="Jsonxt__Yojson.Json_error",xR=[1,[0,3854881,"Failed to unmarshal data"]],xZ="list_of_yojson: list needed",xY="int_of_yojson: integer needed",xX="string_of_yojson: string needed",xW="bool_of_yojson: true/false needed",xU="Ppx_yojson_conv_lib__Yojson_conv.Of_yojson_error",x9=aH,x$="_of_yojson: list instead of atom for record expected",x_=[0,[2,0,[11,"_of_yojson: the following record elements were undefined: ",[2,0,0]]],"%s_of_yojson: the following record elements were undefined: %s"],x7="extra fields",x6="duplicate fields",x4=aH,x5=[0,[2,0,[11,"_of_yojson: ",[2,0,[11,bV,[2,0,0]]]]],"%s_of_yojson: %s: %s"],x3="_of_yojson: unexpected variant constructor",x2="_of_yojson: expected a variant type, saw an empty list",x1="_of_yojson: expected a variant type, saw a nested list",x0="_of_yojson: this constructor does not take arguments",Bi="An error occured while decoding response: ",Bd=[0,[11,", Token=",[3,0,0]],", Token=%S"],Bg=i,Be="abcdef",Bf=[0,[11,'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="',[2,0,[11,'", Version="0.1"',[2,0,0]]]],'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="%s", Version="0.1"%s'],A$=gb,Ba=m6,Bb=ee,A7="item_id",A8="locations",A9=gk,A5=[0,[11,"/Users/",[2,0,[11,"/Views",0]]],"/Users/%s/Views"],A0=d5,A1=eg,A2=d6,AW=kQ,AX=kc,AY=gd,AU=mk,AS="include_external_content",AQ="/Items",AN=d5,AO=eg,AP=d6,AK=kQ,AL=kc,AM=gd,Ay=kx,Az=k1,AA=gI,AB=mv,AC=l7,AD=mo,AE=lA,AF=mD,AG=gj,AH=jX,AI=mQ,AJ=lf,Ar="enable_images",As="enable_user_data",At=gI,Au="sort_by",Av="include_item_types",Aw=gj,Ax="user_id",Aq=jV,Ah=mY,Ai=lk,Aj=j6,Ak=d_,Al=mf,Am=ea,An=k$,Ao=bW,Ap=ee,Ac="type_",Ad="image_blur_hashes",Ae="server_id",Af=cE,Ag=gk,Ab=[0,"lib/data_source/jellyfin_api.ml",193,64],zc=[0,f,[0,[0,d,k7],0]],zd=[0,f,[0,[0,d,mX],0]],ze=[0,f,[0,[0,d,k2],0]],zf=[0,f,[0,[0,d,lT],0]],zg=[0,f,[0,[0,d,kv],0]],zh=[0,f,[0,[0,d,ly],0]],zi=[0,f,[0,[0,d,kn],0]],zj=[0,f,[0,[0,d,k_],0]],zk=[0,f,[0,[0,d,mn],0]],zl=[0,f,[0,[0,d,k6],0]],zm=[0,f,[0,[0,d,ei],0]],zn=[0,f,[0,[0,d,nb],0]],zo=[0,f,[0,[0,d,mb],0]],zp=[0,f,[0,[0,d,j9],0]],zq=[0,f,[0,[0,d,lY],0]],zr=[0,f,[0,[0,d,lH],0]],zs=[0,f,[0,[0,d,j_],0]],zt=[0,f,[0,[0,d,mT],0]],zu=[0,f,[0,[0,d,j8],0]],zv=[0,f,[0,[0,d,lw],0]],zw=[0,f,[0,[0,d,lQ],0]],zx=[0,f,[0,[0,d,mc],0]],zy=[0,f,[0,[0,d,m5],0]],zz=[0,f,[0,[0,d,mF],0]],zA=[0,f,[0,[0,d,mj],0]],zB=[0,f,[0,[0,d,lW],0]],zC=[0,f,[0,[0,d,jU],0]],zD=[0,f,[0,[0,d,kB],0]],zE=[0,f,[0,[0,d,lF],0]],zF=[0,f,[0,[0,d,m$],0]],zG=[0,f,[0,[0,d,jR],0]],zH=[0,f,[0,[0,d,lX],0]],zI=[0,f,[0,[0,d,mu],0]],zJ=[0,f,[0,[0,d,d_],0]],zK=[0,f,[0,[0,d,ea],0]],zL=[0,f,[0,[0,d,kW],0]],zM=[0,f,[0,[0,d,kY],0]],zN=[0,f,[0,[0,d,m0],0]],zO=[0,f,[0,[0,d,lx],0]],zP=[0,f,[0,[0,d,mg],0]],zQ=[0,f,[0,[0,d,ld],0]],zR=[0,f,[0,[0,d,m4],0]],zS=[0,f,[0,[0,d,my],0]],zT=[0,f,[0,[0,d,kz],0]],zU=[0,f,[0,[0,d,mA],0]],zV=[0,f,[0,[0,d,ng],0]],zW=[0,f,[0,[0,d,lO],0]],zX=[0,f,[0,[0,d,ln],0]],zY=[0,f,[0,[0,d,kl],0]],zZ=[0,f,[0,[0,d,jW],0]],z0=[0,f,[0,[0,d,k3],0]],z1=[0,f,[0,[0,d,bW],0]],z2=[0,f,[0,[0,d,m3],0]],z3=[0,f,[0,[0,d,k0],0]],z4=[0,f,[0,[0,d,m7],0]],z5=[0,f,[0,[0,d,mC],0]],z6=[0,f,[0,[0,d,k5],0]],z7=[0,f,[0,[0,d,kA],0]],z8=[0,f,[0,[0,d,mH],0]],z9=[0,f,[0,[0,d,nf],0]],z_=[0,f,[0,[0,d,ml],0]],yB=[0,f,[0,[0,d,mR],0]],yC=[0,f,[0,[0,d,gz],0]],yD=[0,f,[0,[0,d,mh],0]],yE=[0,f,[0,[0,d,lB],0]],yF=[0,f,[0,[0,d,kD],0]],yG=[0,f,[0,[0,d,kT],0]],yH=[0,f,[0,[0,d,l0],0]],yI=[0,f,[0,[0,d,lh],0]],yJ=[0,f,[0,[0,d,kj],0]],yK=[0,f,[0,[0,d,mm],0]],yL=[0,f,[0,[0,d,mp],0]],yM=[0,f,[0,[0,d,mU],0]],yN=[0,f,[0,[0,d,mV],0]],yO=[0,f,[0,[0,d,kp],0]],yP=[0,f,[0,[0,d,kt],0]],yQ=[0,f,[0,[0,d,mL],0]],yR=[0,f,[0,[0,d,lb],0]],yS=[0,f,[0,[0,d,li],0]],yT=[0,f,[0,[0,d,kd],0]],yU=[0,f,[0,[0,d,lS],0]],yV=[0,f,[0,[0,d,jZ],0]],yW=[0,f,[0,[0,d,l9],0]],yX=[0,f,[0,[0,d,l4],0]],yY=[0,f,[0,[0,d,ki],0]],yZ=[0,f,[0,[0,d,lr],0]],y0=[0,f,[0,[0,d,nd],0]],y1=[0,f,[0,[0,d,mG],0]],y2=[0,f,[0,[0,d,kK],0]],y3=[0,f,[0,[0,d,kr],0]],y4=[0,f,[0,[0,d,lI],0]],y5=[0,f,[0,[0,d,j4],0]],y6=[0,f,[0,[0,d,lo],0]],y7=[0,f,[0,[0,d,mq],0]],y8=[0,f,[0,[0,d,ku],0]],y9=[0,f,[0,[0,d,kC],0]],y_=[0,f,[0,[0,d,lE],0]],y$=[0,f,[0,[0,d,la],0]],yA=mP,yh=[0,f,[0,[0,d,kI],0]],yi=[0,f,[0,[0,d,kJ],0]],yj=[0,f,[0,[0,d,lu],0]],yk=[0,f,[0,[0,d,nk],0]],yl=[0,f,[0,[0,d,mI],0]],ym=[0,f,[0,[0,d,kH],0]],yn=[0,f,[0,[0,d,ei],0]],yo=[0,f,[0,[0,d,lz],0]],yp=[0,f,[0,[0,d,lL],0]],yq=[0,f,[0,[0,d,l3],0]],yr=[0,f,[0,[0,d,lt],0]],ys=[0,f,[0,[0,d,bW],0]],yt=[0,f,[0,[0,d,mt],0]],yu=[0,f,[0,[0,d,ka],0]],yv=[0,f,[0,[0,d,jT],0]],yd=[0,f,[0,[0,d,lC],0]],ye=[0,f,[0,[0,d,kF],0]],BW=[0,cI,119,13],BV=[0,cI,kb,19],BS=[0,cI,j$,13],BR=[0,cI,96,19],BL=[0,cI,66,13],BJ=bZ,BK=gF,BG=bZ,BH=gF,BC=f6,BD=gC,BE=ga,By=f6,Bz=gC,BA=ga,Bt=bZ,Bu=cE,Bq=bZ,Br=cE,Bv=[0,cE],Bw=jS,BM=[0,mi],BN=[0,"item.Name"],BO=[0,mW],BP=[0,"sorts.date_added"],BQ=[0,mW],BT=[0,mi],BU=[0,"item.Type"],BX=[0,"sorts.sort_name"],BY=[0,"item.CollectionType"],BZ=[0,gb],B0="virtual_folders",B3=jS,B7="items_by_view_and_kind",B$="items_by_id",Cd="items_by_type_and_name",CK=[0,1,0],CD=[0,6,0],CE=[0,0],CF=[0,33,[0,34,0]],CH=i,CG=[0,1],CI=[0,"lib/db/sync.ml",313,6],CA=[0,en,0],CB=lR,CC="Fetching items",Cz=[0,1],Cw=[0,34,0],Cv=[0,33,0],Cs=[0,1],Ct=[0,0],Cm=[0,0],Cn=[0,2],Ci=[0,6,0],Cj=[0,0],Ck=[0,0],Cp=[0,0,0],CO=lR,CP="Upgrading indexed_db schema from version",CQ=[0,0],CR=[0,0],CS=[0,0],CT="Stores created:",Dd="An error occured while loading item",C$=nh,Da=lv,Db=[0,0],Dc=[0,1],C_="Item should exists.",C6=nh,C7=lv,C8=[0,0],C9=[0,1],C1=[0,[2,0,0],m9],C2=gz,C3="Audio\0",C4=[0,0],C5=[0,1],C0=[0,0],CY="tracks",CZ=[0,1];function -F(a){if(typeof -a==="number")return 0;switch(a[0]){case -0:return[0,F(a[1])];case -1:return[1,F(a[1])];case -2:return[2,F(a[1])];case -3:return[3,F(a[1])];case -4:return[4,F(a[1])];case -5:return[5,F(a[1])];case -6:return[6,F(a[1])];case -7:return[7,F(a[1])];case -8:var -c=a[1];return[8,c,F(a[2])];case -9:var -b=a[1];return[9,b,b,F(a[3])];case -10:return[10,F(a[1])];case -11:return[11,F(a[1])];case -12:return[12,F(a[1])];case -13:return[13,F(a[1])];default:return[14,F(a[1])]}}function -$(a,b){if(typeof -a==="number")return b;switch(a[0]){case -0:return[0,$(a[1],b)];case -1:return[1,$(a[1],b)];case -2:return[2,$(a[1],b)];case -3:return[3,$(a[1],b)];case -4:return[4,$(a[1],b)];case -5:return[5,$(a[1],b)];case -6:return[6,$(a[1],b)];case -7:return[7,$(a[1],b)];case -8:var -c=a[1];return[8,c,$(a[2],b)];case -9:var -d=a[2],e=a[1];return[9,e,d,$(a[3],b)];case -10:return[10,$(a[1],b)];case -11:return[11,$(a[1],b)];case -12:return[12,$(a[1],b)];case -13:return[13,$(a[1],b)];default:return[14,$(a[1],b)]}}function -C(a,b){if(typeof -a==="number")return b;switch(a[0]){case -0:return[0,C(a[1],b)];case -1:return[1,C(a[1],b)];case -2:var -c=a[1];return[2,c,C(a[2],b)];case -3:var -d=a[1];return[3,d,C(a[2],b)];case -4:var -e=a[3],f=a[2],g=a[1];return[4,g,f,e,C(a[4],b)];case -5:var -h=a[3],i=a[2],j=a[1];return[5,j,i,h,C(a[4],b)];case -6:var -k=a[3],l=a[2],m=a[1];return[6,m,l,k,C(a[4],b)];case -7:var -n=a[3],o=a[2],p=a[1];return[7,p,o,n,C(a[4],b)];case -8:var -q=a[3],r=a[2],s=a[1];return[8,s,r,q,C(a[4],b)];case -9:var -t=a[1];return[9,t,C(a[2],b)];case -10:return[10,C(a[1],b)];case -11:var -u=a[1];return[11,u,C(a[2],b)];case -12:var -v=a[1];return[12,v,C(a[2],b)];case -13:var -w=a[2],x=a[1];return[13,x,w,C(a[3],b)];case -14:var -y=a[2],z=a[1];return[14,z,y,C(a[3],b)];case -15:return[15,C(a[1],b)];case -16:return[16,C(a[1],b)];case -17:var -A=a[1];return[17,A,C(a[2],b)];case -18:var -B=a[1];return[18,B,C(a[2],b)];case -19:return[19,C(a[1],b)];case -20:var -D=a[2],E=a[1];return[20,E,D,C(a[3],b)];case -21:var -F=a[1];return[21,F,C(a[2],b)];case -22:return[22,C(a[1],b)];case -23:var -G=a[1];return[23,G,C(a[2],b)];default:var -H=a[2],I=a[1];return[24,I,H,C(a[3],b)]}}function -eH(a){return[0,a]}function -c1(a){return a[1]}function -eI(a,b,c){return a[1]===b?(a[1]=c,1):0}function -c2(a){throw h([0,ah,a],1)}function -D(a){throw h([0,g9,a],1)}function -c3(a){return 0<=a?a:-a|0}var -eL=2147483647;function -k(a,b){var -c=l(a),e=l(b),d=E(c+e|0);aS(a,0,d,0,c);aS(b,0,d,c,e);return cW(d)}function -eM(a){if(0<=a&&U>=a)return a;return D(nT)}function -c4(a){return a?nU:nV}function -aT(a){return i+a}function -nW(b){var -e=l(b);return function(a){var -c=a;for(;;){if(e<=c)return k(b,nX);var -d=n(b,c);a:{if(48<=d){if(58>d)break a}else if(45===d)break a;return b}var -c=c+1|0}}(0)}function -c5(a){return nW(cQ("%.12g",a))}nC(0);var -nY=gZ(1),aK=gZ(2);function -nZ(a,b,c){var -d=gZ(nL(c,a,b));nE(d,c);return d}function -bs(a,b){return g0(a,b,0,l(b))}function -hb(a){bq(a);nB(a);return}function -n4(a,b,c){var -d=nC(nL(c,a,b));nE(d,c);return d}function -hc(a){return n4(n5,0,a)}function -hd(a){bs(aK,a);nD(aK,10);return bq(aK)}var -eN=eH(function(a){return function(a){var -b=a;for(;;){if(!b)return 0;var -d=b[2],e=b[1];try{bq(e)}catch(f){var -c=O(f);if(c[1]!==eK)throw h(c,0)}var -b=d}}(D5(0))});function -eO(a){return g(c1(eN),0)}g5(l_,eO);function -nS(a,b){return DV(a,b)?a:b}function -n0(a){return nZ(n1,438,a)}function -n2(a,b,c,d){if(0<=c&&0<=d&&(l(b)-d|0)>=c)return g0(a,b,c,d);return D(n3)}function -n6(a,b,c,d){if(0<=c&&0<=d&&(_(b)-d|0)>=c)return D3(a,b,c,d);return D(n7)}function -n8(c){for(;;){var -d=eH(1),a=c1(eN);let -e=d,f=a;var -b=1-eI(eN,a,function(a){if(eI(e,1,0))g(c,0);return g(f,0)});if(!b)return b}}function -he(a){return nB(a)}function -b_(a,b){return nD(a,b)}function -c6(a){return bq(a)}var -eP=Eh(0),bF=(4*eP|0)-1|0;function -hf(a){return 1-(typeof -a==="number"?1:0)}var -n_=[y,n9,aB(0)];function -n$(a){throw h(n_,1)}function -oa(a){var -d=a[1];a[1]=n$;try{var -c=g(d,0);D9(a,c);return c}catch(f){var -b=O(f);a[1]=function(a){throw h(b,0)};throw h(b,0)}}function -eQ(a,b){return b?[0,g(a,b[1])]:0}function -hg(a){return 0===a[0]?a[1]:D(ob)}function -oc(a,b){return 0===b[0]?[0,g(a,b[1])]:b}function -H(a){if(0<=a&&U>=a)return a;return D(od)}function -on(a,b){return a-b|0}function -hh(a,b){return 0===on(a,b)?1:0}function -oe(a){a:{if(40<=a){if(92===a)return of;if(bU>a)break a}else{if(32<=a){if(39<=a)return og;break a}if(14>a)switch(a){case -8:return oh;case -9:return oi;case -10:return oj;case -13:return ok}}var -b=E(4);w(b,0,92);w(b,1,48+(a/bY|0)|0);w(b,2,48+((a/10|0)%10|0)|0);w(b,3,48+(a%10|0)|0);return cW(b)}var -c=E(1);w(c,0,a);return cW(c)}function -ol(a){return 25>>0?a:a+32|0}function -om(a){return 25>>0?a:a+lc|0}function -oq(a,b){var -c=a,d=b;for(;;){if(!c)return d;var -e=[0,c[1],d],c=c[2],d=e}}function -ai(a){return oq(a,0)}function -hi(a,b,c){if(b<=a)return 0;var -d=g(c,a);return[0,d,hi(a+1|0,b,c)]}function -oo(a){return a?a[1]:c2(op)}function -or(a,b,c,d){var -f=a,e=b;for(;;){if(c<=e)return f;var -f=[0,g(d,e),f],e=e+1|0}}function -bG(a,b){if(!b)return 0;var -c=b[2],d=g(a,b[1]);return[0,d,bG(a,c)]}function -hj(e,b){return function(a,b){var -d=a,c=b;for(;;){if(!c)return d;var -f=c[2],d=[0,g(e,c[1]),d],c=f}}(0,b)}function -a$(a,b){var -c=b;for(;;){if(!c)return 0;var -d=c[2];g(a,c[1]);var -c=d}}function -hk(a,b){var -c=b;for(;;){if(!c)return 0;var -e=c[2],d=g(a,c[1]);if(d)return d;var -c=e}}function -os(a,b){return 0<=a?50=b){var -d=E(c);a7(a,b,d,0,c);return d}return D(ox)}function -b$(a,b,c){return cW(eR(a,b,c))}function -ca(a,b,c,d,e){if(0<=e&&0<=b&&(_(a)-e|0)>=b&&0<=d&&(_(c)-e|0)>=d){a7(a,b,c,d,e);return}return D(oy)}function -aU(a,b,c,d,e){if(0<=e&&0<=b&&(l(a)-e|0)>=b&&0<=d&&(_(c)-e|0)>=d){aS(a,b,c,d,e);return}return D(oz)}function -hp(a,b){var -d=_(b);if(0===d)return b;var -e=E(d),f=d-1|0,h=0;if(f>=0){var -c=h;for(;;){w(e,c,g(a,gO(b,c)));var -i=c+1|0;if(f===c)break;var -c=i}}return e}function -c7(a){return bo(a)}function -ac(a){return cW(a)}function -ow(a){return ho(bo(a))}function -oA(a){var -b=[0,0],j=_(a)-1|0,l=0;if(j>=0){var -g=l;for(;;){var -e=gO(a,g);a:{b:{c:{if(32<=e){var -h=e-34|0;if(58>>0){if(93<=h)break c}else if(56>>0)break b;var -i=1;break a}if(11<=e){if(13===e)break b}else if(8<=e)break b}var -i=4;break a}var -i=2}b[1]=b[1]+i|0;var -o=g+1|0;if(j===g)break;var -g=o}}if(b[1]===_(a))return ho(a);var -c=E(b[1]);b[1]=0;var -k=_(a)-1|0,m=0;if(k>=0){var -f=m;for(;;){var -d=gO(a,f);a:{b:{c:{if(35<=d){if(92!==d){if(bU<=d)break c;break b}}else{if(32>d){if(14<=d)break c;switch(d){case -8:w(c,b[1],92);b[1]++;w(c,b[1],98);break a;case -9:w(c,b[1],92);b[1]++;w(c,b[1],j7);break a;case -10:w(c,b[1],92);b[1]++;w(c,b[1],kb);break a;case -13:w(c,b[1],92);b[1]++;w(c,b[1],114);break a;default:break c}}if(34>d)break b}w(c,b[1],92);b[1]++;w(c,b[1],d);break a}w(c,b[1],92);b[1]++;w(c,b[1],48+(d/bY|0)|0);b[1]++;w(c,b[1],48+((d/10|0)%10|0)|0);b[1]++;w(c,b[1],48+(d%10|0)|0);break a}w(c,b[1],d)}b[1]++;var -n=f+1|0;if(k===f)break;var -f=n}}return c}function -oB(a){return hp(om,a)}function -oC(a){return hp(ol,a)}function -ay(a,b){return ac(bt(a,b))}function -eS(a,b,c){return ac(eR(c7(a),b,c))}function -oD(a,b){return b<=a?a:D(oE)}function -oF(a,b,c){var -e=a,d=c;for(;;){if(!d)return e;var -f=d[1];if(!d[2])return l(f)+e|0;var -g=d[2],e=oD((l(f)+b|0)+e|0,e),d=g}}function -oG(a,b,c,d,e){var -h=b,g=e;for(;;){if(!g)return a;var -f=g[1];if(!g[2]){aS(f,0,a,h,l(f));return a}var -i=g[2];aS(f,0,a,h,l(f));aS(c,0,a,h+l(f)|0,d);var -h=(h+l(f)|0)+d|0,g=i}}function -hq(a,b){if(!b)return oH;var -c=l(a);return ac(oG(E(oF(0,c,b)),0,a,c,b))}function -hr(a,b,c,d){var -e=c;for(;;){if(b<=e)throw h(aF,1);if(ax(a,e)===d)return e;var -e=e+1|0}}function -oL(a,b,c){var -d=l(a);if(0<=b&&d>=b)try{hr(a,d,b,c);var -f=1;return f}catch(f){var -e=O(f);if(e===aF)return 0;throw h(e,0)}return D(oM)}function -eT(a,b){return oL(a,0,b)}function -hs(a){return ac(oC(c7(a)))}function -ht(a,b){return g6(a,b)}function -oI(a){return function(a,b,c){var -d=c;for(;;){if(b<=d)return a;var -e=ax(a,d)+lc|0;a:{if(59>>0){if(33>>0)break a}else if(2===e)break a;var -d=d+1|0;continue}return ac(oA(c7(a)))}}(a,l(a),0)}function -oJ(a,b,c){var -d=l(a);if(0<=b&&d>=b)return hr(a,d,b,c);return D(oK)}function -oN(a){return ac(oB(c7(a)))}function -oO(a,b){return aq(a,b)}function -hu(a,b){if(0===a)return[0];if(0>a)return D(oP);var -d=bp(a,g(b,0)),e=a-1|0,f=1;if(e>=1){var -c=f;for(;;){d[1+c]=g(b,c);var -h=c+1|0;if(e===c)break;var -c=h}}return d}function -eU(a,b){var -d=b.length-1;if(0===d)return[0];var -e=bp(d,g(a,b[1])),f=d-1|0,h=1;if(f>=1){var -c=h;for(;;){e[1+c]=g(a,b[1+c]);var -i=c+1|0;if(f===c)break;var -c=i}}return e}function -eV(e){return function(a,b){var -c=a,d=b;for(;;){if(0>c)return d;var -f=[0,e[1+c],d],c=c-1|0,d=f}}(e.length-1-1|0,0)}function -oS(a,b){var -d=a,c=b;for(;;){if(!c)return d;var -d=d+1|0,c=c[2]}}function -hv(a){if(!a)return[0];var -b=a[2],c=a[1],e=bp(oS(0,a),c);return function(a,b){var -d=a,c=b;for(;;){if(!c)return e;var -f=c[2];e[1+d]=c[1];var -d=d+1|0,c=f}}(1,b)}function -oQ(a,b,c,d,e){if(0<=e&&0<=b&&(a.length-1-e|0)>=b&&0<=d&&(c.length-1-e|0)>=d){Dm(a,b,c,d,e);return}return D(oR)}function -oT(a,b,c){var -h=q(a,b,_(b)),e=0=0){var -d=m;for(;;){var -j=t(g,d)[1+d];if(0<=j)t(g,d)[1+d]=j-f|0;var -n=d+1|0;if(i===d)break;var -d=n}}}ca(b,0,c[2],c[3],e);c[3]=c[3]+e|0;return 0}function -oV(a,b){var -c=a?a[1]:1,d=c?c9:c8,e=c?c9:c8,f=E(d4);return[0,function(a){return oT(b,f,a)},E(bT),0,0,0,0,0,0,0,[0],e,d]}function -hw(a,c){return oV(a,function(a,b){return n6(c,a,0,b)})}function -hx(a,b){var -c=a?a[1]:1,d=c?c9:c8,e=c?c9:c8;return[0,function(a){a[9]=1;return 0},ow(b),l(b),0,0,0,0,0,1,[0],e,d]}function -bu(a){return b$(a[2],a[5],a[6]-a[5]|0)}function -oW(a,b,c){return b$(a[2],b,c-b|0)}function -oX(k){function -h(a){return a?a[4]:0}function -d(a,b,c){var -d=a?a[4]:0,e=c?c[4]:0,f=e<=d?d+1|0:e+1|0;return[0,a,b,c,f]}function -i(a,b,c){var -g=a?a[4]:0,i=c?c[4]:0;if((i+2|0)=i){var -v=i<=g?g+1|0:i+1|0;return[0,a,b,c,v]}if(!c)return D(o1);var -k=c[3],m=c[2],f=c[1],r=h(f);if(r<=h(k))return d(d(a,b,f),m,k);if(!f)return D(o0);var -s=f[2],t=f[1],u=d(f[3],m,k);return d(d(a,b,t),s,u)}function -c(a,b){if(!b)return[0,0,a,0,1];var -d=b[3],e=b[2],f=b[1],g=q(k[1],a,e);if(0===g)return b;if(0<=g){var -h=c(a,d);return d===h?b:i(f,e,h)}var -j=c(a,f);return f===j?b:i(j,e,d)}function -e(a,b){var -c=b;for(;;){if(!c)return;var -d=c[3],f=c[2];e(a,c[1]);g(a,f);var -c=d}}function -f(a,b){var -d=a,c=b;for(;;){if(!c)return d;var -e=c[2],g=c[1],d=[0,e,f(d,c[3])],c=g}}function -j(a,b,c){var -d=c;for(;;){if(!d)return;var -e=d[3],f=d[1],d=g(b,d[2])?e:f}}return[0,,,,c,,,,,,,,,,,,,0,,,,,,,,,,,,,,e,,,,,,,,function(a){return f(0,a)},,,,,,,,,,,function(a,b){var -c=b;for(;;){if(!c)return;var -d=c[2],e=c[3],f=c[1];if(g(a,d))return j(d,a,e);var -c=f}}]}function -o2(a){var -b=oX(a);return[0,b[17],,,b[4],,,,,,,,,,b[31],,,,,,,,,b[39],,,,,,,,,,,,,b[50]]}function -cb(a){return[0,0,0]}function -cc(a){a[1]=0;a[2]=0;return}function -bv(a,b){b[1]=[0,a,b[1]];b[2]=b[2]+1|0;return 0}function -bH(a){var -b=a[1];if(!b)return 0;var -c=b[1];a[1]=b[2];a[2]=a[2]-1|0;return[0,c]}function -bI(a){var -b=a[1];return b?[0,b[1]]:0}function -o3(a,b){return a$(a,b[1])}var -o5=[y,o4,aB(0)];function -hy(a){return[0,0,0,0]}function -eW(a){a[1]=0;a[2]=0;a[3]=0;return}function -eX(a,b){var -c=[0,a,0],d=b[3];return d?(b[1]=b[1]+1|0,d[2]=c,b[3]=c,0):(b[1]=1,b[2]=c,b[3]=c,0)}function -hz(a){var -b=a[2];if(!b)return 0;var -c=b[1];if(b[2]){var -d=b[2];a[1]=a[1]-1|0;a[2]=d;return[0,c]}eW(a);return[0,c]}function -hA(a){return a[1]}function -o6(a){var -b=a[2];return b?[0,b[1]]:0}function -o7(a){var -b=a[2];if(!b)throw h(o5,1);if(b[2]){var -c=b[2];a[1]=a[1]-1|0;a[2]=c;return}eW(a);return}function -o8(a){return[0,[0,0,[3,[0,0,a]]]]}function -bJ(a){var -b=1<=a?a:1,c=bF=(d+b|0))break;c[1]=2*c[1]|0}if(bFa[3])throw h([0,v,pc],1);if((d+b|0)<=a[3])return;throw h([0,v,pb],1)}function -bL(a,b){var -c=a[2];if(a[3]<=c)eY(a,1);w(a[1],c,b);a[2]=c+1|0;return 0}function -ba(a,b){var -c=l(b),d=a[2]+c|0;if(a[3]=b)return b$(a[1],b,c);return D(o_)}function -o$(a){return a[2]}function -pa(a){a[2]=0;a[1]=a[4];a[3]=_(a[1]);return}function -pe(a,b,c,d){var -e=c<0?1:0;if(e)var -f=e;else -var -h=d<0?1:0,f=h||((l(b)-d|0)e){if(32!==e){if(43>e)break a;switch(e-43|0){case -5:c:if(c<(d+2|0)&&1=(d+1|0))break a;var -f=bt(d+1|0,48);G(f,0,e);aU(b,1,f,(d-c|0)+2|0,c-1|0);return ac(f)}if(71<=e){if(5>>0)break a}else if(65>e)break a}if(ca)return b;var -h=[0,0],i=l(b)-1|0,o=0;if(i>=0){var -d=o;for(;;){if(9>=ax(b,d)+gA>>>0)h[1]++;var -r=d+1|0;if(i===d)break;var -d=r}}var -j=h[1],k=E(l(b)+((j-1|0)/3|0)|0),m=[0,0];function -e(a){G(k,m[1],a);m[1]++;return}var -f=[0,((j-1|0)%3|0)+1|0],n=l(b)-1|0,p=0;if(n>=0){var -c=p;for(;;){var -g=ax(b,c);if(9>>0)e(g);else{if(0===f[1]){e(95);f[1]=3}f[1]+=-1;e(g)}var -q=c+1|0;if(n===c)break;var -c=q}}return ac(k)}function -qW(a,b){return c$(a,ey(p3(a),b))}function -qX(a,b){return c$(a,ey(qt(a),b))}function -qY(a,b){return c$(a,ey(qH(a),b))}function -qZ(a,b){return c$(a,DI(qf(a),b))}function -aV(d,b,c){function -a(a){switch(d[1]){case -0:var -e=45;break;case -1:var -e=43;break;default:var -e=32}return DE(c,b,e)}function -e(a){var -b=eu(c);return 3===b?c<0.?q1:q2:4<=b?q3:a}function -f(b){var -e=l(b);return function(a){var -c=a;for(;;){if(c===e)return 0;var -d=n(b,c)-46|0;a:{if(23>>0){if(55===d)break a}else if(21>>0)break a;var -c=c+1|0;continue}return 1}}(0)?b:k(b,q0)}switch(d[2]){case -5:return e(f(cQ(hF(d,b),c)));case -6:return a(0);case -7:return oN(a(0));case -8:return e(a(0));default:return cQ(hF(d,b),c)}}function -q4(a){var -b=oe(a),c=l(b),d=bt(c+2|0,39);aS(b,0,d,1,c);return ac(d)}function -q5(a){var -b=hB(16);e0(b,a);return hD(b)}function -cD(a,b,c,d){var -i=b,f=c,e=d;for(;;){if(typeof -e==="number")return g(i,f);switch(e[0]){case -0:var -p=e[1];return function(a){return s(i,[5,f,a],p)};case -1:var -r=e[1];return function(a){return s(i,[4,f,q4(a)],r)};case -2:return e1(i,f,e[2],e[1],function(a){return a});case -3:return e1(i,f,e[2],e[1],p2);case -4:return da(i,f,e[4],e[2],e[3],qW,e[1]);case -5:return da(i,f,e[4],e[2],e[3],qX,e[1]);case -6:return da(i,f,e[4],e[2],e[3],qY,e[1]);case -7:return da(i,f,e[4],e[2],e[3],qZ,e[1]);case -8:return q6(i,f,e[4],e[2],e[3],e[1]);case -9:return e1(i,f,e[2],e[1],c4);case -10:var -f=[7,f],e=e[1];break;case -11:var -f=[2,f,e[1]],e=e[2];break;case -12:var -f=[3,f,e[1]],e=e[2];break;case -13:var -t=e[3],u=q5(e[2]);return function(a){return s(i,[4,f,u],t)};case -14:var -w=e[3],x=e[2];return function(a){return s(i,f,C(p1(a[1],x),w))};case -15:var -y=e[1];return function(c,b){return s(i,[6,f,function(a){return q(c,a,b)}],y)};case -16:var -z=e[1];return function(a){return s(i,[6,f,a],z)};case -17:var -f=[0,f,e[1]],e=e[2];break;case -18:var -j=e[1];if(0===j[0]){let -b=f,c=i,d=e[2];var -i=function(a){return s(c,[1,b,[0,a]],d)},f=0,e=j[1][1]}else{let -b=f,c=i,d=e[2];var -i=function(a){return s(c,[1,b,[1,a]],d)},f=0,e=j[1][1]}break;case -19:throw h([0,v,q8],1);case -20:var -A=e[3],D=[8,f,q9];return function(a){return s(i,D,A)};case -21:var -E=e[2];return function(a){return s(i,[4,f,ey(ks,a)],E)};case -22:var -F=e[1];return function(a){return s(i,[5,f,a],F)};case -23:var -k=e[2],l=e[1];return a<50?jQ(a+1|0,i,f,l,k):B(jQ,[0,i,f,l,k]);default:var -m=e[3],n=e[1],o=g(e[2],0);return a<50?fV(a+1|0,i,f,m,n,o):B(fV,[0,i,f,m,n,o])}}}function -s(a,b,c){return cY(cD(0,a,b,c))}function -jQ(a,b,c,d,e){if(typeof -d==="number")switch(d){case -0:return a<50?x(a+1|0,b,c,e):B(x,[0,b,c,e]);case -1:return a<50?x(a+1|0,b,c,e):B(x,[0,b,c,e]);case -2:throw h([0,v,q_],1);default:return a<50?x(a+1|0,b,c,e):B(x,[0,b,c,e])}switch(d[0]){case -0:return a<50?x(a+1|0,b,c,e):B(x,[0,b,c,e]);case -1:return a<50?x(a+1|0,b,c,e):B(x,[0,b,c,e]);case -2:return a<50?x(a+1|0,b,c,e):B(x,[0,b,c,e]);case -3:return a<50?x(a+1|0,b,c,e):B(x,[0,b,c,e]);case -4:return a<50?x(a+1|0,b,c,e):B(x,[0,b,c,e]);case -5:return a<50?x(a+1|0,b,c,e):B(x,[0,b,c,e]);case -6:return a<50?x(a+1|0,b,c,e):B(x,[0,b,c,e]);case -7:return a<50?x(a+1|0,b,c,e):B(x,[0,b,c,e]);case -8:return a<50?x(a+1|0,b,c,e):B(x,[0,b,c,e]);case -9:var -f=d[2];return a<50?fW(a+1|0,b,c,f,e):B(fW,[0,b,c,f,e]);case -10:return a<50?x(a+1|0,b,c,e):B(x,[0,b,c,e]);default:return a<50?x(a+1|0,b,c,e):B(x,[0,b,c,e])}}function -fW(a,f,c,d,e){if(typeof -d==="number")return a<50?x(a+1|0,f,c,e):B(x,[0,f,c,e]);switch(d[0]){case -0:var -b=d[1];return function(a){return ar(f,c,b,e)};case -1:var -g=d[1];return function(a){return ar(f,c,g,e)};case -2:var -i=d[1];return function(a){return ar(f,c,i,e)};case -3:var -j=d[1];return function(a){return ar(f,c,j,e)};case -4:var -k=d[1];return function(a){return ar(f,c,k,e)};case -5:var -l=d[1];return function(a){return ar(f,c,l,e)};case -6:var -m=d[1];return function(a){return ar(f,c,m,e)};case -7:var -n=d[1];return function(a){return ar(f,c,n,e)};case -8:var -o=d[2];return function(a){return ar(f,c,o,e)};case -9:var -p=d[3],q=d[2],r=M(I(d[1]),q);return function(a){return ar(f,c,$(r,p),e)};case -10:var -s=d[1];return function(a,b){return ar(f,c,s,e)};case -11:var -t=d[1];return function(a){return ar(f,c,t,e)};case -12:var -u=d[1];return function(a){return ar(f,c,u,e)};case -13:throw h([0,v,q$],1);default:throw h([0,v,ra],1)}}function -ar(a,b,c,d){return cY(fW(0,a,b,c,d))}function -x(a,b,c,d){var -e=[8,c,rb];return a<50?cD(a+1|0,b,e,d):B(cD,[0,b,e,d])}function -e1(h,f,c,d,e){if(typeof -d==="number")return function(a){return s(h,[4,f,g(e,a)],c)};if(0===d[0]){var -b=d[2],i=d[1];return function(a){return s(h,[4,f,ak(i,b,g(e,a))],c)}}var -j=d[1];return function(a,b){return s(h,[4,f,ak(j,a,g(e,b))],c)}}function -da(j,i,h,d,e,f,g){if(typeof -d==="number"){if(typeof -e==="number")return e?function(a,b){return s(j,[4,i,bN(a,q(f,g,b))],h)}:function(a){return s(j,[4,i,q(f,g,a)],h)};var -b=e[1];return function(a){return s(j,[4,i,bN(b,q(f,g,a))],h)}}if(0===d[0]){var -c=d[2],k=d[1];if(typeof -e==="number")return e?function(a,b){return s(j,[4,i,ak(k,c,bN(a,q(f,g,b)))],h)}:function(a){return s(j,[4,i,ak(k,c,q(f,g,a))],h)};var -m=e[1];return function(a){return s(j,[4,i,ak(k,c,bN(m,q(f,g,a)))],h)}}var -l=d[1];if(typeof -e==="number")return e?function(a,b,c){return s(j,[4,i,ak(l,a,bN(b,q(f,g,c)))],h)}:function(a,b){return s(j,[4,i,ak(l,a,q(f,g,b))],h)};var -n=e[1];return function(a,b){return s(j,[4,i,ak(l,a,bN(n,q(f,g,b)))],h)}}function -q6(i,h,g,d,e,f){if(typeof -d==="number"){if(typeof -e==="number")return e?function(a,b){return s(i,[4,h,aV(f,a,b)],g)}:function(a){return s(i,[4,h,aV(f,eZ(f),a)],g)};var -b=e[1];return function(a){return s(i,[4,h,aV(f,b,a)],g)}}if(0===d[0]){var -c=d[2],j=d[1];if(typeof -e==="number")return e?function(a,b){return s(i,[4,h,ak(j,c,aV(f,a,b))],g)}:function(a){return s(i,[4,h,ak(j,c,aV(f,eZ(f),a))],g)};var -l=e[1];return function(a){return s(i,[4,h,ak(j,c,aV(f,l,a))],g)}}var -k=d[1];if(typeof -e==="number")return e?function(a,b,c){return s(i,[4,h,ak(k,a,aV(f,b,c))],g)}:function(a,b){return s(i,[4,h,ak(k,a,aV(f,eZ(f),b))],g)};var -m=e[1];return function(a,b){return s(i,[4,h,ak(k,a,aV(f,m,b))],g)}}function -fV(a,b,c,d,e,f){if(e){var -i=e[1];return function(a){return q7(b,c,d,i,g(f,a))}}var -h=[4,c,f];return a<50?cD(a+1|0,b,h,d):B(cD,[0,b,h,d])}function -q7(a,b,c,d,e){return cY(fV(0,a,b,c,d,e))}function -aW(a,b){var -c=b;for(;;){if(typeof -c==="number")return;switch(c[0]){case -0:var -f=c[1],h=hE(c[2]);aW(a,f);return bs(a,h);case -1:var -d=c[2],e=c[1];if(0===d[0]){var -i=d[1];aW(a,e);bs(a,rc);var -c=i}else{var -j=d[1];aW(a,e);bs(a,rd);var -c=j}break;case -6:var -m=c[2];aW(a,c[1]);return g(m,a);case -7:aW(a,c[1]);return c6(a);case -8:var -n=c[2];aW(a,c[1]);return D(n);case -2:case -4:var -k=c[2];aW(a,c[1]);return bs(a,k);default:var -l=c[2];aW(a,c[1]);return b_(a,l)}}}function -aX(a,b){var -c=b;for(;;){if(typeof -c==="number")return;switch(c[0]){case -0:var -f=c[1],h=hE(c[2]);aX(a,f);return ba(a,h);case -1:var -d=c[2],e=c[1];if(0===d[0]){var -i=d[1];aX(a,e);ba(a,re);var -c=i}else{var -j=d[1];aX(a,e);ba(a,rf);var -c=j}break;case -6:var -m=c[2];aX(a,c[1]);return ba(a,g(m,0));case -7:var -c=c[1];break;case -8:var -n=c[2];aX(a,c[1]);return D(n);case -2:case -4:var -k=c[2];aX(a,c[1]);return ba(a,k);default:var -l=c[2];aX(a,c[1]);return bL(a,l)}}}function -rg(a){var -c=a[1],b=bJ(bB);return s(function(a){aX(b,a);return c2(bK(b))},0,c)}function -rh(d){if(g6(d,i))return ri;var -f=l(d);function -k(a){return g(rg(rj),d)}function -m(a){var -b=a;for(;;){if(b===f)return b;var -c=n(d,b);if(9!==c&&32!==c)return b;var -b=b+1|0}}var -j=m(0),q=function(a,b){var -c=b;for(;;){if(c===f)return c;if(25>>0)return c;var -c=c+1|0}}(j,j),a=eS(d,j,q-j|0),e=m(q),o=function(a,b){var -c=b;for(;;){if(c===f)return c;var -e=n(d,c);a:{if(48<=e){if(58>e)break a}else if(45===e)break a;return c}var -c=c+1|0}}(e,e);if(e===o)var -p=0;else -try{var -t=nz(eS(d,e,o-e|0)),p=t}catch(f){var -r=O(f);if(r[1]!==ah)throw h(r,0);var -s=k(0),p=s}if(m(o)!==f)k(0);a:{if(c(a,i)&&c(a,j0)){if(!c(a,"h")){var -b=0;break a}if(!c(a,"hov")){var -b=3;break a}if(!c(a,"hv")){var -b=2;break a}if(c(a,"v")){var -b=k(0);break a}var -b=1;break a}var -b=4}return[0,p,b]}function -rk(d,b,c){return s(function(a){aW(b,a);return g(d,b)},0,c[1])}function -e2(a,b){return rk(function(a){return 0},a,b)}function -e3(a){return e2(aK,a)}function -rl(c,b){return s(function(a){var -b=bJ(64);aX(b,a);return g(c,bK(b))},0,b[1])}function -V(a){return rl(function(a){return a},a)}var -e4=eH(0);function -e6(a,b){var -c=a[1+b];return hf(c)?b6(c)===cG?g(V(rm),c):b6(c)===253?c5(c):rn:g(V(ro),c)}function -hG(a,b){if(a.length-1<=b)return rp;var -c=hG(a,b+1|0),d=e6(a,b);return q(V(rq),d,c)}function -rr(a){var -b=a.length-1;if(2>=b>>>0)switch(b){case -0:return rt;case -1:return ru;default:var -e=e6(a,1);return g(V(rv),e)}var -c=hG(a,2),d=e6(a,1);return q(V(rs),d,c)}function -rw(d){return function(a){var -b=a;for(;;){if(!b)return 0;var -e=b[2],f=b[1];a:{try{var -c=g(f,d)}catch(f){break a}if(c)return[0,c[1]]}var -b=e}}(c1(e4))}function -rx(a){if(a===eJ)return ry;if(a===g$)return rz;if(a[1]===g_){var -b=a[2],e=b[3],h=b[2],i=b[1];return fX(V(e5),i,h,e,e+5|0,rA)}if(a[1]===v){var -c=a[2],f=c[3],j=c[2],l=c[1];return fX(V(e5),l,j,f,f+6|0,rB)}if(a[1]===ha){var -d=a[2],g=d[3],m=d[2],n=d[1];return fX(V(e5),n,m,g,g+6|0,rC)}if(0!==b6(a))return a[1];var -o=a[1][1];return k(o,rr(a))}function -db(a){var -b=rw(a);return b?b[1]:rx(a)}function -rD(a){var -b=[0,Ds(a)];return b}function -rE(c,b){function -a(a){return a?0===c?rF:rG:0===c?rH:rI}if(0===b[0]){var -d=b[5],e=b[4],f=b[3],h=b[6]?rJ:rL,i=b[2],j=b[7],k=a(b[1]);return[0,Dh(V(rK),k,j,i,h,f,e,d)]}if(b[1])return 0;var -l=a(0);return[0,g(V(rM),l)]}function -rN(a,b){if(!b)return e2(a,rP);var -d=b[1],e=d.length-1-1|0,h=0;if(e>=0){var -c=h;for(;;){var -f=rE(c,t(d,c)[1+c]);if(f){var -i=f[1];g(e2(a,rO),i)}var -j=c+1|0;if(e===c)break;var -c=j}}return}function -e7(a,b){return rN(a,rD(b))}var -rS=rR.slice();function -rT(a,b){var -e=db(a);g(e3(rU),e);e7(aK,b);var -c=D2(0);if(c<0){var -d=c3(c);hd(t(rS,d)[1+d])}return c6(aK)}var -rV=[0];function -hH(a){var -b=Dy(0);return b}function -rW(a,b){try{var -d=b?rV:hH(0);try{eO(0)}catch(f){}try{var -f=rT(a,d),e=f}catch(f){var -i=O(f),j=hH(0),k=db(a);g(e3(rY),k);e7(aK,d);var -l=db(i);g(e3(rZ),l);e7(aK,j);var -e=c6(aK)}return e}catch(f){var -c=O(f);if(c===eJ)return hd(rX);throw h(c,0)}}g5(mZ,function(a,b){try{var -c=rW(a,b);return c}catch(f){return 0}});function -rQ(a){for(;;){var -b=c1(e4),c=1-eI(e4,b,[0,a,b]);if(!c)return c}}var -r1=[y,r0,aB(0)];rQ(function(a){return a[1]===r1?[0,k(r2,db(a[2]))]:0});function -r3(a){return D0(a,0,l(a))}function -hI(a){return[0,bp(55,0),0]}function -r4(a,b){oQ(b[1],0,a[1],0,55);a[2]=b[2];return}function -hJ(a,b){function -l(a,b){return r3(k(a,hn(b)))}function -m(a){var -b=n(a,3)<<24,c=n(a,2)<<16,d=n(a,1)<<8;return((n(a,0)+d|0)+c|0)+b|0}var -g=0===b.length-1?[0,0]:b,h=g.length-1,c=0;for(;;){t(a[1],c)[1+c]=c;var -u=c+1|0;if(54===c)break;var -c=u}var -f=[0,r5],i=54+hm(55,h)|0,o=0;if(i>=0){var -d=o;for(;;){var -e=d%55|0,j=nF(d,h),p=t(g,j)[1+j];f[1]=l(f[1],p);var -q=m(f[1]),r=(t(a[1],e)[1+e]^q)&d8;t(a[1],e)[1+e]=r;var -s=d+1|0;if(i===d)break;var -d=s}}a[2]=0;return}function -r6(a){var -b=hI(0);hJ(b,a);return b}function -e8(a){return r6(nM(0))}function -e9(a){a[2]=(a[2]+1|0)%55|0;var -b=a[2],c=t(a[1],b)[1+b],d=(a[2]+24|0)%55|0,e=(t(a[1],d)[1+d]+(c^(c>>>25|0)&31)|0)&d8,f=a[2];t(a[1],f)[1+f]=e;return e}function -r8(a,b){for(;;){var -c=e9(a),d=nF(c,b);if(((d8-b|0)+1|0)>=(c-d|0))return d}}function -r7(a){var -b=hI(0);r4(b,a);return b}function -r9(a,b){if(d8>=b&&0=0){var -e=n;for(;;){m(t(c,e)[1+e]);var -q=e+1|0;if(i===e)break;var -e=q}}if(b){var -j=h-1|0,o=0;if(j>=0){var -a=o;for(;;){var -k=t(f,a)[1+a];if(k)k[3]=0;var -p=a+1|0;if(j===a)break;var -a=p}}}return}function -sj(a,b){var -c=b[2],d=(c.length-1)*2|0,e=d>>0)return;return hT(a,d)}function -sx(a){var -b=hz(a[28]);if(!b)return;var -c=b[1],d=c[1];a[12]=a[12]-c[3]|0;var -e=as(d);a[9]=a[9]+e|0;return}function -sy(a,b,c){if(typeof -c==="number")switch(c){case -0:var -j=bI(a[3]);if(!j)return;var -k=j[1][1],m=function(a,b){if(!b)return[0,a,0];var -c=b[1],d=b[2];return DW(a,c)?[0,a,b]:[0,c,m(a,d)]};k[1]=m(a[6]-a[9]|0,k[1]);return;case -1:bH(a[2]);return;case -2:bH(a[3]);return;case -3:var -n=bI(a[2]);return n?hT(a,n[1][2]):de(a);case -4:var -o=a[10]!==(a[6]-a[9]|0)?1:0;return o?sx(a):o;default:var -p=bH(a[5]);if(p)return fb(a,g(a[25],p[1]));return}switch(c[0]){case -0:return hS(a,b,c[1]);case -1:var -d=c[2],f=c[1],q=d[1],z=d[2],r=bI(a[2]);if(!r)return;var -s=r[1],e=s[2];switch(s[1]){case -0:return bO(a,f);case -1:return bw(a,d,e);case -2:return bw(a,d,e);case -3:return a[9]<(b+l(q)|0)?bw(a,d,e):bO(a,f);case -4:return a[11]?bO(a,f):a[9]<(b+l(q)|0)?bw(a,d,e):((a[6]-e|0)+z|0)=a[14]){a[13]=hR;hU(a);if(b)de(a);return sI(a)}hZ(a,0)}}function -ff(a,b,c){var -d=a[14]=c)return bz(a[17],h3,0,c);bz(a[17],h3,0,80);var -c=c-80|0}}function -sV(a){return a[1]===fa?k(sX,k(a[2],sW)):sY}function -sZ(a){return a[1]===fa?k(s1,k(a[2],s0)):s2}function -s3(a){return 0}function -s4(a){return 0}function -s5(a,b,c,d,e){var -g=hy(0),h=[0,hP,s6,0];eX(h,g);var -f=cb(0);fc(f);bv([0,1,h],f);var -i=78,j=cb(0),k=cb(0),l=cb(0);return[0,f,cb(0),l,k,j,i,10,68,i,0,1,1,1,1,eL,s7,a,b,c,d,e,0,0,sV,sZ,s3,s4,g]}function -h5(a,b){var -c=s5(a,b,function(a){return 0},function(a){return 0},function(a){return 0});c[19]=function(a){return sT(c,a)};c[20]=function(a){return h4(c,a)};c[21]=function(a){return h4(c,a)};return c}function -fg(d){return h5(function(a,b,c){return n2(d,a,b,c)},function(a){return c6(d)})}function -fh(d){return h5(function(a,b,c){return pe(d,a,b,c)},function(a){return 0})}var -s8=d4;function -h6(a){return bJ(s8)}var -s9=h6(0),s_=fg(nY),s$=fg(aK);fh(s9);function -sG(a,b){if(a[22]){bv(b,a[4]);g(a[26],b)}var -c=a[23];return c?cf(a,[0,dd,[5,b],0]):c}function -sL(a,b){fe(a,1);return g(a[18],0)}function -sM(a,b){var -c=a[14]=0){var -c=h;for(;;){e[c]=g(a,t(b,c)[1+c]);var -i=c+1|0;if(f===c)break;var -c=i}}return e}function -fl(c,b){return os(ia(b),function(a){return g(c,b[a])})}function -fm(f,b){return function(a,b,c){var -e=a,d=c;for(;;){if(!d)return b;var -h=d[2];b[e]=g(f,d[1]);var -e=e+1|0,d=h}}(0,fj(0),b)}function -tp(a,b){var -c=new -o["Error"](b);return a?(c[gk]=a[1],c):c}var -fn=o["Promise"];function -ck(a){return fn.resolve(a)}function -fo(a,b){return a.then(cT(1,b))}function -ib(a){return fn.all(a)}function -aZ(a){return aE(a)}function -N(a){return av(a)}function -tl(a,b,c){if(!c)return;a[b]=c[1];return}function -tm(a,b){a[b];return}function -to(a,b,c){if(c)return tn(a,b,c[1]);return}function -tq(a,b){return g(function(a){throw a},tp(a,b))}function -tr(a){return new -fn(cT(2,function(c,b){return q(a,function(a){return c(a)},function(a){return b(a)})}))}function -ts(a,b,c){return a.then(cT(1,b),cT(1,c))}function -cl(a){return{fut:a}}function -ic(a){return a[gH]}function -tt(a){return a[gH]}function -fp(a){var -c=[0,function(a){throw h([0,v,tu],1)}];function -b(a){return tq(0,"The future is already set")}return[0,cl(tr(function(a,b){c[1]=a;return 0})),function(a){g(c[1],a);c[1]=b;return 0}]}function -dg(a){return cl(ck(a))}function -dh(a,b){return cl(fo(ic(a),function(a){return ic(g(b,a))}))}function -id(c,b){return dh(b,function(a){return dg(g(c,a))})}function -di(a){return cl(fo(ib(fm(tt,a)),function(a){return ck(fl(function(a){return a},a))}))}function -cm(a){return dg([0,a])}function -tv(d,b,c){return cl(ts(c,function(a){return ck([0,g(d,a)])},function(a){return ck([1,g(b,a)])}))}function -ie(a,b){return tv(a,function(a){return a},b)}function -bx(a,b){return id(b,a)}function -am(c,b){return function(a){return dh(c,a)}(function(a){return 0===a[0]?g(b,a[1]):dg(a)})}function -ae(a,b){return id(function(a){return oc(b,a)},a)}o["Event"];function -cn(a,b,c,d){var -e=a?a[1]:{};d.addEventListener(b,cT(1,c),e);return}o["ArrayBuffer"];o["DataView"];o["Blob"];o["File"];var -ig=o["JSON"];function -ih(a){return ig.stringify(a)}function -fq(a){try{var -c=ig.parse(a)}catch(f){var -b=O(f);if(b[1]===fi)return[1,b[2]];throw h(b,0)}return[0,c]}o["encodeURI"];o["decodeURI"];o["encodeURIComponent"];o["decodeURIComponent"];var -fr=o["URL"];function -tx(a,b){return a?new -fr(b,a[1]):new -fr(b)}var -ty=o["URLSearchParams"];function -tz(a){return a.toString()}function -ii(a){return a.toString()}var -ij=o["document"];function -tw(a){return a["currentTarget"]}function -tA(a){return new -ty(a)}function -tB(a,b){var -c=new -fr(a);h$(c,tC,tz(b));return c}function -tD(a,b){try{var -d=tx(a,b)}catch(f){var -c=O(f);if(c[1]===fi)return[1,c[2]];throw h(c,0)}return[0,d]}if(!h9(ij))ij["documentElement"];function -fs(a,b,c){b5(a,b,c);return 0}var -ft=o[ll];function -fu(a){return eD(function(a,b,c){var -e=b,d=c;for(;;){if(!d)return a;var -f=d[2];a[e]=d[1];var -e=e+1|0,d=f}}(fj(0),0,a))}function -ik(a){return fs(ft,tE,fu(a))}function -il(a){return fs(ft,tF,fu(a))}function -dj(a){return fs(ft,tG,fu(a))}o[ll];o["navigator"];o["performance"];o["window"];tm(o,tH);o["ClipboardItem"];o["FormData"];var -tK=o["Headers"];function -im(a,b,c,d,e,f,g,h,i,j,k,l,m){var -n={};n["body"]=h_(ci,function(a){return a},a);bb(n,tM,b);bb(n,tN,c);tl(n,tO,eQ(function(a){return a},d));bb(n,tP,e);to(n,tQ,f);bb(n,tR,g);bb(n,tS,h);bb(n,tT,i);bb(n,tU,j);bb(n,tV,k);n["signal"]=h_(ci,function(a){return a},l);return n}var -tW=o["Request"];o["Response"];var -tY=o["fetch"];o["MediaStream"];o["MediaRecorder"];o["MessageChannel"];o["BroadcastChannel"];var -io="message";function -ip(a){return a["data"]}o["Notification"];o["WebSocket"];function -tI(a){return a}function -tJ(a){return ie(function(a){return a},a.text())}function -tL(a,b){var -d=a?[0,a[1]]:[0],c=DT(tK,d);function -e(a,b){a.append(b[1],b[2]);return 0}a$(function(a){return e(c,a)},b);return c}function -tX(a,b){var -c=a?a[1]:{};return new -tW(b,c)}function -tZ(a){function -b(a){return a}return function(a){return ie(b,a)}(tY(a))}var -t0=o["Worker"];o["SharedWorker"];function -iq(a,b){var -c=a?a[1]:ci;o.postMessage(b,c);return 0}o["clients"];o["registration"];o["serviceWorker"];function -t1(a,b){var -c=a?a[1]:ci;return new -t0(b,c)}function -fv(a){return 0===a[0]?N(a[1]):bc(fv,a[1])}function -fw(a,b,c,d,e){var -f=c?c[1]:0,g=d?d[1]:0;return o["IDBKeyRange"].bound(a,b,!!f,!!g)}var -t4="upgradeneeded",t5="success",t6=eh;function -a0(a,b){return[0,b,a]}function -t7(a){return a[1][eh]}function -dk(a){var -b=a[1]["result"];return g(a[2],b)}function -fx(c,b){cn(0,t5,function(a){return q(c,a,b)},b[1]);return b}function -t8(c,b){cn(0,t6,function(a){return q(c,a,b)},b[1]);return b}function -ir(a){var -b=fp(0),c=b[2],d=b[1];fx(function(a,b){return c([0,dk(b)])},a);t8(function(a,b){return c([1,t7(b)])},a);return d}function -t9(a){switch(a){case -0:return t_;case -1:return t$;case -2:return ua;default:return ub}}function -uc(a){return N(t9(a))}function -is(c,d){var -a=[0,function(a){var -b=a["key"],c=d[3];return function(a){return cj(c,a)}(b)},function(a){var -b=a["primaryKey"],d=c[1][3];return function(a){return cj(d,a)}(b)},function(a,b){b.advance(a);return b},function(a,b){var -d=a?[0,g(c[1][2],a[1])]:[0];b5(b,"continue",d);return 0}];return[0,,function(a,b){function -e(a){return cj(function(a){return g(c[4],a)},a)}return function(a){return a0(e,a)}(b.get(g(d[2],a)))},function(a){function -b(a){return fk(function(a){return g(c[4],a)},a)}return function(a){return a0(b,a)}(a.getAll())},function(a,b){var -d=a?[0,a[1]]:[0];function -e(a){return fk(function(a){return g(c[1][3],a)},a)}return function(a){return a0(e,a)}(b5(b,"getAllKeys",d))},,[0,a[1],a[2],a[3],a[4],function(a){return cj(function(a){return g(c[4],a)},a["value"])},function(a){function -b(a){return 0}return function(a){return a0(b,a)}(a.delete())},function(a,b){var -d=b.update(g(c[3],a)),e=c[1][3];return function(a){return a0(e,a)}(d)}],function(a,b,c){var -d=eQ(uc,b);if(a)var -e=a[1],g=d?[0,e,d[1]]:[0,e],f=g;else -var -f=d?[0,h8,d[1]]:[0];function -h(a){return cj(function(a){return a},a)}return function(a){return a0(h,a)}(b5(c,"openCursor",f))}]}function -ud(a,b,c){var -d=function(a){return is(b,a)}(c)[4];return[0,,c,,,,d,,,,,,a[1]]}function -ue(d){var -a=function(a){return is(d,a)}(d[1]);return[0,d,,a[2],a[3],,,a[6],a[7],,,,function(b){return function(a){var -c=fv(b[3][1]),d=a.createIndex(N(b[2]),c);return g(b[1],d)}},function(b){return function(a){var -c=a.index(N(b[2]));return g(b[1],c)}},function(a,b,c){if(b)var -f=g(d[1][2],b[1]),e=[0,g(d[3],a),f];else -var -e=[0,g(d[3],a)];var -h=b5(c,"put",e),i=d[1][3];return function(a){return a0(i,a)}(h)}]}function -uf(a){switch(a){case -0:return ug;case -1:return uh;default:return ui}}function -bP(b){return function(a){var -c=a.objectStore(N(b[2][2]));return g(b[1],c)}}function -fy(c){return function(a,b){var -e=a?a[1]:0,d=DU(hv([0,[0,uk,fv(c[2][1][1])],[0,[0,uj,!!e],0]]));dj([0,ul,[0,d,0]]);var -f=b.createObjectStore(N(c[2][2]),d);return g(c[1],f)}}function -co(a,b,c){var -d=b?b[1]:0,e=N(uf(d));return c.transaction(fm(function(a){return N(a[2][2])},a),e)}function -fz(a){var -b=ue(a);return[0,b[1],,b[7],,b[3],b[4],,,b[8],,,b[12],b[13],b[14]]}function -dl(a,b,c){var -d=ud(a,b,c);return[0,,d[2],,,,,,d[6],,,,d[12]]}function -t2(a){return a["oldVersion"]}function -t3(a){return a["newVersion"]}function -um(c,b){cn(0,t4,function(a){function -b(a){return a}return q(c,a,function(a){return a0(b,a)}(tw(a)))},b[1]);return b}function -un(a,b,c){var -d=b?[0,a,aT(b[1])]:[0,a];function -e(a,b,c){return b5(a,b,c)}function -f(a){return a}return function(a){return a0(f,a)}(function(a){return e(c,uo,a)}(eU(N,d)))}function -up(a,b){var -c=a?a[1]:o;return c["indexedDB"]}function -by(a,b){return a===b?1:0}function -cp(a,b){return a=0){var -b=g;for(;;){var -e=(c-1|0)-b|0,h=t(a,b)[1+b];a[1+b]=t(a,e)[1+e];var -f=(c-1|0)-b|0;t(a,f)[1+f]=h;var -i=b+1|0;if(d===b)break;var -b=i}}}return}function -ur(i,e){return function(a,b){var -d=a,c=b;for(;;){if(by(c,e.length-1)){var -f=hv(d);uq(f);return f}var -h=g(i,t(e,c)[1+c]);if(h)var -d=[0,h[1],d],c=c+1|0;else -var -c=c+1|0}}(0,0)}function -iu(c,b){return ur(function(a){return g(c,a)?[0,a]:0},b)}function -us(a,b,c,d){var -h=d-1|0,i=c+1|0;if(h>=i){var -e=h;for(;;){var -f=g(a,e+1|0),j=t(b,f)[1+f];b[1+f]=t(b,e)[1+e];b[1+e]=j;var -k=e-1|0;if(i===e)break;var -e=k}}return}function -ut(a){return us(sa,a,0,a.length-1)}function -uu(a,b){return a===b?1:0}function -cq(a,b){if(!b)return 0;var -d=b[2],c=[0,g(a,b[1]),mx];uw(c,1,a,d);return c}function -uw(a,b,c,d){var -h=a,f=b,e=d;for(;;){if(!e){h[1+f]=0;return}var -j=e[2],i=[0,g(c,e[1]),mx];h[1+f]=i;var -h=i,f=1,e=j}}function -fA(f,b){return function(a,b){var -d=a,c=b;for(;;){if(!c)return ai(d);var -h=c[2],e=g(f,c[1]),i=e?[0,e[1],d]:d,d=i,c=h}}(0,b)}function -uv(a){return a?0:1}function -ux(a,b){return function(a,b,c){var -e=b,d=c;for(;;){if(!d)return 0;var -f=d[2];q(a,e,d[1]);var -e=e+1|0,d=f}}(a,0,b)}function -iv(a,b){return b?[0,g(a,b[1])]:0}function -dm(a,b){return a?a[1]:b}function -uy(a){return a?0:1}function -uz(a,b){return b?g(a,b[1]):0}function -uA(a,b){return b?b[1]:D(a)}e8(0);function -fB(a,b){return 0===b[0]?[0,g(a,b[1])]:[1,b[1]]}function -iw(a,b){return 0===b[0]?b:[1,g(a,b[1])]}var -uC=[y,uB,aB(0)];function -dn(a){if(0===a[0])return a[1];throw h(uC,1)}function -fC(a){return function(a,b){var -d=a,c=b;for(;;){if(!c)return[0,ai(d)];var -e=c[1];if(0!==e[0])return[1,e[1]];var -d=[0,e[1],d],c=c[2]}}(0,a)}function -ix(a,b){return fB(b,a)}function -uD(a){var -b=o2(a);return[0,,,,b[1],,,b[4],,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,b[23]]}function -uE(a){var -b=uD(a);return[0,b[4],,,b[7],,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,b[51]]}function -fD(a){return l(a)}function -uH(a){return l(a[2])}function -uI(a){return a?function(a,b){return n(a,(l(a)-b|0)-1|0)}:function(a,b){return n(a,b)}}function -uJ(a,b){var -f=fD(b),g=uI(a);if(0===f)return[0,[0],b];if(1===f)return[0,[0,-1],b];var -e=bp(f,0);t(e,0)[1]=-1;var -d=[0,2],c=[0,0];for(;;){if(!cp(d[1],f))return[0,e,b];var -l=c[1],m=g(b,c[1]);if(hh(g(b,d[1]-1|0),m)){c[1]++;var -i=d[1],n=c[1];t(e,i)[1+i]=n;d[1]++}else if(0===l){var -j=d[1];t(e,j)[1+j]=0;d[1]++}else{if(!bQ(c[1],0))throw h([0,v,uK],1);var -k=c[1];c[1]=t(e,k)[1+k]}}}function -uL(a){return uJ(0,a)}function -uM(a,b,c){var -e=[0,c],d=[0,0],j=fD(b),g=uH(a);for(;;){if(cp(d[1],g)&&cp(e[1]+d[1]|0,j)){var -k=n(b,e[1]+d[1]|0);if(hh(k,n(a[2],d[1])))d[1]++;else{var -i=d[1],f=t(a[1],i)[1+i];if(it(f,0)){if(!cp(f,d[1]))throw h([0,v,uN],1);e[1]=(e[1]+d[1]|0)-f|0;d[1]=f}else{d[1]=0;e[1]++}}continue}return by(d[1],g)?e[1]:-1}}function -uF(a){return ht(a,uG)}function -uO(a){return by(fD(a),1)?[0,n(a,0)]:[1,uL(a)]}function -uP(a,b){var -c=a?a[1]:0;return function(a){if(0!==b[0])return uM(b[1],a,c);var -e=b[1];try{var -f=oJ(a,c,e);return f}catch(f){var -d=O(f);if(d===aF)return-1;throw h(d,0)}}}function -uQ(d,b){var -e=l(d);return bQ(e,l(b))?0:function(a){var -c=a;for(;;){if(by(c,e))return 1;if(ax(b,c)!==ax(d,c))return 0;var -c=c+1|0}}(0)}var -dp=[y,uR,aB(0)];function -bd(a){throw h([0,dp,a],1)}function -iy(a){var -b=a[11];a[11]=[0,b[1],b[2]+1|0,a[5],b[4]];return}function -be(a){if(65<=a){if(97<=a){if(fY>a)return(a-97|0)+10|0}else if(71>a)return(a-65|0)+10|0}else if(9>=a+gA>>>0)return a-48|0;return bd(k(uV,k(ay(1,a),uU)))}function -iz(a,b,c){var -f=[0,b];function -d(a,b){w(a,f[1],b);f[1]=f[1]+1|0;return}function -e(a,b){return 0===(b>>>a|0)?1:0}if(e(7,c))d(a,H(c));else if(e(11,c)){d(a,H(192|(c>>>6|0)&31));d(a,H(J|c&63))}else if(e(16,c)){d(a,H(224|(c>>>12|0)&15));d(a,H(J|(c>>>6|0)&63));d(a,H(J|c&63))}else if(e(21,c)){d(a,H(240|(c>>>18|0)&7));d(a,H(J|(c>>>12|0)&63));d(a,H(J|(c>>>6|0)&63));d(a,H(J|c&63))}else if(e(26,c)){d(a,H(y|(c>>>24|0)&3));d(a,H(J|(c>>>18|0)&63));d(a,H(J|(c>>>12|0)&63));d(a,H(J|(c>>>6|0)&63));d(a,H(J|c&63))}else{d(a,H(cG|(c>>>30|0)&1));d(a,H(J|(c>>>24|0)&63));d(a,H(J|(c>>>18|0)&63));d(a,H(J|(c>>>12|0)&63));d(a,H(J|(c>>>6|0)&63));d(a,H(J|c&63))}return f[1]}function -uW(a,b,c,d){return iz(a,b,f9+((c-55296|0)<<10|d-56320|0)|0)}function -cr(a,b,c,d){var -e=aT(d),f=c?k(uY,k(ay(1,c[1]),uX)):u1;return bd(k(a,k(u0,k(e,k(f,k(uZ,b))))))}function -fE(a){var -j=l(a),e=E(j),b=[0,0],f=[0,0],h=[0,0],c=[0,at],k=j-1|0,o=0;if(k>=0){var -d=o;for(;;){var -g=c[1];a:if(ma<=g)if(lU<=g)if(at<=g)if(km<=g)if(117===n(a,d))c[1]=ma;else -cr(u3,a,[0,n(a,d)],d);else{var -m=n(a,d);if(92===m)c[1]=258914209;else{w(e,b[1],m);b[1]=b[1]+1|0}}else if(j3<=g){c[1]=at;var -q=be(n(a,d));h[1]=h[1]<<4|q;if(56320<=h[1]&&57343>=h[1]){b[1]=uW(e,b[1],f[1],h[1]);break a}cr(u4,a,0,d)}else{var -r=be(n(a,d));h[1]=h[1]<<4|r;c[1]=j3}else if(kS<=g){var -s=be(n(a,d));h[1]=h[1]<<4|s;c[1]=lU}else{h[1]=be(n(a,d));c[1]=kS}else if(mB<=g)if(m2<=g)if(kG<=g)if(92===n(a,d))c[1]=km;else -cr(u5,a,[0,n(a,d)],d);else{var -t=be(n(a,d));f[1]=f[1]<<4|t;if(55296<=f[1]&&56319>=f[1]){c[1]=kG;break a}b[1]=iz(e,b[1],f[1]);c[1]=at}else if(l5<=g){var -u=be(n(a,d));f[1]=f[1]<<4|u;c[1]=m2}else{var -v=be(n(a,d));f[1]=f[1]<<4|v;c[1]=l5}else if(k4<=g){f[1]=be(n(a,d));c[1]=mB}else{var -i=n(a,d);b:if(34===i){w(e,b[1],34);c[1]=at;b[1]=b[1]+1|0}else{c:if(92<=i){if(118>i){switch(i-92|0){case -0:w(e,b[1],92);c[1]=at;b[1]=b[1]+1|0;break;case -6:w(e,b[1],8);c[1]=at;b[1]=b[1]+1|0;break;case -10:w(e,b[1],12);c[1]=at;b[1]=b[1]+1|0;break;case -18:w(e,b[1],10);c[1]=at;b[1]=b[1]+1|0;break;case -22:w(e,b[1],13);c[1]=at;b[1]=b[1]+1|0;break;case -24:w(e,b[1],9);c[1]=at;b[1]=b[1]+1|0;break;case -25:c[1]=k4;break;default:break c}break b}}else if(47===i){w(e,b[1],47);c[1]=at;b[1]=b[1]+1|0;break b}cr(u6,a,[0,n(a,d)],d)}}var -p=d+1|0;if(k===d)break;var -d=p}}if(at!==c[1])cr(u2,a,0,j);return b[1]!==j?ac(eR(e,0,b[1])):a}function -uS(a){var -b=a[11];return[0,b[2],a[7]-b[3]|0,a[6]-b[3]|0]}function -uT(a){try{var -c=[3,nz(a)];return c}catch(f){var -b=O(f);if(b[1]===ah)return[2,a];throw h(b,0)}}function -iA(a,b,c){return DX(a,b,c)}function -u7(d){function -e(a,b){var -c=0;return a<50?i(a+1|0,b,c):B(i,[0,b,c])}function -i(a,b,c){var -i=c;for(;;){var -h=iA(iB,i,b);if(26>=h>>>0)switch(h){case -0:return u8;case -1:return u9;case -2:return 2;case -3:return 0;case -4:return 1;case -5:return 9;case -6:return 10;case -7:return g(d[5],13)?13:bd(k(u$,k(bu(b),u_)));case -8:return g(d[5],14)?14:bd(k(vb,k(bu(b),va)));case -9:return g(d[6],11)?11:bd(k(vd,k(bu(b),vc)));case -10:return g(d[6],12)?12:bd(k(vf,k(bu(b),ve)));case -11:return 7;case -12:return 8;case -13:return g(d[2],3);case -14:return g(d[2],5);case -15:return g(d[2],5);case -16:return g(d[2],4);case -17:var -f=uT(bu(b));if(typeof -f!=="number")switch(f[0]){case -2:return g(d[4],f);case -3:return g(d[3],f)}return f;case -18:var -n=[4,ex(bu(b))];return g(d[2],n);case -19:return vg;case -20:return[0,fE(oW(b,b[5]+1|0,b[6]-1|0))];case -21:return 6;case -22:return a<50?e(a+1|0,b):B(e,[0,b]);case -23:iy(b);return a<50?e(a+1|0,b):B(e,[0,b]);case -24:var -j=g(d[7],0);return 0===j[0]?(m(b),a<50?e(a+1|0,b):B(e,[0,b])):[5,j[1]];case -25:var -l=g(d[7],0);return 0===l[0]?a<50?e(a+1|0,b):B(e,[0,b]):[5,l[1]];default:return bd(k(vi,k(bu(b),vh)))}g(b[1],b);var -i=h}}function -f(a,b){var -c=88;return a<50?h(a+1|0,b,c):B(h,[0,b,c])}function -m(a){return cY(f(0,a))}function -h(a,b,c){var -e=c;for(;;){var -d=iA(iB,e,b);if(3>=d>>>0)switch(d){case -0:return;case -1:iy(b);return a<50?f(a+1|0,b):B(f,[0,b]);case -2:return bd(vj);default:return a<50?f(a+1|0,b):B(f,[0,b])}g(b[1],b);var -e=d}}return[0,function(a){return cY(e(0,a))}]}function -fF(a,b){var -c=uS(a);return[0,c[1],c[2],c[3],b]}var -vl=[y,vk,aB(0)];function -iC(a){return 1>1)|0:0}var -vm=53>>4|0)&15));return g(a,iD(b&15))}function -vY(a,b,c){var -f=l(c)-1|0,h=0;if(f>=0){var -e=h;for(;;){var -d=n(c,e);a:if(92===d)g(b,vZ);else{b:{c:{if(35>d){if(8>d)break b;switch(d-8|0){case -0:g(b,v1);break;case -1:g(b,v2);break;case -2:g(b,v3);break;case -4:g(b,v4);break;case -5:g(b,v5);break;case -26:g(b,v6);break;case -24:case -25:break c;default:break b}break a}if(bU===d)break b}g(a,n(c,e));break a}g(b,v0);vX(a,d)}var -i=e+1|0;if(f===e)break;var -e=i}}return}function -v7(o){function -e(a){var -b=bJ(bY);function -c(a){return bL(b,a)}function -d(a){return ba(b,a)}(function(a){c(34);vY(c,d,a);return c(34)}(a));return bK(b)}function -h(e,b,c,d){return tb([0,function(a,b){return g(aY(a)(v8),e)}],b,c,d)}function -d(a,b){if(typeof -b==="number")return aL(a,v9);var -c=b[1];if(bS<=c){if(a3===c)return sK(a,b[2]);if(aA>c){if(f<=c){var -j=b[2];return j?q(aY(a)(wc),function(a,b){return h(wb,d,a,b)},j):aL(a,wd)}var -k=b[2];return 0===k?aL(a,we):q(aY(a)(wg),function(a,b){return h(wf,d,a,b)},k)}if(z<=c){var -i=b[2];return i?q(aY(a)(v$),function(a,b){return h(v_,p,a,b)},i):aL(a,wa)}}else{if(bm===c)return aL(a,aT(b[2]));if(ag<=c){if(b1>c)return aL(a,g(o[8],b[2]));var -l=b[2],m=l[2],n=l[1];if(m){var -r=m[1],s=e(n);return bz(aY(a)(wh),s,d,r)}var -t=e(n);return g(aY(a)(wi),t)}if(bA>c)return aL(a,e(b[2]))}return aL(a,b[2])}function -p(a,b){var -c=b[2],f=e(b[1]);return bz(aY(a)(wj),f,d,c)}function -c(a,b){return q(aY(a)(wk),d,b)}return[0,,,,,c,function(a){return q(tf(wl),c,a)},function(a,b){return q(aY(fg(a))(wm),c,b)}]}function -wn(a){var -b=v7(a);return[0,b[5],b[6],b[7]]}function -iE(a,b){throw h([0,ah,a],1)}var -iF=function(a){return[0,,,,function(a){if(typeof -a!=="number"&&z===a[1])return a[2];return iE(wo,a)},,,function(a){if(typeof -a!=="number"&&d===a[1])return a[2];return iE(wp,a)}]}([0,function(a){return bC}]),iG=iF[7],wq=iF[4];function -iH(a){if(typeof -a==="number")switch(a){case -0:return wr;case -1:return ws;case -2:return wt;case -3:return wu;case -4:return wv;case -5:return ww;case -6:return wx;case -7:return wy;case -8:return wz;case -9:return wA;case -10:return wB;case -11:return wC;case -12:return wD;case -13:return wE;default:return wF}switch(a[0]){case -0:return a[1];case -1:return k(wH,k(a[1],wG));case -2:return a[1];case -3:return aT(a[1]);case -4:return c5(a[1]);case -5:return a[1];default:return a[1]?wI:wJ}}function -wK(e,d){function -j(j){function -f(a){return g(e[1],j)}var -a=g(d[2],f);if(0!==a[0])return[1,a[1]];var -i=a[1];if(!i)return wM;var -l=i[1];try{var -c=f(0)}catch(f){var -b=O(f);if(b[1]===dp)return[1,b[2]];throw h(b,0)}if(typeof -c==="number"&&6===c)return[0,l];return[1,k(wL,iH(c))]}function -b(a){var -b=j(a);return 0===b[0]?b:[1,fF(a,b[1])]}function -f(a){return b(hw(0,a))}function -c(f,b){function -i(a){return g(e[1],b)}return o8(function(a){var -c=g(d[2],i);if(0===c[0]){var -e=c[1];return e?[0,e[1]]:(g(f,0),0)}var -j=c[1];g(f,0);throw h([0,vl,fF(b,j)],1)})}function -i(a,b){var -d=a?a[1]:function(a){return 0};return c(d,hw(0,b))}return[0,,,,,,,,,,,,,,,function(a){return b(hx(0,a))},function(a){try{var -c=hc(a),d=f(c);he(c);return d}catch(f){var -b=O(f);if(b[1]===eK)return[1,[0,0,0,0,b[2]]];throw h(b,0)}},f,,,function(a,b){var -m=a?a[1]:0;function -n(a){return g(e[1],b)}var -f=g(d[2],n);if(0===f[0]){var -o=f[1];if(o){var -p=o[1];a:if(m)var -i=[0,[0,p]];else{try{var -l=n(0)}catch(f){var -j=O(f);if(j[1]!==dp)throw h(j,0);var -s=[1,j[2]],i=s;break a}b:{if(typeof -l==="number"&&6===l){var -r=[0,[0,p]];break b}var -r=[1,k(wN,iH(l))]}var -i=r}var -q=i}else -var -q=m?wO:wP;var -c=q}else -var -c=[1,f[1]];return 0===c[0]?[0,c[1]]:[1,fF(b,c[1])]},,,,,,function(a){return c(function(a){return 0},hx(0,a))},i,function(a){var -b=hc(a);return i([0,function(a){return he(b)}],b)},,function(a){return c(function(a){return 0},a)}]}function -wQ(p){function -c(a){var -b=9>>4|0)&15));return b_(a,c(b&15))}function -q(e,b){function -a(a){return bs(e,a)}var -f=l(b)-1|0;function -g(a){return b_(e,a)}var -h=0;if(f>=0){var -d=h;for(;;){var -c=n(b,d);a:if(92===c)a(wR);else{b:{c:{if(35>c){if(8>c)break b;switch(c-8|0){case -0:a(wT);break;case -1:a(wU);break;case -2:a(wV);break;case -4:a(wW);break;case -5:a(wX);break;case -26:a(wY);break;case -24:case -25:break c;default:break b}break a}if(bU===c)break b}g(n(b,d));break a}a(wS);i(e,c)}var -j=d+1|0;if(f===d)break;var -d=j}}return}function -e(l,b,c,d,e){function -i(a){return b_(l,a)}function -h(a){return bs(l,a)}function -m(a){i(34);q(l,a);return i(34)}var -n=k(wZ,e);function -r(a){return h(aT(a))}function -s(a){return h(g(p[8],a))}function -j(a,b){if(typeof -b==="number")return h(w0);var -e=b[1];if(b1>e)return bA===e?h(b[2]):bm<=e?ag<=e?s(b[2]):r(b[2]):d9<=e?h(b[2]):m(b[2]);if(a3>e){if(bS<=e){var -n=b[2],p=ay(a,32);i(40);h(c);o(a+d|0,n);h(c);h(p);return i(41)}var -q=b[2],u=ay(a,32);i(60);h(c);v(a+d|0,q);h(c);h(u);return i(62)}if(aA<=e){if(z>e)return h(b[2]);var -g=b[2],j=ay(a,32);i(gi);h(c);t(a+d|0,g);h(c);h(j);return i(gw)}if(f>e)return h(c4(b[2]));var -k=b[2],l=ay(a,32);i(91);h(c);o(a+d|0,k);h(c);h(l);return i(93)}function -t(d,b){var -a=ay(d,32),e=[0,a],f=k(w1,k(c,a));return a$(function(a){h(e[1]);e[1]=f;return u(d,a)},b)}function -u(a,b){var -c=b[2];m(b[1]);h(n);return j(a,c)}function -o(d,b){var -a=ay(d,32),e=[0,a],f=k(w2,k(c,a));return a$(function(a){h(e[1]);e[1]=f;return j(d,a)},b)}function -v(a,b){var -c=b[2];m(b[1]);if(!c)return;var -e=c[1];h(n);return j(a+d|0,e)}j(0,b);return h(c)}function -d(f){function -b(a,b,c,d){return e(f,a,b,c,d)}return function(a){return b(a,w4,0,w3)}}return[0,,,,,,,,,function(a,b){var -c=n0(a);try{d(c)(b);hb(c);return}catch(f){var -e=O(f);hb(c);throw h(e,0)}},,d]}function -w5(k){function -c(a){var -b=9>>4|0)&15));return bL(a,c(b&15))}function -m(e,b){function -a(a){return ba(e,a)}var -f=l(b)-1|0;function -g(a){return bL(e,a)}var -i=0;if(f>=0){var -d=i;for(;;){var -c=n(b,d);a:if(92===c)a(w6);else{b:{c:{if(35>c){if(8>c)break b;switch(c-8|0){case -0:a(w8);break;case -1:a(w9);break;case -2:a(w_);break;case -4:a(w$);break;case -5:a(xa);break;case -26:a(xb);break;case -24:case -25:break c;default:break b}break a}if(bU===c)break b}g(n(b,d));break a}a(w7);h(e,c)}var -j=d+1|0;if(f===d)break;var -d=j}}return}function -b(h,b){function -c(a){return bL(h,a)}function -d(a){return ba(h,a)}function -i(a){c(34);m(h,a);return c(34)}function -l(a){return d(aT(a))}function -n(a){return d(g(k[8],a))}function -e(a){if(typeof -a==="number")return d(xc);var -b=a[1];if(b1>b)return bA===b?d(a[2]):bm<=b?ag<=b?n(a[2]):l(a[2]):d9<=b?d(a[2]):i(a[2]);if(a3>b){if(bS<=b){var -h=a[2];c(40);j(h);return c(41)}var -k=a[2];c(60);q(k);return c(62)}if(aA<=b){if(z>b)return d(a[2]);var -e=a[2];c(gi);o(e);return c(gw)}if(f>b)return d(c4(a[2]));var -g=a[2];c(91);j(g);return c(93)}function -o(a){var -b=[0,xd];return a$(function(a){d(b[1]);b[1]=xe;return p(a)},a)}function -p(a){var -b=a[2];i(a[1]);c(58);return e(b)}function -j(a){var -b=[0,xf];return a$(function(a){d(b[1]);b[1]=xg;return e(a)},a)}function -q(a){var -b=a[2];i(a[1]);if(!b)return;var -d=b[1];c(58);return e(d)}return e(b)}return[0,,,function(a){var -c=bJ(bY);b(c,a);return bK(c)},,,,,,,,b]}var -xi=[y,xh,aB(0)];function -xj(a){throw h([0,xi,a],1)}function -fH(a){var -c=u7(a),b=function(a){return wK(c,a)}(vS(a)),e=[0,,,,,,,,,,,,,,,,,b[15],b[16],b[17],,,b[20],,,,,,b[26],b[27],b[28],,b[30]];function -f(a,b,c){var -d=c?c[1]:1,e=a[4],f=a[3],g=a[2],h=(d+a[1]|0)-1|0,i=b?k(xl,k(b[1],xk)):xn;return k(Di(V(xm),i,h,g,f),e)}function -h(a,b,c,d){var -e=g(a,b);return 0===e[0]?e[1]:xj(f(e[1],c,d))}return[0,,,,function(a,b,c,d){return h(e[17],d,b,c)}]}function -fI(a){var -c=w5(a),h=c[3],i=c[11],e=wQ(a),j=e[9],k=e[11],b=wn(a),g=[0,,,h,,,,,,,,i,,,,,,,,,,,,j,,k,,,,b[1],b[2],b[3]];function -m(a){function -c(a){if(typeof -a==="number")return bC;var -b=a[1];if(b1<=b){if(a3<=b)return aA<=b?z<=b?[0,z,bG(function(a){var -b=a[1];return[0,b,c(a[2])]},a[2])]:[0,ag,ex(a[2])]:f<=b?[0,f,bG(c,a[2])]:a;if(bS<=b)return[0,f,bG(c,a[2])];var -g=a[2],h=g[2],i=g[1];return h?[0,f,[0,[0,d,i],[0,c(h[1]),0]]]:[0,d,i]}if(bA===b)return[0,d,a[2]];if(bm<=b)return ag<=b?a:a;if(d9>b)return a;var -e=a[2];return 1>>0?[0,d,eS(e,1,l(e)-2|0)]:[0,d,e]}return c(a)}return[0,,,function(a,b,c,d){var -e=c?c[1]:0;if(!e)return g[3].call(null,d);var -f=m(d);return g[3].call(null,f)}]}function -iI(a){return fE(a)}function -iJ(a){return a}function -iK(a){return a}function -iL(a){return xo}function -iM(a){return 0}function -iN(a){return 0}function -iO(a){return xp}function -iP(a){var -b=eu(a);return 3===b?a<0.?xq:xr:4<=b?xs:fG(a)}function -dq(a){return[0,ag,ex(a)]}function -dr(a){return[0,bm,a]}var -ds=bC;function -dt(a){return[0,d,a]}function -du(a){return[0,a3,a]}function -iQ(a){return[0,z,a]}function -iR(a){return[0,f,a]}function -iS(a){throw h([0,ah,xt],1)}function -iT(a){throw h([0,ah,xu],1)}function -dv(a){if(typeof -a==="number")return ec===a?[0,ag,md]:el<=a?[0,ag,kV]:[0,ag,l2];if(aA<=a[1])throw h([0,ah,xv],1);return[0,ag,a[2]]}function -iU(a){return f4}function -iV(a){return gD}function -iW(a){return gx}function -iX(a){return gp}function -iY(a){throw h([0,ah,xw],1)}function -iZ(a){throw h([0,ah,xx],1)}function -i0(a){throw h([0,ah,xy],1)}function -i1(a){throw h([0,ah,xz],1)}function -i2(a){return[0,gJ,a]}fH([0,iI,iJ,iK,iL,iN,iM,iO,iP,dv,dr,dq,ds,dt,du,iQ,iR,iS,iT,[0,dv,dr,dq,ds,dt,du,iU,iV,iW,iX,iY,iZ,i0,i1,i2]]);fI([0,iI,iJ,iK,iL,iN,iM,iO,iP,dv,dr,dq,ds,dt,du,iQ,iR,iS,iT,[0,dv,dr,dq,ds,dt,du,iU,iV,iW,iX,iY,iZ,i0,i1,i2]]);function -i3(a){return fE(a)}function -i4(a){return a}function -i5(a){return a}function -i6(a){return a}function -i7(a){return 1}function -i8(a){return 1}function -i9(a){return xA}function -i_(a){var -b=eu(a);return 3===b?a<0.?xB:xC:4<=b?xD:fG(a)}function -dw(a){return[0,bA,a]}function -dx(a){return[0,bm,a]}var -dy=bC;function -dz(a){return[0,d,a]}function -dA(a){return[0,a3,a]}function -i$(a){return[0,z,a]}function -ja(a){return[0,f,a]}function -jb(a){return[0,bS,a]}function -jc(a,b){return[0,b1,[0,a,b]]}function -dB(a){if(typeof -a==="number")return ec===a?[0,ag,md]:el<=a?[0,ag,kV]:[0,ag,l2];if(aA<=a[1])throw h([0,ah,xE],1);return[0,ag,a[2]]}function -jd(a){return f4}function -je(a){return gD}function -jf(a){return gx}function -jg(a){return gp}function -jh(a){return mM}function -ji(a){return kP}function -jj(a){return ky}function -jk(a){return lj}function -jl(a){return[0,gJ,a]}var -jm=fH([0,i3,i4,i5,i6,i8,i7,i9,i_,dB,dx,dw,dy,dz,dA,i$,ja,jb,jc,[0,dB,dx,dw,dy,dz,dA,jd,je,jf,jg,jh,ji,jj,jk,jl]])[4],fJ=fI([0,i3,i4,i5,i6,i8,i7,i9,i_,dB,dx,dw,dy,dz,dA,i$,ja,jb,jc,[0,dB,dx,dw,dy,dz,dA,jd,je,jf,jg,jh,ji,jj,jk,jl]])[3];function -jn(a){return k(xG,k(a,xF))}function -jo(a){return a}function -jp(a){return a}function -jq(a){return a}function -jr(a){return 1}function -js(a){return 1}function -jt(a){return xH}function -ju(a){var -b=eu(a);return 3===b?a<0.?xI:xJ:4<=b?xK:fG(a)}function -dC(a){return[0,bA,a]}function -dD(a){return[0,bA,aT(a)]}var -dE=bC;function -dF(a){return[0,d9,a]}function -dG(a){return[0,a3,a]}function -jv(a){return[0,z,a]}function -jw(a){return[0,f,a]}function -jx(a){return[0,bS,a]}function -jy(a,b){return[0,b1,[0,a,b]]}function -dH(a){return typeof -a==="number"?ec===a?xL:el<=a?xM:xN:aA<=a[1]?[0,aA,a[2]]:[0,aA,c5(a[2])]}function -jz(a){return f4}function -jA(a){return gD}function -jB(a){return gx}function -jC(a){return gp}function -jD(a){return mM}function -jE(a){return kP}function -jF(a){return ky}function -jG(a){return lj}function -jH(a){return[0,gJ,a]}fH([0,jn,jo,jp,jq,js,jr,jt,ju,dH,dD,dC,dE,dF,dG,jv,jw,jx,jy,[0,dH,dD,dC,dE,dF,dG,jz,jA,jB,jC,jD,jE,jF,jG,jH]]);fI([0,jn,jo,jp,jq,js,jr,jt,ju,dH,dD,dC,dE,dF,dG,jv,jw,jx,jy,[0,dH,dD,dC,dE,dF,dG,jz,jA,jB,jC,jD,jE,jF,jG,jH]]);e8(0);function -xO(a,b){return e9(a)}function -xP(a){var -e=g(a,0),c=g(a,0),d=g(a,0),f=g(a,0),h=g(a,0),b=E(16),i=0;function -j(a,b,c){G(a,b,c);return}(function(a){return j(b,i,a)}(e&U));var -k=1;function -l(a,b,c){G(a,b,c);return}(function(a){return l(b,k,a)}((e>>>8|0)&U));var -m=2;function -n(a,b,c){G(a,b,c);return}(function(a){return n(b,m,a)}((e>>>16|0)&U));var -o=3;function -p(a,b,c){G(a,b,c);return}(function(a){return p(b,o,a)}(c&U));var -q=4;function -r(a,b,c){G(a,b,c);return}(function(a){return r(b,q,a)}((c>>>8|0)&U));var -s=5;function -t(a,b,c){G(a,b,c);return}(function(a){return t(b,s,a)}((c>>>16|0)&U));var -u=6;function -v(a,b,c){G(a,b,c);return}(function(a){return v(b,u,a)}(64|(c>>>24|0)&15));var -w=7;function -x(a,b,c){G(a,b,c);return}(function(a){return x(b,w,a)}(d&U));var -y=8;function -z(a,b,c){G(a,b,c);return}(function(a){return z(b,y,a)}(J|(d>>>24|0)&63));var -A=9;function -B(a,b,c){G(a,b,c);return}(function(a){return B(b,A,a)}((d>>>8|0)&U));var -C=10;function -D(a,b,c){G(a,b,c);return}(function(a){return D(b,C,a)}((d>>>16|0)&U));var -F=11;function -H(a,b,c){G(a,b,c);return}(function(a){return H(b,F,a)}(f&U));var -I=12;function -K(a,b,c){G(a,b,c);return}(function(a){return K(b,I,a)}((f>>>8|0)&U));var -L=13;function -M(a,b,c){G(a,b,c);return}(function(a){return M(b,L,a)}((f>>>16|0)&U));var -N=14;function -O(a,b,c){G(a,b,c);return}(function(a){return O(b,N,a)}(h&U));var -P=15;function -Q(a,b,c){G(a,b,c);return}(function(a){return Q(b,P,a)}((h>>>8|0)&U));return ac(b)}function -xQ(b){function -c(a){return xO(b,a)}return function(a){return xP(c)}}var -fK=uE([0,oO]);function -fL(a){return ih(a)}function -jI(a){var -b=fq(a);return 0===b[0]?[0,b[1]]:(il([0,b[1],0]),xR)}var -xS=sd(0);function -xT(a){return xQ(xS)(0)}function -dI(a){return[0,a3,a]}function -W(a){return[0,d,a]}function -bf(a){return[0,bm,a]}function -fM(a,b){return b?g(a,b[1]):bC}function -bg(a,b){return[0,f,ai(hj(a,b))]}var -cs=[0,1],xV=[y,xU,aB(0)];function -aG(a,b){throw h([0,xV,[0,ah,a],b],1)}function -dJ(a){if(typeof -a!=="number"&&a3===a[1])return a[2];return aG(xW,a)}function -X(a){if(typeof -a!=="number"&&d===a[1])return a[2];return aG(xX,a)}function -bh(a){if(typeof -a!=="number"&&bm===a[1])return a[2];return aG(xY,a)}function -fN(a,b){return bC===b?0:[0,g(a,b)]}function -bi(a,b){if(typeof -b!=="number"&&f===b[1])return ai(hj(a,b[2]));return aG(xZ,b)}function -e(a,b){return aG(k(a,x0),b)}function -dK(a,b){return aG(k(a,x1),b)}function -dL(a,b){return aG(k(a,x2),b)}function -dM(a,b){return aG(k(a,x3),b)}function -jJ(a,b,c,d){var -e=hq(x4,ai(c));return aG(bz(V(x5),b,a,e),d)}function -aM(a,b,c){return jJ(x6,a,b,c)}function -aN(a,b,c){return jJ(x7,a,b,c)}function -x8(a,b){var -d=a,c=b;for(;;){if(!c)return hq(x9,ai(d));var -e=c[1];if(e[1])var -d=[0,e[2],d],c=c[2];else -var -c=c[2]}}function -a1(a,b,c){var -d=x8(0,c);return aG(q(V(x_),a,d),b)}function -aO(a,b){return aG(k(a,x$),b)}function -b(a){return a[1]}function -yb(a){if(typeof -a!=="number"&&f===a[1]){var -b=a[2];if(!b)return dL(ct,a);var -g=b[1];if(typeof -g!=="number"){var -h=g[1];if(d===h){var -i=g[2];if(!c(i,kF))return b[2]?e(ct,a):0;if(!c(i,lC))return b[2]?e(ct,a):1}else if(f===h)return dK(ct,a)}}return dM(ct,a)}function -yc(a){return a?yd:ye}function -yf(a){if(typeof -a!=="number"&&f===a[1]){var -b=a[2];if(!b)return dL(T,a);var -h=b[1];if(typeof -h!=="number"){var -i=h[1];if(d===i){var -g=h[2],j=aq(g,lz);if(0<=j){if(0>=j)return b[2]?e(T,a):7;if(!c(g,lL))return b[2]?e(T,a):8;if(!c(g,l3))return b[2]?e(T,a):9;if(!c(g,lt))return b[2]?e(T,a):10;if(!c(g,mt))return b[2]?e(T,a):12;if(!c(g,ka))return b[2]?e(T,a):13;if(!c(g,jT))return b[2]?e(T,a):14;if(!c(g,bW))return b[2]?e(T,a):11}else{if(!c(g,kI))return b[2]?e(T,a):0;if(!c(g,kJ))return b[2]?e(T,a):1;if(!c(g,lu))return b[2]?e(T,a):2;if(!c(g,nk))return b[2]?e(T,a):3;if(!c(g,mI))return b[2]?e(T,a):4;if(!c(g,kH))return b[2]?e(T,a):5;if(!c(g,ei))return b[2]?e(T,a):6}}else if(f===i)return dK(T,a)}}return dM(T,a)}function -yg(a){switch(a){case -0:return yh;case -1:return yi;case -2:return yj;case -3:return yk;case -4:return yl;case -5:return ym;case -6:return yn;case -7:return yo;case -8:return yp;case -9:return yq;case -10:return yr;case -11:return ys;case -12:return yt;case -13:return yu;default:return yv}}function -yw(a){return bG(function(a){var -b=a[1];return[0,b,iG(a[2])]},wq(a))}function -yx(a){return[0,z,bG(function(a){return[0,a[1],[0,d,a[2]]]},a)]}function -yy(a){if(typeof -a!=="number"&&z===a[1]){var -f=[0,0],d=[0,0],e=[0,0];(function(a){var -e=a;for(;;){if(!e)return;var -g=e[1],h=g[1],i=e[2],j=g[2];if(!c(h,mP))if(b(f))d[1]=[0,h,b(d)];else -f[1]=[0,yw(j)];var -e=i}}(a[2]));return b(d)?aM(fO,b(d),a):b(e)?aN(fO,b(e),a):[0,b(f)]}return aO(fO,a)}function -yz(a){var -b=a[1],c=0,d=b?[0,[0,yA,yx(b[1])],c]:c;return[0,z,d]}function -jK(a){if(typeof -a!=="number"&&f===a[1]){var -b=a[2];if(!b)return dL(p,a);var -h=b[1];if(typeof -h!=="number"){var -i=h[1];if(d===i){var -g=h[2],j=aq(g,kd);if(0<=j){if(0>=j)return b[2]?e(p,a):18;var -k=aq(g,kr);if(0<=k){if(0>=k)return b[2]?e(p,a):28;if(!c(g,lI))return b[2]?e(p,a):29;if(!c(g,j4))return b[2]?e(p,a):30;if(!c(g,lo))return b[2]?e(p,a):31;if(!c(g,mq))return b[2]?e(p,a):32;if(!c(g,ku))return b[2]?e(p,a):33;if(!c(g,kC))return b[2]?e(p,a):34;if(!c(g,lE))return b[2]?e(p,a):35;if(!c(g,la))return b[2]?e(p,a):36}else{if(!c(g,lS))return b[2]?e(p,a):19;if(!c(g,jZ))return b[2]?e(p,a):20;if(!c(g,l9))return b[2]?e(p,a):21;if(!c(g,l4))return b[2]?e(p,a):22;if(!c(g,ki))return b[2]?e(p,a):23;if(!c(g,lr))return b[2]?e(p,a):24;if(!c(g,nd))return b[2]?e(p,a):25;if(!c(g,mG))return b[2]?e(p,a):26;if(!c(g,kK))return b[2]?e(p,a):27}}else{var -l=aq(g,mm);if(0<=l){if(0>=l)return b[2]?e(p,a):9;if(!c(g,mp))return b[2]?e(p,a):10;if(!c(g,mU))return b[2]?e(p,a):11;if(!c(g,mV))return b[2]?e(p,a):12;if(!c(g,kp))return b[2]?e(p,a):13;if(!c(g,kt))return b[2]?e(p,a):14;if(!c(g,mL))return b[2]?e(p,a):15;if(!c(g,lb))return b[2]?e(p,a):16;if(!c(g,li))return b[2]?e(p,a):17}else{if(!c(g,mR))return b[2]?e(p,a):0;if(!c(g,gz))return b[2]?e(p,a):1;if(!c(g,mh))return b[2]?e(p,a):2;if(!c(g,lB))return b[2]?e(p,a):3;if(!c(g,kD))return b[2]?e(p,a):4;if(!c(g,kT))return b[2]?e(p,a):5;if(!c(g,l0))return b[2]?e(p,a):6;if(!c(g,lh))return b[2]?e(p,a):7;if(!c(g,kj))return b[2]?e(p,a):8}}}else if(f===i)return dK(p,a)}}return dM(p,a)}function -jL(a){switch(a){case -0:return yB;case -1:return yC;case -2:return yD;case -3:return yE;case -4:return yF;case -5:return yG;case -6:return yH;case -7:return yI;case -8:return yJ;case -9:return yK;case -10:return yL;case -11:return yM;case -12:return yN;case -13:return yO;case -14:return yP;case -15:return yQ;case -16:return yR;case -17:return yS;case -18:return yT;case -19:return yU;case -20:return yV;case -21:return yW;case -22:return yX;case -23:return yY;case -24:return yZ;case -25:return y0;case -26:return y1;case -27:return y2;case -28:return y3;case -29:return y4;case -30:return y5;case -31:return y6;case -32:return y7;case -33:return y8;case -34:return y9;case -35:return y_;default:return y$}}function -za(a){if(typeof -a!=="number"&&f===a[1]){var -b=a[2];if(!b)return dL(j,a);var -h=b[1];if(typeof -h!=="number"){var -i=h[1];if(d===i){var -g=h[2],k=aq(g,jR);if(0<=k){if(0>=k)return b[2]?e(j,a):30;var -l=aq(g,lO);if(0<=l){if(0>=l)return b[2]?e(j,a):46;var -m=aq(g,m7);if(0<=m){if(0>=m)return b[2]?e(j,a):54;if(!c(g,mC))return b[2]?e(j,a):55;if(!c(g,k5))return b[2]?e(j,a):56;if(!c(g,kA))return b[2]?e(j,a):57;if(!c(g,mH))return b[2]?e(j,a):58;if(!c(g,nf))return b[2]?e(j,a):59;if(!c(g,ml))return b[2]?e(j,a):60}else{if(!c(g,ln))return b[2]?e(j,a):47;if(!c(g,kl))return b[2]?e(j,a):48;if(!c(g,jW))return b[2]?e(j,a):49;if(!c(g,k3))return b[2]?e(j,a):50;if(!c(g,bW))return b[2]?e(j,a):51;if(!c(g,m3))return b[2]?e(j,a):52;if(!c(g,k0))return b[2]?e(j,a):53}}else{var -n=aq(g,lx);if(0<=n){if(0>=n)return b[2]?e(j,a):38;if(!c(g,mg))return b[2]?e(j,a):39;if(!c(g,ld))return b[2]?e(j,a):40;if(!c(g,m4))return b[2]?e(j,a):41;if(!c(g,my))return b[2]?e(j,a):42;if(!c(g,kz))return b[2]?e(j,a):43;if(!c(g,mA))return b[2]?e(j,a):44;if(!c(g,ng))return b[2]?e(j,a):45}else{if(!c(g,lX))return b[2]?e(j,a):31;if(!c(g,mu))return b[2]?e(j,a):32;if(!c(g,d_))return b[2]?e(j,a):33;if(!c(g,ea))return b[2]?e(j,a):34;if(!c(g,kW))return b[2]?e(j,a):35;if(!c(g,kY))return b[2]?e(j,a):36;if(!c(g,m0))return b[2]?e(j,a):37}}}else{var -o=aq(g,lH);if(0<=o){if(0>=o)return b[2]?e(j,a):15;var -p=aq(g,mF);if(0<=p){if(0>=p)return b[2]?e(j,a):23;if(!c(g,mj))return b[2]?e(j,a):24;if(!c(g,lW))return b[2]?e(j,a):25;if(!c(g,jU))return b[2]?e(j,a):26;if(!c(g,kB))return b[2]?e(j,a):27;if(!c(g,lF))return b[2]?e(j,a):28;if(!c(g,m$))return b[2]?e(j,a):29}else{if(!c(g,j_))return b[2]?e(j,a):16;if(!c(g,mT))return b[2]?e(j,a):17;if(!c(g,j8))return b[2]?e(j,a):18;if(!c(g,lw))return b[2]?e(j,a):19;if(!c(g,lQ))return b[2]?e(j,a):20;if(!c(g,mc))return b[2]?e(j,a):21;if(!c(g,m5))return b[2]?e(j,a):22}}else{var -q=aq(g,k_);if(0<=q){if(0>=q)return b[2]?e(j,a):7;if(!c(g,mn))return b[2]?e(j,a):8;if(!c(g,k6))return b[2]?e(j,a):9;if(!c(g,ei))return b[2]?e(j,a):10;if(!c(g,nb))return b[2]?e(j,a):11;if(!c(g,mb))return b[2]?e(j,a):12;if(!c(g,j9))return b[2]?e(j,a):13;if(!c(g,lY))return b[2]?e(j,a):14}else{if(!c(g,k7))return b[2]?e(j,a):0;if(!c(g,mX))return b[2]?e(j,a):1;if(!c(g,k2))return b[2]?e(j,a):2;if(!c(g,lT))return b[2]?e(j,a):3;if(!c(g,kv))return b[2]?e(j,a):4;if(!c(g,ly))return b[2]?e(j,a):5;if(!c(g,kn))return b[2]?e(j,a):6}}}}else if(f===i)return dK(j,a)}}return dM(j,a)}function -zb(a){var -b=a;if(31<=b)switch(b){case -31:return zH;case -32:return zI;case -33:return zJ;case -34:return zK;case -35:return zL;case -36:return zM;case -37:return zN;case -38:return zO;case -39:return zP;case -40:return zQ;case -41:return zR;case -42:return zS;case -43:return zT;case -44:return zU;case -45:return zV;case -46:return zW;case -47:return zX;case -48:return zY;case -49:return zZ;case -50:return z0;case -51:return z1;case -52:return z2;case -53:return z3;case -54:return z4;case -55:return z5;case -56:return z6;case -57:return z7;case -58:return z8;case -59:return z9;default:return z_}switch(b){case -0:return zc;case -1:return zd;case -2:return ze;case -3:return zf;case -4:return zg;case -5:return zh;case -6:return zi;case -7:return zj;case -8:return zk;case -9:return zl;case -10:return zm;case -11:return zn;case -12:return zo;case -13:return zp;case -14:return zq;case -15:return zr;case -16:return zs;case -17:return zt;case -18:return zu;case -19:return zv;case -20:return zw;case -21:return zx;case -22:return zy;case -23:return zz;case -24:return zA;case -25:return zB;case -26:return zC;case -27:return zD;case -28:return zE;case -29:return zF;default:return zG}}function -z$(a){return jK([0,f,[0,[0,d,iG(a)],0]])}function -Aa(a){var -b=jL(a);if(typeof -b!=="number"&&f===b[1]){var -c=b[2];if(c&&!c[2])return c[1]}throw h([0,v,Ab],1)}function -fP(a){if(typeof -a!=="number"&&z===a[1]){var -g=[0,0],m=[0,0],h=[0,0],n=[0,0],o=[0,0],p=[0,0],i=[0,0],j=[0,0],k=[0,0],q=[0,0],d=[0,0],e=[0,0];(function(a){var -l=a;for(;;){if(!l)return;var -r=l[1],f=r[2],e=r[1],s=aq(e,d_);a:b:{var -t=l[2];if(0<=s)if(0=a){var -c=a;for(;;){an[14].call(null,[0,c,0],0,f);var -g=c+1|0;if(b===c)break;var -c=g}}return}function -b(f,b){return am(Cr(c,e),function(a){return am(Cu(c,a),function(k){dj([0,CC,[0,f,[0,CB,[0,b,CA]]]]);var -d=hy(0);(function(a,b){var -f=a,e=b;for(;;){var -h=bQ(e,0);if(!h)return h;var -g=nS(e,Cg);eX([0,0,0,c[2][1][4],CF,jO,[0,f],[0,g],CE,CD,1,0,1],d);var -f=f+g|0,e=e-g|0}}(f,(b-f|0)+1|0));var -l=hA(d);function -i(a,f){var -b=a?a[1]:1;if(bQ(b,0))return dh(di(cq(function(a){return ae(q(cu(c)(0,[0,dQ,dP,dT,dS,dU,dV]),a,0),function(a){var -b=a[3],c=a[1];g(j,[0,[0,l,hA(d)]]);return function(d,b){var -a=co([0,[0,function(a){return a},an[1]],[0,[0,function(a){return a},aa[1]],0]],CG,e),f=bP([0,function(a){return a},an[1]])(a),g=bP([0,function(a){return a},aa[1]])(a);return ux(function(a,b){var -c=d+a|0,e=b[3],h=Cx(k,dm(b[4],CH)),i=dm(b[2],b[1]);an[14].call(null,[0,c,[0,e]],0,f);aa[14].call(null,[0,[0,c,h,i],b],0,g);return 0},b)}(b,c)})},function(a,b){var -c=a,d=b;for(;;){if(by(d,0))return ai(c);var -e=hz(f);if(!e)return ai(c);var -c=[0,e[1],c],d=d-1|0}}(0,b))),function(a){return uv(a)?cm(0):i(0,f)});throw h([0,v,CI],1)}return i(0,d)})})}return function(a){if(typeof -a==="number")return 2===a?cm(0):cm(0);if(0!==a[0])return b(a[1],a[2]);var -c=a[3],e=a[2];d(a[1],c);return b(e,c)}}}var -jP=Bm([0]);function -CJ(d,b,c){return am(Cq(b,c),function(a){var -e=[0,a,Cp[2]];return ae(g(Cy(iv(function(b){g(b,e);return function(a){return g(b,[0,e[1],a])}},d),b)(c),a),function(a){return uz(function(a){return g(a,CK)},d)})})}var -CL=jP[2],CM=jP[3],fT=aa[5],fU=aa[13];function -CN(a,b){var -e=t3(a);dj([0,CP,[0,t2(a),[0,CO,[0,e,0]]]]);var -d=dk(b),f=fy([0,function(a){return a},an[1]])(CQ,d),c=fy([0,function(a){return a},aa[1]])(CR,d),h=fy([0,function(a){return a},B1[1]])(CS,d),i=g(aa[12].call(null,[0,function(a){return a},jM[12],jM[2]]),c);g(aa[12].call(null,[0,function(a){return a},bj[12],bj[2]]),c);g(aa[12].call(null,[0,function(a){return a},cC[12],cC[2]]),c);g(aa[12].call(null,[0,function(a){return a},jN[12],jN[2]]),c);return dj([0,CT,[0,f,[0,c,[0,i,[0,h,0]]]]])}function -CU(d,b,c){function -e(a,b){return g(c,dk(b))}(function(a){return fx(e,a)}(function(a){return um(CN,a)}(function(a){return un(b,d,a)}(up(0,0)))));return}sc(0);function -CV(a){return bx(a,function(a){return iw(function(a){return[0,lg,a]},a)})}function -bR(a){return CV(ir(a))}function -CW(a){return function(a){return{fut:a}}(fo(ib(bc(function(a){return a[gH]},a)),function(a){return ck(fk(function(a){return a},a))}))}function -CX(a){var -c=fp(0),f=c[1],d=c[2];(function(a){return CU(CZ,CY,a)}(function(a){d([0,a]);return 0}));function -b(a){return ae(f,function(a){var -b=co([0,[0,function(a){return a},aa[1]],0],C0,a);return bP([0,function(a){return a},aa[1]])(b)})}var -i=e$(0,64),e=[0,[0,-1,[0]]];function -k(a,b){var -c=b[1];return CJ([0,function(a){return CL(0,[0,c,a])}],b[2],a)}function -j(a,b){var -d=b[4],c=b[2],f=sk([0,c,d]);if(uu(e[1][1],f))return cm(e[1][2]);var -l=g(fU([0,function(a){return a},cC[12],cC[2]]),a);function -m(a){a:{if(d&&!d[2]){var -c=d[1][1];if(!uF(c)){var -h=hs(c),i=iu(function(a){var -b=hs(a[2]);return it(uP(0,uO(g(V(C1),h)))(b),0)},a),b=i;break a}}var -b=a}e[1]=[0,f,b];return b}try{var -q=cm(hO(i,c)),k=q}catch(f){var -j=O(f);if(j!==aF)throw h(j,0);var -n=bc(N,[0,C2]),o=[0,fw(n,bc(N,[0,C3]),C5,C4,0)],p=ae(bR(cC[8].call(null,o,l)),function(a){if(c)var -d=c[1],b=iu(function(a){return hk(function(a){return ov(a,d)},a[3])},a);else -var -b=a;sm(i,c,b);return b}),k=p}return ae(k,m)}return[0,,,,,function(a){switch(a[0]){case -0:var -e=a[1];return am(f,function(a){return bx(k(a,oo(e)),function(a){return iw(function(a){return[0,lg,a]},a)})});case -1:return am(b(0),function(a){return ae(bR(aa[6].call(null,a)),function(a){return eV(eU(function(a){return a[2]},a))})});case -2:return am(b(0),function(b){var -a=g(fU([0,function(a){return a},bj[12],bj[2]]),b),c=bc(N,[0,C6]),d=[0,fw(c,bc(N,[0,C7]),C9,C8,0)];return am(bR(bj[8].call(null,d,a)),function(a){return bx(di(cq(function(a){return bR(fT(a,b))},eV(a))),function(a){function -b(a){return cq(function(a){return uA(C_,a)},a)}return function(a){return fB(b,a)}(fC(a))})})});case -3:var -h=a[1];return am(b(0),function(b){var -a=g(fU([0,function(a){return a},bj[12],bj[2]]),b),c=bc(N,[0,C$]),d=[0,fw(c,bc(N,[0,Da]),Dc,Db,0)];return am(bR(bj[8].call(null,d,a)),function(a){return bx(di(cq(function(a){return bR(fT(a,b))},eV(a))),function(a){function -b(a){if(a){var -b=a[1];if(ht(b[2][7],h))return[0,b]}return 0}function -c(a){return fA(b,a)}return function(a){return fB(c,a)}(fC(a))})})});case -4:var -c=a[1],i=xT(0);return am(b(0),function(a){return ae(j(a,c),function(a){var -b=a.length-1;return[0,i,c,Bn(b,c[3]),0,b]})});default:var -d=a[1],l=a[2];return am(b(0),function(b){return am(j(b,d[2]),function(f){return bx(CW(eU(function(a){try{var -c=Bo(d[3],a+d[4]|0),e=t(f,c)[1+c],g=bx(ir(fT(e,b)),function(a){if(0===a[0]){var -b=a[1];return b?[0,b[1]]:0}il([0,Dd,[0,e,[0,a[1],0]]]);return 0});return g}catch(f){return dg(0)}},l)),function(a){return[0,a]})})})}}]}CM(function(a){return[0,CX(a)[5]]});eO(0);return}(globalThis)); +(function + (Object){ + typeof globalThis !== "object" + && + (this + ? get() + : (Object.defineProperty + (Object.prototype, "_T_", {configurable: true, get: get}), + _T_)); + function get(){ + var global = this || self; + global.globalThis = global; + delete Object.prototype._T_; + } + } + (Object)); +(function(globalThis){ + "use strict"; + function caml_array_blit(a1, i1, a2, i2, len){ + if(i2 <= i1) + for(var j = 1; j <= len; j++) a2[i2 + j] = a1[i1 + j]; + else + for(var j = len; j >= 1; j--) a2[i2 + j] = a1[i1 + j]; + return 0; + } + function caml_subarray_to_jsbytes(a, i, len){ + var f = String.fromCharCode; + if(i == 0 && len <= 4096 && len == a.length) return f.apply(null, a); + var s = ""; + for(; 0 < len; i += 1024, len -= 1024) + s += f.apply(null, a.slice(i, i + Math.min(len, 1024))); + return s; + } + function caml_convert_bytes_to_array(s){ + var a = new Uint8Array(s.l), b = s.c, l = b.length, i = 0; + for(; i < l; i++) a[i] = b.charCodeAt(i); + for(l = s.l; i < l; i++) a[i] = 0; + s.c = a; + s.t = 4; + return a; + } + function caml_blit_bytes(s1, i1, s2, i2, len){ + if(len == 0) return 0; + if(i2 == 0 && (len >= s2.l || s2.t == 2 && len >= s2.c.length)){ + s2.c = + s1.t == 4 + ? caml_subarray_to_jsbytes(s1.c, i1, len) + : i1 == 0 && s1.c.length == len ? s1.c : s1.c.substr(i1, len); + s2.t = s2.c.length == s2.l ? 0 : 2; + } + else if(s2.t == 2 && i2 == s2.c.length){ + s2.c += + s1.t == 4 + ? caml_subarray_to_jsbytes(s1.c, i1, len) + : i1 == 0 && s1.c.length == len ? s1.c : s1.c.substr(i1, len); + s2.t = s2.c.length == s2.l ? 0 : 2; + } + else{ + if(s2.t != 4) caml_convert_bytes_to_array(s2); + var c1 = s1.c, c2 = s2.c; + if(s1.t == 4) + if(i2 <= i1) + for(var i = 0; i < len; i++) c2[i2 + i] = c1[i1 + i]; + else + for(var i = len - 1; i >= 0; i--) c2[i2 + i] = c1[i1 + i]; + else{ + var l = Math.min(len, c1.length - i1); + for(var i = 0; i < l; i++) c2[i2 + i] = c1.charCodeAt(i1 + i); + for(; i < len; i++) c2[i2 + i] = 0; + } + } + return 0; + } + function caml_str_repeat(n, s){ + if(n == 0) return ""; + if(s.repeat) return s.repeat(n); + var r = "", l = 0; + for(;;){ + if(n & 1) r += s; + n >>= 1; + if(n == 0) return r; + s += s; + l++; + if(l == 9) s.slice(0, 1); + } + } + function caml_convert_string_to_bytes(s){ + if(s.t == 2) + s.c += caml_str_repeat(s.l - s.c.length, "\0"); + else + s.c = caml_subarray_to_jsbytes(s.c, 0, s.c.length); + s.t = 0; + } + function jsoo_is_ascii(s){ + if(s.length < 24){ + for(var i = 0; i < s.length; i++) if(s.charCodeAt(i) > 127) return false; + return true; + } + else + return ! /[^\x00-\x7f]/.test(s); + } + function caml_utf16_of_utf8(s){ + for(var b = "", t = "", c, c1, c2, v, i = 0, l = s.length; i < l; i++){ + c1 = s.charCodeAt(i); + if(c1 < 0x80){ + for(var j = i + 1; j < l && (c1 = s.charCodeAt(j)) < 0x80; j++) ; + if(j - i > 512){ + t.substr(0, 1); + b += t; + t = ""; + b += s.slice(i, j); + } + else + t += s.slice(i, j); + if(j == l) break; + i = j; + } + v = 1; + if(++i < l && ((c2 = s.charCodeAt(i)) & - 64) == 128){ + c = c2 + (c1 << 6); + if(c1 < 0xe0){ + v = c - 0x3080; + if(v < 0x80) v = 1; + } + else{ + v = 2; + if(++i < l && ((c2 = s.charCodeAt(i)) & - 64) == 128){ + c = c2 + (c << 6); + if(c1 < 0xf0){ + v = c - 0xe2080; + if(v < 0x800 || v >= 0xd7ff && v < 0xe000) v = 2; + } + else{ + v = 3; + if(++i < l && ((c2 = s.charCodeAt(i)) & - 64) == 128 && c1 < 0xf5){ + v = c2 - 0x3c82080 + (c << 6); + if(v < 0x10000 || v > 0x10ffff) v = 3; + } + } + } + } + } + if(v < 4){ + i -= v; + t += "\ufffd"; + } + else if(v > 0xffff) + t += String.fromCharCode(0xd7c0 + (v >> 10), 0xdc00 + (v & 0x3FF)); + else + t += String.fromCharCode(v); + if(t.length > 1024){t.substr(0, 1); b += t; t = "";} + } + return b + t; + } + function MlBytes(tag, contents, length){ + this.t = tag; + this.c = contents; + this.l = length; + } + MlBytes.prototype.toString = + function(){ + switch(this.t){ + case 9: + return this.c; + default: caml_convert_string_to_bytes(this); + case 0: + if(jsoo_is_ascii(this.c)){this.t = 9; return this.c;} this.t = 8; + case 8: + return this.c; + } + }; + MlBytes.prototype.toUtf16 = + function(){ + var r = this.toString(); + if(this.t == 9) return r; + return caml_utf16_of_utf8(r); + }; + MlBytes.prototype.slice = + function(){ + var content = this.t == 4 ? this.c.slice() : this.c; + return new MlBytes(this.t, content, this.l); + }; + function caml_bytes_of_jsbytes(s){return new MlBytes(0, s, s.length);} + function caml_jsbytes_of_string(x){return x;} + function caml_bytes_of_string(s){ + return caml_bytes_of_jsbytes(caml_jsbytes_of_string(s)); + } + function caml_blit_string(a, b, c, d, e){ + caml_blit_bytes(caml_bytes_of_string(a), b, c, d, e); + return 0; + } + function jsoo_sys_getenv(n){ + var process = globalThis.process; + if(process && process.env && process.env[n] != undefined) + return process.env[n]; + if(globalThis.jsoo_static_env && globalThis.jsoo_static_env[n]) + return globalThis.jsoo_static_env[n]; + } + var caml_record_backtrace_flag = 0; + (function(){ + var r = jsoo_sys_getenv("OCAMLRUNPARAM"); + if(r !== undefined){ + var l = r.split(","); + for(var i = 0; i < l.length; i++) + if(l[i] == "b"){ + caml_record_backtrace_flag = 1; + break; + } + else if(l[i].startsWith("b=")) + caml_record_backtrace_flag = + l[i].slice(2); + else + continue; + } + } + ()); + var caml_global_data = [0]; + function caml_exn_with_js_backtrace(exn, force){ + if(! exn.js_error || force || exn[0] == 248) + exn.js_error = new globalThis.Error("Js exception containing backtrace"); + return exn; + } + function caml_maybe_attach_backtrace(exn, force){ + return caml_record_backtrace_flag + ? caml_exn_with_js_backtrace(exn, force) + : exn; + } + function caml_raise_with_arg(tag, arg){ + throw caml_maybe_attach_backtrace([0, tag, arg]); + } + function caml_string_of_jsbytes(x){return x;} + function caml_raise_with_string(tag, msg){ + caml_raise_with_arg(tag, caml_string_of_jsbytes(msg)); + } + function caml_invalid_argument(msg){ + caml_raise_with_string(caml_global_data.Invalid_argument, msg); + } + function caml_bytes_bound_error(){ + caml_invalid_argument("index out of bounds"); + } + function caml_bytes_unsafe_set(s, i, c){ + c &= 0xff; + if(s.t != 4){ + if(i == s.c.length){ + s.c += String.fromCharCode(c); + if(i + 1 == s.l) s.t = 0; + return 0; + } + caml_convert_bytes_to_array(s); + } + s.c[i] = c; + return 0; + } + function caml_bytes_set(s, i, c){ + if(i >>> 0 >= s.l) caml_bytes_bound_error(); + return caml_bytes_unsafe_set(s, i, c); + } + function caml_bytes_unsafe_get(s, i){ + switch(s.t & 6){ + default: if(i >= s.c.length) return 0; + case 0: + return s.c.charCodeAt(i); + case 4: + return s.c[i]; + } + } + function caml_call_gen(f, args){ + var + n = f.l >= 0 ? f.l : f.l = f.length, + argsLen = args.length, + d = n - argsLen; + if(d == 0) + return f.apply(null, args); + else if(d < 0){ + var g = f.apply(null, args.slice(0, n)); + if(typeof g !== "function") return g; + return caml_call_gen(g, args.slice(n)); + } + else{ + switch(d){ + case 1: + { + var + g = + function(x){ + var nargs = new Array(argsLen + 1); + for(var i = 0; i < argsLen; i++) nargs[i] = args[i]; + nargs[argsLen] = x; + return f.apply(null, nargs); + }; + break; + } + case 2: + { + var + g = + function(x, y){ + var nargs = new Array(argsLen + 2); + for(var i = 0; i < argsLen; i++) nargs[i] = args[i]; + nargs[argsLen] = x; + nargs[argsLen + 1] = y; + return f.apply(null, nargs); + }; + break; + } + default: + var + g = + function(){ + var + extra_args = arguments.length == 0 ? 1 : arguments.length, + nargs = new Array(args.length + extra_args); + for(var i = 0; i < args.length; i++) nargs[i] = args[i]; + for(var i = 0; i < arguments.length; i++) + nargs[args.length + i] = arguments[i]; + return caml_call_gen(f, nargs); + }; + } + g.l = d; + return g; + } + } + function caml_array_bound_error(){ + caml_invalid_argument("index out of bounds"); + } + function caml_check_bound(array, index){ + if(index >>> 0 >= array.length - 1) caml_array_bound_error(); + return array; + } + function caml_classify_float(x){ + if(isFinite(x)){ + if(Math.abs(x) >= 2.2250738585072014e-308) return 0; + if(x != 0) return 1; + return 2; + } + return isNaN(x) ? 4 : 3; + } + function caml_is_continuation_tag(t){return 0;} + var log2_ok = Math.log2 && Math.log2(1.1235582092889474E+307) == 1020; + function jsoo_floor_log2(x){ + if(log2_ok) return Math.floor(Math.log2(x)); + var i = 0; + if(x == 0) return - Infinity; + if(x >= 1) while(x >= 2){x /= 2; i++;} else while(x < 1){x *= 2; i--;} + return i; + } + function caml_int32_bits_of_float(x){ + var float32a = new Float32Array(1); + float32a[0] = x; + var int32a = new Int32Array(float32a.buffer); + return int32a[0] | 0; + } + var caml_int64_offset = Math.pow(2, - 24); + function caml_raise_constant(tag){throw tag;} + function caml_raise_zero_divide(){ + caml_raise_constant(caml_global_data.Division_by_zero); + } + function MlInt64(lo, mi, hi){ + this.lo = lo & 0xffffff; + this.mi = mi & 0xffffff; + this.hi = hi & 0xffff; + } + MlInt64.prototype.caml_custom = "_j"; + MlInt64.prototype.copy = + function(){return new MlInt64(this.lo, this.mi, this.hi);}; + MlInt64.prototype.ucompare = + function(x){ + if(this.hi > x.hi) return 1; + if(this.hi < x.hi) return - 1; + if(this.mi > x.mi) return 1; + if(this.mi < x.mi) return - 1; + if(this.lo > x.lo) return 1; + if(this.lo < x.lo) return - 1; + return 0; + }; + MlInt64.prototype.compare = + function(x){ + var hi = this.hi << 16, xhi = x.hi << 16; + if(hi > xhi) return 1; + if(hi < xhi) return - 1; + if(this.mi > x.mi) return 1; + if(this.mi < x.mi) return - 1; + if(this.lo > x.lo) return 1; + if(this.lo < x.lo) return - 1; + return 0; + }; + MlInt64.prototype.neg = + function(){ + var + lo = - this.lo, + mi = - this.mi + (lo >> 24), + hi = - this.hi + (mi >> 24); + return new MlInt64(lo, mi, hi); + }; + MlInt64.prototype.add = + function(x){ + var + lo = this.lo + x.lo, + mi = this.mi + x.mi + (lo >> 24), + hi = this.hi + x.hi + (mi >> 24); + return new MlInt64(lo, mi, hi); + }; + MlInt64.prototype.sub = + function(x){ + var + lo = this.lo - x.lo, + mi = this.mi - x.mi + (lo >> 24), + hi = this.hi - x.hi + (mi >> 24); + return new MlInt64(lo, mi, hi); + }; + MlInt64.prototype.mul = + function(x){ + var + lo = this.lo * x.lo, + mi = (lo * caml_int64_offset | 0) + this.mi * x.lo + this.lo * x.mi, + hi = + (mi * caml_int64_offset | 0) + this.hi * x.lo + this.mi * x.mi + + this.lo * x.hi; + return new MlInt64(lo, mi, hi); + }; + MlInt64.prototype.isZero = + function(){return (this.lo | this.mi | this.hi) == 0;}; + MlInt64.prototype.isNeg = function(){return this.hi << 16 < 0;}; + MlInt64.prototype.and = + function(x){ + return new MlInt64(this.lo & x.lo, this.mi & x.mi, this.hi & x.hi); + }; + MlInt64.prototype.or = + function(x){ + return new MlInt64(this.lo | x.lo, this.mi | x.mi, this.hi | x.hi); + }; + MlInt64.prototype.xor = + function(x){ + return new MlInt64(this.lo ^ x.lo, this.mi ^ x.mi, this.hi ^ x.hi); + }; + MlInt64.prototype.shift_left = + function(s){ + s = s & 63; + if(s == 0) return this; + if(s < 24) + return new + MlInt64 + (this.lo << s, + this.mi << s | this.lo >> 24 - s, + this.hi << s | this.mi >> 24 - s); + if(s < 48) + return new + MlInt64 + (0, this.lo << s - 24, this.mi << s - 24 | this.lo >> 48 - s); + return new MlInt64(0, 0, this.lo << s - 48); + }; + MlInt64.prototype.shift_right_unsigned = + function(s){ + s = s & 63; + if(s == 0) return this; + if(s < 24) + return new + MlInt64 + (this.lo >> s | this.mi << 24 - s, + this.mi >> s | this.hi << 24 - s, + this.hi >> s); + if(s < 48) + return new + MlInt64 + (this.mi >> s - 24 | this.hi << 48 - s, this.hi >> s - 24, 0); + return new MlInt64(this.hi >> s - 48, 0, 0); + }; + MlInt64.prototype.shift_right = + function(s){ + s = s & 63; + if(s == 0) return this; + var h = this.hi << 16 >> 16; + if(s < 24) + return new + MlInt64 + (this.lo >> s | this.mi << 24 - s, + this.mi >> s | h << 24 - s, + this.hi << 16 >> s >>> 16); + var sign = this.hi << 16 >> 31; + if(s < 48) + return new + MlInt64 + (this.mi >> s - 24 | this.hi << 48 - s, + this.hi << 16 >> s - 24 >> 16, + sign & 0xffff); + return new MlInt64(this.hi << 16 >> s - 32, sign, sign); + }; + MlInt64.prototype.lsl1 = + function(){ + this.hi = this.hi << 1 | this.mi >> 23; + this.mi = (this.mi << 1 | this.lo >> 23) & 0xffffff; + this.lo = this.lo << 1 & 0xffffff; + }; + MlInt64.prototype.lsr1 = + function(){ + this.lo = (this.lo >>> 1 | this.mi << 23) & 0xffffff; + this.mi = (this.mi >>> 1 | this.hi << 23) & 0xffffff; + this.hi = this.hi >>> 1; + }; + MlInt64.prototype.udivmod = + function(x){ + var + offset = 0, + modulus = this.copy(), + divisor = x.copy(), + quotient = new MlInt64(0, 0, 0); + while(modulus.ucompare(divisor) > 0){offset++; divisor.lsl1();} + while(offset >= 0){ + offset--; + quotient.lsl1(); + if(modulus.ucompare(divisor) >= 0){ + quotient.lo++; + modulus = modulus.sub(divisor); + } + divisor.lsr1(); + } + return {quotient: quotient, modulus: modulus}; + }; + MlInt64.prototype.div = + function(y){ + var x = this; + if(y.isZero()) caml_raise_zero_divide(); + var sign = x.hi ^ y.hi; + if(x.hi & 0x8000) x = x.neg(); + if(y.hi & 0x8000) y = y.neg(); + var q = x.udivmod(y).quotient; + if(sign & 0x8000) q = q.neg(); + return q; + }; + MlInt64.prototype.mod = + function(y){ + var x = this; + if(y.isZero()) caml_raise_zero_divide(); + var sign = x.hi; + if(x.hi & 0x8000) x = x.neg(); + if(y.hi & 0x8000) y = y.neg(); + var r = x.udivmod(y).modulus; + if(sign & 0x8000) r = r.neg(); + return r; + }; + MlInt64.prototype.toInt = function(){return this.lo | this.mi << 24;}; + MlInt64.prototype.toFloat = + function(){ + return (this.hi << 16) * Math.pow(2, 32) + this.mi * Math.pow(2, 24) + + this.lo; + }; + MlInt64.prototype.toArray = + function(){ + return [this.hi >> 8, + this.hi & 0xff, + this.mi >> 16, + this.mi >> 8 & 0xff, + this.mi & 0xff, + this.lo >> 16, + this.lo >> 8 & 0xff, + this.lo & 0xff]; + }; + MlInt64.prototype.lo32 = + function(){return this.lo | (this.mi & 0xff) << 24;}; + MlInt64.prototype.hi32 = + function(){return this.mi >>> 8 & 0xffff | this.hi << 16;}; + function caml_int64_create_lo_mi_hi(lo, mi, hi){return new MlInt64(lo, mi, hi); + } + function caml_int64_bits_of_float(x){ + if(! isFinite(x)){ + if(isNaN(x)) return caml_int64_create_lo_mi_hi(1, 0, 0x7ff0); + return x > 0 + ? caml_int64_create_lo_mi_hi(0, 0, 0x7ff0) + : caml_int64_create_lo_mi_hi(0, 0, 0xfff0); + } + var sign = x == 0 && 1 / x == - Infinity ? 0x8000 : x >= 0 ? 0 : 0x8000; + if(sign) x = - x; + var exp = jsoo_floor_log2(x) + 1023; + if(exp <= 0){ + exp = 0; + x /= Math.pow(2, - 1026); + } + else{ + x /= Math.pow(2, exp - 1027); + if(x < 16){x *= 2; exp -= 1;} + if(exp == 0) x /= 2; + } + var k = Math.pow(2, 24), r3 = x | 0; + x = (x - r3) * k; + var r2 = x | 0; + x = (x - r2) * k; + var r1 = x | 0; + r3 = r3 & 0xf | sign | exp << 4; + return caml_int64_create_lo_mi_hi(r1, r2, r3); + } + function caml_int64_to_bytes(x){return x.toArray();} + function caml_ba_serialize(writer, ba, sz){ + writer.write(32, ba.dims.length); + writer.write(32, ba.kind | ba.layout << 8); + if(ba.caml_custom == "_bigarr02") + for(var i = 0; i < ba.dims.length; i++) + if(ba.dims[i] < 0xffff) + writer.write(16, ba.dims[i]); + else{ + writer.write(16, 0xffff); + writer.write(32, 0); + writer.write(32, ba.dims[i]); + } + else + for(var i = 0; i < ba.dims.length; i++) writer.write(32, ba.dims[i]); + switch(ba.kind){ + case 2: + case 3: + case 12: + for(var i = 0; i < ba.data.length; i++) writer.write(8, ba.data[i]); + break; + case 4: + case 5: + for(var i = 0; i < ba.data.length; i++) writer.write(16, ba.data[i]); + break; + case 6: + for(var i = 0; i < ba.data.length; i++) writer.write(32, ba.data[i]); + break; + case 8: + case 9: + writer.write(8, 0); + for(var i = 0; i < ba.data.length; i++) writer.write(32, ba.data[i]); + break; + case 7: + for(var i = 0; i < ba.data.length / 2; i++){ + var b = caml_int64_to_bytes(ba.get(i)); + for(var j = 0; j < 8; j++) writer.write(8, b[j]); + } + break; + case 1: + for(var i = 0; i < ba.data.length; i++){ + var b = caml_int64_to_bytes(caml_int64_bits_of_float(ba.get(i))); + for(var j = 0; j < 8; j++) writer.write(8, b[j]); + } + break; + case 0: + for(var i = 0; i < ba.data.length; i++){ + var b = caml_int32_bits_of_float(ba.get(i)); + writer.write(32, b); + } + break; + case 10: + for(var i = 0; i < ba.data.length / 2; i++){ + var j = ba.get(i); + writer.write(32, caml_int32_bits_of_float(j[1])); + writer.write(32, caml_int32_bits_of_float(j[2])); + } + break; + case 11: + for(var i = 0; i < ba.data.length / 2; i++){ + var + complex = ba.get(i), + b = caml_int64_to_bytes(caml_int64_bits_of_float(complex[1])); + for(var j = 0; j < 8; j++) writer.write(8, b[j]); + var b = caml_int64_to_bytes(caml_int64_bits_of_float(complex[2])); + for(var j = 0; j < 8; j++) writer.write(8, b[j]); + } + break; + } + sz[0] = (4 + ba.dims.length) * 4; + sz[1] = (4 + ba.dims.length) * 8; + } + function caml_ba_get_size_per_element(kind){ + switch(kind){case 7:case 10:case 11: return 2;default: return 1; + } + } + function caml_ba_create_buffer(kind, size){ + var view; + switch(kind){ + case 0: + view = Float32Array; break; + case 1: + view = Float64Array; break; + case 2: + view = Int8Array; break; + case 3: + view = Uint8Array; break; + case 4: + view = Int16Array; break; + case 5: + view = Uint16Array; break; + case 6: + view = Int32Array; break; + case 7: + view = Int32Array; break; + case 8: + view = Int32Array; break; + case 9: + view = Int32Array; break; + case 10: + view = Float32Array; break; + case 11: + view = Float64Array; break; + case 12: + view = Uint8Array; break; + } + if(! view) caml_invalid_argument("Bigarray.create: unsupported kind"); + var data = new view(size * caml_ba_get_size_per_element(kind)); + return data; + } + function caml_int32_float_of_bits(x){ + var int32a = new Int32Array(1); + int32a[0] = x; + var float32a = new Float32Array(int32a.buffer); + return float32a[0]; + } + function caml_int64_of_bytes(a){ + return new + MlInt64 + (a[7] << 0 | a[6] << 8 | a[5] << 16, + a[4] << 0 | a[3] << 8 | a[2] << 16, + a[1] << 0 | a[0] << 8); + } + function caml_int64_float_of_bits(x){ + var lo = x.lo, mi = x.mi, hi = x.hi, exp = (hi & 0x7fff) >> 4; + if(exp == 2047) + return (lo | mi | hi & 0xf) == 0 + ? hi & 0x8000 ? - Infinity : Infinity + : NaN; + var k = Math.pow(2, - 24), res = (lo * k + mi) * k + (hi & 0xf); + if(exp > 0){ + res += 16; + res *= Math.pow(2, exp - 1027); + } + else + res *= Math.pow(2, - 1026); + if(hi & 0x8000) res = - res; + return res; + } + function caml_ba_get_size(dims){ + var n_dims = dims.length, size = 1; + for(var i = 0; i < n_dims; i++){ + if(dims[i] < 0) + caml_invalid_argument("Bigarray.create: negative dimension"); + size = size * dims[i]; + } + return size; + } + function caml_int64_create_lo_hi(lo, hi){ + return new + MlInt64 + (lo & 0xffffff, + lo >>> 24 & 0xff | (hi & 0xffff) << 8, + hi >>> 16 & 0xffff); + } + function caml_int64_hi32(v){return v.hi32();} + function caml_int64_lo32(v){return v.lo32();} + var caml_ba_custom_name = "_bigarr02"; + function Ml_Bigarray(kind, layout, dims, buffer){ + this.kind = kind; + this.layout = layout; + this.dims = dims; + this.data = buffer; + } + Ml_Bigarray.prototype.caml_custom = caml_ba_custom_name; + Ml_Bigarray.prototype.offset = + function(arg){ + var ofs = 0; + if(typeof arg === "number") arg = [arg]; + if(! (arg instanceof Array)) + caml_invalid_argument("bigarray.js: invalid offset"); + if(this.dims.length != arg.length) + caml_invalid_argument("Bigarray.get/set: bad number of dimensions"); + if(this.layout == 0) + for(var i = 0; i < this.dims.length; i++){ + if(arg[i] < 0 || arg[i] >= this.dims[i]) caml_array_bound_error(); + ofs = ofs * this.dims[i] + arg[i]; + } + else + for(var i = this.dims.length - 1; i >= 0; i--){ + if(arg[i] < 1 || arg[i] > this.dims[i]) caml_array_bound_error(); + ofs = ofs * this.dims[i] + (arg[i] - 1); + } + return ofs; + }; + Ml_Bigarray.prototype.get = + function(ofs){ + switch(this.kind){ + case 7: + var l = this.data[ofs * 2 + 0], h = this.data[ofs * 2 + 1]; + return caml_int64_create_lo_hi(l, h); + case 10: + case 11: + var r = this.data[ofs * 2 + 0], i = this.data[ofs * 2 + 1]; + return [254, r, i]; + default: return this.data[ofs]; + } + }; + Ml_Bigarray.prototype.set = + function(ofs, v){ + switch(this.kind){ + case 7: + this.data[ofs * 2 + 0] = caml_int64_lo32(v); + this.data[ofs * 2 + 1] = caml_int64_hi32(v); + break; + case 10: + case 11: + this.data[ofs * 2 + 0] = v[1]; this.data[ofs * 2 + 1] = v[2]; break; + default: this.data[ofs] = v; break; + } + return 0; + }; + Ml_Bigarray.prototype.fill = + function(v){ + switch(this.kind){ + case 7: + var a = caml_int64_lo32(v), b = caml_int64_hi32(v); + if(a == b) + this.data.fill(a); + else + for(var i = 0; i < this.data.length; i++) + this.data[i] = i % 2 == 0 ? a : b; + break; + case 10: + case 11: + var im = v[1], re = v[2]; + if(im == re) + this.data.fill(im); + else + for(var i = 0; i < this.data.length; i++) + this.data[i] = i % 2 == 0 ? im : re; + break; + default: this.data.fill(v); break; + } + }; + Ml_Bigarray.prototype.compare = + function(b, total){ + if(this.layout != b.layout || this.kind != b.kind){ + var k1 = this.kind | this.layout << 8, k2 = b.kind | b.layout << 8; + return k2 - k1; + } + if(this.dims.length != b.dims.length) + return b.dims.length - this.dims.length; + for(var i = 0; i < this.dims.length; i++) + if(this.dims[i] != b.dims[i]) return this.dims[i] < b.dims[i] ? - 1 : 1; + switch(this.kind){ + case 0: + case 1: + case 10: + case 11: + var x, y; + for(var i = 0; i < this.data.length; i++){ + x = this.data[i]; + y = b.data[i]; + if(x < y) return - 1; + if(x > y) return 1; + if(x != y){ + if(! total) return NaN; + if(x == x) return 1; + if(y == y) return - 1; + } + } + break; + case 7: + for(var i = 0; i < this.data.length; i += 2){ + if(this.data[i + 1] < b.data[i + 1]) return - 1; + if(this.data[i + 1] > b.data[i + 1]) return 1; + if(this.data[i] >>> 0 < b.data[i] >>> 0) return - 1; + if(this.data[i] >>> 0 > b.data[i] >>> 0) return 1; + } + break; + case 2: + case 3: + case 4: + case 5: + case 6: + case 8: + case 9: + case 12: + for(var i = 0; i < this.data.length; i++){ + if(this.data[i] < b.data[i]) return - 1; + if(this.data[i] > b.data[i]) return 1; + } + break; + } + return 0; + }; + function Ml_Bigarray_c_1_1(kind, layout, dims, buffer){ + this.kind = kind; + this.layout = layout; + this.dims = dims; + this.data = buffer; + } + Ml_Bigarray_c_1_1.prototype = new Ml_Bigarray(); + Ml_Bigarray_c_1_1.prototype.offset = + function(arg){ + if(typeof arg !== "number") + if(arg instanceof Array && arg.length == 1) + arg = arg[0]; + else + caml_invalid_argument("Ml_Bigarray_c_1_1.offset"); + if(arg < 0 || arg >= this.dims[0]) caml_array_bound_error(); + return arg; + }; + Ml_Bigarray_c_1_1.prototype.get = function(ofs){return this.data[ofs];}; + Ml_Bigarray_c_1_1.prototype.set = + function(ofs, v){this.data[ofs] = v; return 0;}; + Ml_Bigarray_c_1_1.prototype.fill = + function(v){this.data.fill(v); return 0;}; + function caml_ba_create_unsafe(kind, layout, dims, data){ + var size_per_element = caml_ba_get_size_per_element(kind); + if(caml_ba_get_size(dims) * size_per_element != data.length) + caml_invalid_argument("length doesn't match dims"); + if(layout == 0 && dims.length == 1 && size_per_element == 1) + return new Ml_Bigarray_c_1_1(kind, layout, dims, data); + return new Ml_Bigarray(kind, layout, dims, data); + } + function caml_failwith(msg){ + if(! caml_global_data.Failure) + caml_global_data.Failure = [248, caml_string_of_jsbytes("Failure"), - 3]; + caml_raise_with_string(caml_global_data.Failure, msg); + } + function caml_ba_deserialize(reader, sz, name){ + var num_dims = reader.read32s(); + if(num_dims < 0 || num_dims > 16) + caml_failwith("input_value: wrong number of bigarray dimensions"); + var + tag = reader.read32s(), + kind = tag & 0xff, + layout = tag >> 8 & 1, + dims = []; + if(name == "_bigarr02") + for(var i = 0; i < num_dims; i++){ + var size_dim = reader.read16u(); + if(size_dim == 0xffff){ + var size_dim_hi = reader.read32u(), size_dim_lo = reader.read32u(); + if(size_dim_hi != 0) + caml_failwith("input_value: bigarray dimension overflow in 32bit"); + size_dim = size_dim_lo; + } + dims.push(size_dim); + } + else + for(var i = 0; i < num_dims; i++) dims.push(reader.read32u()); + var + size = caml_ba_get_size(dims), + data = caml_ba_create_buffer(kind, size), + ba = caml_ba_create_unsafe(kind, layout, dims, data); + switch(kind){ + case 2: + for(var i = 0; i < size; i++) data[i] = reader.read8s(); break; + case 3: + case 12: + for(var i = 0; i < size; i++) data[i] = reader.read8u(); break; + case 4: + for(var i = 0; i < size; i++) data[i] = reader.read16s(); break; + case 5: + for(var i = 0; i < size; i++) data[i] = reader.read16u(); break; + case 6: + for(var i = 0; i < size; i++) data[i] = reader.read32s(); break; + case 8: + case 9: + var sixty = reader.read8u(); + if(sixty) + caml_failwith + ("input_value: cannot read bigarray with 64-bit OCaml ints"); + for(var i = 0; i < size; i++) data[i] = reader.read32s(); + break; + case 7: + var t = new Array(8); + for(var i = 0; i < size; i++){ + for(var j = 0; j < 8; j++) t[j] = reader.read8u(); + var int64 = caml_int64_of_bytes(t); + ba.set(i, int64); + } + break; + case 1: + var t = new Array(8); + for(var i = 0; i < size; i++){ + for(var j = 0; j < 8; j++) t[j] = reader.read8u(); + var f = caml_int64_float_of_bits(caml_int64_of_bytes(t)); + ba.set(i, f); + } + break; + case 0: + for(var i = 0; i < size; i++){ + var f = caml_int32_float_of_bits(reader.read32s()); + ba.set(i, f); + } + break; + case 10: + for(var i = 0; i < size; i++){ + var + re = caml_int32_float_of_bits(reader.read32s()), + im = caml_int32_float_of_bits(reader.read32s()); + ba.set(i, [254, re, im]); + } + break; + case 11: + var t = new Array(8); + for(var i = 0; i < size; i++){ + for(var j = 0; j < 8; j++) t[j] = reader.read8u(); + var re = caml_int64_float_of_bits(caml_int64_of_bytes(t)); + for(var j = 0; j < 8; j++) t[j] = reader.read8u(); + var im = caml_int64_float_of_bits(caml_int64_of_bytes(t)); + ba.set(i, [254, re, im]); + } + break; + } + sz[0] = (4 + num_dims) * 4; + return caml_ba_create_unsafe(kind, layout, dims, data); + } + function caml_ba_compare(a, b, total){return a.compare(b, total);} + function caml_mul(a, b){return Math.imul(a, b);} + function caml_hash_mix_int(h, d){ + d = caml_mul(d, 0xcc9e2d51 | 0); + d = d << 15 | d >>> 32 - 15; + d = caml_mul(d, 0x1b873593); + h ^= d; + h = h << 13 | h >>> 32 - 13; + return (h + (h << 2) | 0) + (0xe6546b64 | 0) | 0; + } + function caml_hash_mix_int64(h, v){ + h = caml_hash_mix_int(h, caml_int64_lo32(v)); + h = caml_hash_mix_int(h, caml_int64_hi32(v)); + return h; + } + function caml_hash_mix_float(h, v0){ + return caml_hash_mix_int64(h, caml_int64_bits_of_float(v0)); + } + function caml_ba_hash(ba){ + var num_elts = caml_ba_get_size(ba.dims), h = 0; + switch(ba.kind){ + case 2: + case 3: + case 12: + if(num_elts > 256) num_elts = 256; + var w = 0, i = 0; + for(i = 0; i + 4 <= ba.data.length; i += 4){ + w = + ba.data[i + 0] | ba.data[i + 1] << 8 | ba.data[i + 2] << 16 + | ba.data[i + 3] << 24; + h = caml_hash_mix_int(h, w); + } + w = 0; + switch(num_elts & 3){ + case 3: + w = ba.data[i + 2] << 16; + case 2: + w |= ba.data[i + 1] << 8; + case 1: + w |= ba.data[i + 0]; h = caml_hash_mix_int(h, w); + } + break; + case 4: + case 5: + if(num_elts > 128) num_elts = 128; + var w = 0, i = 0; + for(i = 0; i + 2 <= ba.data.length; i += 2){ + w = ba.data[i + 0] | ba.data[i + 1] << 16; + h = caml_hash_mix_int(h, w); + } + if((num_elts & 1) != 0) h = caml_hash_mix_int(h, ba.data[i]); + break; + case 6: + if(num_elts > 64) num_elts = 64; + for(var i = 0; i < num_elts; i++) h = caml_hash_mix_int(h, ba.data[i]); + break; + case 8: + case 9: + if(num_elts > 64) num_elts = 64; + for(var i = 0; i < num_elts; i++) h = caml_hash_mix_int(h, ba.data[i]); + break; + case 7: + if(num_elts > 32) num_elts = 32; + num_elts *= 2; + for(var i = 0; i < num_elts; i++) h = caml_hash_mix_int(h, ba.data[i]); + break; + case 10: + num_elts *= 2; + case 0: + if(num_elts > 64) num_elts = 64; + for(var i = 0; i < num_elts; i++) + h = caml_hash_mix_float(h, ba.data[i]); + break; + case 11: + num_elts *= 2; + case 1: + if(num_elts > 32) num_elts = 32; + for(var i = 0; i < num_elts; i++) + h = caml_hash_mix_float(h, ba.data[i]); + break; + } + return h; + } + function caml_int32_unmarshal(reader, size){size[0] = 4; return reader.read32s(); + } + function caml_nativeint_unmarshal(reader, size){ + switch(reader.read8u()){ + case 1: + size[0] = 4; return reader.read32s(); + case 2: + caml_failwith("input_value: native integer value too large"); + default: caml_failwith("input_value: ill-formed native integer"); + } + } + function caml_int64_unmarshal(reader, size){ + var t = new Array(8); + for(var j = 0; j < 8; j++) t[j] = reader.read8u(); + size[0] = 8; + return caml_int64_of_bytes(t); + } + function caml_int64_marshal(writer, v, sizes){ + var b = caml_int64_to_bytes(v); + for(var i = 0; i < 8; i++) writer.write(8, b[i]); + sizes[0] = 8; + sizes[1] = 8; + } + function caml_int64_compare(x, y, total){return x.compare(y);} + function caml_int64_hash(v){return v.lo32() ^ v.hi32();} + var + caml_custom_ops = + {"_j": + {deserialize: caml_int64_unmarshal, + serialize: caml_int64_marshal, + fixed_length: 8, + compare: caml_int64_compare, + hash: caml_int64_hash}, + "_i": {deserialize: caml_int32_unmarshal, fixed_length: 4}, + "_n": {deserialize: caml_nativeint_unmarshal, fixed_length: 4}, + "_bigarray": + {deserialize: + function(reader, sz){ + return caml_ba_deserialize(reader, sz, "_bigarray"); + }, + serialize: caml_ba_serialize, + compare: caml_ba_compare, + hash: caml_ba_hash}, + "_bigarr02": + {deserialize: + function(reader, sz){ + return caml_ba_deserialize(reader, sz, "_bigarr02"); + }, + serialize: caml_ba_serialize, + compare: caml_ba_compare, + hash: caml_ba_hash}}; + function caml_compare_val_get_custom(a){ + return caml_custom_ops[a.caml_custom] + && caml_custom_ops[a.caml_custom].compare; + } + function caml_compare_val_number_custom(num, custom, swap, total){ + var comp = caml_compare_val_get_custom(custom); + if(comp){ + var x = swap > 0 ? comp(custom, num, total) : comp(num, custom, total); + if(total && x != x) return swap; + if(+ x != + x) return + x; + if((x | 0) != 0) return x | 0; + } + return swap; + } + function caml_is_ml_string(s){ + return typeof s === "string" && ! /[^\x00-\xff]/.test(s); + } + function caml_is_ml_bytes(s){return s instanceof MlBytes;} + function caml_compare_val_tag(a){ + if(typeof a === "number") + return 1000; + else if(caml_is_ml_bytes(a)) + return 252; + else if(caml_is_ml_string(a)) + return 1252; + else if(a instanceof Array && a[0] === a[0] >>> 0 && a[0] <= 255){var tag = a[0] | 0; return tag == 254 ? 0 : tag;} + else if(a instanceof String) + return 12520; + else if(typeof a == "string") + return 12520; + else if(a instanceof Number) + return 1000; + else if(a && a.caml_custom) + return 1255; + else if(a && a.compare) + return 1256; + else if(typeof a == "function") + return 1247; + else if(typeof a == "symbol") return 1251; + return 1001; + } + function caml_int_compare(a, b){ + if(a < b) return - 1; + if(a == b) return 0; + return 1; + } + function caml_string_compare(s1, s2){ + return s1 < s2 ? - 1 : s1 > s2 ? 1 : 0; + } + function caml_bytes_compare(s1, s2){ + s1.t & 6 && caml_convert_string_to_bytes(s1); + s2.t & 6 && caml_convert_string_to_bytes(s2); + return s1.c < s2.c ? - 1 : s1.c > s2.c ? 1 : 0; + } + function caml_compare_val(a, b, total){ + var stack = []; + for(;;){ + if(! (total && a === b)){ + var tag_a = caml_compare_val_tag(a); + if(tag_a == 250){a = a[1]; continue;} + var tag_b = caml_compare_val_tag(b); + if(tag_b == 250){b = b[1]; continue;} + if(tag_a !== tag_b){ + if(tag_a == 1000){ + if(tag_b == 1255) + return caml_compare_val_number_custom(a, b, - 1, total); + return - 1; + } + if(tag_b == 1000){ + if(tag_a == 1255) + return caml_compare_val_number_custom(b, a, 1, total); + return 1; + } + return tag_a < tag_b ? - 1 : 1; + } + switch(tag_a){ + case 247: + caml_invalid_argument("compare: functional value"); break; + case 248: + var x = caml_int_compare(a[2], b[2]); if(x != 0) return x | 0; break; + case 249: + caml_invalid_argument("compare: functional value"); break; + case 250: + caml_invalid_argument("equal: got Forward_tag, should not happen"); + break; + case 251: + caml_invalid_argument("equal: abstract value"); break; + case 252: + if(a !== b){ + var x = caml_bytes_compare(a, b); + if(x != 0) return x | 0; + } + break; + case 253: + caml_invalid_argument("equal: got Double_tag, should not happen"); + break; + case 254: + caml_invalid_argument + ("equal: got Double_array_tag, should not happen"); + break; + case 255: + caml_invalid_argument("equal: got Custom_tag, should not happen"); + break; + case 1247: + caml_invalid_argument("compare: functional value"); break; + case 1255: + var comp = caml_compare_val_get_custom(a); + if(comp != caml_compare_val_get_custom(b)) + return a.caml_custom < b.caml_custom ? - 1 : 1; + if(! comp) caml_invalid_argument("compare: abstract value"); + var x = comp(a, b, total); + if(x != x) return total ? - 1 : x; + if(x !== (x | 0)) return - 1; + if(x != 0) return x | 0; + break; + case 1256: + var x = a.compare(b, total); + if(x != x) return total ? - 1 : x; + if(x !== (x | 0)) return - 1; + if(x != 0) return x | 0; + break; + case 1000: + a = + a; + b = + b; + if(a < b) return - 1; + if(a > b) return 1; + if(a != b){ + if(! total) return NaN; + if(a == a) return 1; + if(b == b) return - 1; + } + break; + case 1001: + if(a < b) return - 1; + if(a > b) return 1; + if(a != b){ + if(! total) return NaN; + if(a == a) return 1; + if(b == b) return - 1; + } + break; + case 1251: + if(a !== b){if(! total) return NaN; return 1;} break; + case 1252: + var a = caml_jsbytes_of_string(a), b = caml_jsbytes_of_string(b); + if(a !== b){if(a < b) return - 1; if(a > b) return 1;} + break; + case 12520: + var a = a.toString(), b = b.toString(); + if(a !== b){if(a < b) return - 1; if(a > b) return 1;} + break; + case 246: + case 254: + default: + if(caml_is_continuation_tag(tag_a)){ + caml_invalid_argument("compare: continuation value"); + break; + } + if(a.length != b.length) return a.length < b.length ? - 1 : 1; + if(a.length > 1) stack.push(a, b, 1); + break; + } + } + if(stack.length == 0) return 0; + var i = stack.pop(); + b = stack.pop(); + a = stack.pop(); + if(i + 1 < a.length) stack.push(a, b, i + 1); + a = a[i]; + b = b[i]; + } + } + function caml_compare(a, b){return caml_compare_val(a, b, true);} + function caml_convert_raw_backtrace(){return [0];} + function caml_create_bytes(len){ + if(len < 0) caml_invalid_argument("Bytes.create"); + return new MlBytes(len ? 2 : 9, "", len); + } + function caml_fill_bytes(s, i, l, c){ + if(l > 0) + if(i == 0 && (l >= s.l || s.t == 2 && l >= s.c.length)) + if(c == 0){ + s.c = ""; + s.t = 2; + } + else{ + s.c = caml_str_repeat(l, String.fromCharCode(c)); + s.t = l == s.l ? 0 : 2; + } + else{ + if(s.t != 4) caml_convert_bytes_to_array(s); + for(l += i; i < l; i++) s.c[i] = c; + } + return 0; + } + function caml_float_of_string(s){ + var res; + s = caml_jsbytes_of_string(s); + res = + s; + if(s.length > 0 && res === res) return res; + s = s.replace(/_/g, ""); + res = + s; + if(s.length > 0 && res === res || /^[+-]?nan$/i.test(s)) return res; + var m = /^ *([+-]?)0x([0-9a-f]+)\.?([0-9a-f]*)(p([+-]?[0-9]+))?/i.exec(s); + if(m){ + var + m3 = m[3].replace(/0+$/, ""), + mantissa = parseInt(m[1] + m[2] + m3, 16), + exponent = (m[5] | 0) - 4 * m3.length; + res = mantissa * Math.pow(2, exponent); + return res; + } + if(/^\+?inf(inity)?$/i.test(s)) return Infinity; + if(/^-inf(inity)?$/i.test(s)) return - Infinity; + caml_failwith("float_of_string"); + } + function caml_parse_format(fmt){ + fmt = caml_jsbytes_of_string(fmt); + var len = fmt.length; + if(len > 31) caml_invalid_argument("format_int: format too long"); + var + f = + {justify: "+", + signstyle: "-", + filler: " ", + alternate: false, + base: 0, + signedconv: false, + width: 0, + uppercase: false, + sign: 1, + prec: - 1, + conv: "f"}; + for(var i = 0; i < len; i++){ + var c = fmt.charAt(i); + switch(c){ + case "-": + f.justify = "-"; break; + case "+": + case " ": + f.signstyle = c; break; + case "0": + f.filler = "0"; break; + case "#": + f.alternate = true; break; + case "1": + case "2": + case "3": + case "4": + case "5": + case "6": + case "7": + case "8": + case "9": + f.width = 0; + while(c = fmt.charCodeAt(i) - 48, c >= 0 && c <= 9){f.width = f.width * 10 + c; i++;} + i--; + break; + case ".": + f.prec = 0; + i++; + while(c = fmt.charCodeAt(i) - 48, c >= 0 && c <= 9){f.prec = f.prec * 10 + c; i++;} + i--; + case "d": + case "i": + f.signedconv = true; + case "u": + f.base = 10; break; + case "x": + f.base = 16; break; + case "X": + f.base = 16; f.uppercase = true; break; + case "o": + f.base = 8; break; + case "e": + case "f": + case "g": + f.signedconv = true; f.conv = c; break; + case "E": + case "F": + case "G": + f.signedconv = true; + f.uppercase = true; + f.conv = c.toLowerCase(); + break; + } + } + return f; + } + function caml_finish_formatting(f, rawbuffer){ + if(f.uppercase) rawbuffer = rawbuffer.toUpperCase(); + var len = rawbuffer.length; + if(f.signedconv && (f.sign < 0 || f.signstyle != "-")) len++; + if(f.alternate){if(f.base == 8) len += 1; if(f.base == 16) len += 2;} + var buffer = ""; + if(f.justify == "+" && f.filler == " ") + for(var i = len; i < f.width; i++) buffer += " "; + if(f.signedconv) + if(f.sign < 0) + buffer += "-"; + else if(f.signstyle != "-") buffer += f.signstyle; + if(f.alternate && f.base == 8) buffer += "0"; + if(f.alternate && f.base == 16) buffer += f.uppercase ? "0X" : "0x"; + if(f.justify == "+" && f.filler == "0") + for(var i = len; i < f.width; i++) buffer += "0"; + buffer += rawbuffer; + if(f.justify == "-") for(var i = len; i < f.width; i++) buffer += " "; + return caml_string_of_jsbytes(buffer); + } + function caml_format_float(fmt, x){ + function toFixed(x, dp){ + if(Math.abs(x) < 1.0) + return x.toFixed(dp); + else{ + var e = parseInt(x.toString().split("+")[1]); + if(e > 20){ + e -= 20; + x /= Math.pow(10, e); + x += new Array(e + 1).join("0"); + if(dp > 0) x = x + "." + new Array(dp + 1).join("0"); + return x; + } + else + return x.toFixed(dp); + } + } + var s, f = caml_parse_format(fmt), prec = f.prec < 0 ? 6 : f.prec; + if(x < 0 || x == 0 && 1 / x == - Infinity){f.sign = - 1; x = - x;} + if(isNaN(x)){ + s = "nan"; + f.filler = " "; + } + else if(! isFinite(x)){ + s = "inf"; + f.filler = " "; + } + else + switch(f.conv){ + case "e": + var s = x.toExponential(prec), i = s.length; + if(s.charAt(i - 3) == "e") + s = s.slice(0, i - 1) + "0" + s.slice(i - 1); + break; + case "f": + s = toFixed(x, prec); break; + case "g": + prec = prec ? prec : 1; + s = x.toExponential(prec - 1); + var j = s.indexOf("e"), exp = + s.slice(j + 1); + if(exp < - 4 || x >= 1e21 || x.toFixed(0).length > prec){ + var i = j - 1; + while(s.charAt(i) == "0") i--; + if(s.charAt(i) == ".") i--; + s = s.slice(0, i + 1) + s.slice(j); + i = s.length; + if(s.charAt(i - 3) == "e") + s = s.slice(0, i - 1) + "0" + s.slice(i - 1); + break; + } + else{ + var p = prec; + if(exp < 0){ + p -= exp + 1; + s = x.toFixed(p); + } + else + while(s = x.toFixed(p), s.length > prec + 1) p--; + if(p){ + var i = s.length - 1; + while(s.charAt(i) == "0") i--; + if(s.charAt(i) == ".") i--; + s = s.slice(0, i + 1); + } + } + break; + } + return caml_finish_formatting(f, s); + } + function caml_format_int(fmt, i){ + if(caml_jsbytes_of_string(fmt) == "%d") + return caml_string_of_jsbytes("" + i); + var f = caml_parse_format(fmt); + if(i < 0) if(f.signedconv){f.sign = - 1; i = - i;} else i >>>= 0; + var s = i.toString(f.base); + if(f.prec >= 0){ + f.filler = " "; + var n = f.prec - s.length; + if(n > 0) s = caml_str_repeat(n, "0") + s; + } + return caml_finish_formatting(f, s); + } + var caml_oo_last_id = 0; + function caml_fresh_oo_id(){return caml_oo_last_id++;} + function caml_jsstring_of_string(s){ + if(jsoo_is_ascii(s)) return s; + return caml_utf16_of_utf8(s); + } + function fs_node_supported(){ + return typeof globalThis.process !== "undefined" + && typeof globalThis.process.versions !== "undefined" + && typeof globalThis.process.versions.node !== "undefined"; + } + function make_path_is_absolute(){ + function posix(path){ + if(path.charAt(0) === "/") return ["", path.substring(1)]; + return; + } + function win32(path){ + var + splitDeviceRe = + /^([a-zA-Z]:|[\\/]{2}[^\\/]+[\\/]+[^\\/]+)?([\\/])?([\s\S]*?)$/, + result = splitDeviceRe.exec(path), + device = result[1] || "", + isUnc = Boolean(device && device.charAt(1) !== ":"); + if(Boolean(result[2] || isUnc)){ + var root = result[1] || "", sep = result[2] || ""; + return [root, path.substring(root.length + sep.length)]; + } + return; + } + return fs_node_supported() && globalThis.process + && globalThis.process.platform + ? globalThis.process.platform === "win32" ? win32 : posix + : posix; + } + var path_is_absolute = make_path_is_absolute(); + function caml_trailing_slash(name){ + return name.slice(- 1) !== "/" ? name + "/" : name; + } + if(fs_node_supported() && globalThis.process && globalThis.process.cwd) + var caml_current_dir = globalThis.process.cwd().replace(/\\/g, "/"); + else + var caml_current_dir = "/static"; + caml_current_dir = caml_trailing_slash(caml_current_dir); + function caml_make_path(name){ + name = caml_jsstring_of_string(name); + if(! path_is_absolute(name)) name = caml_current_dir + name; + var + comp0 = path_is_absolute(name), + comp = comp0[1].split("/"), + ncomp = []; + for(var i = 0; i < comp.length; i++) + switch(comp[i]){ + case "..": + if(ncomp.length > 1) ncomp.pop(); break; + case ".": break; + case "": break; + default: ncomp.push(comp[i]); break; + } + ncomp.unshift(comp0[0]); + ncomp.orig = name; + return ncomp; + } + function caml_utf8_of_utf16(s){ + for(var b = "", t = b, c, d, i = 0, l = s.length; i < l; i++){ + c = s.charCodeAt(i); + if(c < 0x80){ + for(var j = i + 1; j < l && (c = s.charCodeAt(j)) < 0x80; j++) ; + if(j - i > 512){ + t.substr(0, 1); + b += t; + t = ""; + b += s.slice(i, j); + } + else + t += s.slice(i, j); + if(j == l) break; + i = j; + } + if(c < 0x800){ + t += String.fromCharCode(0xc0 | c >> 6); + t += String.fromCharCode(0x80 | c & 0x3f); + } + else if(c < 0xd800 || c >= 0xdfff) + t += + String.fromCharCode + (0xe0 | c >> 12, 0x80 | c >> 6 & 0x3f, 0x80 | c & 0x3f); + else if + (c >= 0xdbff || i + 1 == l || (d = s.charCodeAt(i + 1)) < 0xdc00 + || d > 0xdfff) + t += "\xef\xbf\xbd"; + else{ + i++; + c = (c << 10) + d - 0x35fdc00; + t += + String.fromCharCode + (0xf0 | c >> 18, + 0x80 | c >> 12 & 0x3f, + 0x80 | c >> 6 & 0x3f, + 0x80 | c & 0x3f); + } + if(t.length > 1024){t.substr(0, 1); b += t; t = "";} + } + return b + t; + } + function caml_string_of_jsstring(s){ + return jsoo_is_ascii(s) + ? caml_string_of_jsbytes(s) + : caml_string_of_jsbytes(caml_utf8_of_utf16(s)); + } + var + unix_error = + ["E2BIG", + "EACCES", + "EAGAIN", + "EBADF", + "EBUSY", + "ECHILD", + "EDEADLK", + "EDOM", + "EEXIST", + "EFAULT", + "EFBIG", + "EINTR", + "EINVAL", + "EIO", + "EISDIR", + "EMFILE", + "EMLINK", + "ENAMETOOLONG", + "ENFILE", + "ENODEV", + "ENOENT", + "ENOEXEC", + "ENOLCK", + "ENOMEM", + "ENOSPC", + "ENOSYS", + "ENOTDIR", + "ENOTEMPTY", + "ENOTTY", + "ENXIO", + "EPERM", + "EPIPE", + "ERANGE", + "EROFS", + "ESPIPE", + "ESRCH", + "EXDEV", + "EWOULDBLOCK", + "EINPROGRESS", + "EALREADY", + "ENOTSOCK", + "EDESTADDRREQ", + "EMSGSIZE", + "EPROTOTYPE", + "ENOPROTOOPT", + "EPROTONOSUPPORT", + "ESOCKTNOSUPPORT", + "EOPNOTSUPP", + "EPFNOSUPPORT", + "EAFNOSUPPORT", + "EADDRINUSE", + "EADDRNOTAVAIL", + "ENETDOWN", + "ENETUNREACH", + "ENETRESET", + "ECONNABORTED", + "ECONNRESET", + "ENOBUFS", + "EISCONN", + "ENOTCONN", + "ESHUTDOWN", + "ETOOMANYREFS", + "ETIMEDOUT", + "ECONNREFUSED", + "EHOSTDOWN", + "EHOSTUNREACH", + "ELOOP", + "EOVERFLOW"]; + function make_unix_err_args(code, syscall, path, errno){ + var variant = unix_error.indexOf(code); + if(variant < 0){if(errno == null) errno = - 9999; variant = [0, errno];} + var + args = + [variant, + caml_string_of_jsstring(syscall || ""), + caml_string_of_jsstring(path || "")]; + return args; + } + var caml_named_values = {}; + function caml_named_value(nm){return caml_named_values[nm];} + function caml_raise_with_args(tag, args){ + throw caml_maybe_attach_backtrace([0, tag].concat(args)); + } + function caml_bytes_of_array(a){ + if(! (a instanceof Uint8Array)) a = new Uint8Array(a); + return new MlBytes(4, a, a.length); + } + function caml_raise_sys_error(msg){ + caml_raise_with_string(caml_global_data.Sys_error, msg); + } + function caml_raise_no_such_file(name){ + caml_raise_sys_error(name + ": No such file or directory"); + } + function caml_uint8_array_of_bytes(s){ + if(s.t != 4) caml_convert_bytes_to_array(s); + return s.c; + } + function caml_ml_bytes_length(s){return s.l;} + function MlFile(){} + function MlFakeFile(content){this.data = content;} + MlFakeFile.prototype = new MlFile(); + MlFakeFile.prototype.constructor = MlFakeFile; + MlFakeFile.prototype.truncate = + function(len){ + var old = this.data; + this.data = caml_create_bytes(len | 0); + caml_blit_bytes(old, 0, this.data, 0, len); + }; + MlFakeFile.prototype.length = + function(){return caml_ml_bytes_length(this.data);}; + MlFakeFile.prototype.write = + function(offset, buf, pos, len){ + var clen = this.length(); + if(offset + len >= clen){ + var new_str = caml_create_bytes(offset + len), old_data = this.data; + this.data = new_str; + caml_blit_bytes(old_data, 0, this.data, 0, clen); + } + caml_blit_bytes(caml_bytes_of_array(buf), pos, this.data, offset, len); + return 0; + }; + MlFakeFile.prototype.read = + function(offset, buf, pos, len){ + var clen = this.length(); + if(offset + len >= clen) len = clen - offset; + if(len){ + var data = caml_create_bytes(len | 0); + caml_blit_bytes(this.data, offset, data, 0, len); + buf.set(caml_uint8_array_of_bytes(data), pos); + } + return len; + }; + function MlFakeFd(name, file, flags){ + this.file = file; + this.name = name; + this.flags = flags; + } + MlFakeFd.prototype.err_closed = + function(){ + caml_raise_sys_error(this.name + ": file descriptor already closed"); + }; + MlFakeFd.prototype.length = + function(){if(this.file) return this.file.length(); this.err_closed();}; + MlFakeFd.prototype.write = + function(offset, buf, pos, len){ + if(this.file) return this.file.write(offset, buf, pos, len); + this.err_closed(); + }; + MlFakeFd.prototype.read = + function(offset, buf, pos, len){ + if(this.file) return this.file.read(offset, buf, pos, len); + this.err_closed(); + }; + MlFakeFd.prototype.close = function(){this.file = undefined;}; + function MlFakeDevice(root, f){ + this.content = {}; + this.root = root; + this.lookupFun = f; + } + MlFakeDevice.prototype.nm = function(name){return this.root + name;}; + MlFakeDevice.prototype.create_dir_if_needed = + function(name){ + var comp = name.split("/"), res = ""; + for(var i = 0; i < comp.length - 1; i++){ + res += comp[i] + "/"; + if(this.content[res]) continue; + this.content[res] = Symbol("directory"); + } + }; + MlFakeDevice.prototype.slash = + function(name){return /\/$/.test(name) ? name : name + "/";}; + MlFakeDevice.prototype.lookup = + function(name){ + if(! this.content[name] && this.lookupFun){ + var + res = + this.lookupFun + (caml_string_of_jsbytes(this.root), caml_string_of_jsbytes(name)); + if(res !== 0){ + this.create_dir_if_needed(name); + this.content[name] = new MlFakeFile(caml_bytes_of_string(res[1])); + } + } + }; + MlFakeDevice.prototype.exists = + function(name){ + if(name == "") return 1; + var name_slash = this.slash(name); + if(this.content[name_slash]) return 1; + this.lookup(name); + return this.content[name] ? 1 : 0; + }; + MlFakeDevice.prototype.isFile = + function(name){return this.exists(name) && ! this.is_dir(name) ? 1 : 0;}; + MlFakeDevice.prototype.mkdir = + function(name, mode, raise_unix){ + var unix_error = raise_unix && caml_named_value("Unix.Unix_error"); + if(this.exists(name)) + if(unix_error) + caml_raise_with_args + (unix_error, make_unix_err_args("EEXIST", "mkdir", this.nm(name))); + else + caml_raise_sys_error(name + ": File exists"); + var parent = /^(.*)\/[^/]+/.exec(name); + parent = parent && parent[1] || ""; + if(! this.exists(parent)) + if(unix_error) + caml_raise_with_args + (unix_error, make_unix_err_args("ENOENT", "mkdir", this.nm(parent))); + else + caml_raise_sys_error(parent + ": No such file or directory"); + if(! this.is_dir(parent)) + if(unix_error) + caml_raise_with_args + (unix_error, make_unix_err_args("ENOTDIR", "mkdir", this.nm(parent))); + else + caml_raise_sys_error(parent + ": Not a directory"); + this.create_dir_if_needed(this.slash(name)); + }; + MlFakeDevice.prototype.rmdir = + function(name, raise_unix){ + var + unix_error = raise_unix && caml_named_value("Unix.Unix_error"), + name_slash = name == "" ? "" : this.slash(name), + r = new RegExp("^" + name_slash + "([^/]+)"); + if(! this.exists(name)) + if(unix_error) + caml_raise_with_args + (unix_error, make_unix_err_args("ENOENT", "rmdir", this.nm(name))); + else + caml_raise_sys_error(name + ": No such file or directory"); + if(! this.is_dir(name)) + if(unix_error) + caml_raise_with_args + (unix_error, make_unix_err_args("ENOTDIR", "rmdir", this.nm(name))); + else + caml_raise_sys_error(name + ": Not a directory"); + for(var n in this.content) + if(n.match(r)) + if(unix_error) + caml_raise_with_args + (unix_error, make_unix_err_args("ENOTEMPTY", "rmdir", this.nm(name))); + else + caml_raise_sys_error(this.nm(name) + ": Directory not empty"); + delete this.content[name_slash]; + }; + MlFakeDevice.prototype.readdir = + function(name){ + var name_slash = name == "" ? "" : this.slash(name); + if(! this.exists(name)) + caml_raise_sys_error(name + ": No such file or directory"); + if(! this.is_dir(name)) caml_raise_sys_error(name + ": Not a directory"); + var r = new RegExp("^" + name_slash + "([^/]+)"), seen = {}, a = []; + for(var n in this.content){ + var m = n.match(r); + if(m && ! seen[m[1]]){seen[m[1]] = true; a.push(m[1]);} + } + return a; + }; + MlFakeDevice.prototype.opendir = + function(name, raise_unix){ + var + unix_error = raise_unix && caml_named_value("Unix.Unix_error"), + a = this.readdir(name), + c = false, + i = 0; + return {readSync: + function(){ + if(c) + if(unix_error) + caml_raise_with_args + (unix_error, + make_unix_err_args("EBADF", "closedir", this.nm(name))); + else + caml_raise_sys_error(name + ": closedir failed"); + if(i == a.length) return null; + var entry = a[i]; + i++; + return {name: entry}; + }, + closeSync: + function(){ + if(c) + if(unix_error) + caml_raise_with_args + (unix_error, + make_unix_err_args("EBADF", "closedir", this.nm(name))); + else + caml_raise_sys_error(name + ": closedir failed"); + c = true; + a = []; + }}; + }; + MlFakeDevice.prototype.is_dir = + function(name){ + if(name == "") return true; + var name_slash = this.slash(name); + return this.content[name_slash] ? 1 : 0; + }; + MlFakeDevice.prototype.unlink = + function(name){ + var ok = this.content[name] ? true : false; + delete this.content[name]; + return ok; + }; + MlFakeDevice.prototype.open = + function(name, f){ + var file; + if(f.rdonly && f.wronly) + caml_raise_sys_error + (this.nm(name) + + " : flags Open_rdonly and Open_wronly are not compatible"); + if(f.text && f.binary) + caml_raise_sys_error + (this.nm(name) + + " : flags Open_text and Open_binary are not compatible"); + this.lookup(name); + if(this.content[name]){ + if(this.is_dir(name)) + caml_raise_sys_error(this.nm(name) + " : is a directory"); + if(f.create && f.excl) + caml_raise_sys_error(this.nm(name) + " : file already exists"); + file = this.content[name]; + if(f.truncate) file.truncate(); + } + else if(f.create){ + this.create_dir_if_needed(name); + this.content[name] = new MlFakeFile(caml_create_bytes(0)); + file = this.content[name]; + } + else + caml_raise_no_such_file(this.nm(name)); + return new MlFakeFd(this.nm(name), file, f); + }; + MlFakeDevice.prototype.open = + function(name, f){ + var file; + if(f.rdonly && f.wronly) + caml_raise_sys_error + (this.nm(name) + + " : flags Open_rdonly and Open_wronly are not compatible"); + if(f.text && f.binary) + caml_raise_sys_error + (this.nm(name) + + " : flags Open_text and Open_binary are not compatible"); + this.lookup(name); + if(this.content[name]){ + if(this.is_dir(name)) + caml_raise_sys_error(this.nm(name) + " : is a directory"); + if(f.create && f.excl) + caml_raise_sys_error(this.nm(name) + " : file already exists"); + file = this.content[name]; + if(f.truncate) file.truncate(); + } + else if(f.create){ + this.create_dir_if_needed(name); + this.content[name] = new MlFakeFile(caml_create_bytes(0)); + file = this.content[name]; + } + else + caml_raise_no_such_file(this.nm(name)); + return new MlFakeFd(this.nm(name), file, f); + }; + MlFakeDevice.prototype.register = + function(name, content){ + var file; + if(this.content[name]) + caml_raise_sys_error(this.nm(name) + " : file already exists"); + if(caml_is_ml_bytes(content)) file = new MlFakeFile(content); + if(caml_is_ml_string(content)) + file = new MlFakeFile(caml_bytes_of_string(content)); + else if(content instanceof Array) + file = new MlFakeFile(caml_bytes_of_array(content)); + else if(typeof content === "string") + file = new MlFakeFile(caml_bytes_of_jsbytes(content)); + else if(content.toString){ + var + bytes = + caml_bytes_of_string(caml_string_of_jsstring(content.toString())); + file = new MlFakeFile(bytes); + } + if(file){ + this.create_dir_if_needed(name); + this.content[name] = file; + } + else + caml_raise_sys_error + (this.nm(name) + " : registering file with invalid content type"); + }; + MlFakeDevice.prototype.constructor = MlFakeDevice; + function caml_ml_string_length(s){return s.length;} + function caml_string_unsafe_get(s, i){return s.charCodeAt(i);} + function caml_uint8_array_of_string(s){ + var l = caml_ml_string_length(s), a = new Uint8Array(l), i = 0; + for(; i < l; i++) a[i] = caml_string_unsafe_get(s, i); + return a; + } + function MlNodeFd(fd, flags){ + this.fs = require("fs"); + this.fd = fd; + this.flags = flags; + } + MlNodeFd.prototype = new MlFile(); + MlNodeFd.prototype.constructor = MlNodeFd; + MlNodeFd.prototype.truncate = + function(len){ + try{this.fs.ftruncateSync(this.fd, len | 0);} + catch(err){caml_raise_sys_error(err.toString());} + }; + MlNodeFd.prototype.length = + function(){ + try{return this.fs.fstatSync(this.fd).size;} + catch(err){caml_raise_sys_error(err.toString());} + }; + MlNodeFd.prototype.write = + function(offset, buf, buf_offset, len){ + try{ + if(this.flags.isCharacterDevice) + this.fs.writeSync(this.fd, buf, buf_offset, len); + else + this.fs.writeSync(this.fd, buf, buf_offset, len, offset); + } + catch(err){caml_raise_sys_error(err.toString());} + return 0; + }; + MlNodeFd.prototype.read = + function(offset, a, buf_offset, len){ + try{ + if(this.flags.isCharacterDevice) + var read = this.fs.readSync(this.fd, a, buf_offset, len); + else + var read = this.fs.readSync(this.fd, a, buf_offset, len, offset); + return read; + } + catch(err){caml_raise_sys_error(err.toString());} + }; + MlNodeFd.prototype.close = + function(){ + try{this.fs.closeSync(this.fd); return 0;} + catch(err){caml_raise_sys_error(err.toString());} + }; + function MlNodeDevice(root){this.fs = require("fs"); this.root = root;} + MlNodeDevice.prototype.nm = function(name){return this.root + name;}; + MlNodeDevice.prototype.exists = + function(name){ + try{return this.fs.existsSync(this.nm(name)) ? 1 : 0;} + catch(err){return 0;} + }; + MlNodeDevice.prototype.isFile = + function(name){ + try{return this.fs.statSync(this.nm(name)).isFile() ? 1 : 0;} + catch(err){caml_raise_sys_error(err.toString());} + }; + MlNodeDevice.prototype.mkdir = + function(name, mode, raise_unix){ + try{this.fs.mkdirSync(this.nm(name), {mode: mode}); return 0;} + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.rmdir = + function(name, raise_unix){ + try{this.fs.rmdirSync(this.nm(name)); return 0;} + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.readdir = + function(name, raise_unix){ + try{return this.fs.readdirSync(this.nm(name));} + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.is_dir = + function(name){ + try{return this.fs.statSync(this.nm(name)).isDirectory() ? 1 : 0;} + catch(err){caml_raise_sys_error(err.toString());} + }; + MlNodeDevice.prototype.unlink = + function(name, raise_unix){ + try{ + var b = this.fs.existsSync(this.nm(name)) ? 1 : 0; + this.fs.unlinkSync(this.nm(name)); + return b; + } + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.open = + function(name, f, raise_unix){ + var consts = require("constants"), res = 0; + for(var key in f) + switch(key){ + case "rdonly": + res |= consts.O_RDONLY; break; + case "wronly": + res |= consts.O_WRONLY; break; + case "append": + res |= consts.O_WRONLY | consts.O_APPEND; break; + case "create": + res |= consts.O_CREAT; break; + case "truncate": + res |= consts.O_TRUNC; break; + case "excl": + res |= consts.O_EXCL; break; + case "binary": + res |= consts.O_BINARY; break; + case "text": + res |= consts.O_TEXT; break; + case "nonblock": + res |= consts.O_NONBLOCK; break; + } + try{ + var + fd = this.fs.openSync(this.nm(name), res), + isCharacterDevice = + this.fs.lstatSync(this.nm(name)).isCharacterDevice(); + f.isCharacterDevice = isCharacterDevice; + return new MlNodeFd(fd, f); + } + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.rename = + function(o, n, raise_unix){ + try{this.fs.renameSync(this.nm(o), this.nm(n));} + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.stat = + function(name, raise_unix){ + try{ + var js_stats = this.fs.statSync(this.nm(name)); + return this.stats_from_js(js_stats); + } + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.lstat = + function(name, raise_unix){ + try{ + var js_stats = this.fs.lstatSync(this.nm(name)); + return this.stats_from_js(js_stats); + } + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.symlink = + function(to_dir, target, path, raise_unix){ + try{ + this.fs.symlinkSync + (this.nm(target), this.nm(path), to_dir ? "dir" : "file"); + return 0; + } + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.readlink = + function(name, raise_unix){ + try{ + var link = this.fs.readlinkSync(this.nm(name), "utf8"); + return caml_string_of_jsstring(link); + } + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.opendir = + function(name, raise_unix){ + try{return this.fs.opendirSync(this.nm(name));} + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.raise_nodejs_error = + function(err, raise_unix){ + var unix_error = caml_named_value("Unix.Unix_error"); + if(raise_unix && unix_error){ + var + args = make_unix_err_args(err.code, err.syscall, err.path, err.errno); + caml_raise_with_args(unix_error, args); + } + else + caml_raise_sys_error(err.toString()); + }; + MlNodeDevice.prototype.stats_from_js = + function(js_stats){ + var file_kind; + if(js_stats.isFile()) + file_kind = 0; + else if(js_stats.isDirectory()) + file_kind = 1; + else if(js_stats.isCharacterDevice()) + file_kind = 2; + else if(js_stats.isBlockDevice()) + file_kind = 3; + else if(js_stats.isSymbolicLink()) + file_kind = 4; + else if(js_stats.isFIFO()) + file_kind = 5; + else if(js_stats.isSocket()) file_kind = 6; + return [0, + js_stats.dev, + js_stats.ino, + file_kind, + js_stats.mode, + js_stats.nlink, + js_stats.uid, + js_stats.gid, + js_stats.rdev, + js_stats.size, + js_stats.atimeMs, + js_stats.mtimeMs, + js_stats.ctimeMs]; + }; + MlNodeDevice.prototype.constructor = MlNodeDevice; + function caml_get_root(path){ + var x = path_is_absolute(path); + if(! x) return; + return x[0] + "/"; + } + var + caml_root = + caml_get_root(caml_current_dir) + || caml_failwith("unable to compute caml_root"), + jsoo_mount_point = []; + if(fs_node_supported()) + jsoo_mount_point.push + ({path: caml_root, device: new MlNodeDevice(caml_root)}); + else + jsoo_mount_point.push + ({path: caml_root, device: new MlFakeDevice(caml_root)}); + jsoo_mount_point.push + ({path: "/static/", device: new MlFakeDevice("/static/")}); + function resolve_fs_device(name){ + var + path = caml_make_path(name), + name = path.join("/"), + name_slash = caml_trailing_slash(name), + res; + for(var i = 0; i < jsoo_mount_point.length; i++){ + var m = jsoo_mount_point[i]; + if + (name_slash.search(m.path) == 0 + && (! res || res.path.length < m.path.length)) + res = + {path: m.path, + device: m.device, + rest: name.substring(m.path.length, name.length)}; + } + if(! res && fs_node_supported()){ + var root = caml_get_root(name); + if(root && root.match(/^[a-zA-Z]:\/$/)){ + var m = {path: root, device: new MlNodeDevice(root)}; + jsoo_mount_point.push(m); + res = + {path: m.path, + device: m.device, + rest: name.substring(m.path.length, name.length)}; + } + } + if(res) return res; + caml_raise_sys_error("no device found for " + name_slash); + } + function caml_create_file(name, content){ + var root = resolve_fs_device(name); + if(! root.device.register) caml_failwith("cannot register file"); + root.device.register(root.rest, content); + return 0; + } + function jsoo_create_file(name, content){ + var + name = caml_string_of_jsbytes(name), + content = caml_string_of_jsbytes(content); + return caml_create_file(name, content); + } + function caml_fs_init(){ + var tmp = globalThis.caml_fs_tmp; + if(tmp) + for(var i = 0; i < tmp.length; i++) + jsoo_create_file(tmp[i].name, tmp[i].content); + globalThis.jsoo_create_file = jsoo_create_file; + globalThis.caml_fs_tmp = []; + return 0; + } + function caml_get_exception_raw_backtrace(){return [0];} + function caml_hash_mix_jsbytes(h, s){ + var len = s.length, i, w; + for(i = 0; i + 4 <= len; i += 4){ + w = + s.charCodeAt(i) | s.charCodeAt(i + 1) << 8 | s.charCodeAt(i + 2) << 16 + | s.charCodeAt(i + 3) << 24; + h = caml_hash_mix_int(h, w); + } + w = 0; + switch(len & 3){ + case 3: + w = s.charCodeAt(i + 2) << 16; + case 2: + w |= s.charCodeAt(i + 1) << 8; + case 1: + w |= s.charCodeAt(i); h = caml_hash_mix_int(h, w); + } + h ^= len; + return h; + } + function caml_hash_mix_string(h, v){ + return caml_hash_mix_jsbytes(h, caml_jsbytes_of_string(v)); + } + function caml_hash_mix_bytes_arr(h, s){ + var len = s.length, i, w; + for(i = 0; i + 4 <= len; i += 4){ + w = s[i] | s[i + 1] << 8 | s[i + 2] << 16 | s[i + 3] << 24; + h = caml_hash_mix_int(h, w); + } + w = 0; + switch(len & 3){ + case 3: + w = s[i + 2] << 16; + case 2: + w |= s[i + 1] << 8; + case 1: + w |= s[i]; h = caml_hash_mix_int(h, w); + } + h ^= len; + return h; + } + function caml_ml_bytes_content(s){ + switch(s.t & 6){ + default: caml_convert_string_to_bytes(s); + case 0: + return s.c; + case 4: + return s.c; + } + } + function caml_hash_mix_bytes(h, v){ + var content = caml_ml_bytes_content(v); + return typeof content === "string" + ? caml_hash_mix_jsbytes(h, content) + : caml_hash_mix_bytes_arr(h, content); + } + function caml_hash_mix_final(h){ + h ^= h >>> 16; + h = caml_mul(h, 0x85ebca6b | 0); + h ^= h >>> 13; + h = caml_mul(h, 0xc2b2ae35 | 0); + h ^= h >>> 16; + return h; + } + function caml_hash(count, limit, seed, obj){ + var queue, rd, wr, sz, num, h, v, i, len; + sz = limit; + if(sz < 0 || sz > 256) sz = 256; + num = count; + h = seed; + queue = [obj]; + rd = 0; + wr = 1; + while(rd < wr && num > 0){ + v = queue[rd++]; + if(v && v.caml_custom){ + if + (caml_custom_ops[v.caml_custom] && caml_custom_ops[v.caml_custom].hash){ + var hh = caml_custom_ops[v.caml_custom].hash(v); + h = caml_hash_mix_int(h, hh); + num--; + } + } + else if(v instanceof Array && v[0] === (v[0] | 0)) + switch(v[0]){ + case 248: + h = caml_hash_mix_int(h, v[2]); num--; break; + case 250: + queue[--rd] = v[1]; break; + default: + if(caml_is_continuation_tag(v[0])) break; + var tag = v.length - 1 << 10 | v[0]; + h = caml_hash_mix_int(h, tag); + for(i = 1, len = v.length; i < len; i++){if(wr >= sz) break; queue[wr++] = v[i]; + } + break; + } + else if(caml_is_ml_bytes(v)){ + h = caml_hash_mix_bytes(h, v); + num--; + } + else if(caml_is_ml_string(v)){ + h = caml_hash_mix_string(h, v); + num--; + } + else if(typeof v === "string"){ + h = caml_hash_mix_jsbytes(h, v); + num--; + } + else if(v === (v | 0)){ + h = caml_hash_mix_int(h, v + v + 1); + num--; + } + else if(typeof v === "number"){h = caml_hash_mix_float(h, v); num--;} + } + h = caml_hash_mix_final(h); + return h & 0x3FFFFFFF; + } + function caml_hexstring_of_float(x, prec, style){ + if(! isFinite(x)){ + if(isNaN(x)) return caml_string_of_jsstring("nan"); + return caml_string_of_jsstring(x > 0 ? "infinity" : "-infinity"); + } + var sign = x == 0 && 1 / x == - Infinity ? 1 : x >= 0 ? 0 : 1; + if(sign) x = - x; + var exp = 0; + if(x == 0) + ; + else if(x < 1) + while(x < 1 && exp > - 1022){x *= 2; exp--;} + else + while(x >= 2){x /= 2; exp++;} + var exp_sign = exp < 0 ? "" : "+", sign_str = ""; + if(sign) + sign_str = "-"; + else + switch(style){ + case 43: + sign_str = "+"; break; + case 32: + sign_str = " "; break; + default: break; + } + if(prec >= 0 && prec < 13){ + var cst = Math.pow(2, prec * 4); + x = Math.round(x * cst) / cst; + } + var x_str = x.toString(16); + if(prec >= 0){ + var idx = x_str.indexOf("."); + if(idx < 0) + x_str += "." + caml_str_repeat(prec, "0"); + else{ + var size = idx + 1 + prec; + if(x_str.length < size) + x_str += caml_str_repeat(size - x_str.length, "0"); + else + x_str = x_str.substr(0, size); + } + } + return caml_string_of_jsstring + (sign_str + "0x" + x_str + "p" + exp_sign + exp.toString(10)); + } + function caml_int64_is_zero(x){return + x.isZero();} + function caml_int64_of_int32(x){ + return new MlInt64(x & 0xffffff, x >> 24 & 0xffffff, x >> 31 & 0xffff); + } + function caml_int64_to_int32(x){return x.toInt();} + function caml_int64_is_negative(x){return + x.isNeg();} + function caml_int64_neg(x){return x.neg();} + function caml_int64_format(fmt, x){ + var f = caml_parse_format(fmt); + if(f.signedconv && caml_int64_is_negative(x)){f.sign = - 1; x = caml_int64_neg(x);} + var + buffer = "", + wbase = caml_int64_of_int32(f.base), + cvtbl = "0123456789abcdef"; + do{ + var p = x.udivmod(wbase); + x = p.quotient; + buffer = cvtbl.charAt(caml_int64_to_int32(p.modulus)) + buffer; + } + while + (! caml_int64_is_zero(x)); + if(f.prec >= 0){ + f.filler = " "; + var n = f.prec - buffer.length; + if(n > 0) buffer = caml_str_repeat(n, "0") + buffer; + } + return caml_finish_formatting(f, buffer); + } + function caml_parse_sign_and_base(s){ + var i = 0, len = caml_ml_string_length(s), base = 10, sign = 1; + if(len > 0) + switch(caml_string_unsafe_get(s, i)){ + case 45: + i++; sign = - 1; break; + case 43: + i++; sign = 1; break; + } + if(i + 1 < len && caml_string_unsafe_get(s, i) == 48) + switch(caml_string_unsafe_get(s, i + 1)){ + case 120: + case 88: + base = 16; i += 2; break; + case 111: + case 79: + base = 8; i += 2; break; + case 98: + case 66: + base = 2; i += 2; break; + case 117: + case 85: + i += 2; break; + } + return [i, sign, base]; + } + function caml_parse_digit(c){ + if(c >= 48 && c <= 57) return c - 48; + if(c >= 65 && c <= 90) return c - 55; + if(c >= 97 && c <= 122) return c - 87; + return - 1; + } + function caml_int_of_string(s){ + var + r = caml_parse_sign_and_base(s), + i = r[0], + sign = r[1], + base = r[2], + len = caml_ml_string_length(s), + threshold = - 1 >>> 0, + c = i < len ? caml_string_unsafe_get(s, i) : 0, + d = caml_parse_digit(c); + if(d < 0 || d >= base) caml_failwith("int_of_string"); + var res = d; + for(i++; i < len; i++){ + c = caml_string_unsafe_get(s, i); + if(c == 95) continue; + d = caml_parse_digit(c); + if(d < 0 || d >= base) break; + res = base * res + d; + if(res > threshold) caml_failwith("int_of_string"); + } + if(i != len) caml_failwith("int_of_string"); + res = sign * res; + if(base == 10 && (res | 0) != res) caml_failwith("int_of_string"); + return res | 0; + } + function caml_js_from_array(a){return a.slice(1);} + function caml_js_meth_call(o, f, args){ + return o[caml_jsstring_of_string(f)].apply(o, caml_js_from_array(args)); + } + function caml_js_new(c, a){ + switch(a.length){ + case 1: + return new c; + case 2: + return new c(a[1]); + case 3: + return new c(a[1], a[2]); + case 4: + return new c(a[1], a[2], a[3]); + case 5: + return new c(a[1], a[2], a[3], a[4]); + case 6: + return new c(a[1], a[2], a[3], a[4], a[5]); + case 7: + return new c(a[1], a[2], a[3], a[4], a[5], a[6]); + case 8: + return new c(a[1], a[2], a[3], a[4], a[5], a[6], a[7]); + } + function F(){return c.apply(this, caml_js_from_array(a));} + F.prototype = c.prototype; + return new F; + } + function caml_js_object(a){ + var o = {}; + for(var i = 1; i < a.length; i++){ + var p = a[i]; + o[caml_jsstring_of_string(p[1])] = p[2]; + } + return o; + } + function caml_js_to_array(a){ + var len = a.length, b = new Array(len + 1); + b[0] = 0; + for(var i = 0; i < len; i++) b[i + 1] = a[i]; + return b; + } + var caml_callback = caml_call_gen; + function caml_js_wrap_callback_strict(arity, f){ + return function(){ + var + n = arguments.length, + args = new Array(arity), + len = Math.min(arguments.length, arity); + for(var i = 0; i < len; i++) args[i] = arguments[i]; + return caml_callback(f, args);}; + } + function caml_lessequal(x, y){ + return + (caml_compare_val(x, y, false) <= 0); + } + function caml_lessthan(x, y){return + (caml_compare_val(x, y, false) < 0);} + function caml_lex_array(s){ + s = caml_jsbytes_of_string(s); + var l = s.length / 2, a = new Array(l); + for(var i = 0; i < l; i++) + a[i] = (s.charCodeAt(2 * i) | s.charCodeAt(2 * i + 1) << 8) << 16 >> 16; + return a; + } + function caml_lex_engine(tbl, start_state, lexbuf){ + var + lex_buffer = 2, + lex_buffer_len = 3, + lex_start_pos = 5, + lex_curr_pos = 6, + lex_last_pos = 7, + lex_last_action = 8, + lex_eof_reached = 9, + lex_base = 1, + lex_backtrk = 2, + lex_default = 3, + lex_trans = 4, + lex_check = 5; + if(! tbl.lex_default){ + tbl.lex_base = caml_lex_array(tbl[lex_base]); + tbl.lex_backtrk = caml_lex_array(tbl[lex_backtrk]); + tbl.lex_check = caml_lex_array(tbl[lex_check]); + tbl.lex_trans = caml_lex_array(tbl[lex_trans]); + tbl.lex_default = caml_lex_array(tbl[lex_default]); + } + var + c, + state = start_state, + buffer = caml_uint8_array_of_bytes(lexbuf[lex_buffer]); + if(state >= 0){ + lexbuf[lex_last_pos] = lexbuf[lex_start_pos] = lexbuf[lex_curr_pos]; + lexbuf[lex_last_action] = - 1; + } + else + state = - state - 1; + for(;;){ + var base = tbl.lex_base[state]; + if(base < 0) return - base - 1; + var backtrk = tbl.lex_backtrk[state]; + if(backtrk >= 0){ + lexbuf[lex_last_pos] = lexbuf[lex_curr_pos]; + lexbuf[lex_last_action] = backtrk; + } + if(lexbuf[lex_curr_pos] >= lexbuf[lex_buffer_len]) + if(lexbuf[lex_eof_reached] == 0) return - state - 1; else c = 256; + else{c = buffer[lexbuf[lex_curr_pos]]; lexbuf[lex_curr_pos]++;} + if(tbl.lex_check[base + c] == state) + state = tbl.lex_trans[base + c]; + else + state = tbl.lex_default[state]; + if(state < 0){ + lexbuf[lex_curr_pos] = lexbuf[lex_last_pos]; + if(lexbuf[lex_last_action] == - 1) + caml_failwith("lexing: empty token"); + else + return lexbuf[lex_last_action]; + } + else if(c == 256) lexbuf[lex_eof_reached] = 0; + } + } + function caml_make_vect(len, init){ + if(len < 0) caml_array_bound_error(); + var len = len + 1 | 0, b = new Array(len); + b[0] = 0; + for(var i = 1; i < len; i++) b[i] = init; + return b; + } + function caml_MD5Init(){ + var + buffer = new ArrayBuffer(64), + b32 = new Uint32Array(buffer), + b8 = new Uint8Array(buffer); + return {len: 0, + w: + new Uint32Array([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476]), + b32: b32, + b8: b8}; + } + var + caml_MD5Transform = + function(){ + function add(x, y){return x + y | 0;} + function xx(q, a, b, x, s, t){ + a = add(add(a, q), add(x, t)); + return add(a << s | a >>> 32 - s, b); + } + function ff(a, b, c, d, x, s, t){ + return xx(b & c | ~ b & d, a, b, x, s, t); + } + function gg(a, b, c, d, x, s, t){ + return xx(b & d | c & ~ d, a, b, x, s, t); + } + function hh(a, b, c, d, x, s, t){return xx(b ^ c ^ d, a, b, x, s, t);} + function ii(a, b, c, d, x, s, t){ + return xx(c ^ (b | ~ d), a, b, x, s, t); + } + return function(w, buffer){ + var a = w[0], b = w[1], c = w[2], d = w[3]; + a = ff(a, b, c, d, buffer[0], 7, 0xD76AA478); + d = ff(d, a, b, c, buffer[1], 12, 0xE8C7B756); + c = ff(c, d, a, b, buffer[2], 17, 0x242070DB); + b = ff(b, c, d, a, buffer[3], 22, 0xC1BDCEEE); + a = ff(a, b, c, d, buffer[4], 7, 0xF57C0FAF); + d = ff(d, a, b, c, buffer[5], 12, 0x4787C62A); + c = ff(c, d, a, b, buffer[6], 17, 0xA8304613); + b = ff(b, c, d, a, buffer[7], 22, 0xFD469501); + a = ff(a, b, c, d, buffer[8], 7, 0x698098D8); + d = ff(d, a, b, c, buffer[9], 12, 0x8B44F7AF); + c = ff(c, d, a, b, buffer[10], 17, 0xFFFF5BB1); + b = ff(b, c, d, a, buffer[11], 22, 0x895CD7BE); + a = ff(a, b, c, d, buffer[12], 7, 0x6B901122); + d = ff(d, a, b, c, buffer[13], 12, 0xFD987193); + c = ff(c, d, a, b, buffer[14], 17, 0xA679438E); + b = ff(b, c, d, a, buffer[15], 22, 0x49B40821); + a = gg(a, b, c, d, buffer[1], 5, 0xF61E2562); + d = gg(d, a, b, c, buffer[6], 9, 0xC040B340); + c = gg(c, d, a, b, buffer[11], 14, 0x265E5A51); + b = gg(b, c, d, a, buffer[0], 20, 0xE9B6C7AA); + a = gg(a, b, c, d, buffer[5], 5, 0xD62F105D); + d = gg(d, a, b, c, buffer[10], 9, 0x02441453); + c = gg(c, d, a, b, buffer[15], 14, 0xD8A1E681); + b = gg(b, c, d, a, buffer[4], 20, 0xE7D3FBC8); + a = gg(a, b, c, d, buffer[9], 5, 0x21E1CDE6); + d = gg(d, a, b, c, buffer[14], 9, 0xC33707D6); + c = gg(c, d, a, b, buffer[3], 14, 0xF4D50D87); + b = gg(b, c, d, a, buffer[8], 20, 0x455A14ED); + a = gg(a, b, c, d, buffer[13], 5, 0xA9E3E905); + d = gg(d, a, b, c, buffer[2], 9, 0xFCEFA3F8); + c = gg(c, d, a, b, buffer[7], 14, 0x676F02D9); + b = gg(b, c, d, a, buffer[12], 20, 0x8D2A4C8A); + a = hh(a, b, c, d, buffer[5], 4, 0xFFFA3942); + d = hh(d, a, b, c, buffer[8], 11, 0x8771F681); + c = hh(c, d, a, b, buffer[11], 16, 0x6D9D6122); + b = hh(b, c, d, a, buffer[14], 23, 0xFDE5380C); + a = hh(a, b, c, d, buffer[1], 4, 0xA4BEEA44); + d = hh(d, a, b, c, buffer[4], 11, 0x4BDECFA9); + c = hh(c, d, a, b, buffer[7], 16, 0xF6BB4B60); + b = hh(b, c, d, a, buffer[10], 23, 0xBEBFBC70); + a = hh(a, b, c, d, buffer[13], 4, 0x289B7EC6); + d = hh(d, a, b, c, buffer[0], 11, 0xEAA127FA); + c = hh(c, d, a, b, buffer[3], 16, 0xD4EF3085); + b = hh(b, c, d, a, buffer[6], 23, 0x04881D05); + a = hh(a, b, c, d, buffer[9], 4, 0xD9D4D039); + d = hh(d, a, b, c, buffer[12], 11, 0xE6DB99E5); + c = hh(c, d, a, b, buffer[15], 16, 0x1FA27CF8); + b = hh(b, c, d, a, buffer[2], 23, 0xC4AC5665); + a = ii(a, b, c, d, buffer[0], 6, 0xF4292244); + d = ii(d, a, b, c, buffer[7], 10, 0x432AFF97); + c = ii(c, d, a, b, buffer[14], 15, 0xAB9423A7); + b = ii(b, c, d, a, buffer[5], 21, 0xFC93A039); + a = ii(a, b, c, d, buffer[12], 6, 0x655B59C3); + d = ii(d, a, b, c, buffer[3], 10, 0x8F0CCC92); + c = ii(c, d, a, b, buffer[10], 15, 0xFFEFF47D); + b = ii(b, c, d, a, buffer[1], 21, 0x85845DD1); + a = ii(a, b, c, d, buffer[8], 6, 0x6FA87E4F); + d = ii(d, a, b, c, buffer[15], 10, 0xFE2CE6E0); + c = ii(c, d, a, b, buffer[6], 15, 0xA3014314); + b = ii(b, c, d, a, buffer[13], 21, 0x4E0811A1); + a = ii(a, b, c, d, buffer[4], 6, 0xF7537E82); + d = ii(d, a, b, c, buffer[11], 10, 0xBD3AF235); + c = ii(c, d, a, b, buffer[2], 15, 0x2AD7D2BB); + b = ii(b, c, d, a, buffer[9], 21, 0xEB86D391); + w[0] = add(a, w[0]); + w[1] = add(b, w[1]); + w[2] = add(c, w[2]); + w[3] = add(d, w[3]);}; + } + (); + function caml_MD5Update(ctx, input, input_len){ + var in_buf = ctx.len & 0x3f, input_pos = 0; + ctx.len += input_len; + if(in_buf){ + var missing = 64 - in_buf; + if(input_len < missing){ + ctx.b8.set(input.subarray(0, input_len), in_buf); + return; + } + ctx.b8.set(input.subarray(0, missing), in_buf); + caml_MD5Transform(ctx.w, ctx.b32); + input_len -= missing; + input_pos += missing; + } + while(input_len >= 64){ + ctx.b8.set(input.subarray(input_pos, input_pos + 64), 0); + caml_MD5Transform(ctx.w, ctx.b32); + input_len -= 64; + input_pos += 64; + } + if(input_len) + ctx.b8.set(input.subarray(input_pos, input_pos + input_len), 0); + } + function caml_MD5Final(ctx){ + var in_buf = ctx.len & 0x3f; + ctx.b8[in_buf] = 0x80; + in_buf++; + if(in_buf > 56){ + for(var j = in_buf; j < 64; j++) ctx.b8[j] = 0; + caml_MD5Transform(ctx.w, ctx.b32); + for(var j = 0; j < 56; j++) ctx.b8[j] = 0; + } + else + for(var j = in_buf; j < 56; j++) ctx.b8[j] = 0; + ctx.b32[14] = ctx.len << 3; + ctx.b32[15] = ctx.len >> 29 & 0x1FFFFFFF; + caml_MD5Transform(ctx.w, ctx.b32); + var t = new Uint8Array(16); + for(var i = 0; i < 4; i++) + for(var j = 0; j < 4; j++) t[i * 4 + j] = ctx.w[i] >> 8 * j & 0xFF; + return t; + } + function caml_string_of_array(a){ + return caml_string_of_jsbytes(caml_subarray_to_jsbytes(a, 0, a.length)); + } + function caml_md5_bytes(s, ofs, len){ + var ctx = caml_MD5Init(), a = caml_uint8_array_of_bytes(s); + caml_MD5Update(ctx, a.subarray(ofs, ofs + len), len); + return caml_string_of_array(caml_MD5Final(ctx)); + } + function caml_md5_string(s, ofs, len){ + return caml_md5_bytes(caml_bytes_of_string(s), ofs, len); + } + var caml_sys_fds = new Array(3); + function caml_sys_close(fd){ + var file = caml_sys_fds[fd]; + if(file) file.close(); + delete caml_sys_fds[fd]; + return 0; + } + var caml_ml_channels = new Array(); + function caml_ml_flush(chanid){ + var chan = caml_ml_channels[chanid]; + if(! chan.opened) caml_raise_sys_error("Cannot flush a closed channel"); + if(! chan.buffer || chan.buffer_curr == 0) return 0; + if(chan.output) + chan.output(caml_subarray_to_jsbytes(chan.buffer, 0, chan.buffer_curr)); + else + chan.file.write(chan.offset, chan.buffer, 0, chan.buffer_curr); + chan.offset += chan.buffer_curr; + chan.buffer_curr = 0; + return 0; + } + function caml_ml_close_channel(chanid){ + var chan = caml_ml_channels[chanid]; + if(chan.opened){ + chan.opened = false; + caml_sys_close(chan.fd); + chan.fd = - 1; + chan.buffer = new Uint8Array(0); + chan.buffer_curr = 0; + chan.buffer_max = 0; + } + return 0; + } + function caml_ml_debug_info_status(){return 0;} + function caml_refill(chan){ + if(chan.refill != null){ + var str = chan.refill(), str_a = caml_uint8_array_of_string(str); + if(str_a.length == 0) + chan.refill = null; + else{ + if(chan.buffer.length < chan.buffer_max + str_a.length){ + var b = new Uint8Array(chan.buffer_max + str_a.length); + b.set(chan.buffer); + chan.buffer = b; + } + chan.buffer.set(str_a, chan.buffer_max); + chan.offset += str_a.length; + chan.buffer_max += str_a.length; + } + } + else{ + var + nread = + chan.file.read + (chan.offset, + chan.buffer, + chan.buffer_max, + chan.buffer.length - chan.buffer_max); + chan.offset += nread; + chan.buffer_max += nread; + } + } + function caml_ml_input_block(chanid, ba, i, l){ + var + chan = caml_ml_channels[chanid], + n = l, + avail = chan.buffer_max - chan.buffer_curr; + if(l <= avail){ + ba.set(chan.buffer.subarray(chan.buffer_curr, chan.buffer_curr + l), i); + chan.buffer_curr += l; + } + else if(avail > 0){ + ba.set + (chan.buffer.subarray(chan.buffer_curr, chan.buffer_curr + avail), i); + chan.buffer_curr += avail; + n = avail; + } + else{ + chan.buffer_curr = 0; + chan.buffer_max = 0; + caml_refill(chan); + var avail = chan.buffer_max - chan.buffer_curr; + if(n > avail) n = avail; + ba.set(chan.buffer.subarray(chan.buffer_curr, chan.buffer_curr + n), i); + chan.buffer_curr += n; + } + return n | 0; + } + function caml_ml_input(chanid, b, i, l){ + var ba = caml_uint8_array_of_bytes(b); + return caml_ml_input_block(chanid, ba, i, l); + } + function caml_sys_open_for_node(fd, flags){ + if(flags.name) + try{ + var fs = require("fs"), fd2 = fs.openSync(flags.name, "rs"); + return new MlNodeFd(fd2, flags); + } + catch(e){} + return new MlNodeFd(fd, flags); + } + function MlFakeFd_out(fd, flags){ + MlFakeFile.call(this, caml_create_bytes(0)); + this.log = function(s){return 0;}; + if(fd == 1 && typeof console.log == "function") + this.log = console.log; + else if(fd == 2 && typeof console.error == "function") + this.log = console.error; + else if(typeof console.log == "function") this.log = console.log; + this.flags = flags; + } + MlFakeFd_out.prototype.length = function(){return 0;}; + MlFakeFd_out.prototype.write = + function(offset, buf, pos, len){ + if(this.log){ + if + (len > 0 && pos >= 0 && pos + len <= buf.length + && buf[pos + len - 1] == 10) + len--; + var src = caml_create_bytes(len); + caml_blit_bytes(caml_bytes_of_array(buf), pos, src, 0, len); + this.log(src.toUtf16()); + return 0; + } + caml_raise_sys_error(this.fd + ": file descriptor already closed"); + }; + MlFakeFd_out.prototype.read = + function(offset, buf, pos, len){ + caml_raise_sys_error(this.fd + ": file descriptor is write only"); + }; + MlFakeFd_out.prototype.close = function(){this.log = undefined;}; + function caml_sys_open_internal(file, idx){ + if(idx == undefined) idx = caml_sys_fds.length; + caml_sys_fds[idx] = file; + return idx | 0; + } + function caml_sys_open(name, flags, _perms){ + var f = {}; + while(flags){ + switch(flags[1]){ + case 0: + f.rdonly = 1; break; + case 1: + f.wronly = 1; break; + case 2: + f.append = 1; break; + case 3: + f.create = 1; break; + case 4: + f.truncate = 1; break; + case 5: + f.excl = 1; break; + case 6: + f.binary = 1; break; + case 7: + f.text = 1; break; + case 8: + f.nonblock = 1; break; + } + flags = flags[2]; + } + if(f.rdonly && f.wronly) + caml_raise_sys_error + (caml_jsbytes_of_string(name) + + " : flags Open_rdonly and Open_wronly are not compatible"); + if(f.text && f.binary) + caml_raise_sys_error + (caml_jsbytes_of_string(name) + + " : flags Open_text and Open_binary are not compatible"); + var root = resolve_fs_device(name), file = root.device.open(root.rest, f); + return caml_sys_open_internal(file, undefined); + } + (function(){ + function file(fd, flags){ + return fs_node_supported() + ? caml_sys_open_for_node(fd, flags) + : new MlFakeFd_out(fd, flags); + } + caml_sys_open_internal + (file(0, {rdonly: 1, altname: "/dev/stdin", isCharacterDevice: true}), + 0); + caml_sys_open_internal + (file(1, {buffered: 2, wronly: 1, isCharacterDevice: true}), 1); + caml_sys_open_internal + (file(2, {buffered: 2, wronly: 1, isCharacterDevice: true}), 2); + } + ()); + function caml_ml_open_descriptor_in(fd){ + var file = caml_sys_fds[fd]; + if(file.flags.wronly) caml_raise_sys_error("fd " + fd + " is writeonly"); + var + refill = null, + channel = + {file: file, + offset: file.flags.append ? file.length() : 0, + fd: fd, + opened: true, + out: false, + buffer_curr: 0, + buffer_max: 0, + buffer: new Uint8Array(65536), + refill: refill}; + caml_ml_channels[channel.fd] = channel; + return channel.fd; + } + function caml_ml_open_descriptor_out(fd){ + var file = caml_sys_fds[fd]; + if(file.flags.rdonly) caml_raise_sys_error("fd " + fd + " is readonly"); + var + buffered = file.flags.buffered !== undefined ? file.flags.buffered : 1, + channel = + {file: file, + offset: file.flags.append ? file.length() : 0, + fd: fd, + opened: true, + out: true, + buffer_curr: 0, + buffer: new Uint8Array(65536), + buffered: buffered}; + caml_ml_channels[channel.fd] = channel; + return channel.fd; + } + function caml_ml_out_channels_list(){ + var l = 0; + for(var c = 0; c < caml_ml_channels.length; c++) + if + (caml_ml_channels[c] && caml_ml_channels[c].opened + && caml_ml_channels[c].out) + l = [0, caml_ml_channels[c].fd, l]; + return l; + } + function caml_ml_output_ta(chanid, buffer, offset, len){ + var chan = caml_ml_channels[chanid]; + if(! chan.opened) + caml_raise_sys_error("Cannot output to a closed channel"); + buffer = buffer.subarray(offset, offset + len); + if(chan.buffer_curr + buffer.length > chan.buffer.length){ + var b = new Uint8Array(chan.buffer_curr + buffer.length); + b.set(chan.buffer); + chan.buffer = b; + } + switch(chan.buffered){ + case 0: + chan.buffer.set(buffer, chan.buffer_curr); + chan.buffer_curr += buffer.length; + caml_ml_flush(chanid); + break; + case 1: + chan.buffer.set(buffer, chan.buffer_curr); + chan.buffer_curr += buffer.length; + if(chan.buffer_curr >= chan.buffer.length) caml_ml_flush(chanid); + break; + case 2: + var id = buffer.lastIndexOf(10); + if(id < 0){ + chan.buffer.set(buffer, chan.buffer_curr); + chan.buffer_curr += buffer.length; + if(chan.buffer_curr >= chan.buffer.length) caml_ml_flush(chanid); + } + else{ + chan.buffer.set(buffer.subarray(0, id + 1), chan.buffer_curr); + chan.buffer_curr += id + 1; + caml_ml_flush(chanid); + chan.buffer.set(buffer.subarray(id + 1), chan.buffer_curr); + chan.buffer_curr += buffer.length - id - 1; + } + break; + } + return 0; + } + function caml_ml_output_bytes(chanid, buffer, offset, len){ + var buffer = caml_uint8_array_of_bytes(buffer); + return caml_ml_output_ta(chanid, buffer, offset, len); + } + function caml_ml_output(chanid, buffer, offset, len){ + return caml_ml_output_bytes + (chanid, caml_bytes_of_string(buffer), offset, len); + } + function caml_ml_output_char(chanid, c){ + var s = caml_string_of_jsbytes(String.fromCharCode(c)); + caml_ml_output(chanid, s, 0, 1); + return 0; + } + function caml_ml_set_channel_name(chanid, name){ + var chan = caml_ml_channels[chanid]; + chan.name = name; + return 0; + } + function caml_mod(x, y){if(y == 0) caml_raise_zero_divide(); return x % y;} + function caml_notequal(x, y){ + return + (caml_compare_val(x, y, false) != 0); + } + function caml_obj_make_forward(b, v){b[0] = 250; b[1] = v; return 0;} + function caml_obj_tag(x){ + if(x instanceof Array && x[0] == x[0] >>> 0) + return x[0]; + else if(caml_is_ml_bytes(x)) + return 252; + else if(caml_is_ml_string(x)) + return 252; + else if(x instanceof Function || typeof x == "function") + return 247; + else if(x && x.caml_custom) return 255; else return 1000; + } + function caml_build_symbols(symb){ + var r = {}; + if(symb) + for(var i = 1; i < symb.length; i++) + r[caml_jsstring_of_string(symb[i][1])] = symb[i][2]; + return r; + } + function caml_register_global(n, v, name_opt){ + if(name_opt){ + var name = name_opt; + if(globalThis.toplevelReloc) + n = caml_callback(globalThis.toplevelReloc, [name]); + else if(caml_global_data.symbols){ + if(! caml_global_data.symidx) + caml_global_data.symidx = caml_build_symbols(caml_global_data.symbols); + var nid = caml_global_data.symidx[name]; + if(nid >= 0) + n = nid; + else + caml_failwith("caml_register_global: cannot locate " + name); + } + } + caml_global_data[n + 1] = v; + if(name_opt) caml_global_data[name_opt] = v; + } + function caml_register_named_value(nm, v){ + caml_named_values[caml_jsbytes_of_string(nm)] = v; + return 0; + } + function caml_string_equal(s1, s2){if(s1 === s2) return 1; return 0;} + function caml_string_bound_error(){ + caml_invalid_argument("index out of bounds"); + } + function caml_string_get(s, i){ + if(i >>> 0 >= caml_ml_string_length(s)) caml_string_bound_error(); + return caml_string_unsafe_get(s, i); + } + function caml_string_notequal(s1, s2){ + return 1 - caml_string_equal(s1, s2); + } + function caml_string_of_bytes(s){ + s.t & 6 && caml_convert_string_to_bytes(s); + return caml_string_of_jsbytes(s.c); + } + function caml_sys_const_max_wosize(){return 0x7FFFFFFF / 4 | 0;} + function caml_raise_not_found(){ + caml_raise_constant(caml_global_data.Not_found); + } + function caml_sys_getenv(name){ + var r = jsoo_sys_getenv(caml_jsstring_of_string(name)); + if(r === undefined) caml_raise_not_found(); + return caml_string_of_jsstring(r); + } + function caml_sys_random_seed(){ + if(globalThis.crypto) + if(globalThis.crypto.getRandomValues){ + var a = globalThis.crypto.getRandomValues(new Int32Array(4)); + return [0, a[0], a[1], a[2], a[3]]; + } + else if(globalThis.crypto.randomBytes){ + var a = new Int32Array(globalThis.crypto.randomBytes(16).buffer); + return [0, a[0], a[1], a[2], a[3]]; + } + var now = new Date().getTime(), x = now ^ 0xffffffff * Math.random(); + return [0, x]; + } + function caml_trampoline(res){ + var c = 1; + while(res && res.joo_tramp){ + res = res.joo_tramp.apply(null, res.joo_args); + c++; + } + return res; + } + function caml_trampoline_return(f, args){return {joo_tramp: f, joo_args: args}; + } + function caml_wrap_exception(e){ + { + if(e instanceof Array) return e; + var exn; + if + (globalThis.RangeError && e instanceof globalThis.RangeError + && e.message + && e.message.match(/maximum call stack/i)) + exn = caml_global_data.Stack_overflow; + else if + (globalThis.InternalError && e instanceof globalThis.InternalError + && e.message + && e.message.match(/too much recursion/i)) + exn = caml_global_data.Stack_overflow; + else if(e instanceof globalThis.Error && caml_named_value("jsError")) + exn = [0, caml_named_value("jsError"), e]; + else + exn = [0, caml_global_data.Failure, caml_string_of_jsstring(String(e))]; + if(e instanceof globalThis.Error) exn.js_error = e; + return exn; + } + } + function caml_is_special_exception(exn){ + switch(exn[2]){case - 8:case - 11:case - 12: return 1;default: return 0; + } + } + function caml_format_exception(exn){ + var r = ""; + if(exn[0] == 0){ + r += exn[1][1]; + if + (exn.length == 3 && exn[2][0] == 0 && caml_is_special_exception(exn[1])) + var bucket = exn[2], start = 1; + else + var start = 2, bucket = exn; + r += "("; + for(var i = start; i < bucket.length; i++){ + if(i > start) r += ", "; + var v = bucket[i]; + if(typeof v == "number") + r += v.toString(); + else if(v instanceof MlBytes) + r += '"' + v.toString() + '"'; + else if(typeof v == "string") + r += '"' + v.toString() + '"'; + else + r += "_"; + } + r += ")"; + } + else if(exn[0] == 248) r += exn[1]; + return r; + } + function caml_fatal_uncaught_exception(err){ + if(err instanceof Array && (err[0] == 0 || err[0] == 248)){ + var handler = caml_named_value("Printexc.handle_uncaught_exception"); + if(handler) + caml_callback(handler, [err, false]); + else{ + var + msg = caml_format_exception(err), + at_exit = caml_named_value("Pervasives.do_at_exit"); + if(at_exit) caml_callback(at_exit, [0]); + console.error("Fatal error: exception " + msg); + if(err.js_error) throw err.js_error; + } + } + else + throw err; + } + function caml_setup_uncaught_exception_handler(){ + var process = globalThis.process; + if(process && process.on) + process.on + ("uncaughtException", + function(err, origin){ + caml_fatal_uncaught_exception(err); + process.exit(2); + }); + else if(globalThis.addEventListener) + globalThis.addEventListener + ("error", + function(event){ + if(event.error) caml_fatal_uncaught_exception(event.error); + }); + } + caml_setup_uncaught_exception_handler(); + var + cst$1 = "", + cst$12 = " ", + cst$11 = '"', + cst_Li = "%Li", + cst_a = "%a", + cst_d = "%d", + cst_i = "%i", + cst_li = "%li", + cst_ni = "%ni", + cst_s = "%s", + cst_u = "%u", + cst$7 = "'", + cst_Program_not_linked_with_g_ = + "(Program not linked with -g, cannot print stack backtrace)\n", + cst$9 = ",", + cst_characters = ", characters ", + cst_Infinity = "-Infinity", + cst = ".", + cst_0 = ".0", + cst$10 = ":", + cst$4 = ": ", + cst$6 = "<", + cst_hov = "", + cst_hv2 = "", + cst$5 = ">", + cst_1_2 = "@;<1 -2>", + cst_1_0 = "@;<1 0>", + cst$3 = "@[", + cst$2 = "@{", + cst_AggregateFolder = "AggregateFolder", + cst_AirTime = "AirTime", + cst_Album = "Album", + cst_AlbumArtist = "AlbumArtist", + cst_AlbumId = "AlbumId", + cst_Artist = "Artist", + cst_Ascending = "Ascending", + cst_Assert_failure = "Assert_failure", + cst_Audio = "Audio", + cst_AudioBook = "AudioBook", + cst_BasePluginFolder = "BasePluginFolder", + cst_BasicSyncInfo = "BasicSyncInfo", + cst_Book = "Book", + cst_BoxSet = "BoxSet", + cst_Budget = "Budget", + cst_CanDelete = "CanDelete", + cst_CanDownload = "CanDownload", + cst_Channel = "Channel", + cst_ChannelFolderItem = "ChannelFolderItem", + cst_ChannelImage = "ChannelImage", + cst_ChannelInfo = "ChannelInfo", + cst_Chapters = "Chapters", + cst_ChildCount = "ChildCount", + cst_CollectionFolder = "CollectionFolder", + cst_CollectionType = "CollectionType", + cst_CommunityRating = "CommunityRating", + cst_CriticRating = "CriticRating", + cst_CumulativeRunTimeTicks = "CumulativeRunTimeTicks", + cst_CustomRating = "CustomRating", + cst_DateCreated = "DateCreated", + cst_DateLastMediaAdded = "DateLastMediaAdded", + cst_DateLastRefreshed = "DateLastRefreshed", + cst_DateLastSaved = "DateLastSaved", + cst_DatePlayed = "DatePlayed", + cst_Descending = "Descending", + cst_DisplayPreferencesId = "DisplayPreferencesId", + cst_Division_by_zero = "Division_by_zero", + cst_EnableMediaSourceDisplay = "EnableMediaSourceDisplay", + cst_End_of_file = "End_of_file", + cst_Episode = "Episode", + cst_Etag = "Etag", + cst_ExternalEtag = "ExternalEtag", + cst_ExternalSeriesId = "ExternalSeriesId", + cst_ExternalUrls = "ExternalUrls", + cst_ExtraIds = "ExtraIds", + cst_Failure = "Failure", + cst_Fatal_error_exception = "Fatal error: exception ", + cst_Fatal_error_exception_s = "Fatal error: exception %s\n", + cst_Folder = "Folder", + cst_Genre = "Genre", + cst_Genres = "Genres", + cst_Height = "Height", + cst_HomePageUrl = "HomePageUrl", + cst_Id = "Id", + cst_ImageBlurHashes = "ImageBlurHashes", + cst_Infinity$0 = "Infinity", + cst_InheritedParentalRatingVal = "InheritedParentalRatingValue", + cst_Invalid_argument = "Invalid_argument", + cst_IsHD = "IsHD", + cst_ItemCounts = "ItemCounts", + cst_ItemId = "ItemId", + cst_Items = "Items", + cst_LiveTvChannel = "LiveTvChannel", + cst_LiveTvProgram = "LiveTvProgram", + cst_LocalTrailerCount = "LocalTrailerCount", + cst_Locations = "Locations", + cst_ManualPlaylistsFolder = "ManualPlaylistsFolder", + cst_Match_failure = "Match_failure", + cst_MediaSourceCount = "MediaSourceCount", + cst_MediaSources = "MediaSources", + cst_MediaStreams = "MediaStreams", + cst_Movie = "Movie", + cst_MusicAlbum = "MusicAlbum", + cst_MusicArtist = "MusicArtist", + cst_MusicGenre = "MusicGenre", + cst_MusicVideo = "MusicVideo", + cst_NaN = "NaN", + cst_Name = "Name", + cst_Not_found = "Not_found", + cst_OriginalTitle = "OriginalTitle", + cst_Out_of_memory = "Out_of_memory", + cst_Overview = "Overview", + cst_ParentId = "ParentId", + cst_Path = "Path", + cst_People = "People", + cst_Person = "Person", + cst_Photo = "Photo", + cst_PhotoAlbum = "PhotoAlbum", + cst_PlayAccess = "PlayAccess", + cst_PlayCount = "PlayCount", + cst_Playlist = "Playlist", + cst_PlaylistsFolder = "PlaylistsFolder", + cst_PremiereDate = "PremiereDate", + cst_PresentationUniqueKey = "PresentationUniqueKey", + cst_Primary = "Primary", + cst_PrimaryImageAspectRatio = "PrimaryImageAspectRatio", + cst_ProductionLocations = "ProductionLocations", + cst_ProductionYear = "ProductionYear", + cst_Program = "Program", + cst_ProviderIds = "ProviderIds", + cst_Random = "Random", + cst_Recording = "Recording", + cst_RecursiveItemCount = "RecursiveItemCount", + cst_RefreshState = "RefreshState", + cst_RemoteTrailers = "RemoteTrailers", + cst_Revenue = "Revenue", + cst_Runtime = "Runtime", + cst_ScreenshotImageTags = "ScreenshotImageTags", + cst_Season = "Season", + cst_SeasonUserData = "SeasonUserData", + cst_Series = "Series", + cst_SeriesPresentationUniqueKe = "SeriesPresentationUniqueKey", + cst_SeriesPrimaryImage = "SeriesPrimaryImage", + cst_SeriesStudio = "SeriesStudio", + cst_ServerId = "ServerId", + cst_ServiceName = "ServiceName", + cst_Set_bal = "Set.bal", + cst_Settings = "Settings", + cst_SortName = "SortName", + cst_SpecialEpisodeNumbers = "SpecialEpisodeNumbers", + cst_SpecialFeatureCount = "SpecialFeatureCount", + cst_Stack_overflow = "Stack_overflow", + cst_StartIndex = "StartIndex", + cst_Studio = "Studio", + cst_Studios = "Studios", + cst_SyncInfo = "SyncInfo", + cst_Sys_blocked_io = "Sys_blocked_io", + cst_Sys_error = "Sys_error", + cst_Taglines = "Taglines", + cst_Tags = "Tags", + cst_ThemeSongIds = "ThemeSongIds", + cst_ThemeVideoIds = "ThemeVideoIds", + cst_TotalRecordCount = "TotalRecordCount", + cst_Trailer = "Trailer", + cst_TvChannel = "TvChannel", + cst_TvProgram = "TvProgram", + cst_Type = "Type", + cst_Undefined_recursive_module = "Undefined_recursive_module", + cst_UserRootFolder = "UserRootFolder", + cst_UserView = "UserView", + cst_Video = "Video", + cst_Width = "Width", + cst_Year = "Year", + cst$8 = '\\"', + cst$0 = "\\\\", + cst_b = "\\b", + cst_f = "\\f", + cst_n = "\\n", + cst_r = "\\r", + cst_t = "\\t", + cst_u00 = "\\u00", + cst_buffer_ml = "buffer.ml", + cst_camlinternalFormat_ml = "camlinternalFormat.ml", + cst_console = "console", + cst_date_added = "date_added", + cst_empty_input = "empty input", + cst_enableImages = "enableImages", + cst_enableUserData = "enableUserData", + cst_error = "error", + cst_false = "false", + cst_fields = "fields", + cst_fut = "fut", + cst_id = "id", + cst_ids = "ids", + cst_includeExternalContent = "includeExternalContent", + cst_includeItemTypes = "includeItemTypes", + cst_item = "item", + cst_item_Id = "item.Id", + cst_items = "items", + cst_items_by_date_added = "items_by_date_added", + cst_junk_after_end_of_JSON_val = "junk after end of JSON value: ", + cst_lib_db_stores_ml = "lib/db/stores.ml", + cst_limit = "limit", + cst_music = "music", + cst_music$0 = "music\0", + cst_name = "name", + cst_null = "null", + cst_parentId = "parentId", + cst_recursive = "recursive", + cst_sortBy = "sortBy", + cst_sortOrder = "sortOrder", + cst_sort_name = "sort_name", + cst_sorts = "sorts", + cst_sorts_views = "sorts.views", + cst_src_core_CCString_pp_ml = "src/core/CCString.pp.ml", + cst_startIndex = "startIndex", + cst_start_index = "start_index", + cst_to = "to", + cst_total_record_count = "total_record_count", + cst_true = "true", + cst_tuples_not_supported_in_yo = + "tuples not supported in yojson basic mode", + cst_unexpected_character = "unexpected character '", + cst_userId = "userId", + cst_variants_not_supported_in_ = + "variants not supported in yojson basic mode", + cst_views = "views"; + function caml_call1(f, a0){ + return (f.l >= 0 ? f.l : f.l = f.length) == 1 + ? f(a0) + : caml_call_gen(f, [a0]); + } + function caml_call2(f, a0, a1){ + return (f.l >= 0 ? f.l : f.l = f.length) == 2 + ? f(a0, a1) + : caml_call_gen(f, [a0, a1]); + } + function caml_call3(f, a0, a1, a2){ + return (f.l >= 0 ? f.l : f.l = f.length) == 3 + ? f(a0, a1, a2) + : caml_call_gen(f, [a0, a1, a2]); + } + function caml_call4(f, a0, a1, a2, a3){ + return (f.l >= 0 ? f.l : f.l = f.length) == 4 + ? f(a0, a1, a2, a3) + : caml_call_gen(f, [a0, a1, a2, a3]); + } + function caml_call5(f, a0, a1, a2, a3, a4){ + return (f.l >= 0 ? f.l : f.l = f.length) == 5 + ? f(a0, a1, a2, a3, a4) + : caml_call_gen(f, [a0, a1, a2, a3, a4]); + } + function caml_call7(f, a0, a1, a2, a3, a4, a5, a6){ + return (f.l >= 0 ? f.l : f.l = f.length) == 7 + ? f(a0, a1, a2, a3, a4, a5, a6) + : caml_call_gen(f, [a0, a1, a2, a3, a4, a5, a6]); + } + var undef = undefined; + caml_fs_init(); + var + Out_of_memory = [248, cst_Out_of_memory, -1], + Sys_error = [248, cst_Sys_error, -2], + Failure = [248, cst_Failure, -3], + Invalid_argument = [248, cst_Invalid_argument, -4], + End_of_file = [248, cst_End_of_file, -5], + Division_by_zero = [248, cst_Division_by_zero, -6], + Not_found = [248, cst_Not_found, -7], + Match_failure = [248, cst_Match_failure, -8], + Stack_overflow = [248, cst_Stack_overflow, -9], + Sys_blocked_io = [248, cst_Sys_blocked_io, -10], + Assert_failure = [248, cst_Assert_failure, -11], + Undefined_recursive_module = [248, cst_Undefined_recursive_module, -12], + dummy_pos = [0, cst$1, 0, 0, -1], + zero_pos = [0, cst$1, 1, 0, 0], + partial = [4, 0, 0, 0, [12, 45, [4, 0, 0, 0, 0]]], + locfmt = + [0, + [11, + 'File "', + [2, + 0, + [11, + '", line ', + [4, + 0, + 0, + 0, + [11, + cst_characters, + [4, 0, 0, 0, [12, 45, [4, 0, 0, 0, [11, cst$4, [2, 0, 0]]]]]]]]]], + 'File "%s", line %d, characters %d-%d: %s'], + ocaml_lex_tables = + [0, + "\0\0\xe5\xff\x11\0\xe8\xff\x03\0\xea\xff~\0\0\0q\0\0\0\x01\0\x01\0\x02\0{\0\xf3\xff\xf4\xff\xf5\xff\xf6\xff\xf7\xff\xf8\xff\xf9\xff\xfa\xff\xfb\xff\xfc\xff\x01\0\x02\0\0\0\0\0\x02\0\xff\xff\0\0\0\0\x03\0\xfe\xff\x03\0\x01\0\x0b\0\xfd\xff\xef\xff\x03\0\n\0\x0b\0\x05\0\xf2\xff\x14\0\x13\x000\0L\0C\0?\0K\0T\0\xf1\xffU\0S\0O\0U\0K\0G\0S\0T\0]\0\xf0\xff_\0]\0Y\0_\0U\0Q\0\x01\0 \0\x9b\0\xba\0\xd1\0\xdb\0\xe5\0\xf0\0\xfa\0\x12\x01B\x01\xec\xff\xeb\xff^\x01u\x01\x9b\x01\xb2\x015\0\xe7\xffX\x01\xfc\xff\xfd\xff\xfe\xff\x0e\0\xff\xff", + "\xff\xff\xff\xff\x1a\0\xff\xff\x16\0\xff\xff\x1a\0\x11\0\x11\0\x1a\0\x1a\0\x1a\0\x1a\0\x1a\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\0\x1a\0\x1a\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\0\xff\xff\x12\0\xff\xff\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff", + "\x01\0\0\0\xff\xff\0\0\xff\xff\0\0O\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffO\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xffV\0\0\0Y\0\0\0\0\0\0\0\xff\xff\0\0", + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\x03\0\0\0\x04\0\x04\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\x06\0\x04\0\0\0\0\0\0\0\0\0\x13\0\x12\0\0\0\n\0\x0f\0\r\0G\0\x02\0\x07\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\x0e\0W\0\x11\0]\0\x10\0\xff\xffV\0\0\0\0\0\0\0\0\0F\0\0\0\0\0\0\0\x0b\0;\0M\0\0\0M\0\t\0&\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0\0\0\x15\0\0\0\x14\0\0\0\0\0\0\0E\0\"\0\x1e\x002\0F\0\x19\0\x1d\0!\0\f\0<\0+\0\x1f\0$\0\x18\x005\x003\0&\0\x1b\0 \0\x1a\0\x1c\0#\0%\0,\0*\0-\0\x17\0.\0\x16\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff/\0G\0P\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\x07\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\x000\0F\x001\0+\0&\x004\x006\x007\x008\x009\0:\x004\0?\0=\0>\0(\0@\0A\0B\0C\0D\0>\0H\0H\0H\0H\0H\0H\0H\0H\0H\0H\0\0\0F\0\0\0\0\0\0\0N\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\0\0\0\0\0\0\0\0\0'\0H\0H\0H\0H\0H\0H\0H\0H\0H\0H\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0K\0\0\0K\0I\0\x05\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0I\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0O\0\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0O\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff[\0\0\0Q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0O\0\0\0\0\0\0\0\0\0\0\0O\0\0\0\0\0\0\0O\0\0\0\0\0\0\0\0\0\0\0\xff\xff\0\0O\0\0\0\\\0\0\0O\0\0\0O\0R\0\0\0\0\0\0\0\0\0\0\0\0\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0\0\0\0\0\0\0\0\0\0\0\0\0N\0S\0S\0S\0S\0S\0S\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0T\0T\0T\0T\0T\0T\0\0\0\0\0\0\0S\0S\0S\0S\0S\0S\0\0\0\0\0\0\0\0\0\0\0\0\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0\0\0T\0T\0T\0T\0T\0T\0U\0U\0U\0U\0U\0U\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0O\0O\0O\0O\0O\0O\0\0\0\0\0\0\0U\0U\0U\0U\0U\0U\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0O\0O\0O\0O\0O\0O\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\x04\0\0\0\xff\xff\xff\xff\x04\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\0\0\x04\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\0\0\0\0\0\0\x07\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x02\0\0\0\\\0\0\0V\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\xff\xff\xff\xff\xff\xff\0\0\n\0F\0\xff\xffF\0\0\0E\0F\0F\0F\0F\0F\0F\0F\0F\0F\0F\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\t\0\x18\0\x19\0'\0\x07\0\0\0\x1c\0 \0\0\0\n\0*\0\x1e\0#\0\0\0\x0b\0\f\0\"\0\x1a\0\x1f\0\0\0\x1b\0\x18\0$\0(\0)\0,\0\0\0-\0\0\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0.\0\b\0\x06\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0/\0\b\x000\x001\x002\x003\x005\x006\x007\x008\x009\0:\0;\0<\0=\0\r\0?\0@\0A\0B\0C\0D\0G\0G\0G\0G\0G\0G\0G\0G\0G\0G\0\xff\xff\b\0\xff\xff\xff\xff\xff\xff\x06\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\r\0\xff\xff\xff\xff\xff\xff\xff\xff\r\0H\0H\0H\0H\0H\0H\0H\0H\0H\0H\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffI\0\xff\xffI\0H\0\0\0I\0I\0I\0I\0I\0I\0I\0I\0I\0I\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0K\0K\0K\0K\0K\0K\0K\0K\0K\0K\0H\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0M\0M\0M\0M\0M\0M\0M\0M\0M\0M\0N\0V\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffN\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0X\0\xff\xffO\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffN\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffN\0\xff\xff\xff\xff\xff\xffN\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x06\0\xff\xffN\0\xff\xffX\0\xff\xffN\0\xff\xffN\0N\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffR\0R\0R\0R\0R\0R\0R\0R\0R\0R\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffO\0R\0R\0R\0R\0R\0R\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffS\0S\0S\0S\0S\0S\0\xff\xff\xff\xff\xff\xffR\0R\0R\0R\0R\0R\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffT\0T\0T\0T\0T\0T\0T\0T\0T\0T\0\xff\xffS\0S\0S\0S\0S\0S\0T\0T\0T\0T\0T\0T\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffU\0U\0U\0U\0U\0U\0\xff\xff\xff\xff\xff\xffT\0T\0T\0T\0T\0T\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffU\0U\0U\0U\0U\0U\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffO\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffX\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + cst$1, + cst$1, + cst$1, + cst$1, + cst$1, + cst$1], + tp_loc = "lib/data_source/jellyfin_api.ml.Types.order", + tp_loc$0 = "lib/data_source/jellyfin_api.ml.Types.sort", + tp_loc$1 = "lib/data_source/jellyfin_api.ml.Item.image_blur_hashes", + tp_loc$2 = "lib/data_source/jellyfin_api.ml.Item.type_", + tp_loc$3 = "lib/data_source/jellyfin_api.ml.Item.field", + tp_loc$4 = "lib/data_source/jellyfin_api.ml.Item.t", + tp_loc$5 = "lib/data_source/jellyfin_api.ml.Items.params", + tp_loc$6 = "lib/data_source/jellyfin_api.ml.Items.response", + tp_loc$7 = "lib/data_source/jellyfin_api.ml.Views.params", + tp_loc$8 = "lib/data_source/jellyfin_api.ml.Views.response", + tp_loc$9 = + "lib/data_source/jellyfin_api.ml.Virtual_folders.virtual_folder", + tp_loc$10 = "lib/db/stores.ml.Orderred_items.t", + path = [0, cst_id], + name$2 = cst_items_by_date_added, + tp_loc$11 = "lib/db/stores.ml.Items.sorts", + tp_loc$12 = "lib/db/stores.ml.Items.t", + path$1 = [0, "sorts.date_added"], + path$2 = [0, cst_item_Id], + name$3 = cst_items, + path$5 = [0, cst_ItemId], + name$4 = "virtual_folders", + name$5 = cst_items_by_date_added, + name$6 = "items_by_view_and_kind", + name$7 = "items_by_id", + name$8 = "items_by_type_and_name", + include_item_types = [0, 17, [0, 16, [0, 1, 0]]], + initial_report = [0, 0, 0]; + caml_register_global + (11, Undefined_recursive_module, cst_Undefined_recursive_module); + caml_register_global(10, Assert_failure, cst_Assert_failure); + caml_register_global(9, Sys_blocked_io, cst_Sys_blocked_io); + caml_register_global(8, Stack_overflow, cst_Stack_overflow); + caml_register_global(7, Match_failure, cst_Match_failure); + caml_register_global(6, Not_found, cst_Not_found); + caml_register_global(5, Division_by_zero, cst_Division_by_zero); + caml_register_global(4, End_of_file, cst_End_of_file); + caml_register_global(3, Invalid_argument, cst_Invalid_argument); + caml_register_global(2, Failure, cst_Failure); + caml_register_global(1, Sys_error, cst_Sys_error); + caml_register_global(0, Out_of_memory, cst_Out_of_memory); + var + _h_ = "input", + _g_ = [0, 0, [0, 7, 0]], + _f_ = "output_substring", + _e_ = [0, 1, [0, 3, [0, 4, [0, 7, 0]]]], + _d_ = cst, + _b_ = cst_true, + _c_ = cst_false, + _a_ = "char_of_int", + _l_ = "CamlinternalLazy.Undefined", + _m_ = "result is Error _", + _o_ = cst$0, + _p_ = "\\'", + _q_ = cst_b, + _r_ = cst_t, + _s_ = cst_n, + _t_ = cst_r, + _n_ = "Char.chr", + _v_ = "List.init", + _u_ = "hd", + _y_ = "String.blit / Bytes.blit_string", + _x_ = "Bytes.blit", + _w_ = "String.sub / Bytes.sub", + _C_ = "String.contains_from / Bytes.contains_from", + _B_ = "String.index_from / Bytes.index_from", + _A_ = cst$1, + _z_ = "String.concat", + _E_ = "Array.blit", + _D_ = "Array.init", + _F_ = "Lexing.lex_refill: cannot grow buffer", + _G_ = cst_Set_bal, + _H_ = cst_Set_bal, + _I_ = cst_Set_bal, + _J_ = cst_Set_bal, + _L_ = "Stdlib.Queue.Empty", + _Q_ = "Buffer.add_substring/add_subbytes", + _P_ = "Buffer.add: cannot grow buffer", + _O_ = [0, cst_buffer_ml, 93, 2], + _N_ = [0, cst_buffer_ml, 94, 2], + _M_ = "Buffer.sub", + ___ = "%c", + _$_ = cst_s, + _aa_ = cst_i, + _ab_ = cst_li, + _ac_ = cst_ni, + _ad_ = cst_Li, + _ae_ = "%f", + _af_ = "%B", + _ag_ = "%{", + _ah_ = "%}", + _ai_ = "%(", + _aj_ = "%)", + _ak_ = cst_a, + _al_ = "%t", + _am_ = "%?", + _an_ = "%r", + _ao_ = "%_r", + _ap_ = [0, cst_camlinternalFormat_ml, 850, 23], + _aA_ = [0, cst_camlinternalFormat_ml, 814, 21], + _as_ = [0, cst_camlinternalFormat_ml, 815, 21], + _aB_ = [0, cst_camlinternalFormat_ml, 818, 21], + _at_ = [0, cst_camlinternalFormat_ml, 819, 21], + _aC_ = [0, cst_camlinternalFormat_ml, 822, 19], + _au_ = [0, cst_camlinternalFormat_ml, 823, 19], + _aD_ = [0, cst_camlinternalFormat_ml, 826, 22], + _av_ = [0, cst_camlinternalFormat_ml, 827, 22], + _aE_ = [0, cst_camlinternalFormat_ml, 831, 30], + _aw_ = [0, cst_camlinternalFormat_ml, 832, 30], + _ay_ = [0, cst_camlinternalFormat_ml, 836, 26], + _aq_ = [0, cst_camlinternalFormat_ml, 837, 26], + _az_ = [0, cst_camlinternalFormat_ml, 846, 28], + _ar_ = [0, cst_camlinternalFormat_ml, 847, 28], + _ax_ = [0, cst_camlinternalFormat_ml, 851, 23], + _bz_ = [0, cst_camlinternalFormat_ml, 1558, 4], + _bA_ = "Printf: bad conversion %[", + _bB_ = [0, cst_camlinternalFormat_ml, 1626, 39], + _bC_ = [0, cst_camlinternalFormat_ml, 1649, 31], + _bD_ = [0, cst_camlinternalFormat_ml, 1650, 31], + _bE_ = "Printf: bad conversion %_", + _bF_ = cst$2, + _bG_ = cst$3, + _bH_ = cst$2, + _bI_ = cst$3, + _bK_ = + [0, + [11, "invalid box description ", [3, 0, 0]], + "invalid box description %S"], + _bJ_ = [0, 0, 4], + _by_ = "nan", + _bw_ = "neg_infinity", + _bx_ = "infinity", + _bv_ = cst, + _bu_ = [0, 103], + _bi_ = "%+nd", + _bj_ = "% nd", + _bl_ = "%+ni", + _bm_ = "% ni", + _bn_ = "%nx", + _bo_ = "%#nx", + _bp_ = "%nX", + _bq_ = "%#nX", + _br_ = "%no", + _bs_ = "%#no", + _bh_ = "%nd", + _bk_ = cst_ni, + _bt_ = "%nu", + _a7_ = "%+ld", + _a8_ = "% ld", + _a__ = "%+li", + _a$_ = "% li", + _ba_ = "%lx", + _bb_ = "%#lx", + _bc_ = "%lX", + _bd_ = "%#lX", + _be_ = "%lo", + _bf_ = "%#lo", + _a6_ = "%ld", + _a9_ = cst_li, + _bg_ = "%lu", + _aU_ = "%+Ld", + _aV_ = "% Ld", + _aX_ = "%+Li", + _aY_ = "% Li", + _aZ_ = "%Lx", + _a0_ = "%#Lx", + _a1_ = "%LX", + _a2_ = "%#LX", + _a3_ = "%Lo", + _a4_ = "%#Lo", + _aT_ = "%Ld", + _aW_ = cst_Li, + _a5_ = "%Lu", + _aH_ = "%+d", + _aI_ = "% d", + _aK_ = "%+i", + _aL_ = "% i", + _aM_ = "%x", + _aN_ = "%#x", + _aO_ = "%X", + _aP_ = "%#X", + _aQ_ = "%o", + _aR_ = "%#o", + _aG_ = cst_d, + _aJ_ = cst_i, + _aS_ = cst_u, + _R_ = "@]", + _S_ = "@}", + _U_ = "@?", + _V_ = "@\n", + _W_ = "@.", + _X_ = "@@", + _Y_ = "@%", + _Z_ = "@", + _aF_ = "CamlinternalFormat.Type_mismatch", + _bO_ = cst$1, + _bP_ = [0, [11, ", ", [2, 0, [2, 0, 0]]], ", %s%s"], + _ca_ = + [0, + [11, cst_Fatal_error_exception, [2, 0, [12, 10, 0]]], + cst_Fatal_error_exception_s], + _cb_ = + [0, + [11, + "Fatal error in uncaught exception handler: exception ", + [2, 0, [12, 10, 0]]], + "Fatal error in uncaught exception handler: exception %s\n"], + _b$_ = "Fatal error: out of memory in uncaught exception handler", + _b__ = + [0, + [11, cst_Fatal_error_exception, [2, 0, [12, 10, 0]]], + cst_Fatal_error_exception_s], + _b7_ = [0, [2, 0, [12, 10, 0]], "%s\n"], + _b8_ = + [0, + [11, cst_Program_not_linked_with_g_, 0], + cst_Program_not_linked_with_g_], + _bZ_ = "Raised at", + _b0_ = "Re-raised at", + _b1_ = "Raised by primitive operation at", + _b2_ = "Called from", + _b3_ = " (inlined)", + _b5_ = cst$1, + _b4_ = + [0, + [2, + 0, + [12, + 32, + [2, + 0, + [11, + ' in file "', + [2, + 0, + [12, + 34, + [2, + 0, + [11, ", line ", [4, 0, 0, 0, [11, cst_characters, partial]]]]]]]]]], + '%s %s in file "%s"%s, line %d, characters %d-%d'], + _b6_ = [0, [2, 0, [11, " unknown location", 0]], "%s unknown location"], + _bU_ = "Out of memory", + _bV_ = "Stack overflow", + _bW_ = "Pattern matching failed", + _bX_ = "Assertion failed", + _bY_ = "Undefined recursive module", + _bQ_ = [0, [12, 40, [2, 0, [2, 0, [12, 41, 0]]]], "(%s%s)"], + _bR_ = cst$1, + _bS_ = cst$1, + _bT_ = [0, [12, 40, [2, 0, [12, 41, 0]]], "(%s)"], + _bN_ = [0, [4, 0, 0, 0, 0], cst_d], + _bL_ = [0, [3, 0, 0], "%S"], + _bM_ = "_", + _b9_ = + [0, + cst$1, + "(Cannot print locations:\n bytecode executable program file not found)", + "(Cannot print locations:\n bytecode executable program file appears to be corrupt)", + "(Cannot print locations:\n bytecode executable program file has wrong magic number)", + "(Cannot print locations:\n bytecode executable program file cannot be opened;\n -- too many open files. Try running with OCAMLRUNPARAM=b=2)"], + _cd_ = "Fun.Finally_raised: ", + _cc_ = "Stdlib.Fun.Finally_raised", + _cf_ = "Random.int", + _ce_ = "x", + _cg_ = + [0, + 987910699, + 495797812, + 364182224, + 414272206, + 318284740, + 990407751, + 383018966, + 270373319, + 840823159, + 24560019, + 536292337, + 512266505, + 189156120, + 730249596, + 143776328, + 51606627, + 140166561, + 366354223, + 1003410265, + 700563762, + 981890670, + 913149062, + 526082594, + 1021425055, + 784300257, + 667753350, + 630144451, + 949649812, + 48546892, + 415514493, + 258888527, + 511570777, + 89983870, + 283659902, + 308386020, + 242688715, + 482270760, + 865188196, + 1027664170, + 207196989, + 193777847, + 619708188, + 671350186, + 149669678, + 257044018, + 87658204, + 558145612, + 183450813, + 28133145, + 901332182, + 710253903, + 510646120, + 652377910, + 409934019, + 801085050], + _cl_ = "Hashtbl: unsupported hash table format", + _cj_ = cst$1, + _cE_ = [3, 0, 3], + _cF_ = cst, + _cB_ = cst$5, + _cC_ = "<\/", + _cD_ = cst$1, + _cy_ = cst$5, + _cz_ = cst$6, + _cA_ = cst$1, + _cx_ = "\n", + _ct_ = cst$1, + _cu_ = cst$1, + _cv_ = cst$1, + _cw_ = cst$1, + _cs_ = [0, cst$1], + _co_ = cst$1, + _cp_ = cst$1, + _cq_ = cst$1, + _cr_ = cst$1, + _cn_ = [0, cst$1, 0, cst$1], + _cm_ = "Stdlib.Format.String_tag", + _cG_ = "Jsoo_runtime.Error.Exn", + _cH_ = "jsError", + _cK_ = [0, "src/fut.ml", 34, 25], + _cP_ = "info", + _cO_ = cst_error, + _cN_ = "log", + _cL_ = "search", + _cQ_ = "isSecureContext", + _cR_ = "cache", + _cS_ = "credentials", + _cT_ = "headers", + _cU_ = "integrity", + _cV_ = "keepalive", + _cW_ = "method", + _cX_ = "mode", + _cY_ = "redirect", + _cZ_ = "referrer", + _c0_ = "referrerPolicy", + _c$_ = "open", + _c8_ = "autoIncrement", + _c9_ = "keyPath", + _c__ = "new object store with options:", + _c5_ = "readonly", + _c6_ = "readwrite", + _c7_ = "readwriteflush", + _c1_ = "next", + _c2_ = "nextUnique", + _c3_ = "prev", + _c4_ = "prevUnique", + _dc_ = "CCResult.Get_error", + _dg_ = [0, cst_src_core_CCString_pp_ml, 116, 10], + _df_ = [0, cst_src_core_CCString_pp_ml, 89, 10], + _de_ = cst$1, + _dq_ = "expected low surrogate escape sequence (u)", + _dr_ = "invalid low surrogate for code point beyond U+FFFF'", + _ds_ = "expected low surrogate escape char (\\)", + _dt_ = "invalid escape in string", + _dp_ = "end of string in escape sequence", + _dk_ = "' ", + _dl_ = " '", + _do_ = cst$1, + _dm_ = cst$4, + _dn_ = " at offset ", + _di_ = cst$7, + _dj_ = "invalid hex char in unicode escape: '", + _dh_ = "Jsonxt__Lexxer_utils.Lex_error", + _du_ = [6, 1], + _dv_ = [6, 0], + _dw_ = cst$7, + _dx_ = cst_unexpected_character, + _dy_ = cst$7, + _dz_ = cst_unexpected_character, + _dA_ = cst$7, + _dB_ = cst_unexpected_character, + _dC_ = cst$7, + _dD_ = cst_unexpected_character, + _dE_ = [0, cst$1], + _dF_ = cst$7, + _dG_ = cst_unexpected_character, + _dH_ = "unexpected EOF in comment", + _dI_ = "Jsonxt__Error_info.Json_error_info", + _dJ_ = cst_0, + _dK_ = cst_0, + _dL_ = "unexpected '{'", + _dM_ = "unexpected '}'", + _dN_ = "unexpected null value", + _dO_ = "unexpected negative infinity", + _dP_ = "unexpected Not-a-Number", + _dQ_ = "unexpected infinity", + _dR_ = "unexpected end-of-input", + _dS_ = "unexpected ','", + _dT_ = "unexpected ':'", + _dU_ = "unexpected '['", + _dV_ = "unexpected ']'", + _dW_ = "unexpected '<'", + _dX_ = "unexpected '>'", + _dY_ = "unexpected '('", + _dZ_ = "unexpected ')'", + _d0_ = cst$7, + _d1_ = "unexpected string '", + _d2_ = cst$7, + _d3_ = "unexpected large integer '", + _d4_ = cst$7, + _d5_ = "unexpected integer '", + _d6_ = cst$7, + _d7_ = "unexpected float '", + _d8_ = cst$7, + _d9_ = "compliance error '", + _d__ = cst$7, + _d$_ = cst_true, + _eb_ = cst_false, + _ea_ = "unexpected boolean '", + _ef_ = [1, "Unexpected end-of-input"], + _ed_ = [0, 148000204, "tuple must have at least 2 elements"], + _ee_ = [0, 148000204, "variant must have at least a string"], + _ec_ = "Jsonxt__Parser.Make(Compliance).Parse_error", + _ei_ = cst_b, + _ej_ = cst_t, + _ek_ = cst_n, + _el_ = cst_f, + _em_ = cst_r, + _en_ = cst$8, + _eg_ = cst$0, + _eh_ = cst_u00, + _ep_ = cst_null, + _eq_ = cst$9, + _er_ = + [0, + [12, + 123, + [17, + [0, cst_1_0, 1, 0], + [15, [17, [0, cst_1_2, 1, -2], [12, 125, 0]]]]], + "{@;<1 0>%a@;<1 -2>}"], + _es_ = "{}", + _et_ = cst$9, + _eu_ = + [0, + [12, + 91, + [17, + [0, cst_1_0, 1, 0], + [18, + [1, [0, [11, cst_hov, 0], cst_hov]], + [15, [17, 0, [17, [0, cst_1_2, 1, -2], [12, 93, 0]]]]]]], + "[@;<1 0>@[%a@]@;<1 -2>]"], + _ev_ = "[]", + _ew_ = "()", + _ex_ = cst$9, + _ey_ = + [0, + [12, + 40, + [17, [0, "@,", 0, 0], [15, [17, [0, "@;<0 -2>", 0, -2], [12, 41, 0]]]]], + "(@,%a@;<0 -2>)"], + _ez_ = + [0, + [12, + 60, + [18, + [1, [0, [11, cst_hv2, 0], cst_hv2]], + [2, 0, [11, cst$4, [15, [17, 0, [12, 62, 0]]]]]]], + "<@[%s: %a@]>"], + _eA_ = [0, [12, 60, [2, 0, [12, 62, 0]]], "<%s>"], + _eB_ = + [0, + [18, + [1, [0, [11, cst_hv2, 0], cst_hv2]], + [2, 0, [11, cst$4, [15, [17, 0, 0]]]]], + "@[%s: %a@]"], + _eE_ = [0, [15, [17, 2, 0]], "%a@?"], + _eD_ = [0, [15, 0], cst_a], + _eC_ = + [0, + [18, [1, [0, [11, cst_hv2, 0], cst_hv2]], [15, [17, 0, 0]]], + "@[%a@]"], + _eo_ = [0, [2, 0, [17, [0, "@ ", 1, 0], 0]], "%s@ "], + _eH_ = "Expected `String", + _eG_ = "Expected `Assoc", + _eJ_ = "{", + _eK_ = "}", + _eL_ = "Null", + _eM_ = cst_Infinity, + _eN_ = "NAN", + _eO_ = cst_Infinity$0, + _eP_ = "end-of-file", + _eQ_ = cst$9, + _eR_ = cst$10, + _eS_ = "[", + _eT_ = "]", + _eU_ = cst$6, + _eV_ = cst$5, + _eW_ = "(", + _eX_ = ")", + _eY_ = cst$7, + _eZ_ = "input error '", + _e0_ = cst_true, + _e1_ = cst_false, + _e4_ = cst_junk_after_end_of_JSON_val, + _e5_ = [0, 0], + _e6_ = [1, cst_empty_input], + _e2_ = cst_junk_after_end_of_JSON_val, + _e3_ = [1, cst_empty_input], + _fh_ = cst$1, + _fi_ = cst$1, + _fe_ = cst_null, + _ff_ = cst$9, + _fg_ = cst$9, + _fd_ = cst$10, + _e9_ = cst_b, + _e__ = cst_t, + _e$_ = cst_n, + _fa_ = cst_f, + _fb_ = cst_r, + _fc_ = cst$8, + _e7_ = cst$0, + _e8_ = cst_u00, + _fr_ = cst_null, + _ft_ = cst$9, + _fs_ = cst$1, + _fv_ = cst$9, + _fu_ = cst$1, + _fl_ = cst_b, + _fm_ = cst_t, + _fn_ = cst_n, + _fo_ = cst_f, + _fp_ = cst_r, + _fq_ = cst$8, + _fj_ = cst$0, + _fk_ = cst_u00, + _fZ_ = [0, 928231259, cst_Infinity$0], + _f0_ = [0, 928231259, cst_Infinity], + _fY_ = [0, 928231259, cst_NaN], + _fX_ = cst_NaN, + _fV_ = cst_Infinity, + _fW_ = cst_Infinity$0, + _fU_ = [0, 0], + _fS_ = cst$11, + _fT_ = cst$11, + _fR_ = "floatlit not supported in yojson safe mode", + _fQ_ = cst_NaN, + _fO_ = cst_Infinity, + _fP_ = cst_Infinity$0, + _fN_ = [0, 0], + _fM_ = cst_variants_not_supported_in_, + _fL_ = cst_variants_not_supported_in_, + _fK_ = cst_tuples_not_supported_in_yo, + _fJ_ = cst_tuples_not_supported_in_yo, + _fI_ = "floatlit not supported in yojson basic mode", + _fH_ = cst_variants_not_supported_in_, + _fG_ = cst_tuples_not_supported_in_yo, + _fF_ = cst_NaN, + _fD_ = cst_Infinity, + _fE_ = cst_Infinity$0, + _fC_ = [0, 0], + _fB_ = [5, "Integer out of bounds"], + _fx_ = ", line", + _fy_ = "File ", + _fA_ = "Line", + _fz_ = + [0, + [2, + 0, + [12, + 32, + [4, + 0, + 0, + 0, + [11, + " chars ", + [4, 0, 0, 0, [12, 45, [4, 0, 0, 0, [11, cst$4, 0]]]]]]]], + "%s %d chars %d-%d: "], + _fw_ = "Jsonxt__Yojson.Json_error", + _f1_ = [1, [0, 3854881, "Failed to unmarshal data"]], + _f6_ = "list_of_yojson: list needed", + _f5_ = "int_of_yojson: integer needed", + _f4_ = "string_of_yojson: string needed", + _f3_ = "bool_of_yojson: true/false needed", + _f2_ = "Ppx_yojson_conv_lib__Yojson_conv.Of_yojson_error", + _gd_ = cst$12, + _gf_ = "_of_yojson: list instead of atom for record expected", + _ge_ = + [0, + [2, + 0, + [11, + "_of_yojson: the following record elements were undefined: ", + [2, 0, 0]]], + "%s_of_yojson: the following record elements were undefined: %s"], + _gc_ = "extra fields", + _gb_ = "duplicate fields", + _f$_ = cst$12, + _ga_ = + [0, + [2, 0, [11, "_of_yojson: ", [2, 0, [11, cst$4, [2, 0, 0]]]]], + "%s_of_yojson: %s: %s"], + _f__ = "_of_yojson: unexpected variant constructor", + _f9_ = "_of_yojson: expected a variant type, saw an empty list", + _f8_ = "_of_yojson: expected a variant type, saw a nested list", + _f7_ = "_of_yojson: this constructor does not take arguments", + _i3_ = "An error occured while decoding response: ", + _iZ_ = [0, [11, ", Token=", [3, 0, 0]], ", Token=%S"], + _i2_ = cst$1, + _i0_ = "abcdef", + _i1_ = + [0, + [11, + 'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="', + [2, 0, [11, '", Version="0.1"', [2, 0, 0]]]], + 'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="%s", Version="0.1"%s'], + _iW_ = cst_ItemId, + _iX_ = cst_Locations, + _iY_ = cst_Name, + _iT_ = "item_id", + _iU_ = "locations", + _iV_ = cst_name, + _iS_ = [0, [11, "/Users/", [2, 0, [11, "/Views", 0]]], "/Users/%s/Views"], + _iP_ = cst_StartIndex, + _iQ_ = cst_TotalRecordCount, + _iR_ = cst_Items, + _iM_ = cst_start_index, + _iN_ = cst_total_record_count, + _iO_ = cst_items, + _iL_ = cst_includeExternalContent, + _iK_ = "include_external_content", + _iJ_ = "/Items", + _iG_ = cst_StartIndex, + _iH_ = cst_TotalRecordCount, + _iI_ = cst_Items, + _iD_ = cst_start_index, + _iE_ = cst_total_record_count, + _iF_ = cst_items, + _ir_ = cst_enableImages, + _is_ = cst_enableUserData, + _it_ = cst_recursive, + _iu_ = cst_sortBy, + _iv_ = cst_sortOrder, + _iw_ = cst_limit, + _ix_ = cst_startIndex, + _iy_ = cst_includeItemTypes, + _iz_ = cst_fields, + _iA_ = cst_userId, + _iB_ = cst_parentId, + _iC_ = cst_ids, + _ik_ = "enable_images", + _il_ = "enable_user_data", + _im_ = cst_recursive, + _in_ = "sort_by", + _io_ = "include_item_types", + _ip_ = cst_fields, + _iq_ = "user_id", + _ij_ = cst_CollectionType, + _ia_ = cst_Type, + _ib_ = cst_ImageBlurHashes, + _ic_ = cst_ServerId, + _id_ = cst_ParentId, + _ie_ = cst_AlbumId, + _if_ = cst_Path, + _ig_ = cst_Id, + _ih_ = cst_SortName, + _ii_ = cst_Name, + _h7_ = "type_", + _h8_ = "image_blur_hashes", + _h9_ = "server_id", + _h__ = cst_id, + _h$_ = cst_name, + _h6_ = [0, "lib/data_source/jellyfin_api.ml", 193, 64], + _g9_ = [0, 848054398, [0, [0, -976970511, cst_AirTime], 0]], + _g__ = [0, 848054398, [0, [0, -976970511, cst_BasicSyncInfo], 0]], + _g$_ = [0, 848054398, [0, [0, -976970511, cst_CanDelete], 0]], + _ha_ = [0, 848054398, [0, [0, -976970511, cst_CanDownload], 0]], + _hb_ = [0, 848054398, [0, [0, -976970511, cst_ChannelImage], 0]], + _hc_ = [0, 848054398, [0, [0, -976970511, cst_ChannelInfo], 0]], + _hd_ = [0, 848054398, [0, [0, -976970511, cst_Chapters], 0]], + _he_ = [0, 848054398, [0, [0, -976970511, cst_ChildCount], 0]], + _hf_ = [0, 848054398, [0, [0, -976970511, cst_CumulativeRunTimeTicks], 0]], + _hg_ = [0, 848054398, [0, [0, -976970511, cst_CustomRating], 0]], + _hh_ = [0, 848054398, [0, [0, -976970511, cst_DateCreated], 0]], + _hi_ = [0, 848054398, [0, [0, -976970511, cst_DateLastMediaAdded], 0]], + _hj_ = [0, 848054398, [0, [0, -976970511, cst_DateLastRefreshed], 0]], + _hk_ = [0, 848054398, [0, [0, -976970511, cst_DateLastSaved], 0]], + _hl_ = [0, 848054398, [0, [0, -976970511, cst_DisplayPreferencesId], 0]], + _hm_ = + [0, 848054398, [0, [0, -976970511, cst_EnableMediaSourceDisplay], 0]], + _hn_ = [0, 848054398, [0, [0, -976970511, cst_Etag], 0]], + _ho_ = [0, 848054398, [0, [0, -976970511, cst_ExternalEtag], 0]], + _hp_ = [0, 848054398, [0, [0, -976970511, cst_ExternalSeriesId], 0]], + _hq_ = [0, 848054398, [0, [0, -976970511, cst_ExternalUrls], 0]], + _hr_ = [0, 848054398, [0, [0, -976970511, cst_ExtraIds], 0]], + _hs_ = [0, 848054398, [0, [0, -976970511, cst_Genres], 0]], + _ht_ = [0, 848054398, [0, [0, -976970511, cst_Height], 0]], + _hu_ = [0, 848054398, [0, [0, -976970511, cst_HomePageUrl], 0]], + _hv_ = + [0, 848054398, [0, [0, -976970511, cst_InheritedParentalRatingVal], 0]], + _hw_ = [0, 848054398, [0, [0, -976970511, cst_IsHD], 0]], + _hx_ = [0, 848054398, [0, [0, -976970511, cst_ItemCounts], 0]], + _hy_ = [0, 848054398, [0, [0, -976970511, cst_LocalTrailerCount], 0]], + _hz_ = [0, 848054398, [0, [0, -976970511, cst_MediaSourceCount], 0]], + _hA_ = [0, 848054398, [0, [0, -976970511, cst_MediaSources], 0]], + _hB_ = [0, 848054398, [0, [0, -976970511, cst_MediaStreams], 0]], + _hC_ = [0, 848054398, [0, [0, -976970511, cst_OriginalTitle], 0]], + _hD_ = [0, 848054398, [0, [0, -976970511, cst_Overview], 0]], + _hE_ = [0, 848054398, [0, [0, -976970511, cst_ParentId], 0]], + _hF_ = [0, 848054398, [0, [0, -976970511, cst_Path], 0]], + _hG_ = [0, 848054398, [0, [0, -976970511, cst_People], 0]], + _hH_ = [0, 848054398, [0, [0, -976970511, cst_PlayAccess], 0]], + _hI_ = [0, 848054398, [0, [0, -976970511, cst_PresentationUniqueKey], 0]], + _hJ_ = + [0, 848054398, [0, [0, -976970511, cst_PrimaryImageAspectRatio], 0]], + _hK_ = [0, 848054398, [0, [0, -976970511, cst_ProductionLocations], 0]], + _hL_ = [0, 848054398, [0, [0, -976970511, cst_ProviderIds], 0]], + _hM_ = [0, 848054398, [0, [0, -976970511, cst_RecursiveItemCount], 0]], + _hN_ = [0, 848054398, [0, [0, -976970511, cst_RefreshState], 0]], + _hO_ = [0, 848054398, [0, [0, -976970511, cst_RemoteTrailers], 0]], + _hP_ = [0, 848054398, [0, [0, -976970511, cst_ScreenshotImageTags], 0]], + _hQ_ = [0, 848054398, [0, [0, -976970511, cst_SeasonUserData], 0]], + _hR_ = + [0, 848054398, [0, [0, -976970511, cst_SeriesPresentationUniqueKe], 0]], + _hS_ = [0, 848054398, [0, [0, -976970511, cst_SeriesPrimaryImage], 0]], + _hT_ = [0, 848054398, [0, [0, -976970511, cst_SeriesStudio], 0]], + _hU_ = [0, 848054398, [0, [0, -976970511, cst_ServiceName], 0]], + _hV_ = [0, 848054398, [0, [0, -976970511, cst_Settings], 0]], + _hW_ = [0, 848054398, [0, [0, -976970511, cst_SortName], 0]], + _hX_ = [0, 848054398, [0, [0, -976970511, cst_SpecialEpisodeNumbers], 0]], + _hY_ = [0, 848054398, [0, [0, -976970511, cst_SpecialFeatureCount], 0]], + _hZ_ = [0, 848054398, [0, [0, -976970511, cst_Studios], 0]], + _h0_ = [0, 848054398, [0, [0, -976970511, cst_SyncInfo], 0]], + _h1_ = [0, 848054398, [0, [0, -976970511, cst_Taglines], 0]], + _h2_ = [0, 848054398, [0, [0, -976970511, cst_Tags], 0]], + _h3_ = [0, 848054398, [0, [0, -976970511, cst_ThemeSongIds], 0]], + _h4_ = [0, 848054398, [0, [0, -976970511, cst_ThemeVideoIds], 0]], + _h5_ = [0, 848054398, [0, [0, -976970511, cst_Width], 0]], + _gy_ = [0, 848054398, [0, [0, -976970511, cst_AggregateFolder], 0]], + _gz_ = [0, 848054398, [0, [0, -976970511, cst_Audio], 0]], + _gA_ = [0, 848054398, [0, [0, -976970511, cst_AudioBook], 0]], + _gB_ = [0, 848054398, [0, [0, -976970511, cst_BasePluginFolder], 0]], + _gC_ = [0, 848054398, [0, [0, -976970511, cst_Book], 0]], + _gD_ = [0, 848054398, [0, [0, -976970511, cst_BoxSet], 0]], + _gE_ = [0, 848054398, [0, [0, -976970511, cst_Channel], 0]], + _gF_ = [0, 848054398, [0, [0, -976970511, cst_ChannelFolderItem], 0]], + _gG_ = [0, 848054398, [0, [0, -976970511, cst_CollectionFolder], 0]], + _gH_ = [0, 848054398, [0, [0, -976970511, cst_Episode], 0]], + _gI_ = [0, 848054398, [0, [0, -976970511, cst_Folder], 0]], + _gJ_ = [0, 848054398, [0, [0, -976970511, cst_Genre], 0]], + _gK_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvChannel], 0]], + _gL_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvProgram], 0]], + _gM_ = [0, 848054398, [0, [0, -976970511, cst_ManualPlaylistsFolder], 0]], + _gN_ = [0, 848054398, [0, [0, -976970511, cst_Movie], 0]], + _gO_ = [0, 848054398, [0, [0, -976970511, cst_MusicAlbum], 0]], + _gP_ = [0, 848054398, [0, [0, -976970511, cst_MusicArtist], 0]], + _gQ_ = [0, 848054398, [0, [0, -976970511, cst_MusicGenre], 0]], + _gR_ = [0, 848054398, [0, [0, -976970511, cst_MusicVideo], 0]], + _gS_ = [0, 848054398, [0, [0, -976970511, cst_Person], 0]], + _gT_ = [0, 848054398, [0, [0, -976970511, cst_Photo], 0]], + _gU_ = [0, 848054398, [0, [0, -976970511, cst_PhotoAlbum], 0]], + _gV_ = [0, 848054398, [0, [0, -976970511, cst_Playlist], 0]], + _gW_ = [0, 848054398, [0, [0, -976970511, cst_PlaylistsFolder], 0]], + _gX_ = [0, 848054398, [0, [0, -976970511, cst_Program], 0]], + _gY_ = [0, 848054398, [0, [0, -976970511, cst_Recording], 0]], + _gZ_ = [0, 848054398, [0, [0, -976970511, cst_Season], 0]], + _g0_ = [0, 848054398, [0, [0, -976970511, cst_Series], 0]], + _g1_ = [0, 848054398, [0, [0, -976970511, cst_Studio], 0]], + _g2_ = [0, 848054398, [0, [0, -976970511, cst_Trailer], 0]], + _g3_ = [0, 848054398, [0, [0, -976970511, cst_TvChannel], 0]], + _g4_ = [0, 848054398, [0, [0, -976970511, cst_TvProgram], 0]], + _g5_ = [0, 848054398, [0, [0, -976970511, cst_UserRootFolder], 0]], + _g6_ = [0, 848054398, [0, [0, -976970511, cst_UserView], 0]], + _g7_ = [0, 848054398, [0, [0, -976970511, cst_Video], 0]], + _g8_ = [0, 848054398, [0, [0, -976970511, cst_Year], 0]], + _gx_ = cst_Primary, + _gi_ = [0, 848054398, [0, [0, -976970511, cst_Album], 0]], + _gj_ = [0, 848054398, [0, [0, -976970511, cst_AlbumArtist], 0]], + _gk_ = [0, 848054398, [0, [0, -976970511, cst_Artist], 0]], + _gl_ = [0, 848054398, [0, [0, -976970511, cst_Budget], 0]], + _gm_ = [0, 848054398, [0, [0, -976970511, cst_CommunityRating], 0]], + _gn_ = [0, 848054398, [0, [0, -976970511, cst_CriticRating], 0]], + _go_ = [0, 848054398, [0, [0, -976970511, cst_DateCreated], 0]], + _gp_ = [0, 848054398, [0, [0, -976970511, cst_DatePlayed], 0]], + _gq_ = [0, 848054398, [0, [0, -976970511, cst_PlayCount], 0]], + _gr_ = [0, 848054398, [0, [0, -976970511, cst_PremiereDate], 0]], + _gs_ = [0, 848054398, [0, [0, -976970511, cst_ProductionYear], 0]], + _gt_ = [0, 848054398, [0, [0, -976970511, cst_SortName], 0]], + _gu_ = [0, 848054398, [0, [0, -976970511, cst_Random], 0]], + _gv_ = [0, 848054398, [0, [0, -976970511, cst_Revenue], 0]], + _gw_ = [0, 848054398, [0, [0, -976970511, cst_Runtime], 0]], + _gg_ = [0, 848054398, [0, [0, -976970511, cst_Descending], 0]], + _gh_ = [0, 848054398, [0, [0, -976970511, cst_Ascending], 0]], + _jq_ = [0, cst_lib_db_stores_ml, 119, 13], + _jp_ = [0, cst_lib_db_stores_ml, 110, 19], + _jm_ = [0, cst_lib_db_stores_ml, 102, 13], + _jl_ = [0, cst_lib_db_stores_ml, 96, 19], + _jh_ = [0, cst_lib_db_stores_ml, 66, 13], + _jf_ = cst_item, + _jg_ = cst_sorts, + _jd_ = cst_item, + _je_ = cst_sorts, + _ja_ = cst_sort_name, + _jb_ = cst_views, + _jc_ = cst_date_added, + _i9_ = cst_sort_name, + _i__ = cst_views, + _i$_ = cst_date_added, + _i7_ = cst_item, + _i8_ = cst_id, + _i5_ = cst_item, + _i6_ = cst_id, + _ji_ = [0, cst_sorts_views], + _jj_ = [0, "item.Name"], + _jk_ = [0, cst_item_Id], + _jn_ = [0, cst_sorts_views], + _jo_ = [0, "item.Type"], + _jr_ = [0, "sorts.sort_name"], + _js_ = [0, "item.CollectionType"], + _jY_ = [0, 1, 0], + _jS_ = [0, 6, 0], + _jT_ = [0, 0], + _jU_ = [0, 33, [0, 34, 0]], + _jW_ = cst$1, + _jV_ = [0, 1], + _jX_ = [0, "lib/db/sync.ml", 313, 6], + _jP_ = [0, cst$10, 0], + _jQ_ = cst_to, + _jR_ = "Fetching items", + _jO_ = [0, 1], + _jN_ = [0, 34, 0], + _jM_ = [0, 33, 0], + _jK_ = [0, 1], + _jL_ = [0, 0], + _jI_ = [0, 0], + _jJ_ = [0, 2], + _jF_ = [0, 6, 0], + _jG_ = [0, 0], + _jH_ = [0, 0], + _jZ_ = cst_to, + _j0_ = "Upgrading indexed_db schema from version", + _j1_ = [0, 0], + _j2_ = [0, 0], + _j3_ = [0, 0], + _j4_ = "Stores created:", + _kk_ = "An error occured while loading item", + _kg_ = cst_music, + _kh_ = cst_music$0, + _ki_ = [0, 0], + _kj_ = [0, 1], + _kf_ = "Item should exists.", + _kb_ = cst_music, + _kc_ = cst_music$0, + _kd_ = [0, 0], + _ke_ = [0, 1], + _j8_ = [0, [2, 0, 0], cst_s], + _j9_ = cst_Audio, + _j__ = "Audio\0", + _j$_ = [0, 0], + _ka_ = [0, 1], + _j7_ = [0, 0], + _j5_ = "tracks", + _j6_ = [0, 1]; + function erase_rel(param){ + if(typeof param === "number") return 0; + switch(param[0]){ + case 0: + var rest = param[1]; return [0, erase_rel(rest)]; + case 1: + var rest$0 = param[1]; return [1, erase_rel(rest$0)]; + case 2: + var rest$1 = param[1]; return [2, erase_rel(rest$1)]; + case 3: + var rest$2 = param[1]; return [3, erase_rel(rest$2)]; + case 4: + var rest$3 = param[1]; return [4, erase_rel(rest$3)]; + case 5: + var rest$4 = param[1]; return [5, erase_rel(rest$4)]; + case 6: + var rest$5 = param[1]; return [6, erase_rel(rest$5)]; + case 7: + var rest$6 = param[1]; return [7, erase_rel(rest$6)]; + case 8: + var rest$7 = param[2], ty = param[1]; + return [8, ty, erase_rel(rest$7)]; + case 9: + var rest$8 = param[3], ty1 = param[1]; + return [9, ty1, ty1, erase_rel(rest$8)]; + case 10: + var rest$9 = param[1]; return [10, erase_rel(rest$9)]; + case 11: + var rest$10 = param[1]; return [11, erase_rel(rest$10)]; + case 12: + var rest$11 = param[1]; return [12, erase_rel(rest$11)]; + case 13: + var rest$12 = param[1]; return [13, erase_rel(rest$12)]; + default: var rest$13 = param[1]; return [14, erase_rel(rest$13)]; + } + } + function concat_fmtty(fmtty1, fmtty2){ + if(typeof fmtty1 === "number") return fmtty2; + switch(fmtty1[0]){ + case 0: + var rest = fmtty1[1]; return [0, concat_fmtty(rest, fmtty2)]; + case 1: + var rest$0 = fmtty1[1]; return [1, concat_fmtty(rest$0, fmtty2)]; + case 2: + var rest$1 = fmtty1[1]; return [2, concat_fmtty(rest$1, fmtty2)]; + case 3: + var rest$2 = fmtty1[1]; return [3, concat_fmtty(rest$2, fmtty2)]; + case 4: + var rest$3 = fmtty1[1]; return [4, concat_fmtty(rest$3, fmtty2)]; + case 5: + var rest$4 = fmtty1[1]; return [5, concat_fmtty(rest$4, fmtty2)]; + case 6: + var rest$5 = fmtty1[1]; return [6, concat_fmtty(rest$5, fmtty2)]; + case 7: + var rest$6 = fmtty1[1]; return [7, concat_fmtty(rest$6, fmtty2)]; + case 8: + var rest$7 = fmtty1[2], ty = fmtty1[1]; + return [8, ty, concat_fmtty(rest$7, fmtty2)]; + case 9: + var rest$8 = fmtty1[3], ty2 = fmtty1[2], ty1 = fmtty1[1]; + return [9, ty1, ty2, concat_fmtty(rest$8, fmtty2)]; + case 10: + var rest$9 = fmtty1[1]; return [10, concat_fmtty(rest$9, fmtty2)]; + case 11: + var rest$10 = fmtty1[1]; return [11, concat_fmtty(rest$10, fmtty2)]; + case 12: + var rest$11 = fmtty1[1]; return [12, concat_fmtty(rest$11, fmtty2)]; + case 13: + var rest$12 = fmtty1[1]; return [13, concat_fmtty(rest$12, fmtty2)]; + default: + var rest$13 = fmtty1[1]; return [14, concat_fmtty(rest$13, fmtty2)]; + } + } + function concat_fmt(fmt1, fmt2){ + if(typeof fmt1 === "number") return fmt2; + switch(fmt1[0]){ + case 0: + var rest = fmt1[1]; return [0, concat_fmt(rest, fmt2)]; + case 1: + var rest$0 = fmt1[1]; return [1, concat_fmt(rest$0, fmt2)]; + case 2: + var rest$1 = fmt1[2], pad = fmt1[1]; + return [2, pad, concat_fmt(rest$1, fmt2)]; + case 3: + var rest$2 = fmt1[2], pad$0 = fmt1[1]; + return [3, pad$0, concat_fmt(rest$2, fmt2)]; + case 4: + var rest$3 = fmt1[4], prec = fmt1[3], pad$1 = fmt1[2], iconv = fmt1[1]; + return [4, iconv, pad$1, prec, concat_fmt(rest$3, fmt2)]; + case 5: + var + rest$4 = fmt1[4], + prec$0 = fmt1[3], + pad$2 = fmt1[2], + iconv$0 = fmt1[1]; + return [5, iconv$0, pad$2, prec$0, concat_fmt(rest$4, fmt2)]; + case 6: + var + rest$5 = fmt1[4], + prec$1 = fmt1[3], + pad$3 = fmt1[2], + iconv$1 = fmt1[1]; + return [6, iconv$1, pad$3, prec$1, concat_fmt(rest$5, fmt2)]; + case 7: + var + rest$6 = fmt1[4], + prec$2 = fmt1[3], + pad$4 = fmt1[2], + iconv$2 = fmt1[1]; + return [7, iconv$2, pad$4, prec$2, concat_fmt(rest$6, fmt2)]; + case 8: + var + rest$7 = fmt1[4], + prec$3 = fmt1[3], + pad$5 = fmt1[2], + fconv = fmt1[1]; + return [8, fconv, pad$5, prec$3, concat_fmt(rest$7, fmt2)]; + case 9: + var rest$8 = fmt1[2], pad$6 = fmt1[1]; + return [9, pad$6, concat_fmt(rest$8, fmt2)]; + case 10: + var rest$9 = fmt1[1]; return [10, concat_fmt(rest$9, fmt2)]; + case 11: + var rest$10 = fmt1[2], str = fmt1[1]; + return [11, str, concat_fmt(rest$10, fmt2)]; + case 12: + var rest$11 = fmt1[2], chr = fmt1[1]; + return [12, chr, concat_fmt(rest$11, fmt2)]; + case 13: + var rest$12 = fmt1[3], fmtty = fmt1[2], pad$7 = fmt1[1]; + return [13, pad$7, fmtty, concat_fmt(rest$12, fmt2)]; + case 14: + var rest$13 = fmt1[3], fmtty$0 = fmt1[2], pad$8 = fmt1[1]; + return [14, pad$8, fmtty$0, concat_fmt(rest$13, fmt2)]; + case 15: + var rest$14 = fmt1[1]; return [15, concat_fmt(rest$14, fmt2)]; + case 16: + var rest$15 = fmt1[1]; return [16, concat_fmt(rest$15, fmt2)]; + case 17: + var rest$16 = fmt1[2], fmting_lit = fmt1[1]; + return [17, fmting_lit, concat_fmt(rest$16, fmt2)]; + case 18: + var rest$17 = fmt1[2], fmting_gen = fmt1[1]; + return [18, fmting_gen, concat_fmt(rest$17, fmt2)]; + case 19: + var rest$18 = fmt1[1]; return [19, concat_fmt(rest$18, fmt2)]; + case 20: + var rest$19 = fmt1[3], char_set = fmt1[2], width_opt = fmt1[1]; + return [20, width_opt, char_set, concat_fmt(rest$19, fmt2)]; + case 21: + var rest$20 = fmt1[2], counter = fmt1[1]; + return [21, counter, concat_fmt(rest$20, fmt2)]; + case 22: + var rest$21 = fmt1[1]; return [22, concat_fmt(rest$21, fmt2)]; + case 23: + var rest$22 = fmt1[2], ign = fmt1[1]; + return [23, ign, concat_fmt(rest$22, fmt2)]; + default: + var rest$23 = fmt1[3], f = fmt1[2], arity = fmt1[1]; + return [24, arity, f, concat_fmt(rest$23, fmt2)]; + } + } + function make(v){return [0, v];} + function get(r){return r[1];} + function compare_and_set(r, seen, v){ + var cur = r[1]; + return cur === seen ? (r[1] = v, 1) : 0; + } + function failwith(s){ + throw caml_maybe_attach_backtrace([0, Failure, s], 1); + } + function invalid_arg(s){ + throw caml_maybe_attach_backtrace([0, Invalid_argument, s], 1); + } + function min(x, y){return caml_lessequal(x, y) ? x : y;} + function abs(x){return 0 <= x ? x : - x | 0;} + var max_int = 2147483647; + function symbol(s1, s2){ + var + l1 = caml_ml_string_length(s1), + l2 = caml_ml_string_length(s2), + s = caml_create_bytes(l1 + l2 | 0); + caml_blit_string(s1, 0, s, 0, l1); + caml_blit_string(s2, 0, s, l1, l2); + return caml_string_of_bytes(s); + } + function char_of_int(n){ + if(0 <= n && 255 >= n) return n; + return invalid_arg(_a_); + } + function string_of_bool(b){return b ? _b_ : _c_;} + function string_of_int(n){return "" + n;} + function valid_float_lexem(s){ + var l = caml_ml_string_length(s); + function loop(i){ + var i$0 = i; + for(;;){ + if(l <= i$0) return symbol(s, _d_); + var match = caml_string_get(s, i$0); + a: + { + if(48 <= match){if(58 > match) break a;} else if(45 === match) break a; + return s; + } + var i$1 = i$0 + 1 | 0, i$0 = i$1; + } + } + return loop(0); + } + function string_of_float(f){ + return valid_float_lexem(caml_format_float("%.12g", f)); + } + caml_ml_open_descriptor_in(0); + var + stdout = caml_ml_open_descriptor_out(1), + stderr = caml_ml_open_descriptor_out(2); + function open_out_gen(mode, perm, name){ + var c = caml_ml_open_descriptor_out(caml_sys_open(name, mode, perm)); + caml_ml_set_channel_name(c, name); + return c; + } + function open_out(name){return open_out_gen(_e_, 438, name);} + function flush_all(param){ + function iter(param){ + var param$0 = param; + for(;;){ + if(! param$0) return 0; + var l = param$0[2], a = param$0[1]; + try{caml_ml_flush(a);} + catch(_tu_){ + var _tt_ = caml_wrap_exception(_tu_); + if(_tt_[1] !== Sys_error) throw caml_maybe_attach_backtrace(_tt_, 0); + } + var param$0 = l; + } + } + return iter(caml_ml_out_channels_list(0)); + } + function output_string(oc, s){ + return caml_ml_output(oc, s, 0, caml_ml_string_length(s)); + } + function output_substring(oc, s, ofs, len){ + if(0 <= ofs && 0 <= len && (caml_ml_string_length(s) - len | 0) >= ofs) + return caml_ml_output(oc, s, ofs, len); + return invalid_arg(_f_); + } + function close_out(oc){ + caml_ml_flush(oc); + caml_ml_close_channel(oc); + return; + } + function open_in_gen(mode, perm, name){ + var c = caml_ml_open_descriptor_in(caml_sys_open(name, mode, perm)); + caml_ml_set_channel_name(c, name); + return c; + } + function open_in(name){return open_in_gen(_g_, 0, name);} + function input(ic, s, ofs, len){ + if(0 <= ofs && 0 <= len && (caml_ml_bytes_length(s) - len | 0) >= ofs) + return caml_ml_input(ic, s, ofs, len); + return invalid_arg(_h_); + } + function prerr_endline(s){ + output_string(stderr, s); + caml_ml_output_char(stderr, 10); + return caml_ml_flush(stderr); + } + var exit_function = make(flush_all); + function at_exit(f){ + for(;;){ + var f_yet_to_run = make(1), old_exit = get(exit_function); + let f_yet_to_run$0 = f_yet_to_run, old_exit$0 = old_exit; + var + new_exit = + function(param){ + if(compare_and_set(f_yet_to_run$0, 1, 0)) caml_call1(f, 0); + return caml_call1(old_exit$0, 0); + }, + success = compare_and_set(exit_function, old_exit, new_exit), + _ts_ = 1 - success; + if(! _ts_) return _ts_; + } + } + function do_at_exit(param){return caml_call1(get(exit_function), 0);} + caml_register_named_value("Pervasives.do_at_exit", do_at_exit); + function _i_(_tr_){return caml_ml_close_channel(_tr_);} + function _j_(_tq_, _tp_){return caml_ml_output_char(_tq_, _tp_);} + function _k_(_to_){return caml_ml_flush(_to_);} + var + max_array_length = caml_sys_const_max_wosize(0), + max_string_length = (4 * max_array_length | 0) - 1 | 0; + function is_block(a){return 1 - (typeof a === "number" ? 1 : 0);} + var Undefined = [248, _l_, caml_fresh_oo_id(0)]; + function raise_undefined(param){ + throw caml_maybe_attach_backtrace(Undefined, 1); + } + function force_lazy_block(blk){ + var closure = blk[1]; + blk[1] = raise_undefined; + try{ + var result = caml_call1(closure, 0); + caml_obj_make_forward(blk, result); + return result; + } + catch(e$0){ + var e = caml_wrap_exception(e$0); + blk[1] = function(param){throw caml_maybe_attach_backtrace(e, 0);}; + throw caml_maybe_attach_backtrace(e, 0); + } + } + function map(f, o){ + if(! o) return 0; + var v = o[1]; + return [0, caml_call1(f, v)]; + } + function get_ok(param){ + if(0 !== param[0]) return invalid_arg(_m_); + var v = param[1]; + return v; + } + function map$0(f, e){ + if(0 !== e[0]) return e; + var v = e[1]; + return [0, caml_call1(f, v)]; + } + function of_int_exn(n){ + if(0 <= n && 255 >= n) return n; + return invalid_arg(_n_); + } + function escaped(c){ + a: + { + if(40 <= c){ + if(92 === c) return _o_; + if(127 > c) break a; + } + else{ + if(32 <= c){if(39 <= c) return _p_; break a;} + if(14 > c) + switch(c){ + case 8: + return _q_; + case 9: + return _r_; + case 10: + return _s_; + case 13: + return _t_; + } + } + var s = caml_create_bytes(4); + caml_bytes_unsafe_set(s, 0, 92); + caml_bytes_unsafe_set(s, 1, 48 + (c / 100 | 0) | 0); + caml_bytes_unsafe_set(s, 2, 48 + ((c / 10 | 0) % 10 | 0) | 0); + caml_bytes_unsafe_set(s, 3, 48 + (c % 10 | 0) | 0); + return caml_string_of_bytes(s); + } + var s$0 = caml_create_bytes(1); + caml_bytes_unsafe_set(s$0, 0, c); + return caml_string_of_bytes(s$0); + } + function lowercase_ascii(c){return 25 < c - 65 >>> 0 ? c : c + 32 | 0;} + function uppercase_ascii(c){return 25 < c - 97 >>> 0 ? c : c - 32 | 0;} + function compare(c1, c2){return c1 - c2 | 0;} + function equal(c1, c2){return 0 === compare(c1, c2) ? 1 : 0;} + function hd(param){ + if(! param) return failwith(_u_); + var a = param[1]; + return a; + } + function rev_append(l1, l2){ + var l1$0 = l1, l2$0 = l2; + for(;;){ + if(! l1$0) return l2$0; + var + l1$1 = l1$0[2], + a = l1$0[1], + l2$1 = [0, a, l2$0], + l1$0 = l1$1, + l2$0 = l2$1; + } + } + function rev(l){return rev_append(l, 0);} + function init_tailrec_aux(acc, i, n, f){ + var acc$0 = acc, i$0 = i; + for(;;){ + if(n <= i$0) return acc$0; + var + i$1 = i$0 + 1 | 0, + acc$1 = [0, caml_call1(f, i$0), acc$0], + acc$0 = acc$1, + i$0 = i$1; + } + } + function init_aux(i, n, f){ + if(n <= i) return 0; + var r = caml_call1(f, i); + return [0, r, init_aux(i + 1 | 0, n, f)]; + } + function init(len, f){ + return 0 <= len + ? 50 + < len + ? rev(init_tailrec_aux(0, 0, len, f)) + : init_aux(0, len, f) + : invalid_arg(_v_); + } + function map$1(f, param){ + if(! param) return 0; + var l = param[2], a = param[1], r = caml_call1(f, a); + return [0, r, map$1(f, l)]; + } + function rev_map(f, l){ + function rmap_f(accu, param){ + var accu$0 = accu, param$0 = param; + for(;;){ + if(! param$0) return accu$0; + var + l = param$0[2], + a = param$0[1], + accu$1 = [0, caml_call1(f, a), accu$0], + accu$0 = accu$1, + param$0 = l; + } + } + return rmap_f(0, l); + } + function iter(f, param){ + var param$0 = param; + for(;;){ + if(! param$0) return 0; + var l = param$0[2], a = param$0[1]; + caml_call1(f, a); + var param$0 = l; + } + } + function fold_left(f, accu, l){ + var accu$0 = accu, l$0 = l; + for(;;){ + if(! l$0) return accu$0; + var + l$1 = l$0[2], + a = l$0[1], + accu$1 = caml_call2(f, accu$0, a), + accu$0 = accu$1, + l$0 = l$1; + } + } + function exists(p, param){ + var param$0 = param; + for(;;){ + if(! param$0) return 0; + var l = param$0[2], a = param$0[1], _tn_ = caml_call1(p, a); + if(_tn_) return _tn_; + var param$0 = l; + } + } + function memq(x, param){ + var param$0 = param; + for(;;){ + if(! param$0) return 0; + var l = param$0[2], a = param$0[1], _tm_ = a === x ? 1 : 0; + if(_tm_) return _tm_; + var param$0 = l; + } + } + function min$0(x, y){return x <= y ? x : y;} + function max(x, y){return y <= x ? x : y;} + function to_string(x){return "" + x;} + function make$0(n, c){ + var s = caml_create_bytes(n); + caml_fill_bytes(s, 0, n, c); + return s; + } + function copy(s){ + var len = caml_ml_bytes_length(s), r = caml_create_bytes(len); + caml_blit_bytes(s, 0, r, 0, len); + return r; + } + function of_string(s){return copy(caml_bytes_of_string(s));} + function sub(s, ofs, len){ + if(0 <= ofs && 0 <= len && (caml_ml_bytes_length(s) - len | 0) >= ofs){ + var r = caml_create_bytes(len); + caml_blit_bytes(s, ofs, r, 0, len); + return r; + } + return invalid_arg(_w_); + } + function sub_string(b, ofs, len){ + return caml_string_of_bytes(sub(b, ofs, len)); + } + function blit(s1, ofs1, s2, ofs2, len){ + if + (0 <= len + && + 0 <= ofs1 + && + (caml_ml_bytes_length(s1) - len | 0) >= ofs1 + && 0 <= ofs2 && (caml_ml_bytes_length(s2) - len | 0) >= ofs2){caml_blit_bytes(s1, ofs1, s2, ofs2, len); return;} + return invalid_arg(_x_); + } + function blit_string(s1, ofs1, s2, ofs2, len){ + if + (0 <= len + && + 0 <= ofs1 + && + (caml_ml_string_length(s1) - len | 0) >= ofs1 + && 0 <= ofs2 && (caml_ml_bytes_length(s2) - len | 0) >= ofs2){caml_blit_string(s1, ofs1, s2, ofs2, len); return;} + return invalid_arg(_y_); + } + function escaped$0(s){ + var n = [0, 0], _tf_ = caml_ml_bytes_length(s) - 1 | 0, _te_ = 0; + if(_tf_ >= 0){ + var i$0 = _te_; + for(;;){ + var match = caml_bytes_unsafe_get(s, i$0); + a: + { + b: + { + c: + { + if(32 <= match){ + var _tj_ = match - 34 | 0; + if(58 < _tj_ >>> 0){ + if(93 <= _tj_) break c; + } + else if(56 < _tj_ - 1 >>> 0) break b; + var _tk_ = 1; + break a; + } + if(11 <= match){ + if(13 === match) break b; + } + else if(8 <= match) break b; + } + var _tk_ = 4; + break a; + } + var _tk_ = 2; + } + n[1] = n[1] + _tk_ | 0; + var _tl_ = i$0 + 1 | 0; + if(_tf_ === i$0) break; + var i$0 = _tl_; + } + } + if(n[1] === caml_ml_bytes_length(s)) return copy(s); + var s$0 = caml_create_bytes(n[1]); + n[1] = 0; + var _th_ = caml_ml_bytes_length(s) - 1 | 0, _tg_ = 0; + if(_th_ >= 0){ + var i = _tg_; + for(;;){ + var c = caml_bytes_unsafe_get(s, i); + a: + { + b: + { + c: + { + if(35 <= c){ + if(92 !== c){if(127 <= c) break c; break b;} + } + else{ + if(32 > c){ + if(14 <= c) break c; + switch(c){ + case 8: + caml_bytes_unsafe_set(s$0, n[1], 92); + n[1]++; + caml_bytes_unsafe_set(s$0, n[1], 98); + break a; + case 9: + caml_bytes_unsafe_set(s$0, n[1], 92); + n[1]++; + caml_bytes_unsafe_set(s$0, n[1], 116); + break a; + case 10: + caml_bytes_unsafe_set(s$0, n[1], 92); + n[1]++; + caml_bytes_unsafe_set(s$0, n[1], 110); + break a; + case 13: + caml_bytes_unsafe_set(s$0, n[1], 92); + n[1]++; + caml_bytes_unsafe_set(s$0, n[1], 114); + break a; + default: break c; + } + } + if(34 > c) break b; + } + caml_bytes_unsafe_set(s$0, n[1], 92); + n[1]++; + caml_bytes_unsafe_set(s$0, n[1], c); + break a; + } + caml_bytes_unsafe_set(s$0, n[1], 92); + n[1]++; + caml_bytes_unsafe_set(s$0, n[1], 48 + (c / 100 | 0) | 0); + n[1]++; + caml_bytes_unsafe_set(s$0, n[1], 48 + ((c / 10 | 0) % 10 | 0) | 0); + n[1]++; + caml_bytes_unsafe_set(s$0, n[1], 48 + (c % 10 | 0) | 0); + break a; + } + caml_bytes_unsafe_set(s$0, n[1], c); + } + n[1]++; + var _ti_ = i + 1 | 0; + if(_th_ === i) break; + var i = _ti_; + } + } + return s$0; + } + function map$2(f, s){ + var l = caml_ml_bytes_length(s); + if(0 === l) return s; + var r = caml_create_bytes(l), _tc_ = l - 1 | 0, _tb_ = 0; + if(_tc_ >= 0){ + var i = _tb_; + for(;;){ + caml_bytes_unsafe_set(r, i, caml_call1(f, caml_bytes_unsafe_get(s, i))); + var _td_ = i + 1 | 0; + if(_tc_ === i) break; + var i = _td_; + } + } + return r; + } + function uppercase_ascii$0(s){return map$2(uppercase_ascii, s);} + function lowercase_ascii$0(s){return map$2(lowercase_ascii, s);} + function unsafe_of_string(_ta_){return caml_bytes_of_string(_ta_);} + function unsafe_to_string(_s$_){return caml_string_of_bytes(_s$_);} + function make$1(n, c){return unsafe_to_string(make$0(n, c));} + function sub$0(s, ofs, len){ + return unsafe_to_string(sub(unsafe_of_string(s), ofs, len)); + } + function ensure_ge(x, y){return y <= x ? x : invalid_arg(_z_);} + function sum_lengths(acc, seplen, param){ + var acc$0 = acc, param$0 = param; + for(;;){ + if(! param$0) return acc$0; + var hd = param$0[1]; + if(! param$0[2]) return caml_ml_string_length(hd) + acc$0 | 0; + var + tl = param$0[2], + acc$1 = + ensure_ge((caml_ml_string_length(hd) + seplen | 0) + acc$0 | 0, acc$0), + acc$0 = acc$1, + param$0 = tl; + } + } + function unsafe_blits(dst, pos, sep, seplen, param){ + var pos$0 = pos, param$0 = param; + for(;;){ + if(! param$0) return dst; + var hd = param$0[1]; + if(! param$0[2]){ + caml_blit_string(hd, 0, dst, pos$0, caml_ml_string_length(hd)); + return dst; + } + var tl = param$0[2]; + caml_blit_string(hd, 0, dst, pos$0, caml_ml_string_length(hd)); + caml_blit_string + (sep, 0, dst, pos$0 + caml_ml_string_length(hd) | 0, seplen); + var + pos$1 = (pos$0 + caml_ml_string_length(hd) | 0) + seplen | 0, + pos$0 = pos$1, + param$0 = tl; + } + } + function concat(sep, l){ + if(! l) return _A_; + var seplen = caml_ml_string_length(sep); + return unsafe_to_string + (unsafe_blits + (caml_create_bytes(sum_lengths(0, seplen, l)), + 0, + sep, + seplen, + l)); + } + function escaped$1(s){ + function escape_if_needed(s, n, i){ + var i$0 = i; + for(;;){ + if(n <= i$0) return s; + var _s__ = caml_string_unsafe_get(s, i$0) - 32 | 0; + a: + { + if(59 < _s__ >>> 0){ + if(33 < _s__ - 61 >>> 0) break a; + } + else if(2 === _s__) break a; + var i$1 = i$0 + 1 | 0, i$0 = i$1; + continue; + } + return unsafe_to_string(escaped$0(unsafe_of_string(s))); + } + } + return escape_if_needed(s, caml_ml_string_length(s), 0); + } + function index_rec(s, lim, i, c){ + var i$0 = i; + for(;;){ + if(lim <= i$0) throw caml_maybe_attach_backtrace(Not_found, 1); + if(caml_string_unsafe_get(s, i$0) === c) return i$0; + var i$1 = i$0 + 1 | 0, i$0 = i$1; + } + } + function index_from(s, i, c){ + var l = caml_ml_string_length(s); + if(0 <= i && l >= i) return index_rec(s, l, i, c); + return invalid_arg(_B_); + } + function contains_from(s, i, c){ + var l = caml_ml_string_length(s); + if(0 <= i && l >= i) + try{index_rec(s, l, i, c); var _s8_ = 1; return _s8_;} + catch(_s9_){ + var _s7_ = caml_wrap_exception(_s9_); + if(_s7_ === Not_found) return 0; + throw caml_maybe_attach_backtrace(_s7_, 0); + } + return invalid_arg(_C_); + } + function contains(s, c){return contains_from(s, 0, c);} + function uppercase_ascii$1(s){ + return unsafe_to_string(uppercase_ascii$0(unsafe_of_string(s))); + } + function lowercase_ascii$1(s){ + return unsafe_to_string(lowercase_ascii$0(unsafe_of_string(s))); + } + function compare$0(x, y){return caml_string_compare(x, y);} + function symbol$0(_s6_, _s5_){return caml_string_equal(_s6_, _s5_);} + function init$0(l, f){ + if(0 === l) return [0]; + if(0 > l) return invalid_arg(_D_); + var res = caml_make_vect(l, caml_call1(f, 0)), _s3_ = l - 1 | 0, _s2_ = 1; + if(_s3_ >= 1){ + var i = _s2_; + for(;;){ + res[1 + i] = caml_call1(f, i); + var _s4_ = i + 1 | 0; + if(_s3_ === i) break; + var i = _s4_; + } + } + return res; + } + function blit$0(a1, ofs1, a2, ofs2, len){ + if + (0 <= len + && + 0 <= ofs1 + && + (a1.length - 1 - len | 0) >= ofs1 + && 0 <= ofs2 && (a2.length - 1 - len | 0) >= ofs2){ + caml_array_blit(a1, ofs1, a2, ofs2, len); + return; + } + return invalid_arg(_E_); + } + function map$3(f, a){ + var l = a.length - 1; + if(0 === l) return [0]; + var + r = caml_make_vect(l, caml_call1(f, a[1])), + _s0_ = l - 1 | 0, + _sZ_ = 1; + if(_s0_ >= 1){ + var i = _sZ_; + for(;;){ + r[1 + i] = caml_call1(f, a[1 + i]); + var _s1_ = i + 1 | 0; + if(_s0_ === i) break; + var i = _s1_; + } + } + return r; + } + function to_list(a){ + function tolist(i, res){ + var i$0 = i, res$0 = res; + for(;;){ + if(0 > i$0) return res$0; + var + res$1 = [0, a[1 + i$0], res$0], + i$1 = i$0 - 1 | 0, + i$0 = i$1, + res$0 = res$1; + } + } + return tolist(a.length - 1 - 1 | 0, 0); + } + function list_length(accu, param){ + var accu$0 = accu, param$0 = param; + for(;;){ + if(! param$0) return accu$0; + var + t = param$0[2], + accu$1 = accu$0 + 1 | 0, + accu$0 = accu$1, + param$0 = t; + } + } + function of_list(l){ + if(! l) return [0]; + var tl = l[2], hd = l[1], a = caml_make_vect(list_length(0, l), hd); + function fill(i, param){ + var i$0 = i, param$0 = param; + for(;;){ + if(! param$0) return a; + var tl = param$0[2], hd = param$0[1]; + a[1 + i$0] = hd; + var i$1 = i$0 + 1 | 0, i$0 = i$1, param$0 = tl; + } + } + return fill(1, tl); + } + function lex_refill(read_fun, aux_buffer, lexbuf){ + var + read = caml_call2(read_fun, aux_buffer, caml_ml_bytes_length(aux_buffer)), + n = 0 < read ? read : (lexbuf[9] = 1, 0); + if(caml_ml_bytes_length(lexbuf[2]) < (lexbuf[3] + n | 0)){ + if + (((lexbuf[3] - lexbuf[5] | 0) + n | 0) + <= caml_ml_bytes_length(lexbuf[2])) + blit(lexbuf[2], lexbuf[5], lexbuf[2], 0, lexbuf[3] - lexbuf[5] | 0); + else{ + var + newlen = + min$0(2 * caml_ml_bytes_length(lexbuf[2]) | 0, max_string_length); + if(newlen < ((lexbuf[3] - lexbuf[5] | 0) + n | 0)) failwith(_F_); + var newbuf = caml_create_bytes(newlen); + blit(lexbuf[2], lexbuf[5], newbuf, 0, lexbuf[3] - lexbuf[5] | 0); + lexbuf[2] = newbuf; + } + var s = lexbuf[5]; + lexbuf[4] = lexbuf[4] + s | 0; + lexbuf[6] = lexbuf[6] - s | 0; + lexbuf[5] = 0; + lexbuf[7] = lexbuf[7] - s | 0; + lexbuf[3] = lexbuf[3] - s | 0; + var t = lexbuf[10], _sX_ = t.length - 1 - 1 | 0, _sW_ = 0; + if(_sX_ >= 0){ + var i = _sW_; + for(;;){ + var v = caml_check_bound(t, i)[1 + i]; + if(0 <= v) caml_check_bound(t, i)[1 + i] = v - s | 0; + var _sY_ = i + 1 | 0; + if(_sX_ === i) break; + var i = _sY_; + } + } + } + blit(aux_buffer, 0, lexbuf[2], lexbuf[3], n); + lexbuf[3] = lexbuf[3] + n | 0; + return 0; + } + function from_function(opt, f){ + if(opt) + var sth = opt[1], with_positions = sth; + else + var with_positions = 1; + var + _sS_ = with_positions ? zero_pos : dummy_pos, + _sT_ = with_positions ? zero_pos : dummy_pos, + _sU_ = caml_create_bytes(512); + return [0, + function(_sV_){return lex_refill(f, _sU_, _sV_);}, + caml_create_bytes(1024), + 0, + 0, + 0, + 0, + 0, + 0, + 0, + [0], + _sT_, + _sS_]; + } + function from_channel(with_positions, ic){ + return from_function + (with_positions, function(buf, n){return input(ic, buf, 0, n);}); + } + function from_string(opt, s){ + if(opt) + var sth = opt[1], with_positions = sth; + else + var with_positions = 1; + var + _sQ_ = with_positions ? zero_pos : dummy_pos, + _sR_ = with_positions ? zero_pos : dummy_pos; + return [0, + function(lexbuf){lexbuf[9] = 1; return 0;}, + of_string(s), + caml_ml_string_length(s), + 0, + 0, + 0, + 0, + 0, + 1, + [0], + _sR_, + _sQ_]; + } + function lexeme(lexbuf){ + var len = lexbuf[6] - lexbuf[5] | 0; + return sub_string(lexbuf[2], lexbuf[5], len); + } + function sub_lexeme(lexbuf, i1, i2){ + var len = i2 - i1 | 0; + return sub_string(lexbuf[2], i1, len); + } + function Make(Ord){ + function height(param){if(! param) return 0; var h = param[4]; return h;} + function create(l, v, r){ + if(l) var h = l[4], hl = h; else var hl = 0; + if(r) var h$0 = r[4], hr = h$0; else var hr = 0; + var _sP_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; + return [0, l, v, r, _sP_]; + } + function bal(l, v, r){ + if(l) var h = l[4], hl = h; else var hl = 0; + if(r) var h$0 = r[4], hr = h$0; else var hr = 0; + if((hr + 2 | 0) < hl){ + if(! l) return invalid_arg(_H_); + var lr = l[3], lv = l[2], ll = l[1], _sK_ = height(lr); + if(_sK_ <= height(ll)) return create(ll, lv, create(lr, v, r)); + if(! lr) return invalid_arg(_G_); + var lrr = lr[3], lrv = lr[2], lrl = lr[1], _sL_ = create(lrr, v, r); + return create(create(ll, lv, lrl), lrv, _sL_); + } + if((hl + 2 | 0) >= hr){ + var _sO_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; + return [0, l, v, r, _sO_]; + } + if(! r) return invalid_arg(_J_); + var rr = r[3], rv = r[2], rl = r[1], _sM_ = height(rl); + if(_sM_ <= height(rr)) return create(create(l, v, rl), rv, rr); + if(! rl) return invalid_arg(_I_); + var rlr = rl[3], rlv = rl[2], rll = rl[1], _sN_ = create(rlr, rv, rr); + return create(create(l, v, rll), rlv, _sN_); + } + function add(x, t){ + if(! t) return [0, 0, x, 0, 1]; + var r = t[3], v = t[2], l = t[1], c = caml_call2(Ord[1], x, v); + if(0 === c) return t; + if(0 <= c){var rr = add(x, r); return r === rr ? t : bal(l, v, rr);} + var ll = add(x, l); + return l === ll ? t : bal(ll, v, r); + } + function iter(f, param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var r = param$0[3], v = param$0[2], l = param$0[1]; + iter(f, l); + caml_call1(f, v); + var param$0 = r; + } + } + function elements_aux(accu, param){ + var accu$0 = accu, param$0 = param; + for(;;){ + if(! param$0) return accu$0; + var + r = param$0[3], + v = param$0[2], + l = param$0[1], + accu$1 = [0, v, elements_aux(accu$0, r)], + accu$0 = accu$1, + param$0 = l; + } + } + function elements(s){return elements_aux(0, s);} + function find_last_opt_aux(v0, f, param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + r = param$0[3], + v0$0 = param$0[2], + l = param$0[1], + param$0 = caml_call1(f, v0$0) ? r : l; + } + } + function find_last_opt(f, param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var r = param$0[3], v = param$0[2], l = param$0[1]; + if(caml_call1(f, v)) return find_last_opt_aux(v, f, r); + var param$0 = l; + } + } + return [0, + , + , + , + add, + , + , + , + , + , + , + , + , + , + , + , + , + 0, + , + , + , + , + , + , + , + , + , + , + , + , + , + iter, + , + , + , + , + , + , + , + elements, + , + , + , + , + , + , + , + , + , + , + find_last_opt]; + } + function _K_(_sI_){ + var _sJ_ = Make(_sI_); + return [0, + _sJ_[17], + , + , + _sJ_[4], + , + , + , + , + , + , + , + , + , + _sJ_[31], + , + , + , + , + , + , + , + , + _sJ_[39], + , + , + , + , + , + , + , + , + , + , + , + , + _sJ_[50]]; + } + function create(param){return [0, 0, 0];} + function clear(s){s[1] = 0; s[2] = 0; return;} + function push(x, s){s[1] = [0, x, s[1]]; s[2] = s[2] + 1 | 0; return 0;} + function pop_opt(s){ + var match = s[1]; + if(! match) return 0; + var tl = match[2], hd = match[1]; + s[1] = tl; + s[2] = s[2] - 1 | 0; + return [0, hd]; + } + function top_opt(s){ + var match = s[1]; + if(! match) return 0; + var hd = match[1]; + return [0, hd]; + } + function iter$0(f, s){return iter(f, s[1]);} + var Empty = [248, _L_, caml_fresh_oo_id(0)]; + function create$0(param){return [0, 0, 0, 0];} + function clear$0(q){q[1] = 0; q[2] = 0; q[3] = 0; return;} + function add(x, q){ + var cell = [0, x, 0], match = q[3]; + return match + ? (q[1] = q[1] + 1 | 0, match[2] = cell, q[3] = cell, 0) + : (q[1] = 1, q[2] = cell, q[3] = cell, 0); + } + function peek_opt(q){ + var match = q[2]; + if(! match) return 0; + var content = match[1]; + return [0, content]; + } + function take(q){ + var _sH_ = q[2]; + if(! _sH_) throw caml_maybe_attach_backtrace(Empty, 1); + if(_sH_[2]){var next = _sH_[2]; q[1] = q[1] - 1 | 0; q[2] = next; return;} + clear$0(q); + return; + } + function take_opt(q){ + var _sG_ = q[2]; + if(! _sG_) return 0; + var content = _sG_[1]; + if(_sG_[2]){ + var next = _sG_[2]; + q[1] = q[1] - 1 | 0; + q[2] = next; + return [0, content]; + } + clear$0(q); + return [0, content]; + } + function length(q){return q[1];} + function from(f){return [0, [0, 0, [3, [0, 0, f]]]];} + function create$1(n){ + var + n$0 = 1 <= n ? n : 1, + n$1 = max_string_length < n$0 ? max_string_length : n$0, + s = caml_create_bytes(n$1); + return [0, s, 0, n$1, s]; + } + function contents(b){return sub_string(b[1], 0, b[2]);} + function sub$1(b, ofs, len){ + if(0 <= ofs && 0 <= len && (b[2] - len | 0) >= ofs) + return sub_string(b[1], ofs, len); + return invalid_arg(_M_); + } + function length$0(b){return b[2];} + function reset(b){ + b[2] = 0; + b[1] = b[4]; + b[3] = caml_ml_bytes_length(b[1]); + return; + } + function resize(b, more){ + var old_pos = b[2], old_len = b[3], new_len = [0, old_len]; + for(;;){ + if(new_len[1] >= (old_pos + more | 0)) break; + new_len[1] = 2 * new_len[1] | 0; + } + if(max_string_length < new_len[1]) + if((old_pos + more | 0) <= max_string_length) + new_len[1] = max_string_length; + else + failwith(_P_); + var new_buffer = caml_create_bytes(new_len[1]); + blit(b[1], 0, new_buffer, 0, b[2]); + b[1] = new_buffer; + b[3] = new_len[1]; + if((b[2] + more | 0) > b[3]) + throw caml_maybe_attach_backtrace([0, Assert_failure, _O_], 1); + if((old_pos + more | 0) <= b[3]) return; + throw caml_maybe_attach_backtrace([0, Assert_failure, _N_], 1); + } + function add_char(b, c){ + var pos = b[2]; + if(b[3] <= pos) resize(b, 1); + caml_bytes_unsafe_set(b[1], pos, c); + b[2] = pos + 1 | 0; + return 0; + } + function add_substring(b, s, offset, len){ + var _sD_ = offset < 0 ? 1 : 0; + if(_sD_) + var _sE_ = _sD_; + else + var + _sF_ = len < 0 ? 1 : 0, + _sE_ = _sF_ || ((caml_ml_string_length(s) - len | 0) < offset ? 1 : 0); + if(_sE_) invalid_arg(_Q_); + var new_position = b[2] + len | 0; + if(b[3] < new_position) resize(b, len); + caml_blit_string(s, offset, b[1], b[2], len); + b[2] = new_position; + return 0; + } + function add_string(b, s){ + var len = caml_ml_string_length(s), new_position = b[2] + len | 0; + if(b[3] < new_position) resize(b, len); + caml_blit_string(s, 0, b[1], b[2], len); + b[2] = new_position; + return 0; + } + function default_float_precision(fconv){return 5 === fconv[2] ? 12 : -6;} + function buffer_create(init_size){ + return [0, 0, caml_create_bytes(init_size)]; + } + function buffer_check_size(buf, overhead){ + var len = caml_ml_bytes_length(buf[2]), min_len = buf[1] + overhead | 0; + if(len < min_len){ + var + new_len = max(len * 2 | 0, min_len), + new_str = caml_create_bytes(new_len); + blit(buf[2], 0, new_str, 0, len); + buf[2] = new_str; + } + return; + } + function buffer_add_char(buf, c){ + buffer_check_size(buf, 1); + caml_bytes_set(buf[2], buf[1], c); + buf[1] = buf[1] + 1 | 0; + return; + } + function buffer_add_string(buf, s){ + var str_len = caml_ml_string_length(s); + buffer_check_size(buf, str_len); + blit_string(s, 0, buf[2], buf[1], str_len); + buf[1] = buf[1] + str_len | 0; + return; + } + function buffer_contents(buf){return sub_string(buf[2], 0, buf[1]);} + function char_of_fconv(opt, fconv){ + if(opt) var sth = opt[1], cF = sth; else var cF = 70; + switch(fconv[2]){ + case 0: + return 102; + case 1: + return 101; + case 2: + return 69; + case 3: + return 103; + case 4: + return 71; + case 5: + return cF; + case 6: + return 104; + case 7: + return 72; + default: return 70; + } + } + function bprint_fconv_flag(buf, fconv){ + switch(fconv[1]){ + case 0: break; + case 1: + buffer_add_char(buf, 43); break; + default: buffer_add_char(buf, 32); + } + if(8 <= fconv[2]) return buffer_add_char(buf, 35); + return; + } + function string_of_formatting_lit(formatting_lit){ + if(typeof formatting_lit === "number") + switch(formatting_lit){ + case 0: + return _R_; + case 1: + return _S_; + case 2: + return _U_; + case 3: + return _V_; + case 4: + return _W_; + case 5: + return _X_; + default: return _Y_; + } + switch(formatting_lit[0]){ + case 0: + var str = formatting_lit[1]; return str; + case 1: + var str$0 = formatting_lit[1]; return str$0; + default: var c = formatting_lit[1]; return symbol(_Z_, make$1(1, c)); + } + } + function bprint_fmtty(buf, fmtty){ + var fmtty$0 = fmtty; + for(;;){ + if(typeof fmtty$0 === "number") return; + switch(fmtty$0[0]){ + case 0: + var fmtty$1 = fmtty$0[1]; + buffer_add_string(buf, ___); + var fmtty$0 = fmtty$1; + break; + case 1: + var fmtty$2 = fmtty$0[1]; + buffer_add_string(buf, _$_); + var fmtty$0 = fmtty$2; + break; + case 2: + var fmtty$3 = fmtty$0[1]; + buffer_add_string(buf, _aa_); + var fmtty$0 = fmtty$3; + break; + case 3: + var fmtty$4 = fmtty$0[1]; + buffer_add_string(buf, _ab_); + var fmtty$0 = fmtty$4; + break; + case 4: + var fmtty$5 = fmtty$0[1]; + buffer_add_string(buf, _ac_); + var fmtty$0 = fmtty$5; + break; + case 5: + var fmtty$6 = fmtty$0[1]; + buffer_add_string(buf, _ad_); + var fmtty$0 = fmtty$6; + break; + case 6: + var fmtty$7 = fmtty$0[1]; + buffer_add_string(buf, _ae_); + var fmtty$0 = fmtty$7; + break; + case 7: + var fmtty$8 = fmtty$0[1]; + buffer_add_string(buf, _af_); + var fmtty$0 = fmtty$8; + break; + case 8: + var fmtty$9 = fmtty$0[2], sub_fmtty = fmtty$0[1]; + buffer_add_string(buf, _ag_); + bprint_fmtty(buf, sub_fmtty); + buffer_add_string(buf, _ah_); + var fmtty$0 = fmtty$9; + break; + case 9: + var fmtty$10 = fmtty$0[3], sub_fmtty$0 = fmtty$0[1]; + buffer_add_string(buf, _ai_); + bprint_fmtty(buf, sub_fmtty$0); + buffer_add_string(buf, _aj_); + var fmtty$0 = fmtty$10; + break; + case 10: + var fmtty$11 = fmtty$0[1]; + buffer_add_string(buf, _ak_); + var fmtty$0 = fmtty$11; + break; + case 11: + var fmtty$12 = fmtty$0[1]; + buffer_add_string(buf, _al_); + var fmtty$0 = fmtty$12; + break; + case 12: + var fmtty$13 = fmtty$0[1]; + buffer_add_string(buf, _am_); + var fmtty$0 = fmtty$13; + break; + case 13: + var fmtty$14 = fmtty$0[1]; + buffer_add_string(buf, _an_); + var fmtty$0 = fmtty$14; + break; + default: + var fmtty$15 = fmtty$0[1]; + buffer_add_string(buf, _ao_); + var fmtty$0 = fmtty$15; + } + } + } + function symm(param){ + if(typeof param === "number") return 0; + switch(param[0]){ + case 0: + var rest = param[1]; return [0, symm(rest)]; + case 1: + var rest$0 = param[1]; return [1, symm(rest$0)]; + case 2: + var rest$1 = param[1]; return [2, symm(rest$1)]; + case 3: + var rest$2 = param[1]; return [3, symm(rest$2)]; + case 4: + var rest$3 = param[1]; return [4, symm(rest$3)]; + case 5: + var rest$4 = param[1]; return [5, symm(rest$4)]; + case 6: + var rest$5 = param[1]; return [6, symm(rest$5)]; + case 7: + var rest$6 = param[1]; return [7, symm(rest$6)]; + case 8: + var rest$7 = param[2], ty = param[1]; return [8, ty, symm(rest$7)]; + case 9: + var rest$8 = param[3], ty2 = param[2], ty1 = param[1]; + return [9, ty2, ty1, symm(rest$8)]; + case 10: + var rest$9 = param[1]; return [10, symm(rest$9)]; + case 11: + var rest$10 = param[1]; return [11, symm(rest$10)]; + case 12: + var rest$11 = param[1]; return [12, symm(rest$11)]; + case 13: + var rest$12 = param[1]; return [13, symm(rest$12)]; + default: var rest$13 = param[1]; return [14, symm(rest$13)]; + } + } + function fmtty_rel_det(param){ + if(typeof param === "number") + return [0, + function(param){return;}, + function(param){return;}, + function(param){return;}, + function(param){return;}]; + switch(param[0]){ + case 0: + var + rest = param[1], + match = fmtty_rel_det(rest), + de = match[4], + ed = match[3], + af = match[2], + fa = match[1]; + return [0, + function(param){fa(0); return;}, + function(param){af(0); return;}, + ed, + de]; + case 1: + var + rest$0 = param[1], + match$0 = fmtty_rel_det(rest$0), + de$0 = match$0[4], + ed$0 = match$0[3], + af$0 = match$0[2], + fa$0 = match$0[1]; + return [0, + function(param){fa$0(0); return;}, + function(param){af$0(0); return;}, + ed$0, + de$0]; + case 2: + var + rest$1 = param[1], + match$1 = fmtty_rel_det(rest$1), + de$1 = match$1[4], + ed$1 = match$1[3], + af$1 = match$1[2], + fa$1 = match$1[1]; + return [0, + function(param){fa$1(0); return;}, + function(param){af$1(0); return;}, + ed$1, + de$1]; + case 3: + var + rest$2 = param[1], + match$2 = fmtty_rel_det(rest$2), + de$2 = match$2[4], + ed$2 = match$2[3], + af$2 = match$2[2], + fa$2 = match$2[1]; + return [0, + function(param){fa$2(0); return;}, + function(param){af$2(0); return;}, + ed$2, + de$2]; + case 4: + var + rest$3 = param[1], + match$3 = fmtty_rel_det(rest$3), + de$3 = match$3[4], + ed$3 = match$3[3], + af$3 = match$3[2], + fa$3 = match$3[1]; + return [0, + function(param){fa$3(0); return;}, + function(param){af$3(0); return;}, + ed$3, + de$3]; + case 5: + var + rest$4 = param[1], + match$4 = fmtty_rel_det(rest$4), + de$4 = match$4[4], + ed$4 = match$4[3], + af$4 = match$4[2], + fa$4 = match$4[1]; + return [0, + function(param){fa$4(0); return;}, + function(param){af$4(0); return;}, + ed$4, + de$4]; + case 6: + var + rest$5 = param[1], + match$5 = fmtty_rel_det(rest$5), + de$5 = match$5[4], + ed$5 = match$5[3], + af$5 = match$5[2], + fa$5 = match$5[1]; + return [0, + function(param){fa$5(0); return;}, + function(param){af$5(0); return;}, + ed$5, + de$5]; + case 7: + var + rest$6 = param[1], + match$6 = fmtty_rel_det(rest$6), + de$6 = match$6[4], + ed$6 = match$6[3], + af$6 = match$6[2], + fa$6 = match$6[1]; + return [0, + function(param){fa$6(0); return;}, + function(param){af$6(0); return;}, + ed$6, + de$6]; + case 8: + var + rest$7 = param[2], + match$7 = fmtty_rel_det(rest$7), + de$7 = match$7[4], + ed$7 = match$7[3], + af$7 = match$7[2], + fa$7 = match$7[1]; + return [0, + function(param){fa$7(0); return;}, + function(param){af$7(0); return;}, + ed$7, + de$7]; + case 9: + var + rest$8 = param[3], + ty2 = param[2], + ty1 = param[1], + match$8 = fmtty_rel_det(rest$8), + de$8 = match$8[4], + ed$8 = match$8[3], + af$8 = match$8[2], + fa$8 = match$8[1], + ty = trans(symm(ty1), ty2), + match$9 = fmtty_rel_det(ty), + jd = match$9[4], + dj = match$9[3], + ga = match$9[2], + ag = match$9[1]; + return [0, + function(param){fa$8(0); ag(0); return;}, + function(param){ga(0); af$8(0); return;}, + function(param){ed$8(0); dj(0); return;}, + function(param){jd(0); de$8(0); return;}]; + case 10: + var + rest$9 = param[1], + match$10 = fmtty_rel_det(rest$9), + de$9 = match$10[4], + ed$9 = match$10[3], + af$9 = match$10[2], + fa$9 = match$10[1]; + return [0, + function(param){fa$9(0); return;}, + function(param){af$9(0); return;}, + ed$9, + de$9]; + case 11: + var + rest$10 = param[1], + match$11 = fmtty_rel_det(rest$10), + de$10 = match$11[4], + ed$10 = match$11[3], + af$10 = match$11[2], + fa$10 = match$11[1]; + return [0, + function(param){fa$10(0); return;}, + function(param){af$10(0); return;}, + ed$10, + de$10]; + case 12: + var + rest$11 = param[1], + match$12 = fmtty_rel_det(rest$11), + de$11 = match$12[4], + ed$11 = match$12[3], + af$11 = match$12[2], + fa$11 = match$12[1]; + return [0, + function(param){fa$11(0); return;}, + function(param){af$11(0); return;}, + ed$11, + de$11]; + case 13: + var + rest$12 = param[1], + match$13 = fmtty_rel_det(rest$12), + de$12 = match$13[4], + ed$12 = match$13[3], + af$12 = match$13[2], + fa$12 = match$13[1]; + return [0, + function(param){fa$12(0); return;}, + function(param){af$12(0); return;}, + function(param){ed$12(0); return;}, + function(param){de$12(0); return;}]; + default: + var + rest$13 = param[1], + match$14 = fmtty_rel_det(rest$13), + de$13 = match$14[4], + ed$13 = match$14[3], + af$13 = match$14[2], + fa$13 = match$14[1]; + return [0, + function(param){fa$13(0); return;}, + function(param){af$13(0); return;}, + function(param){ed$13(0); return;}, + function(param){de$13(0); return;}]; + } + } + function trans(ty1, ty2){ + a: + { + b: + { + c: + { + d: + { + e: + { + f: + { + g: + { + if(typeof ty1 !== "number"){ + switch(ty1[0]){ + case 0: + var rest1 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 0: + var rest2 = ty2[1]; return [0, trans(rest1, rest2)]; + case 8: + break f; + case 9: + break g; + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + } + break; + case 1: + var rest1$0 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 1: + var rest2$0 = ty2[1]; return [1, trans(rest1$0, rest2$0)]; + case 8: + break f; + case 9: + break g; + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + } + break; + case 2: + var rest1$1 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 2: + var rest2$1 = ty2[1]; return [2, trans(rest1$1, rest2$1)]; + case 8: + break f; + case 9: + break g; + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + } + break; + case 3: + var rest1$2 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 3: + var rest2$2 = ty2[1]; return [3, trans(rest1$2, rest2$2)]; + case 8: + break f; + case 9: + break g; + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + } + break; + case 4: + var rest1$3 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 4: + var rest2$3 = ty2[1]; return [4, trans(rest1$3, rest2$3)]; + case 8: + break f; + case 9: + break g; + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + } + break; + case 5: + var rest1$4 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 5: + var rest2$4 = ty2[1]; return [5, trans(rest1$4, rest2$4)]; + case 8: + break f; + case 9: + break g; + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + } + break; + case 6: + var rest1$5 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 6: + var rest2$5 = ty2[1]; return [6, trans(rest1$5, rest2$5)]; + case 8: + break f; + case 9: + break g; + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + } + break; + case 7: + var rest1$6 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 7: + var rest2$6 = ty2[1]; return [7, trans(rest1$6, rest2$6)]; + case 8: + break f; + case 9: + break g; + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + } + break; + case 8: + var rest1$7 = ty1[2], ty1$0 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 8: + var + rest2$7 = ty2[2], + ty2$0 = ty2[1], + _sC_ = trans(rest1$7, rest2$7); + return [8, trans(ty1$0, ty2$0), _sC_]; + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _ay_], 1); + case 9: + var rest1$8 = ty1[3], ty12 = ty1[2], ty11 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 8: + break f; + case 9: + var + rest2$8 = ty2[3], + ty22 = ty2[2], + ty21 = ty2[1], + ty = trans(symm(ty12), ty21), + match = fmtty_rel_det(ty), + f4 = match[4], + f2 = match[2]; + f2(0); + f4(0); + return [9, ty11, ty22, trans(rest1$8, rest2$8)]; + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _az_], 1); + case 10: + var rest1$9 = ty1[1]; + if(typeof ty2 !== "number" && 10 === ty2[0]){ + var rest2$9 = ty2[1]; + return [10, trans(rest1$9, rest2$9)]; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _aA_], 1); + case 11: + var rest1$10 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 10: + break a; + case 11: + var rest2$10 = ty2[1]; + return [11, trans(rest1$10, rest2$10)]; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _aB_], 1); + case 12: + var rest1$11 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 10: + break a; + case 11: + break b; + case 12: + var rest2$11 = ty2[1]; + return [12, trans(rest1$11, rest2$11)]; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _aC_], 1); + case 13: + var rest1$12 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + var rest2$12 = ty2[1]; + return [13, trans(rest1$12, rest2$12)]; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _aD_], 1); + default: + var rest1$13 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + var rest2$13 = ty2[1]; + return [14, trans(rest1$13, rest2$13)]; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _aE_], 1); + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _ax_], 1); + } + if(typeof ty2 === "number") return 0; + switch(ty2[0]){ + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + case 8: + break f; + case 9: break; + default: + throw caml_maybe_attach_backtrace([0, Assert_failure, _ap_], 1); + } + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _ar_], 1); + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _aq_], 1); + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _aw_], 1); + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _av_], 1); + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _au_], 1); + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _at_], 1); + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _as_], 1); + } + var Type_mismatch = [248, _aF_, caml_fresh_oo_id(0)]; + function type_padding(pad, fmtty){ + if(typeof pad === "number") return [0, 0, fmtty]; + if(0 === pad[0]){ + var w = pad[2], padty = pad[1]; + return [0, [0, padty, w], fmtty]; + } + if(typeof fmtty !== "number" && 2 === fmtty[0]){ + var rest = fmtty[1], padty$0 = pad[1]; + return [0, [1, padty$0], rest]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + } + function type_padprec(pad, prec, fmtty){ + var match = type_padding(pad, fmtty); + if(typeof prec !== "number"){ + var rest$1 = match[2], pad$2 = match[1], p = prec[1]; + return [0, pad$2, [0, p], rest$1]; + } + if(! prec){ + var rest$0 = match[2], pad$1 = match[1]; + return [0, pad$1, 0, rest$0]; + } + var match$0 = match[2]; + if(typeof match$0 !== "number" && 2 === match$0[0]){ + var rest = match$0[1], pad$0 = match[1]; + return [0, pad$0, 1, rest]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + } + function type_format(fmt, fmtty){ + var _sB_ = type_format_gen(fmt, fmtty); + if(typeof _sB_[2] !== "number") + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + var fmt$0 = _sB_[1]; + return fmt$0; + } + function type_format_gen(fmt, fmtty){ + if(typeof fmt === "number") return [0, 0, fmtty]; + switch(fmt[0]){ + case 0: + if(typeof fmtty !== "number" && 0 === fmtty[0]){ + var + fmtty_rest = fmtty[1], + fmt_rest = fmt[1], + match = type_format_gen(fmt_rest, fmtty_rest), + fmtty$0 = match[2], + fmt$0 = match[1]; + return [0, [0, fmt$0], fmtty$0]; + } + break; + case 1: + if(typeof fmtty !== "number" && 0 === fmtty[0]){ + var + fmtty_rest$0 = fmtty[1], + fmt_rest$0 = fmt[1], + match$0 = type_format_gen(fmt_rest$0, fmtty_rest$0), + fmtty$1 = match$0[2], + fmt$1 = match$0[1]; + return [0, [1, fmt$1], fmtty$1]; + } + break; + case 2: + var + fmt_rest$1 = fmt[2], + pad = fmt[1], + match$1 = type_padding(pad, fmtty), + pad$0 = match$1[1], + match$2 = match$1[2]; + if(typeof match$2 !== "number" && 1 === match$2[0]){ + var + fmtty_rest$1 = match$2[1], + match$3 = type_format_gen(fmt_rest$1, fmtty_rest$1), + fmtty$2 = match$3[2], + fmt$2 = match$3[1]; + return [0, [2, pad$0, fmt$2], fmtty$2]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + case 3: + var + fmt_rest$2 = fmt[2], + pad$1 = fmt[1], + match$4 = type_padding(pad$1, fmtty), + pad$2 = match$4[1], + match$5 = match$4[2]; + if(typeof match$5 !== "number" && 1 === match$5[0]){ + var + fmtty_rest$2 = match$5[1], + match$6 = type_format_gen(fmt_rest$2, fmtty_rest$2), + fmtty$3 = match$6[2], + fmt$3 = match$6[1]; + return [0, [3, pad$2, fmt$3], fmtty$3]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + case 4: + var + fmt_rest$3 = fmt[4], + prec = fmt[3], + pad$3 = fmt[2], + iconv = fmt[1], + match$7 = type_padprec(pad$3, prec, fmtty), + pad$4 = match$7[1], + match$8 = match$7[3]; + if(typeof match$8 !== "number" && 2 === match$8[0]){ + var + fmtty_rest$3 = match$8[1], + prec$0 = match$7[2], + match$9 = type_format_gen(fmt_rest$3, fmtty_rest$3), + fmtty$4 = match$9[2], + fmt$4 = match$9[1]; + return [0, [4, iconv, pad$4, prec$0, fmt$4], fmtty$4]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + case 5: + var + fmt_rest$4 = fmt[4], + prec$1 = fmt[3], + pad$5 = fmt[2], + iconv$0 = fmt[1], + match$10 = type_padprec(pad$5, prec$1, fmtty), + pad$6 = match$10[1], + match$11 = match$10[3]; + if(typeof match$11 !== "number" && 3 === match$11[0]){ + var + fmtty_rest$4 = match$11[1], + prec$2 = match$10[2], + match$12 = type_format_gen(fmt_rest$4, fmtty_rest$4), + fmtty$5 = match$12[2], + fmt$5 = match$12[1]; + return [0, [5, iconv$0, pad$6, prec$2, fmt$5], fmtty$5]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + case 6: + var + fmt_rest$5 = fmt[4], + prec$3 = fmt[3], + pad$7 = fmt[2], + iconv$1 = fmt[1], + match$13 = type_padprec(pad$7, prec$3, fmtty), + pad$8 = match$13[1], + match$14 = match$13[3]; + if(typeof match$14 !== "number" && 4 === match$14[0]){ + var + fmtty_rest$5 = match$14[1], + prec$4 = match$13[2], + match$15 = type_format_gen(fmt_rest$5, fmtty_rest$5), + fmtty$6 = match$15[2], + fmt$6 = match$15[1]; + return [0, [6, iconv$1, pad$8, prec$4, fmt$6], fmtty$6]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + case 7: + var + fmt_rest$6 = fmt[4], + prec$5 = fmt[3], + pad$9 = fmt[2], + iconv$2 = fmt[1], + match$16 = type_padprec(pad$9, prec$5, fmtty), + pad$10 = match$16[1], + match$17 = match$16[3]; + if(typeof match$17 !== "number" && 5 === match$17[0]){ + var + fmtty_rest$6 = match$17[1], + prec$6 = match$16[2], + match$18 = type_format_gen(fmt_rest$6, fmtty_rest$6), + fmtty$7 = match$18[2], + fmt$7 = match$18[1]; + return [0, [7, iconv$2, pad$10, prec$6, fmt$7], fmtty$7]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + case 8: + var + fmt_rest$7 = fmt[4], + prec$7 = fmt[3], + pad$11 = fmt[2], + fconv = fmt[1], + match$19 = type_padprec(pad$11, prec$7, fmtty), + pad$12 = match$19[1], + match$20 = match$19[3]; + if(typeof match$20 !== "number" && 6 === match$20[0]){ + var + fmtty_rest$7 = match$20[1], + prec$8 = match$19[2], + match$21 = type_format_gen(fmt_rest$7, fmtty_rest$7), + fmtty$8 = match$21[2], + fmt$8 = match$21[1]; + return [0, [8, fconv, pad$12, prec$8, fmt$8], fmtty$8]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + case 9: + var + fmt_rest$8 = fmt[2], + pad$13 = fmt[1], + match$22 = type_padding(pad$13, fmtty), + pad$14 = match$22[1], + match$23 = match$22[2]; + if(typeof match$23 !== "number" && 7 === match$23[0]){ + var + fmtty_rest$8 = match$23[1], + match$24 = type_format_gen(fmt_rest$8, fmtty_rest$8), + fmtty$9 = match$24[2], + fmt$9 = match$24[1]; + return [0, [9, pad$14, fmt$9], fmtty$9]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + case 10: + var + fmt_rest$9 = fmt[1], + match$25 = type_format_gen(fmt_rest$9, fmtty), + fmtty$10 = match$25[2], + fmt$10 = match$25[1]; + return [0, [10, fmt$10], fmtty$10]; + case 11: + var + fmt_rest$10 = fmt[2], + str = fmt[1], + match$26 = type_format_gen(fmt_rest$10, fmtty), + fmtty$11 = match$26[2], + fmt$11 = match$26[1]; + return [0, [11, str, fmt$11], fmtty$11]; + case 12: + var + fmt_rest$11 = fmt[2], + chr = fmt[1], + match$27 = type_format_gen(fmt_rest$11, fmtty), + fmtty$12 = match$27[2], + fmt$12 = match$27[1]; + return [0, [12, chr, fmt$12], fmtty$12]; + case 13: + if(typeof fmtty !== "number" && 8 === fmtty[0]){ + var + fmtty_rest$9 = fmtty[2], + sub_fmtty = fmtty[1], + fmt_rest$12 = fmt[3], + sub_fmtty$0 = fmt[2], + pad_opt = fmt[1]; + if(caml_notequal([0, sub_fmtty$0], [0, sub_fmtty])) + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + var + match$28 = type_format_gen(fmt_rest$12, fmtty_rest$9), + fmtty$13 = match$28[2], + fmt$13 = match$28[1]; + return [0, [13, pad_opt, sub_fmtty, fmt$13], fmtty$13]; + } + break; + case 14: + if(typeof fmtty !== "number" && 9 === fmtty[0]){ + var + fmtty_rest$10 = fmtty[3], + sub_fmtty1 = fmtty[1], + fmt_rest$13 = fmt[3], + sub_fmtty$1 = fmt[2], + pad_opt$0 = fmt[1], + _sA_ = [0, erase_rel(sub_fmtty1)]; + if(caml_notequal([0, erase_rel(sub_fmtty$1)], _sA_)) + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + var + match$29 = type_format_gen(fmt_rest$13, erase_rel(fmtty_rest$10)), + fmtty$14 = match$29[2], + fmt$14 = match$29[1]; + return [0, [14, pad_opt$0, sub_fmtty1, fmt$14], fmtty$14]; + } + break; + case 15: + if(typeof fmtty !== "number" && 10 === fmtty[0]){ + var + fmtty_rest$11 = fmtty[1], + fmt_rest$14 = fmt[1], + match$30 = type_format_gen(fmt_rest$14, fmtty_rest$11), + fmtty$15 = match$30[2], + fmt$15 = match$30[1]; + return [0, [15, fmt$15], fmtty$15]; + } + break; + case 16: + if(typeof fmtty !== "number" && 11 === fmtty[0]){ + var + fmtty_rest$12 = fmtty[1], + fmt_rest$15 = fmt[1], + match$31 = type_format_gen(fmt_rest$15, fmtty_rest$12), + fmtty$16 = match$31[2], + fmt$16 = match$31[1]; + return [0, [16, fmt$16], fmtty$16]; + } + break; + case 17: + var + fmt_rest$16 = fmt[2], + formatting_lit = fmt[1], + match$32 = type_format_gen(fmt_rest$16, fmtty), + fmtty$17 = match$32[2], + fmt$17 = match$32[1]; + return [0, [17, formatting_lit, fmt$17], fmtty$17]; + case 18: + var fmt_rest$17 = fmt[2], formatting_gen = fmt[1]; + return type_formatting_gen(formatting_gen, fmt_rest$17, fmtty); + case 19: + if(typeof fmtty !== "number" && 13 === fmtty[0]){ + var + fmtty_rest$13 = fmtty[1], + fmt_rest$18 = fmt[1], + match$33 = type_format_gen(fmt_rest$18, fmtty_rest$13), + fmtty$18 = match$33[2], + fmt$18 = match$33[1]; + return [0, [19, fmt$18], fmtty$18]; + } + break; + case 20: + if(typeof fmtty !== "number" && 1 === fmtty[0]){ + var + fmtty_rest$14 = fmtty[1], + fmt_rest$19 = fmt[3], + char_set = fmt[2], + width_opt = fmt[1], + match$34 = type_format_gen(fmt_rest$19, fmtty_rest$14), + fmtty$19 = match$34[2], + fmt$19 = match$34[1]; + return [0, [20, width_opt, char_set, fmt$19], fmtty$19]; + } + break; + case 21: + if(typeof fmtty !== "number" && 2 === fmtty[0]){ + var + fmtty_rest$15 = fmtty[1], + fmt_rest$20 = fmt[2], + counter = fmt[1], + match$35 = type_format_gen(fmt_rest$20, fmtty_rest$15), + fmtty$20 = match$35[2], + fmt$20 = match$35[1]; + return [0, [21, counter, fmt$20], fmtty$20]; + } + break; + case 23: + var rest = fmt[2], ign = fmt[1]; + return type_ignored_param(ign, rest, fmtty); + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + } + function type_formatting_gen(formatting_gen, fmt0, fmtty0){ + if(0 === formatting_gen[0]){ + var + match = formatting_gen[1], + str = match[2], + fmt1 = match[1], + match$0 = type_format_gen(fmt1, fmtty0), + fmtty2 = match$0[2], + fmt2 = match$0[1], + match$1 = type_format_gen(fmt0, fmtty2), + fmtty3 = match$1[2], + fmt3 = match$1[1]; + return [0, [18, [0, [0, fmt2, str]], fmt3], fmtty3]; + } + var + match$2 = formatting_gen[1], + str$0 = match$2[2], + fmt1$0 = match$2[1], + match$3 = type_format_gen(fmt1$0, fmtty0), + fmtty2$0 = match$3[2], + fmt2$0 = match$3[1], + match$4 = type_format_gen(fmt0, fmtty2$0), + fmtty3$0 = match$4[2], + fmt3$0 = match$4[1]; + return [0, [18, [1, [0, fmt2$0, str$0]], fmt3$0], fmtty3$0]; + } + function type_ignored_param(ign, fmt, fmtty){ + if(typeof ign !== "number") + switch(ign[0]){ + case 0: + return type_ignored_param_one(ign, fmt, fmtty); + case 1: + return type_ignored_param_one(ign, fmt, fmtty); + case 2: + return type_ignored_param_one(ign, fmt, fmtty); + case 3: + return type_ignored_param_one(ign, fmt, fmtty); + case 4: + return type_ignored_param_one(ign, fmt, fmtty); + case 5: + return type_ignored_param_one(ign, fmt, fmtty); + case 6: + return type_ignored_param_one(ign, fmt, fmtty); + case 7: + return type_ignored_param_one(ign, fmt, fmtty); + case 8: + var sub_fmtty = ign[2], pad_opt = ign[1]; + return type_ignored_param_one([8, pad_opt, sub_fmtty], fmt, fmtty); + case 9: + var + sub_fmtty$0 = ign[2], + pad_opt$0 = ign[1], + _sz_ = type_ignored_format_substituti(sub_fmtty$0, fmt, fmtty), + match$0 = _sz_[2], + fmtty$1 = match$0[2], + fmt$1 = match$0[1], + sub_fmtty$1 = _sz_[1]; + return [0, [23, [9, pad_opt$0, sub_fmtty$1], fmt$1], fmtty$1]; + case 10: + return type_ignored_param_one(ign, fmt, fmtty); + default: return type_ignored_param_one(ign, fmt, fmtty); + } + switch(ign){ + case 0: + return type_ignored_param_one(ign, fmt, fmtty); + case 1: + return type_ignored_param_one(ign, fmt, fmtty); + case 2: + if(typeof fmtty !== "number" && 14 === fmtty[0]){ + var + fmtty_rest = fmtty[1], + match = type_format_gen(fmt, fmtty_rest), + fmtty$0 = match[2], + fmt$0 = match[1]; + return [0, [23, 2, fmt$0], fmtty$0]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + default: return type_ignored_param_one(ign, fmt, fmtty); + } + } + function type_ignored_param_one(ign, fmt, fmtty){ + var + match = type_format_gen(fmt, fmtty), + fmtty$0 = match[2], + fmt$0 = match[1]; + return [0, [23, ign, fmt$0], fmtty$0]; + } + function type_ignored_format_substituti(sub_fmtty, fmt, fmtty){ + if(typeof sub_fmtty === "number") + return [0, 0, type_format_gen(fmt, fmtty)]; + switch(sub_fmtty[0]){ + case 0: + if(typeof fmtty !== "number" && 0 === fmtty[0]){ + var + fmtty_rest = fmtty[1], + sub_fmtty_rest = sub_fmtty[1], + match = + type_ignored_format_substituti(sub_fmtty_rest, fmt, fmtty_rest), + fmt$0 = match[2], + sub_fmtty_rest$0 = match[1]; + return [0, [0, sub_fmtty_rest$0], fmt$0]; + } + break; + case 1: + if(typeof fmtty !== "number" && 1 === fmtty[0]){ + var + fmtty_rest$0 = fmtty[1], + sub_fmtty_rest$1 = sub_fmtty[1], + match$0 = + type_ignored_format_substituti(sub_fmtty_rest$1, fmt, fmtty_rest$0), + fmt$1 = match$0[2], + sub_fmtty_rest$2 = match$0[1]; + return [0, [1, sub_fmtty_rest$2], fmt$1]; + } + break; + case 2: + if(typeof fmtty !== "number" && 2 === fmtty[0]){ + var + fmtty_rest$1 = fmtty[1], + sub_fmtty_rest$3 = sub_fmtty[1], + match$1 = + type_ignored_format_substituti(sub_fmtty_rest$3, fmt, fmtty_rest$1), + fmt$2 = match$1[2], + sub_fmtty_rest$4 = match$1[1]; + return [0, [2, sub_fmtty_rest$4], fmt$2]; + } + break; + case 3: + if(typeof fmtty !== "number" && 3 === fmtty[0]){ + var + fmtty_rest$2 = fmtty[1], + sub_fmtty_rest$5 = sub_fmtty[1], + match$2 = + type_ignored_format_substituti(sub_fmtty_rest$5, fmt, fmtty_rest$2), + fmt$3 = match$2[2], + sub_fmtty_rest$6 = match$2[1]; + return [0, [3, sub_fmtty_rest$6], fmt$3]; + } + break; + case 4: + if(typeof fmtty !== "number" && 4 === fmtty[0]){ + var + fmtty_rest$3 = fmtty[1], + sub_fmtty_rest$7 = sub_fmtty[1], + match$3 = + type_ignored_format_substituti(sub_fmtty_rest$7, fmt, fmtty_rest$3), + fmt$4 = match$3[2], + sub_fmtty_rest$8 = match$3[1]; + return [0, [4, sub_fmtty_rest$8], fmt$4]; + } + break; + case 5: + if(typeof fmtty !== "number" && 5 === fmtty[0]){ + var + fmtty_rest$4 = fmtty[1], + sub_fmtty_rest$9 = sub_fmtty[1], + match$4 = + type_ignored_format_substituti(sub_fmtty_rest$9, fmt, fmtty_rest$4), + fmt$5 = match$4[2], + sub_fmtty_rest$10 = match$4[1]; + return [0, [5, sub_fmtty_rest$10], fmt$5]; + } + break; + case 6: + if(typeof fmtty !== "number" && 6 === fmtty[0]){ + var + fmtty_rest$5 = fmtty[1], + sub_fmtty_rest$11 = sub_fmtty[1], + match$5 = + type_ignored_format_substituti + (sub_fmtty_rest$11, fmt, fmtty_rest$5), + fmt$6 = match$5[2], + sub_fmtty_rest$12 = match$5[1]; + return [0, [6, sub_fmtty_rest$12], fmt$6]; + } + break; + case 7: + if(typeof fmtty !== "number" && 7 === fmtty[0]){ + var + fmtty_rest$6 = fmtty[1], + sub_fmtty_rest$13 = sub_fmtty[1], + match$6 = + type_ignored_format_substituti + (sub_fmtty_rest$13, fmt, fmtty_rest$6), + fmt$7 = match$6[2], + sub_fmtty_rest$14 = match$6[1]; + return [0, [7, sub_fmtty_rest$14], fmt$7]; + } + break; + case 8: + if(typeof fmtty !== "number" && 8 === fmtty[0]){ + var + fmtty_rest$7 = fmtty[2], + sub2_fmtty = fmtty[1], + sub_fmtty_rest$15 = sub_fmtty[2], + sub2_fmtty$0 = sub_fmtty[1]; + if(caml_notequal([0, sub2_fmtty$0], [0, sub2_fmtty])) + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + var + match$7 = + type_ignored_format_substituti + (sub_fmtty_rest$15, fmt, fmtty_rest$7), + fmt$8 = match$7[2], + sub_fmtty_rest$16 = match$7[1]; + return [0, [8, sub2_fmtty, sub_fmtty_rest$16], fmt$8]; + } + break; + case 9: + if(typeof fmtty !== "number" && 9 === fmtty[0]){ + var + fmtty_rest$8 = fmtty[3], + sub2_fmtty$1 = fmtty[2], + sub1_fmtty = fmtty[1], + sub_fmtty_rest$17 = sub_fmtty[3], + sub2_fmtty$2 = sub_fmtty[2], + sub1_fmtty$0 = sub_fmtty[1], + _sx_ = [0, erase_rel(sub1_fmtty)]; + if(caml_notequal([0, erase_rel(sub1_fmtty$0)], _sx_)) + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + var _sy_ = [0, erase_rel(sub2_fmtty$1)]; + if(caml_notequal([0, erase_rel(sub2_fmtty$2)], _sy_)) + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + var + sub_fmtty$0 = trans(symm(sub1_fmtty), sub2_fmtty$1), + match$8 = fmtty_rel_det(sub_fmtty$0), + f4 = match$8[4], + f2 = match$8[2]; + f2(0); + f4(0); + var + match$9 = + type_ignored_format_substituti + (erase_rel(sub_fmtty_rest$17), fmt, fmtty_rest$8), + fmt$9 = match$9[2], + sub_fmtty_rest$18 = match$9[1]; + return [0, + [9, sub1_fmtty, sub2_fmtty$1, symm(sub_fmtty_rest$18)], + fmt$9]; + } + break; + case 10: + if(typeof fmtty !== "number" && 10 === fmtty[0]){ + var + fmtty_rest$9 = fmtty[1], + sub_fmtty_rest$19 = sub_fmtty[1], + match$10 = + type_ignored_format_substituti + (sub_fmtty_rest$19, fmt, fmtty_rest$9), + fmt$10 = match$10[2], + sub_fmtty_rest$20 = match$10[1]; + return [0, [10, sub_fmtty_rest$20], fmt$10]; + } + break; + case 11: + if(typeof fmtty !== "number" && 11 === fmtty[0]){ + var + fmtty_rest$10 = fmtty[1], + sub_fmtty_rest$21 = sub_fmtty[1], + match$11 = + type_ignored_format_substituti + (sub_fmtty_rest$21, fmt, fmtty_rest$10), + fmt$11 = match$11[2], + sub_fmtty_rest$22 = match$11[1]; + return [0, [11, sub_fmtty_rest$22], fmt$11]; + } + break; + case 13: + if(typeof fmtty !== "number" && 13 === fmtty[0]){ + var + fmtty_rest$11 = fmtty[1], + sub_fmtty_rest$23 = sub_fmtty[1], + match$12 = + type_ignored_format_substituti + (sub_fmtty_rest$23, fmt, fmtty_rest$11), + fmt$12 = match$12[2], + sub_fmtty_rest$24 = match$12[1]; + return [0, [13, sub_fmtty_rest$24], fmt$12]; + } + break; + case 14: + if(typeof fmtty !== "number" && 14 === fmtty[0]){ + var + fmtty_rest$12 = fmtty[1], + sub_fmtty_rest$25 = sub_fmtty[1], + match$13 = + type_ignored_format_substituti + (sub_fmtty_rest$25, fmt, fmtty_rest$12), + fmt$13 = match$13[2], + sub_fmtty_rest$26 = match$13[1]; + return [0, [14, sub_fmtty_rest$26], fmt$13]; + } + break; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + } + function recast(fmt, fmtty){ + return type_format(fmt, erase_rel(symm(fmtty))); + } + function fix_padding(padty, width, str){ + var + len = caml_ml_string_length(str), + padty$0 = 0 <= width ? padty : 0, + width$0 = abs(width); + if(width$0 <= len) return str; + var _sw_ = 2 === padty$0 ? 48 : 32, res = make$0(width$0, _sw_); + switch(padty$0){ + case 0: + blit_string(str, 0, res, 0, len); break; + case 1: + blit_string(str, 0, res, width$0 - len | 0, len); break; + default: + a: + if(0 < len){ + if + (43 !== caml_string_get(str, 0) + && 45 !== caml_string_get(str, 0) && 32 !== caml_string_get(str, 0)) + break a; + caml_bytes_set(res, 0, caml_string_get(str, 0)); + blit_string(str, 1, res, (width$0 - len | 0) + 1 | 0, len - 1 | 0); + break; + } + a: + if(1 < len && 48 === caml_string_get(str, 0)){ + if(120 !== caml_string_get(str, 1) && 88 !== caml_string_get(str, 1)) + break a; + caml_bytes_set(res, 1, caml_string_get(str, 1)); + blit_string(str, 2, res, (width$0 - len | 0) + 2 | 0, len - 2 | 0); + break; + } + blit_string(str, 0, res, width$0 - len | 0, len); + } + return unsafe_to_string(res); + } + function fix_int_precision(prec, str){ + var + prec$0 = abs(prec), + len = caml_ml_string_length(str), + c = caml_string_get(str, 0); + a: + { + b: + { + if(58 > c){ + if(32 !== c){ + if(43 > c) break a; + switch(c - 43 | 0){ + case 5: + c: + if(len < (prec$0 + 2 | 0) && 1 < len){ + if + (120 !== caml_string_get(str, 1) + && 88 !== caml_string_get(str, 1)) + break c; + var res$1 = make$0(prec$0 + 2 | 0, 48); + caml_bytes_set(res$1, 1, caml_string_get(str, 1)); + blit_string + (str, 2, res$1, (prec$0 - len | 0) + 4 | 0, len - 2 | 0); + return unsafe_to_string(res$1); + } + break b; + case 0: + case 2: break; + case 1: + case 3: + case 4: + break a; + default: break b; + } + } + if(len >= (prec$0 + 1 | 0)) break a; + var res$0 = make$0(prec$0 + 1 | 0, 48); + caml_bytes_set(res$0, 0, c); + blit_string(str, 1, res$0, (prec$0 - len | 0) + 2 | 0, len - 1 | 0); + return unsafe_to_string(res$0); + } + if(71 <= c){if(5 < c - 97 >>> 0) break a;} else if(65 > c) break a; + } + if(len < prec$0){ + var res = make$0(prec$0, 48); + blit_string(str, 0, res, prec$0 - len | 0, len); + return unsafe_to_string(res); + } + } + return str; + } + function string_to_caml_string(str){ + var + str$0 = escaped$1(str), + l = caml_ml_string_length(str$0), + res = make$0(l + 2 | 0, 34); + caml_blit_string(str$0, 0, res, 1, l); + return unsafe_to_string(res); + } + function format_of_iconv(param){ + switch(param){ + case 1: + return _aH_; + case 2: + return _aI_; + case 4: + return _aK_; + case 5: + return _aL_; + case 6: + return _aM_; + case 7: + return _aN_; + case 8: + return _aO_; + case 9: + return _aP_; + case 10: + return _aQ_; + case 11: + return _aR_; + case 0: + case 13: + return _aG_; + case 3: + case 14: + return _aJ_; + default: return _aS_; + } + } + function format_of_iconvL(param){ + switch(param){ + case 1: + return _aU_; + case 2: + return _aV_; + case 4: + return _aX_; + case 5: + return _aY_; + case 6: + return _aZ_; + case 7: + return _a0_; + case 8: + return _a1_; + case 9: + return _a2_; + case 10: + return _a3_; + case 11: + return _a4_; + case 0: + case 13: + return _aT_; + case 3: + case 14: + return _aW_; + default: return _a5_; + } + } + function format_of_iconvl(param){ + switch(param){ + case 1: + return _a7_; + case 2: + return _a8_; + case 4: + return _a__; + case 5: + return _a$_; + case 6: + return _ba_; + case 7: + return _bb_; + case 8: + return _bc_; + case 9: + return _bd_; + case 10: + return _be_; + case 11: + return _bf_; + case 0: + case 13: + return _a6_; + case 3: + case 14: + return _a9_; + default: return _bg_; + } + } + function format_of_iconvn(param){ + switch(param){ + case 1: + return _bi_; + case 2: + return _bj_; + case 4: + return _bl_; + case 5: + return _bm_; + case 6: + return _bn_; + case 7: + return _bo_; + case 8: + return _bp_; + case 9: + return _bq_; + case 10: + return _br_; + case 11: + return _bs_; + case 0: + case 13: + return _bh_; + case 3: + case 14: + return _bk_; + default: return _bt_; + } + } + function format_of_fconv(fconv, prec){ + var + prec$0 = abs(prec), + symb = char_of_fconv(_bu_, fconv), + buf = buffer_create(16); + buffer_add_char(buf, 37); + bprint_fconv_flag(buf, fconv); + buffer_add_char(buf, 46); + buffer_add_string(buf, to_string(prec$0)); + buffer_add_char(buf, symb); + return buffer_contents(buf); + } + function transform_int_alt(iconv, s){ + if(13 > iconv) return s; + var n = [0, 0], _sr_ = caml_ml_string_length(s) - 1 | 0, _sq_ = 0; + if(_sr_ >= 0){ + var i$0 = _sq_; + for(;;){ + if(9 >= caml_string_unsafe_get(s, i$0) - 48 >>> 0) n[1]++; + var _sv_ = i$0 + 1 | 0; + if(_sr_ === i$0) break; + var i$0 = _sv_; + } + } + var + digits = n[1], + buf = + caml_create_bytes + (caml_ml_string_length(s) + ((digits - 1 | 0) / 3 | 0) | 0), + pos = [0, 0]; + function put(c){caml_bytes_set(buf, pos[1], c); pos[1]++; return;} + var + left = [0, ((digits - 1 | 0) % 3 | 0) + 1 | 0], + _st_ = caml_ml_string_length(s) - 1 | 0, + _ss_ = 0; + if(_st_ >= 0){ + var i = _ss_; + for(;;){ + var c = caml_string_unsafe_get(s, i); + if(9 < c - 48 >>> 0) + put(c); + else{if(0 === left[1]){put(95); left[1] = 3;} left[1] += -1; put(c);} + var _su_ = i + 1 | 0; + if(_st_ === i) break; + var i = _su_; + } + } + return unsafe_to_string(buf); + } + function convert_int(iconv, n){ + return transform_int_alt + (iconv, caml_format_int(format_of_iconv(iconv), n)); + } + function convert_int32(iconv, n){ + return transform_int_alt + (iconv, caml_format_int(format_of_iconvl(iconv), n)); + } + function convert_nativeint(iconv, n){ + return transform_int_alt + (iconv, caml_format_int(format_of_iconvn(iconv), n)); + } + function convert_int64(iconv, n){ + return transform_int_alt + (iconv, caml_int64_format(format_of_iconvL(iconv), n)); + } + function convert_float(fconv, prec, x){ + function hex(param){ + switch(fconv[1]){ + case 0: + var sign = 45; break; + case 1: + var sign = 43; break; + default: var sign = 32; + } + return caml_hexstring_of_float(x, prec, sign); + } + function add_dot_if_needed(str){ + var len = caml_ml_string_length(str); + function is_valid(i){ + var i$0 = i; + for(;;){ + if(i$0 === len) return 0; + var _sp_ = caml_string_get(str, i$0) - 46 | 0; + a: + { + if(23 < _sp_ >>> 0){ + if(55 === _sp_) break a; + } + else if(21 < _sp_ - 1 >>> 0) break a; + var i$1 = i$0 + 1 | 0, i$0 = i$1; + continue; + } + return 1; + } + } + return is_valid(0) ? str : symbol(str, _bv_); + } + function caml_special_val(str){ + var match = caml_classify_float(x); + return 3 === match ? x < 0. ? _bw_ : _bx_ : 4 <= match ? _by_ : str; + } + switch(fconv[2]){ + case 5: + var str = caml_format_float(format_of_fconv(fconv, prec), x); + return caml_special_val(add_dot_if_needed(str)); + case 6: + return hex(0); + case 7: + return uppercase_ascii$1(hex(0)); + case 8: + return caml_special_val(hex(0)); + default: return caml_format_float(format_of_fconv(fconv, prec), x); + } + } + function format_caml_char(c){ + var + str = escaped(c), + l = caml_ml_string_length(str), + res = make$0(l + 2 | 0, 39); + caml_blit_string(str, 0, res, 1, l); + return unsafe_to_string(res); + } + function string_of_fmtty(fmtty){ + var buf = buffer_create(16); + bprint_fmtty(buf, fmtty); + return buffer_contents(buf); + } + function make_printf$0(counter, k, acc, fmt){ + var k$0 = k, acc$0 = acc, fmt$0 = fmt; + for(;;){ + if(typeof fmt$0 === "number") return caml_call1(k$0, acc$0); + switch(fmt$0[0]){ + case 0: + var rest = fmt$0[1]; + return function(c){ + var new_acc = [5, acc$0, c]; + return make_printf(k$0, new_acc, rest);}; + case 1: + var rest$0 = fmt$0[1]; + return function(c){ + var new_acc = [4, acc$0, format_caml_char(c)]; + return make_printf(k$0, new_acc, rest$0);}; + case 2: + var rest$1 = fmt$0[2], pad = fmt$0[1]; + return make_padding + (k$0, acc$0, rest$1, pad, function(str){return str;}); + case 3: + var rest$2 = fmt$0[2], pad$0 = fmt$0[1]; + return make_padding(k$0, acc$0, rest$2, pad$0, string_to_caml_string); + case 4: + var + rest$3 = fmt$0[4], + prec = fmt$0[3], + pad$1 = fmt$0[2], + iconv = fmt$0[1]; + return make_int_padding_precision + (k$0, acc$0, rest$3, pad$1, prec, convert_int, iconv); + case 5: + var + rest$4 = fmt$0[4], + prec$0 = fmt$0[3], + pad$2 = fmt$0[2], + iconv$0 = fmt$0[1]; + return make_int_padding_precision + (k$0, acc$0, rest$4, pad$2, prec$0, convert_int32, iconv$0); + case 6: + var + rest$5 = fmt$0[4], + prec$1 = fmt$0[3], + pad$3 = fmt$0[2], + iconv$1 = fmt$0[1]; + return make_int_padding_precision + (k$0, + acc$0, + rest$5, + pad$3, + prec$1, + convert_nativeint, + iconv$1); + case 7: + var + rest$6 = fmt$0[4], + prec$2 = fmt$0[3], + pad$4 = fmt$0[2], + iconv$2 = fmt$0[1]; + return make_int_padding_precision + (k$0, acc$0, rest$6, pad$4, prec$2, convert_int64, iconv$2); + case 8: + var + rest$7 = fmt$0[4], + prec$3 = fmt$0[3], + pad$5 = fmt$0[2], + fconv = fmt$0[1]; + return make_float_padding_precision + (k$0, acc$0, rest$7, pad$5, prec$3, fconv); + case 9: + var rest$8 = fmt$0[2], pad$6 = fmt$0[1]; + return make_padding(k$0, acc$0, rest$8, pad$6, string_of_bool); + case 10: + var + rest$9 = fmt$0[1], + acc$1 = [7, acc$0], + acc$0 = acc$1, + fmt$0 = rest$9; + break; + case 11: + var + rest$10 = fmt$0[2], + str = fmt$0[1], + acc$2 = [2, acc$0, str], + acc$0 = acc$2, + fmt$0 = rest$10; + break; + case 12: + var + rest$11 = fmt$0[2], + chr = fmt$0[1], + acc$3 = [3, acc$0, chr], + acc$0 = acc$3, + fmt$0 = rest$11; + break; + case 13: + var + rest$12 = fmt$0[3], + sub_fmtty = fmt$0[2], + ty = string_of_fmtty(sub_fmtty); + return function(str){ + return make_printf(k$0, [4, acc$0, ty], rest$12);}; + case 14: + var rest$13 = fmt$0[3], fmtty = fmt$0[2]; + return function(param){ + var fmt = param[1]; + return make_printf + (k$0, acc$0, concat_fmt(recast(fmt, fmtty), rest$13));}; + case 15: + var rest$14 = fmt$0[1]; + return function(f, x){ + return make_printf + (k$0, + [6, acc$0, function(o){return caml_call2(f, o, x);}], + rest$14);}; + case 16: + var rest$15 = fmt$0[1]; + return function(f){return make_printf(k$0, [6, acc$0, f], rest$15);}; + case 17: + var + rest$16 = fmt$0[2], + fmting_lit = fmt$0[1], + acc$4 = [0, acc$0, fmting_lit], + acc$0 = acc$4, + fmt$0 = rest$16; + break; + case 18: + var _sn_ = fmt$0[1]; + if(0 === _sn_[0]){ + var rest$17 = fmt$0[2], fmt$1 = _sn_[1][1]; + let acc = acc$0, k = k$0, rest = rest$17; + var + k$1 = + function(kacc){return make_printf(k, [1, acc, [0, kacc]], rest);}, + k$0 = k$1, + acc$0 = 0, + fmt$0 = fmt$1; + } + else{ + var rest$18 = fmt$0[2], fmt$2 = _sn_[1][1]; + let acc = acc$0, k = k$0, rest = rest$18; + var + k$2 = + function(kacc){return make_printf(k, [1, acc, [1, kacc]], rest);}, + k$0 = k$2, + acc$0 = 0, + fmt$0 = fmt$2; + } + break; + case 19: + throw caml_maybe_attach_backtrace([0, Assert_failure, _bz_], 1); + case 20: + var rest$19 = fmt$0[3], new_acc = [8, acc$0, _bA_]; + return function(param){return make_printf(k$0, new_acc, rest$19);}; + case 21: + var rest$20 = fmt$0[2]; + return function(n){ + var new_acc = [4, acc$0, caml_format_int(cst_u, n)]; + return make_printf(k$0, new_acc, rest$20);}; + case 22: + var rest$21 = fmt$0[1]; + return function(c){ + var new_acc = [5, acc$0, c]; + return make_printf(k$0, new_acc, rest$21);}; + case 23: + var rest$22 = fmt$0[2], ign = fmt$0[1]; + if(counter >= 50) + return caml_trampoline_return + (make_ignored_param, [0, k$0, acc$0, ign, rest$22]); + var counter$1 = counter + 1 | 0; + return make_ignored_param(counter$1, k$0, acc$0, ign, rest$22); + default: + var + rest$23 = fmt$0[3], + f = fmt$0[2], + arity = fmt$0[1], + _so_ = caml_call1(f, 0); + if(counter >= 50) + return caml_trampoline_return + (make_custom$0, [0, k$0, acc$0, rest$23, arity, _so_]); + var counter$0 = counter + 1 | 0; + return make_custom$0(counter$0, k$0, acc$0, rest$23, arity, _so_); + } + } + } + function make_printf(k, acc, fmt){ + return caml_trampoline(make_printf$0(0, k, acc, fmt)); + } + function make_ignored_param(counter, k, acc, ign, fmt){ + if(typeof ign === "number") + switch(ign){ + case 0: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$0 = counter + 1 | 0; + return make_invalid_arg(counter$0, k, acc, fmt); + case 1: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$1 = counter + 1 | 0; + return make_invalid_arg(counter$1, k, acc, fmt); + case 2: + throw caml_maybe_attach_backtrace([0, Assert_failure, _bB_], 1); + default: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$2 = counter + 1 | 0; + return make_invalid_arg(counter$2, k, acc, fmt); + } + switch(ign[0]){ + case 0: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$3 = counter + 1 | 0; + return make_invalid_arg(counter$3, k, acc, fmt); + case 1: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$4 = counter + 1 | 0; + return make_invalid_arg(counter$4, k, acc, fmt); + case 2: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$5 = counter + 1 | 0; + return make_invalid_arg(counter$5, k, acc, fmt); + case 3: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$6 = counter + 1 | 0; + return make_invalid_arg(counter$6, k, acc, fmt); + case 4: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$7 = counter + 1 | 0; + return make_invalid_arg(counter$7, k, acc, fmt); + case 5: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$8 = counter + 1 | 0; + return make_invalid_arg(counter$8, k, acc, fmt); + case 6: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$9 = counter + 1 | 0; + return make_invalid_arg(counter$9, k, acc, fmt); + case 7: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$10 = counter + 1 | 0; + return make_invalid_arg(counter$10, k, acc, fmt); + case 8: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$11 = counter + 1 | 0; + return make_invalid_arg(counter$11, k, acc, fmt); + case 9: + var fmtty = ign[2]; + if(counter >= 50) + return caml_trampoline_return + (make_from_fmtty$0, [0, k, acc, fmtty, fmt]); + var counter$14 = counter + 1 | 0; + return make_from_fmtty$0(counter$14, k, acc, fmtty, fmt); + case 10: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$12 = counter + 1 | 0; + return make_invalid_arg(counter$12, k, acc, fmt); + default: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$13 = counter + 1 | 0; + return make_invalid_arg(counter$13, k, acc, fmt); + } + } + function make_from_fmtty$0(counter, k, acc, fmtty, fmt){ + if(typeof fmtty !== "number") + switch(fmtty[0]){ + case 0: + var rest = fmtty[1]; + return function(param){return make_from_fmtty(k, acc, rest, fmt);}; + case 1: + var rest$0 = fmtty[1]; + return function(param){return make_from_fmtty(k, acc, rest$0, fmt);}; + case 2: + var rest$1 = fmtty[1]; + return function(param){return make_from_fmtty(k, acc, rest$1, fmt);}; + case 3: + var rest$2 = fmtty[1]; + return function(param){return make_from_fmtty(k, acc, rest$2, fmt);}; + case 4: + var rest$3 = fmtty[1]; + return function(param){return make_from_fmtty(k, acc, rest$3, fmt);}; + case 5: + var rest$4 = fmtty[1]; + return function(param){return make_from_fmtty(k, acc, rest$4, fmt);}; + case 6: + var rest$5 = fmtty[1]; + return function(param){return make_from_fmtty(k, acc, rest$5, fmt);}; + case 7: + var rest$6 = fmtty[1]; + return function(param){return make_from_fmtty(k, acc, rest$6, fmt);}; + case 8: + var rest$7 = fmtty[2]; + return function(param){return make_from_fmtty(k, acc, rest$7, fmt);}; + case 9: + var + rest$8 = fmtty[3], + ty2 = fmtty[2], + ty1 = fmtty[1], + ty = trans(symm(ty1), ty2); + return function(param){ + return make_from_fmtty(k, acc, concat_fmtty(ty, rest$8), fmt);}; + case 10: + var rest$9 = fmtty[1]; + return function(param, _sm_){ + return make_from_fmtty(k, acc, rest$9, fmt);}; + case 11: + var rest$10 = fmtty[1]; + return function(param){return make_from_fmtty(k, acc, rest$10, fmt);}; + case 12: + var rest$11 = fmtty[1]; + return function(param){return make_from_fmtty(k, acc, rest$11, fmt);}; + case 13: + throw caml_maybe_attach_backtrace([0, Assert_failure, _bC_], 1); + default: + throw caml_maybe_attach_backtrace([0, Assert_failure, _bD_], 1); + } + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$0 = counter + 1 | 0; + return make_invalid_arg(counter$0, k, acc, fmt); + } + function make_from_fmtty(k, acc, fmtty, fmt){ + return caml_trampoline(make_from_fmtty$0(0, k, acc, fmtty, fmt)); + } + function make_invalid_arg(counter, k, acc, fmt){ + var _sl_ = [8, acc, _bE_]; + if(counter >= 50) + return caml_trampoline_return(make_printf$0, [0, k, _sl_, fmt]); + var counter$0 = counter + 1 | 0; + return make_printf$0(counter$0, k, _sl_, fmt); + } + function make_padding(k, acc, fmt, pad, trans){ + if(typeof pad === "number") + return function(x){ + var new_acc = [4, acc, caml_call1(trans, x)]; + return make_printf(k, new_acc, fmt);}; + if(0 === pad[0]){ + var width = pad[2], padty = pad[1]; + return function(x){ + var new_acc = [4, acc, fix_padding(padty, width, caml_call1(trans, x))]; + return make_printf(k, new_acc, fmt);}; + } + var padty$0 = pad[1]; + return function(w, x){ + var new_acc = [4, acc, fix_padding(padty$0, w, caml_call1(trans, x))]; + return make_printf(k, new_acc, fmt);}; + } + function make_int_padding_precision(k, acc, fmt, pad, prec, trans, iconv){ + if(typeof pad === "number"){ + if(typeof prec === "number") + return prec + ? function + (p, x){ + var str = fix_int_precision(p, caml_call2(trans, iconv, x)); + return make_printf(k, [4, acc, str], fmt); + } + : function + (x){ + var str = caml_call2(trans, iconv, x); + return make_printf(k, [4, acc, str], fmt); + }; + var p = prec[1]; + return function(x){ + var str = fix_int_precision(p, caml_call2(trans, iconv, x)); + return make_printf(k, [4, acc, str], fmt);}; + } + if(0 === pad[0]){ + var w = pad[2], padty = pad[1]; + if(typeof prec === "number") + return prec + ? function + (p, x){ + var + str = + fix_padding + (padty, + w, + fix_int_precision(p, caml_call2(trans, iconv, x))); + return make_printf(k, [4, acc, str], fmt); + } + : function + (x){ + var str = fix_padding(padty, w, caml_call2(trans, iconv, x)); + return make_printf(k, [4, acc, str], fmt); + }; + var p$0 = prec[1]; + return function(x){ + var + str = + fix_padding + (padty, w, fix_int_precision(p$0, caml_call2(trans, iconv, x))); + return make_printf(k, [4, acc, str], fmt);}; + } + var padty$0 = pad[1]; + if(typeof prec === "number") + return prec + ? function + (w, p, x){ + var + str = + fix_padding + (padty$0, + w, + fix_int_precision(p, caml_call2(trans, iconv, x))); + return make_printf(k, [4, acc, str], fmt); + } + : function + (w, x){ + var str = fix_padding(padty$0, w, caml_call2(trans, iconv, x)); + return make_printf(k, [4, acc, str], fmt); + }; + var p$1 = prec[1]; + return function(w, x){ + var + str = + fix_padding + (padty$0, w, fix_int_precision(p$1, caml_call2(trans, iconv, x))); + return make_printf(k, [4, acc, str], fmt);}; + } + function make_float_padding_precision(k, acc, fmt, pad, prec, fconv){ + if(typeof pad === "number"){ + if(typeof prec === "number") + return prec + ? function + (p, x){ + var str = convert_float(fconv, p, x); + return make_printf(k, [4, acc, str], fmt); + } + : function + (x){ + var + str = convert_float(fconv, default_float_precision(fconv), x); + return make_printf(k, [4, acc, str], fmt); + }; + var p = prec[1]; + return function(x){ + var str = convert_float(fconv, p, x); + return make_printf(k, [4, acc, str], fmt);}; + } + if(0 === pad[0]){ + var w = pad[2], padty = pad[1]; + if(typeof prec === "number") + return prec + ? function + (p, x){ + var str = fix_padding(padty, w, convert_float(fconv, p, x)); + return make_printf(k, [4, acc, str], fmt); + } + : function + (x){ + var + str = convert_float(fconv, default_float_precision(fconv), x), + str$0 = fix_padding(padty, w, str); + return make_printf(k, [4, acc, str$0], fmt); + }; + var p$0 = prec[1]; + return function(x){ + var str = fix_padding(padty, w, convert_float(fconv, p$0, x)); + return make_printf(k, [4, acc, str], fmt);}; + } + var padty$0 = pad[1]; + if(typeof prec === "number") + return prec + ? function + (w, p, x){ + var str = fix_padding(padty$0, w, convert_float(fconv, p, x)); + return make_printf(k, [4, acc, str], fmt); + } + : function + (w, x){ + var + str = convert_float(fconv, default_float_precision(fconv), x), + str$0 = fix_padding(padty$0, w, str); + return make_printf(k, [4, acc, str$0], fmt); + }; + var p$1 = prec[1]; + return function(w, x){ + var str = fix_padding(padty$0, w, convert_float(fconv, p$1, x)); + return make_printf(k, [4, acc, str], fmt);}; + } + function make_custom$0(counter, k, acc, rest, arity, f){ + if(arity){ + var arity$0 = arity[1]; + return function(x){ + return make_custom(k, acc, rest, arity$0, caml_call1(f, x));}; + } + var _sk_ = [4, acc, f]; + if(counter >= 50) + return caml_trampoline_return(make_printf$0, [0, k, _sk_, rest]); + var counter$0 = counter + 1 | 0; + return make_printf$0(counter$0, k, _sk_, rest); + } + function make_custom(k, acc, rest, arity, f){ + return caml_trampoline(make_custom$0(0, k, acc, rest, arity, f)); + } + function output_acc(o, acc){ + var acc$0 = acc; + for(;;){ + if(typeof acc$0 === "number") return; + switch(acc$0[0]){ + case 0: + var + fmting_lit = acc$0[2], + p = acc$0[1], + s = string_of_formatting_lit(fmting_lit); + output_acc(o, p); + return output_string(o, s); + case 1: + var match = acc$0[2], p$0 = acc$0[1]; + if(0 === match[0]){ + var acc$1 = match[1]; + output_acc(o, p$0); + output_string(o, _bF_); + var acc$0 = acc$1; + } + else{ + var acc$2 = match[1]; + output_acc(o, p$0); + output_string(o, _bG_); + var acc$0 = acc$2; + } + break; + case 6: + var f = acc$0[2], p$3 = acc$0[1]; + output_acc(o, p$3); + return caml_call1(f, o); + case 7: + var p$4 = acc$0[1]; output_acc(o, p$4); return _k_(o); + case 8: + var msg = acc$0[2], p$5 = acc$0[1]; + output_acc(o, p$5); + return invalid_arg(msg); + case 2: + case 4: + var s$0 = acc$0[2], p$1 = acc$0[1]; + output_acc(o, p$1); + return output_string(o, s$0); + default: + var c = acc$0[2], p$2 = acc$0[1]; + output_acc(o, p$2); + return _j_(o, c); + } + } + } + function strput_acc(b, acc){ + var acc$0 = acc; + for(;;){ + if(typeof acc$0 === "number") return; + switch(acc$0[0]){ + case 0: + var + fmting_lit = acc$0[2], + p = acc$0[1], + s = string_of_formatting_lit(fmting_lit); + strput_acc(b, p); + return add_string(b, s); + case 1: + var match = acc$0[2], p$0 = acc$0[1]; + if(0 === match[0]){ + var acc$1 = match[1]; + strput_acc(b, p$0); + add_string(b, _bH_); + var acc$0 = acc$1; + } + else{ + var acc$2 = match[1]; + strput_acc(b, p$0); + add_string(b, _bI_); + var acc$0 = acc$2; + } + break; + case 6: + var f = acc$0[2], p$3 = acc$0[1]; + strput_acc(b, p$3); + return add_string(b, caml_call1(f, 0)); + case 7: + var acc$3 = acc$0[1], acc$0 = acc$3; break; + case 8: + var msg = acc$0[2], p$4 = acc$0[1]; + strput_acc(b, p$4); + return invalid_arg(msg); + case 2: + case 4: + var s$0 = acc$0[2], p$1 = acc$0[1]; + strput_acc(b, p$1); + return add_string(b, s$0); + default: + var c = acc$0[2], p$2 = acc$0[1]; + strput_acc(b, p$2); + return add_char(b, c); + } + } + } + function failwith_message(param){ + var fmt = param[1], buf = create$1(256); + function k(acc){strput_acc(buf, acc); return failwith(contents(buf));} + return make_printf(k, 0, fmt); + } + function open_box_of_string(str){ + if(caml_string_equal(str, cst$1)) return _bJ_; + var len = caml_ml_string_length(str); + function invalid_box(param){ + return caml_call1(failwith_message(_bK_), str); + } + function parse_spaces(i){ + var i$0 = i; + for(;;){ + if(i$0 === len) return i$0; + var match = caml_string_get(str, i$0); + if(9 !== match && 32 !== match) return i$0; + var i$1 = i$0 + 1 | 0, i$0 = i$1; + } + } + function parse_lword(i, j){ + var j$0 = j; + for(;;){ + if(j$0 === len) return j$0; + if(25 < caml_string_get(str, j$0) - 97 >>> 0) return j$0; + var j$1 = j$0 + 1 | 0, j$0 = j$1; + } + } + function parse_int(i, j){ + var j$0 = j; + for(;;){ + if(j$0 === len) return j$0; + var match = caml_string_get(str, j$0); + a: + { + if(48 <= match){if(58 > match) break a;} else if(45 === match) break a; + return j$0; + } + var j$1 = j$0 + 1 | 0, j$0 = j$1; + } + } + var + wstart = parse_spaces(0), + wend = parse_lword(wstart, wstart), + box_name = sub$0(str, wstart, wend - wstart | 0), + nstart = parse_spaces(wend), + nend = parse_int(nstart, nstart); + if(nstart === nend) + var indent = 0; + else + try{ + var + _si_ = caml_int_of_string(sub$0(str, nstart, nend - nstart | 0)), + indent = _si_; + } + catch(_sj_){ + var _sg_ = caml_wrap_exception(_sj_); + if(_sg_[1] !== Failure) throw caml_maybe_attach_backtrace(_sg_, 0); + var _sh_ = invalid_box(0), indent = _sh_; + } + var exp_end = parse_spaces(nend); + if(exp_end !== len) invalid_box(0); + a: + { + if + (caml_string_notequal(box_name, cst$1) + && caml_string_notequal(box_name, "b")){ + if(! caml_string_notequal(box_name, "h")){var box_type = 0; break a;} + if(! caml_string_notequal(box_name, "hov")){var box_type = 3; break a;} + if(! caml_string_notequal(box_name, "hv")){var box_type = 2; break a;} + if(caml_string_notequal(box_name, "v")){ + var box_type = invalid_box(0); + break a; + } + var box_type = 1; + break a; + } + var box_type = 4; + } + return [0, indent, box_type]; + } + function kfprintf(k, o, param){ + var fmt = param[1]; + return make_printf + (function(acc){output_acc(o, acc); return caml_call1(k, o);}, + 0, + fmt); + } + function fprintf(oc, fmt){ + return kfprintf(function(_sf_){return 0;}, oc, fmt); + } + function eprintf(fmt){return fprintf(stderr, fmt);} + function ksprintf(k, param){ + var fmt = param[1]; + function k$0(acc){ + var buf = create$1(64); + strput_acc(buf, acc); + return caml_call1(k, contents(buf)); + } + return make_printf(k$0, 0, fmt); + } + function sprintf(fmt){return ksprintf(function(s){return s;}, fmt);} + var printers = make(0); + function field(x, i){ + var f = x[1 + i]; + return is_block(f) + ? caml_obj_tag + (f) + === 252 + ? caml_call1(sprintf(_bL_), f) + : caml_obj_tag(f) === 253 ? string_of_float(f) : _bM_ + : caml_call1(sprintf(_bN_), f); + } + function other_fields(x, i){ + if(x.length - 1 <= i) return _bO_; + var _sd_ = other_fields(x, i + 1 | 0), _se_ = field(x, i); + return caml_call2(sprintf(_bP_), _se_, _sd_); + } + function fields(x){ + var match = x.length - 1; + if(2 >= match >>> 0) + switch(match){ + case 0: + return _bR_; + case 1: + return _bS_; + default: + var _sc_ = field(x, 1); return caml_call1(sprintf(_bT_), _sc_); + } + var _sa_ = other_fields(x, 2), _sb_ = field(x, 1); + return caml_call2(sprintf(_bQ_), _sb_, _sa_); + } + function use_printers(x){ + function conv(param){ + var param$0 = param; + for(;;){ + if(! param$0) return 0; + var tl = param$0[2], hd = param$0[1]; + a: + { + try{var val = caml_call1(hd, x);}catch(_r$_){break a;} + if(val){var s = val[1]; return [0, s];} + } + var param$0 = tl; + } + } + return conv(get(printers)); + } + function to_string_default(x){ + if(x === Out_of_memory) return _bU_; + if(x === Stack_overflow) return _bV_; + if(x[1] === Match_failure){ + var match = x[2], char$0 = match[3], line = match[2], file = match[1]; + return caml_call5 + (sprintf(locfmt), file, line, char$0, char$0 + 5 | 0, _bW_); + } + if(x[1] === Assert_failure){ + var + match$0 = x[2], + char$1 = match$0[3], + line$0 = match$0[2], + file$0 = match$0[1]; + return caml_call5 + (sprintf(locfmt), file$0, line$0, char$1, char$1 + 6 | 0, _bX_); + } + if(x[1] === Undefined_recursive_module){ + var + match$1 = x[2], + char$2 = match$1[3], + line$1 = match$1[2], + file$1 = match$1[1]; + return caml_call5 + (sprintf(locfmt), file$1, line$1, char$2, char$2 + 6 | 0, _bY_); + } + if(0 !== caml_obj_tag(x)) return x[1]; + var constructor = x[1][1]; + return symbol(constructor, fields(x)); + } + function to_string$0(e){ + var match = use_printers(e); + if(! match) return to_string_default(e); + var s = match[1]; + return s; + } + function convert_raw_backtrace(bt){ + var _r__ = [0, caml_convert_raw_backtrace(bt)]; + return _r__; + } + function format_backtrace_slot(pos, slot){ + function info(is_raise){ + return is_raise ? 0 === pos ? _bZ_ : _b0_ : 0 === pos ? _b1_ : _b2_; + } + if(0 === slot[0]){ + var + _r2_ = slot[5], + _r3_ = slot[4], + _r4_ = slot[3], + _r5_ = slot[6] ? _b3_ : _b5_, + _r6_ = slot[2], + _r7_ = slot[7], + _r8_ = info(slot[1]); + return [0, + caml_call7 + (sprintf(_b4_), _r8_, _r7_, _r6_, _r5_, _r4_, _r3_, _r2_)]; + } + if(slot[1]) return 0; + var _r9_ = info(0); + return [0, caml_call1(sprintf(_b6_), _r9_)]; + } + function print_exception_backtrace(outchan, backtrace){ + if(! backtrace) return fprintf(outchan, _b8_); + var a = backtrace[1], _r0_ = a.length - 1 - 1 | 0, _rZ_ = 0; + if(_r0_ >= 0){ + var i = _rZ_; + for(;;){ + var match = format_backtrace_slot(i, caml_check_bound(a, i)[1 + i]); + if(match){var str = match[1]; caml_call1(fprintf(outchan, _b7_), str);} + var _r1_ = i + 1 | 0; + if(_r0_ === i) break; + var i = _r1_; + } + } + return; + } + function print_raw_backtrace(outchan, raw_backtrace){ + return print_exception_backtrace + (outchan, convert_raw_backtrace(raw_backtrace)); + } + function register_printer(fn){ + for(;;){ + var + old_printers = get(printers), + new_printers = [0, fn, old_printers], + success = compare_and_set(printers, old_printers, new_printers), + _rY_ = 1 - success; + if(! _rY_) return _rY_; + } + } + var errors = _b9_.slice(); + function default_uncaught_exception_han(exn, raw_backtrace){ + var _rW_ = to_string$0(exn); + caml_call1(eprintf(_b__), _rW_); + print_raw_backtrace(stderr, raw_backtrace); + var status = caml_ml_debug_info_status(0); + if(status < 0){ + var _rX_ = abs(status); + prerr_endline(caml_check_bound(errors, _rX_)[1 + _rX_]); + } + return _k_(stderr); + } + var empty_backtrace = [0]; + function try_get_raw_backtrace(param){ + var _rV_ = caml_get_exception_raw_backtrace(0); + return _rV_; + } + function handle_uncaught_exception(exn, debugger_in_use){ + try{ + var + raw_backtrace = + debugger_in_use ? empty_backtrace : try_get_raw_backtrace(0); + try{do_at_exit(0);}catch(_rU_){} + try{ + var + _rS_ = default_uncaught_exception_han(exn, raw_backtrace), + _rR_ = _rS_; + } + catch(exn$1){ + var + exn$0 = caml_wrap_exception(exn$1), + raw_backtrace$0 = try_get_raw_backtrace(0), + _rP_ = to_string$0(exn); + caml_call1(eprintf(_ca_), _rP_); + print_raw_backtrace(stderr, raw_backtrace); + var _rQ_ = to_string$0(exn$0); + caml_call1(eprintf(_cb_), _rQ_); + print_raw_backtrace(stderr, raw_backtrace$0); + var _rR_ = _k_(stderr); + } + return _rR_; + } + catch(_rT_){ + var _rO_ = caml_wrap_exception(_rT_); + if(_rO_ === Out_of_memory) return prerr_endline(_b$_); + throw caml_maybe_attach_backtrace(_rO_, 0); + } + } + function handle_uncaught_exception$0(exn, debugger_in_use){ + try{ + var _rM_ = handle_uncaught_exception(exn, debugger_in_use); + return _rM_; + } + catch(_rN_){return 0;} + } + caml_register_named_value + ("Printexc.handle_uncaught_exception", handle_uncaught_exception$0); + var Finally_raised = [248, _cc_, caml_fresh_oo_id(0)]; + register_printer + (function(param){ + if(param[1] !== Finally_raised) return 0; + var exn = param[2]; + return [0, symbol(_cd_, to_string$0(exn))]; + }); + function string(str){ + return caml_md5_string(str, 0, caml_ml_string_length(str)); + } + function new_state(param){return [0, caml_make_vect(55, 0), 0];} + function assign(st1, st2){ + blit$0(st2[1], 0, st1[1], 0, 55); + st1[2] = st2[2]; + return; + } + function full_init(s, seed){ + function combine(accu, x){return string(symbol(accu, to_string(x)));} + function extract(d){ + var + _rJ_ = caml_string_get(d, 3) << 24, + _rK_ = caml_string_get(d, 2) << 16, + _rL_ = caml_string_get(d, 1) << 8; + return ((caml_string_get(d, 0) + _rL_ | 0) + _rK_ | 0) + _rJ_ | 0; + } + var + seed$0 = 0 === seed.length - 1 ? [0, 0] : seed, + l = seed$0.length - 1, + i$0 = 0; + for(;;){ + caml_check_bound(s[1], i$0)[1 + i$0] = i$0; + var _rI_ = i$0 + 1 | 0; + if(54 === i$0) break; + var i$0 = _rI_; + } + var accu = [0, _ce_], _rD_ = 54 + max(55, l) | 0, _rC_ = 0; + if(_rD_ >= 0){ + var i = _rC_; + for(;;){ + var + j = i % 55 | 0, + k = caml_mod(i, l), + _rE_ = caml_check_bound(seed$0, k)[1 + k]; + accu[1] = combine(accu[1], _rE_); + var + _rF_ = extract(accu[1]), + _rG_ = (caml_check_bound(s[1], j)[1 + j] ^ _rF_) & 1073741823; + caml_check_bound(s[1], j)[1 + j] = _rG_; + var _rH_ = i + 1 | 0; + if(_rD_ === i) break; + var i = _rH_; + } + } + s[2] = 0; + return; + } + function make$2(seed){ + var result = new_state(0); + full_init(result, seed); + return result; + } + function make_self_init(param){return make$2(caml_sys_random_seed(0));} + function copy$0(s){ + var result = new_state(0); + assign(result, s); + return result; + } + function bits(s){ + s[2] = (s[2] + 1 | 0) % 55 | 0; + var + _rz_ = s[2], + curval = caml_check_bound(s[1], _rz_)[1 + _rz_], + _rA_ = (s[2] + 24 | 0) % 55 | 0, + newval = + caml_check_bound(s[1], _rA_)[1 + _rA_] + + (curval ^ (curval >>> 25 | 0) & 31) + | 0, + newval30 = newval & 1073741823, + _rB_ = s[2]; + caml_check_bound(s[1], _rB_)[1 + _rB_] = newval30; + return newval30; + } + function intaux(s, n){ + for(;;){ + var r = bits(s), v = caml_mod(r, n); + if(((1073741823 - n | 0) + 1 | 0) >= (r - v | 0)) return v; + } + } + function int$0(s, bound){ + if(1073741823 >= bound && 0 < bound) return intaux(s, bound); + return invalid_arg(_cf_); + } + var default$0 = [0, _cg_.slice(), 0]; + function int$1(bound){return int$0(default$0, bound);} + function full_init$0(seed){return full_init(default$0, seed);} + function self_init(param){return full_init$0(caml_sys_random_seed(0));} + function get_state(param){return copy$0(default$0);} + function ongoing_traversal(h){ + var _rx_ = h.length - 1 < 4 ? 1 : 0, _ry_ = _rx_ || (h[4] < 0 ? 1 : 0); + return _ry_; + } + try{var _km_ = caml_sys_getenv("OCAMLRUNPARAM"), params = _km_;} + catch(_rv_){ + var _ch_ = caml_wrap_exception(_rv_); + if(_ch_ !== Not_found) throw caml_maybe_attach_backtrace(_ch_, 0); + try{var _kl_ = caml_sys_getenv("CAMLRUNPARAM"), _ck_ = _kl_;} + catch(_rw_){ + var _ci_ = caml_wrap_exception(_rw_); + if(_ci_ !== Not_found) throw caml_maybe_attach_backtrace(_ci_, 0); + var _ck_ = _cj_; + } + var params = _ck_; + } + var + randomized_default = contains(params, 82), + prng = [246, function(_ru_){return make_self_init(0);}]; + function power_2_above(x, n){ + var x$0 = x; + for(;;){ + if(n <= x$0) return x$0; + if(max_array_length < (x$0 * 2 | 0)) return x$0; + var x$1 = x$0 * 2 | 0, x$0 = x$1; + } + } + function create$2(opt, initial_size){ + if(opt) + var sth = opt[1], random = sth; + else + var random = randomized_default; + var s = power_2_above(16, initial_size); + if(random) + var + _rs_ = caml_obj_tag(prng), + _rt_ = + 250 === _rs_ ? prng[1] : 246 === _rs_ ? force_lazy_block(prng) : prng, + seed = bits(_rt_); + else + var seed = 0; + return [0, 0, caml_make_vect(s, 0), seed, s]; + } + function insert_all_buckets(indexfun, inplace, odata, ndata){ + var nsize = ndata.length - 1, ndata_tail = caml_make_vect(nsize, 0); + function insert_bucket(cell){ + var cell$0 = cell; + for(;;){ + if(! cell$0) return; + var + key = cell$0[1], + data = cell$0[2], + next = cell$0[3], + cell$1 = inplace ? cell$0 : [0, key, data, 0], + nidx = caml_call1(indexfun, key), + match = caml_check_bound(ndata_tail, nidx)[1 + nidx]; + if(match) + match[3] = cell$1; + else + caml_check_bound(ndata, nidx)[1 + nidx] = cell$1; + caml_check_bound(ndata_tail, nidx)[1 + nidx] = cell$1; + var cell$0 = next; + } + } + var _rn_ = odata.length - 1 - 1 | 0, _rm_ = 0; + if(_rn_ >= 0){ + var i$0 = _rm_; + for(;;){ + insert_bucket(caml_check_bound(odata, i$0)[1 + i$0]); + var _rr_ = i$0 + 1 | 0; + if(_rn_ === i$0) break; + var i$0 = _rr_; + } + } + if(inplace){ + var _rp_ = nsize - 1 | 0, _ro_ = 0; + if(_rp_ >= 0){ + var i = _ro_; + for(;;){ + var match = caml_check_bound(ndata_tail, i)[1 + i]; + if(match) match[3] = 0; + var _rq_ = i + 1 | 0; + if(_rp_ === i) break; + var i = _rq_; + } + } + } + return; + } + function resize$0(indexfun, h){ + var + odata = h[2], + osize = odata.length - 1, + nsize = osize * 2 | 0, + _rl_ = nsize < max_array_length ? 1 : 0; + if(! _rl_) return _rl_; + var ndata = caml_make_vect(nsize, 0), inplace = 1 - ongoing_traversal(h); + h[2] = ndata; + return insert_all_buckets(caml_call1(indexfun, h), inplace, odata, ndata); + } + function hash(x){return caml_hash(10, 100, 0, x);} + function key_index(h, key){ + return 4 <= h.length - 1 + ? caml_hash(10, 100, h[3], key) & (h[2].length - 1 - 1 | 0) + : invalid_arg(_cl_); + } + function add$0(h, key, data){ + var + i = key_index(h, key), + bucket = [0, key, data, caml_check_bound(h[2], i)[1 + i]]; + caml_check_bound(h[2], i)[1 + i] = bucket; + h[1] = h[1] + 1 | 0; + var _rk_ = h[2].length - 1 << 1 < h[1] ? 1 : 0; + return _rk_ ? resize$0(key_index, h) : _rk_; + } + function remove_bucket(h, i, key, prec, c){ + var prec$1 = prec, prec$0 = c; + for(;;){ + if(! prec$0) return; + var k = prec$0[1], next = prec$0[3]; + if(0 === caml_compare(k, key)){ + h[1] = h[1] - 1 | 0; + if(prec$1){prec$1[3] = next; return;} + caml_check_bound(h[2], i)[1 + i] = next; + return; + } + var prec$1 = prec$0, prec$0 = next; + } + } + function remove(h, key){ + var i = key_index(h, key); + return remove_bucket(h, i, key, 0, caml_check_bound(h[2], i)[1 + i]); + } + function find_rec(key, param){ + var param$0 = param; + for(;;){ + if(! param$0) throw caml_maybe_attach_backtrace(Not_found, 1); + var k = param$0[1], data = param$0[2], next = param$0[3]; + if(0 === caml_compare(key, k)) return data; + var param$0 = next; + } + } + function find(h, key){ + var + _rj_ = key_index(h, key), + match = caml_check_bound(h[2], _rj_)[1 + _rj_]; + if(! match) throw caml_maybe_attach_backtrace(Not_found, 1); + var k1 = match[1], d1 = match[2], next1 = match[3]; + if(0 === caml_compare(key, k1)) return d1; + if(! next1) throw caml_maybe_attach_backtrace(Not_found, 1); + var k2 = next1[1], d2 = next1[2], next2 = next1[3]; + if(0 === caml_compare(key, k2)) return d2; + if(! next2) throw caml_maybe_attach_backtrace(Not_found, 1); + var k3 = next2[1], d3 = next2[2], next3 = next2[3]; + return 0 === caml_compare(key, k3) ? d3 : find_rec(key, next3); + } + function find_all(h, key){ + function find_in_bucket(param){ + var param$0 = param; + for(;;){ + if(! param$0) return 0; + var k = param$0[1], data = param$0[2], next = param$0[3]; + if(0 === caml_compare(k, key)) return [0, data, find_in_bucket(next)]; + var param$0 = next; + } + } + var _ri_ = key_index(h, key); + return find_in_bucket(caml_check_bound(h[2], _ri_)[1 + _ri_]); + } + function id(x){return x;} + var zero = 0, unknown = -1; + function is_known(n){return 0 <= n ? 1 : 0;} + var String_tag = [248, _cm_, caml_fresh_oo_id(0)]; + function pp_enqueue(state, token){ + state[13] = state[13] + token[3] | 0; + return add(token, state[28]); + } + function pp_clear_queue(state){ + state[12] = 1; + state[13] = 1; + return clear$0(state[28]); + } + var pp_infinity = 1000000010; + function pp_output_string(state, s){ + return caml_call3(state[17], s, 0, caml_ml_string_length(s)); + } + function pp_output_newline(state){return caml_call1(state[19], 0);} + function pp_output_spaces(state, n){return caml_call1(state[20], n);} + function pp_output_indent(state, n){return caml_call1(state[21], n);} + function format_pp_text(state, size, text){ + state[9] = state[9] - size | 0; + pp_output_string(state, text); + state[11] = 0; + return; + } + function format_string(state, s){ + var _rh_ = caml_string_notequal(s, cst$1); + return _rh_ ? format_pp_text(state, caml_ml_string_length(s), s) : _rh_; + } + function break_new_line(state, param, width){ + var after = param[3], offset = param[2], before = param[1]; + format_string(state, before); + pp_output_newline(state); + state[11] = 1; + var + indent = (state[6] - width | 0) + offset | 0, + real_indent = min$0(state[8], indent); + state[10] = real_indent; + state[9] = state[6] - state[10] | 0; + pp_output_indent(state, state[10]); + return format_string(state, after); + } + function break_line(state, width){ + return break_new_line(state, _cn_, width); + } + function break_same_line(state, param){ + var after = param[3], width = param[2], before = param[1]; + format_string(state, before); + state[9] = state[9] - width | 0; + pp_output_spaces(state, width); + return format_string(state, after); + } + function pp_force_break_line(state){ + var match = top_opt(state[2]); + if(! match) return pp_output_newline(state); + var + match$0 = match[1], + width = match$0[2], + box_type = match$0[1], + _rg_ = state[9] < width ? 1 : 0; + if(! _rg_) return _rg_; + if(3 < box_type - 1 >>> 0) return; + return break_line(state, width); + } + function pp_skip_token(state){ + var match = take_opt(state[28]); + if(! match) return; + var match$0 = match[1], size = match$0[1], length = match$0[3]; + state[12] = state[12] - length | 0; + var _rf_ = id(size); + state[9] = state[9] + _rf_ | 0; + return; + } + function format_pp_token(state, size, param){ + if(typeof param === "number") + switch(param){ + case 0: + var match = top_opt(state[3]); + if(! match) return; + var + tabs = match[1][1], + add_tab = + function(n, ls){ + if(! ls) return [0, n, 0]; + var l = ls[2], x = ls[1]; + return caml_lessthan(n, x) ? [0, n, ls] : [0, x, add_tab(n, l)]; + }; + tabs[1] = add_tab(state[6] - state[9] | 0, tabs[1]); + return; + case 1: + pop_opt(state[2]); return; + case 2: + pop_opt(state[3]); return; + case 3: + var match$0 = top_opt(state[2]); + if(! match$0) return pp_output_newline(state); + var width = match$0[1][2]; + return break_line(state, width); + case 4: + var _re_ = state[10] !== (state[6] - state[9] | 0) ? 1 : 0; + return _re_ ? pp_skip_token(state) : _re_; + default: + var match$1 = pop_opt(state[5]); + if(! match$1) return; + var tag_name = match$1[1], marker = caml_call1(state[25], tag_name); + return pp_output_string(state, marker); + } + switch(param[0]){ + case 0: + var s = param[1]; return format_pp_text(state, size, s); + case 1: + var + breaks = param[2], + fits = param[1], + off = breaks[2], + before = breaks[1], + match$2 = top_opt(state[2]); + if(! match$2) return; + var match$3 = match$2[1], width$0 = match$3[2], box_type = match$3[1]; + switch(box_type){ + case 0: + return break_same_line(state, fits); + case 1: + return break_new_line(state, breaks, width$0); + case 2: + return break_new_line(state, breaks, width$0); + case 3: + return state[9] < (size + caml_ml_string_length(before) | 0) + ? break_new_line(state, breaks, width$0) + : break_same_line(state, fits); + case 4: + return state[11] + ? break_same_line(state, fits) + : state + [9] + < (size + caml_ml_string_length(before) | 0) + ? break_new_line(state, breaks, width$0) + : ((state + [6] + - width$0 + | 0) + + off + | 0) + < state[10] + ? break_new_line(state, breaks, width$0) + : break_same_line(state, fits); + default: return break_same_line(state, fits); + } + case 2: + var + off$0 = param[2], + n = param[1], + insertion_point = state[6] - state[9] | 0, + match$4 = top_opt(state[3]); + if(! match$4) return; + var tabs$0 = match$4[1][1], match$5 = tabs$0[1]; + if(match$5) + var + first = match$5[1], + find = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return first; + var tail = param$0[2], head = param$0[1]; + if(insertion_point <= head) return head; + var param$0 = tail; + } + }, + tab = find(tabs$0[1]); + else + var tab = insertion_point; + var offset = tab - insertion_point | 0; + return 0 <= offset + ? break_same_line(state, [0, _cp_, offset + n | 0, _co_]) + : break_new_line + (state, [0, _cr_, tab + off$0 | 0, _cq_], state[6]); + case 3: + var + ty = param[2], + off$1 = param[1], + insertion_point$0 = state[6] - state[9] | 0; + if(state[8] < insertion_point$0) pp_force_break_line(state); + var + width$1 = state[9] - off$1 | 0, + box_type$0 = 1 === ty ? 1 : state[9] < size ? ty : 5; + return push([0, box_type$0, width$1], state[2]); + case 4: + var tbox = param[1]; return push(tbox, state[3]); + default: + var + tag_name$0 = param[1], + marker$0 = caml_call1(state[24], tag_name$0); + pp_output_string(state, marker$0); + return push(tag_name$0, state[5]); + } + } + function advance_left(state){ + for(;;){ + var match = peek_opt(state[28]); + if(! match) return 0; + var + match$0 = match[1], + size = match$0[1], + length = match$0[3], + token = match$0[2], + pending_count = state[13] - state[12] | 0, + _rc_ = is_known(size), + _rd_ = _rc_ || (state[9] <= pending_count ? 1 : 0); + if(! _rd_) return _rd_; + take(state[28]); + var size$0 = is_known(size) ? id(size) : pp_infinity; + format_pp_token(state, size$0, token); + state[12] = length + state[12] | 0; + } + } + function enqueue_advance(state, tok){ + pp_enqueue(state, tok); + return advance_left(state); + } + function enqueue_string_as(state, size, s){ + return enqueue_advance(state, [0, size, [0, s], id(size)]); + } + function enqueue_string(state, s){ + return enqueue_string_as(state, id(caml_ml_string_length(s)), s); + } + function initialize_scan_stack(stack){ + clear(stack); + var queue_elem = [0, unknown, _cs_, 0]; + return push([0, -1, queue_elem], stack); + } + function set_size(state, ty){ + var match = top_opt(state[1]); + if(! match) return; + var + match$0 = match[1], + queue_elem = match$0[2], + left_total = match$0[1], + size = id(queue_elem[1]); + if(left_total < state[12]) return initialize_scan_stack(state[1]); + var _rb_ = queue_elem[2]; + if(typeof _rb_ !== "number") + switch(_rb_[0]){ + case 3: + if(1 - ty){ + queue_elem[1] = id(state[13] + size | 0); + pop_opt(state[1]); + } + return; + case 1: + case 2: + if(ty){queue_elem[1] = id(state[13] + size | 0); pop_opt(state[1]);} + return; + } + return; + } + function scan_push(state, b, token){ + pp_enqueue(state, token); + if(b) set_size(state, 1); + var elem = [0, state[13], token]; + return push(elem, state[1]); + } + function pp_open_box_gen(state, indent, br_ty){ + state[14] = state[14] + 1 | 0; + if(state[14] < state[15]){ + var size = id(- state[13] | 0), elem = [0, size, [3, indent, br_ty], 0]; + return scan_push(state, 0, elem); + } + var _ra_ = state[14] === state[15] ? 1 : 0; + return _ra_ ? enqueue_string(state, state[16]) : _ra_; + } + function pp_open_sys_box(state){return pp_open_box_gen(state, 0, 3);} + function pp_close_box(state, param){ + var _q__ = 1 < state[14] ? 1 : 0; + if(_q__){ + if(state[14] < state[15]){ + pp_enqueue(state, [0, zero, 1, 0]); + set_size(state, 1); + set_size(state, 0); + } + state[14] = state[14] - 1 | 0; + var _q$_ = 0; + } + else + var _q$_ = _q__; + return _q$_; + } + function pp_open_stag(state, tag_name){ + if(state[22]){push(tag_name, state[4]); caml_call1(state[26], tag_name);} + var _q9_ = state[23]; + if(! _q9_) return _q9_; + var token = [5, tag_name]; + return pp_enqueue(state, [0, zero, token, 0]); + } + function pp_close_stag(state, param){ + if(state[23]) pp_enqueue(state, [0, zero, 5, 0]); + var _q7_ = state[22]; + if(_q7_){ + var match = pop_opt(state[4]); + if(match){ + var tag_name = match[1]; + return caml_call1(state[27], tag_name); + } + var _q8_ = 0; + } + else + var _q8_ = _q7_; + return _q8_; + } + function pp_close_tag(state, param){return pp_close_stag(state, 0);} + function pp_rinit(state){ + pp_clear_queue(state); + initialize_scan_stack(state[1]); + clear(state[2]); + clear(state[3]); + clear(state[4]); + clear(state[5]); + state[10] = 0; + state[14] = 0; + state[9] = state[6]; + return pp_open_sys_box(state); + } + function clear_tag_stack(state){ + return iter$0(function(param){return pp_close_tag(state, 0);}, state[4]); + } + function pp_flush_queue(state, b){ + clear_tag_stack(state); + for(;;){ + if(1 >= state[14]){ + state[13] = pp_infinity; + advance_left(state); + if(b) pp_output_newline(state); + return pp_rinit(state); + } + pp_close_box(state, 0); + } + } + function pp_print_as_size(state, size, s){ + var _q6_ = state[14] < state[15] ? 1 : 0; + return _q6_ ? enqueue_string_as(state, size, s) : _q6_; + } + function pp_print_as(state, isize, s){ + return pp_print_as_size(state, id(isize), s); + } + function pp_print_string(state, s){ + return pp_print_as(state, caml_ml_string_length(s), s); + } + function pp_print_bool(state, b){ + return pp_print_string(state, string_of_bool(b)); + } + function pp_print_char(state, c){ + return pp_print_as(state, 1, make$1(1, c)); + } + function pp_print_newline(state, param){ + pp_flush_queue(state, 1); + return caml_call1(state[18], 0); + } + function pp_print_flush(state, param){ + pp_flush_queue(state, 0); + return caml_call1(state[18], 0); + } + function pp_force_newline(state, param){ + var _q5_ = state[14] < state[15] ? 1 : 0; + return _q5_ ? enqueue_advance(state, [0, zero, 3, 0]) : _q5_; + } + function pp_print_custom_break(state, fits, breaks){ + var + after = fits[3], + width = fits[2], + before = fits[1], + _q4_ = state[14] < state[15] ? 1 : 0; + if(! _q4_) return _q4_; + var + size = id(- state[13] | 0), + token = [1, fits, breaks], + length = + (caml_ml_string_length(before) + width | 0) + + caml_ml_string_length(after) + | 0, + elem = [0, size, token, length]; + return scan_push(state, 1, elem); + } + function pp_print_break(state, width, offset){ + return pp_print_custom_break + (state, [0, _cw_, width, _cv_], [0, _cu_, offset, _ct_]); + } + function pp_print_cut(state, param){return pp_print_break(state, 0, 0);} + function display_newline(state, param){ + return caml_call3(state[17], _cx_, 0, 1); + } + var blank_line = make$1(80, 32); + function display_blanks(state, n){ + var n$0 = n; + for(;;){ + var _q3_ = 0 < n$0 ? 1 : 0; + if(! _q3_) return _q3_; + if(80 >= n$0) return caml_call3(state[17], blank_line, 0, n$0); + caml_call3(state[17], blank_line, 0, 80); + var n$1 = n$0 - 80 | 0, n$0 = n$1; + } + } + function default_pp_mark_open_tag(param){ + if(param[1] !== String_tag) return _cA_; + var s = param[2]; + return symbol(_cz_, symbol(s, _cy_)); + } + function default_pp_mark_close_tag(param){ + if(param[1] !== String_tag) return _cD_; + var s = param[2]; + return symbol(_cC_, symbol(s, _cB_)); + } + function default_pp_print_open_tag(_q2_){return 0;} + function default_pp_print_close_tag(_q1_){return 0;} + function pp_make_formatter(f, g, h, i, j){ + var pp_queue = create$0(0), sys_tok = [0, unknown, _cE_, 0]; + add(sys_tok, pp_queue); + var scan_stack = create(0); + initialize_scan_stack(scan_stack); + push([0, 1, sys_tok], scan_stack); + var pp_margin = 78, _qY_ = create(0), _qZ_ = create(0), _q0_ = create(0); + return [0, + scan_stack, + create(0), + _q0_, + _qZ_, + _qY_, + pp_margin, + 10, + 68, + pp_margin, + 0, + 1, + 1, + 1, + 1, + max_int, + _cF_, + f, + g, + h, + i, + j, + 0, + 0, + default_pp_mark_open_tag, + default_pp_mark_close_tag, + default_pp_print_open_tag, + default_pp_print_close_tag, + pp_queue]; + } + function make_formatter(output, flush){ + var + ppf = + pp_make_formatter + (output, + flush, + function(_qX_){return 0;}, + function(_qW_){return 0;}, + function(_qV_){return 0;}); + ppf[19] = function(_qU_){return display_newline(ppf, _qU_);}; + ppf[20] = function(_qT_){return display_blanks(ppf, _qT_);}; + ppf[21] = function(_qS_){return display_blanks(ppf, _qS_);}; + return ppf; + } + function formatter_of_out_channel(oc){ + return make_formatter + (function(_qP_, _qQ_, _qR_){ + return output_substring(oc, _qP_, _qQ_, _qR_); + }, + function(param){return _k_(oc);}); + } + function formatter_of_buffer(b){ + return make_formatter + (function(_qM_, _qN_, _qO_){ + return add_substring(b, _qM_, _qN_, _qO_); + }, + function(_qL_){return 0;}); + } + var pp_buffer_size = 512; + function pp_make_buffer(param){return create$1(pp_buffer_size);} + var + stdbuf = pp_make_buffer(0), + std_formatter = formatter_of_out_channel(stdout), + err_formatter = formatter_of_out_channel(stderr); + formatter_of_buffer(stdbuf); + function flush_buffer_formatter(buf, ppf){ + pp_flush_queue(ppf, 0); + var s = contents(buf); + reset(buf); + return s; + } + function pp_print_list(opt, pp_v, ppf, param){ + var opt$0 = opt, param$0 = param; + for(;;){ + if(opt$0) + var sth = opt$0[1], pp_sep = sth; + else + var pp_sep = pp_print_cut; + if(! param$0) return 0; + var v = param$0[1]; + if(! param$0[2]) return caml_call2(pp_v, ppf, v); + var vs = param$0[2]; + caml_call2(pp_v, ppf, v); + caml_call2(pp_sep, ppf, 0); + var opt$1 = [0, pp_sep], opt$0 = opt$1, param$0 = vs; + } + } + function compute_tag(output, tag_acc){ + var buf = create$1(16), ppf = formatter_of_buffer(buf); + caml_call2(output, ppf, tag_acc); + pp_print_flush(ppf, 0); + var len = length$0(buf); + return 2 <= len ? sub$1(buf, 1, len - 2 | 0) : contents(buf); + } + function output_formatting_lit(ppf, fmting_lit){ + if(typeof fmting_lit === "number") + switch(fmting_lit){ + case 0: + return pp_close_box(ppf, 0); + case 1: + return pp_close_tag(ppf, 0); + case 2: + return pp_print_flush(ppf, 0); + case 3: + return pp_force_newline(ppf, 0); + case 4: + return pp_print_newline(ppf, 0); + case 5: + return pp_print_char(ppf, 64); + default: return pp_print_char(ppf, 37); + } + switch(fmting_lit[0]){ + case 0: + var offset = fmting_lit[3], width = fmting_lit[2]; + return pp_print_break(ppf, width, offset); + case 1: + return 0; + default: + var c = fmting_lit[1]; + pp_print_char(ppf, 64); + return pp_print_char(ppf, c); + } + } + function output_acc$0(ppf, acc){ + if(typeof acc === "number") return 0; + a: + { + b: + { + c: + { + switch(acc[0]){ + case 0: + var f = acc[2], p = acc[1]; + output_acc$0(ppf, p); + return output_formatting_lit(ppf, f); + case 1: + var match = acc[2], p$0 = acc[1]; + if(0 === match[0]){ + var acc$0 = match[1]; + output_acc$0(ppf, p$0); + return pp_open_stag + (ppf, [0, String_tag, compute_tag(output_acc$0, acc$0)]); + } + var acc$1 = match[1]; + output_acc$0(ppf, p$0); + var + match$0 = open_box_of_string(compute_tag(output_acc$0, acc$1)), + bty = match$0[2], + indent = match$0[1]; + return pp_open_box_gen(ppf, indent, bty); + case 2: + var _qC_ = acc[1]; + if(typeof _qC_ !== "number" && 0 === _qC_[0]){ + var _qD_ = _qC_[2]; + if(typeof _qD_ !== "number" && 1 === _qD_[0]){ + var s$0 = acc[2], size = _qD_[2], p$2 = _qC_[1]; + break b; + } + } + var s = acc[2], p$1 = _qC_; + break a; + case 3: + var _qE_ = acc[1]; + if(typeof _qE_ !== "number" && 0 === _qE_[0]){ + var _qF_ = _qE_[2]; + if(typeof _qF_ !== "number" && 1 === _qF_[0]){ + var c$0 = acc[2], size$0 = _qF_[2], p$4 = _qE_[1]; + break; + } + } + var c = acc[2], p$3 = _qE_; + break c; + case 4: + var _qH_ = acc[1]; + if(typeof _qH_ !== "number" && 0 === _qH_[0]){ + var _qI_ = _qH_[2]; + if(typeof _qI_ !== "number" && 1 === _qI_[0]){ + var s$0 = acc[2], size = _qI_[2], p$2 = _qH_[1]; + break b; + } + } + var s = acc[2], p$1 = _qH_; + break a; + case 5: + var _qJ_ = acc[1]; + if(typeof _qJ_ !== "number" && 0 === _qJ_[0]){ + var _qK_ = _qJ_[2]; + if(typeof _qK_ !== "number" && 1 === _qK_[0]){ + var c$0 = acc[2], size$0 = _qK_[2], p$4 = _qJ_[1]; + break; + } + } + var c = acc[2], p$3 = _qJ_; + break c; + case 6: + var f$0 = acc[2], p$5 = acc[1]; + output_acc$0(ppf, p$5); + return caml_call1(f$0, ppf); + case 7: + var p$6 = acc[1]; + output_acc$0(ppf, p$6); + return pp_print_flush(ppf, 0); + default: + var msg = acc[2], p$7 = acc[1]; + output_acc$0(ppf, p$7); + return invalid_arg(msg); + } + output_acc$0(ppf, p$4); + var _qG_ = make$1(1, c$0); + return pp_print_as_size(ppf, id(size$0), _qG_); + } + output_acc$0(ppf, p$3); + return pp_print_char(ppf, c); + } + output_acc$0(ppf, p$2); + return pp_print_as_size(ppf, id(size), s$0); + } + output_acc$0(ppf, p$1); + return pp_print_string(ppf, s); + } + function kfprintf$0(k, ppf, param){ + var fmt = param[1]; + return make_printf + (function(acc){output_acc$0(ppf, acc); return caml_call1(k, ppf);}, + 0, + fmt); + } + function fprintf$0(ppf){ + function _qz_(_qB_){return 0;} + return function(_qA_){return kfprintf$0(_qz_, ppf, _qA_);}; + } + function kasprintf(k, param){ + var fmt = param[1], b = pp_make_buffer(0), ppf = formatter_of_buffer(b); + function k$0(acc){ + output_acc$0(ppf, acc); + return caml_call1(k, flush_buffer_formatter(b, ppf)); + } + return make_printf(k$0, 0, fmt); + } + function asprintf(fmt){return kasprintf(id, fmt);} + function flush_standard_formatters(param){ + pp_print_flush(std_formatter, 0); + return pp_print_flush(err_formatter, 0); + } + at_exit(flush_standard_formatters); + function register_exception(name, exn){ + var slot = caml_obj_tag(exn) === 248 ? exn : exn[1]; + caml_register_named_value(name, slot); + return; + } + var Error = [248, _cG_, caml_fresh_oo_id(0)]; + register_exception(_cH_, [0, Error, [0]]); + (function(exn){throw exn;}); + var jv_global = globalThis; + jv_global["Number"]; + var null$0 = null, undefined$0 = undefined; + function is_null(v){return v === null$0 ? 1 : 0;} + function is_undefined(v){return v === undefined$0 ? 1 : 0;} + function is_none(v){ + var _qy_ = is_null(v); + return _qy_ ? _qy_ : is_undefined(v); + } + function to_option(conv, v){ + return is_none(v) ? 0 : [0, caml_call1(conv, v)]; + } + function of_option(none, conv, param){ + if(! param) return none; + var v = param[1]; + return caml_call1(conv, v); + } + var global = globalThis; + function set_if_some(o, p, param){ + if(! param) return; + var v = param[1]; + o[p] = v; + return; + } + function get$0(o, p){o[p]; return;} + function set(o, p, b){o[p] = ! ! b; return;} + function set_if_some$0(o, p, param){ + if(! param) return; + var b = param[1]; + return set(o, p, b); + } + function set$0(o, p, b){o[p] = b; return;} + function set_if_some$1(o, p, param){ + if(! param) return; + var f = param[1]; + return set$0(o, p, f); + } + function create$3(n){return new global["Array"](n);} + function length$1(a){return a["length"];} + function to_array(conv, v){ + var len = length$1(v); + return init$0(len, function(i){return caml_call1(conv, v[i]);}); + } + function of_array(conv, a){ + var len = a.length - 1, ja = create$3(len), _qw_ = len - 1 | 0, _qv_ = 0; + if(_qw_ >= 0){ + var i = _qv_; + for(;;){ + ja[i] = caml_call1(conv, caml_check_bound(a, i)[1 + i]); + var _qx_ = i + 1 | 0; + if(_qw_ === i) break; + var i = _qx_; + } + } + return ja; + } + function to_list$0(conv, v){ + var len = length$1(v); + return init(len, function(i){return caml_call1(conv, v[i]);}); + } + function of_list$0(conv, l){ + function loop(i, ja, param){ + var i$0 = i, param$0 = param; + for(;;){ + if(! param$0) return ja; + var vs = param$0[2], v = param$0[1]; + ja[i$0] = caml_call1(conv, v); + var i$1 = i$0 + 1 | 0, i$0 = i$1, param$0 = vs; + } + } + return loop(0, create$3(0), l); + } + function v(name, msg){ + var e = new global["Error"](msg); + if(! name) return e; + var n = name[1]; + e[cst_name] = n; + return e; + } + function throw$0(name, msg){ + var e = v(name, msg); + return caml_call1(function(exn){throw exn;}, e); + } + var promise = global["Promise"]; + function create$4(f){ + function g(res, rej){ + return caml_call2 + (f, function(x){return res(x);}, function(x){return rej(x);}); + } + return new promise(caml_js_wrap_callback_strict(2, g)); + } + function resolve(v){return promise.resolve(v);} + function bind(p, res){return p.then(caml_js_wrap_callback_strict(1, res));} + function then(p, res, rej){ + return p.then + (caml_js_wrap_callback_strict(1, res), + caml_js_wrap_callback_strict(1, rej)); + } + function all(arr){return promise.all(arr);} + function _cI_(_qu_){return caml_string_of_jsstring(_qu_);} + function _cJ_(_qt_){return caml_jsstring_of_string(_qt_);} + function fut(p){return {fut: p};} + function promise$0(f){return f[cst_fut];} + function promise$1(f){return f[cst_fut];} + function create$5(param){ + function not_set(param){ + throw caml_maybe_attach_backtrace([0, Assert_failure, _cK_], 1); + } + function is_set(param){return throw$0(0, "The future is already set");} + var setter = [0, not_set]; + function set_setter(resolve, reject){setter[1] = resolve; return 0;} + var p = create$4(set_setter); + function set(v){caml_call1(setter[1], v); setter[1] = is_set; return 0;} + return [0, fut(p), set]; + } + function return$0(v){return fut(resolve(v));} + function bind$0(f, fn){ + return fut + (bind + (promise$0(f), + function(v){return promise$0(caml_call1(fn, v));})); + } + function map$4(fn, f){ + return bind$0(f, function(v){return return$0(caml_call1(fn, v));}); + } + function of_list$1(fs){ + var arr = of_list$0(promise$1, fs), all$0 = all(arr); + function to_list(l){ + return resolve(to_list$0(function(_qs_){return _qs_;}, l)); + } + return fut(bind(all$0, to_list)); + } + function ok(v){return return$0([0, v]);} + function of_promise(ok, error, p){ + function ok$0(v){return resolve([0, caml_call1(ok, v)]);} + function error$0(e){return resolve([1, caml_call1(error, e)]);} + return fut(then(p, ok$0, error$0)); + } + function of_promise$0(ok, v){ + return of_promise(ok, function(_qr_){return _qr_;}, v); + } + function let$0(f, fn){return map$4(fn, f);} + function let$1(f, fn){ + return function(_qq_){return bind$0(f, _qq_);} + (function(e){ + if(0 !== e[0]) return return$0(e); + var v = e[1]; + return caml_call1(fn, v); + }); + } + function let$2(f, fn){ + return map$4(function(_qp_){return map$0(fn, _qp_);}, f); + } + global["Event"]; + function current_target(e){return e["currentTarget"];} + function listen(opt, type, f, t){ + if(opt) var sth = opt[1], opts = sth; else var opts = {}; + var f$0 = caml_js_wrap_callback_strict(1, f); + t.addEventListener(type, f$0, opts); + return; + } + global["ArrayBuffer"]; + global["DataView"]; + global["Blob"]; + global["File"]; + var json = global["JSON"]; + function encode(v){return json.stringify(v);} + function decode(s){ + try{var v = json.parse(s);} + catch(exn$0){ + var exn = caml_wrap_exception(exn$0); + if(exn[1] !== Error) throw caml_maybe_attach_backtrace(exn, 0); + var e = exn[2]; + return [1, e]; + } + return [0, v]; + } + global["encodeURI"]; + global["decodeURI"]; + global["encodeURIComponent"]; + global["decodeURIComponent"]; + var url = global["URL"]; + function v$0(base, s){ + if(! base) return new url(s); + var b = base[1]; + return new url(s, b); + } + var usp = global["URLSearchParams"]; + function to_jstr(p){return p.toString();} + function of_obj(o){return new usp(o);} + function with_query_params(u, ps){ + var u$0 = new url(u); + set$0(u$0, _cL_, to_jstr(ps)); + return u$0; + } + function to_jstr$0(u){return u.toString();} + function of_jstr(base, s){ + try{var v = v$0(base, s);} + catch(exn$0){ + var exn = caml_wrap_exception(exn$0); + if(exn[1] !== Error) throw caml_maybe_attach_backtrace(exn, 0); + var e = exn[2]; + return [1, e]; + } + return [0, v]; + } + var global_document = global["document"]; + if(! is_none(global_document)) global_document["documentElement"]; + function call(c, meth, args){caml_js_meth_call(c, meth, args); return 0;} + var _cM_ = global[cst_console]; + function msg_to_jv_array(msg){ + function loop(a, i, param){ + var i$0 = i, param$0 = param; + for(;;){ + if(! param$0) return a; + var vs = param$0[2], v = param$0[1]; + a[i$0] = v; + var i$1 = i$0 + 1 | 0, i$0 = i$1, param$0 = vs; + } + } + return caml_js_to_array(loop(create$3(0), 0, msg)); + } + function log(msg){return call(_cM_, _cN_, msg_to_jv_array(msg));} + function error(msg){return call(_cM_, _cO_, msg_to_jv_array(msg));} + function info(msg){return call(_cM_, _cP_, msg_to_jv_array(msg));} + global[cst_console]; + global["navigator"]; + global["performance"]; + global["window"]; + get$0(global, _cQ_); + global["ClipboardItem"]; + global["FormData"]; + function of_jstr$0(_qo_){return _qo_;} + function text(r){ + return of_promise$0(function(_qn_){return _qn_;}, r.text()); + } + var headers = global["Headers"]; + function of_assoc(init, l){ + if(init) var h = init[1], args = [0, h]; else var args = [0]; + var hs = caml_js_new(headers, args); + function add(hs, param){ + var v = param[2], k = param[1]; + hs.append(k, v); + return 0; + } + iter(function(_qm_){return add(hs, _qm_);}, l); + return hs; + } + function init$1 + (body, + cache, + credentials, + headers, + integrity, + keepalive, + method, + mode, + redirect, + referrer, + referrer_policy, + signal, + param){ + var o = {}; + o["body"] = of_option(undefined$0, function(_ql_){return _ql_;}, body); + set_if_some$1(o, _cR_, cache); + set_if_some$1(o, _cS_, credentials); + set_if_some(o, _cT_, map(function(_qk_){return _qk_;}, headers)); + set_if_some$1(o, _cU_, integrity); + set_if_some$0(o, _cV_, keepalive); + set_if_some$1(o, _cW_, method); + set_if_some$1(o, _cX_, mode); + set_if_some$1(o, _cY_, redirect); + set_if_some$1(o, _cZ_, referrer); + set_if_some$1(o, _c0_, referrer_policy); + o["signal"] = of_option(undefined$0, function(_qj_){return _qj_;}, signal); + return o; + } + var request = global["Request"]; + function v$1(opt, url){ + if(opt) var sth = opt[1], init = sth; else var init = {}; + return new request(url, init); + } + global["Response"]; + var fetch = global["fetch"]; + function request$0(r){ + function _qg_(_qi_){return _qi_;} + return function(_qh_){return of_promise$0(_qg_, _qh_);}(fetch(r)); + } + global["MediaStream"]; + global["MediaRecorder"]; + global["MessageChannel"]; + global["BroadcastChannel"]; + var message = "message"; + function data(e){return e["data"];} + global["Notification"]; + global["WebSocket"]; + var worker = global["Worker"]; + function create$6(opt, uri){ + if(opt) var sth = opt[1], opts = sth; else var opts = undefined$0; + return new worker(uri, opts); + } + global["SharedWorker"]; + function post(opts, v){ + if(opts) var o = opts[1], opts$0 = o; else var opts$0 = undefined$0; + global.postMessage(v, opts$0); + return 0; + } + global["clients"]; + global["registration"]; + global["serviceWorker"]; + function to_jv(param){ + if(0 === param[0]){var p = param[1]; return _cJ_(p);} + var keys = param[1]; + return of_array(to_jv, keys); + } + function bound(lower, upper, opt, _qf_, param){ + if(opt) var sth = opt[1], lower_open = sth; else var lower_open = 0; + if(_qf_) var sth$0 = _qf_[1], upper_open = sth$0; else var upper_open = 0; + var c = global["IDBKeyRange"]; + return c.bound(lower, upper, ! ! lower_open, ! ! upper_open); + } + function old_version(t){return t["oldVersion"];} + function new_version(t){return t["newVersion"];} + var + upgrade_needed = "upgradeneeded", + success = "success", + error$0 = cst_error; + function of_jv(f, j){return [0, j, f];} + function error$1(t){return t[1][cst_error];} + function result(t){ + var _qe_ = t[1]["result"]; + return caml_call1(t[2], _qe_); + } + function on_success(f, t){ + function f$0(ev){return caml_call2(f, ev, t);} + listen(0, success, f$0, t[1]); + return t; + } + function on_error(f, t){ + function f$0(ev){return caml_call2(f, ev, t);} + listen(0, error$0, f$0, t[1]); + return t; + } + function fut$0(t){ + var match = create$5(0), set = match[2], result_fut = match[1]; + on_success(function(param, t){return set([0, result(t)]);}, t); + on_error(function(param, t){return set([1, error$1(t)]);}, t); + return result_fut; + } + function to_string$1(param){ + switch(param){ + case 0: + return _c1_; + case 1: + return _c2_; + case 2: + return _c3_; + default: return _c4_; + } + } + function to_jv$0(d){return _cJ_(to_string$1(d));} + function Content_access(Content, Key){ + function get(key, t){ + function f(jv){ + return to_option(function(j){return caml_call1(Content[4], j);}, jv); + } + return function(_qd_){return of_jv(f, _qd_);} + (t.get(caml_call1(Key[2], key))); + } + function get_all(t){ + function f(jv){ + return to_array(function(c){return caml_call1(Content[4], c);}, jv); + } + return function(_qc_){return of_jv(f, _qc_);}(t.getAll()); + } + function get_all_keys(query, t){ + if(query) + var query$0 = query[1], args = [0, query$0]; + else + var args = [0]; + function f(jv){ + return to_array(function(c){return caml_call1(Content[1][3], c);}, jv); + } + return function(_qb_){return of_jv(f, _qb_);} + (caml_js_meth_call(t, "getAllKeys", args)); + } + function key(t){ + var _p__ = t["key"], _p$_ = Key[3]; + return function(_qa_){return to_option(_p$_, _qa_);}(_p__); + } + function primary_key(t){ + var _p7_ = t["primaryKey"], _p8_ = Content[1][3]; + return function(_p9_){return to_option(_p8_, _p9_);}(_p7_); + } + function advance(count, t){t.advance(count); return t;} + function continue$0(key, t){ + if(key) + var key$0 = key[1], args = [0, caml_call1(Content[1][2], key$0)]; + else + var args = [0]; + caml_js_meth_call(t, "continue", args); + return 0; + } + var + Cursor = [0, key, primary_key, advance, continue$0], + key$0 = Cursor[1], + primary_key$0 = Cursor[2], + advance$0 = Cursor[3], + continue$1 = Cursor[4]; + function value(t){ + function of_jv(j){return caml_call1(Content[4], j);} + var v = t["value"]; + return to_option(of_jv, v); + } + function delete$0(t){ + function _p5_(param){return 0;} + return function(_p6_){return of_jv(_p5_, _p6_);}(t.delete()); + } + function update(v, t){ + var _p2_ = t.update(caml_call1(Content[3], v)), _p3_ = Content[1][3]; + return function(_p4_){return of_jv(_p3_, _p4_);}(_p2_); + } + var + Cursor_with_value = + [0, + key$0, + primary_key$0, + advance$0, + continue$1, + value, + delete$0, + update]; + function open_cursor(query, direction, t){ + var direction$0 = map(to_jv$0, direction); + if(query){ + var q = query[1]; + if(direction$0) + var d = direction$0[1], _pZ_ = [0, q, d]; + else + var _pZ_ = [0, q]; + var args = _pZ_; + } + else if(direction$0) + var d$0 = direction$0[1], args = [0, null$0, d$0]; + else + var args = [0]; + function f(jv){return to_option(function(_p1_){return _p1_;}, jv);} + return function(_p0_){return of_jv(f, _p0_);} + (caml_js_meth_call(t, "openCursor", args)); + } + return [0, , get, get_all, get_all_keys, , Cursor_with_value, open_cursor]; + } + function Make_index(P, C, K){ + var + get_all_keys = function(_pY_){return Content_access(C, _pY_);}(K)[4], + name = P[1]; + return [0, , K, , , , get_all_keys, , , , , , name]; + } + function Make_object_store(C){ + var + include = function(_pX_){return Content_access(C, _pX_);}(C[1]), + get = include[2], + get_all = include[3], + Cursor_with_value = include[6], + open_cursor = include[7]; + function create_index(I){ + return function(t){ + var + key_path = to_jv(I[3][1]), + _pW_ = t.createIndex(_cJ_(I[2]), key_path); + return caml_call1(I[1], _pW_);}; + } + function index(I){ + return function(t){ + var _pV_ = t.index(_cJ_(I[2])); + return caml_call1(I[1], _pV_);}; + } + function put(v, key, t){ + if(key) + var + key$0 = key[1], + _pR_ = caml_call1(C[1][2], key$0), + args = [0, caml_call1(C[3], v), _pR_]; + else + var args = [0, caml_call1(C[3], v)]; + var _pS_ = caml_js_meth_call(t, "put", args), _pT_ = C[1][3]; + return function(_pU_){return of_jv(_pT_, _pU_);}(_pS_); + } + return [0, + C, + , + get, + get_all, + , + , + Cursor_with_value, + open_cursor, + , + , + , + create_index, + index, + put]; + } + function string_of_mode(param){ + switch(param){ + case 0: + return _c5_; + case 1: + return _c6_; + default: return _c7_; + } + } + function object_store(S){ + return function(t){ + var _pQ_ = t.objectStore(_cJ_(S[2][2])); + return caml_call1(S[1], _pQ_);}; + } + function create_object_store(S){ + return function(opt, db){ + if(opt) + var sth = opt[1], auto_increment = sth; + else + var auto_increment = 0; + var + opts = [0, [0, _c8_, ! ! auto_increment], 0], + key_path = to_jv(S[2][1][1]), + opts$0 = [0, [0, _c9_, key_path], opts], + options = caml_js_object(of_list(opts$0)); + info([0, _c__, [0, options, 0]]); + var _pP_ = db.createObjectStore(_cJ_(S[2][2]), options); + return caml_call1(S[1], _pP_);}; + } + function transaction(stores, opt, t){ + if(opt) var sth = opt[1], mode = sth; else var mode = 0; + var mode$0 = _cJ_(string_of_mode(mode)); + function jv_of_store(S){return _cJ_(S[2][2]);} + return t.transaction(of_list$0(jv_of_store, stores), mode$0); + } + function on_upgrade_needed(f, t){ + function f$0(ev){ + function _pM_(_pO_){return _pO_;} + var req = function(_pN_){return of_jv(_pM_, _pN_);}(current_target(ev)); + return caml_call2(f, ev, req); + } + listen(0, upgrade_needed, f$0, t[1]); + return t; + } + function open(name, version, t){ + if(version) + var v = version[1], args = [0, name, string_of_int(v)]; + else + var args = [0, name]; + function _pE_(_pL_, _pK_, _pJ_){ + return caml_js_meth_call(_pL_, _pK_, _pJ_); + } + function _pF_(_pI_){return _pI_;} + return function(_pG_){return of_jv(_pF_, _pG_);} + (function(_pH_){return _pE_(t, _c$_, _pH_);}(map$3(_cJ_, args))); + } + function get_factory(opt, param){ + if(opt) var sth = opt[1], global$0 = sth; else var global$0 = global; + return global$0["indexedDB"]; + } + function _da_(_pC_){ + var _pD_ = Make_object_store(_pC_); + return [0, + _pD_[1], + , + _pD_[7], + , + _pD_[3], + _pD_[4], + , + , + _pD_[8], + , + , + _pD_[12], + _pD_[13], + _pD_[14]]; + } + function _db_(_pA_, _pz_, _py_){ + var _pB_ = Make_index(_pA_, _pz_, _py_); + return [0, , _pB_[2], , , , , , _pB_[6], , , , _pB_[12]]; + } + function symbol$1(_px_, _pw_){return _px_ === _pw_ ? 1 : 0;} + function symbol$2(_pv_, _pu_){return _pv_ < _pu_ ? 1 : 0;} + function symbol$3(_pt_, _ps_){return _ps_ < _pt_ ? 1 : 0;} + function symbol$4(_pr_, _pq_){return _pq_ <= _pr_ ? 1 : 0;} + function reverse_in_place(a){ + var len = a.length - 1; + if(symbol$3(len, 0)){ + var _pm_ = (len - 1 | 0) / 2 | 0, _pl_ = 0; + if(_pm_ >= 0){ + var k = _pl_; + for(;;){ + var t = caml_check_bound(a, k)[1 + k], _pn_ = (len - 1 | 0) - k | 0; + a[1 + k] = caml_check_bound(a, _pn_)[1 + _pn_]; + var _po_ = (len - 1 | 0) - k | 0; + caml_check_bound(a, _po_)[1 + _po_] = t; + var _pp_ = k + 1 | 0; + if(_pm_ === k) break; + var k = _pp_; + } + } + } + return; + } + function filter_map(f, a){ + function aux(acc, i){ + var acc$0 = acc, i$0 = i; + for(;;){ + if(symbol$1(i$0, a.length - 1)){ + var a$0 = of_list(acc$0); + reverse_in_place(a$0); + return a$0; + } + var match = caml_call1(f, caml_check_bound(a, i$0)[1 + i$0]); + if(match) + var + x = match[1], + i$1 = i$0 + 1 | 0, + acc$1 = [0, x, acc$0], + acc$0 = acc$1, + i$0 = i$1; + else + var i$2 = i$0 + 1 | 0, i$0 = i$2; + } + } + return aux(0, 0); + } + function filter(p, a){ + return filter_map(function(x){return caml_call1(p, x) ? [0, x] : 0;}, a); + } + function shuffle(rand_int, a, i, j){ + var _pi_ = j - 1 | 0, _pj_ = i + 1 | 0; + if(_pi_ >= _pj_){ + var k = _pi_; + for(;;){ + var + l = caml_call1(rand_int, k + 1 | 0), + tmp = caml_check_bound(a, l)[1 + l]; + a[1 + l] = caml_check_bound(a, k)[1 + k]; + a[1 + k] = tmp; + var _pk_ = k - 1 | 0; + if(_pj_ === k) break; + var k = _pk_; + } + } + return; + } + function shuffle$0(a){return shuffle(int$1, a, 0, a.length - 1);} + function equal$0(a, b){return a === b ? 1 : 0;} + function is_empty(param){return param ? 0 : 1;} + function symbol$5(f, l){ + if(! l) return 0; + var tl = l[2], x = l[1], x$0 = caml_call1(f, x), block = [0, x$0, 24029]; + map_dps(block, 1, f, tl); + return block; + } + function map_dps(dst, offset, f, l){ + var dst$0 = dst, offset$0 = offset, l$0 = l; + for(;;){ + if(! l$0){dst$0[1 + offset$0] = 0; return;} + var + tl = l$0[2], + x = l$0[1], + x$0 = caml_call1(f, x), + dst$1 = [0, x$0, 24029]; + dst$0[1 + offset$0] = dst$1; + var dst$0 = dst$1, offset$0 = 1, l$0 = tl; + } + } + function filter_map$0(f, l){ + function recurse(acc, l){ + var acc$0 = acc, l$0 = l; + for(;;){ + if(! l$0) return rev(acc$0); + var l$1 = l$0[2], x = l$0[1], match = caml_call1(f, x); + if(match) + var y = match[1], acc$1 = [0, y, acc$0]; + else + var acc$1 = acc$0; + var acc$0 = acc$1, l$0 = l$1; + } + } + return recurse(0, l); + } + function iteri(f, l){ + function aux(f, i, l){ + var i$0 = i, l$0 = l; + for(;;){ + if(! l$0) return 0; + var l$1 = l$0[2], x = l$0[1]; + caml_call2(f, i$0, x); + var i$1 = i$0 + 1 | 0, i$0 = i$1, l$0 = l$1; + } + } + return aux(f, 0, l); + } + function symbol$6(f, param){ + if(! param) return 0; + var x = param[1]; + return [0, caml_call1(f, x)]; + } + function is_none$0(param){return param ? 0 : 1;} + function iter$1(f, o){ + if(! o) return 0; + var x = o[1]; + return caml_call1(f, x); + } + function value(x, default$0){ + if(! x) return default$0; + var y = x[1]; + return y; + } + function get_exn_or(msg, param){ + if(! param) return invalid_arg(msg); + var x = param[1]; + return x; + } + make_self_init(0); + function symbol$7(f, e){ + if(0 === e[0]){var x = e[1]; return [0, caml_call1(f, x)];} + var s = e[1]; + return [1, s]; + } + function map_err(f, e){ + if(0 === e[0]) return e; + var y = e[1]; + return [1, caml_call1(f, y)]; + } + var Get_error = [248, _dc_, caml_fresh_oo_id(0)]; + function get_exn(param){ + if(0 !== param[0]) throw caml_maybe_attach_backtrace(Get_error, 1); + var x = param[1]; + return x; + } + function flatten_l(l){ + function loop(acc, l){ + var acc$0 = acc, l$0 = l; + for(;;){ + if(! l$0) return [0, rev(acc$0)]; + var match = l$0[1]; + if(0 !== match[0]){var e = match[1]; return [1, e];} + var + l$1 = l$0[2], + x = match[1], + acc$1 = [0, x, acc$0], + acc$0 = acc$1, + l$0 = l$1; + } + } + return loop(0, l); + } + function symbol$8(e, f){return symbol$7(f, e);} + function Make$0(O){ + var S = _K_(O), empty = S[1], add = S[4], elements = S[23]; + return [0, + , + , + , + empty, + , + , + add, + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + elements]; + } + function _dd_(_pg_){ + var _ph_ = Make$0(_pg_); + return [0, + _ph_[4], + , + , + _ph_[7], + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + _ph_[51]]; + } + function length$2(_pf_){return caml_ml_string_length(_pf_);} + function is_empty$0(s){return symbol$0(s, _de_);} + function kmp_pattern_length(p){return caml_ml_string_length(p[2]);} + function get$1(dir){ + return dir + ? function + (s, i){ + return caml_string_get + (s, (caml_ml_string_length(s) - i | 0) - 1 | 0); + } + : function(_pe_, _pd_){return caml_string_get(_pe_, _pd_);}; + } + function kmp_compile(dir, str){ + var len = length$2(str), get = get$1(dir); + if(0 === len) return [0, [0], str]; + if(1 === len) return [0, [0, -1], str]; + var failure = caml_make_vect(len, 0); + caml_check_bound(failure, 0)[1] = -1; + var i = [0, 2], j = [0, 0]; + for(;;){ + if(! symbol$2(i[1], len)) return [0, failure, str]; + var match = j[1], _o__ = get(str, j[1]); + if(equal(get(str, i[1] - 1 | 0), _o__)){ + j[1]++; + var _pa_ = i[1], _o$_ = j[1]; + caml_check_bound(failure, _pa_)[1 + _pa_] = _o$_; + i[1]++; + } + else if(0 === match){ + var _pb_ = i[1]; + caml_check_bound(failure, _pb_)[1 + _pb_] = 0; + i[1]++; + } + else{ + if(! symbol$3(j[1], 0)) + throw caml_maybe_attach_backtrace([0, Assert_failure, _df_], 1); + var _pc_ = j[1]; + j[1] = caml_check_bound(failure, _pc_)[1 + _pc_]; + } + } + } + function kmp_compile$0(s){return kmp_compile(0, s);} + function kmp_find(pattern, s, idx){ + var + len = length$2(s), + i = [0, idx], + j = [0, 0], + pat_len = kmp_pattern_length(pattern); + for(;;){ + if(symbol$2(j[1], pat_len) && symbol$2(i[1] + j[1] | 0, len)){ + var + c = caml_string_get(s, i[1] + j[1] | 0), + expected = caml_string_get(pattern[2], j[1]); + if(equal(c, expected)) + j[1]++; + else{ + var + _o9_ = j[1], + fail_offset = caml_check_bound(pattern[1], _o9_)[1 + _o9_]; + if(symbol$4(fail_offset, 0)){ + if(! symbol$2(fail_offset, j[1])) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dg_], 1); + i[1] = (i[1] + j[1] | 0) - fail_offset | 0; + j[1] = fail_offset; + } + else{j[1] = 0; i[1]++;} + } + continue; + } + return symbol$1(j[1], pat_len) ? i[1] : -1; + } + } + function compile(sub){ + return symbol$1(length$2(sub), 1) + ? [0, caml_string_get(sub, 0)] + : [1, kmp_compile$0(sub)]; + } + function find$0(opt, pattern){ + if(opt) var sth = opt[1], start = sth; else var start = 0; + return function(s){ + if(0 !== pattern[0]){ + var pattern$0 = pattern[1]; + return kmp_find(pattern$0, s, start); + } + var c = pattern[1]; + try{var _o7_ = index_from(s, start, c); return _o7_;} + catch(_o8_){ + var _o6_ = caml_wrap_exception(_o8_); + if(_o6_ === Not_found) return -1; + throw caml_maybe_attach_backtrace(_o6_, 0); + }}; + } + function prefix(pre, s){ + var len = caml_ml_string_length(pre); + if(symbol$3(len, caml_ml_string_length(s))) return 0; + function check(i){ + var i$0 = i; + for(;;){ + if(symbol$1(i$0, len)) return 1; + if(caml_string_unsafe_get(s, i$0) !== caml_string_unsafe_get(pre, i$0)) + return 0; + var i$1 = i$0 + 1 | 0, i$0 = i$1; + } + } + return check(0); + } + var Lex_error = [248, _dh_, caml_fresh_oo_id(0)]; + function lex_error(err){ + throw caml_maybe_attach_backtrace([0, Lex_error, err], 1); + } + function error_pos(lexbuf){ + var + start = lexbuf[11], + cnum = lexbuf[7] - start[3] | 0, + enum$0 = lexbuf[6] - start[3] | 0; + return [0, start[2], cnum, enum$0]; + } + function string2num(s){ + try{var _o4_ = [3, caml_int_of_string(s)]; return _o4_;} + catch(_o5_){ + var _o3_ = caml_wrap_exception(_o5_); + if(_o3_[1] === Failure) return [2, s]; + throw caml_maybe_attach_backtrace(_o3_, 0); + } + } + function update_pos(lexbuf){ + var pos = lexbuf[11]; + lexbuf[11] = [0, pos[1], pos[2] + 1 | 0, lexbuf[5], pos[4]]; + return; + } + function int_of_hexchar(c){ + if(65 <= c){ + if(97 <= c){ + if(103 > c) return (c - 97 | 0) + 10 | 0; + } + else if(71 > c) return (c - 65 | 0) + 10 | 0; + } + else if(9 >= c - 48 >>> 0) return c - 48 | 0; + return lex_error(symbol(_dj_, symbol(make$1(1, c), _di_))); + } + function utf8_of_code(buf, idx, u){ + var i = [0, idx]; + function add_char(b, c){ + caml_bytes_unsafe_set(b, i[1], c); + i[1] = i[1] + 1 | 0; + return; + } + function max_used_bits(n, u){return 0 === (u >>> n | 0) ? 1 : 0;} + if(max_used_bits(7, u)) + add_char(buf, of_int_exn(u)); + else if(max_used_bits(11, u)){ + add_char(buf, of_int_exn(192 | (u >>> 6 | 0) & 31)); + add_char(buf, of_int_exn(128 | u & 63)); + } + else if(max_used_bits(16, u)){ + add_char(buf, of_int_exn(224 | (u >>> 12 | 0) & 15)); + add_char(buf, of_int_exn(128 | (u >>> 6 | 0) & 63)); + add_char(buf, of_int_exn(128 | u & 63)); + } + else if(max_used_bits(21, u)){ + add_char(buf, of_int_exn(240 | (u >>> 18 | 0) & 7)); + add_char(buf, of_int_exn(128 | (u >>> 12 | 0) & 63)); + add_char(buf, of_int_exn(128 | (u >>> 6 | 0) & 63)); + add_char(buf, of_int_exn(128 | u & 63)); + } + else if(max_used_bits(26, u)){ + add_char(buf, of_int_exn(248 | (u >>> 24 | 0) & 3)); + add_char(buf, of_int_exn(128 | (u >>> 18 | 0) & 63)); + add_char(buf, of_int_exn(128 | (u >>> 12 | 0) & 63)); + add_char(buf, of_int_exn(128 | (u >>> 6 | 0) & 63)); + add_char(buf, of_int_exn(128 | u & 63)); + } + else{ + add_char(buf, of_int_exn(252 | (u >>> 30 | 0) & 1)); + add_char(buf, of_int_exn(128 | (u >>> 24 | 0) & 63)); + add_char(buf, of_int_exn(128 | (u >>> 18 | 0) & 63)); + add_char(buf, of_int_exn(128 | (u >>> 12 | 0) & 63)); + add_char(buf, of_int_exn(128 | (u >>> 6 | 0) & 63)); + add_char(buf, of_int_exn(128 | u & 63)); + } + return i[1]; + } + function utf8_of_surrogate_pair(buf, idx, high, low){ + var + high$0 = high - 55296 | 0, + low$0 = low - 56320 | 0, + code = 65536 + (high$0 << 10 | low$0) | 0; + return utf8_of_code(buf, idx, code); + } + function escaping_error(msg, s, c, off){ + var offs = string_of_int(off); + if(c) + var c$0 = c[1], cs = symbol(_dl_, symbol(make$1(1, c$0), _dk_)); + else + var cs = _do_; + return lex_error + (symbol + (msg, symbol(_dn_, symbol(offs, symbol(cs, symbol(_dm_, s)))))); + } + function unescape_string(s){ + var + l = caml_ml_string_length(s), + s$0 = caml_create_bytes(l), + j = [0, 0], + u1 = [0, 0], + u2 = [0, 0], + state = [0, 748194550], + _oU_ = l - 1 | 0, + _oT_ = 0; + if(_oU_ >= 0){ + var i = _oT_; + for(;;){ + var _oV_ = state[1]; + a: + if(308570827 <= _oV_) + if(308570829 <= _oV_) + if(748194550 <= _oV_) + if(945120947 <= _oV_) + if(117 === caml_string_get(s, i)) + state[1] = 308570827; + else + escaping_error(_dq_, s, [0, caml_string_get(s, i)], i); + else{ + var c = caml_string_get(s, i); + if(92 === c) + state[1] = 258914209; + else{caml_bytes_unsafe_set(s$0, j[1], c); j[1] = j[1] + 1 | 0;} + } + else if(308570830 <= _oV_){ + state[1] = 748194550; + var _oX_ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _oX_; + if(56320 <= u2[1] && 57343 >= u2[1]){ + j[1] = utf8_of_surrogate_pair(s$0, j[1], u1[1], u2[1]); + break a; + } + escaping_error(_dr_, s, 0, i); + } + else{ + var _oY_ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _oY_; + state[1] = 308570830; + } + else if(308570828 <= _oV_){ + var _oZ_ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _oZ_; + state[1] = 308570829; + } + else{ + u2[1] = int_of_hexchar(caml_string_get(s, i)); + state[1] = 308570828; + } + else if(297481261 <= _oV_) + if(297481263 <= _oV_) + if(308569555 <= _oV_) + if(92 === caml_string_get(s, i)) + state[1] = 945120947; + else + escaping_error(_ds_, s, [0, caml_string_get(s, i)], i); + else{ + var _o0_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _o0_; + if(55296 <= u1[1] && 56319 >= u1[1]){state[1] = 308569555; break a;} + j[1] = utf8_of_code(s$0, j[1], u1[1]); + state[1] = 748194550; + } + else if(297481262 <= _oV_){ + var _o1_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _o1_; + state[1] = 297481263; + } + else{ + var _o2_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _o2_; + state[1] = 297481262; + } + else if(297481260 <= _oV_){ + u1[1] = int_of_hexchar(caml_string_get(s, i)); + state[1] = 297481261; + } + else{ + var match = caml_string_get(s, i); + b: + if(34 === match){ + caml_bytes_unsafe_set(s$0, j[1], 34); + state[1] = 748194550; + j[1] = j[1] + 1 | 0; + } + else{ + c: + if(92 <= match){ + if(118 > match){ + switch(match - 92 | 0){ + case 0: + caml_bytes_unsafe_set(s$0, j[1], 92); + state[1] = 748194550; + j[1] = j[1] + 1 | 0; + break; + case 6: + caml_bytes_unsafe_set(s$0, j[1], 8); + state[1] = 748194550; + j[1] = j[1] + 1 | 0; + break; + case 10: + caml_bytes_unsafe_set(s$0, j[1], 12); + state[1] = 748194550; + j[1] = j[1] + 1 | 0; + break; + case 18: + caml_bytes_unsafe_set(s$0, j[1], 10); + state[1] = 748194550; + j[1] = j[1] + 1 | 0; + break; + case 22: + caml_bytes_unsafe_set(s$0, j[1], 13); + state[1] = 748194550; + j[1] = j[1] + 1 | 0; + break; + case 24: + caml_bytes_unsafe_set(s$0, j[1], 9); + state[1] = 748194550; + j[1] = j[1] + 1 | 0; + break; + case 25: + state[1] = 297481260; break; + default: break c; + } + break b; + } + } + else if(47 === match){ + caml_bytes_unsafe_set(s$0, j[1], 47); + state[1] = 748194550; + j[1] = j[1] + 1 | 0; + break b; + } + escaping_error(_dt_, s, [0, caml_string_get(s, i)], i); + } + } + var _oW_ = i + 1 | 0; + if(_oU_ === i) break; + var i = _oW_; + } + } + if(748194550 !== state[1]) escaping_error(_dp_, s, 0, l); + return j[1] !== l ? unsafe_to_string(sub(s$0, 0, j[1])) : s; + } + function engine(tbl, state, buf){ + var result = caml_lex_engine(tbl, state, buf); + return result; + } + function Make$1(Compliance){ + function read$0(counter, lexbuf){ + var _oS_ = 0; + if(counter >= 50) + return caml_trampoline_return(ocaml_lex_read_rec, [0, lexbuf, _oS_]); + var counter$0 = counter + 1 | 0; + return ocaml_lex_read_rec(counter$0, lexbuf, _oS_); + } + function read(lexbuf){return caml_trampoline(read$0(0, lexbuf));} + function ocaml_lex_read_rec(counter, lexbuf, ocaml_lex_state){ + var ocaml_lex_state$0 = ocaml_lex_state; + for(;;){ + var + ocaml_lex_state$1 = engine(ocaml_lex_tables, ocaml_lex_state$0, lexbuf); + if(26 >= ocaml_lex_state$1 >>> 0) + switch(ocaml_lex_state$1){ + case 0: + return _du_; + case 1: + return _dv_; + case 2: + return 2; + case 3: + return 0; + case 4: + return 1; + case 5: + return 9; + case 6: + return 10; + case 7: + return caml_call1(Compliance[5], 13) + ? 13 + : lex_error(symbol(_dx_, symbol(lexeme(lexbuf), _dw_))); + case 8: + return caml_call1(Compliance[5], 14) + ? 14 + : lex_error(symbol(_dz_, symbol(lexeme(lexbuf), _dy_))); + case 9: + return caml_call1(Compliance[6], 11) + ? 11 + : lex_error(symbol(_dB_, symbol(lexeme(lexbuf), _dA_))); + case 10: + return caml_call1(Compliance[6], 12) + ? 12 + : lex_error(symbol(_dD_, symbol(lexeme(lexbuf), _dC_))); + case 11: + return 7; + case 12: + return 8; + case 13: + return caml_call1(Compliance[2], 3); + case 14: + return caml_call1(Compliance[2], 5); + case 15: + return caml_call1(Compliance[2], 5); + case 16: + return caml_call1(Compliance[2], 4); + case 17: + var tok = string2num(lexeme(lexbuf)); + if(typeof tok !== "number") + switch(tok[0]){ + case 2: + return caml_call1(Compliance[4], tok); + case 3: + return caml_call1(Compliance[3], tok); + } + return tok; + case 18: + var _oR_ = [4, caml_float_of_string(lexeme(lexbuf))]; + return caml_call1(Compliance[2], _oR_); + case 19: + return _dE_; + case 20: + var s = sub_lexeme(lexbuf, lexbuf[5] + 1 | 0, lexbuf[6] - 1 | 0); + return [0, unescape_string(s)]; + case 21: + return 6; + case 22: + if(counter >= 50) + return caml_trampoline_return(read$0, [0, lexbuf]); + var counter$0 = counter + 1 | 0; + return read$0(counter$0, lexbuf); + case 23: + update_pos(lexbuf); + if(counter >= 50) + return caml_trampoline_return(read$0, [0, lexbuf]); + var counter$1 = counter + 1 | 0; + return read$0(counter$1, lexbuf); + case 24: + var match = caml_call1(Compliance[7], 0); + if(0 !== match[0]){var err = match[1]; return [5, err];} + read_comment(lexbuf); + if(counter >= 50) + return caml_trampoline_return(read$0, [0, lexbuf]); + var counter$2 = counter + 1 | 0; + return read$0(counter$2, lexbuf); + case 25: + var match$0 = caml_call1(Compliance[7], 0); + if(0 !== match$0[0]){var err$0 = match$0[1]; return [5, err$0];} + if(counter >= 50) + return caml_trampoline_return(read$0, [0, lexbuf]); + var counter$3 = counter + 1 | 0; + return read$0(counter$3, lexbuf); + default: + return lex_error(symbol(_dG_, symbol(lexeme(lexbuf), _dF_))); + } + caml_call1(lexbuf[1], lexbuf); + var ocaml_lex_state$0 = ocaml_lex_state$1; + } + } + function read_comment$0(counter, lexbuf){ + var _oQ_ = 88; + if(counter >= 50) + return caml_trampoline_return + (ocaml_lex_read_comment_rec, [0, lexbuf, _oQ_]); + var counter$0 = counter + 1 | 0; + return ocaml_lex_read_comment_rec(counter$0, lexbuf, _oQ_); + } + function read_comment(lexbuf){ + return caml_trampoline(read_comment$0(0, lexbuf)); + } + function ocaml_lex_read_comment_rec(counter, lexbuf, ocaml_lex_state){ + var ocaml_lex_state$0 = ocaml_lex_state; + for(;;){ + var + ocaml_lex_state$1 = engine(ocaml_lex_tables, ocaml_lex_state$0, lexbuf); + if(3 >= ocaml_lex_state$1 >>> 0) + switch(ocaml_lex_state$1){ + case 0: + return; + case 1: + update_pos(lexbuf); + if(counter >= 50) + return caml_trampoline_return(read_comment$0, [0, lexbuf]); + var counter$0 = counter + 1 | 0; + return read_comment$0(counter$0, lexbuf); + case 2: + return lex_error(_dH_); + default: + if(counter >= 50) + return caml_trampoline_return(read_comment$0, [0, lexbuf]); + var counter$1 = counter + 1 | 0; + return read_comment$0(counter$1, lexbuf); + } + caml_call1(lexbuf[1], lexbuf); + var ocaml_lex_state$0 = ocaml_lex_state$1; + } + } + return [0, read]; + } + var Json_error_info = [248, _dI_, caml_fresh_oo_id(0)]; + function create_from_lexbuf(lexbuf, emsg){ + var + match = error_pos(lexbuf), + echar = match[3], + schar = match[2], + eline = match[1]; + return [0, eline, schar, echar, emsg]; + } + function log2(n){return 1 < n ? 1 + log2(n >> 1) | 0 : 0;} + function bits$0(n){return log2(n) + 1 | 0;} + var max_json_int = 53 < bits$0(max_int) ? 2097151 : max_int; + function string_of_float_json(f){ + var is_int = (f | 0) == f ? 1 : 0; + if(is_int && Math.abs(f) <= max_json_int){ + var int_value = f | 0; + return symbol(string_of_int(int_value), _dJ_); + } + var + s = caml_format_float("%.16g", f), + s$0 = caml_float_of_string(s) == f ? s : caml_format_float("%.17g", f); + if(! contains(s$0, 46) && ! contains(s$0, 101)) return symbol(s$0, _dK_); + return s$0; + } + function token_error(tok){ + if(typeof tok === "number") + switch(tok){ + case 0: + var err = _dL_; break; + case 1: + var err = _dM_; break; + case 2: + var err = _dN_; break; + case 3: + var err = _dO_; break; + case 4: + var err = _dP_; break; + case 5: + var err = _dQ_; break; + case 6: + var err = _dR_; break; + case 7: + var err = _dS_; break; + case 8: + var err = _dT_; break; + case 9: + var err = _dU_; break; + case 10: + var err = _dV_; break; + case 11: + var err = _dW_; break; + case 12: + var err = _dX_; break; + case 13: + var err = _dY_; break; + default: var err = _dZ_; + } + else + switch(tok[0]){ + case 0: + var s = tok[1], err = symbol(_d1_, symbol(s, _d0_)); break; + case 1: + var s$0 = tok[1], err = s$0; break; + case 2: + var s$1 = tok[1], err = symbol(_d3_, symbol(s$1, _d2_)); break; + case 3: + var i = tok[1], err = symbol(_d5_, symbol(string_of_int(i), _d4_)); + break; + case 4: + var f = tok[1], err = symbol(_d7_, symbol(string_of_float(f), _d6_)); + break; + case 5: + var s$2 = tok[1], err = symbol(_d9_, symbol(s$2, _d8_)); break; + default: + var + b = tok[1], + _oP_ = b ? _d$_ : _eb_, + err = symbol(_ea_, symbol(_oP_, _d__)); + } + return [0, 148000204, err]; + } + function Make$2(Compliance){ + var Parse_error = [248, _ec_, caml_fresh_oo_id(0)]; + function json_value(reader){ + function token_value(tok){ + if(typeof tok === "number") + switch(tok){ + case 0: + return object_value_start(0); + case 2: + return Compliance[12]; + case 3: + return caml_call1(Compliance[9], -625979624); + case 4: + return caml_call1(Compliance[9], 3900603); + case 5: + return caml_call1(Compliance[9], 874173192); + case 6: + throw caml_maybe_attach_backtrace([0, Parse_error, 3456156], 1); + case 9: + return array_value_start(0); + case 11: + return variant_value_start(0); + case 13: + return tuple_value_start(0); + } + else + switch(tok[0]){ + case 0: + var s = tok[1]; return caml_call1(Compliance[13], s); + case 2: + var s$0 = tok[1]; return caml_call1(Compliance[11], s$0); + case 3: + var i = tok[1]; return caml_call1(Compliance[10], i); + case 4: + var f = tok[1]; return caml_call1(Compliance[9], [0, 365180284, f]); + case 6: + var b = tok[1]; return caml_call1(Compliance[14], b); + } + throw caml_maybe_attach_backtrace([0, Parse_error, token_error(tok)], 1); + } + function value(param){return token_value(caml_call1(reader, 0));} + function array_value_start(param){ + var tok = caml_call1(reader, 0); + if(typeof tok === "number" && 10 === tok) + return caml_call1(Compliance[16], 0); + return array_values_start(tok, 0); + } + function array_values_start(tok, acc){ + var v = token_value(tok), tok$0 = caml_call1(reader, 0); + if(typeof tok$0 === "number"){ + if(7 === tok$0) return array_values([0, v, acc]); + if(10 === tok$0){ + var _oO_ = rev([0, v, acc]); + return caml_call1(Compliance[16], _oO_); + } + } + throw caml_maybe_attach_backtrace + ([0, Parse_error, token_error(tok$0)], 1); + } + function array_values(acc){ + var acc$0 = acc; + for(;;){ + var v = value(0), tok = caml_call1(reader, 0); + if(typeof tok === "number"){ + if(7 === tok){var acc$1 = [0, v, acc$0], acc$0 = acc$1; continue;} + if(10 === tok){ + var _oN_ = rev([0, v, acc$0]); + return caml_call1(Compliance[16], _oN_); + } + } + throw caml_maybe_attach_backtrace + ([0, Parse_error, token_error(tok)], 1); + } + } + function object_value_start(param){ + var tok = caml_call1(reader, 0); + if(typeof tok === "number" && 1 === tok) + return caml_call1(Compliance[15], 0); + return object_values_start(tok, 0); + } + function object_values_start(tok, acc){ + var v = colon_value(tok, 0), tok$0 = caml_call1(reader, 0); + if(typeof tok$0 === "number"){ + if(1 === tok$0){ + var _oM_ = rev([0, v, acc]); + return caml_call1(Compliance[15], _oM_); + } + if(7 === tok$0) return object_values([0, v, acc]); + } + throw caml_maybe_attach_backtrace + ([0, Parse_error, token_error(tok$0)], 1); + } + function object_values(acc){ + var acc$0 = acc; + for(;;){ + var v = key_colon_value(0), tok = caml_call1(reader, 0); + if(typeof tok === "number"){ + if(1 === tok){ + var _oL_ = rev([0, v, acc$0]); + return caml_call1(Compliance[15], _oL_); + } + if(7 === tok){var acc$1 = [0, v, acc$0], acc$0 = acc$1; continue;} + } + throw caml_maybe_attach_backtrace + ([0, Parse_error, token_error(tok)], 1); + } + } + function colon_value(v, param){ + if(typeof v !== "number" && 0 === v[0]){ + var k = v[1], tok = caml_call1(reader, 0); + if(typeof tok === "number" && 8 === tok) return [0, k, value(0)]; + throw caml_maybe_attach_backtrace + ([0, Parse_error, token_error(tok)], 1); + } + throw caml_maybe_attach_backtrace([0, Parse_error, token_error(v)], 1); + } + function key_colon_value(param){ + var tok = caml_call1(reader, 0); + if(typeof tok !== "number" && 0 === tok[0]){ + var k = tok[1], tok$0 = caml_call1(reader, 0); + if(typeof tok$0 === "number" && 8 === tok$0) return [0, k, value(0)]; + throw caml_maybe_attach_backtrace + ([0, Parse_error, token_error(tok$0)], 1); + } + throw caml_maybe_attach_backtrace([0, Parse_error, token_error(tok)], 1); + } + function tuple_value_start(param){ + var v1 = value(0), tok = caml_call1(reader, 0); + if(typeof tok === "number"){ + if(7 === tok){ + var v2 = value(0), tok$0 = caml_call1(reader, 0); + if(typeof tok$0 === "number"){ + if(7 === tok$0) return tuple_values([0, v2, [0, v1, 0]]); + if(14 <= tok$0) + return caml_call1(Compliance[17], [0, v1, [0, v2, 0]]); + } + throw caml_maybe_attach_backtrace + ([0, Parse_error, token_error(tok$0)], 1); + } + if(14 <= tok) + throw caml_maybe_attach_backtrace([0, Parse_error, _ed_], 1); + } + throw caml_maybe_attach_backtrace([0, Parse_error, token_error(tok)], 1); + } + function tuple_values(acc){ + var acc$0 = acc; + for(;;){ + var v = value(0), tok = caml_call1(reader, 0); + if(typeof tok === "number"){ + if(7 === tok){var acc$1 = [0, v, acc$0], acc$0 = acc$1; continue;} + if(14 <= tok){ + var _oK_ = rev([0, v, acc$0]); + return caml_call1(Compliance[17], _oK_); + } + } + throw caml_maybe_attach_backtrace + ([0, Parse_error, token_error(tok)], 1); + } + } + function variant_value_start(param){ + var tok = caml_call1(reader, 0); + if(typeof tok === "number"){ + if(12 === tok) + throw caml_maybe_attach_backtrace([0, Parse_error, _ee_], 1); + } + else if(0 === tok[0]){ + var k = tok[1], tok$0 = caml_call1(reader, 0); + if(typeof tok$0 === "number"){ + if(8 === tok$0) return variant_end(k, [0, value(0)]); + if(12 === tok$0) return caml_call2(Compliance[18], k, 0); + } + throw caml_maybe_attach_backtrace + ([0, Parse_error, token_error(tok$0)], 1); + } + throw caml_maybe_attach_backtrace([0, Parse_error, token_error(tok)], 1); + } + function variant_end(k, v){ + var tok = caml_call1(reader, 0); + if(typeof tok === "number" && 12 === tok) + return caml_call2(Compliance[18], k, v); + throw caml_maybe_attach_backtrace([0, Parse_error, token_error(tok)], 1); + } + try{var tok = caml_call1(reader, 0);} + catch(exn$0){ + var exn = caml_wrap_exception(exn$0); + if(exn[1] === Parse_error && 3456156 === exn[2]) return 0; + throw caml_maybe_attach_backtrace(exn, 0); + } + if(typeof tok === "number" && 6 === tok) return 0; + return [0, token_value(tok)]; + } + function decode(reader){ + try{var res = json_value(reader);} + catch(exn$0){ + var exn = caml_wrap_exception(exn$0); + if(exn[1] === Parse_error){ + var match = exn[2]; + if(typeof match === "number") return _ef_; + var err = match[2]; + return [1, err]; + } + if(exn[1] !== Lex_error) throw caml_maybe_attach_backtrace(exn, 0); + var err$0 = exn[2]; + return [1, err$0]; + } + return [0, res]; + } + return [0, Compliance, decode]; + } + function nibble_to_hex(i){ + var _oJ_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_oJ_); + } + function add_hex_byte(add_char, i){ + caml_call1(add_char, nibble_to_hex((i >>> 4 | 0) & 15)); + return caml_call1(add_char, nibble_to_hex(i & 15)); + } + function escape(add_char, add_string, s){ + var l = caml_ml_string_length(s), _oH_ = l - 1 | 0, _oG_ = 0; + if(_oH_ >= 0){ + var i = _oG_; + for(;;){ + var c = caml_string_get(s, i); + a: + if(92 === c) + caml_call1(add_string, _eg_); + else{ + b: + { + c: + { + if(35 > c){ + if(8 > c) break b; + switch(c - 8 | 0){ + case 0: + caml_call1(add_string, _ei_); break; + case 1: + caml_call1(add_string, _ej_); break; + case 2: + caml_call1(add_string, _ek_); break; + case 4: + caml_call1(add_string, _el_); break; + case 5: + caml_call1(add_string, _em_); break; + case 26: + caml_call1(add_string, _en_); break; + case 24: + case 25: + break c; + default: break b; + } + break a; + } + if(127 === c) break b; + } + caml_call1(add_char, caml_string_get(s, i)); + break a; + } + caml_call1(add_string, _eh_); + add_hex_byte(add_char, c); + } + var _oI_ = i + 1 | 0; + if(_oH_ === i) break; + var i = _oI_; + } + } + return; + } + function Make$3(Compliance){ + function to_json_string(s){ + var buf = create$1(100); + function add_char$0(_oF_){return add_char(buf, _oF_);} + function add_string$0(_oE_){return add_string(buf, _oE_);} + function add_quote_string(s){ + add_char$0(34); + escape(add_char$0, add_string$0, s); + return add_char$0(34); + } + add_quote_string(s); + return contents(buf); + } + function pp_list(sep, ppx, out, l){ + function pp_sep(out, param){ + return caml_call1(fprintf$0(out)(_eo_), sep); + } + return pp_print_list([0, pp_sep], ppx, out, l); + } + function format(out, json){ + if(typeof json === "number") return pp_print_string(out, _ep_); + var _ov_ = json[1]; + if(726928360 <= _ov_){ + if(737456202 === _ov_){var b = json[2]; return pp_print_bool(out, b);} + if(928231259 > _ov_){ + if(848054398 <= _ov_){ + var l$0 = json[2]; + return l$0 + ? caml_call2 + (fprintf$0(out)(_eu_), + function(_oC_, _oD_){ + return pp_list(_et_, format, _oC_, _oD_); + }, + l$0) + : pp_print_string(out, _ev_); + } + var l$1 = json[2]; + return 0 === l$1 + ? pp_print_string(out, _ew_) + : caml_call2 + (fprintf$0(out)(_ey_), + function(_oA_, _oB_){ + return pp_list(_ex_, format, _oA_, _oB_); + }, + l$1); + } + if(963043957 <= _ov_){ + var l = json[2]; + return l + ? caml_call2 + (fprintf$0(out)(_er_), + function(_oy_, _oz_){ + return pp_list(_eq_, format_field, _oy_, _oz_); + }, + l) + : pp_print_string(out, _es_); + } + } + else{ + if(3654863 === _ov_){ + var i = json[2]; + return pp_print_string(out, string_of_int(i)); + } + if(365180284 <= _ov_){ + if(708012133 > _ov_){ + var f = json[2], s$2 = caml_call1(Compliance[8], f); + return pp_print_string(out, s$2); + } + var _ow_ = json[2], match = _ow_[2], s$0 = _ow_[1]; + if(match){ + var json$0 = match[1], s$1 = to_json_string(s$0); + return caml_call3(fprintf$0(out)(_ez_), s$1, format, json$0); + } + var _ox_ = to_json_string(s$0); + return caml_call1(fprintf$0(out)(_eA_), _ox_); + } + if(-752863768 > _ov_){ + var s$3 = json[2]; + return pp_print_string(out, to_json_string(s$3)); + } + } + var s = json[2]; + return pp_print_string(out, s); + } + function format_field(out, param){ + var json = param[2], name = param[1], _ou_ = to_json_string(name); + return caml_call3(fprintf$0(out)(_eB_), _ou_, format, json); + } + function pretty_print(out, json){ + return caml_call2(fprintf$0(out)(_eC_), format, json); + } + function pretty_print_to_string(json){ + return caml_call2(asprintf(_eD_), pretty_print, json); + } + function pretty_print_to_channel(oc, json){ + var fmt = formatter_of_out_channel(oc); + return caml_call2(fprintf$0(fmt)(_eE_), pretty_print, json); + } + return [0, + , + , + , + , + pretty_print, + pretty_print_to_string, + pretty_print_to_channel]; + } + function _eF_(_os_){ + var _ot_ = Make$3(_os_); + return [0, _ot_[5], _ot_[6], _ot_[7]]; + } + function error$2(msg, json){ + throw caml_maybe_attach_backtrace([0, Failure, msg], 1); + } + function Strict(M){ + function to_assoc(json){ + if(typeof json !== "number" && 963043957 === json[1]){var obj = json[2]; return obj;} + return error$2(_eG_, json); + } + function to_string(json){ + if(typeof json !== "number" && -976970511 === json[1]){var s = json[2]; return s;} + return error$2(_eH_, json); + } + return [0, , , , to_assoc, , , to_string]; + } + function null$1(param){return 870828711;} + var + M = [0, null$1], + _eI_ = Strict(M), + to_assoc = _eI_[4], + to_string$2 = _eI_[7]; + function token_to_string(tok){ + if(typeof tok === "number") + switch(tok){ + case 0: + return _eJ_; + case 1: + return _eK_; + case 2: + return _eL_; + case 3: + return _eM_; + case 4: + return _eN_; + case 5: + return _eO_; + case 6: + return _eP_; + case 7: + return _eQ_; + case 8: + return _eR_; + case 9: + return _eS_; + case 10: + return _eT_; + case 11: + return _eU_; + case 12: + return _eV_; + case 13: + return _eW_; + default: return _eX_; + } + switch(tok[0]){ + case 0: + var s = tok[1]; return s; + case 1: + var err = tok[1]; return symbol(_eZ_, symbol(err, _eY_)); + case 2: + var s$0 = tok[1]; return s$0; + case 3: + var i = tok[1]; return string_of_int(i); + case 4: + var f = tok[1]; return string_of_float(f); + case 5: + var err$0 = tok[1]; return err$0; + default: var b = tok[1]; return b ? _e0_ : _e1_; + } + } + function Make$4(Lexxer, Parser){ + function read_json(lexbuf){ + function reader(param){return caml_call1(Lexxer[1], lexbuf);} + var match = caml_call1(Parser[2], reader); + if(0 !== match[0]){var s = match[1]; return [1, s];} + var match$0 = match[1]; + if(! match$0) return _e3_; + var res = match$0[1]; + try{var tok = reader(0);} + catch(exn$0){ + var exn = caml_wrap_exception(exn$0); + if(exn[1] !== Lex_error) throw caml_maybe_attach_backtrace(exn, 0); + var err = exn[2]; + return [1, err]; + } + if(typeof tok === "number" && 6 === tok) return [0, res]; + return [1, symbol(_e2_, token_to_string(tok))]; + } + function read_json_error_info(lexbuf){ + var res = read_json(lexbuf); + if(0 === res[0]) return res; + var err = res[1], err_info = create_from_lexbuf(lexbuf, err); + return [1, err_info]; + } + function json_of_string_error_info(s){ + var lexbuf = from_string(0, s); + return read_json_error_info(lexbuf); + } + function json_of_channel_error_info(inc){ + var lexbuf = from_channel(0, inc); + return read_json_error_info(lexbuf); + } + function json_of_file_error_info(filename){ + try{ + var inc = open_in(filename), res = json_of_channel_error_info(inc); + _i_(inc); + return res; + } + catch(exn$0){ + var exn = caml_wrap_exception(exn$0); + if(exn[1] !== Sys_error) throw caml_maybe_attach_backtrace(exn, 0); + var err = exn[2]; + return [1, [0, 0, 0, 0, err]]; + } + } + function json_of_lexbuf_error_info_comp(opt, lexbuf){ + if(opt) var sth = opt[1], stream = sth; else var stream = 0; + function reader(param){return caml_call1(Lexxer[1], lexbuf);} + var match = caml_call1(Parser[2], reader); + if(0 === match[0]){ + var match$0 = match[1]; + if(match$0){ + var res = match$0[1]; + a: + if(stream) + var _oo_ = [0, [0, res]]; + else{ + try{var tok = reader(0);} + catch(exn$0){ + var exn = caml_wrap_exception(exn$0); + if(exn[1] !== Lex_error) throw caml_maybe_attach_backtrace(exn, 0); + var err = exn[2], _oq_ = [1, err], _oo_ = _oq_; + break a; + } + b: + { + if(typeof tok === "number" && 6 === tok){var _or_ = [0, [0, res]]; break b;} + var _or_ = [1, symbol(_e4_, token_to_string(tok))]; + } + var _oo_ = _or_; + } + var _op_ = _oo_; + } + else + var _op_ = stream ? _e5_ : _e6_; + var res$0 = _op_; + } + else + var s$0 = match[1], res$0 = [1, s$0]; + if(0 === res$0[0]){var res$1 = res$0[1]; return [0, res$1];} + var s = res$0[1], err_info = create_from_lexbuf(lexbuf, s); + return [1, err_info]; + } + function read_json_stream_error_info(fin, lexbuf){ + function reader(param){return caml_call1(Lexxer[1], lexbuf);} + function f(i){ + var match = caml_call1(Parser[2], reader); + if(0 !== match[0]){ + var err = match[1]; + caml_call1(fin, 0); + var err_info = create_from_lexbuf(lexbuf, err); + throw caml_maybe_attach_backtrace([0, Json_error_info, err_info], 1); + } + var match$0 = match[1]; + if(match$0){var res = match$0[1]; return [0, res];} + caml_call1(fin, 0); + return 0; + } + return from(f); + } + function stream_from_string_error_info(s){ + var lexbuf = from_string(0, s); + return read_json_stream_error_info(function(param){return 0;}, lexbuf); + } + function stream_from_channel_error_info(opt, inc){ + if(opt) + var sth = opt[1], fin = sth; + else + var fin = function(param){return 0;}; + var lexbuf = from_channel(0, inc); + return read_json_stream_error_info(fin, lexbuf); + } + function stream_from_file_error_info(filename){ + var inc = open_in(filename); + return stream_from_channel_error_info + ([0, function(param){return _i_(inc);}], inc); + } + function stream_from_lexbuf_error_info(lexbuf){ + return read_json_stream_error_info(function(param){return 0;}, lexbuf); + } + return [0, + , + , + , + , + , + , + , + , + , + , + , + , + , + , + json_of_string_error_info, + json_of_file_error_info, + json_of_channel_error_info, + , + , + json_of_lexbuf_error_info_comp, + , + , + , + , + , + stream_from_string_error_info, + stream_from_channel_error_info, + stream_from_file_error_info, + , + stream_from_lexbuf_error_info]; + } + function Make$5(Compliance){ + function nibble_to_hex(i){ + var _on_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_on_); + } + function add_hex_byte(oc, i){ + _j_(oc, nibble_to_hex((i >>> 4 | 0) & 15)); + return _j_(oc, nibble_to_hex(i & 15)); + } + function escape(oc, s){ + function add_char(_om_){return _j_(oc, _om_);} + function add_string(_ol_){return output_string(oc, _ol_);} + var l = caml_ml_string_length(s), _oj_ = l - 1 | 0, _oi_ = 0; + if(_oj_ >= 0){ + var i = _oi_; + for(;;){ + var c = caml_string_get(s, i); + a: + if(92 === c) + add_string(_e7_); + else{ + b: + { + c: + { + if(35 > c){ + if(8 > c) break b; + switch(c - 8 | 0){ + case 0: + add_string(_e9_); break; + case 1: + add_string(_e__); break; + case 2: + add_string(_e$_); break; + case 4: + add_string(_fa_); break; + case 5: + add_string(_fb_); break; + case 26: + add_string(_fc_); break; + case 24: + case 25: + break c; + default: break b; + } + break a; + } + if(127 === c) break b; + } + add_char(caml_string_get(s, i)); + break a; + } + add_string(_e8_); + add_hex_byte(oc, c); + } + var _ok_ = i + 1 | 0; + if(_oj_ === i) break; + var i = _ok_; + } + } + return; + } + function json_to_channel_fmt(oc, json, eol, incr, psep){ + function add_char(_oh_){return _j_(oc, _oh_);} + function add_string(_og_){return output_string(oc, _og_);} + function add_quote_string(s){ + add_char(34); + escape(oc, s); + return add_char(34); + } + function add_int(i){return add_string(string_of_int(i));} + function add_float(f){return add_string(caml_call1(Compliance[8], f));} + var psep$0 = symbol(_fd_, psep); + function fmt(off, value){ + if(typeof value === "number") return add_string(_fe_); + var _of_ = value[1]; + if(708012133 <= _of_){ + if(737456202 > _of_){ + if(726928360 <= _of_){ + var t = value[2], ldr$1 = make$1(off, 32); + add_char(40); + add_string(eol); + json_list(off + incr | 0, t); + add_string(eol); + add_string(ldr$1); + return add_char(41); + } + var v = value[2], ldr$2 = make$1(off, 32); + add_char(60); + add_string(eol); + variant(off + incr | 0, v); + add_string(eol); + add_string(ldr$2); + return add_char(62); + } + if(928231259 <= _of_){ + if(963043957 <= _of_){ + var o = value[2], ldr = make$1(off, 32); + add_char(123); + add_string(eol); + json_assoc(off + incr | 0, o); + add_string(eol); + add_string(ldr); + return add_char(125); + } + var s = value[2]; + return add_string(s); + } + if(848054398 <= _of_){ + var l = value[2], ldr$0 = make$1(off, 32); + add_char(91); + add_string(eol); + json_list(off + incr | 0, l); + add_string(eol); + add_string(ldr$0); + return add_char(93); + } + var b = value[2]; + return add_string(string_of_bool(b)); + } + if(-752863768 === _of_){var s$0 = value[2]; return add_string(s$0);} + if(3654863 <= _of_){ + if(365180284 <= _of_){var f = value[2]; return add_float(f);} + var i = value[2]; + return add_int(i); + } + if(-375152890 <= _of_){var s$1 = value[2]; return add_string(s$1);} + var s$2 = value[2]; + return add_quote_string(s$2); + } + function json_assoc(off, o){ + var + ldr = make$1(off, 32), + sep = [0, ldr], + newsep = symbol(_ff_, symbol(eol, ldr)); + return iter + (function(v){ + add_string(sep[1]); + sep[1] = newsep; + return pair(off, v); + }, + o); + } + function pair(off, param){ + var v = param[2], k = param[1]; + add_quote_string(k); + add_string(psep$0); + return fmt(off, v); + } + function json_list(off, l){ + var + ldr = make$1(off, 32), + sep = [0, ldr], + newsep = symbol(_fg_, symbol(eol, ldr)); + return iter + (function(v){ + add_string(sep[1]); + sep[1] = newsep; + return fmt(off, v); + }, + l); + } + function variant(off, param){ + var j = param[2], k = param[1]; + add_quote_string(k); + if(! j) return; + var j$0 = j[1]; + add_string(psep$0); + return fmt(off + incr | 0, j$0); + } + fmt(0, json); + return add_string(eol); + } + function json_to_channel(_n__){ + function _n$_(_ob_, _oc_, _od_, _oe_){ + return json_to_channel_fmt(_n__, _ob_, _oc_, _od_, _oe_); + } + return function(_oa_){return _n$_(_oa_, _fi_, 0, _fh_);}; + } + function json_to_file_exn(file, json){ + var oc = open_out(file); + try{json_to_channel(oc)(json); close_out(oc); return;} + catch(exn$0){ + var exn = caml_wrap_exception(exn$0); + close_out(oc); + throw caml_maybe_attach_backtrace(exn, 0); + } + } + return [0, , , , , , , , , json_to_file_exn, , json_to_channel]; + } + function Make$6(Compliance){ + function nibble_to_hex(i){ + var _n9_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_n9_); + } + function add_hex_byte(buf, i){ + add_char(buf, nibble_to_hex((i >>> 4 | 0) & 15)); + return add_char(buf, nibble_to_hex(i & 15)); + } + function escape(buf, s){ + function add_char$0(_n8_){return add_char(buf, _n8_);} + function add_string$0(_n7_){return add_string(buf, _n7_);} + var l = caml_ml_string_length(s), _n5_ = l - 1 | 0, _n4_ = 0; + if(_n5_ >= 0){ + var i = _n4_; + for(;;){ + var c = caml_string_get(s, i); + a: + if(92 === c) + add_string$0(_fj_); + else{ + b: + { + c: + { + if(35 > c){ + if(8 > c) break b; + switch(c - 8 | 0){ + case 0: + add_string$0(_fl_); break; + case 1: + add_string$0(_fm_); break; + case 2: + add_string$0(_fn_); break; + case 4: + add_string$0(_fo_); break; + case 5: + add_string$0(_fp_); break; + case 26: + add_string$0(_fq_); break; + case 24: + case 25: + break c; + default: break b; + } + break a; + } + if(127 === c) break b; + } + add_char$0(caml_string_get(s, i)); + break a; + } + add_string$0(_fk_); + add_hex_byte(buf, c); + } + var _n6_ = i + 1 | 0; + if(_n5_ === i) break; + var i = _n6_; + } + } + return; + } + function json_to_buffer(buf, json){ + function add_char$0(_n3_){return add_char(buf, _n3_);} + function add_string$0(_n2_){return add_string(buf, _n2_);} + function add_quote_string(s){ + add_char$0(34); + escape(buf, s); + return add_char$0(34); + } + function add_int(i){return add_string$0(string_of_int(i));} + function add_float(f){return add_string$0(caml_call1(Compliance[8], f));} + function fmt(value){ + if(typeof value === "number") return add_string$0(_fr_); + var _n1_ = value[1]; + if(708012133 <= _n1_){ + if(737456202 > _n1_){ + if(726928360 <= _n1_){ + var t = value[2]; + add_char$0(40); + json_list(t); + return add_char$0(41); + } + var v = value[2]; + add_char$0(60); + variant(v); + return add_char$0(62); + } + if(928231259 <= _n1_){ + if(963043957 <= _n1_){ + var o = value[2]; + add_char$0(123); + json_assoc(o); + return add_char$0(125); + } + var s = value[2]; + return add_string$0(s); + } + if(848054398 <= _n1_){ + var l = value[2]; + add_char$0(91); + json_list(l); + return add_char$0(93); + } + var b = value[2]; + return add_string$0(string_of_bool(b)); + } + if(-752863768 === _n1_){var s$0 = value[2]; return add_string$0(s$0);} + if(3654863 <= _n1_){ + if(365180284 <= _n1_){var f = value[2]; return add_float(f);} + var i = value[2]; + return add_int(i); + } + if(-375152890 <= _n1_){var s$1 = value[2]; return add_string$0(s$1);} + var s$2 = value[2]; + return add_quote_string(s$2); + } + function json_assoc(o){ + var sep = [0, _fs_]; + return iter + (function(v){ + add_string$0(sep[1]); + sep[1] = _ft_; + return pair(v); + }, + o); + } + function pair(param){ + var v = param[2], k = param[1]; + add_quote_string(k); + add_char$0(58); + return fmt(v); + } + function json_list(l){ + var sep = [0, _fu_]; + return iter + (function(v){ + add_string$0(sep[1]); + sep[1] = _fv_; + return fmt(v); + }, + l); + } + function variant(param){ + var j = param[2], k = param[1]; + add_quote_string(k); + if(! j) return; + var j$0 = j[1]; + add_char$0(58); + return fmt(j$0); + } + return fmt(json); + } + function json_to_string(json){ + var buf = create$1(100); + json_to_buffer(buf, json); + return contents(buf); + } + return [0, , , json_to_string, , , , , , , , json_to_buffer]; + } + var Json_error = [248, _fw_, caml_fresh_oo_id(0)]; + function json_error(msg){ + throw caml_maybe_attach_backtrace([0, Json_error, msg], 1); + } + function Common_reader(Compliance){ + var + Lexxer = Make$1(Compliance), + Parser = Make$2(Compliance), + include = function(_n0_){return Make$4(Lexxer, _n0_);}(Parser), + json_of_string_error_info = include[15], + json_of_file_error_info = include[16], + json_of_channel_error_info = include[17], + json_of_lexbuf_error_info_comp = include[20], + stream_from_string_error_info = include[26], + stream_from_channel_error_info = include[27], + stream_from_file_error_info = include[28], + stream_from_lexbuf_error_info = include[30], + Internal_reader = + [0, + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + json_of_string_error_info, + json_of_file_error_info, + json_of_channel_error_info, + , + , + json_of_lexbuf_error_info_comp, + , + , + , + , + , + stream_from_string_error_info, + stream_from_channel_error_info, + stream_from_file_error_info, + , + stream_from_lexbuf_error_info]; + function error_to_string(error_info, fname, lnum){ + if(lnum) var lnum$0 = lnum[1], lnum$1 = lnum$0; else var lnum$1 = 1; + var + _nW_ = error_info[4], + _nX_ = error_info[3], + _nY_ = error_info[2], + _nZ_ = (lnum$1 + error_info[1] | 0) - 1 | 0; + if(fname) + var name = fname[1], fname$0 = symbol(_fy_, symbol(name, _fx_)); + else + var fname$0 = _fA_; + var loc = caml_call4(sprintf(_fz_), fname$0, _nZ_, _nY_, _nX_); + return symbol(loc, _nW_); + } + function apply_and_handle_errors(f, a, fname, lnum){ + var match = caml_call1(f, a); + if(0 === match[0]){var json = match[1]; return json;} + var error_info = match[1]; + return json_error(error_to_string(error_info, fname, lnum)); + } + function from_string(param, fname, lnum, s){ + return apply_and_handle_errors(Internal_reader[17], s, fname, lnum); + } + return [0, , , , from_string]; + } + function Common_writer(Compliance){ + var + _nR_ = Make$6(Compliance), + to_string = _nR_[3], + to_buffer = _nR_[11], + _nS_ = Make$5(Compliance), + to_file = _nS_[9], + to_channel = _nS_[11], + include = _eF_(Compliance), + pretty_print = include[1], + pretty_print_to_string = include[2], + pretty_print_to_channel = include[3], + Internal_writer = + [0, + , + , + to_string, + , + , + , + , + , + , + , + to_buffer, + , + , + , + , + , + , + , + , + , + , + , + to_file, + , + to_channel, + , + , + , + pretty_print, + pretty_print_to_string, + pretty_print_to_channel]; + function to_standard(json){ + function map(node){ + if(typeof node === "number") return 870828711; + var _nV_ = node[1]; + if(708012133 > _nV_){ + if(-752863768 === _nV_){ + var v$1 = node[2]; + return [0, -976970511, v$1]; + } + if(3654863 <= _nV_) return 365180284 <= _nV_ ? node : node; + if(-375152890 > _nV_) return node; + var s = node[2]; + return 1 < caml_ml_string_length(s) >>> 0 + ? [0, + -976970511, + sub$0(s, 1, caml_ml_string_length(s) - 2 | 0)] + : [0, -976970511, s]; + } + if(737456202 > _nV_){ + if(726928360 <= _nV_){ + var tpl = node[2]; + return [0, 848054398, map$1(map, tpl)]; + } + var match = node[2], jopt = match[2], name = match[1]; + if(! jopt) return [0, -976970511, name]; + var v$0 = jopt[1]; + return [0, 848054398, [0, [0, -976970511, name], [0, map(v$0), 0]]]; + } + if(928231259 > _nV_){ + if(848054398 > _nV_) return node; + var l = node[2]; + return [0, 848054398, map$1(map, l)]; + } + if(963043957 <= _nV_){ + var a = node[2]; + return [0, + 963043957, + map$1 + (function(param){ + var v = param[2], id = param[1]; + return [0, id, map(v)]; + }, + a)]; + } + var v = node[2]; + return [0, 365180284, caml_float_of_string(v)]; + } + return map(json); + } + function to_string$0(param, _nT_, opt, json){ + if(opt) var sth = opt[1], std = sth; else var std = 0; + if(! std) return Internal_writer[3].call(null, json); + var _nU_ = to_standard(json); + return Internal_writer[3].call(null, _nU_); + } + return [0, , , to_string$0]; + } + function lex_string(s){return unescape_string(s);} + function lex_number(token){return token;} + function lex_integer(token){return token;} + function lex_largeint(param){return _fB_;} + function lex_variant(param){return 0;} + function lex_tuple(param){return 0;} + function comment_check(param){return _fC_;} + function number_to_string(f){ + var match = caml_classify_float(f); + return 3 === match + ? f < 0. ? _fD_ : _fE_ + : 4 <= match ? _fF_ : string_of_float_json(f); + } + function largeint(s){return [0, 365180284, caml_float_of_string(s)];} + function integer(i){return [0, 3654863, i];} + var null$2 = 870828711; + function string$0(s){return [0, -976970511, s];} + function bool(b){return [0, 737456202, b];} + function assoc(a){return [0, 963043957, a];} + function list(l){return [0, 848054398, l];} + function tuple(l){ + throw caml_maybe_attach_backtrace([0, Failure, _fG_], 1); + } + function variant(l){ + throw caml_maybe_attach_backtrace([0, Failure, _fH_], 1); + } + function number(param){ + if(typeof param === "number") + return 3900603 === param + ? [0, 365180284, NaN] + : 874173192 + <= param + ? [0, 365180284, Infinity] + : [0, 365180284, -Infinity]; + if(928231259 <= param[1]) + throw caml_maybe_attach_backtrace([0, Failure, _fI_], 1); + var f = param[2]; + return [0, 365180284, f]; + } + function array_start(param){return 14610;} + function array_end(param){return 14596;} + function object_start(param){return 17732;} + function object_end(param){return 17718;} + function tuple_start(param){ + throw caml_maybe_attach_backtrace([0, Failure, _fJ_], 1); + } + function tuple_end(param){ + throw caml_maybe_attach_backtrace([0, Failure, _fK_], 1); + } + function variant_start(param){ + throw caml_maybe_attach_backtrace([0, Failure, _fL_], 1); + } + function variant_end(param){ + throw caml_maybe_attach_backtrace([0, Failure, _fM_], 1); + } + function name(s){return [0, 869834347, s];} + Common_reader + ([0, + lex_string, + lex_number, + lex_integer, + lex_largeint, + lex_tuple, + lex_variant, + comment_check, + number_to_string, + number, + integer, + largeint, + null$2, + string$0, + bool, + assoc, + list, + tuple, + variant, + [0, + number, + integer, + largeint, + null$2, + string$0, + bool, + array_start, + array_end, + object_start, + object_end, + tuple_start, + tuple_end, + variant_start, + variant_end, + name]]); + Common_writer + ([0, + lex_string, + lex_number, + lex_integer, + lex_largeint, + lex_tuple, + lex_variant, + comment_check, + number_to_string, + number, + integer, + largeint, + null$2, + string$0, + bool, + assoc, + list, + tuple, + variant, + [0, + number, + integer, + largeint, + null$2, + string$0, + bool, + array_start, + array_end, + object_start, + object_end, + tuple_start, + tuple_end, + variant_start, + variant_end, + name]]); + function lex_string$0(s){return unescape_string(s);} + function lex_number$0(token){return token;} + function lex_integer$0(token){return token;} + function lex_largeint$0(token){return token;} + function lex_variant$0(param){return 1;} + function lex_tuple$0(param){return 1;} + function comment_check$0(param){return _fN_;} + function number_to_string$0(f){ + var match = caml_classify_float(f); + return 3 === match + ? f < 0. ? _fO_ : _fP_ + : 4 <= match ? _fQ_ : string_of_float_json(f); + } + function largeint$0(s){return [0, -752863768, s];} + function integer$0(i){return [0, 3654863, i];} + var null$3 = 870828711; + function string$1(s){return [0, -976970511, s];} + function bool$0(b){return [0, 737456202, b];} + function assoc$0(a){return [0, 963043957, a];} + function list$0(l){return [0, 848054398, l];} + function tuple$0(l){return [0, 726928360, l];} + function variant$0(k, v){return [0, 708012133, [0, k, v]];} + function number$0(param){ + if(typeof param === "number") + return 3900603 === param + ? [0, 365180284, NaN] + : 874173192 + <= param + ? [0, 365180284, Infinity] + : [0, 365180284, -Infinity]; + if(928231259 <= param[1]) + throw caml_maybe_attach_backtrace([0, Failure, _fR_], 1); + var f = param[2]; + return [0, 365180284, f]; + } + function array_start$0(param){return 14610;} + function array_end$0(param){return 14596;} + function object_start$0(param){return 17732;} + function object_end$0(param){return 17718;} + function tuple_start$0(param){return 18847;} + function tuple_end$0(param){return 18833;} + function variant_start$0(param){return 19293;} + function variant_end$0(param){return 19279;} + function name$0(s){return [0, 869834347, s];} + var + from_string$0 = + Common_reader + ([0, + lex_string$0, + lex_number$0, + lex_integer$0, + lex_largeint$0, + lex_tuple$0, + lex_variant$0, + comment_check$0, + number_to_string$0, + number$0, + integer$0, + largeint$0, + null$3, + string$1, + bool$0, + assoc$0, + list$0, + tuple$0, + variant$0, + [0, + number$0, + integer$0, + largeint$0, + null$3, + string$1, + bool$0, + array_start$0, + array_end$0, + object_start$0, + object_end$0, + tuple_start$0, + tuple_end$0, + variant_start$0, + variant_end$0, + name$0]]) + [4], + include = + Common_writer + ([0, + lex_string$0, + lex_number$0, + lex_integer$0, + lex_largeint$0, + lex_tuple$0, + lex_variant$0, + comment_check$0, + number_to_string$0, + number$0, + integer$0, + largeint$0, + null$3, + string$1, + bool$0, + assoc$0, + list$0, + tuple$0, + variant$0, + [0, + number$0, + integer$0, + largeint$0, + null$3, + string$1, + bool$0, + array_start$0, + array_end$0, + object_start$0, + object_end$0, + tuple_start$0, + tuple_end$0, + variant_start$0, + variant_end$0, + name$0]]), + to_string$3 = include[3]; + function lex_string$1(s){return symbol(_fT_, symbol(s, _fS_));} + function lex_number$1(token){return token;} + function lex_integer$1(token){return token;} + function lex_largeint$1(token){return token;} + function lex_variant$1(param){return 1;} + function lex_tuple$1(param){return 1;} + function comment_check$1(param){return _fU_;} + function number_to_string$1(f){ + var match = caml_classify_float(f); + return 3 === match + ? f < 0. ? _fV_ : _fW_ + : 4 <= match ? _fX_ : string_of_float_json(f); + } + function largeint$1(s){return [0, -752863768, s];} + function integer$1(i){return [0, -752863768, string_of_int(i)];} + var null$4 = 870828711; + function string$2(s){return [0, -375152890, s];} + function bool$1(b){return [0, 737456202, b];} + function assoc$1(a){return [0, 963043957, a];} + function list$1(l){return [0, 848054398, l];} + function tuple$1(l){return [0, 726928360, l];} + function variant$1(k, v){return [0, 708012133, [0, k, v]];} + function number$1(param){ + if(typeof param === "number") + return 3900603 === param ? _fY_ : 874173192 <= param ? _fZ_ : _f0_; + if(928231259 <= param[1]){var f = param[2]; return [0, 928231259, f];} + var f$0 = param[2]; + return [0, 928231259, string_of_float(f$0)]; + } + function array_start$1(param){return 14610;} + function array_end$1(param){return 14596;} + function object_start$1(param){return 17732;} + function object_end$1(param){return 17718;} + function tuple_start$1(param){return 18847;} + function tuple_end$1(param){return 18833;} + function variant_start$1(param){return 19293;} + function variant_end$1(param){return 19279;} + function name$1(s){return [0, 869834347, s];} + Common_reader + ([0, + lex_string$1, + lex_number$1, + lex_integer$1, + lex_largeint$1, + lex_tuple$1, + lex_variant$1, + comment_check$1, + number_to_string$1, + number$1, + integer$1, + largeint$1, + null$4, + string$2, + bool$1, + assoc$1, + list$1, + tuple$1, + variant$1, + [0, + number$1, + integer$1, + largeint$1, + null$4, + string$2, + bool$1, + array_start$1, + array_end$1, + object_start$1, + object_end$1, + tuple_start$1, + tuple_end$1, + variant_start$1, + variant_end$1, + name$1]]); + Common_writer + ([0, + lex_string$1, + lex_number$1, + lex_integer$1, + lex_largeint$1, + lex_tuple$1, + lex_variant$1, + comment_check$1, + number_to_string$1, + number$1, + integer$1, + largeint$1, + null$4, + string$2, + bool$1, + assoc$1, + list$1, + tuple$1, + variant$1, + [0, + number$1, + integer$1, + largeint$1, + null$4, + string$2, + bool$1, + array_start$1, + array_end$1, + object_start$1, + object_end$1, + tuple_start$1, + tuple_end$1, + variant_start$1, + variant_end$1, + name$1]]); + function rand(s, param){return bits(s);} + make_self_init(0); + function v4_ocaml_random_uuid(rand){ + var + r0 = caml_call1(rand, 0), + r1 = caml_call1(rand, 0), + r2 = caml_call1(rand, 0), + r3 = caml_call1(rand, 0), + r4 = caml_call1(rand, 0), + u = caml_create_bytes(16), + _ml_ = 0; + function _mm_(_nQ_, _nP_, _nO_){caml_bytes_set(_nQ_, _nP_, _nO_); return;} + (function(_nN_){return _mm_(u, _ml_, _nN_);}(r0 & 255)); + var _mn_ = 1; + function _mo_(_nM_, _nL_, _nK_){caml_bytes_set(_nM_, _nL_, _nK_); return;} + (function(_nJ_){return _mo_(u, _mn_, _nJ_);}((r0 >>> 8 | 0) & 255)); + var _mp_ = 2; + function _mq_(_nI_, _nH_, _nG_){caml_bytes_set(_nI_, _nH_, _nG_); return;} + (function(_nF_){return _mq_(u, _mp_, _nF_);}((r0 >>> 16 | 0) & 255)); + var _mr_ = 3; + function _ms_(_nE_, _nD_, _nC_){caml_bytes_set(_nE_, _nD_, _nC_); return;} + (function(_nB_){return _ms_(u, _mr_, _nB_);}(r1 & 255)); + var _mt_ = 4; + function _mu_(_nA_, _nz_, _ny_){caml_bytes_set(_nA_, _nz_, _ny_); return;} + (function(_nx_){return _mu_(u, _mt_, _nx_);}((r1 >>> 8 | 0) & 255)); + var _mv_ = 5; + function _mw_(_nw_, _nv_, _nu_){caml_bytes_set(_nw_, _nv_, _nu_); return;} + (function(_nt_){return _mw_(u, _mv_, _nt_);}((r1 >>> 16 | 0) & 255)); + var _mx_ = 6; + function _my_(_ns_, _nr_, _nq_){caml_bytes_set(_ns_, _nr_, _nq_); return;} + (function(_np_){return _my_(u, _mx_, _np_);}(64 | (r1 >>> 24 | 0) & 15)); + var _mz_ = 7; + function _mA_(_no_, _nn_, _nm_){caml_bytes_set(_no_, _nn_, _nm_); return;} + (function(_nl_){return _mA_(u, _mz_, _nl_);}(r2 & 255)); + var _mB_ = 8; + function _mC_(_nk_, _nj_, _ni_){caml_bytes_set(_nk_, _nj_, _ni_); return;} + (function(_nh_){return _mC_(u, _mB_, _nh_);}(128 | (r2 >>> 24 | 0) & 63)); + var _mD_ = 9; + function _mE_(_ng_, _nf_, _ne_){caml_bytes_set(_ng_, _nf_, _ne_); return;} + (function(_nd_){return _mE_(u, _mD_, _nd_);}((r2 >>> 8 | 0) & 255)); + var _mF_ = 10; + function _mG_(_nc_, _nb_, _na_){caml_bytes_set(_nc_, _nb_, _na_); return;} + (function(_m$_){return _mG_(u, _mF_, _m$_);}((r2 >>> 16 | 0) & 255)); + var _mH_ = 11; + function _mI_(_m__, _m9_, _m8_){caml_bytes_set(_m__, _m9_, _m8_); return;} + (function(_m7_){return _mI_(u, _mH_, _m7_);}(r3 & 255)); + var _mJ_ = 12; + function _mK_(_m6_, _m5_, _m4_){caml_bytes_set(_m6_, _m5_, _m4_); return;} + (function(_m3_){return _mK_(u, _mJ_, _m3_);}((r3 >>> 8 | 0) & 255)); + var _mL_ = 13; + function _mM_(_m2_, _m1_, _m0_){caml_bytes_set(_m2_, _m1_, _m0_); return;} + (function(_mZ_){return _mM_(u, _mL_, _mZ_);}((r3 >>> 16 | 0) & 255)); + var _mN_ = 14; + function _mO_(_mY_, _mX_, _mW_){caml_bytes_set(_mY_, _mX_, _mW_); return;} + (function(_mV_){return _mO_(u, _mN_, _mV_);}(r4 & 255)); + var _mP_ = 15; + function _mQ_(_mU_, _mT_, _mS_){caml_bytes_set(_mU_, _mT_, _mS_); return;} + (function(_mR_){return _mQ_(u, _mP_, _mR_);}((r4 >>> 8 | 0) & 255)); + return unsafe_to_string(u); + } + function v4_gen(seed){ + function rand$0(_mk_){return rand(seed, _mk_);} + return function(param){return v4_ocaml_random_uuid(rand$0);}; + } + var Set = _dd_([0, compare$0]); + function to_jstr$1(t){return encode(t);} + function of_jstr$1(jstr){ + var match = decode(jstr); + if(0 === match[0]){var v = match[1]; return [0, v];} + var err = match[1]; + error([0, err, 0]); + return _f1_; + } + var random_state = get_state(0); + function new_uuid_v4(param){return v4_gen(random_state)(0);} + function yojson_of_bool(b){return [0, 737456202, b];} + function yojson_of_string(str){return [0, -976970511, str];} + function yojson_of_int(n){return [0, 3654863, n];} + function yojson_of_option(yojson_of_a, param){ + if(! param) return 870828711; + var x = param[1]; + return caml_call1(yojson_of_a, x); + } + function yojson_of_list(yojson_of_a, lst){ + return [0, 848054398, rev(rev_map(yojson_of_a, lst))]; + } + var + Of_yojson_error = [248, _f2_, caml_fresh_oo_id(0)], + record_check_extra_fields = [0, 1]; + function of_yojson_error(what, yojson){ + throw caml_maybe_attach_backtrace + ([0, Of_yojson_error, [0, Failure, what], yojson], 1); + } + function bool_of_yojson(yojson){ + if(typeof yojson !== "number" && 737456202 === yojson[1]){var v = yojson[2]; return v;} + return of_yojson_error(_f3_, yojson); + } + function string_of_yojson(yojson){ + if(typeof yojson !== "number" && -976970511 === yojson[1]){var str = yojson[2]; return str;} + return of_yojson_error(_f4_, yojson); + } + function int_of_yojson(yojson){ + if(typeof yojson !== "number" && 3654863 === yojson[1]){var v = yojson[2]; return v;} + return of_yojson_error(_f5_, yojson); + } + function option_of_yojson(a_of_yojson, yojson){ + return 870828711 === yojson ? 0 : [0, caml_call1(a_of_yojson, yojson)]; + } + function list_of_yojson(a_of_yojson, yojson){ + if(typeof yojson !== "number" && 848054398 === yojson[1]){ + var lst = yojson[2], rev_lst = rev_map(a_of_yojson, lst); + return rev(rev_lst); + } + return of_yojson_error(_f6_, yojson); + } + function stag_no_args(loc, yojson){ + return of_yojson_error(symbol(loc, _f7_), yojson); + } + function nested_list_invalid_sum(loc, yojson){ + return of_yojson_error(symbol(loc, _f8_), yojson); + } + function empty_list_invalid_sum(loc, yojson){ + return of_yojson_error(symbol(loc, _f9_), yojson); + } + function unexpected_stag(loc, yojson){ + return of_yojson_error(symbol(loc, _f__), yojson); + } + function record_superfluous_fields(what, loc, rev_fld_names, yojson){ + var + fld_names_str = concat(_f$_, rev(rev_fld_names)), + msg = caml_call3(sprintf(_ga_), loc, what, fld_names_str); + return of_yojson_error(msg, yojson); + } + function record_duplicate_fields(loc, rev_fld_names, yojson){ + return record_superfluous_fields(_gb_, loc, rev_fld_names, yojson); + } + function record_extra_fields(loc, rev_fld_names, yojson){ + return record_superfluous_fields(_gc_, loc, rev_fld_names, yojson); + } + function record_get_undefined_loop(fields, param){ + var fields$0 = fields, param$0 = param; + for(;;){ + if(! param$0) return concat(_gd_, rev(fields$0)); + var _mj_ = param$0[1]; + if(_mj_[1]) + var + rest = param$0[2], + field = _mj_[2], + fields$1 = [0, field, fields$0], + fields$0 = fields$1, + param$0 = rest; + else + var rest$0 = param$0[2], param$0 = rest$0; + } + } + function record_undefined_elements(loc, yojson, lst){ + var + undefined$0 = record_get_undefined_loop(0, lst), + msg = caml_call2(sprintf(_ge_), loc, undefined$0); + return of_yojson_error(msg, yojson); + } + function record_list_instead_atom(loc, yojson){ + var msg = symbol(loc, _gf_); + return of_yojson_error(msg, yojson); + } + function symbol$9(x){return x[1];} + function jstr_of_method(param){return param ? "POST" : "GET";} + function order_of_yojson(yojson){ + if(typeof yojson !== "number" && 848054398 === yojson[1]){ + var _mf_ = yojson[2]; + if(! _mf_) return empty_list_invalid_sum(tp_loc, yojson); + var _mg_ = _mf_[1]; + if(typeof _mg_ !== "number"){ + var _mh_ = _mg_[1]; + if(-976970511 === _mh_){ + var _mi_ = _mg_[2]; + if(! caml_string_notequal(_mi_, cst_Ascending)) + return _mf_[2] ? stag_no_args(tp_loc, yojson) : 0; + if(! caml_string_notequal(_mi_, cst_Descending)) + return _mf_[2] ? stag_no_args(tp_loc, yojson) : 1; + } + else if(848054398 === _mh_) + return nested_list_invalid_sum(tp_loc, yojson); + } + } + return unexpected_stag(tp_loc, yojson); + } + function yojson_of_order(param){return param ? _gg_ : _gh_;} + function sort_of_yojson(yojson){ + if(typeof yojson !== "number" && 848054398 === yojson[1]){ + var _mb_ = yojson[2]; + if(! _mb_) return empty_list_invalid_sum(tp_loc$0, yojson); + var _mc_ = _mb_[1]; + if(typeof _mc_ !== "number"){ + var _md_ = _mc_[1]; + if(-976970511 === _md_){ + var + _me_ = _mc_[2], + switch$0 = caml_string_compare(_me_, cst_DatePlayed); + if(0 <= switch$0){ + if(0 >= switch$0) return _mb_[2] ? stag_no_args(tp_loc$0, yojson) : 7; + if(! caml_string_notequal(_me_, cst_PlayCount)) + return _mb_[2] ? stag_no_args(tp_loc$0, yojson) : 8; + if(! caml_string_notequal(_me_, cst_PremiereDate)) + return _mb_[2] ? stag_no_args(tp_loc$0, yojson) : 9; + if(! caml_string_notequal(_me_, cst_ProductionYear)) + return _mb_[2] ? stag_no_args(tp_loc$0, yojson) : 10; + if(! caml_string_notequal(_me_, cst_Random)) + return _mb_[2] ? stag_no_args(tp_loc$0, yojson) : 12; + if(! caml_string_notequal(_me_, cst_Revenue)) + return _mb_[2] ? stag_no_args(tp_loc$0, yojson) : 13; + if(! caml_string_notequal(_me_, cst_Runtime)) + return _mb_[2] ? stag_no_args(tp_loc$0, yojson) : 14; + if(! caml_string_notequal(_me_, cst_SortName)) + return _mb_[2] ? stag_no_args(tp_loc$0, yojson) : 11; + } + else{ + if(! caml_string_notequal(_me_, cst_Album)) + return _mb_[2] ? stag_no_args(tp_loc$0, yojson) : 0; + if(! caml_string_notequal(_me_, cst_AlbumArtist)) + return _mb_[2] ? stag_no_args(tp_loc$0, yojson) : 1; + if(! caml_string_notequal(_me_, cst_Artist)) + return _mb_[2] ? stag_no_args(tp_loc$0, yojson) : 2; + if(! caml_string_notequal(_me_, cst_Budget)) + return _mb_[2] ? stag_no_args(tp_loc$0, yojson) : 3; + if(! caml_string_notequal(_me_, cst_CommunityRating)) + return _mb_[2] ? stag_no_args(tp_loc$0, yojson) : 4; + if(! caml_string_notequal(_me_, cst_CriticRating)) + return _mb_[2] ? stag_no_args(tp_loc$0, yojson) : 5; + if(! caml_string_notequal(_me_, cst_DateCreated)) + return _mb_[2] ? stag_no_args(tp_loc$0, yojson) : 6; + } + } + else if(848054398 === _md_) + return nested_list_invalid_sum(tp_loc$0, yojson); + } + } + return unexpected_stag(tp_loc$0, yojson); + } + function yojson_of_sort(param){ + switch(param){ + case 0: + return _gi_; + case 1: + return _gj_; + case 2: + return _gk_; + case 3: + return _gl_; + case 4: + return _gm_; + case 5: + return _gn_; + case 6: + return _go_; + case 7: + return _gp_; + case 8: + return _gq_; + case 9: + return _gr_; + case 10: + return _gs_; + case 11: + return _gt_; + case 12: + return _gu_; + case 13: + return _gv_; + default: return _gw_; + } + } + function image_blur_hash_of_yojson(y){ + var assoc = to_assoc(y); + return map$1 + (function(param){ + var v = param[2], key = param[1]; + return [0, key, to_string$2(v)]; + }, + assoc); + } + function yojson_of_image_blur_hash(i){ + var + assoc = + map$1 + (function(param){ + var v = param[2], key = param[1]; + return [0, key, [0, -976970511, v]]; + }, + i); + return [0, 963043957, assoc]; + } + function image_blur_hashes_of_yojson(yojson){ + if(typeof yojson !== "number" && 963043957 === yojson[1]){ + var + field_yojsons = yojson[2], + primary_field = [0, 0], + duplicates = [0, 0], + extra = [0, 0], + iter = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + tail = param$0[2], + match = param$0[1], + field_yojson = match[2], + field_name = match[1]; + if(! caml_string_notequal(field_name, cst_Primary)) + if(symbol$9(primary_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue = image_blur_hash_of_yojson(field_yojson); + primary_field[1] = [0, fvalue]; + } + var param$0 = tail; + } + }; + iter(field_yojsons); + if(symbol$9(duplicates)) + return record_duplicate_fields(tp_loc$1, symbol$9(duplicates), yojson); + if(symbol$9(extra)) + return record_extra_fields(tp_loc$1, symbol$9(extra), yojson); + var primary_value = symbol$9(primary_field); + return [0, primary_value]; + } + return record_list_instead_atom(tp_loc$1, yojson); + } + function yojson_of_image_blur_hashes(param){ + var v_primary = param[1], bnds = 0; + if(v_primary) + var + v = v_primary[1], + arg = yojson_of_image_blur_hash(v), + bnd = [0, _gx_, arg], + bnds$0 = [0, bnd, bnds]; + else + var bnds$0 = bnds; + return [0, 963043957, bnds$0]; + } + function type_of_yojson(yojson){ + if(typeof yojson !== "number" && 848054398 === yojson[1]){ + var _l9_ = yojson[2]; + if(! _l9_) return empty_list_invalid_sum(tp_loc$2, yojson); + var _l__ = _l9_[1]; + if(typeof _l__ !== "number"){ + var _l$_ = _l__[1]; + if(-976970511 === _l$_){ + var + _ma_ = _l__[2], + switch$0 = caml_string_compare(_ma_, cst_MusicGenre); + if(0 <= switch$0){ + if(0 >= switch$0) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 18; + var switch$1 = caml_string_compare(_ma_, cst_Series); + if(0 <= switch$1){ + if(0 >= switch$1) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 28; + if(! caml_string_notequal(_ma_, cst_Studio)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 29; + if(! caml_string_notequal(_ma_, cst_Trailer)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 30; + if(! caml_string_notequal(_ma_, cst_TvChannel)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 31; + if(! caml_string_notequal(_ma_, cst_TvProgram)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 32; + if(! caml_string_notequal(_ma_, cst_UserRootFolder)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 33; + if(! caml_string_notequal(_ma_, cst_UserView)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 34; + if(! caml_string_notequal(_ma_, cst_Video)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 35; + if(! caml_string_notequal(_ma_, cst_Year)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 36; + } + else{ + if(! caml_string_notequal(_ma_, cst_MusicVideo)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 19; + if(! caml_string_notequal(_ma_, cst_Person)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 20; + if(! caml_string_notequal(_ma_, cst_Photo)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 21; + if(! caml_string_notequal(_ma_, cst_PhotoAlbum)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 22; + if(! caml_string_notequal(_ma_, cst_Playlist)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 23; + if(! caml_string_notequal(_ma_, cst_PlaylistsFolder)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 24; + if(! caml_string_notequal(_ma_, cst_Program)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 25; + if(! caml_string_notequal(_ma_, cst_Recording)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 26; + if(! caml_string_notequal(_ma_, cst_Season)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 27; + } + } + else{ + var switch$2 = caml_string_compare(_ma_, cst_Episode); + if(0 <= switch$2){ + if(0 >= switch$2) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 9; + if(! caml_string_notequal(_ma_, cst_Folder)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 10; + if(! caml_string_notequal(_ma_, cst_Genre)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 11; + if(! caml_string_notequal(_ma_, cst_LiveTvChannel)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 12; + if(! caml_string_notequal(_ma_, cst_LiveTvProgram)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 13; + if(! caml_string_notequal(_ma_, cst_ManualPlaylistsFolder)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 14; + if(! caml_string_notequal(_ma_, cst_Movie)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 15; + if(! caml_string_notequal(_ma_, cst_MusicAlbum)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 16; + if(! caml_string_notequal(_ma_, cst_MusicArtist)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 17; + } + else{ + if(! caml_string_notequal(_ma_, cst_AggregateFolder)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 0; + if(! caml_string_notequal(_ma_, cst_Audio)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 1; + if(! caml_string_notequal(_ma_, cst_AudioBook)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 2; + if(! caml_string_notequal(_ma_, cst_BasePluginFolder)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 3; + if(! caml_string_notequal(_ma_, cst_Book)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 4; + if(! caml_string_notequal(_ma_, cst_BoxSet)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 5; + if(! caml_string_notequal(_ma_, cst_Channel)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 6; + if(! caml_string_notequal(_ma_, cst_ChannelFolderItem)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 7; + if(! caml_string_notequal(_ma_, cst_CollectionFolder)) + return _l9_[2] ? stag_no_args(tp_loc$2, yojson) : 8; + } + } + } + else if(848054398 === _l$_) + return nested_list_invalid_sum(tp_loc$2, yojson); + } + } + return unexpected_stag(tp_loc$2, yojson); + } + function yojson_of_type(param){ + switch(param){ + case 0: + return _gy_; + case 1: + return _gz_; + case 2: + return _gA_; + case 3: + return _gB_; + case 4: + return _gC_; + case 5: + return _gD_; + case 6: + return _gE_; + case 7: + return _gF_; + case 8: + return _gG_; + case 9: + return _gH_; + case 10: + return _gI_; + case 11: + return _gJ_; + case 12: + return _gK_; + case 13: + return _gL_; + case 14: + return _gM_; + case 15: + return _gN_; + case 16: + return _gO_; + case 17: + return _gP_; + case 18: + return _gQ_; + case 19: + return _gR_; + case 20: + return _gS_; + case 21: + return _gT_; + case 22: + return _gU_; + case 23: + return _gV_; + case 24: + return _gW_; + case 25: + return _gX_; + case 26: + return _gY_; + case 27: + return _gZ_; + case 28: + return _g0_; + case 29: + return _g1_; + case 30: + return _g2_; + case 31: + return _g3_; + case 32: + return _g4_; + case 33: + return _g5_; + case 34: + return _g6_; + case 35: + return _g7_; + default: return _g8_; + } + } + function field_of_yojson(yojson){ + if(typeof yojson !== "number" && 848054398 === yojson[1]){ + var _l5_ = yojson[2]; + if(! _l5_) return empty_list_invalid_sum(tp_loc$3, yojson); + var _l6_ = _l5_[1]; + if(typeof _l6_ !== "number"){ + var _l7_ = _l6_[1]; + if(-976970511 === _l7_){ + var + _l8_ = _l6_[2], + switch$0 = caml_string_compare(_l8_, cst_MediaStreams); + if(0 <= switch$0){ + if(0 >= switch$0) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 30; + var + switch$1 = caml_string_compare(_l8_, cst_SeriesPresentationUniqueKe); + if(0 <= switch$1){ + if(0 >= switch$1) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 46; + var switch$2 = caml_string_compare(_l8_, cst_Studios); + if(0 <= switch$2){ + if(0 >= switch$2) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 54; + if(! caml_string_notequal(_l8_, cst_SyncInfo)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 55; + if(! caml_string_notequal(_l8_, cst_Taglines)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 56; + if(! caml_string_notequal(_l8_, cst_Tags)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 57; + if(! caml_string_notequal(_l8_, cst_ThemeSongIds)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 58; + if(! caml_string_notequal(_l8_, cst_ThemeVideoIds)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 59; + if(! caml_string_notequal(_l8_, cst_Width)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 60; + } + else{ + if(! caml_string_notequal(_l8_, cst_SeriesPrimaryImage)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 47; + if(! caml_string_notequal(_l8_, cst_SeriesStudio)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 48; + if(! caml_string_notequal(_l8_, cst_ServiceName)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 49; + if(! caml_string_notequal(_l8_, cst_Settings)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 50; + if(! caml_string_notequal(_l8_, cst_SortName)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 51; + if(! caml_string_notequal(_l8_, cst_SpecialEpisodeNumbers)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 52; + if(! caml_string_notequal(_l8_, cst_SpecialFeatureCount)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 53; + } + } + else{ + var + switch$3 = caml_string_compare(_l8_, cst_PrimaryImageAspectRatio); + if(0 <= switch$3){ + if(0 >= switch$3) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 38; + if(! caml_string_notequal(_l8_, cst_ProductionLocations)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 39; + if(! caml_string_notequal(_l8_, cst_ProviderIds)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 40; + if(! caml_string_notequal(_l8_, cst_RecursiveItemCount)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 41; + if(! caml_string_notequal(_l8_, cst_RefreshState)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 42; + if(! caml_string_notequal(_l8_, cst_RemoteTrailers)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 43; + if(! caml_string_notequal(_l8_, cst_ScreenshotImageTags)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 44; + if(! caml_string_notequal(_l8_, cst_SeasonUserData)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 45; + } + else{ + if(! caml_string_notequal(_l8_, cst_OriginalTitle)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 31; + if(! caml_string_notequal(_l8_, cst_Overview)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 32; + if(! caml_string_notequal(_l8_, cst_ParentId)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 33; + if(! caml_string_notequal(_l8_, cst_Path)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 34; + if(! caml_string_notequal(_l8_, cst_People)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 35; + if(! caml_string_notequal(_l8_, cst_PlayAccess)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 36; + if(! caml_string_notequal(_l8_, cst_PresentationUniqueKey)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 37; + } + } + } + else{ + var + switch$4 = caml_string_compare(_l8_, cst_EnableMediaSourceDisplay); + if(0 <= switch$4){ + if(0 >= switch$4) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 15; + var switch$5 = caml_string_compare(_l8_, cst_HomePageUrl); + if(0 <= switch$5){ + if(0 >= switch$5) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 23; + if(! caml_string_notequal(_l8_, cst_InheritedParentalRatingVal)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 24; + if(! caml_string_notequal(_l8_, cst_IsHD)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 25; + if(! caml_string_notequal(_l8_, cst_ItemCounts)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 26; + if(! caml_string_notequal(_l8_, cst_LocalTrailerCount)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 27; + if(! caml_string_notequal(_l8_, cst_MediaSourceCount)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 28; + if(! caml_string_notequal(_l8_, cst_MediaSources)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 29; + } + else{ + if(! caml_string_notequal(_l8_, cst_Etag)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 16; + if(! caml_string_notequal(_l8_, cst_ExternalEtag)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 17; + if(! caml_string_notequal(_l8_, cst_ExternalSeriesId)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 18; + if(! caml_string_notequal(_l8_, cst_ExternalUrls)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 19; + if(! caml_string_notequal(_l8_, cst_ExtraIds)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 20; + if(! caml_string_notequal(_l8_, cst_Genres)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 21; + if(! caml_string_notequal(_l8_, cst_Height)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 22; + } + } + else{ + var switch$6 = caml_string_compare(_l8_, cst_ChildCount); + if(0 <= switch$6){ + if(0 >= switch$6) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 7; + if(! caml_string_notequal(_l8_, cst_CumulativeRunTimeTicks)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 8; + if(! caml_string_notequal(_l8_, cst_CustomRating)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 9; + if(! caml_string_notequal(_l8_, cst_DateCreated)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 10; + if(! caml_string_notequal(_l8_, cst_DateLastMediaAdded)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 11; + if(! caml_string_notequal(_l8_, cst_DateLastRefreshed)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 12; + if(! caml_string_notequal(_l8_, cst_DateLastSaved)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 13; + if(! caml_string_notequal(_l8_, cst_DisplayPreferencesId)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 14; + } + else{ + if(! caml_string_notequal(_l8_, cst_AirTime)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 0; + if(! caml_string_notequal(_l8_, cst_BasicSyncInfo)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 1; + if(! caml_string_notequal(_l8_, cst_CanDelete)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 2; + if(! caml_string_notequal(_l8_, cst_CanDownload)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 3; + if(! caml_string_notequal(_l8_, cst_ChannelImage)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 4; + if(! caml_string_notequal(_l8_, cst_ChannelInfo)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 5; + if(! caml_string_notequal(_l8_, cst_Chapters)) + return _l5_[2] ? stag_no_args(tp_loc$3, yojson) : 6; + } + } + } + } + else if(848054398 === _l7_) + return nested_list_invalid_sum(tp_loc$3, yojson); + } + } + return unexpected_stag(tp_loc$3, yojson); + } + function yojson_of_field(param){ + var _l4_ = param; + if(31 <= _l4_) + switch(_l4_){ + case 31: + return _hC_; + case 32: + return _hD_; + case 33: + return _hE_; + case 34: + return _hF_; + case 35: + return _hG_; + case 36: + return _hH_; + case 37: + return _hI_; + case 38: + return _hJ_; + case 39: + return _hK_; + case 40: + return _hL_; + case 41: + return _hM_; + case 42: + return _hN_; + case 43: + return _hO_; + case 44: + return _hP_; + case 45: + return _hQ_; + case 46: + return _hR_; + case 47: + return _hS_; + case 48: + return _hT_; + case 49: + return _hU_; + case 50: + return _hV_; + case 51: + return _hW_; + case 52: + return _hX_; + case 53: + return _hY_; + case 54: + return _hZ_; + case 55: + return _h0_; + case 56: + return _h1_; + case 57: + return _h2_; + case 58: + return _h3_; + case 59: + return _h4_; + default: return _h5_; + } + switch(_l4_){ + case 0: + return _g9_; + case 1: + return _g__; + case 2: + return _g$_; + case 3: + return _ha_; + case 4: + return _hb_; + case 5: + return _hc_; + case 6: + return _hd_; + case 7: + return _he_; + case 8: + return _hf_; + case 9: + return _hg_; + case 10: + return _hh_; + case 11: + return _hi_; + case 12: + return _hj_; + case 13: + return _hk_; + case 14: + return _hl_; + case 15: + return _hm_; + case 16: + return _hn_; + case 17: + return _ho_; + case 18: + return _hp_; + case 19: + return _hq_; + case 20: + return _hr_; + case 21: + return _hs_; + case 22: + return _ht_; + case 23: + return _hu_; + case 24: + return _hv_; + case 25: + return _hw_; + case 26: + return _hx_; + case 27: + return _hy_; + case 28: + return _hz_; + case 29: + return _hA_; + default: return _hB_; + } + } + function type_str_of_yojson(j){ + var s = to_string$2(j); + return type_of_yojson([0, 848054398, [0, [0, -976970511, s], 0]]); + } + function yojson_of_type_str(ts){ + var match = yojson_of_type(ts); + if(typeof match !== "number" && 848054398 === match[1]){ + var _l3_ = match[2]; + if(_l3_ && ! _l3_[2]){var json = _l3_[1]; return json;} + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _h6_], 1); + } + function t_of_yojson(yojson){ + if(typeof yojson !== "number" && 963043957 === yojson[1]){ + var + field_yojsons = yojson[2], + name_field = [0, 0], + sort_name_field = [0, 0], + id_field = [0, 0], + path_field = [0, 0], + album_id_field = [0, 0], + parent_id_field = [0, 0], + server_id_field = [0, 0], + image_blur_hashes_field = [0, 0], + type_field = [0, 0], + collection_type_field = [0, 0], + duplicates = [0, 0], + extra = [0, 0], + iter = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + tail = param$0[2], + match = param$0[1], + field_yojson = match[2], + field_name = match[1], + switch$0 = caml_string_compare(field_name, cst_ParentId); + a: + b: + { + if(0 <= switch$0) + if(0 < switch$0) + if(caml_string_notequal(field_name, cst_Path)) + if(caml_string_notequal(field_name, cst_ServerId)) + if(caml_string_notequal(field_name, cst_SortName)){ + if(caml_string_notequal(field_name, cst_Type)) break b; + if(symbol$9(type_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue = type_str_of_yojson(field_yojson); + type_field[1] = [0, fvalue]; + } + } + else if(symbol$9(sort_name_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$0 = string_of_yojson(field_yojson); + sort_name_field[1] = [0, fvalue$0]; + } + else if(symbol$9(server_id_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$1 = string_of_yojson(field_yojson); + server_id_field[1] = [0, fvalue$1]; + } + else if(symbol$9(path_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$2 = string_of_yojson(field_yojson); + path_field[1] = [0, fvalue$2]; + } + else if(symbol$9(parent_id_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$3 = option_of_yojson(string_of_yojson, field_yojson); + parent_id_field[1] = [0, fvalue$3]; + } + else if(caml_string_notequal(field_name, cst_AlbumId)) + if(caml_string_notequal(field_name, cst_CollectionType)) + if(caml_string_notequal(field_name, cst_Id)) + if(caml_string_notequal(field_name, cst_ImageBlurHashes)){ + if(caml_string_notequal(field_name, cst_Name)) break b; + if(symbol$9(name_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$4 = string_of_yojson(field_yojson); + name_field[1] = [0, fvalue$4]; + } + } + else if(symbol$9(image_blur_hashes_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$5 = image_blur_hashes_of_yojson(field_yojson); + image_blur_hashes_field[1] = [0, fvalue$5]; + } + else if(symbol$9(id_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$6 = string_of_yojson(field_yojson); + id_field[1] = [0, fvalue$6]; + } + else if(symbol$9(collection_type_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$7 = option_of_yojson(string_of_yojson, field_yojson); + collection_type_field[1] = [0, fvalue$7]; + } + else if(symbol$9(album_id_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$8 = string_of_yojson(field_yojson); + album_id_field[1] = [0, fvalue$8]; + } + break a; + } + var param$0 = tail; + } + }; + iter(field_yojsons); + if(symbol$9(duplicates)) + return record_duplicate_fields(tp_loc$4, symbol$9(duplicates), yojson); + if(symbol$9(extra)) + return record_extra_fields(tp_loc$4, symbol$9(extra), yojson); + var + match = symbol$9(name_field), + sort_name_value = symbol$9(sort_name_field), + match$0 = symbol$9(id_field), + path_value = symbol$9(path_field), + album_id_value = symbol$9(album_id_field), + parent_id_value = symbol$9(parent_id_field), + match$1 = symbol$9(server_id_field), + match$2 = symbol$9(image_blur_hashes_field), + match$3 = symbol$9(type_field), + collection_type_value = symbol$9(collection_type_field); + if(match && match$0 && match$1 && match$2 && match$3){ + var + type_value = match$3[1], + image_blur_hashes_value = match$2[1], + server_id_value = match$1[1], + id_value = match$0[1], + name_value = match[1]; + if(collection_type_value) + var v = collection_type_value[1], v$0 = v; + else + var v$0 = 0; + return [0, + name_value, + sort_name_value, + id_value, + path_value, + album_id_value, + parent_id_value, + server_id_value, + image_blur_hashes_value, + type_value, + v$0]; + } + var + _lZ_ = [0, [0, 0 === symbol$9(type_field) ? 1 : 0, _h7_], 0], + _l0_ = + [0, [0, 0 === symbol$9(image_blur_hashes_field) ? 1 : 0, _h8_], _lZ_], + _l1_ = [0, [0, 0 === symbol$9(server_id_field) ? 1 : 0, _h9_], _l0_], + _l2_ = [0, [0, 0 === symbol$9(id_field) ? 1 : 0, _h__], _l1_]; + return record_undefined_elements + (tp_loc$4, + yojson, + [0, [0, 0 === symbol$9(name_field) ? 1 : 0, _h$_], _l2_]); + } + return record_list_instead_atom(tp_loc$4, yojson); + } + function yojson_of_t(param){ + var + v_collection_type = param[10], + v_type = param[9], + v_image_blur_hashes = param[8], + v_server_id = param[7], + v_parent_id = param[6], + v_album_id = param[5], + v_path = param[4], + v_id = param[3], + v_sort_name = param[2], + v_name = param[1], + bnds = 0; + if(0 === v_collection_type) + var bnds$0 = bnds; + else + var + arg$8 = + function(_lY_){return yojson_of_option(yojson_of_string, _lY_);} + (v_collection_type), + bnd$3 = [0, _ij_, arg$8], + bnds$0 = [0, bnd$3, bnds]; + var + arg = yojson_of_type_str(v_type), + bnds$1 = [0, [0, _ia_, arg], bnds$0], + arg$0 = yojson_of_image_blur_hashes(v_image_blur_hashes), + bnds$2 = [0, [0, _ib_, arg$0], bnds$1], + arg$1 = yojson_of_string(v_server_id), + bnds$3 = [0, [0, _ic_, arg$1], bnds$2]; + if(v_parent_id) + var + v = v_parent_id[1], + arg$2 = yojson_of_option(yojson_of_string, v), + bnd = [0, _id_, arg$2], + bnds$4 = [0, bnd, bnds$3]; + else + var bnds$4 = bnds$3; + if(v_album_id) + var + v$0 = v_album_id[1], + arg$3 = yojson_of_string(v$0), + bnd$0 = [0, _ie_, arg$3], + bnds$5 = [0, bnd$0, bnds$4]; + else + var bnds$5 = bnds$4; + if(v_path) + var + v$1 = v_path[1], + arg$4 = yojson_of_string(v$1), + bnd$1 = [0, _if_, arg$4], + bnds$6 = [0, bnd$1, bnds$5]; + else + var bnds$6 = bnds$5; + var + arg$5 = yojson_of_string(v_id), + bnds$7 = [0, [0, _ig_, arg$5], bnds$6]; + if(v_sort_name) + var + v$2 = v_sort_name[1], + arg$6 = yojson_of_string(v$2), + bnd$2 = [0, _ih_, arg$6], + bnds$8 = [0, bnd$2, bnds$7]; + else + var bnds$8 = bnds$7; + var + arg$7 = yojson_of_string(v_name), + bnds$9 = [0, [0, _ii_, arg$7], bnds$8]; + return [0, 963043957, bnds$9]; + } + function params_of_yojson(yojson){ + if(typeof yojson !== "number" && 963043957 === yojson[1]){ + var + field_yojsons = yojson[2], + ids_field = [0, 0], + parent_id_field = [0, 0], + user_id_field = [0, 0], + fields_field = [0, 0], + include_item_types_field = [0, 0], + start_index_field = [0, 0], + limit_field = [0, 0], + sort_order_field = [0, 0], + sort_by_field = [0, 0], + recursive_field = [0, 0], + enable_user_data_field = [0, 0], + enable_images_field = [0, 0], + duplicates = [0, 0], + extra = [0, 0], + iter = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + tail = param$0[2], + match = param$0[1], + field_yojson = match[2], + field_name = match[1], + switch$0 = caml_string_compare(field_name, cst_parentId); + a: + { + b: + { + if(0 <= switch$0) + if(0 < switch$0) + if(caml_string_notequal(field_name, cst_recursive)) + if(caml_string_notequal(field_name, cst_sortBy)) + if(caml_string_notequal(field_name, cst_sortOrder)) + if(caml_string_notequal(field_name, cst_startIndex)){ + if(caml_string_notequal(field_name, cst_userId)) break b; + if(symbol$9(user_id_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue = string_of_yojson(field_yojson); + user_id_field[1] = [0, fvalue]; + } + } + else if(symbol$9(start_index_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$0 = int_of_yojson(field_yojson); + start_index_field[1] = [0, fvalue$0]; + } + else if(symbol$9(sort_order_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$1 = order_of_yojson(field_yojson); + sort_order_field[1] = [0, fvalue$1]; + } + else if(symbol$9(sort_by_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$2 = list_of_yojson(sort_of_yojson, field_yojson); + sort_by_field[1] = [0, fvalue$2]; + } + else if(symbol$9(recursive_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$3 = bool_of_yojson(field_yojson); + recursive_field[1] = [0, fvalue$3]; + } + else if(symbol$9(parent_id_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$4 = string_of_yojson(field_yojson); + parent_id_field[1] = [0, fvalue$4]; + } + else if(caml_string_notequal(field_name, cst_enableImages)) + if(caml_string_notequal(field_name, cst_enableUserData)) + if(caml_string_notequal(field_name, cst_fields)) + if(caml_string_notequal(field_name, cst_ids)) + if(caml_string_notequal(field_name, cst_includeItemTypes)){ + if(caml_string_notequal(field_name, cst_limit)) break b; + if(symbol$9(limit_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$5 = int_of_yojson(field_yojson); + limit_field[1] = [0, fvalue$5]; + } + } + else if(symbol$9(include_item_types_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$6 = list_of_yojson(type_of_yojson, field_yojson); + include_item_types_field[1] = [0, fvalue$6]; + } + else if(symbol$9(ids_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$7 = list_of_yojson(string_of_yojson, field_yojson); + ids_field[1] = [0, fvalue$7]; + } + else if(symbol$9(fields_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$8 = list_of_yojson(field_of_yojson, field_yojson); + fields_field[1] = [0, fvalue$8]; + } + else if(symbol$9(enable_user_data_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$9 = bool_of_yojson(field_yojson); + enable_user_data_field[1] = [0, fvalue$9]; + } + else if(symbol$9(enable_images_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$10 = bool_of_yojson(field_yojson); + enable_images_field[1] = [0, fvalue$10]; + } + break a; + } + if(symbol$9(record_check_extra_fields)) + extra[1] = [0, field_name, symbol$9(extra)]; + } + var param$0 = tail; + } + }; + iter(field_yojsons); + if(symbol$9(duplicates)) + return record_duplicate_fields(tp_loc$5, symbol$9(duplicates), yojson); + if(symbol$9(extra)) + return record_extra_fields(tp_loc$5, symbol$9(extra), yojson); + var + ids_value = symbol$9(ids_field), + parent_id_value = symbol$9(parent_id_field), + match = symbol$9(user_id_field), + match$0 = symbol$9(fields_field), + match$1 = symbol$9(include_item_types_field), + start_index_value = symbol$9(start_index_field), + limit_value = symbol$9(limit_field), + sort_order_value = symbol$9(sort_order_field), + match$2 = symbol$9(sort_by_field), + match$3 = symbol$9(recursive_field), + match$4 = symbol$9(enable_user_data_field), + match$5 = symbol$9(enable_images_field); + if + (match && match$0 && match$1 && match$2 && match$3 && match$4 && match$5){ + var + enable_images_value = match$5[1], + enable_user_data_value = match$4[1], + recursive_value = match$3[1], + sort_by_value = match$2[1], + include_item_types_value = match$1[1], + fields_value = match$0[1], + user_id_value = match[1]; + if(ids_value) var v = ids_value[1], v$0 = v; else var v$0 = 0; + return [0, + v$0, + parent_id_value, + user_id_value, + fields_value, + include_item_types_value, + start_index_value, + limit_value, + sort_order_value, + sort_by_value, + recursive_value, + enable_user_data_value, + enable_images_value]; + } + var + _lS_ = [0, [0, 0 === symbol$9(enable_images_field) ? 1 : 0, _ik_], 0], + _lT_ = + [0, [0, 0 === symbol$9(enable_user_data_field) ? 1 : 0, _il_], _lS_], + _lU_ = [0, [0, 0 === symbol$9(recursive_field) ? 1 : 0, _im_], _lT_], + _lV_ = [0, [0, 0 === symbol$9(sort_by_field) ? 1 : 0, _in_], _lU_], + _lW_ = + [0, [0, 0 === symbol$9(include_item_types_field) ? 1 : 0, _io_], _lV_], + _lX_ = [0, [0, 0 === symbol$9(fields_field) ? 1 : 0, _ip_], _lW_]; + return record_undefined_elements + (tp_loc$5, + yojson, + [0, [0, 0 === symbol$9(user_id_field) ? 1 : 0, _iq_], _lX_]); + } + return record_list_instead_atom(tp_loc$5, yojson); + } + function yojson_of_params(param){ + var + v_enable_images = param[12], + v_enable_user_data = param[11], + v_recursive = param[10], + v_sort_by = param[9], + v_sort_order = param[8], + v_limit = param[7], + v_start_index = param[6], + v_include_item_types = param[5], + v_fields = param[4], + v_user_id = param[3], + v_parent_id = param[2], + v_ids = param[1], + arg = yojson_of_bool(v_enable_images), + bnds = [0, [0, _ir_, arg], 0], + arg$0 = yojson_of_bool(v_enable_user_data), + bnds$0 = [0, [0, _is_, arg$0], bnds], + arg$1 = yojson_of_bool(v_recursive), + bnds$1 = [0, [0, _it_, arg$1], bnds$0], + arg$2 = yojson_of_list(yojson_of_sort, v_sort_by), + bnds$2 = [0, [0, _iu_, arg$2], bnds$1]; + if(v_sort_order) + var + v = v_sort_order[1], + arg$3 = yojson_of_order(v), + bnd = [0, _iv_, arg$3], + bnds$3 = [0, bnd, bnds$2]; + else + var bnds$3 = bnds$2; + if(v_limit) + var + v$0 = v_limit[1], + arg$4 = yojson_of_int(v$0), + bnd$0 = [0, _iw_, arg$4], + bnds$4 = [0, bnd$0, bnds$3]; + else + var bnds$4 = bnds$3; + if(v_start_index) + var + v$1 = v_start_index[1], + arg$5 = yojson_of_int(v$1), + bnd$1 = [0, _ix_, arg$5], + bnds$5 = [0, bnd$1, bnds$4]; + else + var bnds$5 = bnds$4; + var + arg$6 = yojson_of_list(yojson_of_type, v_include_item_types), + bnds$6 = [0, [0, _iy_, arg$6], bnds$5], + arg$7 = yojson_of_list(yojson_of_field, v_fields), + bnds$7 = [0, [0, _iz_, arg$7], bnds$6], + arg$8 = yojson_of_string(v_user_id), + bnds$8 = [0, [0, _iA_, arg$8], bnds$7]; + if(v_parent_id) + var + v$2 = v_parent_id[1], + arg$9 = yojson_of_string(v$2), + bnd$2 = [0, _iB_, arg$9], + bnds$9 = [0, bnd$2, bnds$8]; + else + var bnds$9 = bnds$8; + if(0 === v_ids) + var bnds$10 = bnds$9; + else + var + arg$10 = + function(_lR_){return yojson_of_list(yojson_of_string, _lR_);}(v_ids), + bnd$3 = [0, _iC_, arg$10], + bnds$10 = [0, bnd$3, bnds$9]; + return [0, 963043957, bnds$10]; + } + function response_of_yojson(yojson){ + if(typeof yojson !== "number" && 963043957 === yojson[1]){ + var + field_yojsons = yojson[2], + items_field = [0, 0], + total_record_count_field = [0, 0], + start_index_field = [0, 0], + duplicates = [0, 0], + extra = [0, 0], + iter = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + tail = param$0[2], + match = param$0[1], + field_yojson = match[2], + field_name = match[1]; + if(caml_string_notequal(field_name, cst_Items)) + if(caml_string_notequal(field_name, cst_StartIndex)){ + if(! caml_string_notequal(field_name, cst_TotalRecordCount)) + if(symbol$9(total_record_count_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue = int_of_yojson(field_yojson); + total_record_count_field[1] = [0, fvalue]; + } + } + else if(symbol$9(start_index_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$0 = int_of_yojson(field_yojson); + start_index_field[1] = [0, fvalue$0]; + } + else if(symbol$9(items_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$1 = list_of_yojson(t_of_yojson, field_yojson); + items_field[1] = [0, fvalue$1]; + } + var param$0 = tail; + } + }; + iter(field_yojsons); + if(symbol$9(duplicates)) + return record_duplicate_fields(tp_loc$6, symbol$9(duplicates), yojson); + if(symbol$9(extra)) + return record_extra_fields(tp_loc$6, symbol$9(extra), yojson); + var + match = symbol$9(items_field), + match$0 = symbol$9(total_record_count_field), + match$1 = symbol$9(start_index_field); + if(match && match$0 && match$1){ + var + start_index_value = match$1[1], + total_record_count_value = match$0[1], + items_value = match[1]; + return [0, items_value, total_record_count_value, start_index_value]; + } + var + _lP_ = [0, [0, 0 === symbol$9(start_index_field) ? 1 : 0, _iD_], 0], + _lQ_ = + [0, [0, 0 === symbol$9(total_record_count_field) ? 1 : 0, _iE_], _lP_]; + return record_undefined_elements + (tp_loc$6, + yojson, + [0, [0, 0 === symbol$9(items_field) ? 1 : 0, _iF_], _lQ_]); + } + return record_list_instead_atom(tp_loc$6, yojson); + } + function yojson_of_response(param){ + var + v_start_index = param[3], + v_total_record_count = param[2], + v_items = param[1], + arg = yojson_of_int(v_start_index), + bnds = [0, [0, _iG_, arg], 0], + arg$0 = yojson_of_int(v_total_record_count), + bnds$0 = [0, [0, _iH_, arg$0], bnds], + arg$1 = yojson_of_list(yojson_of_t, v_items), + bnds$1 = [0, [0, _iI_, arg$1], bnds$0]; + return [0, 963043957, bnds$1]; + } + var method = 0; + function endpoint(param){return _iJ_;} + function params_of_yojson$0(yojson){ + if(typeof yojson !== "number" && 963043957 === yojson[1]){ + var + field_yojsons = yojson[2], + include_external_content_field = [0, 0], + duplicates = [0, 0], + extra = [0, 0], + iter = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + tail = param$0[2], + match = param$0[1], + field_yojson = match[2], + field_name = match[1]; + if(caml_string_notequal(field_name, cst_includeExternalContent)){ + if(symbol$9(record_check_extra_fields)) + extra[1] = [0, field_name, symbol$9(extra)]; + } + else if(symbol$9(include_external_content_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue = bool_of_yojson(field_yojson); + include_external_content_field[1] = [0, fvalue]; + } + var param$0 = tail; + } + }; + iter(field_yojsons); + if(symbol$9(duplicates)) + return record_duplicate_fields(tp_loc$7, symbol$9(duplicates), yojson); + if(symbol$9(extra)) + return record_extra_fields(tp_loc$7, symbol$9(extra), yojson); + var match = symbol$9(include_external_content_field); + if(! match) + return record_undefined_elements + (tp_loc$7, + yojson, + [0, + [0, + 0 === symbol$9(include_external_content_field) ? 1 : 0, + _iK_], + 0]); + var include_external_content_value = match[1]; + return [0, include_external_content_value]; + } + return record_list_instead_atom(tp_loc$7, yojson); + } + function yojson_of_params$0(param){ + var + v_include_external_content = param[1], + arg = yojson_of_bool(v_include_external_content), + bnds = [0, [0, _iL_, arg], 0]; + return [0, 963043957, bnds]; + } + function response_of_yojson$0(yojson){ + if(typeof yojson !== "number" && 963043957 === yojson[1]){ + var + field_yojsons = yojson[2], + items_field = [0, 0], + total_record_count_field = [0, 0], + start_index_field = [0, 0], + duplicates = [0, 0], + extra = [0, 0], + iter = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + tail = param$0[2], + match = param$0[1], + field_yojson = match[2], + field_name = match[1]; + if(caml_string_notequal(field_name, cst_Items)) + if(caml_string_notequal(field_name, cst_StartIndex)){ + if(! caml_string_notequal(field_name, cst_TotalRecordCount)) + if(symbol$9(total_record_count_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue = int_of_yojson(field_yojson); + total_record_count_field[1] = [0, fvalue]; + } + } + else if(symbol$9(start_index_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$0 = int_of_yojson(field_yojson); + start_index_field[1] = [0, fvalue$0]; + } + else if(symbol$9(items_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$1 = list_of_yojson(t_of_yojson, field_yojson); + items_field[1] = [0, fvalue$1]; + } + var param$0 = tail; + } + }; + iter(field_yojsons); + if(symbol$9(duplicates)) + return record_duplicate_fields(tp_loc$8, symbol$9(duplicates), yojson); + if(symbol$9(extra)) + return record_extra_fields(tp_loc$8, symbol$9(extra), yojson); + var + match = symbol$9(items_field), + match$0 = symbol$9(total_record_count_field), + match$1 = symbol$9(start_index_field); + if(match && match$0 && match$1){ + var + start_index_value = match$1[1], + total_record_count_value = match$0[1], + items_value = match[1]; + return [0, items_value, total_record_count_value, start_index_value]; + } + var + _lN_ = [0, [0, 0 === symbol$9(start_index_field) ? 1 : 0, _iM_], 0], + _lO_ = + [0, [0, 0 === symbol$9(total_record_count_field) ? 1 : 0, _iN_], _lN_]; + return record_undefined_elements + (tp_loc$8, + yojson, + [0, [0, 0 === symbol$9(items_field) ? 1 : 0, _iO_], _lO_]); + } + return record_list_instead_atom(tp_loc$8, yojson); + } + function yojson_of_response$0(param){ + var + v_start_index = param[3], + v_total_record_count = param[2], + v_items = param[1], + arg = yojson_of_int(v_start_index), + bnds = [0, [0, _iP_, arg], 0], + arg$0 = yojson_of_int(v_total_record_count), + bnds$0 = [0, [0, _iQ_, arg$0], bnds], + arg$1 = yojson_of_list(yojson_of_t, v_items), + bnds$1 = [0, [0, _iR_, arg$1], bnds$0]; + return [0, 963043957, bnds$1]; + } + function endpoint$0(pp){ + var _lM_ = pp[1]; + return caml_call1(sprintf(_iS_), _lM_); + } + function virtual_folder_of_yojson(yojson){ + if(typeof yojson !== "number" && 963043957 === yojson[1]){ + var + field_yojsons = yojson[2], + name_field = [0, 0], + locations_field = [0, 0], + item_id_field = [0, 0], + duplicates = [0, 0], + extra = [0, 0], + iter = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + tail = param$0[2], + match = param$0[1], + field_yojson = match[2], + field_name = match[1]; + if(caml_string_notequal(field_name, cst_ItemId)) + if(caml_string_notequal(field_name, cst_Locations)){ + if(! caml_string_notequal(field_name, cst_Name)) + if(symbol$9(name_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue = string_of_yojson(field_yojson); + name_field[1] = [0, fvalue]; + } + } + else if(symbol$9(locations_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$0 = list_of_yojson(string_of_yojson, field_yojson); + locations_field[1] = [0, fvalue$0]; + } + else if(symbol$9(item_id_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$1 = string_of_yojson(field_yojson); + item_id_field[1] = [0, fvalue$1]; + } + var param$0 = tail; + } + }; + iter(field_yojsons); + if(symbol$9(duplicates)) + return record_duplicate_fields(tp_loc$9, symbol$9(duplicates), yojson); + if(symbol$9(extra)) + return record_extra_fields(tp_loc$9, symbol$9(extra), yojson); + var + match = symbol$9(name_field), + match$0 = symbol$9(locations_field), + match$1 = symbol$9(item_id_field); + if(match && match$0 && match$1){ + var + item_id_value = match$1[1], + locations_value = match$0[1], + name_value = match[1]; + return [0, name_value, locations_value, item_id_value]; + } + var + _lK_ = [0, [0, 0 === symbol$9(item_id_field) ? 1 : 0, _iT_], 0], + _lL_ = [0, [0, 0 === symbol$9(locations_field) ? 1 : 0, _iU_], _lK_]; + return record_undefined_elements + (tp_loc$9, + yojson, + [0, [0, 0 === symbol$9(name_field) ? 1 : 0, _iV_], _lL_]); + } + return record_list_instead_atom(tp_loc$9, yojson); + } + function yojson_of_virtual_folder(param){ + var + v_item_id = param[3], + v_locations = param[2], + v_name = param[1], + arg = yojson_of_string(v_item_id), + bnds = [0, [0, _iW_, arg], 0], + arg$0 = yojson_of_list(yojson_of_string, v_locations), + bnds$0 = [0, [0, _iX_, arg$0], bnds], + arg$1 = yojson_of_string(v_name), + bnds$1 = [0, [0, _iY_, arg$1], bnds$0]; + return [0, 963043957, bnds$1]; + } + function authorization(token, param){ + if(token) + var t = token[1], token$0 = caml_call1(sprintf(_iZ_), t); + else + var token$0 = _i2_; + return caml_call2(sprintf(_i1_), _i0_, token$0); + } + function request$1(base_url, token, headers, Q){ + return function(params, path_params){ + var + _lH_ = caml_jsstring_of_string(caml_call1(Q[6], path_params)), + uri = + get_ok + (of_jstr + (map + (function(_lJ_){return caml_jsstring_of_string(_lJ_);}, base_url), + _lH_)), + authorization$0 = authorization(token, 0), + headers$0 = + of_assoc + (headers, + [0, + [0, "content-type", "text/json"], + [0, + [0, + "X-Emby-Authorization", + caml_jsstring_of_string(authorization$0)], + 0]]), + method = jstr_of_method(Q[5]); + if(Q[5]) + var + body = + of_jstr$0 + (caml_jsstring_of_string + (to_string$3(0, 0, 0, caml_call1(Q[1], params)))), + url = to_jstr$0(uri), + url$0 = url, + init = + init$1 + ([0, body], + 0, + 0, + [0, headers$0], + 0, + 0, + [0, method], + 0, + 0, + 0, + 0, + 0, + 0); + else + var + params$0 = + of_obj + (get_ok + (decode + (caml_jsstring_of_string + (to_string$3(0, 0, 0, caml_call1(Q[1], params)))))), + uri_with_params = with_query_params(uri, params$0), + url$1 = to_jstr$0(uri_with_params), + init$0 = + init$1(0, 0, 0, [0, headers$0], 0, 0, [0, method], 0, 0, 0, 0, 0, 0), + url$0 = url$1, + init = init$0; + return let$1 + (request$0(v$1([0, init], url$0)), + function(res){ + return let$2 + (text(res), + function(json){ + var + yojson = + from_string$0(0, 0, 0, caml_string_of_jsstring(json)); + try{var _lI_ = caml_call1(Q[4], yojson); return _lI_;} + catch(e$0){ + var e = caml_wrap_exception(e$0); + log([0, _i3_, [0, json, 0]]); + log([0, e, 0]); + throw caml_maybe_attach_backtrace(e, 0); + } + }); + });}; + } + var method$0 = 0; + function get_token(t){return t[2][2];} + function query(t){ + var + token = get_token(t), + base_url = t[1], + _lD_ = [0, token], + _lE_ = [0, base_url]; + return function(_lF_, _lG_){return request$1(_lE_, _lD_, _lF_, _lG_);}; + } + function tag_of(obj){ + return is_block(obj) ? [0, caml_obj_tag(obj)] : [1, obj]; + } + function Make$7(Q){ + function Start_client(P){ + var + futures = create$2(0, 64), + listeners = create$2(0, 64), + worker = create$6(0, caml_jsstring_of_string(P[1])); + function on_message(ev){ + symbol$8 + (of_jstr$1(data(ev)), + function(message){ + if(0 === message[0]){ + var + match = message[1], + data = match[2], + uuid = match[1], + f = find(futures, uuid); + remove(futures, uuid); + return caml_call1(f, data); + } + var match$0 = message[1], v = match$0[2], e = match$0[1]; + function _lB_(f){return caml_call1(f, v);} + return function(_lC_){return iter(_lB_, _lC_);} + (find_all(listeners, tag_of(e))); + }); + return 0; + } + var _lz_ = 0; + (function(_lA_){return listen(_lz_, message, on_message, _lA_);}(worker)); + return; + } + function dispatch_event(e, v){return post(0, to_jstr$1([1, [0, e, v]]));} + function Make_worker(W){ + var W$0 = caml_call1(W, [0]); + function on_message(ev){ + symbol$8 + (of_jstr$1(data(ev)), + function(param){ + var data = param[2], uuid = param[1]; + return let$2 + (caml_call1(W$0[1], data), + function(result){ + var data = to_jstr$1(result); + return post(0, to_jstr$1([0, [0, uuid, data]])); + }); + }); + return 0; + } + listen(0, message, on_message, global); + return; + } + return [0, Start_client, dispatch_event, Make_worker]; + } + function _i4_(_lv_){ + var _lw_ = Make$7(_lv_), _lx_ = _lw_[3]; + return [0, , _lw_[2], function(_ly_){_lx_(_ly_); return;}]; + } + function of_sort(size, param){ + if(param) return 0; + var tbl = init$0(size, function(_lu_){return _lu_;}); + shuffle$0(tbl); + return [0, tbl]; + } + function apply(t, i){ + if(! t) return i; + var a = t[1]; + return caml_check_bound(a, i)[1 + i]; + } + function t_to_jv(encoder, t){ + return get_exn + (decode + (caml_jsstring_of_string + (to_string$3(0, 0, 0, caml_call1(encoder, t))))); + } + function jv_to_t(decoder, j){ + var json = encode(j); + return [0, + caml_call1 + (decoder, from_string$0(0, 0, 0, caml_string_of_jsstring(json)))]; + } + function t_of_yojson$0(yojson){ + if(typeof yojson !== "number" && 963043957 === yojson[1]){ + var + field_yojsons = yojson[2], + id_field = [0, 0], + item_field = [0, 0], + duplicates = [0, 0], + extra = [0, 0], + iter = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + tail = param$0[2], + match = param$0[1], + field_yojson = match[2], + field_name = match[1]; + if(caml_string_notequal(field_name, cst_id)) + if(caml_string_notequal(field_name, cst_item)){ + if(symbol$9(record_check_extra_fields)) + extra[1] = [0, field_name, symbol$9(extra)]; + } + else if(symbol$9(item_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue = option_of_yojson(string_of_yojson, field_yojson); + item_field[1] = [0, fvalue]; + } + else if(symbol$9(id_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$0 = int_of_yojson(field_yojson); + id_field[1] = [0, fvalue$0]; + } + var param$0 = tail; + } + }; + iter(field_yojsons); + if(symbol$9(duplicates)) + return record_duplicate_fields(tp_loc$10, symbol$9(duplicates), yojson); + if(symbol$9(extra)) + return record_extra_fields(tp_loc$10, symbol$9(extra), yojson); + var match = symbol$9(id_field), match$0 = symbol$9(item_field); + if(match && match$0){ + var item_value = match$0[1], id_value = match[1]; + return [0, id_value, item_value]; + } + var _lt_ = [0, [0, 0 === symbol$9(item_field) ? 1 : 0, _i5_], 0]; + return record_undefined_elements + (tp_loc$10, + yojson, + [0, [0, 0 === symbol$9(id_field) ? 1 : 0, _i6_], _lt_]); + } + return record_list_instead_atom(tp_loc$10, yojson); + } + function yojson_of_t$0(param){ + var + v_item = param[2], + v_id = param[1], + arg = yojson_of_option(yojson_of_string, v_item), + bnds = [0, [0, _i7_, arg], 0], + arg$0 = yojson_of_int(v_id), + bnds$0 = [0, [0, _i8_, arg$0], bnds]; + return [0, 963043957, bnds$0]; + } + function to_jv$1(k){return k;} + function of_jv$0(j){return j;} + function to_jv$2(t){return t_to_jv(yojson_of_t$0, t);} + function of_jv$1(j){return get_exn(jv_to_t(t_of_yojson$0, j));} + function get_key(t){return t[1];} + function sorts_of_yojson(yojson){ + if(typeof yojson !== "number" && 963043957 === yojson[1]){ + var + field_yojsons = yojson[2], + date_added_field = [0, 0], + views_field = [0, 0], + sort_name_field = [0, 0], + duplicates = [0, 0], + extra = [0, 0], + iter = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + tail = param$0[2], + match = param$0[1], + field_yojson = match[2], + field_name = match[1]; + if(caml_string_notequal(field_name, cst_date_added)) + if(caml_string_notequal(field_name, cst_sort_name)) + if(caml_string_notequal(field_name, cst_views)){ + if(symbol$9(record_check_extra_fields)) + extra[1] = [0, field_name, symbol$9(extra)]; + } + else if(symbol$9(views_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue = list_of_yojson(string_of_yojson, field_yojson); + views_field[1] = [0, fvalue]; + } + else if(symbol$9(sort_name_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$0 = string_of_yojson(field_yojson); + sort_name_field[1] = [0, fvalue$0]; + } + else if(symbol$9(date_added_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$1 = int_of_yojson(field_yojson); + date_added_field[1] = [0, fvalue$1]; + } + var param$0 = tail; + } + }; + iter(field_yojsons); + if(symbol$9(duplicates)) + return record_duplicate_fields(tp_loc$11, symbol$9(duplicates), yojson); + if(symbol$9(extra)) + return record_extra_fields(tp_loc$11, symbol$9(extra), yojson); + var + match = symbol$9(date_added_field), + match$0 = symbol$9(views_field), + match$1 = symbol$9(sort_name_field); + if(match && match$0 && match$1){ + var + sort_name_value = match$1[1], + views_value = match$0[1], + date_added_value = match[1]; + return [0, date_added_value, views_value, sort_name_value]; + } + var + _lr_ = [0, [0, 0 === symbol$9(sort_name_field) ? 1 : 0, _i9_], 0], + _ls_ = [0, [0, 0 === symbol$9(views_field) ? 1 : 0, _i__], _lr_]; + return record_undefined_elements + (tp_loc$11, + yojson, + [0, [0, 0 === symbol$9(date_added_field) ? 1 : 0, _i$_], _ls_]); + } + return record_list_instead_atom(tp_loc$11, yojson); + } + function yojson_of_sorts(param){ + var + v_sort_name = param[3], + v_views = param[2], + v_date_added = param[1], + arg = yojson_of_string(v_sort_name), + bnds = [0, [0, _ja_, arg], 0], + arg$0 = yojson_of_list(yojson_of_string, v_views), + bnds$0 = [0, [0, _jb_, arg$0], bnds], + arg$1 = yojson_of_int(v_date_added), + bnds$1 = [0, [0, _jc_, arg$1], bnds$0]; + return [0, 963043957, bnds$1]; + } + function t_of_yojson$1(yojson){ + if(typeof yojson !== "number" && 963043957 === yojson[1]){ + var + field_yojsons = yojson[2], + sorts_field = [0, 0], + item_field = [0, 0], + duplicates = [0, 0], + extra = [0, 0], + iter = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + tail = param$0[2], + match = param$0[1], + field_yojson = match[2], + field_name = match[1]; + if(caml_string_notequal(field_name, cst_item)) + if(caml_string_notequal(field_name, cst_sorts)){ + if(symbol$9(record_check_extra_fields)) + extra[1] = [0, field_name, symbol$9(extra)]; + } + else if(symbol$9(sorts_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue = sorts_of_yojson(field_yojson); + sorts_field[1] = [0, fvalue]; + } + else if(symbol$9(item_field)) + duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else{ + var fvalue$0 = t_of_yojson(field_yojson); + item_field[1] = [0, fvalue$0]; + } + var param$0 = tail; + } + }; + iter(field_yojsons); + if(symbol$9(duplicates)) + return record_duplicate_fields(tp_loc$12, symbol$9(duplicates), yojson); + if(symbol$9(extra)) + return record_extra_fields(tp_loc$12, symbol$9(extra), yojson); + var match = symbol$9(sorts_field), match$0 = symbol$9(item_field); + if(match && match$0){ + var item_value = match$0[1], sorts_value = match[1]; + return [0, sorts_value, item_value]; + } + var _lq_ = [0, [0, 0 === symbol$9(item_field) ? 1 : 0, _jd_], 0]; + return record_undefined_elements + (tp_loc$12, + yojson, + [0, [0, 0 === symbol$9(sorts_field) ? 1 : 0, _je_], _lq_]); + } + return record_list_instead_atom(tp_loc$12, yojson); + } + function yojson_of_t$1(param){ + var + v_item = param[2], + v_sorts = param[1], + arg = yojson_of_t(v_item), + bnds = [0, [0, _jf_, arg], 0], + arg$0 = yojson_of_sorts(v_sorts), + bnds$0 = [0, [0, _jg_, arg$0], bnds]; + return [0, 963043957, bnds$0]; + } + function to_jv$3(param){ + var + views = param[3], + sort_name = param[2], + id = param[1], + id$0 = _cJ_(id), + sort_name$0 = _cJ_(sort_name), + views$0 = of_list$0(_cJ_, views); + return caml_js_from_array([0, id$0, sort_name$0, views$0]); + } + function of_jv$2(j){ + var match = caml_js_to_array(j), len = match.length - 1; + if(3 !== len) + throw caml_maybe_attach_backtrace([0, Assert_failure, _jh_], 1); + var + id = match[1], + sort_name = match[2], + views = match[3], + id$0 = _cI_(id), + sort_name$0 = _cI_(sort_name), + views$0 = to_list$0(_cI_, views); + return [0, id$0, sort_name$0, views$0]; + } + var path$0 = [1, [0, _jk_, _jj_, _ji_]]; + function to_jv$4(k){return k;} + function of_jv$3(j){return j;} + function to_jv$5(k){return _cJ_(k);} + function of_jv$4(j){return _cI_(j);} + function to_jv$6(k){ + throw caml_maybe_attach_backtrace([0, Assert_failure, _jl_], 1); + } + function of_jv$5(j){ + var match = caml_js_to_array(j), len = match.length - 1; + if(2 !== len) + throw caml_maybe_attach_backtrace([0, Assert_failure, _jm_], 1); + var type = match[1], views = match[2], _lp_ = to_list$0(_cI_, views); + return [0, _cI_(type), _lp_]; + } + var path$3 = [1, [0, _jo_, _jn_]]; + function to_jv$7(t){ + throw caml_maybe_attach_backtrace([0, Assert_failure, _jp_], 1); + } + function of_jv$6(j){ + var match = caml_js_to_array(j), len = match.length - 1; + if(2 !== len) + throw caml_maybe_attach_backtrace([0, Assert_failure, _jq_], 1); + var + collection_type = match[1], + sort_name = match[2], + _lo_ = _cI_(sort_name); + return [0, _cI_(collection_type), _lo_]; + } + var path$4 = [1, [0, _js_, _jr_]]; + function to_jv$8(t){return t_to_jv(yojson_of_t$1, t);} + function of_jv$7(j){return get_exn(jv_to_t(t_of_yojson$1, j));} + function get_key$0(t){return [0, t[1][3], t[2][3], t[1][2]];} + function to_jv$9(k){return _cJ_(k);} + function of_jv$8(j){return _cI_(j);} + function to_jv$10(t){return t_to_jv(yojson_of_virtual_folder, t);} + function of_jv$9(j){return get_exn(jv_to_t(virtual_folder_of_yojson, j));} + function get_key$1(t){return t[3];} + var + Orderred_items_store = + _da_ + ([0, [0, path, to_jv$1, of_jv$0], name$2, to_jv$2, of_jv$1, get_key]), + Items_store = + _da_ + ([0, + [0, path$0, to_jv$3, of_jv$2], + name$3, + to_jv$8, + of_jv$7, + get_key$0]), + Virtual_folder_store = + _da_ + ([0, + [0, path$5, to_jv$9, of_jv$8], + name$4, + to_jv$10, + of_jv$9, + get_key$1]), + _jt_ = + [0, [0, path$0, to_jv$3, of_jv$2], name$3, to_jv$8, of_jv$7, get_key$0], + _ju_ = [0, name$5]; + function _jv_(_lm_, _ln_){return _db_(_ju_, _lm_, _ln_);} + var + ItemsByDateAdded = + function(_ll_){return _jv_(_jt_, _ll_);}([0, path$1, to_jv$4, of_jv$3]), + _jw_ = + [0, [0, path$0, to_jv$3, of_jv$2], name$3, to_jv$8, of_jv$7, get_key$0], + _jx_ = [0, name$6]; + function _jy_(_lj_, _lk_){return _db_(_jx_, _lj_, _lk_);} + var + ItemsByViewAndKind = + function(_li_){return _jy_(_jw_, _li_);}([0, path$3, to_jv$6, of_jv$5]), + _jz_ = + [0, [0, path$0, to_jv$3, of_jv$2], name$3, to_jv$8, of_jv$7, get_key$0], + _jA_ = [0, name$7]; + function _jB_(_lg_, _lh_){return _db_(_jA_, _lg_, _lh_);} + var + ItemsById = + function(_lf_){return _jB_(_jz_, _lf_);}([0, path$2, to_jv$5, of_jv$4]), + _jC_ = + [0, [0, path$0, to_jv$3, of_jv$2], name$3, to_jv$8, of_jv$7, get_key$0], + _jD_ = [0, name$8]; + function _jE_(_ld_, _le_){return _db_(_jD_, _ld_, _le_);} + var + ItemsByTypeAndName = + function(_lc_){return _jE_(_jC_, _lc_);}([0, path$4, to_jv$7, of_jv$6]), + chunk_size = 500; + function fetch_total_item_count(source){ + var + _lb_ = + [0, + 0, + 0, + source[2][1][4], + 0, + include_item_types, + 0, + _jH_, + _jG_, + _jF_, + 1, + 0, + 0]; + return let$2 + (caml_call2 + (query(source) + (0, + [0, + yojson_of_params, + params_of_yojson, + yojson_of_response, + response_of_yojson, + method, + endpoint]), + _lb_, + 0), + function(res){return res[2];}); + } + function get_db_infos(idb){ + var + match = create$5(0), + set_infos = match[2], + infos = match[1], + transaction$0 = + transaction + ([0, [0, function(_la_){return _la_;}, Orderred_items_store[1]], 0], + _jI_, + idb), + store = + object_store + ([0, function(_k$_){return _k$_;}, Orderred_items_store[1]]) + (transaction$0), + req = Orderred_items_store[9].call(null, 0, _jJ_, store), + last_key = [0, 0]; + on_success + (function(param, q){ + var match = result(q); + if(! match) return set_infos([0, last_key[1], 0]); + var cursor = match[1]; + if(is_none$0(last_key[1])) + last_key[1] = Orderred_items_store[3][1].call(null, cursor); + var match$0 = Orderred_items_store[3][5].call(null, cursor); + if(match$0){ + var item = match$0[1]; + if(item[2]) return set_infos([0, last_key[1], [0, item]]); + } + return Orderred_items_store[3][4].call(null, 0, cursor); + }, + req); + return infos; + } + function is_db_consistent(param, last_source_item_key, db_sync_infos){ + var last_key = value(db_sync_infos[1], -1); + return symbol$3(last_key, last_source_item_key) ? 0 : 1; + } + function check_status(source, idb){ + return bind$0 + (get_db_infos(idb), + function(db_infos){ + return let$2 + (fetch_total_item_count(source), + function(total_item_count){ + var last_source_item_key = total_item_count - 1 | 0; + if + (! is_db_consistent(source, last_source_item_key, db_infos)) + return 2; + var match = db_infos[1]; + if(match){ + var key = match[1], item = db_infos[2]; + if(symbol$2(key, last_source_item_key)){ + if(item) + var id = item[1][1], first_unfetched_key = id + 1 | 0; + else + var first_unfetched_key = 0; + return [0, + key + 1 | 0, + first_unfetched_key, + last_source_item_key]; + } + var item$0 = db_infos[2]; + if(symbol$1(key, last_source_item_key)){ + if(! item$0) return [1, 0, last_source_item_key]; + var id$0 = item$0[1][1]; + return symbol$1(id$0, key) + ? 1 + : [1, id$0 + 1 | 0, last_source_item_key]; + } + } + else if(! db_infos[2]) + return [0, 0, 0, last_source_item_key]; + return 2; + }); + }); + } + function update_views(source, idb){ + var _k7_ = [0, source[2][1][4]]; + return let$2 + (caml_call2 + (query(source) + (0, + [0, + yojson_of_params$0, + params_of_yojson$0, + yojson_of_response$0, + response_of_yojson$0, + method$0, + endpoint$0]), + _jL_, + _k7_), + function(views){ + iter + (function(item){ + var + transaction$0 = + transaction + ([0, + [0, function(_k__){return _k__;}, Orderred_items_store[1]], + [0, [0, function(_k9_){return _k9_;}, Items_store[1]], 0]], + _jK_, + idb), + s_items = + object_store + ([0, function(_k8_){return _k8_;}, Items_store[1]]) + (transaction$0), + sort_name = value(item[2], item[1]); + Items_store[14].call + (null, [0, [0, -1, 0, sort_name], item], 0, s_items); + return 0; + }, + views[1]); + return views; + }); + } + function deduce_virtual_folders_from_vi(source, views){ + function parent_ids_of_view_children(param){ + var + id = param[3], + _k6_ = [0, 0, [0, id], source[2][1][4], _jM_, 0, 0, 0, 0, 0, 0, 0, 0]; + return let$2 + (caml_call2 + (query(source) + (0, + [0, + yojson_of_params, + params_of_yojson, + yojson_of_response, + response_of_yojson, + method, + endpoint]), + _k6_, + 0), + function(res){ + return fold_left + (function(set, param){ + var parent_id = param[6]; + if(parent_id){ + var match = parent_id[1]; + if(match){ + var pid = match[1]; + return Set[4].call(null, pid, set); + } + } + return set; + }, + Set[1], + res[1]); + }); + } + function paths_of_parents(parents){ + var + _k4_ = source[2][1][4], + _k5_ = + [0, + Set[49].call(null, parents), + 0, + _k4_, + _jN_, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0]; + return let$2 + (caml_call2 + (query(source) + (0, + [0, + yojson_of_params, + params_of_yojson, + yojson_of_response, + response_of_yojson, + method, + endpoint]), + _k5_, + 0), + function(res){ + return filter_map$0 + (function(param){ + var path = param[4], id = param[3]; + return symbol$6(function(path){return [0, id, path];}, path); + }, + res[1]); + }); + } + return let$0 + (of_list$1 + (symbol$5 + (function(view){ + var id = view[3]; + return let$1 + (parent_ids_of_view_children(view), + function(parents){ + return let$2 + (paths_of_parents(parents), + function(paths){return [0, id, paths];}); + }); + }, + views[1])), + function(result){return flatten_l(result);}); + } + function views_of_path(vfolders, path){ + return filter_map$0 + (function(param){ + var locations = param[2], view_id = param[1]; + return exists + (function(param){ + var pre = param[2]; + return prefix(pre, path); + }, + locations) + ? [0, view_id] + : 0; + }, + vfolders); + } + function sync(opt, source){ + if(opt) + var sth = opt[1], report = sth; + else + var report = function(param){return;}; + return function(idb){ + function make_placeholders(first, last){ + var + transaction$0 = + transaction + ([0, [0, function(_k3_){return _k3_;}, Orderred_items_store[1]], 0], + _jO_, + idb), + store = + object_store + ([0, function(_k2_){return _k2_;}, Orderred_items_store[1]]) + (transaction$0); + if(last >= first){ + var i = first; + for(;;){ + Orderred_items_store[14].call(null, [0, i, 0], 0, store); + var _k1_ = i + 1 | 0; + if(last === i) break; + var i = _k1_; + } + } + return; + } + function fetch_missing_items(first, last){ + return let$1 + (update_views(source, idb), + function(views){ + return let$1 + (deduce_virtual_folders_from_vi(source, views), + function(vfolders){ + info([0, _jR_, [0, first, [0, _jQ_, [0, last, _jP_]]]]); + var + fetch_queue = create$0(0), + total = (last - first | 0) + 1 | 0; + function enqueue(start_index, todo){ + var start_index$0 = start_index, todo$0 = todo; + for(;;){ + var _k0_ = symbol$3(todo$0, 0); + if(! _k0_) return _k0_; + var + limit = min(todo$0, chunk_size), + req = + [0, + 0, + 0, + source[2][1][4], + _jU_, + include_item_types, + [0, start_index$0], + [0, limit], + _jT_, + _jS_, + 1, + 0, + 1]; + add(req, fetch_queue); + var + todo$1 = todo$0 - limit | 0, + start_index$1 = start_index$0 + limit | 0, + start_index$0 = start_index$1, + todo$0 = todo$1; + } + } + enqueue(first, total); + var total_queries = length(fetch_queue); + function run_queue(opt, q){ + if(opt) + var sth = opt[1], threads = sth; + else + var threads = 1; + if(! symbol$3(threads, 0)) + throw caml_maybe_attach_backtrace + ([0, Assert_failure, _jX_], 1); + function take_n(acc, n){ + var acc$0 = acc, n$0 = n; + for(;;){ + if(symbol$1(n$0, 0)) return rev(acc$0); + var match = take_opt(q); + if(! match) return rev(acc$0); + var + elt = match[1], + n$1 = n$0 - 1 | 0, + acc$1 = [0, elt, acc$0], + acc$0 = acc$1, + n$0 = n$1; + } + } + function f(req){ + return let$2 + (caml_call2 + (query(source) + (0, + [0, + yojson_of_params, + params_of_yojson, + yojson_of_response, + response_of_yojson, + method, + endpoint]), + req, + 0), + function(param){ + var start_index = param[3], items = param[1]; + caml_call1 + (report, [0, [0, total_queries, length(fetch_queue)]]); + function idb_put(start_index, items){ + var + transaction$0 = + transaction + ([0, + [0, function(_kZ_){return _kZ_;}, Orderred_items_store[1]], + [0, [0, function(_kY_){return _kY_;}, Items_store[1]], 0]], + _jV_, + idb), + s_list = + object_store + ([0, function(_kX_){return _kX_;}, Orderred_items_store[1]]) + (transaction$0), + s_items = + object_store + ([0, function(_kW_){return _kW_;}, Items_store[1]]) + (transaction$0); + return iteri + (function(index, item){ + var + path = item[4], + id = item[3], + index$0 = start_index + index | 0, + path$0 = value(path, _jW_), + views = views_of_path(vfolders, path$0), + sort_name = value(item[2], item[1]); + Orderred_items_store[14].call + (null, [0, index$0, [0, id]], 0, s_list); + Items_store[14].call + (null, + [0, [0, index$0, views, sort_name], item], + 0, + s_items); + return 0; + }, + items); + } + return idb_put(start_index, items); + }); + } + var reqs = take_n(0, threads); + return bind$0 + (of_list$1(symbol$5(f, reqs)), + function(reqs){ + return is_empty(reqs) ? ok(0) : run_queue(0, q); + }); + } + return run_queue(0, fetch_queue); + }); + }); + } + return function(param){ + if(typeof param === "number") return 2 === param ? ok(0) : ok(0); + if(0 === param[0]){ + var + last_source_item_key = param[3], + first_unfetched_key = param[2], + first_missing_key = param[1]; + make_placeholders(first_missing_key, last_source_item_key); + return fetch_missing_items(first_unfetched_key, last_source_item_key); + } + var last_source_item_key$0 = param[2], first_unfetched_key$0 = param[1]; + return fetch_missing_items + (first_unfetched_key$0, last_source_item_key$0);};}; + } + function check_and_sync(report, source, idb){ + return let$1 + (check_status(source, idb), + function(status){ + var + initial = [0, status, initial_report[2]], + report$0 = + symbol$6 + (function(report){ + caml_call1(report, initial); + return function(sync_progress){ + return caml_call1(report, [0, initial[1], sync_progress]);}; + }, + report); + return let$2 + (caml_call1(sync(report$0, source)(idb), status), + function(param){ + return iter$1 + (function(report){return caml_call1(report, _jY_);}, report); + }); + }); + } + var + Queries = [0], + include$0 = _i4_(Queries), + dispatch_event = include$0[2], + Make_worker = include$0[3], + get$2 = Items_store[5], + index = Items_store[13]; + function on_upgrade_needed$0(e, q){ + var new_version$0 = new_version(e), old_version$0 = old_version(e); + info([0, _j0_, [0, old_version$0, [0, _jZ_, [0, new_version$0, 0]]]]); + var + db = result(q), + list = + create_object_store + ([0, function(_kV_){return _kV_;}, Orderred_items_store[1]]) + (_j1_, db), + items = + create_object_store([0, function(_kU_){return _kU_;}, Items_store[1]]) + (_j2_, db), + virtual_folders = + create_object_store + ([0, function(_kT_){return _kT_;}, Virtual_folder_store[1]]) + (_j3_, db), + index_date_added = + caml_call1 + (Items_store[12].call + (null, + [0, + function(_kS_){return _kS_;}, + ItemsByDateAdded[12], + ItemsByDateAdded[2]]), + items); + caml_call1 + (Items_store[12].call + (null, + [0, + function(_kR_){return _kR_;}, + ItemsByTypeAndName[12], + ItemsByTypeAndName[2]]), + items); + caml_call1 + (Items_store[12].call + (null, + [0, + function(_kQ_){return _kQ_;}, + ItemsByViewAndKind[12], + ItemsByViewAndKind[2]]), + items); + caml_call1 + (Items_store[12].call + (null, [0, function(_kP_){return _kP_;}, ItemsById[12], ItemsById[2]]), + items); + return info + ([0, + _j4_, + [0, + list, + [0, items, [0, index_date_added, [0, virtual_folders, 0]]]]]); + } + function with_idb(version, name, f){ + function f$0(ev, dbr){var db = result(dbr); return caml_call1(f, db);} + (function(_kM_){return on_success(f$0, _kM_);} + (function(_kN_){return on_upgrade_needed(on_upgrade_needed$0, _kN_);} + (function(_kO_){return open(name, version, _kO_);}(get_factory(0, 0))))); + return; + } + self_init(0); + function map_error(f){ + return let$0 + (f, + function(f){ + return map_err(function(jv){return [0, 16620, jv];}, f); + }); + } + function as_fut(q){return map_error(fut$0(q));} + function fut_of_array(fs){ + function fut(p){return {fut: p};} + function promise(f){return f[cst_fut];} + var arr = of_array(promise, fs), all$0 = all(arr); + function to_array$0(l){ + return resolve(to_array(function(_kL_){return _kL_;}, l)); + } + return fut(bind(all$0, to_array$0)); + } + function Worker(symbol){ + function check_db(idb, source){ + var source$0 = source[2], server_id = source[1]; + function report(status){ + return dispatch_event(0, [0, server_id, status]); + } + return check_and_sync([0, report], source$0, idb); + } + var match = create$5(0), set_idb = match[2], idb = match[1]; + (function(_kK_){return with_idb(_j6_, _j5_, _kK_);} + (function(idb){set_idb([0, idb]); return 0;})); + function read_only_store(param){ + return let$2 + (idb, + function(idb){ + var + _kH_ = + transaction + ([0, [0, function(_kJ_){return _kJ_;}, Items_store[1]], 0], + _j7_, + idb); + return object_store + ([0, function(_kI_){return _kI_;}, Items_store[1]]) + (_kH_); + }); + } + var view_memo = create$2(0, 64), last_view = [0, [0, -1, [0]]]; + function get_view_keys(store, param){ + var + filters = param[4], + src_views = param[2], + hash$0 = hash([0, src_views, filters]); + if(equal$0(last_view[1][1], hash$0)) return ok(last_view[1][2]); + var + idx = + caml_call1 + (index + ([0, + function(_kG_){return _kG_;}, + ItemsByViewAndKind[12], + ItemsByViewAndKind[2]]), + store); + function _kz_(keys){ + a: + { + if(filters && ! filters[2]){ + var sub = filters[1][1]; + if(! is_empty$0(sub)){ + var + sub$0 = lowercase_ascii$1(sub), + _kF_ = + filter + (function(param){ + var + sort_name = param[2], + sort_name$0 = lowercase_ascii$1(sort_name), + pattern = compile(caml_call1(sprintf(_j8_), sub$0)); + return symbol$4(find$0(0, pattern)(sort_name$0), 0); + }, + keys), + keys$0 = _kF_; + break a; + } + } + var keys$0 = keys; + } + last_view[1] = [0, hash$0, keys$0]; + return keys$0; + } + try{var _kD_ = ok(find(view_memo, src_views)), _kC_ = _kD_;} + catch(_kE_){ + var _kA_ = caml_wrap_exception(_kE_); + if(_kA_ !== Not_found) throw caml_maybe_attach_backtrace(_kA_, 0); + var + lower = of_array(_cJ_, [0, _j9_]), + upper = of_array(_cJ_, [0, _j__]), + query = bound(lower, upper, _ka_, _j$_, 0), + _kB_ = + let$2 + (as_fut(ItemsByViewAndKind[8].call(null, [0, query], idx)), + function(all_keys){ + if(src_views) + var + src_views$0 = src_views[1], + keys = + filter + (function(param){ + var views = param[3]; + return exists + (function(v){return memq(v, src_views$0);}, views); + }, + all_keys); + else + var keys = all_keys; + add$0(view_memo, src_views, keys); + return keys; + }), + _kC_ = _kB_; + } + return let$2(_kC_, _kz_); + } + function on_query(q){ + switch(q[0]){ + case 0: + var l = q[1]; + return let$1 + (idb, + function(idb){ + return let$0 + (check_db(idb, hd(l)), + function(res){ + return map_err(function(jv){return [0, 16620, jv];}, res); + }); + }); + case 1: + return let$1 + (read_only_store(0), + function(store){ + return let$2 + (as_fut(Items_store[6].call(null, store)), + function(req){ + return to_list(map$3(function(i){return i[2];}, req)); + }); + }); + case 2: + return let$1 + (read_only_store(0), + function(store){ + var + index$0 = + caml_call1 + (index + ([0, + function(_ky_){return _ky_;}, + ItemsByTypeAndName[12], + ItemsByTypeAndName[2]]), + store), + lower = of_array(_cJ_, [0, _kb_]), + upper = of_array(_cJ_, [0, _kc_]), + query = bound(lower, upper, _ke_, _kd_, 0); + return let$1 + (as_fut + (ItemsByTypeAndName[8].call(null, [0, query], index$0)), + function(keys){ + return let$0 + (of_list$1 + (symbol$5 + (function(k){return as_fut(get$2(k, store));}, + to_list(keys))), + function(items){ + function _kv_(l){ + return symbol$5 + (function(_kx_){return get_exn_or(_kf_, _kx_);}, l); + } + var + items$0 = + function(_kw_){return symbol$7(_kv_, _kw_);} + (flatten_l(items)); + return items$0; + }); + }); + }); + case 3: + var server_id = q[1]; + return let$1 + (read_only_store(0), + function(store){ + var + index$0 = + caml_call1 + (index + ([0, + function(_ku_){return _ku_;}, + ItemsByTypeAndName[12], + ItemsByTypeAndName[2]]), + store), + lower = of_array(_cJ_, [0, _kg_]), + upper = of_array(_cJ_, [0, _kh_]), + query = bound(lower, upper, _kj_, _ki_, 0); + return let$1 + (as_fut + (ItemsByTypeAndName[8].call(null, [0, query], index$0)), + function(keys){ + return let$0 + (of_list$1 + (symbol$5 + (function(k){return as_fut(get$2(k, store));}, + to_list(keys))), + function(items){ + function _kq_(param){ + if(param){ + var item = param[1], server_id$0 = item[2][7]; + if(symbol$0(server_id$0, server_id)) return [0, item]; + } + return 0; + } + function _kr_(_kt_){return filter_map$0(_kq_, _kt_);} + var + items$0 = + function(_ks_){return symbol$7(_kr_, _ks_);} + (flatten_l(items)); + return items$0; + }); + }); + }); + case 4: + var request = q[1], uuid = new_uuid_v4(0); + return let$1 + (read_only_store(0), + function(store){ + return let$2 + (get_view_keys(store, request), + function(keys){ + var + item_count = keys.length - 1, + order = of_sort(item_count, request[3]); + return [0, uuid, request, order, 0, item_count]; + }); + }); + default: + var indexes = q[2], view = q[1]; + return let$1 + (read_only_store(0), + function(store){ + return let$1 + (get_view_keys(store, view[2]), + function(keys){ + return let$0 + (fut_of_array + (map$3 + (function(index){ + try{ + var + index$0 = index + view[4] | 0, + index$1 = apply(view[3], index$0), + key = caml_check_bound(keys, index$1)[1 + index$1], + _ko_ = + let$0 + (fut$0(get$2(key, store)), + function(result){ + if(0 !== result[0]){ + var err = result[1]; + error([0, _kk_, [0, key, [0, err, 0]]]); + return 0; + } + var match = result[1]; + if(! match) return 0; + var v = match[1]; + return [0, v]; + }); + return _ko_; + } + catch(_kp_){return return$0(0);} + }, + indexes)), + function(results){return [0, results];}); + }); + }); + } + } + return [0, , , , , on_query]; + } + Make_worker(function(_kn_){return [0, Worker(_kn_)[5]];}); + do_at_exit(0); + return; + } + (globalThis)); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLjAsImZpbGUiOiJkYl93b3JrZXIuYmMuanMiLCJzb3VyY2VSb290IjoiIiwibmFtZXMiOlsiY2FtbF9hcnJheV9ibGl0IiwiYTEiLCJpMSIsImEyIiwiaTIiLCJsZW4iLCJqIiwiY2FtbF9zdWJhcnJheV90b19qc2J5dGVzIiwiYSIsImkiLCJmIiwiU3RyaW5nIiwibnVsbCIsInMiLCJNYXRoIiwiY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5IiwiVWludDhBcnJheSIsImIiLCJsIiwiY2FtbF9ibGl0X2J5dGVzIiwiczEiLCJzMiIsImMxIiwiYzIiLCJjYW1sX3N0cl9yZXBlYXQiLCJuIiwiciIsImNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMiLCJqc29vX2lzX2FzY2lpIiwiY2FtbF91dGYxNl9vZl91dGY4IiwidCIsImMiLCJ2IiwiTWxCeXRlcyIsInRhZyIsImNvbnRlbnRzIiwibGVuZ3RoIiwidGhpcyIsImNvbnRlbnQiLCJjYW1sX2J5dGVzX29mX2pzYnl0ZXMiLCJjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIiwieCIsImNhbWxfYnl0ZXNfb2Zfc3RyaW5nIiwiY2FtbF9ibGl0X3N0cmluZyIsImQiLCJlIiwianNvb19zeXNfZ2V0ZW52IiwicHJvY2VzcyIsImdsb2JhbFRoaXMiLCJ1bmRlZmluZWQiLCJjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyIsImNhbWxfZ2xvYmFsX2RhdGEiLCJjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZSIsImV4biIsImZvcmNlIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9yYWlzZV93aXRoX2FyZyIsImFyZyIsImNhbWxfc3RyaW5nX29mX2pzYnl0ZXMiLCJjYW1sX3JhaXNlX3dpdGhfc3RyaW5nIiwibXNnIiwiY2FtbF9pbnZhbGlkX2FyZ3VtZW50IiwiY2FtbF9ieXRlc19ib3VuZF9lcnJvciIsImNhbWxfYnl0ZXNfdW5zYWZlX3NldCIsImNhbWxfYnl0ZXNfc2V0IiwiY2FtbF9ieXRlc191bnNhZmVfZ2V0IiwiY2FtbF9jYWxsX2dlbiIsImFyZ3MiLCJhcmdzTGVuIiwiZyIsIm5hcmdzIiwiQXJyYXkiLCJ5IiwiZXh0cmFfYXJncyIsImFyZ3VtZW50cyIsImNhbWxfYXJyYXlfYm91bmRfZXJyb3IiLCJjYW1sX2NoZWNrX2JvdW5kIiwiYXJyYXkiLCJpbmRleCIsImNhbWxfY2xhc3NpZnlfZmxvYXQiLCJpc0Zpbml0ZSIsImlzTmFOIiwiY2FtbF9pc19jb250aW51YXRpb25fdGFnIiwibG9nMl9vayIsImpzb29fZmxvb3JfbG9nMiIsIkluZmluaXR5IiwiY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0IiwiZmxvYXQzMmEiLCJGbG9hdDMyQXJyYXkiLCJpbnQzMmEiLCJJbnQzMkFycmF5IiwiY2FtbF9pbnQ2NF9vZmZzZXQiLCJjYW1sX3JhaXNlX2NvbnN0YW50IiwiY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSIsIk1sSW50NjQiLCJsbyIsIm1pIiwiaGkiLCJ4aGkiLCJoIiwic2lnbiIsIm9mZnNldCIsIm1vZHVsdXMiLCJkaXZpc29yIiwicXVvdGllbnQiLCJxIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQiLCJleHAiLCJrIiwicjMiLCJyMiIsInIxIiwiY2FtbF9pbnQ2NF90b19ieXRlcyIsImNhbWxfYmFfc2VyaWFsaXplIiwid3JpdGVyIiwiYmEiLCJzeiIsImNvbXBsZXgiLCJjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50Iiwia2luZCIsImNhbWxfYmFfY3JlYXRlX2J1ZmZlciIsInNpemUiLCJ2aWV3IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIlVpbnQxNkFycmF5IiwiZGF0YSIsImNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyIsImNhbWxfaW50NjRfb2ZfYnl0ZXMiLCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMiLCJOYU4iLCJyZXMiLCJjYW1sX2JhX2dldF9zaXplIiwiZGltcyIsIm5fZGltcyIsImNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIiwiY2FtbF9pbnQ2NF9oaTMyIiwiY2FtbF9pbnQ2NF9sbzMyIiwiY2FtbF9iYV9jdXN0b21fbmFtZSIsIk1sX0JpZ2FycmF5IiwibGF5b3V0IiwiYnVmZmVyIiwib2ZzIiwiaW0iLCJyZSIsInRvdGFsIiwiazEiLCJrMiIsIk1sX0JpZ2FycmF5X2NfMV8xIiwiY2FtbF9iYV9jcmVhdGVfdW5zYWZlIiwic2l6ZV9wZXJfZWxlbWVudCIsImNhbWxfZmFpbHdpdGgiLCJjYW1sX2JhX2Rlc2VyaWFsaXplIiwicmVhZGVyIiwibmFtZSIsIm51bV9kaW1zIiwic2l6ZV9kaW0iLCJzaXplX2RpbV9oaSIsInNpemVfZGltX2xvIiwic2l4dHkiLCJpbnQ2NCIsImNhbWxfYmFfY29tcGFyZSIsImNhbWxfbXVsIiwiY2FtbF9oYXNoX21peF9pbnQiLCJjYW1sX2hhc2hfbWl4X2ludDY0IiwiY2FtbF9oYXNoX21peF9mbG9hdCIsInYwIiwiY2FtbF9iYV9oYXNoIiwibnVtX2VsdHMiLCJ3IiwiY2FtbF9pbnQzMl91bm1hcnNoYWwiLCJjYW1sX25hdGl2ZWludF91bm1hcnNoYWwiLCJjYW1sX2ludDY0X3VubWFyc2hhbCIsImNhbWxfaW50NjRfbWFyc2hhbCIsInNpemVzIiwiY2FtbF9pbnQ2NF9jb21wYXJlIiwiY2FtbF9pbnQ2NF9oYXNoIiwiY2FtbF9jdXN0b21fb3BzIiwiY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tIiwiY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tIiwibnVtIiwiY3VzdG9tIiwic3dhcCIsImNvbXAiLCJjYW1sX2lzX21sX3N0cmluZyIsImNhbWxfaXNfbWxfYnl0ZXMiLCJjYW1sX2NvbXBhcmVfdmFsX3RhZyIsIk51bWJlciIsImNhbWxfaW50X2NvbXBhcmUiLCJjYW1sX3N0cmluZ19jb21wYXJlIiwiY2FtbF9ieXRlc19jb21wYXJlIiwiY2FtbF9jb21wYXJlX3ZhbCIsInN0YWNrIiwidGFnX2EiLCJ0YWdfYiIsImNhbWxfY29tcGFyZSIsImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlIiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2ZpbGxfYnl0ZXMiLCJjYW1sX2Zsb2F0X29mX3N0cmluZyIsIm0iLCJtMyIsIm1hbnRpc3NhIiwicGFyc2VJbnQiLCJleHBvbmVudCIsImNhbWxfcGFyc2VfZm9ybWF0IiwiZm10IiwiY2FtbF9maW5pc2hfZm9ybWF0dGluZyIsInJhd2J1ZmZlciIsImNhbWxfZm9ybWF0X2Zsb2F0IiwidG9GaXhlZCIsImRwIiwicHJlYyIsInAiLCJjYW1sX2Zvcm1hdF9pbnQiLCJjYW1sX29vX2xhc3RfaWQiLCJjYW1sX2ZyZXNoX29vX2lkIiwiY2FtbF9qc3N0cmluZ19vZl9zdHJpbmciLCJmc19ub2RlX3N1cHBvcnRlZCIsIm1ha2VfcGF0aF9pc19hYnNvbHV0ZSIsInBvc2l4IiwicGF0aCIsIndpbjMyIiwic3BsaXREZXZpY2VSZSIsInJlc3VsdCIsImRldmljZSIsImlzVW5jIiwiQm9vbGVhbiIsInJvb3QiLCJzZXAiLCJwYXRoX2lzX2Fic29sdXRlIiwiY2FtbF90cmFpbGluZ19zbGFzaCIsImNhbWxfY3VycmVudF9kaXIiLCJjYW1sX21ha2VfcGF0aCIsImNvbXAwIiwibmNvbXAiLCJjYW1sX3V0Zjhfb2ZfdXRmMTYiLCJjYW1sX3N0cmluZ19vZl9qc3N0cmluZyIsInVuaXhfZXJyb3IiLCJtYWtlX3VuaXhfZXJyX2FyZ3MiLCJjb2RlIiwic3lzY2FsbCIsImVycm5vIiwidmFyaWFudCIsImNhbWxfbmFtZWRfdmFsdWVzIiwiY2FtbF9uYW1lZF92YWx1ZSIsIm5tIiwiY2FtbF9yYWlzZV93aXRoX2FyZ3MiLCJjYW1sX2J5dGVzX29mX2FycmF5IiwiY2FtbF9yYWlzZV9zeXNfZXJyb3IiLCJjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSIsImNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMiLCJjYW1sX21sX2J5dGVzX2xlbmd0aCIsIk1sRmlsZSIsIk1sRmFrZUZpbGUiLCJvbGQiLCJidWYiLCJwb3MiLCJjbGVuIiwibmV3X3N0ciIsIm9sZF9kYXRhIiwiTWxGYWtlRmQiLCJmaWxlIiwiZmxhZ3MiLCJNbEZha2VEZXZpY2UiLCJTeW1ib2wiLCJuYW1lX3NsYXNoIiwibW9kZSIsInJhaXNlX3VuaXgiLCJwYXJlbnQiLCJSZWdFeHAiLCJzZWVuIiwiZW50cnkiLCJvayIsImJ5dGVzIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfdW5zYWZlX2dldCIsImNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nIiwiTWxOb2RlRmQiLCJmZCIsInJlcXVpcmUiLCJlcnIiLCJidWZfb2Zmc2V0IiwicmVhZCIsIk1sTm9kZURldmljZSIsImNvbnN0cyIsImtleSIsImlzQ2hhcmFjdGVyRGV2aWNlIiwibyIsImpzX3N0YXRzIiwidG9fZGlyIiwidGFyZ2V0IiwibGluayIsImZpbGVfa2luZCIsImNhbWxfZ2V0X3Jvb3QiLCJjYW1sX3Jvb3QiLCJqc29vX21vdW50X3BvaW50IiwicmVzb2x2ZV9mc19kZXZpY2UiLCJjYW1sX2NyZWF0ZV9maWxlIiwianNvb19jcmVhdGVfZmlsZSIsImNhbWxfZnNfaW5pdCIsInRtcCIsImNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlIiwiY2FtbF9oYXNoX21peF9qc2J5dGVzIiwiY2FtbF9oYXNoX21peF9zdHJpbmciLCJjYW1sX2hhc2hfbWl4X2J5dGVzX2FyciIsImNhbWxfbWxfYnl0ZXNfY29udGVudCIsImNhbWxfaGFzaF9taXhfYnl0ZXMiLCJjYW1sX2hhc2hfbWl4X2ZpbmFsIiwiY2FtbF9oYXNoIiwiY291bnQiLCJsaW1pdCIsInNlZWQiLCJvYmoiLCJxdWV1ZSIsInJkIiwid3IiLCJoaCIsImNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0Iiwic3R5bGUiLCJleHBfc2lnbiIsInNpZ25fc3RyIiwiY3N0IiwieF9zdHIiLCJpZHgiLCJjYW1sX2ludDY0X2lzX3plcm8iLCJjYW1sX2ludDY0X29mX2ludDMyIiwiY2FtbF9pbnQ2NF90b19pbnQzMiIsImNhbWxfaW50NjRfaXNfbmVnYXRpdmUiLCJjYW1sX2ludDY0X25lZyIsImNhbWxfaW50NjRfZm9ybWF0Iiwid2Jhc2UiLCJjdnRibCIsImNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSIsImJhc2UiLCJjYW1sX3BhcnNlX2RpZ2l0IiwiY2FtbF9pbnRfb2Zfc3RyaW5nIiwidGhyZXNob2xkIiwiY2FtbF9qc19mcm9tX2FycmF5IiwiY2FtbF9qc19tZXRoX2NhbGwiLCJjYW1sX2pzX25ldyIsIkYiLCJjYW1sX2pzX29iamVjdCIsImNhbWxfanNfdG9fYXJyYXkiLCJjYW1sX2NhbGxiYWNrIiwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdCIsImFyaXR5IiwiY2FtbF9sZXNzZXF1YWwiLCJjYW1sX2xlc3N0aGFuIiwiY2FtbF9sZXhfYXJyYXkiLCJjYW1sX2xleF9lbmdpbmUiLCJ0YmwiLCJzdGFydF9zdGF0ZSIsImxleGJ1ZiIsImxleF9idWZmZXIiLCJsZXhfYnVmZmVyX2xlbiIsImxleF9zdGFydF9wb3MiLCJsZXhfY3Vycl9wb3MiLCJsZXhfbGFzdF9wb3MiLCJsZXhfbGFzdF9hY3Rpb24iLCJsZXhfZW9mX3JlYWNoZWQiLCJsZXhfYmFzZSIsImxleF9iYWNrdHJrIiwibGV4X2RlZmF1bHQiLCJsZXhfdHJhbnMiLCJsZXhfY2hlY2siLCJzdGF0ZSIsImJhY2t0cmsiLCJjYW1sX21ha2VfdmVjdCIsImluaXQiLCJjYW1sX01ENUluaXQiLCJBcnJheUJ1ZmZlciIsImIzMiIsIlVpbnQzMkFycmF5IiwiYjgiLCJjYW1sX01ENVRyYW5zZm9ybSIsImFkZCIsInh4IiwiZmYiLCJnZyIsImlpIiwiY2FtbF9NRDVVcGRhdGUiLCJjdHgiLCJpbnB1dCIsImlucHV0X2xlbiIsImluX2J1ZiIsImlucHV0X3BvcyIsIm1pc3NpbmciLCJjYW1sX01ENUZpbmFsIiwiY2FtbF9zdHJpbmdfb2ZfYXJyYXkiLCJjYW1sX21kNV9ieXRlcyIsImNhbWxfbWQ1X3N0cmluZyIsImNhbWxfc3lzX2ZkcyIsImNhbWxfc3lzX2Nsb3NlIiwiY2FtbF9tbF9jaGFubmVscyIsImNhbWxfbWxfZmx1c2giLCJjaGFuaWQiLCJjaGFuIiwiY2FtbF9tbF9jbG9zZV9jaGFubmVsIiwiY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyIsImNhbWxfcmVmaWxsIiwic3RyIiwic3RyX2EiLCJucmVhZCIsImNhbWxfbWxfaW5wdXRfYmxvY2siLCJhdmFpbCIsImNhbWxfbWxfaW5wdXQiLCJjYW1sX3N5c19vcGVuX2Zvcl9ub2RlIiwiZnMiLCJmZDIiLCJNbEZha2VGZF9vdXQiLCJjb25zb2xlIiwic3JjIiwiY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCIsImNhbWxfc3lzX29wZW4iLCJfcGVybXMiLCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbiIsInJlZmlsbCIsImNoYW5uZWwiLCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQiLCJidWZmZXJlZCIsImNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3QiLCJjYW1sX21sX291dHB1dF90YSIsImlkIiwiY2FtbF9tbF9vdXRwdXRfYnl0ZXMiLCJjYW1sX21sX291dHB1dCIsImNhbWxfbWxfb3V0cHV0X2NoYXIiLCJjYW1sX21sX3NldF9jaGFubmVsX25hbWUiLCJjYW1sX21vZCIsImNhbWxfbm90ZXF1YWwiLCJjYW1sX29ial9tYWtlX2ZvcndhcmQiLCJjYW1sX29ial90YWciLCJGdW5jdGlvbiIsImNhbWxfYnVpbGRfc3ltYm9scyIsInN5bWIiLCJjYW1sX3JlZ2lzdGVyX2dsb2JhbCIsIm5hbWVfb3B0IiwibmlkIiwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZSIsImNhbWxfc3RyaW5nX2VxdWFsIiwiY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3N0cmluZ19ub3RlcXVhbCIsImNhbWxfc3RyaW5nX29mX2J5dGVzIiwiY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSIsImNhbWxfcmFpc2Vfbm90X2ZvdW5kIiwiY2FtbF9zeXNfZ2V0ZW52IiwiY2FtbF9zeXNfcmFuZG9tX3NlZWQiLCJub3ciLCJEYXRlIiwiY2FtbF90cmFtcG9saW5lIiwiY2FtbF90cmFtcG9saW5lX3JldHVybiIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uIiwiY2FtbF9mb3JtYXRfZXhjZXB0aW9uIiwiYnVja2V0Iiwic3RhcnQiLCJjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbiIsImhhbmRsZXIiLCJhdF9leGl0IiwiY2FtbF9zZXR1cF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciIsIm9yaWdpbiIsImV2ZW50IiwiemVyb19wb3MiLCJsb2NmbXQiLCJvY2FtbF9sZXhfdGFibGVzIiwidHBfbG9jIiwidHBfbG9jJDAiLCJ0cF9sb2MkMSIsInRwX2xvYyQyIiwidHBfbG9jJDMiLCJ0cF9sb2MkNCIsInRwX2xvYyQ1IiwidHBfbG9jJDYiLCJ0cF9sb2MkNyIsInRwX2xvYyQ4IiwidHBfbG9jJDkiLCJ0cF9sb2MkMTAiLCJuYW1lJDIiLCJ0cF9sb2MkMTEiLCJ0cF9sb2MkMTIiLCJwYXRoJDEiLCJwYXRoJDIiLCJuYW1lJDMiLCJwYXRoJDUiLCJuYW1lJDQiLCJuYW1lJDUiLCJuYW1lJDYiLCJuYW1lJDciLCJuYW1lJDgiLCJpbmNsdWRlX2l0ZW1fdHlwZXMiLCJpbml0aWFsX3JlcG9ydCIsImVyYXNlX3JlbCIsInJlc3QiLCJyZXN0JDAiLCJyZXN0JDEiLCJyZXN0JDIiLCJyZXN0JDMiLCJyZXN0JDQiLCJyZXN0JDUiLCJyZXN0JDYiLCJyZXN0JDciLCJ0eSIsInJlc3QkOCIsInR5MSIsInJlc3QkOSIsInJlc3QkMTAiLCJyZXN0JDExIiwicmVzdCQxMiIsInJlc3QkMTMiLCJjb25jYXRfZm10dHkiLCJmbXR0eTEiLCJmbXR0eTIiLCJ0eTIiLCJjb25jYXRfZm10IiwiZm10MSIsImZtdDIiLCJwYWQiLCJwYWQkMCIsInBhZCQxIiwiaWNvbnYiLCJwcmVjJDAiLCJwYWQkMiIsImljb252JDAiLCJwcmVjJDEiLCJwYWQkMyIsImljb252JDEiLCJwcmVjJDIiLCJwYWQkNCIsImljb252JDIiLCJwcmVjJDMiLCJwYWQkNSIsImZjb252IiwicGFkJDYiLCJjaHIiLCJmbXR0eSIsInBhZCQ3IiwiZm10dHkkMCIsInBhZCQ4IiwicmVzdCQxNCIsInJlc3QkMTUiLCJyZXN0JDE2IiwiZm10aW5nX2xpdCIsInJlc3QkMTciLCJmbXRpbmdfZ2VuIiwicmVzdCQxOCIsInJlc3QkMTkiLCJjaGFyX3NldCIsIndpZHRoX29wdCIsInJlc3QkMjAiLCJjb3VudGVyIiwicmVzdCQyMSIsInJlc3QkMjIiLCJpZ24iLCJyZXN0JDIzIiwiY3VyIiwiZmFpbHdpdGgiLCJpbnZhbGlkX2FyZyIsImFicyIsIm1heF9pbnQiLCJsMSIsImwyIiwiY2hhcl9vZl9pbnQiLCJzdHJpbmdfb2ZfYm9vbCIsInN0cmluZ19vZl9pbnQiLCJ2YWxpZF9mbG9hdF9sZXhlbSIsImxvb3AiLCJpJDAiLCJpJDEiLCJzdHJpbmdfb2ZfZmxvYXQiLCJzdGRvdXQiLCJzdGRlcnIiLCJvcGVuX291dF9nZW4iLCJwZXJtIiwib3Blbl9vdXQiLCJmbHVzaF9hbGwiLCJpdGVyIiwib3V0cHV0X3N0cmluZyIsIm9jIiwib3V0cHV0X3N1YnN0cmluZyIsImNsb3NlX291dCIsIm9wZW5faW5fZ2VuIiwib3Blbl9pbiIsImljIiwicHJlcnJfZW5kbGluZSIsImV4aXRfZnVuY3Rpb24iLCJmX3lldF90b19ydW4iLCJvbGRfZXhpdCIsImZfeWV0X3RvX3J1biQwIiwib2xkX2V4aXQkMCIsIm5ld19leGl0Iiwic3VjY2VzcyIsImRvX2F0X2V4aXQiLCJpc19ibG9jayIsInJhaXNlX3VuZGVmaW5lZCIsImZvcmNlX2xhenlfYmxvY2siLCJibGsiLCJjbG9zdXJlIiwiZSQwIiwibWFwIiwiZ2V0X29rIiwibWFwJDAiLCJvZl9pbnRfZXhuIiwicyQwIiwiaGQiLCJyZXZfYXBwZW5kIiwibDEkMCIsImwyJDAiLCJsMSQxIiwibDIkMSIsInJldiIsImluaXRfdGFpbHJlY19hdXgiLCJhY2MiLCJhY2MkMCIsImFjYyQxIiwiaW5pdF9hdXgiLCJybWFwX2YiLCJhY2N1JDAiLCJhY2N1IiwibCQwIiwibCQxIiwiYWNjdSQxIiwibWluJDAiLCJtYXgiLCJ0b19zdHJpbmciLCJvZnMxIiwib2ZzMiIsImVuc3VyZV9nZSIsInN1bV9sZW5ndGhzIiwic2VwbGVuIiwidGwiLCJ1bnNhZmVfYmxpdHMiLCJkc3QiLCJwb3MkMCIsImVzY2FwZV9pZl9uZWVkZWQiLCJpbmRleF9yZWMiLCJsaW0iLCJ0b2xpc3QiLCJyZXMkMCIsInJlcyQxIiwibGlzdF9sZW5ndGgiLCJmaWxsIiwibGV4X3JlZmlsbCIsInJlYWRfZnVuIiwiYXV4X2J1ZmZlciIsIm5ld2xlbiIsIm5ld2J1ZiIsIm9wdCIsInN0aCIsIndpdGhfcG9zaXRpb25zIiwiaGVpZ2h0IiwiY3JlYXRlIiwiaGwiLCJoJDAiLCJociIsImJhbCIsImxyIiwibHYiLCJsbCIsImxyciIsImxydiIsImxybCIsInJyIiwicnYiLCJybCIsInJsciIsInJsdiIsInJsbCIsImVsZW1lbnRzX2F1eCIsImVsZW1lbnRzIiwiZmluZF9sYXN0X29wdF9hdXgiLCJ2MCQwIiwiZmluZF9sYXN0X29wdCIsImNsZWFyIiwicHVzaCIsInBvcF9vcHQiLCJ0b3Bfb3B0IiwiaXRlciQwIiwiY3JlYXRlJDAiLCJjbGVhciQwIiwiY2VsbCIsIm1hdGNoIiwicGVla19vcHQiLCJ0YWtlIiwibmV4dCIsInRha2Vfb3B0IiwiZnJvbSIsImNyZWF0ZSQxIiwibiQwIiwibiQxIiwic3ViJDEiLCJsZW5ndGgkMCIsInJlc2V0IiwicmVzaXplIiwibW9yZSIsIm9sZF9wb3MiLCJvbGRfbGVuIiwibmV3X2xlbiIsIm5ld19idWZmZXIiLCJhZGRfY2hhciIsImFkZF9zdWJzdHJpbmciLCJuZXdfcG9zaXRpb24iLCJhZGRfc3RyaW5nIiwiZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24iLCJidWZmZXJfY3JlYXRlIiwiaW5pdF9zaXplIiwiYnVmZmVyX2NoZWNrX3NpemUiLCJvdmVyaGVhZCIsIm1pbl9sZW4iLCJidWZmZXJfYWRkX2NoYXIiLCJidWZmZXJfYWRkX3N0cmluZyIsInN0cl9sZW4iLCJidWZmZXJfY29udGVudHMiLCJjaGFyX29mX2Zjb252IiwiY0YiLCJicHJpbnRfZmNvbnZfZmxhZyIsInN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCIsImZvcm1hdHRpbmdfbGl0Iiwic3RyJDAiLCJicHJpbnRfZm10dHkiLCJmbXR0eSQxIiwiZm10dHkkMiIsImZtdHR5JDMiLCJmbXR0eSQ0IiwiZm10dHkkNSIsImZtdHR5JDYiLCJmbXR0eSQ3IiwiZm10dHkkOCIsImZtdHR5JDkiLCJzdWJfZm10dHkiLCJmbXR0eSQxMCIsInN1Yl9mbXR0eSQwIiwiZm10dHkkMTEiLCJmbXR0eSQxMiIsImZtdHR5JDEzIiwiZm10dHkkMTQiLCJmbXR0eSQxNSIsInN5bW0iLCJmbXR0eV9yZWxfZGV0IiwiZGUiLCJlZCIsImFmIiwiZmEiLCJkZSQwIiwiZWQkMCIsImFmJDAiLCJmYSQwIiwiZGUkMSIsImVkJDEiLCJhZiQxIiwiZmEkMSIsImRlJDIiLCJlZCQyIiwiYWYkMiIsImZhJDIiLCJkZSQzIiwiZWQkMyIsImFmJDMiLCJmYSQzIiwiZGUkNCIsImVkJDQiLCJhZiQ0IiwiZmEkNCIsImRlJDUiLCJlZCQ1IiwiYWYkNSIsImZhJDUiLCJkZSQ2IiwiZWQkNiIsImFmJDYiLCJmYSQ2IiwiZGUkNyIsImVkJDciLCJhZiQ3IiwiZmEkNyIsImRlJDgiLCJlZCQ4IiwiYWYkOCIsImZhJDgiLCJ0cmFucyIsImpkIiwiZGoiLCJnYSIsImFnIiwiZGUkOSIsImVkJDkiLCJhZiQ5IiwiZmEkOSIsImRlJDEwIiwiZWQkMTAiLCJhZiQxMCIsImZhJDEwIiwiZGUkMTEiLCJlZCQxMSIsImFmJDExIiwiZmEkMTEiLCJkZSQxMiIsImVkJDEyIiwiYWYkMTIiLCJmYSQxMiIsImRlJDEzIiwiZWQkMTMiLCJhZiQxMyIsImZhJDEzIiwicmVzdDEiLCJyZXN0MiIsInJlc3QxJDAiLCJyZXN0MiQwIiwicmVzdDEkMSIsInJlc3QyJDEiLCJyZXN0MSQyIiwicmVzdDIkMiIsInJlc3QxJDMiLCJyZXN0MiQzIiwicmVzdDEkNCIsInJlc3QyJDQiLCJyZXN0MSQ1IiwicmVzdDIkNSIsInJlc3QxJDYiLCJyZXN0MiQ2IiwicmVzdDEkNyIsInR5MSQwIiwicmVzdDIkNyIsInR5MiQwIiwicmVzdDEkOCIsInR5MTIiLCJ0eTExIiwicmVzdDIkOCIsInR5MjIiLCJ0eTIxIiwiZjQiLCJmMiIsInJlc3QxJDkiLCJyZXN0MiQ5IiwicmVzdDEkMTAiLCJyZXN0MiQxMCIsInJlc3QxJDExIiwicmVzdDIkMTEiLCJyZXN0MSQxMiIsInJlc3QyJDEyIiwicmVzdDEkMTMiLCJyZXN0MiQxMyIsInR5cGVfcGFkZGluZyIsInBhZHR5IiwicGFkdHkkMCIsInR5cGVfcGFkcHJlYyIsInR5cGVfZm9ybWF0IiwidHlwZV9mb3JtYXRfZ2VuIiwiZm10JDAiLCJmbXR0eV9yZXN0IiwiZm10X3Jlc3QiLCJmbXR0eV9yZXN0JDAiLCJmbXRfcmVzdCQwIiwiZm10JDEiLCJmbXRfcmVzdCQxIiwiZm10dHlfcmVzdCQxIiwiZm10JDIiLCJmbXRfcmVzdCQyIiwiZm10dHlfcmVzdCQyIiwiZm10JDMiLCJmbXRfcmVzdCQzIiwiZm10dHlfcmVzdCQzIiwiZm10JDQiLCJmbXRfcmVzdCQ0IiwiZm10dHlfcmVzdCQ0IiwiZm10JDUiLCJmbXRfcmVzdCQ1IiwiZm10dHlfcmVzdCQ1IiwicHJlYyQ0IiwiZm10JDYiLCJmbXRfcmVzdCQ2IiwicHJlYyQ1IiwicGFkJDkiLCJwYWQkMTAiLCJmbXR0eV9yZXN0JDYiLCJwcmVjJDYiLCJmbXQkNyIsImZtdF9yZXN0JDciLCJwcmVjJDciLCJwYWQkMTEiLCJwYWQkMTIiLCJmbXR0eV9yZXN0JDciLCJwcmVjJDgiLCJmbXQkOCIsImZtdF9yZXN0JDgiLCJwYWQkMTMiLCJwYWQkMTQiLCJmbXR0eV9yZXN0JDgiLCJmbXQkOSIsImZtdF9yZXN0JDkiLCJmbXQkMTAiLCJmbXRfcmVzdCQxMCIsImZtdCQxMSIsImZtdF9yZXN0JDExIiwiZm10JDEyIiwiZm10dHlfcmVzdCQ5IiwiZm10X3Jlc3QkMTIiLCJwYWRfb3B0IiwiZm10JDEzIiwiZm10dHlfcmVzdCQxMCIsInN1Yl9mbXR0eTEiLCJmbXRfcmVzdCQxMyIsInN1Yl9mbXR0eSQxIiwicGFkX29wdCQwIiwiZm10JDE0IiwiZm10dHlfcmVzdCQxMSIsImZtdF9yZXN0JDE0IiwiZm10JDE1IiwiZm10dHlfcmVzdCQxMiIsImZtdF9yZXN0JDE1IiwiZm10dHkkMTYiLCJmbXQkMTYiLCJmbXRfcmVzdCQxNiIsImZtdHR5JDE3IiwiZm10JDE3IiwiZm10X3Jlc3QkMTciLCJmb3JtYXR0aW5nX2dlbiIsInR5cGVfZm9ybWF0dGluZ19nZW4iLCJmbXR0eV9yZXN0JDEzIiwiZm10X3Jlc3QkMTgiLCJmbXR0eSQxOCIsImZtdCQxOCIsImZtdHR5X3Jlc3QkMTQiLCJmbXRfcmVzdCQxOSIsImZtdHR5JDE5IiwiZm10JDE5IiwiZm10dHlfcmVzdCQxNSIsImZtdF9yZXN0JDIwIiwiZm10dHkkMjAiLCJmbXQkMjAiLCJ0eXBlX2lnbm9yZWRfcGFyYW0iLCJmbXQwIiwiZm10dHkwIiwiZm10dHkzIiwiZm10MyIsImZtdDEkMCIsImZtdHR5MiQwIiwiZm10MiQwIiwiZm10dHkzJDAiLCJmbXQzJDAiLCJ0eXBlX2lnbm9yZWRfcGFyYW1fb25lIiwidHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpIiwic3ViX2ZtdHR5X3Jlc3QiLCJzdWJfZm10dHlfcmVzdCQwIiwic3ViX2ZtdHR5X3Jlc3QkMSIsInN1Yl9mbXR0eV9yZXN0JDIiLCJzdWJfZm10dHlfcmVzdCQzIiwic3ViX2ZtdHR5X3Jlc3QkNCIsInN1Yl9mbXR0eV9yZXN0JDUiLCJzdWJfZm10dHlfcmVzdCQ2Iiwic3ViX2ZtdHR5X3Jlc3QkNyIsInN1Yl9mbXR0eV9yZXN0JDgiLCJzdWJfZm10dHlfcmVzdCQ5Iiwic3ViX2ZtdHR5X3Jlc3QkMTAiLCJzdWJfZm10dHlfcmVzdCQxMSIsInN1Yl9mbXR0eV9yZXN0JDEyIiwic3ViX2ZtdHR5X3Jlc3QkMTMiLCJzdWJfZm10dHlfcmVzdCQxNCIsInN1YjJfZm10dHkiLCJzdWJfZm10dHlfcmVzdCQxNSIsInN1YjJfZm10dHkkMCIsInN1Yl9mbXR0eV9yZXN0JDE2Iiwic3ViMl9mbXR0eSQxIiwic3ViMV9mbXR0eSIsInN1Yl9mbXR0eV9yZXN0JDE3Iiwic3ViMl9mbXR0eSQyIiwic3ViMV9mbXR0eSQwIiwic3ViX2ZtdHR5X3Jlc3QkMTgiLCJzdWJfZm10dHlfcmVzdCQxOSIsInN1Yl9mbXR0eV9yZXN0JDIwIiwic3ViX2ZtdHR5X3Jlc3QkMjEiLCJzdWJfZm10dHlfcmVzdCQyMiIsInN1Yl9mbXR0eV9yZXN0JDIzIiwic3ViX2ZtdHR5X3Jlc3QkMjQiLCJzdWJfZm10dHlfcmVzdCQyNSIsInN1Yl9mbXR0eV9yZXN0JDI2IiwicmVjYXN0IiwiZml4X3BhZGRpbmciLCJ3aWR0aCIsIndpZHRoJDAiLCJmaXhfaW50X3ByZWNpc2lvbiIsInN0cmluZ190b19jYW1sX3N0cmluZyIsImZvcm1hdF9vZl9pY29udiIsImZvcm1hdF9vZl9pY29udkwiLCJmb3JtYXRfb2ZfaWNvbnZsIiwiZm9ybWF0X29mX2ljb252biIsImZvcm1hdF9vZl9mY29udiIsInRyYW5zZm9ybV9pbnRfYWx0IiwiZGlnaXRzIiwicHV0IiwibGVmdCIsImNvbnZlcnRfaW50IiwiY29udmVydF9pbnQzMiIsImNvbnZlcnRfbmF0aXZlaW50IiwiY29udmVydF9pbnQ2NCIsImNvbnZlcnRfZmxvYXQiLCJoZXgiLCJhZGRfZG90X2lmX25lZWRlZCIsImlzX3ZhbGlkIiwiY2FtbF9zcGVjaWFsX3ZhbCIsImZvcm1hdF9jYW1sX2NoYXIiLCJzdHJpbmdfb2ZfZm10dHkiLCJtYWtlX3ByaW50ZiQwIiwiayQwIiwibmV3X2FjYyIsIm1ha2VfcHJpbnRmIiwibWFrZV9wYWRkaW5nIiwibWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24iLCJtYWtlX2Zsb2F0X3BhZGRpbmdfcHJlY2lzaW9uIiwiYWNjJDIiLCJhY2MkMyIsImFjYyQ0IiwiayQxIiwia2FjYyIsImskMiIsIm1ha2VfaWdub3JlZF9wYXJhbSIsIm1ha2VfY3VzdG9tJDAiLCJtYWtlX2ludmFsaWRfYXJnIiwibWFrZV9mcm9tX2ZtdHR5JDAiLCJtYWtlX2Zyb21fZm10dHkiLCJwJDAiLCJwJDEiLCJhcml0eSQwIiwibWFrZV9jdXN0b20iLCJvdXRwdXRfYWNjIiwicCQzIiwicCQ0IiwicCQ1IiwicCQyIiwic3RycHV0X2FjYyIsImZhaWx3aXRoX21lc3NhZ2UiLCJvcGVuX2JveF9vZl9zdHJpbmciLCJpbnZhbGlkX2JveCIsInBhcnNlX3NwYWNlcyIsInBhcnNlX2x3b3JkIiwiaiQwIiwiaiQxIiwicGFyc2VfaW50Iiwid3N0YXJ0Iiwid2VuZCIsImJveF9uYW1lIiwibnN0YXJ0IiwibmVuZCIsImluZGVudCIsImV4cF9lbmQiLCJib3hfdHlwZSIsImtmcHJpbnRmIiwiZnByaW50ZiIsImVwcmludGYiLCJrc3ByaW50ZiIsInNwcmludGYiLCJwcmludGVycyIsImZpZWxkIiwib3RoZXJfZmllbGRzIiwiZmllbGRzIiwidXNlX3ByaW50ZXJzIiwiY29udiIsInRvX3N0cmluZ19kZWZhdWx0IiwiY2hhciQwIiwibGluZSIsImNoYXIkMSIsImxpbmUkMCIsImZpbGUkMCIsImNoYXIkMiIsImxpbmUkMSIsImZpbGUkMSIsImNvbnN0cnVjdG9yIiwidG9fc3RyaW5nJDAiLCJjb252ZXJ0X3Jhd19iYWNrdHJhY2UiLCJidCIsImZvcm1hdF9iYWNrdHJhY2Vfc2xvdCIsInNsb3QiLCJpbmZvIiwiaXNfcmFpc2UiLCJwcmludF9leGNlcHRpb25fYmFja3RyYWNlIiwib3V0Y2hhbiIsImJhY2t0cmFjZSIsInByaW50X3Jhd19iYWNrdHJhY2UiLCJyYXdfYmFja3RyYWNlIiwicmVnaXN0ZXJfcHJpbnRlciIsImZuIiwib2xkX3ByaW50ZXJzIiwibmV3X3ByaW50ZXJzIiwiZXJyb3JzIiwiZGVmYXVsdF91bmNhdWdodF9leGNlcHRpb25faGFuIiwic3RhdHVzIiwiZW1wdHlfYmFja3RyYWNlIiwidHJ5X2dldF9yYXdfYmFja3RyYWNlIiwiaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbiIsImRlYnVnZ2VyX2luX3VzZSIsImV4biQxIiwiZXhuJDAiLCJyYXdfYmFja3RyYWNlJDAiLCJoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJDAiLCJuZXdfc3RhdGUiLCJhc3NpZ24iLCJzdDEiLCJzdDIiLCJmdWxsX2luaXQiLCJjb21iaW5lIiwiZXh0cmFjdCIsInNlZWQkMCIsIm1ha2UkMiIsIm1ha2Vfc2VsZl9pbml0IiwiY29weSQwIiwiYml0cyIsImN1cnZhbCIsIm5ld3ZhbCIsIm5ld3ZhbDMwIiwiaW50YXV4IiwiaW50JDAiLCJib3VuZCIsImRlZmF1bHQkMCIsImludCQxIiwib25nb2luZ190cmF2ZXJzYWwiLCJwYXJhbXMiLCJyYW5kb21pemVkX2RlZmF1bHQiLCJwcm5nIiwicG93ZXJfMl9hYm92ZSIsIngkMCIsIngkMSIsImluaXRpYWxfc2l6ZSIsInJhbmRvbSIsImluc2VydF9hbGxfYnVja2V0cyIsImluZGV4ZnVuIiwiaW5wbGFjZSIsIm9kYXRhIiwibmRhdGEiLCJuc2l6ZSIsIm5kYXRhX3RhaWwiLCJpbnNlcnRfYnVja2V0IiwiY2VsbCQwIiwiY2VsbCQxIiwibmlkeCIsInJlc2l6ZSQwIiwib3NpemUiLCJrZXlfaW5kZXgiLCJyZW1vdmVfYnVja2V0IiwiZmluZF9yZWMiLCJkMSIsIm5leHQxIiwiZDIiLCJuZXh0MiIsImszIiwiZDMiLCJuZXh0MyIsImZpbmRfaW5fYnVja2V0IiwiemVybyIsInVua25vd24iLCJpc19rbm93biIsInBwX2VucXVldWUiLCJ0b2tlbiIsInBwX2NsZWFyX3F1ZXVlIiwicHBfaW5maW5pdHkiLCJwcF9vdXRwdXRfc3RyaW5nIiwicHBfb3V0cHV0X25ld2xpbmUiLCJwcF9vdXRwdXRfc3BhY2VzIiwicHBfb3V0cHV0X2luZGVudCIsImZvcm1hdF9wcF90ZXh0IiwidGV4dCIsImZvcm1hdF9zdHJpbmciLCJicmVha19uZXdfbGluZSIsImFmdGVyIiwiYmVmb3JlIiwicmVhbF9pbmRlbnQiLCJicmVha19saW5lIiwiYnJlYWtfc2FtZV9saW5lIiwicHBfZm9yY2VfYnJlYWtfbGluZSIsInBwX3NraXBfdG9rZW4iLCJmb3JtYXRfcHBfdG9rZW4iLCJ0YWJzIiwiYWRkX3RhYiIsImxzIiwidGFnX25hbWUiLCJtYXJrZXIiLCJicmVha3MiLCJmaXRzIiwib2ZmIiwib2ZmJDAiLCJpbnNlcnRpb25fcG9pbnQiLCJ0YWJzJDAiLCJmaXJzdCIsImZpbmQiLCJ0YWlsIiwiaGVhZCIsInRhYiIsIm9mZiQxIiwiaW5zZXJ0aW9uX3BvaW50JDAiLCJ3aWR0aCQxIiwiYm94X3R5cGUkMCIsInRib3giLCJ0YWdfbmFtZSQwIiwibWFya2VyJDAiLCJhZHZhbmNlX2xlZnQiLCJwZW5kaW5nX2NvdW50Iiwic2l6ZSQwIiwiZW5xdWV1ZV9hZHZhbmNlIiwidG9rIiwiZW5xdWV1ZV9zdHJpbmdfYXMiLCJlbnF1ZXVlX3N0cmluZyIsImluaXRpYWxpemVfc2Nhbl9zdGFjayIsInF1ZXVlX2VsZW0iLCJzZXRfc2l6ZSIsImxlZnRfdG90YWwiLCJzY2FuX3B1c2giLCJlbGVtIiwicHBfb3Blbl9ib3hfZ2VuIiwiYnJfdHkiLCJwcF9vcGVuX3N5c19ib3giLCJwcF9jbG9zZV9ib3giLCJwcF9vcGVuX3N0YWciLCJwcF9jbG9zZV9zdGFnIiwicHBfY2xvc2VfdGFnIiwicHBfcmluaXQiLCJjbGVhcl90YWdfc3RhY2siLCJwcF9mbHVzaF9xdWV1ZSIsInBwX3ByaW50X2FzX3NpemUiLCJwcF9wcmludF9hcyIsImlzaXplIiwicHBfcHJpbnRfc3RyaW5nIiwicHBfcHJpbnRfYm9vbCIsInBwX3ByaW50X2NoYXIiLCJwcF9wcmludF9uZXdsaW5lIiwicHBfcHJpbnRfZmx1c2giLCJwcF9mb3JjZV9uZXdsaW5lIiwicHBfcHJpbnRfY3VzdG9tX2JyZWFrIiwicHBfcHJpbnRfYnJlYWsiLCJwcF9wcmludF9jdXQiLCJkaXNwbGF5X25ld2xpbmUiLCJibGFua19saW5lIiwiZGlzcGxheV9ibGFua3MiLCJkZWZhdWx0X3BwX21hcmtfb3Blbl90YWciLCJkZWZhdWx0X3BwX21hcmtfY2xvc2VfdGFnIiwiZGVmYXVsdF9wcF9wcmludF9vcGVuX3RhZyIsImRlZmF1bHRfcHBfcHJpbnRfY2xvc2VfdGFnIiwicHBfbWFrZV9mb3JtYXR0ZXIiLCJwcF9xdWV1ZSIsInN5c190b2siLCJzY2FuX3N0YWNrIiwicHBfbWFyZ2luIiwibWFrZV9mb3JtYXR0ZXIiLCJvdXRwdXQiLCJmbHVzaCIsInBwZiIsImZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCIsImZvcm1hdHRlcl9vZl9idWZmZXIiLCJwcF9idWZmZXJfc2l6ZSIsInBwX21ha2VfYnVmZmVyIiwic3RkYnVmIiwic3RkX2Zvcm1hdHRlciIsImVycl9mb3JtYXR0ZXIiLCJmbHVzaF9idWZmZXJfZm9ybWF0dGVyIiwicHBfcHJpbnRfbGlzdCIsInBwX3YiLCJvcHQkMCIsInBwX3NlcCIsIm9wdCQxIiwiY29tcHV0ZV90YWciLCJ0YWdfYWNjIiwib3V0cHV0X2Zvcm1hdHRpbmdfbGl0Iiwib3V0cHV0X2FjYyQwIiwiYnR5IiwiYyQwIiwiZiQwIiwicCQ2IiwicCQ3Iiwia2ZwcmludGYkMCIsImZwcmludGYkMCIsImthc3ByaW50ZiIsImFzcHJpbnRmIiwiZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVycyIsInJlZ2lzdGVyX2V4Y2VwdGlvbiIsInRvX2p2Iiwia2V5cyIsImxvd2VyIiwidXBwZXIiLCJsb3dlcl9vcGVuIiwic3RoJDAiLCJ1cHBlcl9vcGVuIiwib2xkX3ZlcnNpb24iLCJuZXdfdmVyc2lvbiIsInVwZ3JhZGVfbmVlZGVkIiwiZXJyb3IkMCIsIm9mX2p2IiwiZXJyb3IkMSIsIm9uX3N1Y2Nlc3MiLCJldiIsIm9uX2Vycm9yIiwiZnV0JDAiLCJzZXQiLCJyZXN1bHRfZnV0IiwidG9fc3RyaW5nJDEiLCJ0b19qdiQwIiwiZ2V0IiwianYiLCJnZXRfYWxsIiwiZ2V0X2FsbF9rZXlzIiwicXVlcnkiLCJxdWVyeSQwIiwicHJpbWFyeV9rZXkiLCJhZHZhbmNlIiwiY29udGludWUkMCIsImtleSQwIiwicHJpbWFyeV9rZXkkMCIsImFkdmFuY2UkMCIsImNvbnRpbnVlJDEiLCJ2YWx1ZSIsImRlbGV0ZSQwIiwidXBkYXRlIiwib3Blbl9jdXJzb3IiLCJkaXJlY3Rpb24iLCJkaXJlY3Rpb24kMCIsImQkMCIsImNyZWF0ZV9pbmRleCIsIkkiLCJrZXlfcGF0aCIsInN0cmluZ19vZl9tb2RlIiwib2JqZWN0X3N0b3JlIiwiUyIsImNyZWF0ZV9vYmplY3Rfc3RvcmUiLCJhdXRvX2luY3JlbWVudCIsIm9wdHMiLCJvcHRzJDAiLCJvcHRpb25zIiwidHJhbnNhY3Rpb24iLCJzdG9yZXMiLCJtb2RlJDAiLCJqdl9vZl9zdG9yZSIsIm9uX3VwZ3JhZGVfbmVlZGVkIiwicmVxIiwib3BlbiIsInZlcnNpb24iLCJnZXRfZmFjdG9yeSIsImdsb2JhbCQwIiwiYXV4IiwiYSQwIiwiaSQyIiwic2h1ZmZsZSIsInJhbmRfaW50IiwiZXF1YWwkMCIsInJlY3Vyc2UiLCJzeW1ib2wkNiIsImlzX25vbmUkMCIsIml0ZXIkMSIsImdldF9leG5fb3IiLCJzeW1ib2wkNyIsIm1hcF9lcnIiLCJnZXRfZXhuIiwiZmxhdHRlbl9sIiwic3ltYm9sJDgiLCJrbXBfcGF0dGVybl9sZW5ndGgiLCJnZXQkMSIsImRpciIsImttcF9jb21waWxlIiwiZmFpbHVyZSIsImttcF9jb21waWxlJDAiLCJrbXBfZmluZCIsInBhdHRlcm4iLCJwYXRfbGVuIiwiZXhwZWN0ZWQiLCJmYWlsX29mZnNldCIsImNvbXBpbGUiLCJzdWIiLCJmaW5kJDAiLCJwYXR0ZXJuJDAiLCJwcmUiLCJjaGVjayIsImxleF9lcnJvciIsImVycm9yX3BvcyIsImNudW0iLCJlbnVtJDAiLCJzdHJpbmcybnVtIiwidXBkYXRlX3BvcyIsImludF9vZl9oZXhjaGFyIiwidXRmOF9vZl9jb2RlIiwidSIsIm1heF91c2VkX2JpdHMiLCJ1dGY4X29mX3N1cnJvZ2F0ZV9wYWlyIiwiaGlnaCIsImxvdyIsImhpZ2gkMCIsImxvdyQwIiwiZXNjYXBpbmdfZXJyb3IiLCJvZmZzIiwiY3MiLCJ1bmVzY2FwZV9zdHJpbmciLCJ1MSIsInUyIiwicmVhZCQwIiwib2NhbWxfbGV4X3JlYWRfcmVjIiwib2NhbWxfbGV4X3N0YXRlIiwib2NhbWxfbGV4X3N0YXRlJDAiLCJvY2FtbF9sZXhfc3RhdGUkMSIsInJlYWRfY29tbWVudCIsInJlYWRfY29tbWVudCQwIiwib2NhbWxfbGV4X3JlYWRfY29tbWVudF9yZWMiLCJjcmVhdGVfZnJvbV9sZXhidWYiLCJlbXNnIiwiZWNoYXIiLCJzY2hhciIsImVsaW5lIiwibG9nMiIsImJpdHMkMCIsIm1heF9qc29uX2ludCIsInN0cmluZ19vZl9mbG9hdF9qc29uIiwiaXNfaW50IiwiaW50X3ZhbHVlIiwidG9rZW5fZXJyb3IiLCJzJDEiLCJzJDIiLCJqc29uX3ZhbHVlIiwidG9rZW5fdmFsdWUiLCJvYmplY3RfdmFsdWVfc3RhcnQiLCJhcnJheV92YWx1ZV9zdGFydCIsInZhcmlhbnRfdmFsdWVfc3RhcnQiLCJ0dXBsZV92YWx1ZV9zdGFydCIsImFycmF5X3ZhbHVlc19zdGFydCIsInRvayQwIiwiYXJyYXlfdmFsdWVzIiwib2JqZWN0X3ZhbHVlc19zdGFydCIsImNvbG9uX3ZhbHVlIiwib2JqZWN0X3ZhbHVlcyIsImtleV9jb2xvbl92YWx1ZSIsInYxIiwidjIiLCJ0dXBsZV92YWx1ZXMiLCJ2YXJpYW50X2VuZCIsImRlY29kZSIsImVyciQwIiwibmliYmxlX3RvX2hleCIsImFkZF9oZXhfYnl0ZSIsImVzY2FwZSIsInRvX2pzb25fc3RyaW5nIiwiYWRkX2NoYXIkMCIsImFkZF9zdHJpbmckMCIsImFkZF9xdW90ZV9zdHJpbmciLCJwcF9saXN0IiwicHB4Iiwib3V0IiwiZm9ybWF0IiwianNvbiIsImZvcm1hdF9maWVsZCIsImpzb24kMCIsInMkMyIsInByZXR0eV9wcmludCIsInByZXR0eV9wcmludF90b19zdHJpbmciLCJwcmV0dHlfcHJpbnRfdG9fY2hhbm5lbCIsImVycm9yJDIiLCJ0b19hc3NvYyIsIm51bGwkMSIsInRva2VuX3RvX3N0cmluZyIsInJlYWRfanNvbiIsInJlYWRfanNvbl9lcnJvcl9pbmZvIiwiZXJyX2luZm8iLCJqc29uX29mX3N0cmluZ19lcnJvcl9pbmZvIiwianNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8iLCJpbmMiLCJqc29uX29mX2ZpbGVfZXJyb3JfaW5mbyIsImZpbGVuYW1lIiwianNvbl9vZl9sZXhidWZfZXJyb3JfaW5mb19jb21wIiwic3RyZWFtIiwicmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIiwiZmluIiwic3RyZWFtX2Zyb21fc3RyaW5nX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9jaGFubmVsX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9maWxlX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9sZXhidWZfZXJyb3JfaW5mbyIsImpzb25fdG9fY2hhbm5lbF9mbXQiLCJlb2wiLCJpbmNyIiwicHNlcCIsImFkZF9pbnQiLCJhZGRfZmxvYXQiLCJwc2VwJDAiLCJsZHIkMSIsImpzb25fbGlzdCIsImxkciQyIiwibGRyIiwianNvbl9hc3NvYyIsImxkciQwIiwibmV3c2VwIiwicGFpciIsImpzb25fdG9fY2hhbm5lbCIsImpzb25fdG9fZmlsZV9leG4iLCJqc29uX3RvX2J1ZmZlciIsImpzb25fdG9fc3RyaW5nIiwianNvbl9lcnJvciIsImVycm9yX3RvX3N0cmluZyIsImVycm9yX2luZm8iLCJmbmFtZSIsImxudW0iLCJsbnVtJDAiLCJsbnVtJDEiLCJmbmFtZSQwIiwibG9jIiwiYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMiLCJmcm9tX3N0cmluZyIsInRvX3N0YW5kYXJkIiwibm9kZSIsInYkMSIsInRwbCIsImpvcHQiLCJ2JDAiLCJzdGQiLCJsZXhfc3RyaW5nIiwibGV4X251bWJlciIsImxleF9pbnRlZ2VyIiwibGV4X2xhcmdlaW50IiwibGV4X3ZhcmlhbnQiLCJsZXhfdHVwbGUiLCJjb21tZW50X2NoZWNrIiwibnVtYmVyX3RvX3N0cmluZyIsImxhcmdlaW50IiwiaW50ZWdlciIsIm51bGwkMiIsInN0cmluZyQwIiwiYm9vbCIsImFzc29jIiwibGlzdCIsInR1cGxlIiwibnVtYmVyIiwiYXJyYXlfc3RhcnQiLCJhcnJheV9lbmQiLCJvYmplY3Rfc3RhcnQiLCJvYmplY3RfZW5kIiwidHVwbGVfc3RhcnQiLCJ0dXBsZV9lbmQiLCJ2YXJpYW50X3N0YXJ0IiwibGV4X3N0cmluZyQwIiwibGV4X251bWJlciQwIiwibGV4X2ludGVnZXIkMCIsImxleF9sYXJnZWludCQwIiwibGV4X3ZhcmlhbnQkMCIsImxleF90dXBsZSQwIiwiY29tbWVudF9jaGVjayQwIiwibnVtYmVyX3RvX3N0cmluZyQwIiwibGFyZ2VpbnQkMCIsImludGVnZXIkMCIsIm51bGwkMyIsInN0cmluZyQxIiwiYm9vbCQwIiwiYXNzb2MkMCIsImxpc3QkMCIsInR1cGxlJDAiLCJ2YXJpYW50JDAiLCJudW1iZXIkMCIsImFycmF5X3N0YXJ0JDAiLCJhcnJheV9lbmQkMCIsIm9iamVjdF9zdGFydCQwIiwib2JqZWN0X2VuZCQwIiwidHVwbGVfc3RhcnQkMCIsInR1cGxlX2VuZCQwIiwidmFyaWFudF9zdGFydCQwIiwidmFyaWFudF9lbmQkMCIsIm5hbWUkMCIsImZyb21fc3RyaW5nJDAiLCJ0b19zdHJpbmckMyIsImxleF9zdHJpbmckMSIsImxleF9udW1iZXIkMSIsImxleF9pbnRlZ2VyJDEiLCJsZXhfbGFyZ2VpbnQkMSIsImxleF92YXJpYW50JDEiLCJsZXhfdHVwbGUkMSIsImNvbW1lbnRfY2hlY2skMSIsIm51bWJlcl90b19zdHJpbmckMSIsImxhcmdlaW50JDEiLCJpbnRlZ2VyJDEiLCJudWxsJDQiLCJzdHJpbmckMiIsImJvb2wkMSIsImFzc29jJDEiLCJsaXN0JDEiLCJ0dXBsZSQxIiwidmFyaWFudCQxIiwibnVtYmVyJDEiLCJhcnJheV9zdGFydCQxIiwiYXJyYXlfZW5kJDEiLCJvYmplY3Rfc3RhcnQkMSIsIm9iamVjdF9lbmQkMSIsInR1cGxlX3N0YXJ0JDEiLCJ0dXBsZV9lbmQkMSIsInZhcmlhbnRfc3RhcnQkMSIsInZhcmlhbnRfZW5kJDEiLCJuYW1lJDEiLCJ0b19qc3RyJDEiLCJvZl9qc3RyJDEiLCJqc3RyIiwicmFuZG9tX3N0YXRlIiwibmV3X3V1aWRfdjQiLCJ5b2pzb25fb2ZfYm9vbCIsInlvanNvbl9vZl9zdHJpbmciLCJ5b2pzb25fb2ZfaW50IiwieW9qc29uX29mX29wdGlvbiIsInlvanNvbl9vZl9hIiwieW9qc29uX29mX2xpc3QiLCJsc3QiLCJyZWNvcmRfY2hlY2tfZXh0cmFfZmllbGRzIiwib2ZfeW9qc29uX2Vycm9yIiwid2hhdCIsInlvanNvbiIsImJvb2xfb2ZfeW9qc29uIiwic3RyaW5nX29mX3lvanNvbiIsImludF9vZl95b2pzb24iLCJvcHRpb25fb2ZfeW9qc29uIiwiYV9vZl95b2pzb24iLCJsaXN0X29mX3lvanNvbiIsInJldl9sc3QiLCJzdGFnX25vX2FyZ3MiLCJuZXN0ZWRfbGlzdF9pbnZhbGlkX3N1bSIsImVtcHR5X2xpc3RfaW52YWxpZF9zdW0iLCJ1bmV4cGVjdGVkX3N0YWciLCJyZWNvcmRfc3VwZXJmbHVvdXNfZmllbGRzIiwicmV2X2ZsZF9uYW1lcyIsImZsZF9uYW1lc19zdHIiLCJyZWNvcmRfZHVwbGljYXRlX2ZpZWxkcyIsInJlY29yZF9leHRyYV9maWVsZHMiLCJyZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIiwiZmllbGRzJDAiLCJyZWNvcmRfdW5kZWZpbmVkX2VsZW1lbnRzIiwidW5kZWZpbmVkJDAiLCJyZWNvcmRfbGlzdF9pbnN0ZWFkX2F0b20iLCJzeW1ib2wkOSIsImpzdHJfb2ZfbWV0aG9kIiwib3JkZXJfb2ZfeW9qc29uIiwieW9qc29uX29mX29yZGVyIiwic29ydF9vZl95b2pzb24iLCJ5b2pzb25fb2Zfc29ydCIsImltYWdlX2JsdXJfaGFzaF9vZl95b2pzb24iLCJ5b2pzb25fb2ZfaW1hZ2VfYmx1cl9oYXNoIiwiaW1hZ2VfYmx1cl9oYXNoZXNfb2ZfeW9qc29uIiwiZmllbGRfeW9qc29ucyIsInByaW1hcnlfZmllbGQiLCJkdXBsaWNhdGVzIiwiZXh0cmEiLCJmaWVsZF95b2pzb24iLCJmaWVsZF9uYW1lIiwiZnZhbHVlIiwicHJpbWFyeV92YWx1ZSIsInlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2hlcyIsInZfcHJpbWFyeSIsImJuZHMiLCJibmQiLCJibmRzJDAiLCJ0eXBlX29mX3lvanNvbiIsInlvanNvbl9vZl90eXBlIiwiZmllbGRfb2ZfeW9qc29uIiwieW9qc29uX29mX2ZpZWxkIiwidHlwZV9zdHJfb2ZfeW9qc29uIiwieW9qc29uX29mX3R5cGVfc3RyIiwidHMiLCJ0X29mX3lvanNvbiIsIm5hbWVfZmllbGQiLCJzb3J0X25hbWVfZmllbGQiLCJpZF9maWVsZCIsInBhdGhfZmllbGQiLCJhbGJ1bV9pZF9maWVsZCIsInBhcmVudF9pZF9maWVsZCIsInNlcnZlcl9pZF9maWVsZCIsImltYWdlX2JsdXJfaGFzaGVzX2ZpZWxkIiwidHlwZV9maWVsZCIsImNvbGxlY3Rpb25fdHlwZV9maWVsZCIsImZ2YWx1ZSQwIiwiZnZhbHVlJDEiLCJmdmFsdWUkMiIsImZ2YWx1ZSQzIiwiZnZhbHVlJDQiLCJmdmFsdWUkNSIsImZ2YWx1ZSQ2IiwiZnZhbHVlJDciLCJmdmFsdWUkOCIsInNvcnRfbmFtZV92YWx1ZSIsInBhdGhfdmFsdWUiLCJhbGJ1bV9pZF92YWx1ZSIsInBhcmVudF9pZF92YWx1ZSIsImNvbGxlY3Rpb25fdHlwZV92YWx1ZSIsInR5cGVfdmFsdWUiLCJpbWFnZV9ibHVyX2hhc2hlc192YWx1ZSIsInNlcnZlcl9pZF92YWx1ZSIsImlkX3ZhbHVlIiwibmFtZV92YWx1ZSIsInlvanNvbl9vZl90Iiwidl9jb2xsZWN0aW9uX3R5cGUiLCJ2X3R5cGUiLCJ2X2ltYWdlX2JsdXJfaGFzaGVzIiwidl9zZXJ2ZXJfaWQiLCJ2X3BhcmVudF9pZCIsInZfYWxidW1faWQiLCJ2X3BhdGgiLCJ2X2lkIiwidl9zb3J0X25hbWUiLCJ2X25hbWUiLCJhcmckOCIsImJuZCQzIiwiYm5kcyQxIiwiYXJnJDAiLCJibmRzJDIiLCJhcmckMSIsImJuZHMkMyIsImFyZyQyIiwiYm5kcyQ0IiwiYXJnJDMiLCJibmQkMCIsImJuZHMkNSIsImFyZyQ0IiwiYm5kJDEiLCJibmRzJDYiLCJhcmckNSIsImJuZHMkNyIsInYkMiIsImFyZyQ2IiwiYm5kJDIiLCJibmRzJDgiLCJhcmckNyIsImJuZHMkOSIsInBhcmFtc19vZl95b2pzb24iLCJpZHNfZmllbGQiLCJ1c2VyX2lkX2ZpZWxkIiwiZmllbGRzX2ZpZWxkIiwiaW5jbHVkZV9pdGVtX3R5cGVzX2ZpZWxkIiwic3RhcnRfaW5kZXhfZmllbGQiLCJsaW1pdF9maWVsZCIsInNvcnRfb3JkZXJfZmllbGQiLCJzb3J0X2J5X2ZpZWxkIiwicmVjdXJzaXZlX2ZpZWxkIiwiZW5hYmxlX3VzZXJfZGF0YV9maWVsZCIsImVuYWJsZV9pbWFnZXNfZmllbGQiLCJmdmFsdWUkOSIsImZ2YWx1ZSQxMCIsImlkc192YWx1ZSIsInN0YXJ0X2luZGV4X3ZhbHVlIiwibGltaXRfdmFsdWUiLCJzb3J0X29yZGVyX3ZhbHVlIiwiZW5hYmxlX2ltYWdlc192YWx1ZSIsImVuYWJsZV91c2VyX2RhdGFfdmFsdWUiLCJyZWN1cnNpdmVfdmFsdWUiLCJzb3J0X2J5X3ZhbHVlIiwiaW5jbHVkZV9pdGVtX3R5cGVzX3ZhbHVlIiwiZmllbGRzX3ZhbHVlIiwidXNlcl9pZF92YWx1ZSIsInlvanNvbl9vZl9wYXJhbXMiLCJ2X2VuYWJsZV9pbWFnZXMiLCJ2X2VuYWJsZV91c2VyX2RhdGEiLCJ2X3JlY3Vyc2l2ZSIsInZfc29ydF9ieSIsInZfc29ydF9vcmRlciIsInZfbGltaXQiLCJ2X3N0YXJ0X2luZGV4Iiwidl9pbmNsdWRlX2l0ZW1fdHlwZXMiLCJ2X2ZpZWxkcyIsInZfdXNlcl9pZCIsInZfaWRzIiwiYXJnJDkiLCJibmRzJDEwIiwiYXJnJDEwIiwicmVzcG9uc2Vfb2ZfeW9qc29uIiwiaXRlbXNfZmllbGQiLCJ0b3RhbF9yZWNvcmRfY291bnRfZmllbGQiLCJ0b3RhbF9yZWNvcmRfY291bnRfdmFsdWUiLCJpdGVtc192YWx1ZSIsInlvanNvbl9vZl9yZXNwb25zZSIsInZfdG90YWxfcmVjb3JkX2NvdW50Iiwidl9pdGVtcyIsIm1ldGhvZCIsImVuZHBvaW50IiwicGFyYW1zX29mX3lvanNvbiQwIiwiaW5jbHVkZV9leHRlcm5hbF9jb250ZW50X2ZpZWxkIiwiaW5jbHVkZV9leHRlcm5hbF9jb250ZW50X3ZhbHVlIiwieW9qc29uX29mX3BhcmFtcyQwIiwidl9pbmNsdWRlX2V4dGVybmFsX2NvbnRlbnQiLCJyZXNwb25zZV9vZl95b2pzb24kMCIsInlvanNvbl9vZl9yZXNwb25zZSQwIiwiZW5kcG9pbnQkMCIsInBwIiwidmlydHVhbF9mb2xkZXJfb2ZfeW9qc29uIiwibG9jYXRpb25zX2ZpZWxkIiwiaXRlbV9pZF9maWVsZCIsIml0ZW1faWRfdmFsdWUiLCJsb2NhdGlvbnNfdmFsdWUiLCJ5b2pzb25fb2ZfdmlydHVhbF9mb2xkZXIiLCJ2X2l0ZW1faWQiLCJ2X2xvY2F0aW9ucyIsImF1dGhvcml6YXRpb24iLCJ0b2tlbiQwIiwicmVxdWVzdCQxIiwiYmFzZV91cmwiLCJoZWFkZXJzIiwiUSIsInBhdGhfcGFyYW1zIiwidXJpIiwiYXV0aG9yaXphdGlvbiQwIiwiaGVhZGVycyQwIiwiYm9keSIsInVybCQwIiwicGFyYW1zJDAiLCJ1cmlfd2l0aF9wYXJhbXMiLCJ1cmwkMSIsImluaXQkMCIsIm1ldGhvZCQwIiwiZ2V0X3Rva2VuIiwidGFnX29mIiwiZnV0dXJlcyIsImxpc3RlbmVycyIsIndvcmtlciIsIm9uX21lc3NhZ2UiLCJtZXNzYWdlIiwidXVpZCIsImRpc3BhdGNoX2V2ZW50Iiwib2Zfc29ydCIsImFwcGx5IiwidF90b19qdiIsImVuY29kZXIiLCJqdl90b190IiwiZGVjb2RlciIsInRfb2ZfeW9qc29uJDAiLCJpdGVtX2ZpZWxkIiwiaXRlbV92YWx1ZSIsInlvanNvbl9vZl90JDAiLCJ2X2l0ZW0iLCJ0b19qdiQxIiwib2ZfanYkMCIsInRvX2p2JDIiLCJvZl9qdiQxIiwiZ2V0X2tleSIsInNvcnRzX29mX3lvanNvbiIsImRhdGVfYWRkZWRfZmllbGQiLCJ2aWV3c19maWVsZCIsInZpZXdzX3ZhbHVlIiwiZGF0ZV9hZGRlZF92YWx1ZSIsInlvanNvbl9vZl9zb3J0cyIsInZfdmlld3MiLCJ2X2RhdGVfYWRkZWQiLCJ0X29mX3lvanNvbiQxIiwic29ydHNfZmllbGQiLCJzb3J0c192YWx1ZSIsInlvanNvbl9vZl90JDEiLCJ2X3NvcnRzIiwidG9fanYkMyIsInZpZXdzIiwic29ydF9uYW1lIiwiaWQkMCIsInNvcnRfbmFtZSQwIiwidmlld3MkMCIsIm9mX2p2JDIiLCJwYXRoJDAiLCJ0b19qdiQ0Iiwib2ZfanYkMyIsInRvX2p2JDUiLCJvZl9qdiQ0IiwidG9fanYkNiIsIm9mX2p2JDUiLCJ0eXBlIiwicGF0aCQzIiwidG9fanYkNyIsIm9mX2p2JDYiLCJjb2xsZWN0aW9uX3R5cGUiLCJwYXRoJDQiLCJ0b19qdiQ4Iiwib2ZfanYkNyIsImdldF9rZXkkMCIsInRvX2p2JDkiLCJvZl9qdiQ4IiwidG9fanYkMTAiLCJvZl9qdiQ5IiwiZ2V0X2tleSQxIiwiY2h1bmtfc2l6ZSIsImZldGNoX3RvdGFsX2l0ZW1fY291bnQiLCJzb3VyY2UiLCJnZXRfZGJfaW5mb3MiLCJpZGIiLCJzZXRfaW5mb3MiLCJpbmZvcyIsInRyYW5zYWN0aW9uJDAiLCJzdG9yZSIsImxhc3Rfa2V5IiwiY3Vyc29yIiwiaXRlbSIsImlzX2RiX2NvbnNpc3RlbnQiLCJsYXN0X3NvdXJjZV9pdGVtX2tleSIsImRiX3N5bmNfaW5mb3MiLCJjaGVja19zdGF0dXMiLCJkYl9pbmZvcyIsInRvdGFsX2l0ZW1fY291bnQiLCJmaXJzdF91bmZldGNoZWRfa2V5IiwiaXRlbSQwIiwidXBkYXRlX3ZpZXdzIiwic19pdGVtcyIsImRlZHVjZV92aXJ0dWFsX2ZvbGRlcnNfZnJvbV92aSIsInBhcmVudF9pZHNfb2Zfdmlld19jaGlsZHJlbiIsInBhcmVudF9pZCIsInBpZCIsInBhdGhzX29mX3BhcmVudHMiLCJwYXJlbnRzIiwicGF0aHMiLCJ2aWV3c19vZl9wYXRoIiwidmZvbGRlcnMiLCJsb2NhdGlvbnMiLCJ2aWV3X2lkIiwic3luYyIsInJlcG9ydCIsIm1ha2VfcGxhY2Vob2xkZXJzIiwibGFzdCIsImZldGNoX21pc3NpbmdfaXRlbXMiLCJmZXRjaF9xdWV1ZSIsImVucXVldWUiLCJzdGFydF9pbmRleCIsInRvZG8iLCJzdGFydF9pbmRleCQwIiwidG9kbyQwIiwidG9kbyQxIiwic3RhcnRfaW5kZXgkMSIsInRvdGFsX3F1ZXJpZXMiLCJydW5fcXVldWUiLCJ0aHJlYWRzIiwidGFrZV9uIiwiZWx0IiwiaXRlbXMiLCJpZGJfcHV0Iiwic19saXN0IiwiaW5kZXgkMCIsInJlcXMiLCJmaXJzdF9taXNzaW5nX2tleSIsImxhc3Rfc291cmNlX2l0ZW1fa2V5JDAiLCJmaXJzdF91bmZldGNoZWRfa2V5JDAiLCJjaGVja19hbmRfc3luYyIsImluaXRpYWwiLCJyZXBvcnQkMCIsInN5bmNfcHJvZ3Jlc3MiLCJvbl91cGdyYWRlX25lZWRlZCQwIiwibmV3X3ZlcnNpb24kMCIsIm9sZF92ZXJzaW9uJDAiLCJkYiIsInZpcnR1YWxfZm9sZGVycyIsImluZGV4X2RhdGVfYWRkZWQiLCJ3aXRoX2lkYiIsImRiciIsIm1hcF9lcnJvciIsImFzX2Z1dCIsImZ1dF9vZl9hcnJheSIsImZ1dCIsInByb21pc2UiLCJhcnIiLCJhbGwkMCIsInRvX2FycmF5JDAiLCJjaGVja19kYiIsInNvdXJjZSQwIiwic2VydmVyX2lkIiwic2V0X2lkYiIsInJlYWRfb25seV9zdG9yZSIsInZpZXdfbWVtbyIsImxhc3RfdmlldyIsImdldF92aWV3X2tleXMiLCJmaWx0ZXJzIiwic3JjX3ZpZXdzIiwiaGFzaCQwIiwic3ViJDAiLCJrZXlzJDAiLCJhbGxfa2V5cyIsInNyY192aWV3cyQwIiwib25fcXVlcnkiLCJpdGVtcyQwIiwic2VydmVyX2lkJDAiLCJyZXF1ZXN0IiwiaXRlbV9jb3VudCIsIm9yZGVyIiwiaW5kZXhlcyIsImluZGV4JDEiLCJyZXN1bHRzIl0sInNvdXJjZXMiOlsiL2J1aWx0aW4vK2FycmF5LmpzIiwiL2J1aWx0aW4vK21sQnl0ZXMuanMiLCIvYnVpbHRpbi8rc3lzLmpzIiwiL2J1aWx0aW4vK2JhY2t0cmFjZS5qcyIsIi9idWlsdGluLytzdGRsaWIuanMiLCIvYnVpbHRpbi8ranNsaWIuanMiLCIvYnVpbHRpbi8rZmFpbC5qcyIsIi9idWlsdGluLytpZWVlXzc1NC5qcyIsIi9idWlsdGluLytvYmouanMiLCIvYnVpbHRpbi8raW50NjQuanMiLCIvYnVpbHRpbi8rYmlnYXJyYXkuanMiLCIvYnVpbHRpbi8raW50cy5qcyIsIi9idWlsdGluLytoYXNoLmpzIiwiL2J1aWx0aW4vK21hcnNoYWwuanMiLCIvYnVpbHRpbi8rY29tcGFyZS5qcyIsIi9idWlsdGluLytmb3JtYXQuanMiLCIvYnVpbHRpbi8rZnNfbm9kZS5qcyIsIi9idWlsdGluLytmcy5qcyIsIi9idWlsdGluLyt1bml4LmpzIiwiL2J1aWx0aW4vK2ZzX2Zha2UuanMiLCIvYnVpbHRpbi8rbGV4aW5nLmpzIiwiL2J1aWx0aW4vK21kNS5qcyIsIi9idWlsdGluLytpby5qcyIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2xleGluZy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3ByaW50ZXhjLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L2NvbXBsaWFudF9sZXh4ZXIubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RhdGFfc291cmNlL2plbGx5ZmluX2FwaS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvc3RvcmVzLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYi9zeW5jLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FtbGludGVybmFsRm9ybWF0QmFzaWNzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FtbGludGVybmFsQXRvbWljLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc3RkbGliLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcmFuZG9tLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0ludC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL29iai5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbExhenkubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9vcHRpb24ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9yZXN1bHQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDQ2hhci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NoYXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9saXN0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvaW50Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvYnl0ZXMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdHJpbmcubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9hcnJheS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3NldC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0YWNrLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcXVldWUubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdHJlYW0ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9idWZmZXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxGb3JtYXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9wcmludGYubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9wcHhfeW9qc29uX2NvbnZfbGliL3lvanNvbl9jb252X2Vycm9yLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvZnVuLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvZGlnZXN0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvaGFzaHRibC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2Zvcm1hdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbGxiYWNrLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNfb2Zfb2NhbWwtY29tcGlsZXIvcnVudGltZS9qc29vX3J1bnRpbWUubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2JycmVyL2luZGV4ZWRfZGIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDQXJyYXkubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDTGlzdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NPcHRpb24ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDUmFuZG9tLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1Jlc3VsdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NTZXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDU3RyaW5nLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L2xleHhlcl91dGlscy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9lcnJvcl9pbmZvLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L2pzb25fZmxvYXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvcGFyc2VyX3Rvb2xzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3BhcnNlci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC91dGlscy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9wcmV0dHkubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvcHJvY2Vzcy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC90b2tlbl91dGlscy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9yZWFkZXJfc3RyaW5nX2ZpbGUubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvd3JpdGVyX2ZpbGUubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvd3JpdGVyX3N0cmluZy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC95b2pzb24ubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N0ZC9zdGQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9wcHhfeW9qc29uX2NvbnZfbGliL3lvanNvbl9jb252Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvcHB4X3lvanNvbl9jb252X2xpYi9wcHhfeW9qc29uX2NvbnZfbGliLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYXRhX3NvdXJjZS9qZWxseWZpbi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvd29ya2VyX2FwaS93b3JrZXJfYXBpLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYi92aWV3Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYi9kYl93b3JrZXJfYXBpLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYi9kYi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vZGJfd29ya2VyL2RiX3dvcmtlci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0ZF9leGl0Lm1sIl0sIm1hcHBpbmdzIjoiOztBLEM7O0c7OztRO1M7OztHO0k7STtJO0c7RTs7OztHQXFEQSxTQUFTQSxnQkFBZ0JDLElBQUlDLElBQUlDLElBQUlDLElBQUlDO0lBQ3ZDLEdBQUlELE1BQU1GO0tBQUksSUFDRCxJQUFGSSxPQUFPQSxLQUFLRCxLQUFLQyxLQUFLSCxHQUFHQyxLQUFLRSxLQUFLTCxHQUFHQyxLQUFLSTs7S0FDL0MsSUFDTSxJQUFGQSxJQUFJRCxLQUFLQyxRQUFRQSxLQUFLSCxHQUFHQyxLQUFLRSxLQUFLTCxHQUFHQyxLQUFLSTtJQUV0RDtHQUNGO0dDWUEsU0FBU0MseUJBQTBCQyxHQUFHQyxHQUFHSjtJQUNqQyxJQUFGSyxJQUFJQztJQUNSLEdBQUlGLFVBQVVKLGVBQWVBLE9BQU9HLFVBQVUsT0FBT0UsUUFBU0UsTUFBTUo7SUFDOUQsSUFBRks7SUFDSixVQUFXUixLQUFLSSxXQUFVSjtLQUN4QlEsS0FBS0gsUUFBU0UsTUFBTUosUUFBUUMsR0FBRUEsSUFBSUssU0FBU1Q7SUFDN0MsT0FBT1E7R0FDVDtHQXFYQSxTQUFTRSw0QkFBNkJGO0lBRXBDLElBQUlMLFFBQVFRLFdBQVdILE1BQ25CSSxJQUFJSixLQUFLSyxJQUFJRCxVQUFVUjtJQUMzQixNQUFPQSxJQUFJUyxHQUFHVCxLQUFLRCxFQUFFQyxLQUFLUSxhQUFhUjtJQUN2QyxJQUFLUyxJQUFJTCxLQUFLSixJQUFJUyxHQUFHVCxLQUFLRCxFQUFFQztJQUM1QkksTUFBTUw7SUFDTks7SUFDQSxPQUFPTDtHQUNUO0dBaUpBLFNBQVNXLGdCQUFnQkMsSUFBSWxCLElBQUltQixJQUFJakIsSUFBSUM7SUFDdkMsR0FBSUEsVUFBVTtJQUNkLEdBQUtELFlBQ0FDLE9BQU9nQixRQUFTQSxhQUEyQmhCLE9BQU9nQixhQUFlO0tBQ3BFQTtNQUFRRDtTQUNOYix5QkFBeUJhLE1BQU1sQixJQUFJRztTQUNsQ0gsV0FBV2tCLGVBQWVmLE1BQUtlLE9BQUtBLFlBQVlsQixJQUFJRztLQUN2RGdCLE9BQVFBLGVBQWVBOztZQUNkQSxhQUEyQmpCLE1BQU1pQixZQUFhO0tBQ3ZEQTtNQUFTRDtTQUNQYix5QkFBeUJhLE1BQU1sQixJQUFJRztTQUNsQ0gsV0FBV2tCLGVBQWVmLE1BQUtlLE9BQUtBLFlBQVlsQixJQUFJRztLQUN2RGdCLE9BQVFBLGVBQWVBOztRQUNsQjtLQUNMLEdBQUlBLFdBQXVCTiw0QkFBNEJNO0tBQ3ZELElBQUlDLEtBQUtGLE1BQU1HLEtBQUtGO0tBQ3BCLEdBQUlEO01BQXVCLEdBQ3JCaEIsTUFBTUY7T0FBSSxJQUNELElBQUZPLE9BQU9BLElBQUlKLEtBQUtJLEtBQUtjLEdBQUluQixLQUFLSyxLQUFLYSxHQUFJcEIsS0FBS087O09BQ2hELElBQ00sSUFBRkEsSUFBSUosU0FBU0ksUUFBUUEsS0FBS2MsR0FBSW5CLEtBQUtLLEtBQUthLEdBQUlwQixLQUFLTztTQUV2RDtNQUNDLElBQUZTLElBQUlKLFNBQVVULEtBQUtpQixZQUFZcEI7TUFDbkMsSUFBVyxJQUFGTyxPQUFPQSxJQUFJUyxHQUFHVCxLQUFLYyxHQUFJbkIsS0FBS0ssS0FBS2EsY0FBY3BCLEtBQUtPO01BQzdELE1BQU9BLElBQUlKLEtBQUtJLEtBQUtjLEdBQUluQixLQUFLSzs7O0lBR2xDO0dBQ0Y7R0Exa0JBLFNBQVNlLGdCQUFnQkMsR0FBR1o7SUFDMUIsR0FBR1ksUUFBUTtJQUNYLEdBQUlaLFVBQVUsT0FBUUEsU0FBU1k7SUFDL0IsSUFBSUMsUUFBUVI7SUFDWixPQUFRO0tBQ04sR0FBSU8sT0FBT0MsS0FBS2I7S0FDaEJZO0tBQ0EsR0FBSUEsUUFBUSxPQUFPQztLQUNuQmIsS0FBS0E7S0FDTEs7S0FDQSxHQUFJQSxRQUNGTDs7R0FLTjtHQXlYQSxTQUFTYyw2QkFBOEJkO0lBRXJDLEdBQUlBO0tBQ0ZBLE9BQU9XLGdCQUFnQlgsTUFBTUE7O0tBRTdCQSxNQUFNTix5QkFBMEJNLFFBQVFBO0lBQzFDQTtHQUNGO0dBN1JBLFNBQVNlLGNBQWVmO0lBRXRCLEdBQUlBLGNBQWU7S0FFakIsSUFBVyxJQUFGSixPQUFPQSxJQUFJSSxVQUFVSixLQUFLLEdBQUlJLGFBQWFKLFVBQVU7S0FDOUQ7OztLQUVBLFNBQVEsb0JBQW9CSTtHQUNoQztHQXZEQSxTQUFTZ0IsbUJBQW1CaEI7SUFDMUIsUUFBU0ksUUFBUWEsUUFBUUMsR0FBR1QsSUFBSUMsSUFBSVMsR0FBR3ZCLE9BQU9TLElBQUlMLFVBQVVKLElBQUlTLEdBQUdULElBQUs7S0FDdEVhLEtBQUtULGFBQWFKO0tBQ2xCLEdBQUlhLFVBQVc7TUFDYixJQUFXLElBQUZoQixJQUFJRyxPQUFRSCxJQUFJWSxNQUFPSSxLQUFLVCxhQUFhUCxZQUFZQSxLQUFJO01BQ2xFLEdBQUlBLElBQUlHLFFBQVM7T0FBRXFCO09BQWdCYixLQUFLYTtPQUFHQTtPQUFRYixLQUFLSixRQUFRSixHQUFHSDs7O09BQzlEd0IsS0FBS2pCLFFBQVFKLEdBQUdIO01BQ3JCLEdBQUlBLEtBQUtZLEdBQUc7TUFDWlQsSUFBSUg7O0tBRU4wQjtLQUNBLEtBQU92QixJQUFJUyxPQUFTSyxLQUFLVixhQUFhSixtQkFBb0I7TUFDeERzQixJQUFJUixNQUFNRDtNQUNWLEdBQUlBLFVBQVc7T0FDYlUsSUFBSUQ7T0FDSixHQUFJQyxVQUFVQTs7VUFDVDtPQUNMQTtPQUNBLEtBQU92QixJQUFJUyxPQUFTSyxLQUFLVixhQUFhSixtQkFBb0I7UUFDeERzQixJQUFJUixNQUFNUTtRQUNWLEdBQUlULFVBQVc7U0FDYlUsSUFBSUQ7U0FDSixHQUFLQyxhQUFnQkEsZUFBaUJBLFlBQWNBOztZQUMvQztTQUNMQTtTQUNBLEtBQU92QixJQUFJUyxPQUFTSyxLQUFLVixhQUFhSixzQkFDakNhLFVBQVk7VUFDZlUsSUFBSVQsa0JBQWtCUTtVQUN0QixHQUFJQyxlQUFlQSxjQUFjQTs7Ozs7O0tBTTNDLEdBQUlBLE1BQU87TUFDVHZCLEtBQUt1QjtNQUNMRjs7YUFDU0U7TUFDVEYsS0FBS25CLDhCQUE4QnFCLG9CQUFvQkE7O01BRXZERixLQUFLbkIsb0JBQW9CcUI7S0FDM0IsR0FBSUYsZ0JBQWlCLENBQUNBLGdCQUFnQmIsS0FBS2EsR0FBR0E7O0lBRWhELE9BQU9iLElBQUVhO0dBQ1g7R0EwUEEsU0FBU0csUUFBU0MsS0FBS0MsVUFBVUM7SUFDL0JDLFNBQU9IO0lBQUtHLFNBQU9GO0lBQVVFLFNBQU9EO0dBQ3RDO0dBQ0FIOztLQUNFLE9BQVFJOztRQUVOLE9BQU9BO2dCQUVQViw2QkFBNkJVOztRQUU3QixHQUFJVCxjQUFjUyxRQUFTLENBQ3pCQSxZQUNBLE9BQU9BLFNBRVRBOztRQUVBLE9BQU9BOztJQWJrQjtHQWdCN0JKOztLQUNRLElBQUZQLElBQUlXO0tBQ1IsR0FBR0EsYUFBYSxPQUFPWDtLQUN2QixPQUFPRyxtQkFBbUJIO0lBSEE7R0FLNUJPOztLQUNjLElBQVJLLFVBQVVELGNBQWNBLGlCQUFpQkE7S0FDN0MsV0FBV0osUUFBUUksUUFBT0MsU0FBUUQ7SUFGVjtHQTBTMUIsU0FBU0Usc0JBQXNCMUIsR0FBSyxXQUFXb0IsV0FBVXBCLEdBQUVBLFVBQVc7R0FyQnRFLFNBQVMyQix1QkFBdUJDLEdBQUssT0FBT0EsRUFBRTtHQVY5QyxTQUFTQyxxQkFBcUI3QjtJQUM1QixPQUFPMEIsc0JBQXNCQyx1QkFBdUIzQjtHQUN0RDtHQWpFQSxTQUFTOEIsaUJBQWlCbkMsR0FBRVMsR0FBRWMsR0FBRWEsR0FBRUM7SUFDaEMxQixnQkFBZ0J1QixxQkFBcUJsQyxJQUFHUyxHQUFFYyxHQUFFYSxHQUFFQztJQUM5QztHQUNGO0dDcGhCQSxTQUFTQyxnQkFBZ0JyQjtJQUNYLElBQVJzQixVQUFVQztJQUVkLEdBQUdELFdBQ0dBLGVBQ0FBLFlBQVl0QixNQUFNd0I7S0FDdEIsT0FBT0YsWUFBWXRCO0lBQ3JCLEdBQUd1Qiw4QkFDR0EsMkJBQTJCdkI7S0FDL0IsT0FBT3VCLDJCQUEyQnZCO0dBQ3RDO0dDcEcrQixJQUEzQnlCO0dBRUosQ0FBQTtNQUNRLElBQUZ4QixJQUFJb0I7TUFDUixHQUFHcEIsTUFBTXVCLFVBQVU7T0FDWCxJQUFGL0IsSUFBSVE7T0FDUixJQUFVLElBQUZqQixPQUFPQSxJQUFJUyxVQUFVVDtRQUFJLEdBQzVCUyxFQUFFVCxVQUFXO1NBQUV5QztTQUFnQzs7Z0JBQ3pDaEMsRUFBRVQ7U0FDVHlDLCtCQUErQmhDLEVBQUVUOztTQUM5Qjs7S0FSVjs7R0MwSG9CLElBQWpCMEM7R0M2QkosU0FBU0MsMkJBQTJCQyxLQUFLQztJQUV2QyxLQUFJRCxnQkFBZ0JDLFNBQVNEO0tBQWVBLG1CQUFtQkw7SUFDL0QsT0FBT0s7R0FDVDtHQWJBLFNBQVNFLDRCQUE0QkYsS0FBS0M7SUFDeEMsT0FBR0o7Y0FDTUUsMkJBQTJCQyxLQUFLQztjQUM3QkQ7R0FDZDtHQ2hKQSxTQUFTRyxvQkFBcUJ0QixLQUFLdUI7SUFBTyxNQUFNRixnQ0FBZ0NyQixLQUFLdUI7R0FBTztHTDRxQjVGLFNBQVNDLHVCQUF1QmpCLEdBQUssT0FBT0EsRUFBRTtHS3BxQjlDLFNBQVNrQix1QkFBd0J6QixLQUFLMEI7SUFDcENKLG9CQUFxQnRCLEtBQUt3Qix1QkFBdUJFO0dBQ25EO0dBYUEsU0FBU0Msc0JBQXVCRDtJQUM5QkQsdUJBQXVCUixtQ0FBbUNTO0dBQzVEO0dMa0tBLFNBQVNFO0lBQ1BEO0dBQ0Y7R0F6QkEsU0FBU0Usc0JBQXVCbEQsR0FBR0osR0FBR3NCO0lBRXBDQTtJQUNBLEdBQUlsQixTQUFzQjtLQUN4QixHQUFJSixLQUFLSSxXQUFZO01BQ25CQSxPQUFPRixvQkFBcUJvQjtNQUM1QixHQUFJdEIsU0FBU0ksS0FBS0E7TUFDbEI7O0tBRUZFLDRCQUE2QkY7O0lBRS9CQSxJQUFJSixLQUFLc0I7SUFDVDtHQUNGO0dBaU1BLFNBQVNpQyxlQUFnQm5ELEdBQUdKLEdBQUdzQjtJQUM3QixHQUFJdEIsV0FBV0ksS0FBS2lEO0lBQ3BCLE9BQU9DLHNCQUF1QmxELEdBQUdKLEdBQUdzQjtHQUN0QztHQTlOQSxTQUFTa0Msc0JBQXVCcEQsR0FBR0o7SUFDakMsT0FBUUk7ZUFFTixHQUFJSixLQUFLSSxZQUFZOztPQUVyQixPQUFPQSxlQUFlSjs7T0FFdEIsT0FBT0ksSUFBSUo7O0dBRWY7R0dsS0EsU0FBU3lELGNBQWN4RCxHQUFHeUQ7SUFDeEI7S0FBSTFDLElBQUtmLFdBQVVBLE1BQUtBLE1BQU1BO0tBQzFCMEQsVUFBVUQ7S0FDVnZCLElBQUluQixJQUFJMkM7SUFDWixHQUFJeEI7S0FDRixPQUFPbEMsUUFBUUUsTUFBTXVEO1lBQ2R2QixNQUFPO0tBQ1IsSUFBRnlCLElBQUkzRCxRQUFRRSxNQUFLdUQsY0FBYTFDO0tBQ2xDLFVBQVU0QyxrQkFBa0IsT0FBT0E7S0FDbkMsT0FBT0gsY0FBY0csR0FBRUYsV0FBVzFDOztRQUUvQjtLQUNILE9BQVFtQjs7UUFDQTtTQUNBO1VBQUZ5QjtxQkFBYzVCO2FBQ04sSUFBTjZCLFlBQVlDLE1BQU1IO2FBQ3RCLElBQVUsSUFBRjNELE9BQU9BLElBQUkyRCxTQUFTM0QsS0FBTTZELE1BQU03RCxLQUFLMEQsS0FBSzFEO2FBQ2xENkQsTUFBTUYsV0FBVzNCO2FBQ2pCLE9BQU8vQixRQUFRRSxNQUFNMEQ7WUFKZjtTQU1SOzs7UUFFTTtTQUNBO1VBQUZEO3FCQUFjNUIsR0FBRytCO2FBQ1QsSUFBTkYsWUFBWUMsTUFBTUg7YUFDdEIsSUFBVSxJQUFGM0QsT0FBT0EsSUFBSTJELFNBQVMzRCxLQUFNNkQsTUFBTTdELEtBQUswRCxLQUFLMUQ7YUFDbEQ2RCxNQUFNRixXQUFXM0I7YUFDakI2QixNQUFNRixlQUFlSTthQUNyQixPQUFPOUQsUUFBUUUsTUFBTTBEO1lBTGY7U0FPUjs7O1FBR007U0FBRkQ7O1lBQ0Y7YUFBSUksYUFBY0MsNEJBQXlCQTthQUN2Q0osWUFBWUMsTUFBTUosY0FBWU07WUFDbEMsSUFBVSxJQUFGaEUsT0FBT0EsSUFBSTBELGFBQWExRCxLQUFNNkQsTUFBTTdELEtBQUswRCxLQUFLMUQ7WUFDdEQsSUFBVSxJQUFGQSxPQUFPQSxJQUFJaUUsa0JBQWtCakU7YUFBTTZELE1BQU1ILGNBQVkxRCxLQUFLaUUsVUFBVWpFO1lBQzVFLE9BQU95RCxjQUFjeEQsR0FBRzREO1dBTGxCOztLQVFWRCxNQUFNekI7S0FDTixPQUFPeUI7O0dBRVg7R0VLQSxTQUFTTTtJQUNQZDtHQUNGO0dOd0JBLFNBQVNlLGlCQUFrQkMsT0FBT0M7SUFDaEMsR0FBSUEsZUFBZUQsa0JBQWtCRjtJQUNyQyxPQUFPRTtHQUNUO0dPbUZBLFNBQVNFLG9CQUFxQnRDO0lBQzVCLEdBQUl1QyxTQUFVdkMsR0FBSTtLQUNoQixHQUFJM0IsU0FBUzJCLCtCQUErQjtLQUM1QyxHQUFJQSxRQUFRO0tBQ1o7O0lBRUYsT0FBT3dDLE1BQU14QztHQUNmO0dDaUJBLFNBQVN5Qyx5QkFBeUJwRCxHQUNoQyxTQUNGO0dEN0xZLElBQVJxRCxVQUFVckUsYUFBYUE7R0FDM0IsU0FBU3NFLGdCQUFnQjNDO0lBQ3ZCLEdBQUcwQyxTQUFTLE9BQU9yRSxXQUFXQSxVQUFVMkI7SUFDbEMsSUFBRmhDO0lBQ0osR0FBSWdDLFFBQVEsU0FBUTRDO0lBQ3BCLEdBQUc1QyxRQUFNLE1BQVFBLE9BQU0sQ0FBQ0EsUUFBTWhDLFdBQ3pCLE1BQVFnQyxNQUFPLENBQUNBLFFBQU1oQztJQUMzQixPQUFPQTtHQUNUO0dBd0NBLFNBQVM2RSx5QkFBMEI3QztJQUNwQixJQUFUOEMsZUFBZUM7SUFDbkJELGNBQWM5QztJQUNILElBQVBnRCxhQUFhQyxXQUFXSDtJQUM1QixPQUFPRTtHQUNUO0dFckRzQixJQUFsQkUsb0JBQW9CN0U7R0hBeEIsU0FBUzhFLG9CQUFxQjFELEtBQU8sTUFBTUEsSUFBSztHQXVDaEQsU0FBUzJEO0lBQ1BELG9CQUFvQnpDO0dBQ3RCO0dHckNBLFNBQVMyQyxRQUFTQyxJQUFHQyxJQUFHQztJQUN0QjVELFVBQVUwRDtJQUNWMUQsVUFBVTJEO0lBQ1YzRCxVQUFVNEQ7R0FDWjtHQUNBSDtHQUNBQTtlQUNFLFdBQVdBLFFBQVF6RCxTQUFRQSxTQUFRQSxTQURaO0dBSXpCeUQ7YUFBdUNyRDtLQUNyQyxHQUFJSixVQUFVSSxNQUFNO0tBQ3BCLEdBQUlKLFVBQVVJLE1BQU07S0FDcEIsR0FBSUosVUFBVUksTUFBTTtLQUNwQixHQUFJSixVQUFVSSxNQUFNO0tBQ3BCLEdBQUlKLFVBQVVJLE1BQU07S0FDcEIsR0FBSUosVUFBVUksTUFBTTtLQUNwQjtJQVAyQjtHQVM3QnFEO2FBQXNDckQ7S0FDcEMsSUFBSXdELEtBQUs1RCxlQUNMNkQsTUFBTXpEO0tBQ1YsR0FBSXdELEtBQUtDLEtBQUs7S0FDZCxHQUFJRCxLQUFLQyxLQUFLO0tBQ2QsR0FBSTdELFVBQVVJLE1BQU07S0FDcEIsR0FBSUosVUFBVUksTUFBTTtLQUNwQixHQUFJSixVQUFVSSxNQUFNO0tBQ3BCLEdBQUlKLFVBQVVJLE1BQU07S0FDcEI7SUFUMEI7R0FXNUJxRDs7S0FDRTtNQUFJQyxPQUFPMUQ7TUFDUDJELE9BQU8zRCxXQUFXMEQ7TUFDbEJFLE9BQU81RCxXQUFXMkQ7S0FDdEIsV0FBV0YsUUFBUUMsSUFBSUMsSUFBSUM7SUFKTDtHQU14Qkg7YUFBa0NyRDtLQUNoQztNQUFJc0QsS0FBSzFELFVBQVVJO01BQ2Z1RCxLQUFLM0QsVUFBVUksUUFBUXNEO01BQ3ZCRSxLQUFLNUQsVUFBVUksUUFBUXVEO0tBQzNCLFdBQVdGLFFBQVFDLElBQUlDLElBQUlDO0lBSkw7R0FNeEJIO2FBQWtDckQ7S0FDaEM7TUFBSXNELEtBQUsxRCxVQUFVSTtNQUNmdUQsS0FBSzNELFVBQVVJLFFBQVFzRDtNQUN2QkUsS0FBSzVELFVBQVVJLFFBQVF1RDtLQUMzQixXQUFXRixRQUFRQyxJQUFJQyxJQUFJQztJQUpMO0dBTXhCSDthQUFrQ3JEO0tBQ2hDO01BQUlzRCxLQUFLMUQsVUFBVUk7TUFDZnVELE1BQU9ELEtBQUtKLHlCQUEwQnRELFVBQVVJLE9BQU9KLFVBQVVJO01BQ2pFd0Q7U0FBT0QsS0FBS0wseUJBQTBCdEQsVUFBVUksT0FBT0osVUFBVUk7VUFBT0osVUFBVUk7S0FDdEYsV0FBV3FELFFBQVFDLElBQUlDLElBQUlDO0lBSkw7R0FNeEJIO2VBQ0UsUUFBUXpELFVBQVFBLFVBQVFBLGNBREM7R0FHM0J5RCxxQ0FDRSxPQUFRekQsa0JBRGdCO0dBRzFCeUQ7YUFBa0NyRDtLQUNoQyxXQUFXcUQsUUFBUXpELFVBQVVJLE1BQU1KLFVBQVVJLE1BQU1KLFVBQVVJO0lBRHZDO0dBR3hCcUQ7YUFBaUNyRDtLQUMvQixXQUFXcUQsUUFBUXpELFVBQVFJLE1BQU1KLFVBQVFJLE1BQU1KLFVBQVFJO0lBRGxDO0dBR3ZCcUQ7YUFBa0NyRDtLQUNoQyxXQUFXcUQsUUFBUXpELFVBQVFJLE1BQU1KLFVBQVFJLE1BQU1KLFVBQVFJO0lBRGpDO0dBR3hCcUQ7YUFBeUNqRjtLQUN2Q0EsSUFBSUE7S0FDSixHQUFJQSxRQUFRLE9BQU93QjtLQUNuQixHQUFJeEI7TUFBUTtjQUNDaUY7ZUFBU3pELFdBQVd4QjtlQUNWd0IsV0FBV3hCLElBQU13QixnQkFBaUJ4QjtlQUNsQ3dCLFdBQVd4QixJQUFNd0IsZ0JBQWlCeEI7S0FFekQsR0FBSUE7TUFDRjtjQUFXaUY7a0JBQ1N6RCxXQUFZeEIsUUFDWHdCLFdBQVl4QixTQUFZd0IsZ0JBQWlCeEI7S0FDaEUsV0FBV2lGLGNBQWN6RCxXQUFZeEI7SUFaUjtHQWMvQmlGO2FBQW1EakY7S0FDakRBLElBQUlBO0tBQ0osR0FBSUEsUUFBUSxPQUFPd0I7S0FDbkIsR0FBSXhCO01BQ0Y7Y0FBV2lGO2VBQ1J6RCxXQUFXeEIsSUFBTXdCLGdCQUFpQnhCO2VBQ2xDd0IsV0FBV3hCLElBQU13QixnQkFBaUJ4QjtlQUNsQ3dCLFdBQVd4QjtLQUNoQixHQUFJQTtNQUNGO2NBQVdpRjtlQUNSekQsV0FBWXhCLFNBQVl3QixnQkFBaUJ4QixHQUN6Q3dCLFdBQVl4QjtLQUVqQixXQUFXaUYsUUFBU3pELFdBQVl4QjtJQWJPO0dBZXpDaUY7YUFBMENqRjtLQUN4Q0EsSUFBSUE7S0FDSixHQUFJQSxRQUFRLE9BQU93QjtLQUNiLElBQUY4RCxJQUFLOUQ7S0FDVCxHQUFJeEI7TUFDRjtjQUFXaUY7ZUFDUnpELFdBQVd4QixJQUFNd0IsZ0JBQWlCeEI7ZUFDbEN3QixXQUFXeEIsSUFBTXNGLFVBQVd0RjtlQUMzQndCLGlCQUFrQnhCO0tBQ2YsSUFBTHVGLE9BQVEvRDtLQUNaLEdBQUl4QjtNQUNGO2NBQVdpRjtlQUNSekQsV0FBWXhCLFNBQVl3QixnQkFBaUJ4QjtlQUN6Q3dCLGlCQUFtQnhCO2VBQ3BCdUY7S0FDSixXQUFXTixRQUFVekQsaUJBQW1CeEIsUUFBU3VGLE1BQU1BO0lBZnpCO0dBaUJoQ047O0tBQ0V6RCxVQUFXQSxlQUFpQkE7S0FDNUJBLFdBQVlBLGVBQWlCQTtLQUM3QkEsVUFBV0E7SUFIWTtHQUt6QnlEOztLQUNFekQsV0FBWUEsZ0JBQWtCQTtLQUM5QkEsV0FBWUEsZ0JBQWtCQTtLQUM5QkEsVUFBVUE7SUFIYTtHQUt6QnlEO2FBQXNDckQ7S0FDcEM7TUFBSTREO01BQ0FDLFVBQVVqRTtNQUNWa0UsVUFBVTlEO01BQ1YrRCxlQUFlVjtLQUNuQixNQUFPUSxpQkFBaUJDLGFBQWMsQ0FDcENGLFVBQ0FFO0tBRUYsTUFBT0YsWUFBYTtNQUNsQkE7TUFDQUc7TUFDQSxHQUFJRixpQkFBaUJDLGNBQWU7T0FDbENDO09BQ0FGLFVBQVVBLFlBQVlDOztNQUV4QkE7O0tBRUYsa0JBQW9CQyxtQkFBb0JGO0lBbEJkO0dBb0I1QlI7YUFBa0N0QjtLQUUxQixJQUFGL0IsSUFBSUo7S0FDUixHQUFJbUMsWUFBWXFCO0tBQ1AsSUFBTE8sT0FBTzNELE9BQU8rQjtLQUNsQixHQUFJL0IsZUFBZUEsSUFBSUE7S0FDdkIsR0FBSStCLGVBQWVBLElBQUlBO0tBQ2pCLElBQUZpQyxJQUFJaEUsVUFBVStCO0tBQ2xCLEdBQUk0QixlQUFlSyxJQUFJQTtLQUN2QixPQUFPQTtJQVRlO0dBV3hCWDthQUFrQ3RCO0tBRTFCLElBQUYvQixJQUFJSjtLQUNSLEdBQUltQyxZQUFZcUI7S0FDUCxJQUFMTyxPQUFPM0Q7S0FDWCxHQUFJQSxlQUFlQSxJQUFJQTtLQUN2QixHQUFJK0IsZUFBZUEsSUFBSUE7S0FDakIsSUFBRjlDLElBQUllLFVBQVUrQjtLQUNsQixHQUFJNEIsZUFBZTFFLElBQUlBO0tBQ3ZCLE9BQU9BO0lBVGU7R0FXeEJvRSxxQ0FDRSxPQUFPekQsVUFBV0EsY0FETTtHQUcxQnlEOztLQUNFLFFBQVN6RCxpQkFBaUJ2QixrQkFBa0J1QixVQUFVdkI7Y0FBbUJ1QjtJQUQvQztHQUc1QnlEOztLQUNFLFFBQVF6RDthQUNBQTthQUNBQTthQUNDQTthQUNEQTthQUNBQTthQUNDQTthQUNEQTtJQVJrQjtHQVU1QnlEO2VBQ0UsT0FBT3pELFdBQVlBLHNCQURJO0dBR3pCeUQ7ZUFDRSxPQUFTekQseUJBQTRCQSxjQURkO0dBMEl6QixTQUFTcUUsMkJBQTJCWCxJQUFJQyxJQUFJQyxJQUMxQyxXQUFXSCxRQUFRQyxJQUFJQyxJQUFJQztHQUM3QjtHRjlUQSxTQUFTVSx5QkFBMEJsRTtJQUNqQyxLQUFLdUMsU0FBU3ZDLEdBQUk7S0FDaEIsR0FBSXdDLE1BQU14QyxJQUNSLE9BQU9pRTtLQUNULE9BQUlqRTtlQUNLaUU7ZUFFQUE7O0lBRUYsSUFBTE4sT0FBUTNELGNBQVVBLE9BQU00QyxvQkFBa0I1QztJQUM5QyxHQUFJMkQsTUFBTTNELE1BQUtBO0lBR1AsSUFBSm1FLE1BQU14QixnQkFBZ0IzQztJQUMxQixHQUFJbUUsU0FBVTtLQUNaQTtLQUNBbkUsS0FBSzNCOztRQUNBO0tBQ0wyQixLQUFLM0IsWUFBVzhGO0tBQ2hCLEdBQUluRSxPQUFRLENBQ1ZBLFFBQVFtRTtLQUNWLEdBQUlBLFVBQ0ZuRTs7SUFFSixJQUFJb0UsSUFBSS9GLGlCQUNKZ0csS0FBS3JFO0lBQ1RBLEtBQUtBLElBQUlxRSxNQUFNRDtJQUNSLElBQUhFLEtBQUt0RTtJQUNUQSxLQUFLQSxJQUFJc0UsTUFBTUY7SUFDUixJQUFIRyxLQUFLdkU7SUFDVHFFLEtBQU1BLFdBQVdWLE9BQU9RO0lBQ3hCLE9BQU9GLDJCQUEyQk0sSUFBSUQsSUFBSUQ7R0FDNUM7R0VxVEEsU0FBU0csb0JBQW9CeEUsR0FBSyxPQUFPQSxZQUFZO0dDdU9yRCxTQUFTeUUsa0JBQWtCQyxRQUFRQyxJQUFJQztJQUNyQ0YsaUJBQWlCQztJQUNqQkQsaUJBQWtCQyxVQUFXQTtJQUM3QixHQUFHQTtLQUNELElBQVUsSUFBRjNHLE9BQU9BLElBQUkyRyxnQkFBZ0IzRztNQUFLLEdBQ25DMkcsUUFBUTNHO09BQ1QwRyxpQkFBaUJDLFFBQVEzRztVQUN0QjtPQUNIMEc7T0FDQUE7T0FDQUEsaUJBQWlCQyxRQUFRM0c7OztLQUk3QixJQUFVLElBQUZBLE9BQU9BLElBQUkyRyxnQkFBZ0IzRyxLQUFLMEcsaUJBQWdCQyxRQUFRM0c7SUFDbEUsT0FBTzJHOzs7O09BSUwsSUFBVSxJQUFGM0csT0FBT0EsSUFBSTJHLGdCQUFnQjNHLEtBQ2pDMEcsZ0JBQWdCQyxRQUFRM0c7T0FFMUI7OztPQUdBLElBQVUsSUFBRkEsT0FBT0EsSUFBSTJHLGdCQUFnQjNHLEtBQ2pDMEcsaUJBQWlCQyxRQUFRM0c7T0FFM0I7O09BRUEsSUFBVSxJQUFGQSxPQUFPQSxJQUFJMkcsZ0JBQWdCM0csS0FDakMwRyxpQkFBaUJDLFFBQVEzRztPQUUzQjs7O09BR0EwRztPQUNBLElBQVUsSUFBRjFHLE9BQU9BLElBQUkyRyxnQkFBZ0IzRyxLQUNqQzBHLGlCQUFpQkMsUUFBUTNHO09BRTNCOztPQUVBLElBQVUsSUFBRkEsT0FBT0EsSUFBSTJHLG9CQUFvQjNHLElBQUk7UUFDbkMsSUFBRlEsSUFBSWdHLG9CQUFvQkcsT0FBTzNHO1FBQ25DLElBQVcsSUFBRkgsT0FBT0EsT0FBT0EsS0FBSzZHLGdCQUFpQmxHLEVBQUVYOztPQUVqRDs7T0FFQSxJQUFVLElBQUZHLE9BQU9BLElBQUkyRyxnQkFBZ0IzRyxJQUFJO1FBQy9CLElBQUZRLElBQUlnRyxvQkFBb0JOLHlCQUF5QlMsT0FBTzNHO1FBQzVELElBQVcsSUFBRkgsT0FBT0EsT0FBT0EsS0FBSzZHLGdCQUFpQmxHLEVBQUVYOztPQUVqRDs7T0FFQSxJQUFVLElBQUZHLE9BQU9BLElBQUkyRyxnQkFBZ0IzRyxJQUFJO1FBQy9CLElBQUZRLElBQUlxRSx5QkFBeUI4QixPQUFPM0c7UUFDeEMwRyxpQkFBaUJsRzs7T0FFbkI7O09BRUEsSUFBVSxJQUFGUixPQUFPQSxJQUFJMkcsb0JBQW9CM0csSUFBSTtRQUNuQyxJQUFGSCxJQUFJOEcsT0FBTzNHO1FBQ2YwRyxpQkFBaUI3Qix5QkFBeUJoRjtRQUMxQzZHLGlCQUFpQjdCLHlCQUF5QmhGOztPQUU1Qzs7T0FFQSxJQUFVLElBQUZHLE9BQU9BLElBQUkyRyxvQkFBb0IzRyxJQUFJO1FBQ3pDO1NBQUk2RyxVQUFVRixPQUFPM0c7U0FDakJRLElBQUlnRyxvQkFBb0JOLHlCQUF5Qlc7UUFDckQsSUFBVyxJQUFGaEgsT0FBT0EsT0FBT0EsS0FBSzZHLGdCQUFpQmxHLEVBQUVYO1FBQ3pDLElBQUZXLElBQUlnRyxvQkFBb0JOLHlCQUF5Qlc7UUFDckQsSUFBVyxJQUFGaEgsT0FBT0EsT0FBT0EsS0FBSzZHLGdCQUFpQmxHLEVBQUVYOztPQUVqRDs7SUFFRitHLGFBQWFEO0lBQ2JDLGFBQWFEO0dBQ2Y7R0E3bkJBLFNBQVNHLDZCQUE2QkM7SUFDcEMsT0FBT0EsOEJBQ21CLGtCQUNqQjs7R0FFWDtHQUtBLFNBQVNDLHNCQUFzQkQsTUFBTUU7SUFDbkMsSUFBSUM7SUFDSixPQUFPSDs7T0FDRUcsT0FBT25DLGNBQWM7O09BQ3JCbUMsT0FBT0MsY0FBYzs7T0FDckJELE9BQU9FLFdBQVc7O09BQ2xCRixPQUFPM0csWUFBWTs7T0FDbkIyRyxPQUFPRyxZQUFZOztPQUNuQkgsT0FBT0ksYUFBYTs7T0FDcEJKLE9BQU9qQyxZQUFZOztPQUNuQmlDLE9BQU9qQyxZQUFZOztPQUNuQmlDLE9BQU9qQyxZQUFZOztPQUNuQmlDLE9BQU9qQyxZQUFZOztPQUNuQmlDLE9BQU9uQyxjQUFjOztPQUNyQm1DLE9BQU9DLGNBQWM7O09BQ3JCRCxPQUFPM0csWUFBWTs7SUFFNUIsS0FBSzJHLE1BQU05RDtJQUNGLElBQUxtRSxXQUFXTCxLQUFLRCxPQUFPSCw2QkFBNkJDO0lBQ3hELE9BQU9RO0dBQ1Q7R0hvR0EsU0FBU0MseUJBQTBCeEY7SUFDdEIsSUFBUGdELGFBQWFDO0lBQ2pCRCxZQUFZaEQ7SUFDQyxJQUFUOEMsZUFBZUMsYUFBYUM7SUFDaEMsT0FBT0Y7R0FDVDtHRTJMQSxTQUFTMkMsb0JBQW9CMUg7SUFDM0I7WUFBV3NGO2FBQVF0RixZQUFhQSxZQUFjQTthQUMzQkEsWUFBYUEsWUFBY0E7YUFDM0JBLFlBQWFBO0dBQ2xDO0dGcFBBLFNBQVMySCx5QkFBMEIxRjtJQUNqQyxJQUFJc0QsS0FBS3RELE1BQ0x1RCxLQUFLdkQsTUFDTHdELEtBQUt4RCxNQUNMbUUsT0FBT1g7SUFDWCxHQUFJVztLQUFhLFFBQ1ZiLEtBQUdDLEtBQUlDO2VBQ0ZBLGdCQUFlWixXQUFVQTtlQUUxQitDO0lBRVgsSUFBSXZCLElBQUkvRixtQkFDSnVILE9BQU90QyxLQUFHYyxJQUFFYixNQUFJYSxLQUFHWjtJQUN2QixHQUFJVyxRQUFTO0tBQ1h5QjtLQUNBQSxPQUFPdkgsWUFBVzhGOzs7S0FFbEJ5QixPQUFPdkg7SUFDVCxHQUFJbUYsYUFBYW9DLFFBQVFBO0lBQ3pCLE9BQU9BO0dBQ1Q7R0dsSEEsU0FBU0MsaUJBQWlCQztJQUN4QixJQUFJQyxTQUFTRCxhQUNUYjtJQUNKLElBQVcsSUFBRmpILE9BQU9BLElBQUkrSCxRQUFRL0gsSUFBSztLQUMvQixHQUFJOEgsS0FBSzlIO01BQ1BvRDtLQUNGNkQsT0FBT0EsT0FBT2EsS0FBSzlIOztJQUVyQixPQUFPaUg7R0FDVDtHRHVUQSxTQUFTZSx3QkFBd0IxQyxJQUFJRTtJQUNuQztZQUFXSDthQUNUQzthQUNFQSxvQkFBdUJFO2FBQ3hCQTtHQUNMO0dBS0EsU0FBU3lDLGdCQUFnQjFHLEdBQUksT0FBT0EsU0FBUztHQUg3QyxTQUFTMkcsZ0JBQWdCM0csR0FBSSxPQUFPQSxTQUFTO0dDclJyQixJQUFwQjRHO0dBS0osU0FBU0MsWUFBYXJCLE1BQU1zQixRQUFRUCxNQUFNUTtJQUV4QzFHLFlBQWNtRjtJQUNkbkYsY0FBY3lHO0lBQ2R6RyxZQUFja0c7SUFDZGxHLFlBQVkwRztHQUNkO0dBRUFGLG9DQUFvQ0Q7R0FFcENDO2FBQXlDcEY7S0FDL0IsSUFBSnVGO0tBQ0osVUFBVXZGLGtCQUFrQkEsT0FBT0E7S0FDbkMsTUFBT0EsZUFBZWM7TUFBUVY7S0FDOUIsR0FBSXhCLG9CQUFvQm9CO01BQ3RCSTtLQUNGLEdBQUd4QjtNQUFpQyxJQUN2QixJQUFGNUIsT0FBT0EsSUFBSTRCLGtCQUFrQjVCLElBQUs7T0FDekMsR0FBSWdELElBQUloRCxVQUFVZ0QsSUFBSWhELE1BQU00QixVQUFVNUIsSUFDcENrRTtPQUNGcUUsTUFBT0EsTUFBTTNHLFVBQVU1QixLQUFNZ0QsSUFBSWhEOzs7TUFFOUIsSUFDTSxJQUFGQSxJQUFJNEIsc0JBQXNCNUIsUUFBUUEsSUFBSztPQUM5QyxHQUFJZ0QsSUFBSWhELFVBQVVnRCxJQUFJaEQsS0FBSzRCLFVBQVU1QixJQUNuQ2tFO09BRUZxRSxNQUFPQSxNQUFNM0csVUFBVTVCLE1BQU9nRCxJQUFJaEQ7O0tBR3RDLE9BQU91STtJQXBCc0I7R0F1Qi9CSDthQUFzQ0c7S0FDcEMsT0FBTzNHOztRQUdMLElBQUluQixJQUFJbUIsVUFBVTJHLGNBQ2Q3QyxJQUFJOUQsVUFBVTJHO1FBQ2xCLE9BQU9QLHdCQUF3QnZILEdBQUVpRjs7O1FBR2pDLElBQUl6RSxJQUFJVyxVQUFVMkcsY0FDZHZJLElBQUk0QixVQUFVMkc7UUFDbEIsYUFBYXRILEdBQUdqQjtnQkFFaEIsT0FBTzRCLFVBQVUyRzs7SUFiTztHQWlCNUJIO2FBQXNDRyxLQUFJaEg7S0FDeEMsT0FBT0s7O1FBR0xBLFVBQVUyRyxlQUFlTCxnQkFBZ0IzRztRQUN6Q0ssVUFBVTJHLGVBQWVOLGdCQUFnQjFHO1FBQ3pDOzs7UUFHQUssVUFBVTJHLGVBQWVoSCxNQUN6QkssVUFBVTJHLGVBQWVoSCxNQUN6QjtnQkFFQUssVUFBVTJHLE9BQU9oSCxHQUNqQjs7S0FFRjtJQWhCMEI7R0FvQjVCNkc7YUFBdUM3RztLQUNyQyxPQUFPSzs7UUFHTCxJQUFJN0IsSUFBSW1JLGdCQUFnQjNHLElBQ3BCZixJQUFJeUgsZ0JBQWdCMUc7UUFDeEIsR0FBR3hCLEtBQUtTO1NBQ05vQixlQUFlN0I7O1NBRVosSUFDTyxJQUFGQyxPQUFPQSxJQUFFNEIsa0JBQWtCNUI7VUFDakM0QixVQUFVNUIsS0FBTUEsYUFBWUQsSUFBSVM7UUFHcEM7OztRQUdBLElBQUlnSSxLQUFLakgsTUFDTGtILEtBQUtsSDtRQUNULEdBQUdpSCxNQUFNQztTQUNQN0csZUFBZTRHOztTQUVaLElBQ08sSUFBRnhJLE9BQU9BLElBQUU0QixrQkFBa0I1QjtVQUNqQzRCLFVBQVU1QixLQUFNQSxhQUFZd0ksS0FBS0M7UUFHckM7Z0JBRUE3RyxlQUFlTCxJQUNmOztJQTlCeUI7R0FtQzdCNkc7YUFBMEM1SCxHQUFHa0k7S0FDM0MsR0FBSTlHLGVBQWVwQixZQUFZb0IsYUFBYXBCLE9BQVE7TUFDbEQsSUFBSW1JLEtBQUsvRyxZQUFhQSxrQkFDbEJnSCxLQUFRcEksU0FBVUE7TUFDdEIsT0FBT29JLEtBQUtEOztLQUVkLEdBQUkvRyxvQkFBb0JwQjtNQUFlLE9BQzlCQSxnQkFBZ0JvQjtLQUV6QixJQUFXLElBQUY1QixPQUFPQSxJQUFJNEIsa0JBQWtCNUI7TUFDcEMsR0FBSTRCLFVBQVU1QixNQUFNUSxPQUFPUixJQUN6QixPQUFRNEIsVUFBVTVCLEtBQUtRLE9BQU9SO0tBQ2xDLE9BQVE0Qjs7Ozs7UUFNTixJQUFJSSxHQUFHK0I7UUFDUCxJQUFXLElBQUYvRCxPQUFPQSxJQUFJNEIsa0JBQWtCNUIsSUFBSztTQUN6Q2dDLElBQUlKLFVBQVU1QjtTQUNkK0QsSUFBSXZELE9BQU9SO1NBQ1gsR0FBSWdDLElBQUkrQixHQUNOO1NBQ0YsR0FBSS9CLElBQUkrQixHQUNOO1NBQ0YsR0FBSS9CLEtBQUsrQixFQUFHO1VBQ1YsS0FBSzJFLE9BQU8sT0FBT2Y7VUFDbkIsR0FBSTNGLEtBQUtBLEdBQUc7VUFDWixHQUFJK0IsS0FBS0EsR0FBRzs7O1FBR2hCOztRQUdBLElBQVcsSUFBRi9ELE9BQU9BLElBQUk0QixrQkFBa0I1QixPQUFNO1NBRTFDLEdBQUk0QixVQUFVNUIsU0FBT1EsT0FBT1IsUUFDMUI7U0FDRixHQUFJNEIsVUFBVTVCLFNBQU9RLE9BQU9SLFFBQzFCO1NBQ0YsR0FBSzRCLFVBQVU1QixXQUFhUSxPQUFPUixVQUNqQztTQUNGLEdBQUs0QixVQUFVNUIsV0FBYVEsT0FBT1IsVUFDakM7O1FBRUo7Ozs7Ozs7OztRQVNBLElBQVcsSUFBRkEsT0FBT0EsSUFBSTRCLGtCQUFrQjVCLElBQUs7U0FDekMsR0FBSTRCLFVBQVU1QixLQUFLUSxPQUFPUixJQUN4QjtTQUNGLEdBQUk0QixVQUFVNUIsS0FBS1EsT0FBT1IsSUFDeEI7O1FBRUo7O0tBRUY7SUEvRDhCO0dBb0VoQyxTQUFTNkksa0JBQWtCOUIsTUFBTXNCLFFBQVFQLE1BQU1RO0lBQzdDMUcsWUFBY21GO0lBQ2RuRixjQUFjeUc7SUFDZHpHLFlBQWNrRztJQUNkbEcsWUFBYzBHO0dBQ2hCO0dBRUFPLGtDQUFrQ1Q7R0FDbENTO2FBQStDN0Y7S0FDN0MsVUFBVUE7TUFBaUIsR0FDckJBLGVBQWVjLFNBQVVkO09BQzNCQSxNQUFNQTs7T0FDSEk7S0FFUCxHQUFJSixXQUFXQSxPQUFPcEIsY0FDcEJzQztLQUNGLE9BQU9sQjtJQVI0QjtHQVdyQzZGLDJDQUE0Q04sS0FDMUMsT0FBTzNHLFVBQVUyRyxLQURlO0dBSWxDTTthQUE0Q04sS0FBSWhILEdBQzlDSyxVQUFVMkcsT0FBT2hILEdBQ2pCLFNBRmdDO0dBS2xDc0g7YUFBNkN0SCxHQUMzQ0ssZUFBZUwsSUFDZixTQUZpQztHQWFuQyxTQUFTdUgsc0JBQXNCL0IsTUFBTXNCLFFBQVFQLE1BQU1QO0lBQzVCLElBQWpCd0IsbUJBQW1CakMsNkJBQTZCQztJQUNwRCxHQUFHYyxpQkFBaUJDLFFBQVFpQixvQkFBb0J4QjtLQUM5Q25FO0lBRUYsR0FBR2lGLGVBQ0FQLG9CQUNBaUI7S0FDRCxXQUFXRixrQkFBa0I5QixNQUFNc0IsUUFBUVAsTUFBTVA7SUFDbkQsV0FBV2EsWUFBWXJCLE1BQU1zQixRQUFRUCxNQUFNUDtHQUU3QztHSm5SQSxTQUFTeUIsY0FBZTdGO0lBQ3RCLEtBQUlUO0tBQ0ZBLGlDQUE4Qk87SUFDaENDLHVCQUF1QlIsMEJBQTBCUztHQUNuRDtHSXdvQkEsU0FBUzhGLG9CQUFvQkMsUUFBUXRDLElBQUl1QztJQUMxQixJQUFUQyxXQUFXRjtJQUNmLEdBQUlFLGdCQUFnQkE7S0FDbEJKO0lBQ0Y7S0FBSXZILE1BQU15SDtLQUNObkMsT0FBT3RGO0tBQ1A0RyxTQUFVNUc7S0FDVnFHO0lBQ0osR0FBR3FCO0tBQ0QsSUFBVyxJQUFGbkosT0FBT0EsSUFBSW9KLFVBQVVwSixJQUFLO01BQ3BCLElBQVRxSixXQUFXSDtNQUNmLEdBQUdHLG1CQUFtQjtPQUNwQixJQUFJQyxjQUFjSixrQkFDZEssY0FBY0w7T0FDbEIsR0FBR0k7UUFDRE47T0FDRkssV0FBV0U7O01BRWJ6QixVQUFVdUI7OztLQUdaLElBQVcsSUFBRnJKLE9BQU9BLElBQUlvSixVQUFVcEosS0FBSzhILFVBQVVvQjtJQUMvQztLQUFJakMsT0FBT1ksaUJBQWlCQztLQUN4QlAsT0FBT1Asc0JBQXNCRCxNQUFNRTtLQUNuQ04sS0FBS21DLHNCQUFzQi9CLE1BQU1zQixRQUFRUCxNQUFNUDtJQUNuRCxPQUFPUjs7T0FFTCxJQUFVLElBQUYvRyxPQUFPQSxJQUFJaUgsTUFBTWpILEtBQ3ZCdUgsS0FBS3ZILEtBQUtrSixpQkFFWjs7O09BR0EsSUFBVSxJQUFGbEosT0FBT0EsSUFBSWlILE1BQU1qSCxLQUN2QnVILEtBQUt2SCxLQUFLa0osaUJBRVo7O09BRUEsSUFBVSxJQUFGbEosT0FBT0EsSUFBSWlILE1BQU1qSCxLQUN2QnVILEtBQUt2SCxLQUFLa0osa0JBRVo7O09BRUEsSUFBVSxJQUFGbEosT0FBT0EsSUFBSWlILE1BQU1qSCxLQUN2QnVILEtBQUt2SCxLQUFLa0osa0JBRVo7O09BRUEsSUFBVSxJQUFGbEosT0FBT0EsSUFBSWlILE1BQU1qSCxLQUN2QnVILEtBQUt2SCxLQUFLa0osa0JBRVo7OztPQUdVLElBQU5NLFFBQVFOO09BQ1osR0FBR007UUFBT1I7O09BQ1YsSUFBVSxJQUFGaEosT0FBT0EsSUFBSWlILE1BQU1qSCxLQUN2QnVILEtBQUt2SCxLQUFLa0o7T0FFWjs7T0FFTSxJQUFGN0gsUUFBUXlDO09BQ1osSUFBVSxJQUFGOUQsT0FBT0EsSUFBSWlILE1BQU1qSCxJQUFJO1FBQzNCLElBQVcsSUFBRkgsT0FBTUEsT0FBTUEsS0FBS3dCLEVBQUV4QixLQUFLcUo7UUFDdkIsSUFBTk8sUUFBUWhDLG9CQUFvQnBHO1FBQ2hDc0YsT0FBTzNHLEdBQUV5Sjs7T0FFWDs7T0FFTSxJQUFGcEksUUFBUXlDO09BQ1osSUFBVSxJQUFGOUQsT0FBT0EsSUFBSWlILE1BQU1qSCxJQUFJO1FBQzNCLElBQVcsSUFBRkgsT0FBTUEsT0FBTUEsS0FBS3dCLEVBQUV4QixLQUFLcUo7UUFDM0IsSUFBRmpKLElBQUl5SCx5QkFBeUJELG9CQUFvQnBHO1FBQ3JEc0YsT0FBTzNHLEdBQUVDOztPQUVYOztPQUVBLElBQVUsSUFBRkQsT0FBT0EsSUFBSWlILE1BQU1qSCxJQUFJO1FBQ3JCLElBQUZDLElBQUl1SCx5QkFBeUIwQjtRQUNqQ3ZDLE9BQU8zRyxHQUFFQzs7T0FFWDs7T0FFQSxJQUFVLElBQUZELE9BQU9BLElBQUlpSCxNQUFNakgsSUFBSTtRQUMzQjtTQUFJeUksS0FBS2pCLHlCQUF5QjBCO1NBQzlCVixLQUFLaEIseUJBQXlCMEI7UUFDbEN2QyxPQUFPM0csU0FBT3lJLElBQUdEOztPQUVuQjs7T0FFTSxJQUFGbkgsUUFBUXlDO09BQ1osSUFBVSxJQUFGOUQsT0FBT0EsSUFBSWlILE1BQU1qSCxJQUFJO1FBQzNCLElBQVcsSUFBRkgsT0FBTUEsT0FBTUEsS0FBS3dCLEVBQUV4QixLQUFLcUo7UUFDMUIsSUFBSFQsS0FBS2YseUJBQXlCRCxvQkFBb0JwRztRQUN0RCxJQUFXLElBQUZ4QixPQUFNQSxPQUFNQSxLQUFLd0IsRUFBRXhCLEtBQUtxSjtRQUMxQixJQUFIVixLQUFLZCx5QkFBeUJELG9CQUFvQnBHO1FBQ3REc0YsT0FBTzNHLFNBQU95SSxJQUFHRDs7T0FFbkI7O0lBRUY1QixhQUFhd0M7SUFDYixPQUFPTixzQkFBc0IvQixNQUFNc0IsUUFBUVAsTUFBTVA7R0FDbkQ7R0FqZkEsU0FBU21DLGdCQUFnQjNKLEdBQUVTLEdBQUVrSSxPQUMzQixPQUFPM0ksVUFBVVMsR0FBRWtJLE9BQ3JCO0dDNU1BLFNBQVNpQixTQUFTNUosR0FBRVMsR0FDbEIsT0FBT0gsVUFBVU4sR0FBRVMsR0FDckI7R0NUQSxTQUFTb0osa0JBQWtCbEUsR0FBRXZEO0lBQzNCQSxJQUFJd0gsU0FBU3hIO0lBQ2JBLElBQU1BLFVBQVlBO0lBQ2xCQSxJQUFJd0gsU0FBU3hIO0lBQ2J1RCxLQUFLdkQ7SUFDTHVELElBQU1BLFVBQVlBO0lBQ2xCLFFBQVVBLEtBQUtBO0dBQ2pCO0dBcUJBLFNBQVNtRSxvQkFBcUJuRSxHQUFHbkU7SUFDL0JtRSxJQUFJa0Usa0JBQWtCbEUsR0FBR3dDLGdCQUFnQjNHO0lBQ3pDbUUsSUFBSWtFLGtCQUFrQmxFLEdBQUd1QyxnQkFBZ0IxRztJQUN6QyxPQUFPbUU7R0FDVDtHQVZBLFNBQVNvRSxvQkFBcUJwRSxHQUFHcUU7SUFDL0IsT0FBT0Ysb0JBQW9CbkUsR0FBR1EseUJBQTBCNkQ7R0FDMUQ7R0Z3ckJBLFNBQVNDLGFBQWFyRDtJQUNwQixJQUFJc0QsV0FBV3BDLGlCQUFpQmxCLFVBQzVCakI7SUFDSixPQUFPaUI7Ozs7T0FJTCxHQUFHc0QsZ0JBQWdCQTtPQUNuQixJQUFJQyxPQUFPbEs7T0FDWCxJQUFJQSxPQUFPQSxTQUFTMkcsZ0JBQWdCM0csT0FBSztRQUN2Q2tLO1NBQUl2RCxRQUFRM0csU0FBUTJHLFFBQVEzRyxjQUFjMkcsUUFBUTNHO1dBQWUyRyxRQUFRM0c7UUFDekUwRixJQUFJa0Usa0JBQWtCbEUsR0FBRXdFOztPQUUxQkE7T0FDQSxPQUFRRDs7VUFDQUMsSUFBS3ZELFFBQVEzRzs7VUFDYmtLLEtBQUt2RCxRQUFRM0c7O1VBQ2JrSyxLQUFLdkQsUUFBUTNHLFFBQ25CMEYsSUFBSWtFLGtCQUFrQmxFLEdBQUd3RTs7T0FFM0I7OztPQUdBLEdBQUdELGdCQUFnQkE7T0FDbkIsSUFBSUMsT0FBT2xLO09BQ1gsSUFBSUEsT0FBT0EsU0FBUzJHLGdCQUFnQjNHLE9BQUs7UUFDdkNrSyxJQUFJdkQsUUFBUTNHLFNBQVEyRyxRQUFRM0c7UUFDNUIwRixJQUFJa0Usa0JBQWtCbEUsR0FBRXdFOztPQUUxQixJQUFLRCxvQkFDSHZFLElBQUlrRSxrQkFBa0JsRSxHQUFHaUIsUUFBUTNHO09BQ25DOztPQUVBLEdBQUlpSyxlQUFlQTtPQUNuQixJQUFXLElBQUZqSyxPQUFPQSxJQUFJaUssVUFBVWpLLEtBQUswRixJQUFJa0Usa0JBQWtCbEUsR0FBR2lCLFFBQVEzRztPQUNwRTs7O09BR0EsR0FBSWlLLGVBQWVBO09BQ25CLElBQVcsSUFBRmpLLE9BQU9BLElBQUlpSyxVQUFVakssS0FBSzBGLElBQUlrRSxrQkFBa0JsRSxHQUFHaUIsUUFBUTNHO09BQ3BFOztPQUVBLEdBQUlpSyxlQUFlQTtPQUNuQkE7T0FDQSxJQUFXLElBQUZqSyxPQUFPQSxJQUFJaUssVUFBVWpLLEtBQzVCMEYsSUFBSWtFLGtCQUFrQmxFLEdBQUdpQixRQUFRM0c7T0FFbkM7O09BRUFpSzs7T0FFQSxHQUFJQSxlQUFlQTtPQUNuQixJQUFXLElBQUZqSyxPQUFPQSxJQUFJaUssVUFBVWpLO1FBQUswRixJQUFJb0Usb0JBQW9CcEUsR0FBR2lCLFFBQVEzRztPQUN0RTs7T0FFQWlLOztPQUVBLEdBQUlBLGVBQWVBO09BQ25CLElBQVcsSUFBRmpLLE9BQU9BLElBQUlpSyxVQUFVaks7UUFBSzBGLElBQUlvRSxvQkFBb0JwRSxHQUFHaUIsUUFBUTNHO09BQ3RFOztJQUVGLE9BQU8wRjtHQUNUO0dHeG9CQSxTQUFTeUUscUJBQXFCakIsUUFBUWpDLE1BQ3BDQSxhQUNBLE9BQU9pQztHQUNUO0dBSUEsU0FBU2tCLHlCQUF5QmxCLFFBQVFqQztJQUN4QyxPQUFRaUM7O09BRU5qQyxhQUNBLE9BQU9pQzs7T0FFUEY7ZUFDT0E7O0dBRVg7R0FoQ0EsU0FBU3FCLHFCQUFxQm5CLFFBQVFqQztJQUM5QixJQUFGNUYsUUFBUXlDO0lBQ1osSUFBVyxJQUFGakUsT0FBTUEsT0FBTUEsS0FBS3dCLEVBQUV4QixLQUFLcUo7SUFDakNqQztJQUNBLE9BQU9RLG9CQUFxQnBHO0dBQzlCO0dBSUEsU0FBU2lKLG1CQUFtQjVELFFBQVFuRixHQUFHZ0o7SUFDL0IsSUFBRi9KLElBQUlnRyxvQkFBcUJqRjtJQUM3QixJQUFXLElBQUZ2QixPQUFPQSxPQUFPQSxLQUFLMEcsZ0JBQWlCbEcsRUFBRVI7SUFDL0N1SztJQUFjQTtHQUNoQjtHSkNBLFNBQVNDLG1CQUFtQnhJLEdBQUUrQixHQUFHMkUsT0FBUyxPQUFPMUcsVUFBVStCLEdBQUc7R0E4SjlELFNBQVMwRyxnQkFBZ0JsSixHQUN2QixPQUFRQSxXQUFhQSxTQUN2QjtHSXhJb0I7SUFBaEJtSjs7cUJBRWdCTDttQkFDREM7O2lCQUVIRTtjQUNIQzsyQkFHUU47MkJBSUFDOzs7aUJBSVdsQixRQUFRdEM7U0FBSyxPQUFPcUMsb0JBQXFCQyxRQUFPdEM7UUFBMUQ7bUJBQ0hIO2lCQUNGaUQ7Y0FDSk07OztpQkFHbUJkLFFBQVF0QztTQUFLLE9BQU9xQyxvQkFBcUJDLFFBQU90QztRQUExRDttQkFDSEg7aUJBQ0ZpRDtjQUNKTTtHQ2xPYixTQUFTVyw0QkFBNEI1SztJQUNuQyxPQUFPMkssZ0JBQWdCM0s7Y0FBa0IySyxnQkFBZ0IzSztHQUMzRDtHQUlBLFNBQVM2SywrQkFBK0JDLEtBQUtDLFFBQVFDLE1BQU1yQztJQUNoRCxJQUFMc0MsT0FBT0wsNEJBQTRCRztJQUN2QyxHQUFHRSxLQUFNO0tBQ0QsSUFBRmhKLElBQUsrSSxXQUFVQyxLQUFLRixRQUFPRCxLQUFJbkMsU0FBT3NDLEtBQUtILEtBQUlDLFFBQU9wQztLQUMxRCxHQUFHQSxTQUFTMUcsS0FBS0EsR0FBRyxPQUFPK0k7S0FDM0IsS0FBSS9JLE9BQU1BLEdBQUcsU0FBUUE7S0FDckIsSUFBSUEsYUFBYSxPQUFRQTs7SUFFM0IsT0FBTytJO0dBQ1Q7R2JpeEJBLFNBQVNFLGtCQUFrQjdLO0lBQ3pCLGNBQWVBLG9CQUFtQixvQkFBb0JBO0dBQ3hEO0dBdEJBLFNBQVM4SyxpQkFBaUI5SyxHQUN4QixPQUFRQSxhQUFhb0IsUUFDdkI7R2FyeUJBLFNBQVMySixxQkFBcUJwTDtJQUM1QixVQUFXQTtLQUFnQjtZQUNsQm1MLGlCQUFpQm5MO0tBQUk7WUFDckJrTCxrQkFBa0JsTDtLQUFJO1lBQ3RCQSxhQUFhK0QsU0FBUy9ELFNBQVVBLGNBQWFBLFlBQWEsQ0FFekQsSUFBSjBCLE1BQU0xQixVQUdWLE9BQVEwQixpQkFBY0E7WUFFZjFCLGFBQWFHO0tBQVE7bUJBQ2RIO0tBQWU7WUFDdEJBLGFBQWFxTDtLQUFRO1lBQ3JCckwsS0FBS0E7S0FBZTtZQUNwQkEsS0FBS0E7S0FBVzttQkFDVEE7S0FBaUI7bUJBQ2pCQSxlQUFlO0lBQy9CO0dBQ0Y7R0EwTUEsU0FBU3NMLGlCQUFrQnRMLEdBQUdTO0lBQzVCLEdBQUlULElBQUlTLEdBQUc7SUFBYSxHQUFJVCxLQUFLUyxHQUFHO0lBQVU7R0FDaEQ7R2IwYUEsU0FBUzhLLG9CQUFvQjNLLElBQUlDO0lBQy9CLE9BQVFELEtBQUtDLFdBQVFELEtBQUtDO0dBQzVCO0dBdEpBLFNBQVMySyxtQkFBbUI1SyxJQUFJQztJQUM3QkQsWUFBYU8sNkJBQTZCUDtJQUMxQ0MsWUFBYU0sNkJBQTZCTjtJQUMzQyxPQUFRRCxPQUFPQyxhQUFVRCxPQUFPQztHQUNsQztHYTNjQSxTQUFTNEssaUJBQWtCekwsR0FBR1MsR0FBR2tJO0lBQ3JCLElBQU4rQztJQUNKLE9BQVE7S0FDTixNQUFNL0MsU0FBUzNJLE1BQU1TLEdBQUk7TUFDYixJQUFOa0wsUUFBUVAscUJBQXFCcEw7TUFFakMsR0FBRzJMLGFBQWMsQ0FBRTNMLElBQUlBLE1BQU07TUFFbkIsSUFBTjRMLFFBQVFSLHFCQUFxQjNLO01BRWpDLEdBQUdtTCxhQUFjLENBQUVuTCxJQUFJQSxNQUFNO01BRzdCLEdBQUdrTCxVQUFVQyxNQUFPO09BQ2xCLEdBQUdELGNBQWU7UUFDaEIsR0FBR0M7U0FBZSxPQUNUZiwrQkFBK0I3SyxHQUFHUyxRQUFPa0k7UUFFbEQ7O09BRUYsR0FBR2lELGNBQWU7UUFDaEIsR0FBR0Q7U0FBZSxPQUNUZCwrQkFBK0JwSyxHQUFHVCxNQUFNMkk7UUFFakQ7O09BRUYsT0FBUWdELFFBQVFDOztNQUVsQixPQUFPRDs7U0FJTHRJLG9EQUNBOztTQUVNLElBQUZwQixJQUFJcUosaUJBQWlCdEwsTUFBTVMsT0FDL0IsR0FBSXdCLFFBQVEsT0FBUUEsT0FDcEI7O1NBR0FvQixvREFDQTs7U0FHQUE7U0FDQTs7U0FFQUEsZ0RBQ0E7O1NBRUEsR0FBSXJELE1BQU1TLEVBQUc7VUFDTCxJQUFGd0IsSUFBSXVKLG1CQUFtQnhMLEdBQUdTO1VBQzlCLEdBQUl3QixRQUFRLE9BQVFBOztTQUV0Qjs7U0FHQW9CO1NBQ0E7O1NBR0FBOztTQUNBOztTQUVBQTtTQUNBOztTQUVBQSxvREFDQTs7U0FFUyxJQUFMNEgsT0FBT0wsNEJBQTRCNUs7U0FDdkMsR0FBR2lMLFFBQVFMLDRCQUE0Qm5LO1VBQUcsT0FDaENULGdCQUFjUztTQUV4QixLQUFJd0ssTUFDRjVIO1NBQ0ksSUFBRnBCLElBQUlnSixLQUFLakwsR0FBRVMsR0FBRWtJO1NBQ2pCLEdBQUcxRyxLQUFLQSxHQUFFLE9BQ0QwRyxjQUFTMUc7U0FFbEIsR0FBR0EsT0FBT0EsUUFBSztTQUdmLEdBQUlBLFFBQVEsT0FBUUE7U0FDcEI7O1NBRU0sSUFBRkEsSUFBSWpDLFVBQVVTLEdBQUVrSTtTQUNwQixHQUFHMUcsS0FBS0EsR0FBRyxPQUNGMEcsY0FBUzFHO1NBRWxCLEdBQUdBLE9BQU9BLFFBQUs7U0FHZixHQUFJQSxRQUFRLE9BQVFBO1NBQ3BCOztTQUVBakMsTUFBS0E7U0FDTFMsTUFBS0E7U0FDTCxHQUFJVCxJQUFJUyxHQUFHO1NBQ1gsR0FBSVQsSUFBSVMsR0FBRztTQUNYLEdBQUlULEtBQUtTLEVBQUc7VUFDVixLQUFLa0ksT0FBTyxPQUFPZjtVQUNuQixHQUFJNUgsS0FBS0EsR0FBRztVQUNaLEdBQUlTLEtBQUtBLEdBQUc7O1NBRWQ7O1NBZUEsR0FBSVQsSUFBSVMsR0FBRztTQUNYLEdBQUlULElBQUlTLEdBQUc7U0FDWCxHQUFJVCxLQUFLUyxFQUFHO1VBQ1YsS0FBS2tJLE9BQU8sT0FBT2Y7VUFDbkIsR0FBSTVILEtBQUtBLEdBQUc7VUFDWixHQUFJUyxLQUFLQSxHQUFHOztTQUVkOztTQUVBLEdBQUdULE1BQU1TLEVBQUcsQ0FDVixLQUFLa0ksT0FBTyxPQUFPZixLQUNuQixXQUVGOztTQUVBLElBQUk1SCxJQUFJZ0MsdUJBQXVCaEMsSUFDM0JTLElBQUl1Qix1QkFBdUJ2QjtTQUMvQixHQUFHVCxNQUFNUyxFQUFHLENBQ1YsR0FBR1QsSUFBSVMsR0FBRyxZQUNWLEdBQUdULElBQUlTLEdBQUc7U0FFWjs7U0FFQSxJQUFJVCxJQUFJQSxjQUNKUyxJQUFJQTtTQUNSLEdBQUdULE1BQU1TLEVBQUcsQ0FDVixHQUFHVCxJQUFJUyxHQUFHLFlBQ1YsR0FBR1QsSUFBSVMsR0FBRztTQUVaOzs7O1NBSUEsR0FBR2lFLHlCQUF5QmlILE9BQVE7VUFDbEN0STtVQUNBOztTQUVGLEdBQUlyRCxZQUFZUyxVQUFVLE9BQVFULFdBQVdTO1NBQzdDLEdBQUlULGNBQWMwTCxXQUFXMUwsR0FBR1M7U0FDaEM7OztLQUdKLEdBQUlpTCxtQkFBbUI7S0FDakIsSUFBRnpMLElBQUl5TDtLQUNSakwsSUFBSWlMO0tBQ0oxTCxJQUFJMEw7S0FDSixHQUFJekwsUUFBUUQsVUFBVTBMLFdBQVcxTCxHQUFHUyxHQUFHUjtLQUN2Q0QsSUFBSUEsRUFBRUM7S0FDTlEsSUFBSUEsRUFBRVI7O0dBRVY7R0FHQSxTQUFTNEwsYUFBYzdMLEdBQUdTLEdBQUssT0FBT2dMLGlCQUFrQnpMLEdBQUdTLFNBQVU7R1g3THJFLFNBQVNxTCw2QkFBZ0MsV0FBWTtHRmljckQsU0FBU0Msa0JBQWtCbE07SUFDekIsR0FBSUEsU0FBU3dEO0lBQ2IsV0FBVzVCLFFBQVE1QixpQkFBV0E7R0FDaEM7R0FxRkEsU0FBU21NLGdCQUFnQjNMLEdBQUdKLEdBQUdTLEdBQUdhO0lBQ2hDLEdBQUliO0tBQU8sR0FDTFQsV0FBV1MsS0FBS0wsT0FBUUEsWUFBMEJLLEtBQUtMO01BQWMsR0FDbkVrQixPQUFRO09BQ1ZsQjtPQUNBQTs7VUFDSztPQUNMQSxNQUFNVyxnQkFBaUJOLEdBQUdQLG9CQUFvQm9CO09BQzlDbEIsTUFBT0ssS0FBS0w7O1NBRVQ7TUFDTCxHQUFJQSxVQUFzQkUsNEJBQTRCRjtNQUN0RCxJQUFLSyxLQUFLVCxHQUFHQSxJQUFJUyxHQUFHVCxLQUFLSSxJQUFJSixLQUFLc0I7O0lBR3RDO0dBQ0Y7R010R0EsU0FBUzBLLHFCQUFxQjVMO0lBQzVCLElBQUl3SDtJQUNKeEgsSUFBSTJCLHVCQUF1QjNCO0lBQzNCd0gsUUFBT3hIO0lBQ1AsR0FBS0EsZ0JBQWtCd0gsUUFBUUEsS0FBTSxPQUFPQTtJQUM1Q3hILElBQUlBO0lBQ0p3SCxRQUFPeEg7SUFDUCxHQUFNQSxnQkFBa0J3SCxRQUFRQSxPQUFTLG1CQUFtQnhILElBQUksT0FBT3dIO0lBQ2pFLElBQUZxRSxJQUFJLCtEQUErRDdMO0lBRXZFLEdBQUc2TCxFQUFFO0tBQ0g7TUFBSUMsS0FBS0Q7TUFDTEUsV0FBV0MsU0FBU0gsT0FBT0EsT0FBT0M7TUFDbENHLFlBQVlKLGdCQUFZQztLQUM1QnRFLE1BQU11RSxXQUFXOUwsWUFBWWdNO0tBQzdCLE9BQU96RTs7SUFFVCxHQUFHLHlCQUF5QnhILElBQUksT0FBT3dFO0lBQ3ZDLEdBQUcsdUJBQXVCeEUsSUFBSSxTQUFRd0U7SUFDdENvRTtHQUNGO0dRbmZBLFNBQVNzRCxrQkFBbUJDO0lBQzFCQSxNQUFNeEssdUJBQXVCd0s7SUFDckIsSUFBSjNNLE1BQU0yTTtJQUNWLEdBQUkzTSxVQUFVd0Q7SUFDUjtLQUFGbkQ7Ozs7Ozs7Ozs7OztJQUlKLElBQVcsSUFBRkQsT0FBT0EsSUFBSUosS0FBS0ksSUFBSztLQUN0QixJQUFGc0IsSUFBSWlMLFdBQVd2TTtLQUNuQixPQUFRc0I7O1FBRU5yQixpQkFBaUI7OztRQUVqQkEsY0FBY3FCLEdBQUc7O1FBRWpCckIsZ0JBQWdCOztRQUVoQkEsb0JBQW9COzs7Ozs7Ozs7O1FBR3BCQTtRQUNBLE1BQU9xQixJQUFFaUwsZUFBZXZNLFNBQVNzQixVQUFVQSxPQUFRLENBQ2pEckIsVUFBVUEsZUFBZXFCLEdBQUd0QjtRQUU5QkE7UUFDQTs7UUFFQUM7UUFDQUQ7UUFDQSxNQUFPc0IsSUFBRWlMLGVBQWV2TSxTQUFTc0IsVUFBVUEsT0FBUSxDQUNqRHJCLFNBQVNBLGNBQWNxQixHQUFHdEI7UUFFNUJBOzs7UUFFQUM7O1FBRUFBLGFBQWE7O1FBRWJBLGFBQWE7O1FBRWJBLGFBQWFBLG9CQUFvQjs7UUFFakNBLFlBQVk7Ozs7UUFFWkEscUJBQXFCQSxTQUFTcUIsR0FBRzs7OztRQUVqQ3JCO1FBQXFCQTtRQUNyQkEsU0FBU3FCO1FBQWtCOzs7SUFHL0IsT0FBT3JCO0dBQ1Q7R0FJQSxTQUFTdU0sdUJBQXVCdk0sR0FBR3dNO0lBQ2pDLEdBQUl4TSxhQUFhd00sWUFBWUE7SUFDckIsSUFBSjdNLE1BQU02TTtJQUVWLEdBQUl4TSxpQkFBaUJBLGNBQWNBLHFCQUFxQkw7SUFDeEQsR0FBSUssWUFBYSxDQUNmLEdBQUlBLGFBQWFMLFVBQ2pCLEdBQUlLLGNBQWNMO0lBR1QsSUFBUDBJO0lBQ0osR0FBSXJJLG9CQUFvQkE7S0FDdEIsSUFBVyxJQUFGRCxJQUFJSixLQUFLSSxJQUFJQyxTQUFTRCxLQUFLc0k7SUFDdEMsR0FBSXJJO0tBQWMsR0FDWkE7TUFBWXFJO2FBQ1BySSxvQkFBb0JxSSxVQUFVckk7SUFFekMsR0FBSUEsZUFBZUEsYUFBYXFJO0lBQ2hDLEdBQUlySSxlQUFlQSxjQUFjcUksVUFBVXJJO0lBQzNDLEdBQUlBLG9CQUFvQkE7S0FDdEIsSUFBVyxJQUFGRCxJQUFJSixLQUFLSSxJQUFJQyxTQUFTRCxLQUFLc0k7SUFDdENBLFVBQVVtRTtJQUNWLEdBQUl4TSxrQkFDRixJQUFXLElBQUZELElBQUlKLEtBQUtJLElBQUlDLFNBQVNELEtBQUtzSTtJQUN0QyxPQUFPckYsdUJBQXVCcUY7R0FDaEM7R1I0VUEsU0FBU29FLGtCQUFtQkgsS0FBS3ZLO0lBQy9CLFNBQVMySyxRQUFRM0ssR0FBRTRLO0tBQ2pCLEdBQUl2TSxTQUFTMkI7TUFBVSxPQUNkQSxVQUFVNEs7U0FDWjtNQUNDLElBQUZ4SyxJQUFJZ0ssU0FBU3BLO01BQ2pCLEdBQUlJLE9BQVE7T0FDVkE7T0FDQUosS0FBSzNCLGFBQVkrQjtPQUNqQkosS0FBSyxJQUFLOEIsTUFBTTFCO09BQ2hCLEdBQUd3SyxRQUNENUssSUFBSUEsVUFBVSxJQUFLOEIsTUFBTThJO09BRTNCLE9BQU81Szs7O09BRUosT0FBT0EsVUFBVTRLOztJQUUxQjtJQUNBLElBQUl4TSxHQUFHSCxJQUFJcU0sa0JBQWtCQyxNQUN6Qk0sT0FBUTVNLGlCQUFjQTtJQUMxQixHQUFJK0IsU0FBVUEsY0FBWUEsT0FBTTRDLFNBQVcsQ0FBRTNFLGNBQWErQixNQUFLQTtJQUMvRCxHQUFJd0MsTUFBTXhDLEdBQUk7S0FBRTVCO0tBQVdIOztjQUNqQnNFLFNBQVN2QyxHQUFJO0tBQUU1QjtLQUFXSDs7O0tBRWxDLE9BQVFBOztRQUVOLElBQUlHLElBQUk0QixnQkFBZ0I2SyxPQUVwQjdNLElBQUlJO1FBQ1IsR0FBSUEsU0FBU0o7U0FDWEksSUFBSUEsV0FBWUosZUFBZUksUUFBU0o7UUFDMUM7O1FBRUFJLElBQUl1TSxRQUFRM0ssR0FBRzZLLE9BQU87O1FBRXRCQSxPQUFPQSxPQUFLQTtRQUNaek0sSUFBSTRCLGdCQUFnQjZLO1FBQ3BCLElBQUloTixJQUFJTyxnQkFDSitGLFFBQU8vRixRQUFRUDtRQUNuQixHQUFJc0csYUFBWW5FLGFBQWFBLHNCQUFzQjZLLEtBQU07U0FFakQsSUFBRjdNLElBQUlIO1NBQU8sTUFBT08sU0FBU0osV0FBV0E7U0FDMUMsR0FBSUksU0FBU0osV0FBV0E7U0FDeEJJLElBQUlBLFdBQVdKLFNBQVNJLFFBQVFQO1NBQ2hDRyxJQUFJSTtTQUNKLEdBQUlBLFNBQVNKO1VBQ1hJLElBQUlBLFdBQVlKLGVBQWVJLFFBQVNKO1NBQzFDOztZQUNLO1NBQ0MsSUFBRjhNLElBQUlEO1NBQ1IsR0FBSTFHLFFBQVM7VUFBRTJHLEtBQUszRztVQUFTL0YsSUFBSTRCLFVBQVU4Szs7O1VBQ3RDLE1BQU8xTSxJQUFJNEIsVUFBVThLLElBQUkxTSxXQUFXeU0sVUFBVUM7U0FDbkQsR0FBSUEsRUFBRztVQUVDLElBQUY5TSxJQUFJSTtVQUFjLE1BQU9BLFNBQVNKLFdBQVdBO1VBQ2pELEdBQUlJLFNBQVNKLFdBQVdBO1VBQ3hCSSxJQUFJQSxXQUFXSjs7O1FBR25COztJQUVKLE9BQU93TSx1QkFBdUJ2TSxHQUFHRztHQUNuQztHSTVkQSxTQUFTMk0sZ0JBQWdCUixLQUFLdk07SUFDNUIsR0FBSStCLHVCQUF1QndLO0tBQWMsT0FBT3RKLDRCQUEwQmpEO0lBQ3BFLElBQUZDLElBQUlxTSxrQkFBa0JDO0lBQzFCLEdBQUl2TSxPQUFPLEdBQU1DLGFBQWMsQ0FBRUEsY0FBYUQsTUFBS0EsU0FBVUE7SUFDdkQsSUFBRkksSUFBSUosV0FBV0M7SUFDbkIsR0FBSUEsWUFBYTtLQUNmQTtLQUNNLElBQUZlLElBQUlmLFNBQVNHO0tBQ2pCLEdBQUlZLE9BQU9aLElBQUlXLGdCQUFpQkMsVUFBVVo7O0lBRTVDLE9BQU9vTSx1QkFBdUJ2TSxHQUFHRztHQUNuQztHSHlHb0IsSUFBaEI0TTtHQVdKLFNBQVNDLG1CQUNQLE9BQU9ELGtCQUNUO0dQd2pCQSxTQUFTRSx3QkFBd0I5TTtJQUMvQixHQUFHZSxjQUFjZixJQUNmLE9BQU9BO0lBQ1QsT0FBT2dCLG1CQUFtQmhCO0dBQUk7R2U1ckJoQyxTQUFTK007SUFDUCxjQUNTNUs7cUJBQ0tBO3FCQUNBQTtHQUNoQjtHQzBCQSxTQUFTNks7SUFDUCxTQUFTQyxNQUFNQztLQUNiLEdBQUlBLHdCQUF3QixZQUFZQTtLQUN4QztJQUNGO0lBRUEsU0FBU0MsTUFBTUQ7S0FFYjtNQUFJRTs7TUFDQUMsU0FBU0QsbUJBQW1CRjtNQUM1QkksU0FBU0Q7TUFDVEUsUUFBUUMsUUFBUUYsVUFBVUE7S0FHOUIsR0FBSUUsUUFBUUgsYUFBYUUsT0FBUTtNQUMvQixJQUFJRSxPQUFRSixpQkFDUkssTUFBT0w7TUFDWCxRQUFRSSxNQUFNUCxlQUFlTyxjQUFjQzs7S0FFN0M7SUFDRjtJQUNBLE9BQUdYLHVCQUF3QjVLO2VBQXNCQTtjQUN4Q0EsMENBQTBDZ0wsUUFBUUY7Y0FFL0NBO0dBQ2Q7R0FDcUIsSUFBakJVLG1CQUFtQlg7R0F2RHZCLFNBQVNZLG9CQUFvQjdFO0lBQzNCLE9BQVFBLDBCQUEyQkEsYUFBY0E7R0FDbkQ7R0FJQSxHQUFHZ0UsdUJBQXdCNUssc0JBQXNCQTtJQUMxQixJQUFqQjBMLG1CQUFtQjFMOztJQUVGLElBQWpCMEw7R0FDTkEsbUJBQW1CRCxvQkFBb0JDO0dBa0R2QyxTQUFTQyxlQUFnQi9FO0lBQ3ZCQSxPQUFLK0Qsd0JBQXdCL0Q7SUFDN0IsS0FBSzRFLGlCQUFpQjVFLE9BQ3BCQSxPQUFPOEUsbUJBQW1COUU7SUFDNUI7S0FBSWdGLFFBQVFKLGlCQUFpQjVFO0tBQ3pCNkIsT0FBT21EO0tBQ1BDO0lBQ0osSUFBVSxJQUFGcE8sT0FBT0EsSUFBRWdMLGFBQWFoTDtLQUFJLE9BQ3pCZ0wsS0FBS2hMOztRQUNELEdBQUdvTyxrQkFBZ0JBLGFBQWE7aUJBQ2pDO2dCQUNEO2dCQUNBQSxXQUFXcEQsS0FBS2hMLEtBQUk7O0lBRy9Cb08sY0FBY0Q7SUFDZEMsYUFBYWpGO0lBQ2IsT0FBT2lGO0dBQ1Q7R2hCbEJBLFNBQVNDLG1CQUFtQmpPO0lBQzFCLFFBQVNJLFFBQVFhLElBQUliLEdBQUdjLEdBQUdhLEdBQUduQyxPQUFPUyxJQUFJTCxVQUFVSixJQUFJUyxHQUFHVCxJQUFLO0tBQzdEc0IsSUFBSWxCLGFBQWFKO0tBQ2pCLEdBQUlzQixTQUFVO01BQ1osSUFBVyxJQUFGekIsSUFBSUcsT0FBUUgsSUFBSVksTUFBT2EsSUFBSWxCLGFBQWFQLFlBQVlBLEtBQUk7TUFDakUsR0FBSUEsSUFBSUcsUUFBUztPQUFFcUI7T0FBZ0JiLEtBQUthO09BQUdBO09BQVFiLEtBQUtKLFFBQVFKLEdBQUdIOzs7T0FDOUR3QixLQUFLakIsUUFBUUosR0FBR0g7TUFDckIsR0FBSUEsS0FBS1ksR0FBRztNQUNaVCxJQUFJSDs7S0FFTixHQUFJeUIsVUFBVztNQUNiRCxLQUFLbkIsMkJBQTRCb0I7TUFDakNELEtBQUtuQiwyQkFBNEJvQjs7YUFDeEJBLGNBQWNBO01BQ3ZCRDtPQUFLbkI7Z0JBQTRCb0IsZ0JBQ0NBLHNCQUNEQTs7T0FDeEJBLGVBQWV0QixTQUFTUyxNQUN2QjBCLElBQUkvQixhQUFhSjtVQUFvQm1DO01BRS9DZDtTQUNLO01BQ0xyQjtNQUNBc0IsS0FBS0EsV0FBV2E7TUFDaEJkO09BQUtuQjtnQkFBNEJvQjtnQkFDQ0E7Z0JBQ0FBO2dCQUNEQTs7S0FFbkMsR0FBSUQsZ0JBQWlCLENBQUNBLGdCQUFnQmIsS0FBS2EsR0FBR0E7O0lBRWhELE9BQU9iLElBQUVhO0dBQ1g7R0FtbUJBLFNBQVNpTix3QkFBeUJsTztJQUNoQyxPQUFJZSxjQUFjZjtjQUNUNkMsdUJBQXVCN0M7Y0FDcEI2Qyx1QkFBdUJvTCxtQkFBbUJqTztHQUN4RDtHaUJwb0JlO0lBQVhtTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJKLFNBQVNDLG1CQUFtQkMsTUFBTUMsU0FBU3BCLE1BQU1xQjtJQUNuQyxJQUFSQyxVQUFVTCxtQkFBbUJFO0lBQ2pDLEdBQUlHLFlBQWEsQ0FFZixHQUFJRCxTQUFTeE8sTUFDWHdPLGdCQUdGQyxjQUFtQkQ7SUFFWjtLQUFMakw7UUFDRmtMO1FBQ0FOLHdCQUF3Qkk7UUFDeEJKLHdCQUF3QmhCO0lBRTFCLE9BQU81SjtHQUNUO0dkVXNCLElBQWxCbUw7R0FXSixTQUFTQyxpQkFBaUJDLElBQ3hCLE9BQU9GLGtCQUFrQkUsSUFDM0I7R0VqSEEsU0FBU0MscUJBQXNCdk4sS0FBS2lDO0lBQVEsTUFBTVosNEJBQTRCLElBQUlyQixZQUFZaUM7R0FBUTtHTG1ldEcsU0FBU3VMLG9CQUFxQmxQO0lBQzVCLE1BQU1BLGFBQWFRLGFBQ2pCUixRQUFRUSxXQUFXUjtJQUVyQixXQUFXeUIsV0FBVXpCLEdBQUVBO0dBQ3pCO0dDL2VBLFNBQVNtUCxxQkFBc0IvTDtJQUM3QkQsdUJBQXVCUiw0QkFBNEJTO0dBQ3JEO0dld0tBLFNBQVNnTSx3QkFBd0JoRztJQUMvQitGLHFCQUFzQi9GO0dBQ3hCO0doQmdSQSxTQUFTaUcsMEJBQTJCaFA7SUFDbEMsR0FBSUEsVUFBc0JFLDRCQUE0QkY7SUFDdEQsT0FBT0E7R0FDVDtHQWlMQSxTQUFTaVAscUJBQXFCalAsR0FBSyxPQUFPQSxJQUFJO0dnQnRsQjlDLFNBQVNrUCxTQUFXO0dFNk5wQixTQUFTQyxXQUFXMU4sU0FDbEJELFlBQVlDLFFBQ2Q7R0FDQTBOLDJCQUEyQkQ7R0FDM0JDLG1DQUFtQ0E7R0FDbkNBO2FBQXlDM1A7S0FDL0IsSUFBSjRQLE1BQU01TjtLQUNWQSxZQUFZa0ssa0JBQWtCbE07S0FDOUJjLGdCQUFnQjhPLFFBQVE1TixjQUFjaEM7SUFIUjtHQUtoQzJQO2VBQ0UsT0FBT0YscUJBQXFCek4sV0FEQTtHQUc5QjJOO2FBQXNDM0osUUFBTzZKLEtBQUlDLEtBQUk5UDtLQUMxQyxJQUFMK1AsT0FBTy9OO0tBQ1gsR0FBR2dFLFNBQVNoRyxPQUFPK1AsS0FBTTtNQUN2QixJQUFJQyxVQUFVOUQsa0JBQWtCbEcsU0FBU2hHLE1BQ3JDaVEsV0FBV2pPO01BQ2ZBLFlBQVlnTztNQUNabFAsZ0JBQWdCbVAsYUFBYWpPLGNBQWMrTjs7S0FFN0NqUCxnQkFBZ0J1TyxvQkFBb0JRLE1BQU1DLEtBQUs5TixXQUFXZ0UsUUFBUWhHO0tBQ2xFO0lBVDJCO0dBVzdCMlA7YUFBcUMzSixRQUFPNkosS0FBSUMsS0FBSTlQO0tBQ3pDLElBQUwrUCxPQUFPL047S0FDWCxHQUFHZ0UsU0FBU2hHLE9BQU8rUCxNQUNqQi9QLE1BQU0rUCxPQUFPL0o7S0FFZixHQUFHaEcsSUFBSztNQUNHLElBQUwySCxPQUFPdUUsa0JBQWtCbE07TUFDN0JjLGdCQUFnQmtCLFdBQVdnRSxRQUFRMkIsU0FBUzNIO01BQzVDNlAsUUFBUUwsMEJBQTBCN0gsT0FBT21JOztLQUUzQyxPQUFPOVA7SUFWbUI7R0F3RDVCLFNBQVNrUSxTQUFTM0csTUFBTTRHLE1BQUtDO0lBQzNCcE8sWUFBWW1PO0lBQ1puTyxZQUFZdUg7SUFDWnZILGFBQWFvTztHQUNmO0dBRUFGOztLQUNFWixxQkFBcUJ0TjtJQURTO0dBR2hDa087ZUFDRSxHQUFHbE8sV0FBVyxPQUFPQSxvQkFDckJBLGtCQUYwQjtHQUk1QmtPO2FBQXFDbEssUUFBTzZKLEtBQUlDLEtBQUk5UDtLQUNsRCxHQUFHZ0MsV0FBVyxPQUFPQSxnQkFBZ0JnRSxRQUFPNkosS0FBSUMsS0FBSTlQO0tBQ3BEZ0M7SUFGeUI7R0FJM0JrTzthQUFvQ2xLLFFBQVE2SixLQUFLQyxLQUFLOVA7S0FDcEQsR0FBR2dDLFdBQVcsT0FBT0EsZUFBZWdFLFFBQVE2SixLQUFLQyxLQUFLOVA7S0FDdERnQztJQUZ3QjtHQUkxQmtPLHNDQUNFbE8sWUFBWVksVUFEYTtHQXRWM0IsU0FBU3lOLGFBQWNwQyxNQUFNNU47SUFDM0IyQjtJQUNBQSxZQUFZaU07SUFDWmpNLGlCQUFpQjNCO0dBQ25CO0dBQ0FnUSxxQ0FBcUM5RyxNQUNuQyxPQUFRdkgsWUFBWXVILEtBRE07R0FHNUI4RzthQUF1RDlHO0tBQ3JELElBQUk2QixPQUFPN0IsaUJBQ1B2QjtLQUNKLElBQVUsSUFBRjVILE9BQU9BLElBQUlnTCxpQkFBaUJoTCxJQUFJO01BQ3RDNEgsT0FBT29ELEtBQUtoTDtNQUNaLEdBQUc0QixhQUFhZ0csTUFBTTtNQUN0QmhHLGFBQWFnRyxPQUFPc0k7O0lBTnNCO0dBUzlDRDthQUF3QzlHLE1BQ3RDLE9BQU8sV0FBV0EsUUFBTUEsT0FBTUEsV0FERDtHQUcvQjhHO2FBQXlDOUc7S0FDdkMsS0FBSXZILGFBQWF1SCxTQUFTdkgsZUFBZ0I7TUFDaEM7T0FBSmdHO1NBQU1oRztXQUFlcUIsdUJBQXVCckIsWUFBWXFCLHVCQUF1QmtHO01BQ25GLEdBQUd2QixVQUFXO09BQ1poRywwQkFBMEJ1SDtPQUMxQnZILGFBQWF1SCxZQUFVb0csV0FBV3ROLHFCQUFxQjJGOzs7SUFMN0I7R0FTaENxSTthQUF5QzlHO0tBRXZDLEdBQUdBLFlBQVk7S0FFQSxJQUFYZ0gsYUFBYXZPLFdBQVd1SDtLQUM1QixHQUFHdkgsYUFBYXVPLGFBQWE7S0FFN0J2TyxZQUFZdUg7S0FDWixPQUFPdkgsYUFBYXVIO0lBUlU7R0FVaEM4RzthQUF5QzlHLE1BQ3ZDLE9BQUd2SCxZQUFZdUgsV0FBVXZILFlBQVl1SCxjQURQO0dBUWhDOEc7YUFBd0M5RyxNQUFLaUgsTUFBTUM7S0FDbEMsSUFBWDlCLGFBQWE4QixjQUFjdkI7S0FDL0IsR0FBR2xOLFlBQVl1SDtNQUFPLEdBQ2hCb0Y7T0FDRlM7U0FBcUJULFlBQVlDLHNDQUFzQzVNLFFBQVF1SDs7T0FHL0UrRixxQkFBcUIvRjtLQUdkLElBQVBtSCxTQUFTLG9CQUFvQm5IO0tBQ2pDbUgsU0FBVUEsVUFBVUE7S0FDcEIsS0FBSTFPLFlBQVkwTztNQUFRLEdBQ2xCL0I7T0FDRlM7U0FBcUJULFlBQVlDLHNDQUFzQzVNLFFBQVEwTzs7T0FHL0VwQixxQkFBcUJvQjtLQUd6QixLQUFJMU8sWUFBWTBPO01BQVEsR0FDbEIvQjtPQUNGUztTQUFxQlQsWUFBWUMsdUNBQXVDNU0sUUFBUTBPOztPQUdoRnBCLHFCQUFxQm9CO0tBR3pCMU8sMEJBQTBCQSxXQUFXdUg7SUE1QlI7R0E4Qi9COEc7YUFBd0M5RyxNQUFNa0g7S0FDNUM7TUFBSTlCLGFBQWE4QixjQUFjdkI7TUFDM0JxQixhQUFjaEgsa0JBQWdCdkgsV0FBV3VIO01BQ3pDbEksUUFBUXNQLGFBQWFKO0tBQ3pCLEtBQUl2TyxZQUFZdUg7TUFBTyxHQUNqQm9GO09BQ0ZTO1NBQXFCVCxZQUFZQyxzQ0FBc0M1TSxRQUFRdUg7O09BRy9FK0YscUJBQXFCL0Y7S0FHekIsS0FBSXZILFlBQVl1SDtNQUFPLEdBQ2pCb0Y7T0FDRlM7U0FBcUJULFlBQVlDLHVDQUF1QzVNLFFBQVF1SDs7T0FHaEYrRixxQkFBcUIvRjtLQUd6QixRQUFRbkksS0FBS1k7TUFBYyxHQUN0QlosUUFBUUM7T0FBSSxHQUNUc047UUFDRlM7VUFBcUJULFlBQVlDLHlDQUF5QzVNLFFBQVF1SDs7UUFFbEYrRixxQkFBcUJ0TixRQUFRdUg7S0FJbkMsT0FBT3ZILGFBQWF1TztJQTdCUztHQStCL0JGO2FBQTBDOUc7S0FDekIsSUFBWGdILGFBQWNoSCxrQkFBZ0J2SCxXQUFXdUg7S0FDN0MsS0FBSXZILFlBQVl1SDtNQUNkK0YscUJBQXFCL0Y7S0FFdkIsS0FBSXZILFlBQVl1SCxPQUNkK0YscUJBQXFCL0Y7S0FFdkIsSUFBSWxJLFFBQVFzUCxhQUFhSix5QkFDckJLLFdBQ0F6UTtLQUNKLFFBQVFpQixLQUFLWSxhQUFjO01BQ25CLElBQUZxSyxJQUFJakwsUUFBUUM7TUFDaEIsR0FBR2dMLE9BQU11RSxLQUFLdkUsTUFBTyxDQUFDdUUsS0FBS3ZFLGNBQWNsTSxPQUFPa007O0tBRWxELE9BQU9sTTtJQWZ3QjtHQWlCakNrUTthQUEwQzlHLE1BQU1rSDtLQUM5QztNQUFJOUIsYUFBYThCLGNBQWN2QjtNQUUzQi9PLElBQUk2QixhQUFhdUg7TUFDakI3SDtNQUNBdEI7S0FDSjs7Y0FDRSxHQUFJc0I7ZUFBRyxHQUNEaU47Z0JBQ0ZTO2tCQUFxQlQ7a0JBQVlDLHdDQUF3QzVNLFFBQVF1SDs7Z0JBR2pGK0YscUJBQXFCL0Y7Y0FHekIsR0FBR25KLEtBQUtELFVBQVUsT0FBT0k7Y0FDZixJQUFOc1EsUUFBUTFRLEVBQUVDO2NBQ2RBO2NBQ0EsY0FBZXlRO2FBWkk7OztjQWVqQixHQUFJblA7ZUFBRyxHQUNEaU47Z0JBQ0ZTO2tCQUFxQlQ7a0JBQVlDLHdDQUF3QzVNLFFBQVF1SDs7Z0JBR2pGK0YscUJBQXFCL0Y7Y0FHekI3SDtjQUNBdkI7YUFWWTtJQXBCZTtHQWtDakNrUTthQUF5QzlHO0tBQ3ZDLEdBQUdBLFlBQWE7S0FDRCxJQUFYZ0gsYUFBYXZPLFdBQVd1SDtLQUM1QixPQUFPdkgsYUFBYXVPO0lBSFU7R0FLaENGO2FBQXlDOUc7S0FDaEMsSUFBSHVILEtBQUs5TyxhQUFhdUg7S0FDdEIsT0FBT3ZILGFBQWF1SDtLQUNwQixPQUFPdUg7SUFIdUI7R0FLaENUO2FBQXVDOUcsTUFBTWxKO0tBQzNDLElBQUk4UDtLQUNKLEdBQUc5UCxZQUFZQTtNQUNiaVA7UUFBcUJ0TixRQUFRdUg7O0tBQy9CLEdBQUdsSixVQUFVQTtNQUNYaVA7UUFBcUJ0TixRQUFRdUg7O0tBQy9CdkgsWUFBWXVIO0tBQ1osR0FBSXZILGFBQWF1SCxNQUFPO01BQ3RCLEdBQUl2SCxZQUFZdUg7T0FBTytGLHFCQUFxQnROLFFBQVF1SDtNQUNwRCxHQUFJbEosWUFBWUE7T0FBUWlQLHFCQUFxQnROLFFBQVF1SDtNQUNyRDRHLE9BQU9uTyxhQUFhdUg7TUFDcEIsR0FBR2xKLFlBQVk4UDs7YUFDTjlQLFNBQVU7TUFDbkIyQiwwQkFBMEJ1SDtNQUMxQnZILGFBQWF1SCxZQUFZb0csV0FBV3pEO01BQ3BDaUUsT0FBT25PLGFBQWF1SDs7O01BRXBCZ0csd0JBQXlCdk4sUUFBUXVIO0tBRW5DLFdBQVcyRyxTQUFTbE8sUUFBUXVILE9BQU80RyxNQUFNOVA7SUFuQmI7R0FzQjlCZ1E7YUFBdUM5RyxNQUFNbEo7S0FDM0MsSUFBSThQO0tBQ0osR0FBRzlQLFlBQVlBO01BQ2JpUDtRQUFxQnROLFFBQVF1SDs7S0FDL0IsR0FBR2xKLFVBQVVBO01BQ1hpUDtRQUFxQnROLFFBQVF1SDs7S0FDL0J2SCxZQUFZdUg7S0FDWixHQUFJdkgsYUFBYXVILE1BQU87TUFDdEIsR0FBSXZILFlBQVl1SDtPQUFPK0YscUJBQXFCdE4sUUFBUXVIO01BQ3BELEdBQUlsSixZQUFZQTtPQUFRaVAscUJBQXFCdE4sUUFBUXVIO01BQ3JENEcsT0FBT25PLGFBQWF1SDtNQUNwQixHQUFHbEosWUFBWThQOzthQUNOOVAsU0FBVTtNQUNuQjJCLDBCQUEwQnVIO01BQzFCdkgsYUFBYXVILFlBQVlvRyxXQUFXekQ7TUFDcENpRSxPQUFPbk8sYUFBYXVIOzs7TUFFcEJnRyx3QkFBeUJ2TixRQUFRdUg7S0FFbkMsV0FBVzJHLFNBQVNsTyxRQUFRdUgsT0FBTzRHLE1BQU05UDtJQW5CYjtHQXNCOUJnUTthQUEyQzlHLE1BQUt0SDtLQUM5QyxJQUFJa087S0FDSixHQUFHbk8sYUFBYXVIO01BQU8rRixxQkFBcUJ0TixRQUFRdUg7S0FDcEQsR0FBRytCLGlCQUFpQnJKLFVBQ2xCa08sV0FBV1IsV0FBVzFOO0tBQ3hCLEdBQUdvSixrQkFBa0JwSjtNQUNuQmtPLFdBQVdSLFdBQVd0TixxQkFBcUJKO2FBQ3JDQSxtQkFBbUJpQztNQUN6QmlNLFdBQVdSLFdBQVdOLG9CQUFvQnBOO29CQUM3QkE7TUFDYmtPLFdBQVdSLFdBQVd6TixzQkFBc0JEO2FBQ3RDQSxpQkFBa0I7TUFDZDtPQUFOOE87U0FBUTFPLHFCQUFxQnFNLHdCQUF3QnpNO01BQ3pEa08sV0FBV1IsV0FBV29COztLQUV4QixHQUFHWixLQUFLO01BQ05uTywwQkFBMEJ1SDtNQUMxQnZILGFBQWF1SCxRQUFRNEc7OztNQUVsQmI7UUFBcUJ0TixRQUFRdUg7SUFuQkg7R0FzQmpDOEcscUNBQXFDQTtHbEJnWnJDLFNBQVNXLHNCQUFzQnhRLEdBQzdCLE9BQU9BLFNBQ1Q7R0FmQSxTQUFTeVEsdUJBQXdCelEsR0FBR0osR0FDbEMsT0FBT0ksYUFBYUosR0FDdEI7R0FsTEEsU0FBUzhRLDJCQUE0QjFRO0lBQ25DLElBQUlLLElBQUltUSxzQkFBc0J4USxJQUMxQkwsUUFBUVEsV0FBV0UsSUFDbkJUO0lBQ0osTUFBT0EsSUFBSVMsR0FBR1QsS0FBS0QsRUFBRUMsS0FBSzZRLHVCQUF1QnpRLEdBQUVKO0lBQ25ELE9BQU9EO0dBQ1Q7R2V2T0EsU0FBU2dSLFNBQVNDLElBQUloQjtJQUNwQnBPLFVBQVVxUDtJQUNWclAsVUFBVW9QO0lBQ1ZwUCxhQUFhb087R0FDZjtHQUNBZSx5QkFBeUJ6QjtHQUN6QnlCLGlDQUFpQ0E7R0FFakNBO2FBQXVDblI7S0FDckMsSUFDRWdDLHNCQUFzQkEsU0FBUWhDO1dBQ3ZCc1IsS0FDUGhDLHFCQUFxQmdDO0lBSks7R0FPOUJIOztLQUNFLElBQ0UsT0FBT25QLGtCQUFrQkE7V0FDbEJzUCxLQUNQaEMscUJBQXFCZ0M7SUFKRztHQU81Qkg7YUFBb0NuTCxRQUFPNkosS0FBSTBCLFlBQVd2UjtLQUN4RDtNQUNFLEdBQUdnQztPQUNEQSxrQkFBa0JBLFNBQVM2TixLQUFLMEIsWUFBWXZSOztPQUU1Q2dDLGtCQUFrQkEsU0FBUzZOLEtBQUswQixZQUFZdlIsS0FBS2dHOztXQUM1Q3NMLEtBQ1BoQyxxQkFBcUJnQztLQUV2QjtJQVR5QjtHQVczQkg7YUFBbUNuTCxRQUFPN0YsR0FBRW9SLFlBQVd2UjtLQUNyRDtNQUNFLEdBQUdnQztPQUNRLElBQUx3UCxPQUFPeFAsaUJBQWlCQSxTQUFTN0IsR0FBR29SLFlBQVl2Ujs7T0FFM0MsSUFBTHdSLE9BQU94UCxpQkFBaUJBLFNBQVM3QixHQUFHb1IsWUFBWXZSLEtBQUtnRztNQUMzRCxPQUFPd0w7O1dBQ0FGLEtBQ1BoQyxxQkFBcUJnQztJQVJDO0dBVzFCSDs7S0FDRSxJQUNFblAsa0JBQWtCQSxVQUNsQjtXQUNPc1AsS0FDUGhDLHFCQUFxQmdDO0lBTEU7R0FoUTNCLFNBQVNHLGFBQWF4RCxNQUNwQmpNLFVBQVVxUCxlQUNWclAsWUFBWWlNLEtBQ2Q7R0FDQXdELHFDQUFxQ2xJLE1BQ25DLE9BQVF2SCxZQUFZdUgsS0FETTtHQUc1QmtJO2FBQXlDbEk7S0FDdkMsSUFDRSxPQUFPdkgsbUJBQW1CQSxRQUFRdUg7V0FDM0IrSCxLQUNQO0lBSjRCO0dBT2hDRzthQUF5Q2xJO0tBQ3ZDLElBQ0UsT0FBT3ZILGlCQUFpQkEsUUFBUXVIO1dBQ3pCK0gsS0FDUGhDLHFCQUFxQmdDO0lBSk87R0FPaENHO2FBQXdDbEksTUFBTWlILE1BQU1DO0tBQ2xELElBQ0V6TyxrQkFBa0JBLFFBQVF1SCxjQUFZaUgsUUFDdEM7V0FDT2MsS0FDUHRQLHdCQUF3QnNQLEtBQUtiO0lBTEY7R0FRL0JnQjthQUF3Q2xJLE1BQU1rSDtLQUM1QyxJQUNFek8sa0JBQWtCQSxRQUFRdUgsUUFDMUI7V0FDTytILEtBQ1B0UCx3QkFBd0JzUCxLQUFLYjtJQUxGO0dBUS9CZ0I7YUFBMENsSSxNQUFNa0g7S0FDOUMsSUFDRSxPQUFPek8sb0JBQW9CQSxRQUFRdUg7V0FDNUIrSCxLQUNQdFAsd0JBQXdCc1AsS0FBS2I7SUFKQTtHQU9qQ2dCO2FBQXlDbEk7S0FDdkMsSUFDRSxPQUFPdkgsaUJBQWlCQSxRQUFRdUg7V0FDekIrSCxLQUNQaEMscUJBQXFCZ0M7SUFKTztHQU9oQ0c7YUFBeUNsSSxNQUFNa0g7S0FDN0M7TUFDUSxJQUFGN1AsSUFBSW9CLG1CQUFtQkEsUUFBUXVIO01BQ25DdkgsbUJBQW1CQSxRQUFRdUg7TUFDM0IsT0FBTzNJOztXQUNBMFEsS0FDUHRQLHdCQUF3QnNQLEtBQUtiO0lBTkQ7R0FTaENnQjthQUF1Q2xJLE1BQU1sSixHQUFHb1E7S0FDOUMsSUFBSWlCLFNBQVNMLHNCQUNUcko7S0FDSixRQUFRMkosT0FBT3RSO01BQUUsT0FDUnNSOztTQUNVM0osT0FBTzBKLGlCQUFpQjs7U0FDeEIxSixPQUFPMEosaUJBQWlCOztTQUV2QzFKLE9BQU8wSixrQkFBa0JBLGlCQUN6Qjs7U0FDZ0IxSixPQUFPMEosZ0JBQW1COztTQUMxQjFKLE9BQU8wSixnQkFBbUI7O1NBQzFCMUosT0FBTzBKLGVBQW1COztTQUMxQjFKLE9BQU8wSixpQkFBbUI7O1NBQzFCMUosT0FBTzBKLGVBQW1COztTQUMxQjFKLE9BQU8wSixtQkFBbUI7O0tBRzlDO01BQ0U7T0FBSU4sS0FBS3BQLGlCQUFpQkEsUUFBUXVILE9BQU92QjtPQUNyQzRKO1NBQW9CNVAsa0JBQWtCQSxRQUFRdUg7TUFDbERsSixzQkFBc0J1UjtNQUN0QixXQUFXVCxTQUFTQyxJQUFJL1E7O1dBQ2pCaVIsS0FDUHRQLHdCQUF3QnNQLEtBQUtiO0lBeEJIO0dBNEI5QmdCO2FBQXlDSSxHQUFHelEsR0FBR3FQO0tBQzdDLElBQ0V6TyxtQkFBbUJBLFFBQVE2UCxJQUFJN1AsUUFBUVo7V0FDaENrUSxLQUNQdFAsd0JBQXdCc1AsS0FBS2I7SUFKRDtHQU9oQ2dCO2FBQXVDbEksTUFBTWtIO0tBQzNDO01BQ2UsSUFBVHFCLFdBQVc5UCxpQkFBaUJBLFFBQVF1SDtNQUN4QyxPQUFPdkgsbUJBQW1COFA7O1dBQ25CUixLQUNQdFAsd0JBQXdCc1AsS0FBS2I7SUFMSDtHQVE5QmdCO2FBQXdDbEksTUFBTWtIO0tBQzVDO01BQ2UsSUFBVHFCLFdBQVc5UCxrQkFBa0JBLFFBQVF1SDtNQUN6QyxPQUFPdkgsbUJBQW1COFA7O1dBQ25CUixLQUNQdFAsd0JBQXdCc1AsS0FBS2I7SUFMRjtHQVEvQmdCO2FBQTBDTSxRQUFRQyxRQUFRdEUsTUFBTStDO0tBQzlEO01BQ0V6TztRQUFvQkEsUUFBUWdRLFNBQVNoUSxRQUFRMEwsT0FBT3FFO01BQ3BEOztXQUNPVCxLQUNQdFAsd0JBQXdCc1AsS0FBS2I7SUFMQTtHQVFqQ2dCO2FBQTJDbEksTUFBTWtIO0tBQy9DO01BQ1csSUFBTHdCLE9BQU9qUSxxQkFBcUJBLFFBQVF1SDtNQUN4QyxPQUFPbUYsd0JBQXdCdUQ7O1dBQ3hCWCxLQUNQdFAsd0JBQXdCc1AsS0FBS2I7SUFMQztHQVFsQ2dCO2FBQTBDbEksTUFBTWtIO0tBQzlDLElBQ0UsT0FBT3pPLG9CQUFvQkEsUUFBUXVIO1dBQzVCK0gsS0FDUHRQLHdCQUF3QnNQLEtBQUtiO0lBSkE7R0FPakNnQjthQUFxREgsS0FBS2I7S0FDekMsSUFBWDlCLGFBQWFPO0tBQ2pCLEdBQUl1QixjQUFjOUIsV0FBWTtNQUNuQjtPQUFMN0ssT0FBTzhLLG1CQUFtQjBDLFVBQVVBLGFBQWFBLFVBQVVBO01BQy9EbEMscUJBQXFCVCxZQUFZN0s7OztNQUVqQ3dMLHFCQUFxQmdDO0lBTm1CO0dBUzVDRzthQUFnREs7S0FXOUMsSUFBSUk7S0FDSixHQUFJSjtNQUNGSTthQUNTSjtNQUNUSTthQUNTSjtNQUNUSTthQUNTSjtNQUNUSTthQUNTSjtNQUNUSTthQUNTSjtNQUNUSTthQUNTSixxQkFDVEk7S0FrQkY7YUFFRUo7YUFDQUE7YUFDQUk7YUFDQUo7YUFDQUE7YUFDQUE7YUFDQUE7YUFDQUE7YUFDQUE7YUFDQUE7YUFDQUE7YUFDQUE7SUF4RG1DO0dBNER2Q0wscUNBQXFDQTtHQzNNckMsU0FBU1UsY0FBY3pFO0lBQ2YsSUFBRnRMLElBQUkrTCxpQkFBaUJUO0lBQ3pCLEtBQUt0TCxHQUFHO0lBQ1IsT0FBT0E7R0FBVTtHQUluQjtJQUFJZ1E7TUFBWUQsY0FBYzlEO1NBQXFCakY7SUE2RC9DaUo7R0FDSixHQUFJOUU7SUFDRjhFO2FBQTRCRCx1QkFBcUJYLGFBQWFXOztJQUU5REM7YUFBNEJELHVCQUFxQi9CLGFBQWErQjtHQUVoRUM7b0NBQW1EaEM7R0FlbkQsU0FBU2lDLGtCQUFrQi9JO0lBQ3pCO0tBQUltRSxPQUFPWSxlQUFlL0U7S0FDdEJBLE9BQU9tRTtLQUNQNkMsYUFBYW5DLG9CQUFvQjdFO0tBQ2pDdkI7SUFDSixJQUFVLElBQUY1SCxPQUFPQSxJQUFJaVMseUJBQXlCalMsSUFBSztLQUN6QyxJQUFGaU0sSUFBSWdHLGlCQUFpQmpTO0tBQ3pCO09BQUdtUSxrQkFBa0JsRTthQUNickUsT0FBT0Esa0JBQWtCcUU7TUFDL0JyRTtjQUFZcUU7Z0JBQWNBO2NBQWM5QyxlQUFlOEMsZUFBYzlDOztJQUV6RSxLQUFLdkIsT0FBT3VGLG9CQUFxQjtLQUN0QixJQUFMVSxPQUFPa0UsY0FBYzVJO0tBQ3pCLEdBQUkwRSxRQUFRQSw0QkFBNEI7TUFDaEMsSUFBRjVCLFdBQVU0QixrQkFBZ0J3RCxhQUFheEQ7TUFDM0NvRSxzQkFBc0JoRztNQUN0QnJFO2NBQVlxRTtnQkFBY0E7Y0FBYzlDLGVBQWU4QyxlQUFjOUM7OztJQUd6RSxHQUFJdkIsS0FBTSxPQUFPQTtJQUNqQnNILDhDQUE4Q2lCO0dBQ2hEO0dBZ0tBLFNBQVNnQyxpQkFBaUJoSixNQUFLdEg7SUFDcEIsSUFBTGdNLE9BQU9xRSxrQkFBa0IvSTtJQUM3QixLQUFLMEUsc0JBQXNCN0U7SUFDM0I2RSxxQkFBcUJBLFdBQVVoTTtJQUMvQjtHQUNGO0dBS0EsU0FBU3VRLGlCQUFpQmpKLE1BQUt0SDtJQUM3QjtLQUFJc0gsT0FBT2xHLHVCQUF1QmtHO0tBQzlCdEgsVUFBVW9CLHVCQUF1QnBCO0lBQ3JDLE9BQU9zUSxpQkFBaUJoSixNQUFNdEg7R0FDaEM7R0E1QkEsU0FBU3dRO0lBQ0EsSUFBSEMsTUFBSS9QO0lBQ1IsR0FBRytQO0tBQUksSUFDSyxJQUFGdFMsT0FBT0EsSUFBSXNTLFlBQVl0UztNQUM3Qm9TLGlCQUFpQkUsSUFBSXRTLFNBQVFzUyxJQUFJdFM7SUFHckN1Qyw4QkFBOEI2UDtJQUM5QjdQO0lBQ0E7R0FDRjtHZGxRQSxTQUFTZ1EsbUNBQXNDLFdBQVk7R1M4RTNELFNBQVNDLHNCQUFzQjlNLEdBQUd0RjtJQUNoQyxJQUFJUixNQUFNUSxVQUFVSixHQUFHa0s7SUFDdkIsSUFBS2xLLE9BQU9BLFNBQVNKLEtBQUtJLE9BQVE7S0FDaENrSztNQUFJOUosYUFBYUosS0FDWkksYUFBYUosY0FDYkksYUFBYUo7UUFDYkksYUFBYUo7S0FDbEIwRixJQUFJa0Usa0JBQWtCbEUsR0FBR3dFOztJQUUzQkE7SUFDQSxPQUFRdEs7O09BQ0FzSyxJQUFLOUosYUFBYUo7O09BQ2xCa0ssS0FBSzlKLGFBQWFKOztPQUV4QmtLLEtBQUs5SixhQUFhSixJQUNsQjBGLElBQUlrRSxrQkFBa0JsRSxHQUFHd0U7O0lBRzNCeEUsS0FBSzlGO0lBQ0wsT0FBTzhGO0dBQ1Q7R0F1Q0EsU0FBUytNLHFCQUFxQi9NLEdBQUduRTtJQUMvQixPQUFPaVIsc0JBQXNCOU0sR0FBRzNELHVCQUF1QlI7R0FDekQ7R0FyQ0EsU0FBU21SLHdCQUF3QmhOLEdBQUd0RjtJQUNsQyxJQUFJUixNQUFNUSxVQUFVSixHQUFHa0s7SUFDdkIsSUFBS2xLLE9BQU9BLFNBQVNKLEtBQUtJLE9BQVE7S0FDaENrSyxJQUFJOUosRUFBRUosS0FDREksRUFBRUosY0FDRkksRUFBRUosZUFDRkksRUFBRUo7S0FDUDBGLElBQUlrRSxrQkFBa0JsRSxHQUFHd0U7O0lBRTNCQTtJQUNBLE9BQVF0Szs7T0FDQXNLLElBQUs5SixFQUFFSjs7T0FDUGtLLEtBQUs5SixFQUFFSjs7T0FDUGtLLEtBQUs5SixFQUFFSixJQUNiMEYsSUFBSWtFLGtCQUFrQmxFLEdBQUd3RTs7SUFHM0J4RSxLQUFLOUY7SUFDTCxPQUFPOEY7R0FDVDtHWHVwQkEsU0FBU2lOLHNCQUFzQnZTO0lBQzdCLE9BQVFBO2VBRU5jLDZCQUE2QmQ7O09BRTdCLE9BQU9BOztPQUVQLE9BQU9BOztHQUVYO0dXMXBCQSxTQUFTd1Msb0JBQW9CbE4sR0FBR25FO0lBQ2xCLElBQVJNLFVBQVU4USxzQkFBc0JwUjtJQUNwQyxjQUFVTTtjQUNEMlEsc0JBQXNCOU0sR0FBRzdEO2NBRXpCNlEsd0JBQXdCaE4sR0FBRzdEO0dBQ3RDO0dBaEZBLFNBQVNnUixvQkFBb0JuTjtJQUMzQkEsS0FBS0E7SUFDTEEsSUFBSWlFLFNBQVVqRTtJQUNkQSxLQUFLQTtJQUNMQSxJQUFJaUUsU0FBVWpFO0lBQ2RBLEtBQUtBO0lBQ0wsT0FBT0E7R0FDVDtHQXdGQSxTQUFTb04sVUFBV0MsT0FBT0MsT0FBT0MsTUFBTUM7SUFDdEMsSUFBSUMsT0FBT0MsSUFBSUMsSUFBSXpNLElBQUlpRSxLQUFLbkYsR0FBR25FLEdBQUd2QixHQUFHSjtJQUNyQ2dILEtBQUtvTTtJQUNMLEdBQUlwTSxVQUFVQSxVQUFVQTtJQUN4QmlFLE1BQU1rSTtJQUNOck4sSUFBSXVOO0lBQ0pFLFNBQVNEO0lBQU1FO0lBQVFDO0lBQ3ZCLE1BQU9ELEtBQUtDLE1BQU14SSxRQUFTO0tBQ3pCdEosSUFBSTRSLE1BQU1DO0tBQ1YsR0FBSTdSLEtBQUtBO01BQWM7UUFDbEJtSixnQkFBZ0JuSixrQkFBa0JtSixnQkFBZ0JuSixvQkFBcUI7T0FDakUsSUFBSCtSLEtBQUs1SSxnQkFBZ0JuSixvQkFBb0JBO09BQzdDbUUsSUFBSWtFLGtCQUFtQmxFLEdBQUc0TjtPQUMxQnpJOzs7YUFHS3RKLGFBQWF1QyxTQUFTdkMsVUFBVUE7TUFBUyxPQUN4Q0E7O1NBR05tRSxJQUFJa0Usa0JBQWtCbEUsR0FBR25FLE9BQ3pCc0osT0FDQTs7U0FHQXNJLFFBQVFDLE1BQU03UixNQUNkOztTQUVBLEdBQUdrRCx5QkFBeUJsRCxPQUFPO1NBSzNCLElBQUpFLE1BQVFGLHFCQUF1QkE7U0FDbkNtRSxJQUFJa0Usa0JBQWtCbEUsR0FBR2pFO1NBQ3pCLElBQUt6QixPQUFPSixNQUFNMkIsVUFBVXZCLElBQUlKLEtBQUtJLElBQUssQ0FDeEMsR0FBSXFULE1BQU16TSxJQUFJLE9BQ2R1TSxNQUFNRSxRQUFROVIsRUFBRXZCOztTQUVsQjs7YUFFT2tMLGlCQUFpQjNKLEdBQUk7TUFDOUJtRSxJQUFJa04sb0JBQW9CbE4sR0FBRW5FO01BQzFCc0o7O2FBQ1NJLGtCQUFrQjFKLEdBQUk7TUFDL0JtRSxJQUFJK00scUJBQXFCL00sR0FBRW5FO01BQzNCc0o7O29CQUNnQnRKLGVBQWdCO01BQ2hDbUUsSUFBSThNLHNCQUFzQjlNLEdBQUVuRTtNQUM1QnNKOzthQUNTdEosT0FBT0EsT0FBTTtNQUV0Qm1FLElBQUlrRSxrQkFBa0JsRSxHQUFHbkUsSUFBRUE7TUFDM0JzSjs7b0JBQ2dCdEosZUFBZ0IsQ0FFaENtRSxJQUFJb0Usb0JBQW9CcEUsR0FBRW5FLElBQzFCc0o7O0lBR0puRixJQUFJbU4sb0JBQW9Cbk47SUFDeEIsT0FBT0E7R0FDVDtHTDlLQSxTQUFTNk4sd0JBQXlCdlIsR0FBRzZLLE1BQU0yRztJQUN6QyxLQUFLalAsU0FBU3ZDLEdBQUk7S0FDaEIsR0FBSXdDLE1BQU14QyxJQUFJLE9BQU9zTTtLQUNyQixPQUFPQSx3QkFBMEJ0TTs7SUFFMUIsSUFBTDJELE9BQVEzRCxjQUFVQSxPQUFNNEMsZUFBYTVDO0lBQ3pDLEdBQUcyRCxNQUFNM0QsTUFBS0E7SUFDTixJQUFKbUU7SUFDSixHQUFJbkU7S0FBUTtZQUNIQTtLQUFPLE1BQ1BBLFNBQVNtRSxhQUFjLENBQUVuRSxRQUFRbUU7O0tBQ25DLE1BQ0VuRSxPQUFRLENBQUVBLFFBQVFtRTtJQUUzQixJQUFJc04sV0FBV3ROLG9CQUNYdU47SUFDSixHQUFJL047S0FBTStOOztLQUNMLE9BQ0lGOztRQUNZRSxnQkFBZ0I7O1FBQ2hCQSxnQkFBZ0I7Z0JBQzFCOztJQUdYLEdBQUk3RyxhQUFhQSxVQUFXO0tBRWxCLElBQUo4RyxNQUFNdFQsWUFBV3dNO0tBQ3JCN0ssSUFBSTNCLFdBQVcyQixJQUFJMlIsT0FBT0E7O0lBRWxCLElBQU5DLFFBQVE1UjtJQUNaLEdBQUc2SyxVQUFVO0tBQ0gsSUFBSmdILE1BQU1EO0tBQ1YsR0FBR0M7TUFDREQsZUFBZTdTLGdCQUFnQjhMO1NBRTVCO01BQ00sSUFBTDVGLE9BQU80TSxVQUFNaEg7TUFDakIsR0FBRytHLGVBQWUzTTtPQUNoQjJNLFNBQVM3UyxnQkFBZ0JrRyxPQUFPMk07O09BRWhDQSxRQUFRQSxnQkFBZTNNOzs7SUFHN0IsT0FBT3FIO2FBQXlCb0Ysa0JBQWtCRSxjQUFjSCxXQUFXdE47R0FDN0U7R0U4R0EsU0FBUzJOLG1CQUFtQjlSLEdBQUssU0FBUUEsV0FBWTtHQStCckQsU0FBUytSLG9CQUFxQi9SO0lBQzVCLFdBQVdxRCxRQUFRckQsY0FBZUEsb0JBQXNCQTtHQUMxRDtHQUdBLFNBQVNnUyxvQkFBcUJoUyxHQUFLLE9BQU9BLFVBQVU7R0FqQ3BELFNBQVNpUyx1QkFBdUJqUyxHQUFLLFNBQVFBLFVBQVc7R0FoQnhELFNBQVNrUyxlQUFnQmxTLEdBQUssT0FBT0EsUUFBUTtHQXFFN0MsU0FBU21TLGtCQUFtQjVILEtBQUt2SztJQUN6QixJQUFGL0IsSUFBSXFNLGtCQUFrQkM7SUFDMUIsR0FBSXRNLGdCQUFnQmdVLHVCQUF1QmpTLEdBQUksQ0FDN0MvQixjQUFhK0IsSUFBSWtTLGVBQWVsUztJQUVsQztLQUFJc0c7S0FDQThMLFFBQVFMLG9CQUFvQjlUO0tBQzVCb1U7SUFDSixFQUFHO0tBQ0ssSUFBRnZILElBQUk5SyxVQUFVb1M7S0FDbEJwUyxJQUFJOEs7S0FDSnhFLFNBQVMrTCxhQUFhTCxvQkFBb0JsSCxjQUFjeEU7OztRQUMvQ3dMLG1CQUFtQjlSO0lBQzlCLEdBQUkvQixZQUFhO0tBQ2ZBO0tBQ00sSUFBRmUsSUFBSWYsU0FBU3FJO0tBQ2pCLEdBQUl0SCxPQUFPc0gsU0FBU3ZILGdCQUFpQkMsVUFBVXNIOztJQUVqRCxPQUFPa0UsdUJBQXVCdk0sR0FBR3FJO0dBQ25DO0dFbFJBLFNBQVNnTSx5QkFBMEJsVTtJQUNqQyxJQUFJSixPQUFPSixNQUFNZ1Isc0JBQXNCeFEsSUFBSW1VLFdBQVc1TztJQUN0RCxHQUFJL0Y7S0FBUyxPQUNIaVIsdUJBQXVCelEsR0FBRUo7O1FBQ3hCQSxLQUFLMkYsWUFBVzs7UUFDaEIzRixLQUFLMkYsVUFBVTs7SUFHMUIsR0FBSTNGLFFBQVFKLE9BQU9pUix1QkFBdUJ6USxHQUFHSjtLQUMzQyxPQUFRNlEsdUJBQXVCelEsR0FBR0o7OztRQUNmdVUsV0FBV3ZVLFFBQVE7OztRQUNuQnVVLFVBQVd2VSxRQUFROzs7UUFDbkJ1VSxVQUFXdlUsUUFBUTs7O1FBQ25CQSxRQUFROztJQUU3QixRQUFRQSxHQUFHMkYsTUFBTTRPO0dBQ25CO0dBR0EsU0FBU0MsaUJBQWlCbFQ7SUFDeEIsR0FBSUEsV0FBV0EsU0FBVSxPQUFPQTtJQUNoQyxHQUFJQSxXQUFXQSxTQUFVLE9BQU9BO0lBQ2hDLEdBQUlBLFdBQVdBLFVBQVUsT0FBT0E7SUFDaEM7R0FDRjtHQUtBLFNBQVNtVCxtQkFBb0JyVTtJQUMzQjtLQUFJYSxJQUFJcVQseUJBQTBCbFU7S0FDOUJKLElBQUlpQjtLQUFNMEUsT0FBTzFFO0tBQU1zVCxPQUFPdFQ7S0FDOUJyQixNQUFNZ1Isc0JBQXNCeFE7S0FDNUJzVTtLQUNBcFQsSUFBS3RCLElBQUlKLE1BQUtpUix1QkFBdUJ6USxHQUFHSjtLQUN4Q21DLElBQUlxUyxpQkFBaUJsVDtJQUN6QixHQUFJYSxTQUFTQSxLQUFLb1MsTUFBTXZMO0lBQ2hCLElBQUpwQixNQUFNekY7SUFDVixJQUFLbkMsS0FBSUEsSUFBRUosS0FBSUksSUFBSztLQUNsQnNCLElBQUl1UCx1QkFBdUJ6USxHQUFHSjtLQUM5QixHQUFJc0IsU0FBUztLQUNiYSxJQUFJcVMsaUJBQWlCbFQ7S0FDckIsR0FBSWEsU0FBU0EsS0FBS29TLE1BQU07S0FDeEIzTSxNQUFNMk0sT0FBTzNNLE1BQU16RjtLQUNuQixHQUFJeUYsTUFBTThNLFdBQVcxTDs7SUFFdkIsR0FBSWhKLEtBQUtKLEtBQUtvSjtJQUlkcEIsTUFBTWpDLE9BQU9pQztJQUNiLEdBQUsyTSxlQUFpQjNNLFlBQVlBLEtBRWhDb0I7SUFDRixPQUFPcEI7R0FDVDtHTmlIQSxTQUFTK00sbUJBQW1CNVUsR0FDMUIsT0FBT0EsV0FDVDtHQTZEQSxTQUFTNlUsa0JBQWtCbkQsR0FBR3hSLEdBQUd5RDtJQUMvQixPQUFPK04sRUFBRXZFLHdCQUF3QmpOLFVBQVV3UixHQUFHa0QsbUJBQW1CalI7R0FDbkU7R0FHQSxTQUFTbVIsWUFBWXZULEdBQUd2QjtJQUN0QixPQUFRQTs7T0FDQSxXQUFXdUI7O09BQ1gsV0FBV0EsRUFBR3ZCOztPQUNkLFdBQVd1QixFQUFHdkIsTUFBS0E7O09BQ25CLFdBQVd1QixFQUFHdkIsTUFBS0EsTUFBS0E7O09BQ3hCLFdBQVd1QixFQUFHdkIsTUFBS0EsTUFBS0EsTUFBS0E7O09BQzdCLFdBQVd1QixFQUFHdkIsTUFBS0EsTUFBS0EsTUFBS0EsTUFBS0E7O09BQ2xDLFdBQVd1QixFQUFHdkIsTUFBS0EsTUFBS0EsTUFBS0EsTUFBS0EsTUFBS0E7O09BQ3ZDLFdBQVd1QixFQUFHdkIsTUFBS0EsTUFBS0EsTUFBS0EsTUFBS0EsTUFBS0EsTUFBS0E7O0lBRXBELFNBQVMrVSxJQUFNLE9BQU94VCxRQUFRTSxNQUFNK1MsbUJBQW1CNVUsSUFBSztJQUM1RCtVLGNBQWN4VDtJQUNkLFdBQVd3VDtHQUNiO0dBa0pBLFNBQVNDLGVBQWdCaFY7SUFDakIsSUFBRjBSO0lBQ0osSUFBVyxJQUFGelIsT0FBT0EsSUFBSUQsVUFBVUMsSUFBSztLQUMzQixJQUFGOE0sSUFBSS9NLEVBQUVDO0tBQ1Z5UixFQUFFdkUsd0JBQXdCSixTQUFTQTs7SUFFckMsT0FBTzJFO0dBQ1Q7R0F2T0EsU0FBU3VELGlCQUFpQmpWO0lBQ3hCLElBQUlILE1BQU1HLFVBQ05TLFFBQVFzRCxNQUFNbEU7SUFDbEJZO0lBQ0EsSUFBUyxJQUFEUixPQUFJQSxJQUFFSixLQUFJSSxLQUFLUSxFQUFFUixTQUFPRCxFQUFFQztJQUNsQyxPQUFPUTtHQUNUO0dBbEprQixJQUFkeVUsZ0JBQWdCeFI7R0F3UXBCLFNBQVN5Uiw2QkFBNkJDLE9BQU9sVjtJQUMzQztLQUNFO01BQUllLElBQUlpRDtNQUNKUCxXQUFXSSxNQUFNcVI7TUFDakJ2VixNQUFNUyxTQUFTNEQsa0JBQWtCa1I7S0FDckMsSUFBVyxJQUFGblYsT0FBT0EsSUFBSUosS0FBS0ksS0FBSzBELEtBQUsxRCxLQUFLaUUsVUFBVWpFO0tBQ2xELE9BQU9pVixjQUFjaFYsR0FBR3lELE1BTG5CO0dBT1Q7R1NsRkEsU0FBUzBSLGVBQWdCcFQsR0FBRytCO0lBQUssVUFBU3lILGlCQUFpQnhKLEdBQUUrQjtHQUFnQjtHQUc3RSxTQUFTc1IsY0FBZXJULEdBQUcrQixHQUFLLFVBQVN5SCxpQkFBaUJ4SixHQUFFK0IsZUFBZTtHTWpQM0UsU0FBU3VSLGVBQWVsVjtJQUN0QkEsSUFBSTJCLHVCQUF1QjNCO0lBQzNCLElBQUlLLElBQUlMLGNBQ0pMLFFBQVErRCxNQUFNckQ7SUFDbEIsSUFBVyxJQUFGVCxPQUFPQSxJQUFJUyxHQUFHVDtLQUNyQkQsRUFBRUMsTUFBTUksaUJBQWlCSixLQUFNSSxpQkFBaUJKO0lBQ2xELE9BQU9EO0dBQ1Q7R0FJQSxTQUFTd1YsZ0JBQWdCQyxLQUFLQyxhQUFhQztJQUN6QztLQUFJQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztJQUVKLEtBQUtkLGdCQUFpQjtLQUNwQkEsZUFBa0JGLGVBQWdCRSxJQUFJVTtLQUN0Q1Ysa0JBQWtCRixlQUFnQkUsSUFBSVc7S0FDdENYLGdCQUFrQkYsZUFBZ0JFLElBQUljO0tBQ3RDZCxnQkFBa0JGLGVBQWdCRSxJQUFJYTtLQUN0Q2Isa0JBQWtCRixlQUFnQkUsSUFBSVk7O0lBR3hDO0tBQUk5VTtLQUFHaVYsUUFBUWQ7S0FFWG5OLFNBQVM4RywwQkFBMEJzRyxPQUFPQztJQUU5QyxHQUFJWSxXQUFZO0tBRWRiLE9BQU9LLGdCQUFnQkwsT0FBT0csaUJBQWlCSCxPQUFPSTtLQUN0REosT0FBT007OztLQUdQTyxVQUFTQTtJQUVYLE9BQVE7S0FFRyxJQUFMaEMsT0FBT2lCLGFBQWFlO0tBQ3hCLEdBQUloQyxVQUFVLFNBQVFBO0tBRVYsSUFBUmlDLFVBQVVoQixnQkFBZ0JlO0tBQzlCLEdBQUlDLGFBQWM7TUFDaEJkLE9BQU9LLGdCQUFnQkwsT0FBT0k7TUFDOUJKLE9BQU9NLG1CQUFtQlE7O0tBRzVCLEdBQUlkLE9BQU9JLGlCQUFpQkosT0FBT0U7TUFBZ0IsR0FDN0NGLE9BQU9PLHVCQUNULFNBQVFNLGdCQUVSalY7U0FDQyxDQUVIQSxJQUFJZ0gsT0FBT29OLE9BQU9JLGdCQUNsQkosT0FBT0k7S0FHVCxHQUFJTixjQUFjakIsT0FBT2pULE1BQU1pVjtNQUM3QkEsUUFBUWYsY0FBY2pCLE9BQU9qVDs7TUFFN0JpVixRQUFRZixnQkFBZ0JlO0tBRTFCLEdBQUlBLFVBQVc7TUFDYmIsT0FBT0ksZ0JBQWdCSixPQUFPSztNQUM5QixHQUFJTCxPQUFPTTtPQUNUaE47O09BRUEsT0FBTzBNLE9BQU9NOzthQUtaMVUsVUFBVW9VLE9BQU9POztHQUczQjtHcEJBQSxTQUFTUSxlQUFnQjdXLEtBQUs4VztJQUM1QixHQUFJOVcsU0FBU3NFO0lBQ2IsSUFBSXRFLE1BQU1BLGFBQ05ZLFFBQVFzRCxNQUFNbEU7SUFDbEJZO0lBQ0EsSUFBVyxJQUFGUixPQUFPQSxJQUFJSixLQUFLSSxLQUFLUSxFQUFFUixLQUFLMFc7SUFDckMsT0FBT2xXO0dBQ1Q7R3FCZ0NBLFNBQVNtVztJQUNQO0tBQUlyTyxhQUFhc087S0FDYkMsVUFBVUMsWUFBWXhPO0tBQ3RCeU8sU0FBU3hXLFdBQVcrSDtJQUN4Qjs7Z0JBQ2N3TztpQkFDRkQ7Z0JBQ0RFO0dBQ2I7R0FyR3NCO0lBQWxCQztNQUFvQjtRQUN0QixTQUFTQyxJQUFLalYsR0FBRytCLEdBQUssT0FBUS9CLElBQUkrQixNQUFRO1FBQzFDLFNBQVNtVCxHQUFHbFIsR0FBRWpHLEdBQUVTLEdBQUV3QixHQUFFNUIsR0FBRWlCO1NBQ3BCdEIsSUFBSWtYLElBQUlBLElBQUlsWCxHQUFHaUcsSUFBSWlSLElBQUlqVixHQUFHWDtTQUMxQixPQUFPNFYsSUFBS2xYLEtBQUtLLElBQU1MLFdBQVlLLEdBQUtJO1FBQzFDO1FBQ0EsU0FBUzJXLEdBQUdwWCxHQUFFUyxHQUFFYyxHQUFFYSxHQUFFSCxHQUFFNUIsR0FBRWlCO1NBQ3RCLE9BQU82VixHQUFJMVcsSUFBSWMsTUFBUWQsSUFBSzJCLEdBQUlwQyxHQUFHUyxHQUFHd0IsR0FBRzVCLEdBQUdpQjtRQUM5QztRQUNBLFNBQVMrVixHQUFHclgsR0FBRVMsR0FBRWMsR0FBRWEsR0FBRUgsR0FBRTVCLEdBQUVpQjtTQUN0QixPQUFPNlYsR0FBSTFXLElBQUkyQixJQUFNYixNQUFNYSxHQUFLcEMsR0FBR1MsR0FBR3dCLEdBQUc1QixHQUFHaUI7UUFDOUM7UUFDQSxTQUFTaVMsR0FBR3ZULEdBQUVTLEdBQUVjLEdBQUVhLEdBQUVILEdBQUU1QixHQUFFaUIsR0FBSyxPQUFPNlYsR0FBRzFXLElBQUljLElBQUlhLEdBQUdwQyxHQUFHUyxHQUFHd0IsR0FBRzVCLEdBQUdpQixHQUFJO1FBQ2xFLFNBQVNnVyxHQUFHdFgsR0FBRVMsR0FBRWMsR0FBRWEsR0FBRUgsR0FBRTVCLEdBQUVpQjtTQUFLLE9BQU82VixHQUFHNVYsS0FBS2QsTUFBTTJCLElBQUtwQyxHQUFHUyxHQUFHd0IsR0FBRzVCLEdBQUdpQjtRQUFJO1FBRXZFLGdCQUFpQjZJLEdBQUc1QjtTQUNsQixJQUFJdkksSUFBSW1LLE1BQU0xSixJQUFJMEosTUFBTTVJLElBQUk0SSxNQUFNL0gsSUFBSStIO1NBRXRDbkssSUFBSW9YLEdBQUdwWCxHQUFHUyxHQUFHYyxHQUFHYSxHQUFHbUc7U0FDbkJuRyxJQUFJZ1YsR0FBR2hWLEdBQUdwQyxHQUFHUyxHQUFHYyxHQUFHZ0g7U0FDbkJoSCxJQUFJNlYsR0FBRzdWLEdBQUdhLEdBQUdwQyxHQUFHUyxHQUFHOEg7U0FDbkI5SCxJQUFJMlcsR0FBRzNXLEdBQUdjLEdBQUdhLEdBQUdwQyxHQUFHdUk7U0FDbkJ2SSxJQUFJb1gsR0FBR3BYLEdBQUdTLEdBQUdjLEdBQUdhLEdBQUdtRztTQUNuQm5HLElBQUlnVixHQUFHaFYsR0FBR3BDLEdBQUdTLEdBQUdjLEdBQUdnSDtTQUNuQmhILElBQUk2VixHQUFHN1YsR0FBR2EsR0FBR3BDLEdBQUdTLEdBQUc4SDtTQUNuQjlILElBQUkyVyxHQUFHM1csR0FBR2MsR0FBR2EsR0FBR3BDLEdBQUd1STtTQUNuQnZJLElBQUlvWCxHQUFHcFgsR0FBR1MsR0FBR2MsR0FBR2EsR0FBR21HO1NBQ25CbkcsSUFBSWdWLEdBQUdoVixHQUFHcEMsR0FBR1MsR0FBR2MsR0FBR2dIO1NBQ25CaEgsSUFBSTZWLEdBQUc3VixHQUFHYSxHQUFHcEMsR0FBR1MsR0FBRzhIO1NBQ25COUgsSUFBSTJXLEdBQUczVyxHQUFHYyxHQUFHYSxHQUFHcEMsR0FBR3VJO1NBQ25CdkksSUFBSW9YLEdBQUdwWCxHQUFHUyxHQUFHYyxHQUFHYSxHQUFHbUc7U0FDbkJuRyxJQUFJZ1YsR0FBR2hWLEdBQUdwQyxHQUFHUyxHQUFHYyxHQUFHZ0g7U0FDbkJoSCxJQUFJNlYsR0FBRzdWLEdBQUdhLEdBQUdwQyxHQUFHUyxHQUFHOEg7U0FDbkI5SCxJQUFJMlcsR0FBRzNXLEdBQUdjLEdBQUdhLEdBQUdwQyxHQUFHdUk7U0FFbkJ2SSxJQUFJcVgsR0FBR3JYLEdBQUdTLEdBQUdjLEdBQUdhLEdBQUdtRztTQUNuQm5HLElBQUlpVixHQUFHalYsR0FBR3BDLEdBQUdTLEdBQUdjLEdBQUdnSDtTQUNuQmhILElBQUk4VixHQUFHOVYsR0FBR2EsR0FBR3BDLEdBQUdTLEdBQUc4SDtTQUNuQjlILElBQUk0VyxHQUFHNVcsR0FBR2MsR0FBR2EsR0FBR3BDLEdBQUd1STtTQUNuQnZJLElBQUlxWCxHQUFHclgsR0FBR1MsR0FBR2MsR0FBR2EsR0FBR21HO1NBQ25CbkcsSUFBSWlWLEdBQUdqVixHQUFHcEMsR0FBR1MsR0FBR2MsR0FBR2dIO1NBQ25CaEgsSUFBSThWLEdBQUc5VixHQUFHYSxHQUFHcEMsR0FBR1MsR0FBRzhIO1NBQ25COUgsSUFBSTRXLEdBQUc1VyxHQUFHYyxHQUFHYSxHQUFHcEMsR0FBR3VJO1NBQ25CdkksSUFBSXFYLEdBQUdyWCxHQUFHUyxHQUFHYyxHQUFHYSxHQUFHbUc7U0FDbkJuRyxJQUFJaVYsR0FBR2pWLEdBQUdwQyxHQUFHUyxHQUFHYyxHQUFHZ0g7U0FDbkJoSCxJQUFJOFYsR0FBRzlWLEdBQUdhLEdBQUdwQyxHQUFHUyxHQUFHOEg7U0FDbkI5SCxJQUFJNFcsR0FBRzVXLEdBQUdjLEdBQUdhLEdBQUdwQyxHQUFHdUk7U0FDbkJ2SSxJQUFJcVgsR0FBR3JYLEdBQUdTLEdBQUdjLEdBQUdhLEdBQUdtRztTQUNuQm5HLElBQUlpVixHQUFHalYsR0FBR3BDLEdBQUdTLEdBQUdjLEdBQUdnSDtTQUNuQmhILElBQUk4VixHQUFHOVYsR0FBR2EsR0FBR3BDLEdBQUdTLEdBQUc4SDtTQUNuQjlILElBQUk0VyxHQUFHNVcsR0FBR2MsR0FBR2EsR0FBR3BDLEdBQUd1STtTQUVuQnZJLElBQUl1VCxHQUFHdlQsR0FBR1MsR0FBR2MsR0FBR2EsR0FBR21HO1NBQ25CbkcsSUFBSW1SLEdBQUduUixHQUFHcEMsR0FBR1MsR0FBR2MsR0FBR2dIO1NBQ25CaEgsSUFBSWdTLEdBQUdoUyxHQUFHYSxHQUFHcEMsR0FBR1MsR0FBRzhIO1NBQ25COUgsSUFBSThTLEdBQUc5UyxHQUFHYyxHQUFHYSxHQUFHcEMsR0FBR3VJO1NBQ25CdkksSUFBSXVULEdBQUd2VCxHQUFHUyxHQUFHYyxHQUFHYSxHQUFHbUc7U0FDbkJuRyxJQUFJbVIsR0FBR25SLEdBQUdwQyxHQUFHUyxHQUFHYyxHQUFHZ0g7U0FDbkJoSCxJQUFJZ1MsR0FBR2hTLEdBQUdhLEdBQUdwQyxHQUFHUyxHQUFHOEg7U0FDbkI5SCxJQUFJOFMsR0FBRzlTLEdBQUdjLEdBQUdhLEdBQUdwQyxHQUFHdUk7U0FDbkJ2SSxJQUFJdVQsR0FBR3ZULEdBQUdTLEdBQUdjLEdBQUdhLEdBQUdtRztTQUNuQm5HLElBQUltUixHQUFHblIsR0FBR3BDLEdBQUdTLEdBQUdjLEdBQUdnSDtTQUNuQmhILElBQUlnUyxHQUFHaFMsR0FBR2EsR0FBR3BDLEdBQUdTLEdBQUc4SDtTQUNuQjlILElBQUk4UyxHQUFHOVMsR0FBR2MsR0FBR2EsR0FBR3BDLEdBQUd1STtTQUNuQnZJLElBQUl1VCxHQUFHdlQsR0FBR1MsR0FBR2MsR0FBR2EsR0FBR21HO1NBQ25CbkcsSUFBSW1SLEdBQUduUixHQUFHcEMsR0FBR1MsR0FBR2MsR0FBR2dIO1NBQ25CaEgsSUFBSWdTLEdBQUdoUyxHQUFHYSxHQUFHcEMsR0FBR1MsR0FBRzhIO1NBQ25COUgsSUFBSThTLEdBQUc5UyxHQUFHYyxHQUFHYSxHQUFHcEMsR0FBR3VJO1NBRW5CdkksSUFBSXNYLEdBQUd0WCxHQUFHUyxHQUFHYyxHQUFHYSxHQUFHbUc7U0FDbkJuRyxJQUFJa1YsR0FBR2xWLEdBQUdwQyxHQUFHUyxHQUFHYyxHQUFHZ0g7U0FDbkJoSCxJQUFJK1YsR0FBRy9WLEdBQUdhLEdBQUdwQyxHQUFHUyxHQUFHOEg7U0FDbkI5SCxJQUFJNlcsR0FBRzdXLEdBQUdjLEdBQUdhLEdBQUdwQyxHQUFHdUk7U0FDbkJ2SSxJQUFJc1gsR0FBR3RYLEdBQUdTLEdBQUdjLEdBQUdhLEdBQUdtRztTQUNuQm5HLElBQUlrVixHQUFHbFYsR0FBR3BDLEdBQUdTLEdBQUdjLEdBQUdnSDtTQUNuQmhILElBQUkrVixHQUFHL1YsR0FBR2EsR0FBR3BDLEdBQUdTLEdBQUc4SDtTQUNuQjlILElBQUk2VyxHQUFHN1csR0FBR2MsR0FBR2EsR0FBR3BDLEdBQUd1STtTQUNuQnZJLElBQUlzWCxHQUFHdFgsR0FBR1MsR0FBR2MsR0FBR2EsR0FBR21HO1NBQ25CbkcsSUFBSWtWLEdBQUdsVixHQUFHcEMsR0FBR1MsR0FBR2MsR0FBR2dIO1NBQ25CaEgsSUFBSStWLEdBQUcvVixHQUFHYSxHQUFHcEMsR0FBR1MsR0FBRzhIO1NBQ25COUgsSUFBSTZXLEdBQUc3VyxHQUFHYyxHQUFHYSxHQUFHcEMsR0FBR3VJO1NBQ25CdkksSUFBSXNYLEdBQUd0WCxHQUFHUyxHQUFHYyxHQUFHYSxHQUFHbUc7U0FDbkJuRyxJQUFJa1YsR0FBR2xWLEdBQUdwQyxHQUFHUyxHQUFHYyxHQUFHZ0g7U0FDbkJoSCxJQUFJK1YsR0FBRy9WLEdBQUdhLEdBQUdwQyxHQUFHUyxHQUFHOEg7U0FDbkI5SCxJQUFJNlcsR0FBRzdXLEdBQUdjLEdBQUdhLEdBQUdwQyxHQUFHdUk7U0FFbkI0QixPQUFPK00sSUFBSWxYLEdBQUdtSztTQUNkQSxPQUFPK00sSUFBSXpXLEdBQUcwSjtTQUNkQSxPQUFPK00sSUFBSTNWLEdBQUc0STtTQUNkQSxPQUFPK00sSUFBSTlVLEdBQUcrSCxNQTFFVDtPQWZnQjs7R0F5R3pCLFNBQVNvTixlQUFlQyxLQUFLQyxPQUFPQztJQUNsQyxJQUFJQyxTQUFTSCxnQkFDVEk7SUFDSkosV0FBV0U7SUFDWCxHQUFHQyxPQUFPO0tBQ0ksSUFBUkUsZUFBZUY7S0FDbkIsR0FBR0QsWUFBWUcsUUFBUztNQUN0QkwsV0FBV0Msa0JBQWlCQyxZQUFXQztNQUN2Qzs7S0FFRkgsV0FBV0Msa0JBQWlCSSxVQUFTRjtLQUNyQ1Ysa0JBQWtCTyxPQUFPQTtLQUN6QkUsYUFBYUc7S0FDYkQsYUFBYUM7O0lBRWYsTUFBTUgsZ0JBQWdCO0tBQ3BCRixXQUFXQyxlQUFlRyxXQUFVQTtLQUNwQ1gsa0JBQWtCTyxPQUFPQTtLQUN6QkU7S0FDQUU7O0lBRUYsR0FBR0Y7S0FDREYsV0FBV0MsZUFBZUcsV0FBVUEsWUFBWUY7R0FDcEQ7R0FJQSxTQUFTSSxjQUFjTjtJQUNWLElBQVBHLFNBQVNIO0lBQ2JBLE9BQU9HO0lBQ1BBO0lBQ0EsR0FBR0EsWUFBYTtLQUNkLElBQVUsSUFBRjdYLElBQUk2WCxRQUFRN1gsUUFBUUEsS0FDMUIwWCxPQUFPMVg7S0FFVG1YLGtCQUFrQk8sT0FBT0E7S0FDekIsSUFBVSxJQUFGMVgsT0FBT0EsUUFBUUEsS0FDckIwWCxPQUFPMVg7OztLQUVKLElBQ0ssSUFBRkEsSUFBSTZYLFFBQVE3WCxRQUFRQSxLQUMxQjBYLE9BQU8xWDtJQUdYMFgsY0FBY0E7SUFDZEEsY0FBZUE7SUFDZlAsa0JBQWtCTyxPQUFPQTtJQUNuQixJQUFGbFcsUUFBUWQ7SUFDWixJQUFXLElBQUZQLE9BQU9BLE9BQU9BO0tBQ3JCLElBQVcsSUFBRkgsT0FBT0EsT0FBT0EsS0FDckJ3QixFQUFFckIsUUFBUUgsS0FBTTBYLE1BQU12WCxVQUFXSDtJQUNyQyxPQUFPd0I7R0FDVDtHcEIwU0EsU0FBU3lXLHFCQUFzQi9YO0lBQzdCLE9BQU9rRCx1QkFBdUJuRCx5QkFBeUJDLE1BQUlBO0dBQzdEO0dvQnRTQSxTQUFTZ1ksZUFBZTNYLEdBQUdtSSxLQUFLM0k7SUFDOUIsSUFBSTJYLE1BQU1aLGdCQUNONVcsSUFBSXFQLDBCQUEwQmhQO0lBQ2xDa1gsZUFBZUMsS0FBSXhYLFdBQVd3SSxLQUFLQSxNQUFNM0ksTUFBTUE7SUFDL0MsT0FBT2tZLHFCQUFxQkQsY0FBY047R0FDNUM7R0E3S0EsU0FBU1MsZ0JBQWdCNVgsR0FBR21JLEtBQUszSTtJQUMvQixPQUFPbVksZUFBZTlWLHFCQUFxQjdCLElBQUdtSSxLQUFJM0k7R0FDcEQ7R0N6QmlCLElBQWJxWSxtQkFBbUJuVTtHQUl2QixTQUFTb1UsZUFBZWxIO0lBQ2IsSUFBTGpCLE9BQU9rSSxhQUFhakg7SUFDeEIsR0FBR2pCLE1BQU1BO0lBQ1QsT0FBT2tJLGFBQWFqSDtJQUNwQjtHQUNGO0dBbUVxQixJQUFqQm1ILHVCQUF1QnJVO0dBZ1gzQixTQUFTc1UsY0FBZUM7SUFDYixJQUFMQyxPQUFPSCxpQkFBaUJFO0lBQzVCLEtBQUtDLGFBQWFwSjtJQUNsQixLQUFJb0osZUFBZUEsdUJBQXVCO0lBQzFDLEdBQUdBO0tBQ0RBLFlBQVl4WSx5QkFBeUJ3WSxnQkFBZ0JBOztLQUVyREEsZ0JBQWdCQSxhQUFhQSxnQkFBZ0JBO0lBRS9DQSxlQUFlQTtJQUNmQTtJQUNBO0dBQ0Y7R0FwUkEsU0FBU0Msc0JBQXVCRjtJQUNyQixJQUFMQyxPQUFPSCxpQkFBaUJFO0lBQzVCLEdBQUdDLFlBQWE7S0FDZEE7S0FDQUosZUFBZUk7S0FDZkE7S0FDQUEsa0JBQWtCL1g7S0FDbEIrWDtLQUNBQTs7SUFFRjtHQUNGO0duQmhMQSxTQUFTRSw0QkFBK0IsU0FBVTtHbUJpTmxELFNBQVNDLFlBQWFIO0lBQ3BCLEdBQUdBLGVBQWVuWSxLQUFLO0tBQ3JCLElBQUl1WSxNQUFNSixlQUNOSyxRQUFRN0gsMkJBQTJCNEg7S0FDdkMsR0FBSUM7TUFDRkwsY0FBY25ZO1NBRVg7TUFDSCxHQUFHbVkscUJBQXFCQSxrQkFBa0JLLGFBQWE7T0FDL0MsSUFBRm5ZLFFBQVFELFdBQVcrWCxrQkFBa0JLO09BQ3pDblksTUFBTThYO09BQ05BLGNBQWM5WDs7TUFFaEI4WCxnQkFBZ0JLLE9BQU1MO01BQ3RCQSxlQUFlSztNQUNmTCxtQkFBbUJLOzs7UUFFaEI7S0FDSztNQUFOQztRQUFRTjtVQUFlQTtVQUFhQTtVQUFhQTtVQUFpQkEscUJBQXFCQTtLQUMzRkEsZUFBZU07S0FDZk4sbUJBQW1CTTs7R0FFdkI7R0FvQkEsU0FBU0Msb0JBQXFCUixRQUFRMVIsSUFBSTNHLEdBQUdTO0lBQzNDO0tBQUk2WCxPQUFPSCxpQkFBaUJFO0tBQ3hCclgsSUFBSVA7S0FDSnFZLFFBQVFSLGtCQUFrQkE7SUFDOUIsR0FBRzdYLEtBQUtxWSxNQUFPO0tBQ2JuUyxPQUFPMlIscUJBQXFCQSxrQkFBaUJBLG1CQUFtQjdYLElBQUlUO0tBQ3BFc1ksb0JBQW9CN1g7O1lBRWRxWSxVQUFXO0tBQ2pCblM7T0FBTzJSLHFCQUFxQkEsa0JBQWlCQSxtQkFBbUJRLFFBQVE5WTtLQUN4RXNZLG9CQUFvQlE7S0FDcEI5WCxJQUFJOFg7O1FBQ0M7S0FDTFI7S0FDQUE7S0FDQUcsWUFBWUg7S0FDRixJQUFOUSxRQUFRUixrQkFBa0JBO0tBQzlCLEdBQUd0WCxJQUFJOFgsT0FBTzlYLElBQUk4WDtLQUNsQm5TLE9BQU8yUixxQkFBcUJBLGtCQUFpQkEsbUJBQW1CdFgsSUFBSWhCO0tBQ3BFc1ksb0JBQW9CdFg7O0lBRXRCLE9BQU9BO0dBQ1Q7R0FyQ0EsU0FBUytYLGNBQWVWLFFBQVE3WCxHQUFHUixHQUFHUztJQUM3QixJQUFIa0csS0FBS3lJLDBCQUEwQjVPO0lBQ25DLE9BQU9xWSxvQkFBb0JSLFFBQVExUixJQUFJM0csR0FBR1M7R0FDNUM7R05rQ0EsU0FBU3VZLHVCQUF1QmhJLElBQUloQjtJQUNsQyxHQUFHQTtLQUFZO01BRVgsSUFBSWlKLEtBQUtoSSxlQUNMaUksTUFBTUQsWUFBWWpKO01BQ3RCLFdBQVdlLFNBQVNtSSxLQUFLbEo7O1dBQ25CNU47SUFFVixXQUFXMk8sU0FBU0MsSUFBSWhCO0dBQzFCO0dHVkEsU0FBU21KLGFBQWFuSSxJQUFHaEI7SUFDdkJULGdCQUFnQjNOLE1BQU1rSztJQUN0QmxLLG9CQUFzQnhCLEdBQUssU0FBZjtJQUNaLEdBQUc0USxrQkFBa0JvSTtLQUNuQnhYLFdBQVd3WDtZQUNMcEksa0JBQWtCb0k7S0FDeEJ4WCxXQUFXd1g7bUJBQ0VBLDJCQUNieFgsV0FBV3dYO0lBQ2J4WCxhQUFhb087R0FDZjtHQUNBbUosMkNBQTZDLFNBQWI7R0FDaENBO2FBQXlDdlQsUUFBTzZKLEtBQUlDLEtBQUk5UDtLQUN0RCxHQUFHZ0MsU0FBVTtNQUNYO1FBQUdoQyxXQUNHOFAsWUFDQUEsTUFBSTlQLE9BQU82UDtXQUNYQSxJQUFJQyxNQUFJOVA7T0FDWkE7TUFHTSxJQUFKeVosTUFBTXZOLGtCQUFrQmxNO01BQzVCYyxnQkFBZ0J1TyxvQkFBb0JRLE1BQU1DLEtBQUsySixRQUFRelo7TUFDdkRnQyxTQUFTeVg7TUFDVDs7S0FFRm5LLHFCQUFxQnROO0lBZFE7R0FnQi9CdVg7YUFBd0N2VCxRQUFRNkosS0FBS0MsS0FBSzlQO0tBQ3hEc1AscUJBQXFCdE47SUFETztHQUc5QnVYLDBDQUNFdlgsV0FBV1ksVUFEa0I7R0cxUy9CLFNBQVM4Vyx1QkFBdUJ2SixNQUFLOEQ7SUFDbkMsR0FBR0EsT0FBT3JSLFdBQ1JxUixNQUFNb0U7SUFFUkEsYUFBYXBFLE9BQU85RDtJQUNwQixPQUFPOEQ7R0FDVDtHQUNBLFNBQVMwRixjQUFlcFEsTUFBTTZHLE9BQU93SjtJQUM3QixJQUFGdlo7SUFDSixNQUFNK1AsTUFBTTtLQUNWLE9BQU9BOztRQUNDL1AsY0FBYTs7UUFDYkEsY0FBYTs7UUFDYkEsY0FBYTs7UUFDYkEsY0FBYTs7UUFDYkEsZ0JBQWU7O1FBQ2ZBLFlBQVk7O1FBQ1pBLGNBQWE7O1FBQ2JBLFlBQVc7O1FBQ1hBLGdCQUFlOztLQUV2QitQLFFBQU1BOztJQUVSLEdBQUcvUCxZQUFZQTtLQUNiaVA7T0FBcUJuTix1QkFBdUJvSDs7SUFDOUMsR0FBR2xKLFVBQVVBO0tBQ1hpUDtPQUFxQm5OLHVCQUF1Qm9IOztJQUM5QyxJQUFJMEUsT0FBT3FFLGtCQUFrQi9JLE9BQ3pCNEcsT0FBT2xDLGlCQUFpQkEsV0FBVTVOO0lBQ3RDLE9BQU9xWix1QkFBd0J2SixNQUFNdk47R0FDdkM7R0FDQSxDQUFBO01BQ0UsU0FBU3VOLEtBQUtpQixJQUFJaEI7T0FDaEIsT0FBRzdDO2lCQUNNNkwsdUJBQXVCaEksSUFBSWhCO3FCQUd2Qm1KLGFBQWFuSSxJQUFJaEI7TUFDaEM7TUFDQXNKO1FBQXVCdko7O01BQ3ZCdUo7UUFBdUJ2SjtNQUN2QnVKO1FBQXVCdko7S0FWeEI7O0dBaUVELFNBQVMwSiwyQkFBNEJ6STtJQUMxQixJQUFMakIsT0FBT2tJLGFBQWFqSDtJQUN4QixHQUFHakIsbUJBQW1CYiw2QkFBNEI4QjtJQUNsRDtLQUFJMEksU0FBU3ZaO0tBQ1R3WjtjQUNHNUo7Z0JBQ0VBLG9CQUFrQkE7WUFDdEJpQjs7Ozs7b0JBS1F6UTtnQkFDSm1aO0lBRVR2QixpQkFBaUJ3QixjQUFZQTtJQUM3QixPQUFPQTtHQUNUO0dBdkNBLFNBQVNDLDRCQUE2QjVJO0lBQzNCLElBQUxqQixPQUFPa0ksYUFBYWpIO0lBQ3hCLEdBQUdqQixtQkFBbUJiLDZCQUE0QjhCO0lBQ2xEO0tBQUk2SSxXQUFZOUosd0JBQXdCdk4sWUFBYXVOO0tBQ2pENEo7Y0FDRzVKO2dCQUNFQSxvQkFBa0JBO1lBQ3RCaUI7Ozs7b0JBSVF6UTtrQkFDRnNaO0lBRVgxQixpQkFBaUJ3QixjQUFZQTtJQUM3QixPQUFPQTtHQUNUO0dBOUJBLFNBQVNHO0lBQ0QsSUFBRnJaO0lBQ0osSUFBVSxJQUFGYSxPQUFPQSxJQUFJNlcseUJBQXlCN1c7S0FBSTtPQUMzQzZXLGlCQUFpQjdXLE1BQU02VyxpQkFBaUI3VztVQUFhNlcsaUJBQWlCN1c7TUFDdkViLFFBQUswWCxpQkFBaUI3VyxPQUFNYjtJQUVoQyxPQUFPQTtHQUNUO0dBd1hBLFNBQVNzWixrQkFBa0IxQixRQUFPL1AsUUFBTzFDLFFBQU9oRztJQUNyQyxJQUFMMFksT0FBT0gsaUJBQWlCRTtJQUM1QixLQUFLQztLQUFhcEo7SUFDbEI1RyxTQUFTQSxnQkFBZ0IxQyxRQUFRQSxTQUFTaEc7SUFDMUMsR0FBRzBZLG1CQUFtQmhRLGdCQUFnQmdRLG1CQUFvQjtLQUNsRCxJQUFGOVgsUUFBUUQsV0FBVytYLG1CQUFtQmhRO0tBQzFDOUgsTUFBTThYO0tBQ05BLGNBQWM5WDs7SUFFaEIsT0FBTzhYOztPQUVMQSxnQkFBZ0JoUSxRQUFRZ1E7T0FDeEJBLG9CQUFvQmhRO09BQ3BCOFAsY0FBZUM7T0FDZjs7T0FFQUMsZ0JBQWdCaFEsUUFBUWdRO09BQ3hCQSxvQkFBb0JoUTtPQUNwQixHQUFHZ1Esb0JBQW9CQSxvQkFDckJGLGNBQWVDO09BQ2pCOztPQUVPLElBQUgyQixLQUFLMVI7T0FDVCxHQUFHMFIsT0FBUTtRQUNUMUIsZ0JBQWdCaFEsUUFBUWdRO1FBQ3hCQSxvQkFBb0JoUTtRQUNwQixHQUFHZ1Esb0JBQW9CQSxvQkFDckJGLGNBQWVDOztXQUVkO1FBQ0hDLGdCQUFnQmhRLG1CQUFtQjBSLFNBQVMxQjtRQUM1Q0Esb0JBQW9CMEI7UUFDcEI1QixjQUFlQztRQUNmQyxnQkFBZ0JoUSxnQkFBZ0IwUixTQUFTMUI7UUFDekNBLG9CQUFvQmhRLGdCQUFnQjBSOztPQUV0Qzs7SUFFRjtHQUNGO0dBSUEsU0FBU0MscUJBQXFCNUIsUUFBTy9QLFFBQU8xQyxRQUFPaEc7SUFDdEMsSUFBUDBJLFNBQVM4RywwQkFBMEI5RztJQUN2QyxPQUFPeVIsa0JBQWtCMUIsUUFBTy9QLFFBQU8xQyxRQUFPaEc7R0FDaEQ7R0FjQSxTQUFTc2EsZUFBZTdCLFFBQU8vUCxRQUFPMUMsUUFBT2hHO0lBQzNDLE9BQU9xYTthQUFxQjVCLFFBQU9wVyxxQkFBcUJxRyxTQUFRMUMsUUFBT2hHO0dBQ3pFO0dBS0EsU0FBU3VhLG9CQUFxQjlCLFFBQU8vVztJQUM3QixJQUFGbEIsSUFBSTZDLHVCQUF1Qi9DLG9CQUFvQm9CO0lBQ25ENFksZUFBZTdCLFFBQU9qWTtJQUN0QjtHQUNGO0dBamRBLFNBQVNnYSx5QkFBeUIvQixRQUFRbFA7SUFDL0IsSUFBTG1QLE9BQU9ILGlCQUFpQkU7SUFDNUJDLFlBQVluUDtJQUNaO0dBQ0Y7R1hXQSxTQUFTa1IsU0FBU3JZLEdBQUUrQixHQUNsQixHQUFJQSxRQUFRcUIsMEJBQ1osT0FBT3BELElBQUUrQixFQUNYO0dHMklBLFNBQVN1VyxjQUFldFksR0FBRytCO0lBQUssVUFBU3lILGlCQUFpQnhKLEdBQUUrQjtHQUFnQjtHTmhLNUUsU0FBU3dXLHNCQUF1Qi9aLEdBQUVlLEdBQ2hDZixZQUNBQSxPQUFLZSxHQUNMLFNBQ0Y7R0F4REEsU0FBU2laLGFBQWN4WTtJQUNyQixHQUFLQSxhQUFhOEIsU0FBVTlCLFFBQVNBO0tBQ25DLE9BQU9BO1lBQ0FrSixpQkFBaUJsSjtLQUN4QjtZQUNPaUosa0JBQWtCako7S0FDekI7WUFDUUEsYUFBYXlZLG1CQUFvQnpZO0tBQ3pDO1lBQ09BLEtBQUtBLGVBQ1osaUJBRUE7R0FDSjtHSm1HQSxTQUFTMFksbUJBQW1CQztJQUNwQixJQUFGMVo7SUFDSixHQUFHMFo7S0FBTSxJQUNHLElBQUYzYSxPQUFPQSxJQUFJMmEsYUFBYTNhO01BQzlCaUIsRUFBRWlNLHdCQUF3QnlOLEtBQUszYSxVQUFVMmEsS0FBSzNhO0lBR2xELE9BQU9pQjtHQUNUO0dBS0EsU0FBUzJaLHFCQUFzQjVaLEdBQUdPLEdBQUdzWjtJQUNuQyxHQUFJQSxTQUFVO0tBQ0gsSUFBTDFSLE9BQU8wUjtLQUNYLEdBQUd0WTtNQUNEdkIsSUFBSWlVLGNBQWMxUywyQkFBMkI0RzthQUV0Q3pHLHlCQUEwQjtNQUNqQyxLQUFJQTtPQUNGQSwwQkFBMEJnWSxtQkFBbUJoWTtNQUV2QyxJQUFKb1ksTUFBTXBZLHdCQUF3QnlHO01BQ2xDLEdBQUcyUjtPQUNEOVosSUFBSThaOztPQUVKOVIsdURBQXVERzs7O0lBSTdEekcsaUJBQWlCMUIsU0FBU087SUFDMUIsR0FBR3NaLFVBQVVuWSxpQkFBaUJtWSxZQUFZdFo7R0FDNUM7R0FqREEsU0FBU3daLDBCQUEwQmhNLElBQUd4TjtJQUNwQ3NOLGtCQUFrQjlNLHVCQUF1QmdOLE9BQU94TjtJQUNoRDtHQUNGO0dIMmhCQSxTQUFTeVosa0JBQWtCcmEsSUFBSUMsSUFDN0IsR0FBR0QsT0FBT0MsSUFBSSxVQUNkLFNBQ0Y7R0F4ZEEsU0FBU3FhO0lBQ1A3WDtHQUNGO0dBV0EsU0FBUzhYLGdCQUFpQjlhLEdBQUdKO0lBQzNCLEdBQUlBLFdBQVc0USxzQkFBc0J4USxJQUFJNmE7SUFDekMsT0FBT3BLLHVCQUF3QnpRLEdBQUdKO0dBQ3BDO0dBNlRBLFNBQVNtYixxQkFBcUJ4YSxJQUFJQztJQUFNLFdBQVNvYSxrQkFBa0JyYSxJQUFJQztHQUFLO0dBNEo1RSxTQUFTd2EscUJBQXFCaGI7SUFDM0JBLFdBQVljLDZCQUE2QmQ7SUFDMUMsT0FBTzZDLHVCQUF1QjdDO0dBQ2hDO0dDdmJBLFNBQVNpYiw0QkFBK0IsMEJBQTBCO0dJak1sRSxTQUFTQztJQUNQblcsb0JBQW9CekM7R0FBNkI7R0o2RG5ELFNBQVM2WSxnQkFBaUJwUztJQUNsQixJQUFGbEksSUFBSW9CLGdCQUFnQjZLLHdCQUF3Qi9EO0lBQ2hELEdBQUdsSSxNQUFNdUIsV0FDUDhZO0lBQ0YsT0FBT2hOLHdCQUF3QnJOO0dBQ2pDO0dBbUdBLFNBQVN1YTtJQUNQLEdBQUlqWjtLQUFtQixHQUNoQkEsa0NBQW1DO01BQy9CLElBQUZ4QyxJQUFJd0Msc0NBQXNDMEM7TUFDOUMsV0FBV2xGLE1BQU1BLE1BQU1BLE1BQU1BOzthQUNwQndDLDhCQUErQjtNQUNsQyxJQUFGeEMsUUFBUWtGLFdBQVcxQztNQUN2QixXQUFXeEMsTUFBTUEsTUFBTUEsTUFBTUE7O0lBR2xDLElBQUkwYixNQUFNLElBQUtDLGtCQUNYMVosSUFBSXlaLG1CQUFlcGI7SUFDdkIsV0FBVTJCO0dBQ1o7R0c3TUEsU0FBUzJaLGdCQUFnQi9UO0lBQ2pCLElBQUZ0RztJQUNKLE1BQU1zRyxPQUFPQSxjQUFjO0tBQ3pCQSxNQUFNQSxvQkFBb0J6SCxNQUFNeUg7S0FDaEN0Rzs7SUFFRixPQUFPc0c7R0FDVDtHQUdBLFNBQVNnVSx1QkFBdUIzYixHQUFFeUQsTUFDaEMsbUJBQWtCekQsYUFBV3lEO0dBQy9CO0dBZ0ZBLFNBQVNtWSxvQkFBb0J6WjtJQUNOO0tBQ25CLEdBQUdBLGFBQWEwQixPQUFPLE9BQU8xQjtLQUM5QixJQUFJUTtLQUVKO09BQUdMLHlCQUNHSCxhQUFhRztVQUNiSDtVQUNBQTtNQUNKUSxNQUFNRjs7T0FFQUgsNEJBQ0ZILGFBQWFHO1VBQ2JIO1VBQ0FBO01BQ0pRLE1BQU1GO2FBRUFOLGFBQWFHLG9CQUFvQnVNO01BQ3ZDbE0sVUFBU2tNLDZCQUE0QjFNOztNQUdyQ1EsVUFBU0YsMEJBQXlCNEwsd0JBQXlCcE8sT0FBT2tDO0tBRXBFLEdBQUlBLGFBQWFHLGtCQUNmSyxlQUFlUjtLQUNqQixPQUFPUTs7R0FHWDtHSDNIQSxTQUFTa1osMEJBQTBCbFo7SUFDakMsT0FBT0Esc0NBSUwsa0JBRUE7O0dBRUo7R0FJQSxTQUFTbVosc0JBQXNCblo7SUFDdkIsSUFBRjNCO0lBQ0osR0FBRzJCLFlBQWE7S0FDZDNCLEtBQUsyQjtLQUNMO09BQUdBLG1CQUFtQkEsa0JBQWtCa1osMEJBQTBCbFo7TUFFaEUsSUFBSW9aLFNBQVNwWixRQUNUcVo7O01BRUosSUFBSUEsV0FDQUQsU0FBU3BaO0tBRWYzQjtLQUNBLElBQVUsSUFBRmpCLElBQUlpYyxPQUFPamMsSUFBSWdjLGVBQWVoYyxJQUFLO01BQ3pDLEdBQUdBLElBQUlpYyxPQUFPaGI7TUFDUixJQUFGTSxJQUFJeWEsT0FBT2hjO01BQ2YsVUFBVXVCO09BQ1JOLEtBQUlNO2NBQ0VBLGFBQWFDO09BQ25CUCxXQUFVTTtxQkFFR0E7T0FDYk4sV0FBVU07O09BRVBOOztLQUVQQTs7WUFDUzJCLGVBQ1QzQixLQUFLMkI7SUFFUCxPQUFPM0I7R0FDVDtHQUlBLFNBQVNpYiw4QkFBOEJoTDtJQUNyQyxHQUFHQSxlQUFlcE4sVUFBVW9OLGVBQWVBLGVBQWdCO0tBQzdDLElBQVJpTCxVQUFVck47S0FDZCxHQUFHcU47TUFBU2xILGNBQWNrSCxVQUFVakw7U0FDL0I7TUFDSDtPQUFJL04sTUFBTTRZLHNCQUFzQjdLO09BQzVCa0wsVUFBVXROO01BQ2QsR0FBR3NOLFNBQVNuSCxjQUFjbUg7TUFDMUJoRCwwQ0FBMENqVztNQUMxQyxHQUFHK04sY0FBYyxNQUFNQTs7OztLQUd0QixNQUNHQTtHQUVWO0dBb1FBLFNBQVNtTDtJQUNLLElBQVIvWixVQUFVQztJQUNkLEdBQUdELFdBQVdBO0tBQ1pBOztnQkFBMEM0TyxLQUFLb0w7UUFDN0NKLDhCQUE4QmhMO1FBQzlCNU87T0FGOEI7WUFLMUJDO0tBQ05BOztnQkFBOENnYTtRQUM1QyxHQUFHQSxhQUNETCw4QkFBOEJLO09BRkc7R0FNekM7R0FDQUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHOzs7OztHOzs7OztHOzs7OztHOzs7OztHOzs7OztHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SXFCNU9JRzs7SUN0SEFDOzs7Ozs7Ozs7Ozs7Ozs7O0lDV0FDOzs7Ozs7Ozs7Ozs7O0lDeEJGQztJQUVBQztJQWdFQUM7SUFLQUM7SUF3Q0FDO0lBMkVBQztJQXNCQUM7SUFnQkFDO0lBY0FDO0lBS0FDO0lBZUFDOztJQ25QQUM7SUFPTWhRO0lBR0ZpUTtJQVNKQztJQUdBQztJQW1DTUM7SUFRQUM7SUFvQ0ZDO0lBaUJFQztJQUdGQztJQWFJQztJQVFBQztJQVFBQztJQVFBQztJQ2xKTkM7SUEyRUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7WUNpYUlDO0lBQUEsOEJBa0NZOzs7V0E5QlJDLGlCQUNSLFdBTElELFVBSUlDOztXQUVFQyxtQkFDVixXQVBJRixVQU1NRTs7V0FFSEMsbUJBQ1AsV0FUSUgsVUFRR0c7O1dBRUVDLG1CQUNULFdBWElKLFVBVUtJOztXQUlJQyxtQkFDYixXQWZJTCxVQWNTSzs7V0FGSkMsbUJBQ1QsV0FiSU4sVUFZS007O1dBSUFDLG1CQUNULFdBakJJUCxVQWdCS087O1dBRURDLG1CQUNSLFdBbkJJUixVQWtCSVE7O1dBRVdDLG1CQUFKQztPQUNmLFdBRGVBLElBcEJYVixVQW9CZVM7O1dBRVNFLG1CQUFYQztPQUNqQixXQURpQkEsS0FBQUEsS0F0QmJaLFVBc0J3Qlc7O1dBRW5CRSxtQkFDVCxZQXpCSWIsVUF3QkthOztXQUVBQyxvQkFDVCxZQTNCSWQsVUEwQktjOztXQUVGQyxvQkFDUCxZQTdCSWYsVUE0QkdlOztXQUVHQyxvQkFDVixZQS9CSWhCLFVBOEJNZ0I7bUJBRVFDLG9CQUNsQixZQWpDSWpCLFVBZ0NjaUI7O0dBRVU7WUFpQnhCQyxhQVdKQyxRQUFPQztJQUFVLFVBQWpCRCxxQkErQmdCLE9BL0JUQztXQUFQRDs7V0FDUWxCLE9BRFJrQixXQUVBLFdBYklELGFBWUlqQixNQUREbUI7O1dBR0dsQixTQUhWaUIsV0FJQSxXQWZJRCxhQWNNaEIsUUFISGtCOztXQUtBakIsU0FMUGdCLFdBTUEsV0FqQklELGFBZ0JHZixRQUxBaUI7O1dBT0VoQixTQVBUZSxXQVFBLFdBbkJJRCxhQWtCS2QsUUFQRmdCOztXQVNNZixTQVRiYyxXQVVBLFdBckJJRCxhQW9CU2IsUUFUTmU7O1dBV0VkLFNBWFRhLFdBWUEsV0F2QklELGFBc0JLWixRQVhGYzs7V0FhRWIsU0FiVFksV0FjQSxXQXpCSUQsYUF3QktYLFFBYkZhOztXQWVDWixTQWZSVyxXQWdCQSxXQTNCSUQsYUEwQklWLFFBZkRZOztXQTJCWVgsU0EzQm5CVSxXQTJCZVQsS0EzQmZTO09BNEJBLFdBRGVULElBdENYUSxhQXNDZVQsUUEzQlpXOztXQTZCb0JULFNBN0IzQlEsV0E2QnNCRSxNQTdCdEJGLFdBNkJpQlAsTUE3QmpCTztPQThCQSxXQURpQlAsS0FBS1MsS0F4Q2xCSCxhQXdDdUJQLFFBN0JwQlM7O1dBaUJFUCxTQWpCVE0sV0FrQkEsWUE3QklELGFBNEJLTCxRQWpCRk87O1dBbUJFTixVQW5CVEssV0FvQkEsWUEvQklELGFBOEJLSixTQW5CRk07O1dBcUJBTCxVQXJCUEksV0FzQkEsWUFqQ0lELGFBZ0NHSCxTQXJCQUs7O1dBdUJHSixVQXZCVkcsV0F3QkEsWUFuQ0lELGFBa0NNRixTQXZCSEk7O1dBeUJXSCxVQXpCbEJFLFdBMEJBLFlBckNJRCxhQW9DY0QsU0F6QlhHOztHQStCZTtZQU1sQkUsV0FJSkMsTUFBS0M7SUFBUSxVQUFiRCxtQkEyREEsT0EzREtDO1dBQUxEOztXQWlCS3RCLE9BakJMc0IsU0FrQkEsV0F0QklELFdBcUJDckIsTUFqQkF1Qjs7V0FtQkt0QixTQW5CVnFCLFNBb0JBLFdBeEJJRCxXQXVCTXBCLFFBbkJMc0I7O1dBQ1FyQixTQURib0IsU0FDUUUsTUFEUkY7T0FFQSxXQURRRSxLQUxKSCxXQUtTbkIsUUFEUnFCOztXQUdhcEIsU0FIbEJtQixTQUdhRyxRQUhiSDtPQUlBLFdBRGFHLE9BUFRKLFdBT2NsQixRQUhib0I7O1dBTWtCbkIsU0FOdkJrQixTQU1pQi9TLE9BTmpCK1MsU0FNWUksUUFOWkosU0FNS0ssUUFOTEw7T0FPQSxXQURLSyxPQUFPRCxPQUFLblQsTUFWYjhTLFdBVW1CakIsUUFObEJtQjs7O1FBUW9CbEIsU0FSekJpQjtRQVFtQk0sU0FSbkJOO1FBUWNPLFFBUmRQO1FBUU9RLFVBUlBSO09BU0EsV0FET1EsU0FBT0QsT0FBS0QsUUFaZlAsV0FZcUJoQixRQVJwQmtCOzs7UUFVd0JqQixTQVY3QmdCO1FBVXVCUyxTQVZ2QlQ7UUFVa0JVLFFBVmxCVjtRQVVXVyxVQVZYWDtPQVdBLFdBRFdXLFNBQU9ELE9BQUtELFFBZG5CVixXQWN5QmYsUUFWeEJpQjs7O1FBWW9CaEIsU0FaekJlO1FBWW1CWSxTQVpuQlo7UUFZY2EsUUFaZGI7UUFZT2MsVUFaUGQ7T0FhQSxXQURPYyxTQUFPRCxPQUFLRCxRQWhCZmIsV0FnQnFCZCxRQVpwQmdCOzs7UUFjb0JmLFNBZHpCYztRQWNtQmUsU0FkbkJmO1FBY2NnQixRQWRkaEI7UUFjT2lCLFFBZFBqQjtPQWVBLFdBRE9pQixPQUFPRCxPQUFLRCxRQWxCZmhCLFdBa0JxQmIsUUFkcEJlOztXQXFCTWIsU0FyQlhZLFNBcUJNa0IsUUFyQk5sQjtPQXNCQSxXQURNa0IsT0F6QkZuQixXQXlCT1gsUUFyQk5hOztXQStCQ1gsU0EvQk5VLFNBZ0NBLFlBcENJRCxXQW1DRVQsUUEvQkRXOztXQWtDZ0JWLFVBbENyQlMsU0FrQ2dCbEgsTUFsQ2hCa0g7T0FtQ0EsWUFEZ0JsSCxLQXRDWmlILFdBc0NpQlIsU0FsQ2hCVTs7V0FvQ2NULFVBcENuQlEsU0FvQ2NtQixNQXBDZG5CO09BcUNBLFlBRGNtQixLQXhDVnBCLFdBd0NlUCxTQXBDZFM7O1dBdUNtQlIsVUF2Q3hCTyxTQXVDaUJvQixRQXZDakJwQixTQXVDWXFCLFFBdkNackI7T0F3Q0EsWUFEWXFCLE9BQUtELE9BM0NickIsV0EyQ29CTixTQXZDbkJROztXQXlDcUJQLFVBekMxQk0sU0F5Q21Cc0IsVUF6Q25CdEIsU0F5Q2N1QixRQXpDZHZCO09BMENBLFlBRGN1QixPQUFLRCxTQTdDZnZCLFdBNkNzQkwsU0F6Q3JCTzs7V0F1QkN1QixVQXZCTnhCLFNBd0JBLFlBNUJJRCxXQTJCRXlCLFNBdkJEdkI7O1dBeUJDd0IsVUF6Qk56QixTQTBCQSxZQTlCSUQsV0E2QkUwQixTQXpCRHhCOztXQXFEdUJ5QixVQXJENUIxQixTQXFEZ0IyQixhQXJEaEIzQjtPQXNEQSxZQURnQjJCLFlBekRaNUIsV0F5RHdCMkIsU0FyRHZCekI7O1dBdUR1QjJCLFVBdkQ1QjVCLFNBdURnQjZCLGFBdkRoQjdCO09Bd0RBLFlBRGdCNkIsWUEzRFo5QixXQTJEd0I2QixTQXZEdkIzQjs7V0E2QkU2QixVQTdCUDlCLFNBOEJBLFlBbENJRCxXQWlDRytCLFNBN0JGN0I7O1dBNEMrQjhCLFVBNUNwQy9CLFNBNEMwQmdDLFdBNUMxQmhDLFNBNENlaUMsWUE1Q2ZqQztPQTZDQSxZQURlaUMsV0FBV0QsVUFoRHRCakMsV0FnRGdDZ0MsU0E1Qy9COUI7O1dBOENzQmlDLFVBOUMzQmxDLFNBOENrQm1DLFVBOUNsQm5DO09BK0NBLFlBRGtCbUMsU0FsRGRwQyxXQWtEdUJtQyxTQTlDdEJqQzs7V0FnRFVtQyxVQWhEZnBDLFNBaURBLFlBckRJRCxXQW9EV3FDLFNBaERWbkM7O1dBa0Rlb0MsVUFsRHBCckMsU0FrRGVzQyxNQWxEZnRDO09BbURBLFlBRGVzQyxLQXREWHZDLFdBc0RnQnNDLFNBbERmcEM7O1dBMkJhc0MsVUEzQmxCdkMsU0EyQmUzZixJQTNCZjJmLFNBMkJRekssUUEzQlJ5SztPQTRCQSxZQURRekssT0FBT2xWLEdBL0JYMGYsV0ErQmN3QyxTQTNCYnRDOztHQTJERDtpQkN2cEJDdGUsR0FBSSxXQUFKQSxHQUFPO2dCQUNSTixHQUFJLE9BQUpBLEtBQU87NEJBY29CQSxHQUFFdVAsTUFBS2pQO0lBRXhDLElBQUk2Z0IsTUFGNkJuaEI7V0FFN0JtaEIsUUFGK0I1UixRQUFGdlAsT0FBT007R0FRakM7WUNyQkw4Z0IsU0FBU2ppQjtJQUFJLE1BQUEseUNBQUpBO0dBQW9CO1lBQzdCa2lCLFlBQVlsaUI7SUFBSSxNQUFBLGtEQUFKQTtHQUE2QjtnQkE0Q3JDNEIsR0FBRStCLEdBQUksT0FBRyxlQUFUL0IsR0FBRStCLEtBQUYvQixJQUFFK0IsRUFBMkI7WUEwQmpDd2UsSUFBSXZnQixHQUFJLFlBQUpBLElBQUFBLE1BQUFBLE1BQTRCO09DQXhCd2dCO21CRGtIRjdoQixJQUFHQztJQUNYO0tBQUk2aEIsMkJBREk5aEI7S0FDc0IraEIsMkJBRG5COWhCO0tBRVBSLElBQUksa0JBREpxaUIsS0FBMEJDO0lBRTlCLGlCQUhRL2hCLE9BRUpQLE1BREFxaUI7SUFHSixpQkFKVzdoQixPQUVQUixHQURBcWlCLElBQTBCQztnQ0FDMUJ0aUI7R0FHb0I7WUFNdEJ1aUIsWUFBWTNoQjtJQUNkLFFBRGNBLFlBQUFBLEdBQzBDLE9BRDFDQTtJQUNXLE9BcE12QnNoQjtHQW9NMEU7WUE2QjFFTSxlQUFlcGlCLEdBQ2pCLE9BRGlCQSxjQUNZO1lFMUczQnFpQixjRnFIYzdoQixHQUNoQixZQURnQkEsRUFDQztZQVdmOGhCLGtCQUFrQjFpQjtJQUNwQixJQUFJSywwQkFEZ0JMO2FBRVoyaUIsS0FBSy9pQjtLQUNYLElBRFdnakIsTUFBQWhqQjtLQUNYO1NBRkVTLEtBQ1N1aUIsS0FDSSxjQUhHNWlCO01BSVosWUFBQSxnQkFKWUEsR0FFUDRpQjs7OztPQUFiLE9BRm9CNWlCOztNQUtJLElBSFg2aUIsTUFBQUQsYUFBQUEsTUFBQUM7O0lBSUg7SUFFVixPQU5RRjtHQU1GO1lBRUpHLGdCQUFnQmpqQjtJQUFJLE9BVnBCNmlCLGtCQVVzQywyQkFBdEI3aUI7R0FBOEM7R0F5QnREO0dBQ0M7SUFBVGtqQixTQUFTO0lBQ1RDLFNBQVM7WUFjVEMsYUFBYWpULE1BQUtrVCxNQUFLbmE7SUFDakIsSUFBSjdILElBQUksNEJBQW1CLGNBREY2SCxNQUFWaUgsTUFBS2tUO0lBRXBCLHlCQURJaGlCLEdBRHFCNkg7SUFFekIsT0FESTdIO0dBRUg7WUFFQ2lpQixTQUFTcGEsTUFDWCxPQU5Fa2EsdUJBS1NsYSxNQUM2RDtZQVV0RXFhO2FBQ01DO0tBQU87S0FBQTtvQkFDTDtVQUNIaGpCLGdCQUFIVjtNQUNFLElBQ0ksY0FGTkE7Ozs7O29CQUFHVTs7SUFNSztJQUNKLE9BVEFnakIsS0FTQTtHQUFzQjtZQVk1QkMsY0FBY0MsSUFBR3ZqQjtJQUNuQixPQUFBLGVBRGdCdWpCLElBQUd2akIsNEJBQUFBO0dBQzBCO1lBTzNDd2pCLGlCQUFpQkQsSUFBR3ZqQixHQUFFbUksS0FBSTNJO0lBQzVCLFFBRHdCMkksWUFBSTNJLDhCQUFOUSxLQUFNUixZQUFKMkk7S0FHbkIsT0FBQSxlQUhjb2IsSUFBR3ZqQixHQUFFbUksS0FBSTNJO0lBRXZCLE9BNVZIMGlCO0dBNlZvQztZQWFwQ3VCLFVBQVVGO0lBQUssY0FBTEE7SUFBZSxzQkFBZkE7SUFBZTtHQUFvQjtZQVk3Q0csWUFBWTFULE1BQUtrVCxNQUFLbmE7SUFDaEIsSUFBSjdILElBQUksMkJBQWtCLGNBREY2SCxNQUFWaUgsTUFBS2tUO0lBRW5CLHlCQURJaGlCLEdBRG9CNkg7SUFFeEIsT0FESTdIO0dBRUg7WUFFQ3lpQixRQUFRNWEsTUFDVixPQU5FMmEsb0JBS1EzYSxNQUNpQztZQVV6Q3FPLE1BQU13TSxJQUFHNWpCLEdBQUVtSSxLQUFJM0k7SUFDakIsUUFEYTJJLFlBQUkzSSw2QkFBTlEsS0FBTVIsWUFBSjJJO0tBR1IsT0FBQSxjQUhHeWIsSUFBRzVqQixHQUFFbUksS0FBSTNJO0lBRVosT0F4WUgwaUI7R0F5WTRCO1lBK0U1QjJCLGNBQWM3akI7SUF0SWRzakIsY0FwREFOLFFBMExjaGpCO0lBQ1Esb0JBM0x0QmdqQjtJQTJMK0MsT0FBQSxjQTNML0NBO0dBMkwyRDtHQWlEM0MsSUFBaEJjLHFCQTlNQVY7WUFnTklwSCxRQUFRbmM7SUFDZDtLQUVtQixJQUFma2tCLHdCQUNBQyxlQU5GRjtTQUtFRyxpQkFBQUYsY0FDQUcsYUFBQUY7S0FLVTtNQUpWRzs7U0FDRixtQkFIRUYsdUJBR3FELFdBTjNDcGtCO1NBTTJDLE9BQUEsV0FGckRxa0I7UUFHUztNQUVURSwwQkFYRk4sZUFNRUUsVUFDQUc7TUFLSixXQURJQztnQkFDSjs7R0FBNkI7WUFFM0JDLGtCQUFnQixPQUFBLGVBZGhCUCxtQkFjeUQ7R0FNckQsbURBTkpPO3NCOzRCO3NCOzs7O1lHNWhCaUJDLFNBQVMza0IsR0FBSSxtQkFBSkEsd0JBQWtCO0dDTmhEO1lBRUk0a0I7SUFBc0MsTUFBQTtHQUFlO1lBS3JEQyxpQkFBa0JDO0lBQ0csSUFBbkJDLFVBRGdCRDtJQUFBQSxTQUxsQkY7SUFPRjtLQUVlLElBQVRsWCxTQUFTLFdBSFhxWDtLQUlGLHNCQUxrQkQsS0FJZHBYO0tBQ0osT0FESUE7O1VBR0RzWDtTQUFBM2lCLHdCQUFBMmlCO0tBUGVGLHlCQVFrQyxNQUFBLDRCQURqRHppQixNQUN3RDtLQUMzRCxNQUFBLDRCQUZHQTs7R0FFSTtZQ1pQNGlCLElBQUkva0IsR0FBRXdSO0lBQUksS0FBSkEsR0FBeUI7UUFBWWxRLElBQXJDa1E7SUFBMEMsV0FBSyxXQUFqRHhSLEdBQXVDc0I7R0FBZTtZQ0gxRDBqQjtJQUFTLG1CQUFnQyxPTlN6QzNDO1FNVHFCL2dCO0lBQUssT0FBTEE7R0FBbUQ7WUFJeEUyakIsTUFBSWpsQixHQUFnQ21DO0ksU0FBQUEsTUFBZ0IsT0FBaEJBO1FBQWhCYixJQUFnQmE7SUFBWCxXQUFHLFdBQXhCbkMsR0FBZ0JzQjs7WUNkcEI0akIsV0NVSW5rQjtJQUNOLFFBRE1BLFlBQUFBLEdBQytDLE9BRC9DQTtJQUNtQixPUlF2QnNoQjtHUVIrRDtvQkFjL0RoaEI7SUFQVTs7Y0FPVkE7Z0JBQUFBLEdBTFE7ZUFLUkE7OztlQUFBQSxZQUFBQSxHQU5RO2NBTVJBO2NBQUFBOztVQURROztVQUZBOztVQURBOztVQUVBOzs7S0FRRSxJQUFKbEIsSUFBSTsyQkFBSkE7MkJBQUFBLFlBTk5rQjsyQkFNTWxCLGFBTk5rQjsyQkFNTWxCLFlBTk5rQjtpQ0FNTWxCOztJQUxJLElBQUpnbEIsTUFBSTswQkFBSkEsUUFETjlqQjtnQ0FDTThqQjtHQVVjOzRCQWlCcEI5akIsR0FEa0IsWUFDbEJBLGVBQUFBLElBQUFBLFdBQ007NEJBR05BLEdBRGtCLFlBQ2xCQSxlQUFBQSxJQUFBQSxXQUNNO29CQUlFVCxJQUFHQyxJQUFLLE9BQVJELEtBQUdDLE9BQXNCO2tCQUMxQkQsSUFBUUMsSUFBUyxxQkFBakJELElBQVFDLFlBQTBCO1lDN0N6Q3VrQjtJQUFLLFlBQ0MsT1RETmhEO1FTRUF0aUI7SUFBUSxPQUFSQTtHQUFTO1lBd0JMdWxCLFdBQVc3QyxJQUFHQztJQUNwQixJQURpQjZDLE9BQUE5QyxJQUFHK0MsT0FBQTlDO0lBQ3BCO1VBRGlCNkMsTUFFVCxPQUZZQztLQUdLO01BSFJDLE9BQUFGO01BR2Z4bEIsSUFIZXdsQjtNQUFHRyxXQUdsQjNsQixHQUhrQnlsQjtNQUFIRCxPQUFBRTtNQUFHRCxPQUFBRTs7R0FHYztZQUVoQ0MsSUFBSWxsQixHQUFJLE9BTEo2a0IsV0FLQTdrQixNQUFtQjtZQUVuQm1sQixpQkFBaUJDLEtBQUk3bEIsR0FBRWdCLEdBQUVmO0lBQy9CLElBRHVCNmxCLFFBQUFELEtBQUk3QyxNQUFBaGpCO0lBQzNCO1FBRDZCZ0IsS0FBRmdpQixLQUNaLE9BRFE4QztLQUVEO01BRks3QyxNQUFBRDtNQUFKK0MsWUFFQSxXQUZROWxCLEdBQUoraUIsTUFBSjhDO01BQUFBLFFBQUFDO01BQUkvQyxNQUFBQzs7R0FFaUI7WUFFdEMrQyxTQUFTaG1CLEdBQUVnQixHQUFFZjtJQUNuQixHQURpQmUsS0FBRmhCLEdBQ0E7SUFFTCxJQUFKaUIsSUFBSSxXQUhTaEIsR0FBSkQ7SUFJYixXQURJaUIsR0FIQStrQixTQUFTaG1CLFdBQUVnQixHQUFFZjtHQUlNO2lCQVNsQkwsS0FBSUs7SUFDWCxZQURPTDs7Z0JBQUFBO2dCQW5CTCtsQixJQUVJQyx1QkFpQkNobUIsS0FBSUs7Z0JBYkwrbEIsWUFhQ3BtQixLQUFJSztjVGpEVHFpQjtHU29EbUI7a0JBUVhyaUI7SSxZQUNGO0lBQ1UsSUFBYlEsY0FBSFYsY0FBWWtCLElBQUksV0FGUmhCLEdBRVJGO0lBQXVCLFdBQVhrQixTQUZKaEIsR0FFTFE7O29CQVFLUixHQUFFUTthQUNKd2xCO1NBQU9DOztvQkFDTCxPQURLQTtNQUVJO09BQVp6bEI7T0FBSFY7T0FBZSxhQUFDLFdBSFZFLEdBR05GLElBRldtbUI7T0FBQUE7aUJBRVJ6bEI7OztJQUVQLE9BSlF3bEIsVUFESXhsQjtHQUtEO2lCQUdBUjs7O21CQUNIO1NBQ0hRLGdCQUFIVjtLQUFRLFdBRkNFLEdBRVRGO21CQUFHVTs7O3NCQVFXUixHQUFFa21CLE1BQUsxbEI7SUFDdkIsSUFEa0J5bEIsU0FBQUMsTUFBS0MsTUFBQTNsQjtJQUN2QjtVQUR1QjJsQixLQUVmLE9BRlVGO0tBR0k7TUFIQ0csTUFBQUQ7TUFHckJybUIsSUFIcUJxbUI7TUFBTEUsU0FHSSxXQUhOcm1CLEdBQUVpbUIsUUFHaEJubUI7TUFIZ0JtbUIsU0FBQUk7TUFBS0YsTUFBQUM7O0dBR1c7bUJBNkNyQnZaOzs7bUJBQ0w7S0FDRSxJQUFMck0sZ0JBQUhWLGdCQUFRLE9BQUEsV0FGRytNLEdBRVgvTTtLQUFRLFNBQUE7bUJBQUxVOzs7aUJBa0JNdUI7OzttQkFDSDtTQUNIdkIsZ0JBQUhWLHVCQUFBQSxNQUZTaUM7O21CQUVOdkI7OztZQ25KSDhsQixNQUFJdmtCLEdBQUUrQixHQUFRLE9BQVYvQixLQUFFK0IsSUFBRi9CLElBQUUrQixFQUErQjtZQUNyQ3lpQixJQUFJeGtCLEdBQUUrQixHQUFRLE9BQVJBLEtBQUYvQixJQUFBQSxJQUFFK0IsRUFBK0I7WUFVckMwaUIsVUFBVXprQixHQUFJLFlBQUpBLEVBQXFCO21CQ1gxQmhCLEdBQUVNO0lBQ0QsSUFBSmxCLElBQUksa0JBRERZO0lBRVAsZ0JBRElaLE1BREdZLEdBQUVNO0lBRVQsT0FESWxCO0dBRUg7aUJBV01BO0lBQ1AsSUFBSVIsMkJBREdRLElBRUhhLElBQUksa0JBREpyQjtJQUVKLGdCQUhPUSxNQUVIYSxNQURBckI7SUFFSixPQURJcUI7R0FFSDtzQkFHV2IsR0FBSSxpQ0FBSkEsSUFBNkI7Z0JBRW5DQSxHQUFFbUksS0FBSTNJO0lBQ1osUUFEUTJJLFlBQUkzSSw2QkFBTlEsS0FBTVIsWUFBSjJJO0tBSUUsSUFBSnRILElBQUksa0JBSkVyQjtLQUtWLGdCQUxJUSxHQUFFbUksS0FJRnRILE1BSk1yQjtLQUtWLE9BRElxQjs7SUFGRCxPWHBDSHFoQjtHV3lDQzt1QkFFVTloQixHQUFFK0gsS0FBSTNJO0lBQU0sT0FBaUIseUJBQTdCWSxHQUFFK0gsS0FBSTNJO0dBQXNDO2lCQXVCbERlLElBQUcrbEIsTUFBSzlsQixJQUFHK2xCLE1BQUsvbUI7SUFDdkI7V0FEdUJBOztZQUFiOG1COzs4QkFBSC9sQixNQUFnQmYsWUFBYjhtQjtnQkFBUUMsOEJBQUgvbEIsTUFBUWhCLFlBQUwrbUIsTUFJYixnQkFKRWhtQixJQUFHK2xCLE1BQUs5bEIsSUFBRytsQixNQUFLL21CLE1BSWxCO0lBREEsT1hyRUgwaUI7R1dzRWtDO3dCQUV0QjNoQixJQUFHK2xCLE1BQUs5bEIsSUFBRytsQixNQUFLL21CO0lBQzlCO1dBRDhCQTs7WUFBYjhtQjs7K0JBQUgvbEIsTUFBZ0JmLFlBQWI4bUI7Z0JBQVFDLDhCQUFIL2xCLE1BQVFoQixZQUFMK21CLE1BSXBCLGlCQUpTaG1CLElBQUcrbEIsTUFBSzlsQixJQUFHK2xCLE1BQUsvbUIsTUFJekI7SUFEQSxPWDNFSDBpQjtHVzRFeUM7c0JBZ0VqQ2xpQjtJQUNWLElBQUlZLHdDQURNWixZQUNGOztTQUNSNGlCOzt3Q0FGVTVpQixHQUVWNGlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQURJaGlCLE9BQUFBO01BQ0osV0FBQWdpQjtrQkFBQUE7VUFBQUE7OztPQURJaGlCLDhCQURNWixJQVNZLFlBVFpBO0lBVUMsSUFBTGdsQixNQUFLLGtCQVRQcGtCO0lBQUFBO0lBV0YsZ0NBWlFaLFlBWVI7O1NBQUFKOztVQVlJc0IsMEJBeEJJbEIsR0FZUko7Ozs7Ozs7a0JBWUlzQjtvQkFBQUEsYUFBQUE7OztrQkFBQUE7b0JBQUFBO2tCQUFBQTs7b0NBZEE4akIsS0FURnBrQjtjQUFBQTtvQ0FTRW9rQixLQVRGcGtCOzs7b0NBU0Vva0IsS0FURnBrQjtjQUFBQTtvQ0FTRW9rQixLQVRGcGtCOzs7b0NBU0Vva0IsS0FURnBrQjtjQUFBQTtvQ0FTRW9rQixLQVRGcGtCOzs7b0NBU0Vva0IsS0FURnBrQjtjQUFBQTtvQ0FTRW9rQixLQVRGcGtCOzs7OztrQkF1QkVNOzsrQkFkQThqQixLQVRGcGtCO1NBQUFBOytCQVNFb2tCLEtBVEZwa0IsTUF1QkVNOzs7OEJBZEE4akIsS0FURnBrQjtRQUFBQTs4QkFTRW9rQixLQVRGcGtCLFlBdUJFTTtRQXZCRk47OEJBU0Vva0IsS0FURnBrQixhQXVCRU07UUF2QkZOOzhCQVNFb2tCLEtBVEZwa0IsWUF1QkVNOzs7NkJBZEE4akIsS0FURnBrQixNQXVCRU07O01BdkJGTjtNQVdGLFdBQUFoQjtrQkFBQUE7VUFBQUE7OztJQXlCQSxPQTNCSW9sQjtHQTRCSDtrQkFFR25sQixHQUFFRztJQUNSLElBQUlLLHlCQURJTDtJQUVSLFNBRElLLEdBQ1UsT0FGTkw7SUFHRSxJQUFKYSxJQUFJLGtCQUZOUixJQUdGLE9BSEVBLFdBRU07O1NBQ1JUOzs0QkFESWlCLEdBQ0pqQixHQUFxQyxXQUpqQ0MseUJBQUVHLEdBSU5KO01BQUEsV0FBQUE7a0JBQUFBO1VBQUFBOzs7SUFDQSxPQUZJaUI7R0FHSDs4QkF3Q2ViLEdBQUksOEJBQUpBLEdBQThCOzhCQUM5QkEsR0FBSSw4QkFBSkEsR0FBOEI7bUM7bUM7bUJDek56Q1ksR0FBRU0sR0FDVCwrQkFET04sR0FBRU0sSUFDUTtrQkFRWGxCLEdBQUVtSSxLQUFJM0k7SUFDWiw2Q0FETVEsSUFBRW1JLEtBQUkzSTtHQUNnQjtZQU0xQmduQixVQUFXNWtCLEdBQU8rQixHQUFJLE9BQUpBLEtBQVAvQixJQUFBQSxJWjFCWHNnQixpQlkwQnVFO1lBRW5FdUUsaUJBQWdCQztRQUFKaEI7O21CQUNWLE9BRFVBO1NBRWhCVDttREFBQUEsTUFGZ0JTO0tBR1E7TUFBbEJpQjtNQUFrQjtRQUx4QkgsaUNBSUF2QixNQUZvQnlCLGNBQUpoQixXQUFBQTtNQUFBQTtnQkFHVmlCOzs7WUFFRkMsYUFBYUMsVUFBUW5aLEtBQUlnWjtRQUFSSTs7bUJBQ2YsT0FEV0Q7U0FFakI1Qjs7TUFDQSxpQkFEQUEsT0FGaUI0QixLQUFJQyw2QkFFckI3QjtNQUNBLE9BSGlCNEI7O1NBSVhGO0tBQ04saUJBSEExQixPQUZpQjRCLEtBQUlDLE9BS3JCLHNCQUhBN0I7S0FJQTtPQU55QnZYLFFBQVJtWixLQUFJQyw4QkFFckI3QixTQUY2QnlCOztlQUFSSSw4QkFFckI3QixXQUY2QnlCO01BQVJJO2dCQUlmSDs7O21CQUtDalosS0FFUHJOO0ksS0FBQUEsR0FETTtRQUNHcW1CLCtCQUZGaFo7SUFHRDthQVpGa1o7ZUFhSSxrQkFsQkpILGVBZ0JLQyxRQUFUcm1COztlQUZPcU47ZUFFRWdaO2VBQVRybUI7O3NCQTBDUUw7YUFDRittQixpQkFBaUIvbUIsR0FBRVksR0FBRWhCO0tBQzNCLElBRDJCZ2pCLE1BQUFoakI7S0FDM0I7U0FEeUJnQixLQUFFZ2lCLEtBQ1osT0FEUTVpQjt3Q0FBQUEsR0FBSTRpQjs7Ozs7OztPQUtsQixJQUxrQkMsTUFBQUQsYUFBQUEsTUFBQUM7OztNQUlqQixtREFKYTdpQjs7SUFLWTtJQUVyQyxPQVBRK21CLGlCQURFL21CLHlCQUFBQTtHQVFxQjtZQUd6QmduQixVQUFVaG5CLEdBQUVpbkIsS0FBSXJuQixHQUFFc0I7SUFDeEIsSUFEc0IwaEIsTUFBQWhqQjtJQUN0QjtRQURrQnFuQixPQUFJckUsS0FDTCxNQUFBOytCQURENWlCLEdBQU00aUIsU0FBRTFoQixHQUVHLE9BRkwwaEI7U0FBQUMsTUFBQUQsYUFBQUEsTUFBQUM7O0dBRXFDO3VCQWM5QzdpQixHQUFFSixHQUFFc0I7SUFDakIsSUFBSWIsMEJBRFNMO1lBQUVKLEtBQ1hTLEtBRFdULEdBR2IsT0FuQklvbkIsVUFnQk9obkIsR0FDVEssR0FEV1QsR0FBRXNCO0lBRU0sT1puSHJCZ2hCO0dZb0hpQjswQkF5Q0hsaUIsR0FBRUosR0FBRXNCO0lBQ3BCLElBQUliLDBCQURZTDtZQUFFSixLQUNkUyxLQURjVDtLQUtoQixJQWpFSW9uQixVQTREVWhuQixHQUNaSyxHQURjVCxHQUFFc0IsSUFLYyxjQUFBOzs7NkJBQXVCOzs7SUFGdkQsT1poS0FnaEI7R1lrSzREO3FCQUduRGxpQixHQUFFa0IsR0FBSSxxQkFBTmxCLE1BQUVrQixHQUF1Qjs4QkFTbEJsQjtJQUNsQiwyREFEa0JBO0dBQ2M7OEJBQ2RBO0lBQ2xCLDJEQURrQkE7R0FDYztzQkFvRHJCNEIsR0FBTytCLEdBQVEsT0FBQSxvQkFBZi9CLEdBQU8rQixHQUEwQjtpQzttQkNuTnJDdEQsR0FBRVI7SUFDVCxTQURPUSxHQUNPO1dBRFBBLEdBRU8sT2JwQlo2aEI7SWF3QlMsSUFBTjFhLE1BQU0sZUFOSm5ILEdBTWEsV0FOWFIsUUFPUixPQVBNUSxXQU1JOztTQUNWVDs7TUFESTRILFFBQ0o1SCxLQUNtQixXQVJYQyxHQU9SRDtNQUNFLFdBREZBO2tCQUFBQTtVQUFBQTs7O0lBR0EsT0FKSTRIO0dBSUQ7bUJBOEJHcEksSUFBR2tuQixNQUFLaG5CLElBQUdpbkIsTUFBSy9tQjtJQUN2QjtXQUR1QkE7O1lBQWI4bUI7O1NBQUhsbkIsZ0JBQWdCSSxZQUFiOG1CO2dCQUFRQyxTQUFIam5CLGdCQUFRRSxZQUFMK21CO0tBSWIsZ0JBSkVubkIsSUFBR2tuQixNQUFLaG5CLElBQUdpbkIsTUFBSy9tQjtLQUlsQjs7SUFEQSxPYjdESDBpQjtHYThEa0M7a0JBVzlCcmlCLEdBQUVGO0lBQ1IsSUFBSVUsSUFESVY7SUFFUixTQURJVSxHQUNVO0lBQ0o7S0FBSlEsSUFBSSxlQUZOUixHQUVlLFdBSGJSLEdBQUVGO0tBSU4sT0FIRVU7S0FFTTs7U0FDUlQ7O01BRElpQixNQUNKakIsS0FDaUIsV0FMYkMsR0FBRUYsTUFJTkM7TUFDRSxXQURGQTtrQkFBQUE7VUFBQUE7OztJQUdBLE9BSklpQjtHQUtIO29CQThCT2xCO2FBQ0Z1bkIsT0FBT3RuQixHQUFFNEg7S0FDZixJQURhb2IsTUFBQWhqQixHQUFFdW5CLFFBQUEzZjtLQUNmO2FBRGFvYixLQUNDLE9BREN1RTtNQUN1QjtPQUR2QkMsWUFEUHpuQixNQUNLaWpCLE1BQUV1RTtPQUFGdEUsTUFBQUQ7T0FBQUEsTUFBQUM7T0FBRXNFLFFBQUFDOztJQUM4QztJQUMvRCxPQUZRRixPQURFdm5CO0dBR2M7WUFHbEIwbkI7UUFBWXZCOzttQkFDVixPQURVQTtLQUVSO01BQUw3a0I7TUFBSyxTQUZRNmtCO01BQUFBO2dCQUViN2tCOzs7b0JBSUhaO0lBRlUsS0FFVkEsR0FETTtJQUVJLElBRE5zbUIsS0FBSnRtQixNQUFBNGtCLEtBQUE1a0IsTUFDTVYsSUFBSSxlQVBOMG5CLGVBTUpobkIsSUFBQTRrQjtJQUVFLFNBQVFxQztTQUFLMUU7O29CQUFiLE9BRElqakI7VUFHSWduQixpQkFBSjFCO01BSEF0bEIsTUFDU2lqQixPQUVUcUM7TUFGSixJQUFBLE1BQWFyQyxhQUFBQSxxQkFFTCtEOzs7SUFDUixPQUhRVyxRQUZOWDtHQUtPO1lyQjNFWFksV0FBV0MsVUFBU0MsWUFBV25TO0lBQ2pDO0tBQUl0RSxPQUNGLFdBRld3VyxVQUFTQyxpQ0FBQUE7S0FHbEI3bUIsUUFGQW9RLE9BQUFBLFFBRDZCc0U7NEJBQUFBLGNBQUFBLFlBRzdCMVU7O1NBSDZCMFUsWUFBQUEsaUJBRzdCMVU7K0JBSDZCMFU7TUFpQjFCLEtBakIwQkEsV0FBQUEsV0FBQUEsY0FBQUEsWUFBQUE7O01BNEIzQjtPQURFb1M7U2tCckVOdkIsK0JsQjBDK0I3UTtTQTJCekJvUyxXQTNCeUJwUyxZQUFBQSxpQkFHN0IxVSxRUXpERnFoQjtNUnFGZSxJQUFUMEYsU0FBUyxrQkFKVEQ7TUFNSixLQWpDNkJwUyxXQUFBQSxXQStCekJxUyxXQS9CeUJyUyxZQUFBQTtNQUFBQSxZQStCekJxUzs7U0FTRjNuQixJQXhDMkJzVjtLQUFBQSxZQUFBQSxZQXdDM0J0VjtLQXhDMkJzVixZQUFBQSxZQXdDM0J0VjtLQXhDMkJzVjtLQUFBQSxZQUFBQSxZQXdDM0J0VjtLQXhDMkJzVixZQUFBQSxZQXdDM0J0VjtTQU1BaUIsSUE5QzJCcVUsbUJBOEMzQnJVOztVQUNKckI7O09BQ1UsSUFBSnVCLHFCQUZGRixHQUNKckIsT0FBQUE7ZUFDTXVCLEdBRUYsaUJBSkFGLEdBQ0pyQixPQUFBQSxLQUNNdUIsSUFSRm5CO09BT0osV0FBQUo7bUJBQUFBO1dBQUFBOzs7O0lBT0YsS0F0RHNCNm5CLGVBQVduUyxXQUFBQSxXQUc3QjFVO0lBSDZCMFUsWUFBQUEsWUFHN0IxVTs7R0FvRDhDOzBCQVNoQ2duQixLQUF1Qi9uQjtJQUN6QyxHQURrQituQjtTQUFpQkMsTUFBakJELFFBQUFFLGlCQUFpQkQ7O1NBQWpCQztJQUNsQjtLQUFBLE9BRGtCQSxpQkFQaEIxTDtZQU9nQjBMLGlCQVBoQjFMO0tBUTJCLE9BQUE7SUFBN0I7MkIsT0FqRUVtTCxXQWdFdUMxbkI7WUFFMUI7Ozs7Ozs7Ozs7O0dBV2Q7eUJBRWVpb0IsZ0JBQWVsRTtJQUMvQjthQURnQmtFLHlCQUNtQnpZLEtBQUl6TyxHQUFLLE9RaVExQ3dXLE1SbFE2QndNLElBQ0l2VSxRQUFJek8sR0FBcUI7R0FBQzt3QkFFN0NnbkIsS0FBdUI1bkI7SUFDdkMsR0FEZ0I0bkI7U0FBaUJDLE1BQWpCRCxRQUFBRSxpQkFBaUJEOztTQUFqQkM7SUFDaEI7S0FBQSxPQURnQkEsaUJBekJkMUw7WUF5QmMwTCxpQkF6QmQxTDtJQTBCRjtxQkFBcUI5RyxRQUFBQSx3QkFBd0M7c0JBRHRCdFY7a0NBQUFBOzs7Ozs7Ozs7O0dBY3RDO21CQVdRc1Y7SUFDVCxJQUFJOVYsTUFESzhWLFlBQUFBO0lBRVQsa0JBRlNBLFdBQUFBLFdBQ0w5VjtHQUN1RDt1QkFFOUM4VixRQUFPalcsSUFBR0U7SUFDdkIsSUFBSUMsTUFEbUJELEtBQUhGO0lBRXBCLGtCQUZhaVcsV0FBT2pXLElBQ2hCRztHQUNxQzs7YXNCcEhuQ3VvQixjQUFTLFlBQ0EsY0FDSHppQixjQUFNLE9BQU5BLEVBQU87YUFPYjBpQixPQUFPM25CLEdBQUVjLEdBQUVOO0tBQ2IsR0FEU1IsT0FDZ0NpRixJQURoQ2pGLE1BQ0w0bkIsS0FBcUMzaUIsWUFBckMyaUI7S0FDSixHQUZhcG5CLE9BRTRCcW5CLE1BRjVCcm5CLE1BRVRzbkIsS0FBcUNELGNBQXJDQztnQkFBQUEsTUFEQUYsS0FBQUEsYUFDQUU7S0FDQSxXQUhLOW5CLEdBQUVjLEdBQUVOO0lBR3lDO2FBT3BEdW5CLElBQUkvbkIsR0FBRWMsR0FBRU47S0FDVixHQURNUixPQUNtQ2lGLElBRG5DakYsTUFDRjRuQixLQUFxQzNpQixZQUFyQzJpQjtLQUNKLEdBRlVwbkIsT0FFK0JxbkIsTUFGL0JybkIsTUFFTnNuQixLQUFxQ0QsY0FBckNDO1NBQUFBLGNBREFGO1dBREU1bkIsR0FLTyxPZDFFZjZoQjtNYzRFd0IsSUFEQ21HLEtBTmpCaG9CLE1BTVdpb0IsS0FOWGpvQixNQU1La29CLEtBTkxsb0IsTUFPZ0IsT0ExQnBCMG5CLE9BeUJxQk07aUJBekJyQk4sT0F5QlNRLEtBRVUsT0FsQm5CUCxPQWdCU08sSUFBTUQsSUFoQmZOLE9BZ0JxQkssSUFOZmxuQixHQUFFTjtXQU1hd25CLElBS0osT2RoRnJCbkc7TWNrRjRDLElBRFhzRyxNQU5SSCxPQU1DSSxNQU5ESixPQU1OSyxNQU5NTCxPQU9tQixPQXZCeENMLE9Bc0I2QlEsS0FadkJybkIsR0FBRU47TUFhZ0MsT0F2QnhDbW5CLE9BQUFBLE9BZ0JTTyxJQUFNRCxJQU1BSSxNQUFPRDs7U0FYcEJSLGVBQ0FFO2lCQUFBQSxNQURBRixLQUFBQSxhQUNBRTtNQTBCRSxXQTVCQTluQixHQUFFYyxHQUFFTjs7VUFBQUEsR0FpQkcsT2R0RmZxaEI7S2N3RndCLElBREN5RyxLQWxCYjluQixNQWtCTytuQixLQWxCUC9uQixNQWtCQ2dvQixLQWxCRGhvQixNQW1CWSxPQXRDcEJrbkIsT0FxQ1NjO2dCQXJDVGQsT0FxQ3FCWSxLQUVmLE9BOUJOWCxPQUFBQSxPQVVJM25CLEdBQUVjLEdBa0JHMG5CLEtBQU1ELElBQU1EO1VBQVpFLElBS1EsT2Q1RnJCM0c7S2M4RjBDLElBRFQ0RyxNQU5wQkQsT0FNYUUsTUFOYkYsT0FNTUcsTUFOTkgsT0FPNkIsT0FuQ3RDYixPQWtDNkJjLEtBTmRGLElBQU1EO0tBT2lCLE9BbkN0Q1gsT0FBQUEsT0FVSTNuQixHQUFFYyxHQXdCUzZuQixNQUFPRDtJQUlnQzthQUlsRGxTLElBQUlqVixHQUVSWDtLLEtBQUFBLEdBRGEsY0FETFc7S0FHRSxJQURDZixJQUFYSSxNQUFRRSxJQUFSRixNQUFLWixJQUFMWSxNQUNNQyxJQUFJLG1CQUhGVSxHQUVBVDtLQUVOLFNBRElELEdBQ1UsT0FGaEJEO2FBQ01DLEdBTU8sSUFBTHluQixLQVRKOVIsSUFBSWpWLEdBRUdmLFdBQUFBLE1BT0g4bkIsS0FQUjFuQixJQWxDQW1uQixJQWtDSy9uQixHQUFHYyxHQU9Bd25CO0tBSEssSUFBTEosS0FOSjFSLElBQUlqVixHQUVIdkI7WUFBQUEsTUFJR2tvQixLQUpSdG5CLElBbENBbW5CLElBc0NRRyxJQUpBcG5CLEdBQUdOOzthQW1QUHdpQixLQUFLeGpCOzs7b0JBQ0E7VUFDRWdCLGdCQUFITSxnQkFBSGQ7TUFGRGdqQixLQUFLeGpCLEdBRUpRO01BQXNCLFdBRmxCUixHQUVEc0I7b0JBQUdOOzs7YUF5Q1Bvb0I7U0FBYW5EOztvQkFDUixPQURRQTtNQUVhO09BQW5CamxCO09BQUhNO09BQUhkO09BQXlCLGFBQXRCYyxHQUZKOG5CLGFBQWFuRCxRQUVOamxCO09BRk1pbEI7aUJBRVp6bEI7OzthQUVMNm9CLFNBQVNscEIsR0FDWCxPQUxNaXBCLGdCQUlLanBCLEdBQ007YUFtRVhtcEIsc0JBQXFCdHBCOzs7b0JBRXZCO01BRUc7T0FETWdCO09BQUh1b0I7T0FBSC9vQjtPQUNBLFVBQUEsV0FKb0JSLEdBR2pCdXBCLFFBQUd2b0IsSUFBTlI7OzthQU1EZ3BCLGNBQWN4cEI7OztvQkFFaEI7VUFDU2dCLGdCQUFITSxnQkFBSGQ7TUFDQSxHQUFBLFdBSmFSLEdBR1ZzQixJQUVKLE9BZEFnb0Isa0JBWUlob0IsR0FIVXRCLEdBR1BnQjtvQkFBTlI7OztJQTlhWDs7OztZQTBEVXdXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7WUFxUEF3TTs7Ozs7Ozs7WUErQ0o2Rjs7Ozs7Ozs7Ozs7WUE2RUlHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7WUNoZVJyQixjQUFZLGlCQUFvQjtZQUVoQ3NCLE1BQU10cEIsR0FBQUEsVUFBQUEsaUJBQXlCO1lBSS9CdXBCLEtBQUszbkIsR0FBRTVCLEdBQUFBLFdBQUY0QixHQUFFNUIsT0FBQUEsT0FBQUEsdUJBQXVDO1lBTzlDd3BCLFFBQVF4cEI7SUFDVixZQURVQTtnQkFHRTtRQUROMm1CLGVBQUoxQjtJQUZRamxCLE9BRUoybUI7SUFGSTNtQixPQUFBQTtJQUVpQyxXQUF6Q2lsQjtHQUNjO1lBT2R3RSxRQUFRenBCO0lBQ1YsWUFEVUE7Z0JBR0M7UUFEVGlsQjtJQUFTLFdBQVRBO0dBQ2E7WUFNYnlFLE9BQUs3cEIsR0FBRUcsR0FBSSxZQUFOSCxHQUFFRyxNQUFtQjtHQ25DOUI7WUFZSTJwQixnQkFBWSxvQkFJZjtZQUVHQyxRQUFNaGtCLEdBQUFBLFVBQUFBLFVBQUFBLGlCQUdLO1lBRVhpUixJQUFJalYsR0FBRWdFO0lBQ1IsSUFBSWlrQixXQURFam9CLE9BVUNrb0IsUUFWQ2xrQjtXQVVEa2tCO2VBVkNsa0IsT0FBQUEsY0FVRGtrQixXQVRIRCxNQURJamtCLE9BQ0ppa0I7ZUFESWprQixVQUFBQSxPQUNKaWtCLE1BRElqa0IsT0FDSmlrQjtHQVlZO1lBVWRFLFNBQVNua0I7SUFDWCxZQURXQTtnQkFFRjtRQUNBbkU7SUFBYSxXQUFiQTtHQUF5QjtZQUtoQ3VvQixLQUFLcGtCO0lBQ1AsV0FET0E7ZUFFRSxNQUFBO29CQUlTcWtCLGdCQU5YcmtCLE9BQUFBLGNBQUFBLE9BTVdxa0IsTUFHaEI7SUE3Q0FMLFFBb0NLaGtCO0lBSUw7R0FLTztZQUVQc2tCLFNBQVN0a0I7SUFDWCxXQURXQTtlQUVGO1FBQ0FuRTs7U0FHU3dvQjtLQU5QcmtCLE9BQUFBO0tBQUFBLE9BTU9xa0I7S0FHaEIsV0FOT3hvQjs7SUFsRFBtb0IsUUErQ1Noa0I7SUFLVCxXQUZPbkU7R0FNSztZQXNCWkYsT0FBT3FFLEdBQ1QsT0FEU0EsS0FDRDtZQzhDTnVrQixLQUFLdHFCLEdBQUksNkJBQUpBLE1BQXlEO1lDakk5RHVxQixTQUFPeHBCO0lBQ1Y7S0FBSXlwQixXQURNenBCLElBQUFBO0tBRU4wcEIsMEJBREFELDBCQUFBQTtLQUVBcnFCLElBQUksa0JBREpzcUI7SUFFSixXQURJdHFCLE1BREFzcUIsS0FDQXRxQjtHQUNzRDtZQUV2RHNCLFNBQVNsQixHQUFJLGtCQUFKQSxTQUFBQSxNQUEwQztZQUduRG1xQixNQUFJbnFCLEdBQUUrSCxLQUFJM0k7SUFDWixRQURRMkksWUFBSTNJLFFBQU5ZLE9BQU1aLFlBQUoySTtLQUdILGtCQUhDL0gsTUFBRStILEtBQUkzSTtJQUVQLE9sQlpIMGlCO0drQmFvQztZQWlCcENzSSxTQUFPcHFCLEdBQUksT0FBSkEsS0FBYztZQUlyQnFxQixNQUFNcnFCO0lBQUFBO0lBQUFBLE9BQUFBO0lBQUFBLDRCQUFBQTs7R0FHeUI7WUFVL0JzcUIsT0FBT3RxQixHQUFFdXFCO0lBQ1gsSUFBSUMsVUFES3hxQixNQUVMeXFCLFVBRkt6cUIsTUFHTDBxQixjQURBRDs7UUFDQUMsZUFGQUYsVUFET0Q7S0FHUEcsaUJBQUFBOzsyQkFBQUE7U0FGQUYsVUFET0Q7TUFHUEc7O01sQm5ERjdJO0lrQjBEZSxJQUFiOEksYUFBYSxrQkFQYkQ7SUFVSixLQWJTMXFCLFNBVUwycUIsZUFWSzNxQjtJQUFBQSxPQVVMMnFCO0lBVkszcUIsT0FHTDBxQjtRQUhLMXFCLE9BQUV1cUIsWUFBRnZxQjtLQWdCVCxNQUFBO1FBZkl3cUIsVUFET0QsYUFBRnZxQixNQWtCVDtJQURBLE1BQUE7R0FDRTtZWHRGQTRxQixTVzBIUzVxQixHQUFFYztJQUNiLElBQUlvTyxNQURPbFA7T0FBQUEsUUFDUGtQLEtBdkRGb2IsT0FzRFN0cUI7MEJBQUFBLE1BQ1BrUCxLQURTcE87SUFBRmQsT0FDUGtQOztHQUdpQjtZQTZCbkIyYixjQUFjN3FCLEdBQUVKLEdBQUV3RixRQUFPaEc7SUFDM0IsV0FEb0JnRzs7Ozs7YUFBT2hHOzZDQUFUUSxLQUFTUixXQUFQZ0c7YWxCdElsQjBjO1FrQnlJRWdKLGVBSFk5cUIsT0FBV1o7T0FBWFksT0FHWjhxQixjQTFGRlIsT0F1RmN0cUIsR0FBV1o7SUFLM0IsaUJBTGtCUSxHQUFFd0YsUUFBSnBGLE1BQUFBLE1BQVdaO0lBQVhZLE9BR1o4cUI7O0dBR3NCO1lBS3hCQyxXQUFXL3FCLEdBQUVKO0lBQ2YsSUFBSVIsNEJBRFdRLElBRVhrckIsZUFGUzlxQixPQUNUWjtPQURTWSxPQUVUOHFCLGNBcEdGUixPQWtHV3RxQixHQUNUWjtJQUdKLGlCQUplUSxNQUFGSSxNQUFBQSxNQUNUWjtJQURTWSxPQUVUOHFCOztHQUdzQjtZQ3dDeEJFLHdCQUF3QjNLLE9BQzFCLGFBRDBCQSxtQkFPWDtZQTZCYjRLLGNBQWNDO0lBQVksY0FBbUIsa0JBQS9CQTtHQUF1RDtZQUdyRUMsa0JBQWtCbGMsS0FBSW1jO0lBQ3hCLElBQUloc0IsMkJBRGdCNlAsU0FFaEJvYyxVQUZnQnBjLFNBQUltYztPQUNwQmhzQixNQUNBaXNCO0tBRVk7TUFBVlgsVVQ3TkoxRSxJUzBORTVtQixhQUNBaXNCO01BR0VqYyxVQUFVLGtCQURWc2I7S0FFSixLQU5rQnpiLFdBS2RHLFlBSkZoUTtLQURnQjZQLFNBS2RHOzs7R0FHTDtZQUdDa2MsZ0JBQWdCcmMsS0FBSW5PO0lBWHBCcXFCLGtCQVdnQmxjO0lBRWxCLGVBRmtCQSxRQUFBQSxRQUFJbk87SUFBSm1PLFNBQUFBOztHQUdJO1lBR3BCc2Msa0JBQWtCdGMsS0FBSXJQO0lBQ3hCLElBQUk0ckIsZ0NBRG9CNXJCO0lBakJ0QnVyQixrQkFpQmtCbGMsS0FDaEJ1YztJQUVKLFlBSHdCNXJCLE1BQUpxUCxRQUFBQSxRQUNoQnVjO0lBRGdCdmMsU0FBQUEsU0FDaEJ1Yzs7R0FHd0I7WUFHMUJDLGdCQUFnQnhjLEtBQ2xCLGtCQURrQkEsV0FBQUEsUUFDa0I7WUFZbEN5YyxjQUFnQmxFLEtBQVFuSDtJQUFRLEdBQWhCbUgsU0FBR0MsTUFBSEQsUUFBQW1FLEtBQUdsRSxjQUFIa0U7V0FBUXRMOztPQUNiOztPQUFpQjs7T0FDakI7O09BQWlCOztPQUNqQjs7T0FBaUIsT0FIWnNMOztPQUlMOztPQUFpQjtlQUNoQjs7R0FBRztZQStJZkMsa0JBQWtCM2MsS0FBSW9SO0lBQ3hCLE9BRHdCQTs7O09BOUt0QmlMLGdCQThLa0JyYztlQTlLbEJxYyxnQkE4S2tCcmM7O1lBQUlvUixVQU1WLE9BcExaaUwsZ0JBOEtrQnJjO0lBUWE7R0FBRTtZQWFqQzRjLHlCQUF5QkM7SUFBaUIsVUFBakJBO1lBQUFBOztRQUNEOztRQUNBOztRQUVBOztRQUNBOztRQUNBOztRQUVBO2dCQUNBOztXQVRDQTs7V0FHbEI1VCxNQUhrQjRULG1CQUdELE9BQWpCNVQ7O1dBSUs2VCxRQVBhRCxtQkFPRCxPQUFaQzttQkFHRGpyQixJQVZjZ3JCLG1CQVVILDZCQUFYaHJCOztHQUE0QjtZQW1CbkNrckIsYUFFSi9jLEtBQUl1UjtJQUFTLElBQVRFLFVBQUFGO0lBQVM7ZUFBVEUsc0JBeUJZO1lBekJaQTs7WUFBQXVMLFVBQUF2TDtRQTVOSjZLLGtCQTROQXRjO1lBQUl5UixVQUFBdUw7OztZQUFBQyxVQUFBeEw7UUE1Tko2SyxrQkE0TkF0YztZQUFJeVIsVUFBQXdMOzs7WUFBQUMsVUFBQXpMO1FBNU5KNkssa0JBNE5BdGM7WUFBSXlSLFVBQUF5TDs7O1lBQUFDLFVBQUExTDtRQTVOSjZLLGtCQTROQXRjO1lBQUl5UixVQUFBMEw7OztZQUFBQyxVQUFBM0w7UUE1Tko2SyxrQkE0TkF0YztZQUFJeVIsVUFBQTJMOzs7WUFBQUMsVUFBQTVMO1FBNU5KNkssa0JBNE5BdGM7WUFBSXlSLFVBQUE0TDs7O1lBQUFDLFVBQUE3TDtRQTVOSjZLLGtCQTROQXRjO1lBQUl5UixVQUFBNkw7OztZQUFBQyxVQUFBOUw7UUE1Tko2SyxrQkE0TkF0YztZQUFJeVIsVUFBQThMOzs7WUFBQUMsVUFBQS9MLFlBa0JXZ00sWUFsQlhoTTtRQTVOSjZLLGtCQTROQXRjO1FBRkkrYyxhQUVKL2MsS0FrQmV5ZDtRQTlPZm5CLGtCQTROQXRjO1lBQUl5UixVQUFBK0w7OztZQUFBRSxXQUFBak0sWUFxQmFrTSxjQXJCYmxNO1FBNU5KNkssa0JBNE5BdGM7UUFGSStjLGFBRUovYyxLQXFCaUIyZDtRQWpQakJyQixrQkE0TkF0YztZQUFJeVIsVUFBQWlNOzs7WUFBQUUsV0FBQW5NO1FBNU5KNkssa0JBNE5BdGM7WUFBSXlSLFVBQUFtTTs7O1lBQUFDLFdBQUFwTTtRQTVOSjZLLGtCQTROQXRjO1lBQUl5UixVQUFBb007OztZQUFBQyxXQUFBck07UUE1Tko2SyxrQkE0TkF0YztZQUFJeVIsVUFBQXFNOzs7WUFBQUMsV0FBQXRNO1FBNU5KNkssa0JBNE5BdGM7WUFBSXlSLFVBQUFzTTs7O1lBQUFDLFdBQUF2TTtRQTVOSjZLLGtCQTROQXRjO1lBQUl5UixVQUFBdU07OztHQXlCYztZQXdJZEM7SUFBQSw4QkF1Qlk7OztXQWpCUnBQLGlCQUFRLFdBTlpvUCxLQU1JcFA7O1dBT0VDLG1CQUFRLFdBYmRtUCxLQWFNblA7O1dBTkhDLG1CQUFRLFdBUFhrUCxLQU9HbFA7O1dBQ0VDLG1CQUFRLFdBUmJpUCxLQVFLalA7O1dBRUlDLG1CQUFRLFdBVmpCZ1AsS0FVU2hQOztXQURKQyxtQkFBUSxXQVRiK08sS0FTSy9POztXQUVBQyxtQkFBUSxXQVhiOE8sS0FXSzlPOztXQUNEQyxtQkFBUSxXQVpaNk8sS0FZSTdPOztXQU9XQyxtQkFBSkMsZUFDZixXQURlQSxJQW5CWDJPLEtBbUJlNU87O1dBRVFFLG1CQUFMVSxnQkFBTFQ7T0FDakIsV0FEc0JTLEtBQUxULEtBckJieU8sS0FxQnVCMU87O1dBTmxCRSxtQkFBUSxZQWZid08sS0FlS3hPOztXQURBQyxvQkFBUSxZQWRidU8sS0FjS3ZPOztXQUVGQyxvQkFBUSxZQWhCWHNPLEtBZ0JHdE87O1dBQ0dDLG9CQUFRLFlBakJkcU8sS0FpQk1yTzttQkFDUUMsb0JBQVEsWUFsQnRCb08sS0FrQmNwTzs7R0FLVTtZQUV4QnFPO0lBQUE7S0FTSjs2QkFBYSxPQUFJOzZCQUNKLE9BQUk7NkJBQ0osT0FBSTs2QkFDSixPQUFJOzs7T0FFSTtRQURiclA7UUFDYSxRQWRqQnFQLGNBYUlyUDtRQUNRc1A7UUFBSkM7UUFBSkM7UUFBSkM7T0FDSjsrQkFESUEsT0FDK0IsT0FBSTsrQkFEL0JELE9BRTJCLE9BQUk7ZUFGM0JEO2VBQUlEOztPQUtLO1FBRFhyUDtRQUNXLFVBbkJqQm9QLGNBa0JNcFA7UUFDTXlQO1FBQUpDO1FBQUpDO1FBQUpDO09BQ0o7K0JBRElBLFNBQytCLE9BQUk7K0JBRC9CRCxTQUUyQixPQUFJO2VBRjNCRDtlQUFJRDs7T0FLSztRQURkeFA7UUFDYyxVQXhCakJtUCxjQXVCR25QO1FBQ1M0UDtRQUFKQztRQUFKQztRQUFKQztPQUNKOytCQURJQSxTQUMrQixPQUFJOytCQUQvQkQsU0FFMkIsT0FBSTtlQUYzQkQ7ZUFBSUQ7O09BS0s7UUFEWjNQO1FBQ1ksVUE3QmpCa1AsY0E0QktsUDtRQUNPK1A7UUFBSkM7UUFBSkM7UUFBSkM7T0FDSjsrQkFESUEsU0FDK0IsT0FBSTsrQkFEL0JELFNBRTJCLE9BQUk7ZUFGM0JEO2VBQUlEOztPQVVLO1FBRFI5UDtRQUNRLFVBdkNqQmlQLGNBc0NTalA7UUFDR2tRO1FBQUpDO1FBQUpDO1FBQUpDO09BQ0o7K0JBRElBLFNBQytCLE9BQUk7K0JBRC9CRCxTQUUyQixPQUFJO2VBRjNCRDtlQUFJRDs7T0FMSztRQURaalE7UUFDWSxVQWxDakJnUCxjQWlDS2hQO1FBQ09xUTtRQUFKQztRQUFKQztRQUFKQztPQUNKOytCQURJQSxTQUMrQixPQUFJOytCQUQvQkQsU0FFMkIsT0FBSTtlQUYzQkQ7ZUFBSUQ7O09BVUs7UUFEWnBRO1FBQ1ksVUE1Q2pCK08sY0EyQ0svTztRQUNPd1E7UUFBSkM7UUFBSkM7UUFBSkM7T0FDSjsrQkFESUEsU0FDK0IsT0FBSTsrQkFEL0JELFNBRTJCLE9BQUk7ZUFGM0JEO2VBQUlEOztPQUtLO1FBRGJ2UTtRQUNhLFVBakRqQjhPLGNBZ0RJOU87UUFDUTJRO1FBQUpDO1FBQUpDO1FBQUpDO09BQ0o7K0JBRElBLFNBQytCLE9BQUk7K0JBRC9CRCxTQUUyQixPQUFJO2VBRjNCRDtlQUFJRDs7T0FpQ0s7UUFERDFRO1FBQ0MsVUFsRmpCNk8sY0FpRmdCN087UUFDSjhRO1FBQUpDO1FBQUpDO1FBQUpDO09BQ0o7K0JBRElBLFNBQytCLE9BQUk7K0JBRC9CRCxTQUUyQixPQUFJO2VBRjNCRDtlQUFJRDs7T0FLSztRQURNNVE7UUFBTFU7UUFBTFQ7UUFDSSxVQXZGakIwTyxjQXNGdUIzTztRQUNYZ1I7UUFBSkM7UUFBSkM7UUFBSkM7UUFDQXBSLEtBc0JKcVIsTUF2SUkxQyxLQStHYXpPLE1BQUtTO1FBR0QsVUF6RmpCaU8sY0F3RkE1TztRQUNZc1I7UUFBSkM7UUFBSkM7UUFBSkM7T0FDSjsrQkFISUwsU0FFQUssT0FDcUQsT0FBSTsrQkFEckRELE9BRkFMLFNBSWlELE9BQUk7K0JBSmpERCxTQUVBSyxPQUc2QyxPQUFJOytCQUg3Q0QsT0FGQUwsU0FNeUMsT0FBSTs7T0FqQ3hDO1FBRFo5UTtRQUNZLFdBNURqQnlPLGNBMkRLek87UUFDT3VSO1FBQUpDO1FBQUpDO1FBQUpDO09BQ0o7K0JBRElBLFNBQytCLE9BQUk7K0JBRC9CRCxTQUUyQixPQUFJO2VBRjNCRDtlQUFJRDs7T0FMSztRQURadFI7UUFDWSxXQXZEakJ3TyxjQXNES3hPO1FBQ08wUjtRQUFKQztRQUFKQztRQUFKQztPQUNKOytCQURJQSxVQUMrQixPQUFJOytCQUQvQkQsVUFFMkIsT0FBSTtlQUYzQkQ7ZUFBSUQ7O09BVUs7UUFEZHpSO1FBQ2MsV0FqRWpCdU8sY0FnRUd2TztRQUNTNlI7UUFBSkM7UUFBSkM7UUFBSkM7T0FDSjsrQkFESUEsVUFDK0IsT0FBSTsrQkFEL0JELFVBRTJCLE9BQUk7ZUFGM0JEO2VBQUlEOztPQUtLO1FBRFg1UjtRQUNXLFdBdEVqQnNPLGNBcUVNdE87UUFDTWdTO1FBQUpDO1FBQUpDO1FBQUpDO09BQ0o7K0JBRElBLFVBQytCLE9BQUk7K0JBRC9CRCxVQUUyQixPQUFJOytCQUYzQkQsVUFHdUIsT0FBSTsrQkFIdkJELFVBSW1CLE9BQUk7O09BRWxCO1FBREgvUjtRQUNHLFdBNUVqQnFPLGNBMkVjck87UUFDRm1TO1FBQUpDO1FBQUpDO1FBQUpDO09BQ0o7K0JBRElBLFVBQytCLE9BQUk7K0JBRC9CRCxVQUUyQixPQUFJOytCQUYzQkQsVUFHdUIsT0FBSTsrQkFIdkJELFVBSW1CLE9BQUk7O0dBYXVCO1lBaUI5RHJCLE1BV0VuUixLQUFJUztJQUFPOzs7Ozs7Ozs7Ozs7OztxQkFBWFQ7bUJBQUFBOzttQkFDTTRTLFFBRE41Uzt5QkFBSVM7dUJBQUFBOzt1QkFDaUJvUyxRQURqQnBTLFFBQzBCLFdBWmhDMFEsTUFZUXlCLE9BQWVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBQ2JDLFVBRlI5Uzt5QkFBSVM7dUJBQUFBOzt1QkFFcUJzUyxVQUZyQnRTLFFBRThCLFdBYnBDMFEsTUFhVTJCLFNBQWlCQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQUVwQkMsVUFKTGhUO3lCQUFJUzt1QkFBQUE7O3VCQUlld1MsVUFKZnhTLFFBSXdCLFdBZjlCMFEsTUFlTzZCLFNBQWNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBQ1pDLFVBTFBsVDt5QkFBSVM7dUJBQUFBOzt1QkFLbUIwUyxVQUxuQjFTLFFBSzRCLFdBaEJsQzBRLE1BZ0JTK0IsU0FBZ0JDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBRVpDLFVBUFhwVDt5QkFBSVM7dUJBQUFBOzt1QkFPMkI0UyxVQVAzQjVTLFFBT29DLFdBbEIxQzBRLE1Ba0JhaUMsU0FBb0JDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBRHhCQyxVQU5QdFQ7eUJBQUlTO3VCQUFBQTs7dUJBTW1COFMsVUFObkI5UyxRQU00QixXQWpCbEMwUSxNQWlCU21DLFNBQWdCQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQUVoQkMsVUFSUHhUO3lCQUFJUzt1QkFBQUE7O3VCQVFtQmdULFVBUm5CaFQsUUFRNEIsV0FuQmxDMFEsTUFtQlNxQyxTQUFnQkM7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkFMakJDLFVBSE4xVDt5QkFBSVM7dUJBQUFBOzt1QkFHaUJrVCxVQUhqQmxULFFBRzBCLFdBZGhDMFEsTUFjUXVDLFNBQWVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBNEJIQyxVQS9CbEI1VCxRQStCYTZULFFBL0JiN1Q7eUJBQUlTO3VCQUFBQTs7bUJBZ0N3QjtvQkFEa0JxVCxVQS9CMUNyVDtvQkErQnFDc1QsUUEvQnJDdFQ7b0JBZ0N3QixPQTNDOUIwUSxNQTBDb0J5QyxTQUE0QkU7bUJBQ2hELFdBM0NBM0MsTUEwQ2UwQyxPQUE0QkU7Ozs7Ozs7Ozs7OztlQUVyQixNQUFBOzttQkFHT0MsVUFwQzNCaFUsUUFvQ3FCaVUsT0FwQ3JCalUsUUFvQ2VrVSxPQXBDZmxVO3lCQUFJUzt1QkFBQUE7Ozs7bUJBc0NHO29CQURvQjBULFVBckN2QjFUO29CQXFDaUIyVCxPQXJDakIzVDtvQkFxQ1c0VCxPQXJDWDVUO29CQXNDRlgsS0FqREpxUixNQXZJSTFDLEtBc0xtQndGLE9BQ05JO29CQUVFLFFBaEtmM0YsY0ErSkE1TztvQkFDVXdVO29CQUFQQzttQkFBQUE7bUJBQU9EO21CQUdkLFdBTmlCSixNQUNNRSxNQWhEdkJqRCxNQStDNkI2QyxTQUNBRzs7Ozs7Ozs7Ozs7O2VBTUwsTUFBQTs7bUJBakNmSyxVQVZQeFU7eUJBQUlTLDJCQUFBQTtvQkFVbUJnVSxVQVZuQmhVO2dCQVU0QixZQXJCbEMwUSxNQXFCU3FELFNBQWdCQzs7ZUFDUixNQUFBOzttQkFHUkMsV0FkUDFVO3lCQUFJUzt1QkFBQUE7Ozs7dUJBY21Ca1UsV0FkbkJsVTttQkFjNEIsWUF6QmxDMFEsTUF5QlN1RCxVQUFnQkM7O2VBQ1IsTUFBQTs7bUJBR1ZDLFdBbEJMNVU7eUJBQUlTO3VCQUFBQTs7Ozs7O3VCQWtCZW9VLFdBbEJmcFU7bUJBa0J3QixZQTdCOUIwUSxNQTZCT3lELFVBQWNDOztlQUNOLE1BQUE7O21CQUdMQyxXQXRCUjlVO3lCQUFJUzt1QkFBQUE7Ozs7Ozs7O3VCQXNCcUJzVSxXQXRCckJ0VTttQkFzQjhCLFlBakNwQzBRLE1BaUNVMkQsVUFBaUJDOztlQUNULE1BQUE7O21CQUdBQyxXQTFCaEJoVjt5QkFBSVM7dUJBQUFBOzs7Ozs7Ozs7O3VCQTBCcUN3VSxXQTFCckN4VTttQkEyQk4sWUF0Q0EwUSxNQXFDa0I2RCxVQUF5QkM7O2VBRWpCLE1BQUE7O1lBb0JQLE1BQUE7O3FCQWhEYnhVLGtCQThDd0I7a0JBOUN4QkE7Ozs7Ozs7Ozs7Ozs7OztjQStDYSxNQUFBOzs7VUFISyxNQUFBOztTQVZGLE1BQUE7O1FBTEksTUFBQTs7T0FMUixNQUFBOztNQUpILE1BQUE7O0tBSkUsTUFBQTs7SUFKQSxNQUFBO0dBb0NjO0dBc0huQztZQUtJeVUsYUFHQXJVLEtBQUlrQjtJQUFTLFVBQWJsQixrQkFDaUIsY0FEYmtCO2FBQUpsQjtTQUVvQjVWLElBRnBCNFYsUUFFYXNVLFFBRmJ0VTtLQUU2QixlQUFoQnNVLE9BQU9scUIsSUFGaEI4Vzs7Y0FBQUEsNEJBQUFBO1NBR3NCMUMsT0FIdEIwQyxVQUdRcVQsVUFIWnZVO0tBR2tDLGVBQXRCdVUsVUFBYy9WOztJQUNyQixNQUFBO0dBQW1CO1lBS3hCZ1csYUFHQXhVLEtBQUlqVCxNQUFLbVU7SUFBcUIsWUFmOUJtVCxhQWVBclUsS0FBU2tCO2NBQUxuVTtTQUdxQzJSLG1CQUFMMkIsa0JBQXRCclQsSUFIVkQ7S0FJSixXQURvQ3NULFdBQXRCclQsSUFBMkIwUjs7U0FIckMzUjtTQUNrQzBSLG1CQUFMeUI7S0FDakMsV0FEaUNBLFVBQUt6Qjs7OztTQUlRRCxtQkFBWnlCO0tBQ2xDLFdBRGtDQSxVQUFZekI7O0lBRWYsTUFBQTtHQUFtQjtZQU05Q2lXLFlBTUZob0IsS0FBSXlVO0lBQWUsV0FJckJ3VCxnQkFKRWpvQixLQUFJeVU7O0tBRUQsTUFBQTtRQURVeVQ7SUFBdUIsT0FBdkJBO0dBQ1M7WUFFeEJELGdCQU1Fam9CLEtBQUl5VTtJQUFTLFVBQWJ6VSxrQkFtSDJCLGNBbkh2QnlVO1dBQUp6VTs7aUJBQUl5VSw0QkFBQUE7UUFFNkI7U0FEWjBULGFBRGpCMVQ7U0FDRDJULFdBREhwb0I7U0FFaUMsUUFSbkNpb0IsZ0JBT0tHLFVBQWtCRDtTQUNFeFQ7U0FBTnVUO1FBQ25CLGVBRG1CQSxRQUFNdlQ7Ozs7aUJBRm5CRiw0QkFBQUE7UUFLNkI7U0FEUDRULGVBSnRCNVQ7U0FJSTZULGFBSlJ0b0I7U0FLaUMsVUFYbkNpb0IsZ0JBVVVLLFlBQWtCRDtTQUNIbkk7U0FBTnFJO1FBQ25CLGVBRG1CQSxRQUFNckk7Ozs7T0FHbkI7UUFET3NJLGFBUFh4b0I7UUFPTXVULE1BUE52VDtRQVFJLFVBcERONG5CLGFBbURRclUsS0FQRmtCO1FBU2VqQjs7O1FBQ2dCO1NBRERpVjtTQUNDLFVBaEJyQ1IsZ0JBYWFPLFlBRXVCQztTQUNUdEk7U0FBTnVJO1FBQ25CLGVBRm1CbFYsT0FDQWtWLFFBQU12STs7T0FFRyxNQUFBOztPQUd4QjtRQURZd0ksYUFkaEIzb0I7UUFjV3lULFFBZFh6VDtRQWVJLFVBM0RONG5CLGFBMERhblUsT0FkUGdCO1FBZ0JlYjs7O1FBQ2dCO1NBRERnVjtTQUNDLFVBdkJyQ1gsZ0JBb0JrQlUsWUFFa0JDO1NBQ1R4STtTQUFOeUk7UUFDbkIsZUFGbUJqVixPQUNBaVYsUUFBTXpJOztPQUVHLE1BQUE7O09BR3hCO1FBRGlCMEksYUFyQnJCOW9CO1FBcUJlTSxPQXJCZk47UUFxQlUrVCxRQXJCVi9UO1FBcUJHMFQsUUFyQkgxVDtRQXNCSSxVQXRETituQixhQXFEWWhVLE9BQUt6VCxNQXJCWG1VO1FBdUJlUDs7O1FBQ2dCO1NBREU2VTtTQUFicFY7U0FDVyxVQTlCckNzVSxnQkEyQnVCYSxZQUVnQkM7U0FDWjFJO1NBQU4ySTtRQUNuQixlQUpHdFYsT0FFZ0JRLE9BQUtQLFFBQ0xxVixRQUFNM0k7O09BRU0sTUFBQTs7T0FHM0I7UUFEbUI0SSxhQTVCdkJqcEI7UUE0QmlCOFQsU0E1QmpCOVQ7UUE0QllxVSxRQTVCWnJVO1FBNEJLNlQsVUE1Qkw3VDtRQTZCSSxXQTdETituQixhQTREYzFULE9BQUtQLFFBNUJiVztRQThCZUY7OztRQUNnQjtTQURJMlU7U0FBZmpWO1NBQ1csV0FyQ3JDZ1UsZ0JBa0N5QmdCLFlBRWdCQztTQUNkNUk7U0FBTjZJO1FBQ25CLGVBSkt0VixTQUVjVSxPQUFLTixRQUNMa1YsUUFBTTdJOztPQUVNLE1BQUE7O09BRzNCO1FBRHVCOEksYUFuQzNCcHBCO1FBbUNxQm9VLFNBbkNyQnBVO1FBbUNnQjBVLFFBbkNoQjFVO1FBbUNTZ1UsVUFuQ1RoVTtRQW9DSSxXQXBFTituQixhQW1Fa0JyVCxPQUFLTixRQW5DakJLO1FBcUNlRzs7O1FBQ2dCO1NBRFF5VTtTQUFuQkM7U0FDVyxXQTVDckNyQixnQkF5QzZCbUIsWUFFZ0JDO1NBQ2xCOUk7U0FBTmdKO1FBQ25CLGVBSlN2VixTQUVVWSxPQUFLMFUsUUFDTEMsUUFBTWhKOztPQUVNLE1BQUE7O09BRzNCO1FBRG1CaUosYUExQ3ZCeHBCO1FBMENpQnlwQixTQTFDakJ6cEI7UUEwQ1kwcEIsUUExQ1oxcEI7UUEwQ0ttVSxVQTFDTG5VO1FBMkNJLFdBM0VOK25CLGFBMEVjMkIsT0FBS0QsUUExQ2JoVjtRQTRDZWtWOzs7UUFDZ0I7U0FESUM7U0FBZkM7U0FDVyxXQW5EckM1QixnQkFnRHlCdUIsWUFFZ0JJO1NBQ2RwSjtTQUFOc0o7UUFDbkIsZUFKSzNWLFNBRWN3VixRQUFLRSxRQUNMQyxRQUFNdEo7O09BRU0sTUFBQTs7T0FHM0I7UUFEbUJ1SixhQWpEdkIvcEI7UUFpRGlCZ3FCLFNBakRqQmhxQjtRQWlEWWlxQixTQWpEWmpxQjtRQWlES3NVLFFBakRMdFU7UUFrREksV0FsRk4rbkIsYUFpRmNrQyxRQUFLRCxRQWpEYnZWO1FBbURleVY7OztRQUNnQjtTQURJQztTQUFmQztTQUNXLFdBMURyQ25DLGdCQXVEeUI4QixZQUVnQkk7U0FDZDFKO1NBQU40SjtRQUNuQixlQUpLL1YsT0FFYzRWLFFBQUtFLFFBQ0xDLFFBQU01Sjs7T0FFTSxNQUFBOztPQUczQjtRQURLNkosYUF4RFR0cUI7UUF3REl1cUIsU0F4REp2cUI7UUF5REksV0FyR040bkIsYUFvR00yQyxRQXhEQTlWO1FBMERlK1Y7OztRQUNnQjtTQURIQztTQUNHLFdBakVyQ3hDLGdCQThEV3FDLFlBRXVCRztTQUNQL0o7U0FBTmdLO1FBQ25CLGVBRm1CRixRQUNBRSxRQUFNaEs7O09BRUcsTUFBQTs7T0FHSztRQUQ3QmlLLGFBL0RKM3FCO1FBZ0VpQyxXQXRFbkNpb0IsZ0JBcUVNMEMsWUEvREFsVztRQWdFbUJtTTtRQUFOZ0s7T0FDbkIsZ0JBRG1CQSxTQUFNaEs7O09BSVU7UUFEZGlLLGNBbkVuQjdxQjtRQW1FY21NLE1BbkVkbk07UUFvRWlDLFdBMUVuQ2lvQixnQkF5RXFCNEMsYUFuRWZwVztRQW9FbUJxTTtRQUFOZ0s7T0FDbkIsZ0JBRmdCM2UsS0FDRzJlLFNBQU1oSzs7T0FHVTtRQURoQmlLLGNBdEVqQi9xQjtRQXNFWXdVLE1BdEVaeFU7UUF1RWlDLFdBN0VuQ2lvQixnQkE0RW1COEMsYUF0RWJ0VztRQXVFbUJzTTtRQUFOaUs7T0FDbkIsZ0JBRmN4VyxLQUNLd1csU0FBTWpLOztpQkF2RW5CdE0sNEJBQUFBOztTQTJFcUJ3VyxlQTNFckJ4VztTQTJFU2tNLFlBM0VUbE07U0EwRTBCeVcsY0ExRTlCbHJCO1NBMEVtQjZnQixjQTFFbkI3Z0I7U0EwRVVtckIsVUExRVZuckI7UUE0RUMsR0FBQSxrQkFGa0I2Z0Isa0JBQ05GO1NBQ3FDLE1BQUE7UUFDakI7U0FBQSxXQW5GbkNzSCxnQkFnRmdDaUQsYUFDTEQ7U0FFRmpLO1NBQU5vSztRQUNuQixnQkFKWUQsU0FDR3hLLFdBRUl5SyxTQUFNcEs7Ozs7aUJBN0VuQnZNLDRCQUFBQTtRQWlGZ0M7U0FESTRXLGdCQWhGcEM1VztTQWdGVzZXLGFBaEZYN1c7U0ErRTRCOFcsY0EvRWhDdnJCO1NBK0VxQndyQixjQS9FckJ4ckI7U0ErRVl5ckIsWUEvRVp6ckI7U0FpRm9DLFdyQjNqQmxDOFIsVXFCMGpCYXdaO1FBQ2QsR0FBQSxrQnJCM2pCQ3haLFVxQnlqQm1CMFo7U0FHckIsTUFBQTtRQUVBO1NBQUEsV0ExRkZ2RCxnQkFxRmtDc0QsYXJCempCOUJ6WixVcUIwakJzQ3VaO1NBR2pCcEs7U0FBTnlLO1FBR25CLGdCQVBjRCxXQUNHSCxZQUdFSSxTQUFNeks7Ozs7aUJBbkZuQnhNLDZCQUFBQTtRQXlGNkI7U0FEVmtYLGdCQXhGbkJsWDtTQXdGQW1YLGNBeEZKNXJCO1NBeUZpQyxXQS9GbkNpb0IsZ0JBOEZNMkQsYUFBbUJEO1NBQ0F6SztTQUFOMks7UUFDbkIsZ0JBRG1CQSxTQUFNM0s7Ozs7aUJBekZuQnpNLDZCQUFBQTtRQTRGNkI7U0FEVnFYLGdCQTNGbkJyWDtTQTJGQXNYLGNBM0ZKL3JCO1NBNEZpQyxXQWxHbkNpb0IsZ0JBaUdNOEQsYUFBbUJEO1NBQ0FFO1NBQU5DO1FBQ25CLGdCQURtQkEsU0FBTUQ7Ozs7T0FLVTtRQURIRSxjQWhHOUJsc0I7UUFnR2MrZixpQkFoR2QvZjtRQWlHaUMsV0F2R25DaW9CLGdCQXNHZ0NpRSxhQWhHMUJ6WDtRQWlHbUIwWDtRQUFOQztPQUNuQixnQkFGZ0JyTSxnQkFDR3FNLFNBQU1EOztXQUVPRSxjQW5HOUJyc0IsUUFtR2Nzc0IsaUJBbkdkdHNCO09Bb0dGLE9BbUJBdXNCLG9CQXBCZ0JELGdCQUFnQkQsYUFuRzFCNVg7O2lCQUFBQSw2QkFBQUE7UUF3RzZCO1NBRFIrWCxnQkF2R3JCL1g7U0F1R0NnWSxjQXZHTHpzQjtTQXdHaUMsV0E5R25DaW9CLGdCQTZHT3dFLGFBQW9CRDtTQUNGRTtTQUFOQztRQUNuQixnQkFEbUJBLFNBQU1EOzs7O2lCQXhHbkJqWSw0QkFBQUE7UUEyRzZCO1NBRHNCbVksZ0JBMUduRG5ZO1NBMEc4Qm9ZLGNBMUdsQzdzQjtTQTBHd0JxVixXQTFHeEJyVjtTQTBHYXNWLFlBMUdidFY7U0EyR2lDLFdBakhuQ2lvQixnQkFnSG9DNEUsYUFBcUJEO1NBQ2hDRTtTQUFOQztRQUNuQixnQkFGZXpYLFdBQVdELFVBQ1AwWCxTQUFNRDs7OztpQkEzR25CclksNEJBQUFBO1FBOEc2QjtTQURVdVksZ0JBN0d2Q3ZZO1NBNkdxQndZLGNBN0d6Qmp0QjtTQTZHZ0J3VixVQTdHaEJ4VjtTQThHaUMsV0FwSG5DaW9CLGdCQW1IMkJnRixhQUFrQkQ7U0FDcEJFO1NBQU5DO1FBQ25CLGdCQUZrQjNYLFNBQ0MyWCxTQUFNRDs7OztXQUVMbmIsT0FoSGxCL1IsUUFnSGEyVixNQWhIYjNWO09BaUhGLE9Bc0JBb3RCLG1CQXZCZXpYLEtBQUs1RCxNQWhIZDBDOztJQXFIRCxNQUFBO0dBQW1CO1lBRXhCOFgsb0JBS0FELGdCQUFlZSxNQUFLQztJQUFVLFNBQTlCaEI7S0FFbUM7Y0FGbkNBO01BQ3dCbmdCO01BQU5rSDtNQUNpQixVQXBJbkM0VSxnQkFtSWtCNVUsTUFERWlhO01BRUtwYTtNQUFOSTtNQUNnQixVQXJJbkMyVSxnQkFrSWVvRixNQUVVbmE7TUFDQXFhO01BQU5DO0tBQ25CLHdCQUZtQmxhLE1BREtuSCxPQUVMcWhCLE9BQU1EOztJQUdVO2VBTm5DakI7S0FLd0J0TTtLQUFOeU47S0FDaUIsVUF4SW5DeEYsZ0JBdUlrQndGLFFBTEVIO0tBTUtJO0tBQU5DO0tBQ2dCLFVBekluQzFGLGdCQWtJZW9GLE1BTVVLO0tBQ0FFO0tBQU5DO0lBQ25CLHdCQUZtQkYsUUFESzNOLFNBRUw2TixTQUFNRDtHQUNtRDtZQUc1RVIsbUJBS0F6WCxLQUFJM1YsS0FBSXlVO0lBQVMsVUFBakJrQjtZQUFBQTs7UUFHc0MsT0EyQnRDbVksdUJBOUJBblksS0FBSTNWLEtBQUl5VTs7UUFJOEIsT0EwQnRDcVosdUJBOUJBblksS0FBSTNWLEtBQUl5VTs7UUFLOEIsT0F5QnRDcVosdUJBOUJBblksS0FBSTNWLEtBQUl5VTs7UUFNOEIsT0F3QnRDcVosdUJBOUJBblksS0FBSTNWLEtBQUl5VTs7UUFPOEIsT0F1QnRDcVosdUJBOUJBblksS0FBSTNWLEtBQUl5VTs7UUFROEIsT0FzQnRDcVosdUJBOUJBblksS0FBSTNWLEtBQUl5VTs7UUFTOEIsT0FxQnRDcVosdUJBOUJBblksS0FBSTNWLEtBQUl5VTs7UUFVOEIsT0FvQnRDcVosdUJBOUJBblksS0FBSTNWLEtBQUl5VTs7WUFjcUJrTSxZQWQ3QmhMLFFBY29Cd1YsVUFkcEJ4VjtRQWVBLE9BZUFtWSwyQkFoQm9CM0MsU0FBU3hLLFlBZHpCM2dCLEtBQUl5VTs7UUFrQk47U0FGNkJvTSxjQWhCL0JsTDtTQWdCc0I4VixZQWhCdEI5VjtTQWtCRSxPQXNCRm9ZLCtCQXhCK0JsTixhQWhCM0I3Z0IsS0FBSXlVOztTQWlCNEN5TDtTQUFOcUk7U0FBM0JpRDtRQUVuQixvQkFIc0JDLFdBQ0hELGNBQTJCakQsUUFBTXJJOztRQU5kLE9BbUJ0QzROLHVCQTlCQW5ZLEtBQUkzVixLQUFJeVU7Z0JBWThCLE9Ba0J0Q3FaLHVCQTlCQW5ZLEtBQUkzVixLQUFJeVU7O1dBQVJrQjs7T0FDc0MsT0E2QnRDbVksdUJBOUJBblksS0FBSTNWLEtBQUl5VTs7T0FFOEIsT0E0QnRDcVosdUJBOUJBblksS0FBSTNWLEtBQUl5VTs7aUJBQUFBLDZCQUFBQTtRQXlCNkI7U0FEakIwVCxhQXhCWjFUO1NBeUI2QixRQTNLckN3VCxnQkFrSklqb0IsS0F3QmdCbW9CO1NBQ094VDtTQUFOdVQ7UUFDbkIsbUJBRG1CQSxRQUFNdlQ7O09BRXBCLE1BQUE7ZUFkK0IsT0FpQnRDbVosdUJBOUJBblksS0FBSTNWLEtBQUl5VTs7R0E0QlQ7WUFFQ3FaLHVCQUtFblksS0FBSTNWLEtBQUl5VTtJQUNaO0tBQW1DLFFBdExqQ3dULGdCQXFMTWpvQixLQUFJeVU7S0FDYUU7S0FBTnVUO0lBQ25CLGdCQUZJdlMsS0FDZXVTLFFBQU12VDtHQUN3QjtZQUcvQ29aLCtCQUlBcE4sV0FBVTNnQixLQUFJeVU7SUFBUyxVQUF2QmtNO0tBMEVBLGNBeFFBc0gsZ0JBOExVam9CLEtBQUl5VTtXQUFka007O2lCQUFjbE0sNEJBQUFBO1FBR1o7U0FGOEIwVCxhQURsQjFUO1NBQ051WixpQkFEUnJOO1NBR0U7V0FQRm9OLCtCQUtRQyxnQkFERWh1QixLQUNzQm1vQjtTQUNJRDtTQUFqQitGO1FBRW5CLGVBRm1CQSxtQkFBaUIvRjs7OztpQkFGdEJ6VCw0QkFBQUE7UUFPWjtTQUZrQzRULGVBTHRCNVQ7U0FLSnlaLG1CQUxWdk47U0FPRTtXQVhGb04sK0JBU1VHLGtCQUxBbHVCLEtBSzBCcW9CO1NBQ0FFO1NBQWpCNEY7UUFFbkIsZUFGbUJBLG1CQUFpQjVGOzs7O2lCQU50QjlULDRCQUFBQTtRQVdaO1NBRjRCZ1UsZUFUaEJoVTtTQVNQMlosbUJBVFB6TjtTQVdFO1dBZkZvTiwrQkFhT0ssa0JBVEdwdUIsS0FTb0J5b0I7U0FDTUM7U0FBakIyRjtRQUVuQixlQUZtQkEsbUJBQWlCM0Y7Ozs7aUJBVnRCalUsNEJBQUFBO1FBZVo7U0FGZ0NtVSxlQWJwQm5VO1NBYUw2WixtQkFiVDNOO1NBZUU7V0FuQkZvTiwrQkFpQlNPLGtCQWJDdHVCLEtBYXdCNG9CO1NBQ0VDO1NBQWpCMEY7UUFFbkIsZUFGbUJBLG1CQUFpQjFGOzs7O2lCQWR0QnBVLDRCQUFBQTtRQW1CWjtTQUZ3Q3NVLGVBakI1QnRVO1NBaUJEK1osbUJBakJiN047U0FtQkU7V0F2QkZvTiwrQkFxQmFTLGtCQWpCSHh1QixLQWlCZ0Mrb0I7U0FDTkM7U0FBakJ5RjtRQUVuQixlQUZtQkEsbUJBQWlCekY7Ozs7aUJBbEJ0QnZVLDRCQUFBQTtRQXVCWjtTQUZnQ3lVLGVBckJwQnpVO1NBcUJMaWEsbUJBckJUL047U0F1QkU7V0EzQkZvTiwrQkF5QlNXLGtCQXJCQzF1QixLQXFCd0JrcEI7U0FDRUM7U0FBakJ3RjtRQUVuQixlQUZtQkEsb0JBQWlCeEY7Ozs7aUJBdEJ0QjFVLDRCQUFBQTtRQTJCWjtTQUZnQzRVLGVBekJwQjVVO1NBeUJMbWEsb0JBekJUak87U0EyQkU7V0EvQkZvTjthQTZCU2EsbUJBekJDNXVCLEtBeUJ3QnFwQjtTQUNFRTtTQUFqQnNGO1FBRW5CLGVBRm1CQSxvQkFBaUJ0Rjs7OztpQkExQnRCOVUsNEJBQUFBO1FBK0JaO1NBRjhCbVYsZUE3QmxCblY7U0E2Qk5xYSxvQkE3QlJuTztTQStCRTtXQW5DRm9OO2FBaUNRZSxtQkE3QkU5dUIsS0E2QnNCNHBCO1NBQ0lFO1NBQWpCaUY7UUFFbkIsZUFGbUJBLG9CQUFpQmpGOzs7O2lCQTlCdEJyViw0QkFBQUE7O1NBbURjMFYsZUFuRGQxVjtTQW1EQ3VhLGFBbkREdmE7U0FrRGF3YSxvQkFsRDNCdE87U0FrRGV1TyxlQWxEZnZPO1FBb0RHLEdBQUEsa0JBRll1TyxtQkFDQUY7U0FDdUMsTUFBQTtRQUVwRDtTQUFBO1dBMURGakI7YUFzRDJCa0IsbUJBbERqQmp2QixLQW1Ea0JtcUI7U0FFUUU7U0FBakI4RTtRQUVuQixlQUplSCxZQUVJRyxvQkFBaUI5RTs7OztpQkFyRHRCNVYsNEJBQUFBO1FBMkR5QjtTQUZJZ1csZUF6RDdCaFc7U0F5RGdCMmEsZUF6RGhCM2E7U0F5REc0YSxhQXpESDVhO1NBd0Q2QjZhLG9CQXhEM0MzTztTQXdEOEI0TyxlQXhEOUI1TztTQXdEaUI2TyxlQXhEakI3TztTQTJEdUMsV3JCN3RCbkM3TyxVcUIydEJhdWQ7UUFFZCxHQUFBLGtCckI3dEJDdmQsVXFCMHRCYTBkO1NBSVosTUFBQTtRQUNrQyxlckIvdEJuQzFkLFVxQjJ0QjBCc2Q7UUFJM0IsR0FBQSxrQnJCL3RCQ3RkLFVxQjB0QjBCeWQ7U0FNekIsTUFBQTtRQUNZO1NBQWIxTyxjQXpkSmdELE1BdklJMUMsS0EwbEJha08sYUFBYUQ7U0FPWCxVQXhrQmZoTyxjQXVrQkFQO1NBQ1VtRztTQUFQQztRQUFBQTtRQUFPRDtRQUlaO1NBQUE7V0F4RUYrRzthckI5cEJJamMsVXFCMHRCdUN3ZCxvQkF4RGpDdHZCLEtBeURpQ3lxQjtTQVVQQztTQUFqQitFO1FBR25CO29CQWJpQkosWUFBYUQsY0ExbEIxQmpPLEtBb21CZXNPO2dCQUFpQi9FOzs7O2lCQW5FdEJqVyw2QkFBQUE7UUFtQ1o7U0FGZ0N3VyxlQWpDcEJ4VztTQWlDTGliLG9CQWpDVC9PO1NBbUNFO1dBdkNGb047YUFxQ1MyQixtQkFqQ0MxdkIsS0FpQ3dCaXJCO1NBQ0VMO1NBQWpCK0U7UUFFbkIsZ0JBRm1CQSxvQkFBaUIvRTs7OztpQkFsQ3RCblcsNkJBQUFBO1FBdUNaO1NBRmdDNFcsZ0JBckNwQjVXO1NBcUNMbWIsb0JBckNUalA7U0F1Q0U7V0EzQ0ZvTjthQXlDUzZCLG1CQXJDQzV2QixLQXFDd0JxckI7U0FDRVA7U0FBakIrRTtRQUVuQixnQkFGbUJBLG9CQUFpQi9FOzs7O2lCQXRDdEJyVyw2QkFBQUE7UUEyQ1o7U0FGa0NrWCxnQkF6Q3RCbFg7U0F5Q0pxYixvQkF6Q1ZuUDtTQTJDRTtXQS9DRm9OO2FBNkNVK0IsbUJBekNBOXZCLEtBeUMwQjJyQjtTQUNBWDtTQUFqQitFO1FBRW5CLGdCQUZtQkEsb0JBQWlCL0U7Ozs7aUJBMUN0QnZXLDZCQUFBQTtRQStDWjtTQUZrRHFYLGdCQTdDdENyWDtTQTZDSXViLG9CQTdDbEJyUDtTQStDRTtXQW5ERm9OO2FBaURrQmlDLG1CQTdDUmh3QixLQTZDMEM4ckI7U0FDaEJWO1NBQWpCNkU7UUFFbkIsZ0JBRm1CQSxvQkFBaUI3RTs7OztJQTZCL0IsTUFBQTtHQUFtQjtZQTBCeEI4RSxPQVFFbHdCLEtBQUl5VTtJQUNSLE9BdFRNdVQsWUFxVEZob0IsS3JCL3dCRThSLFVxQmlJQXFQLEtBOG9CRTFNO0dBQ2dDO1lBTXRDMGIsWUFBWXRJLE9BQU11SSxPQUFNamtCO0lBQzFCO0tBQUk5WSw0QkFEc0I4WTtLQUVmMmIsZUFGU3NJLFFBQU52STtLQUVWd0ksVW5CcHNDRnJhLEltQmtzQ2tCb2E7T0FFaEJDLFdBREFoOUIsS0FhaUIsT0FkSzhZO0lBZWQsaUJBYkQyYixtQkFhTHpzQixhQWJGZzFCO0lBY0YsT0FkU3ZJOztPQWVFLFlBakJhM2IsUUFlcEI5USxRQWRGaEk7O09BaUJTLFlBbEJhOFksUUFlcEI5USxLQWJGZzFCLFVBREFoOUIsU0FBQUE7OztjQUFBQTtRQWtCeUQ7aUJBQWxDLGdCQW5CRDhZO29CQW1Ca0IsZ0JBbkJsQkEsa0JBbUJtQyxnQkFuQm5DQTs7UUFvQnRCLGVBTEU5USxRQUtjLGdCQXBCTThRO1FBcUJ0QixZQXJCc0JBLFFBZXBCOVEsTUFiRmcxQixVQURBaDlCLGtCQUFBQTs7OztjQUFBQSxjQXFCc0IsZ0JBdEJBOFk7UUFzQm1DLFdBQWpCLGdCQXRCbEJBLGtCQXNCbUMsZ0JBdEJuQ0E7O1FBdUJ0QixlQVJFOVEsUUFRYyxnQkF2Qk04UTtRQXdCdEIsWUF4QnNCQSxRQWVwQjlRLE1BYkZnMUIsVUFEQWg5QixrQkFBQUE7OztPQXlCQSxZQTFCc0I4WSxRQWVwQjlRLEtBYkZnMUIsVUFEQWg5QixTQUFBQTs7SUEyQkYsd0JBYklnSTtHQWFzQjtZQUcxQmkxQixrQkFBa0Jod0IsTUFBSzZMO0lBQ3pCO0tBQUl3SCxTbkJsdUNGcUMsSW1CaXVDa0IxVjtLQUVoQmpOLE1BQUosc0JBRnlCOFk7S0FJdkJwWCxJQURJLGdCQUhtQm9YOzs7OztjQUl2QnBYO2lCQUFBQTtnQkFBQUE7ZUFBQUE7OztjQUZFMUIsT0FEQXNnQix1QkFDQXRnQjtZQU9zRDtzQkFBakIsZ0JBVGhCOFk7d0JBU2lDLGdCQVRqQ0E7O1lBVWIsSUFBTjhPLGVBVEZ0SDtZQVVGLGVBRElzSCxVQUNZLGdCQVhPOU87WUFZdkI7Y0FadUJBLFFBVW5COE8sUUFURnRILFNBQ0F0Z0Isa0JBQUFBO1lBVUYsd0JBRkk0bkI7Ozs7Ozs7Ozs7OztVQVJGNW5CLFFBREFzZ0I7T0FJUSxJQUFOcUgsZUFKRnJIO09BS0YsZUFESXFILFVBREpqbUI7T0FHQSxZQVB1Qm9YLFFBS25CNk8sUUFKRnJILFNBQ0F0Z0Isa0JBQUFBO09BS0Ysd0JBRkkybkI7O2VBREpqbUIsVUFBQUEscUNBQUFBOztRQUZFMUIsTUFEQXNnQjtNQWNRLElBQU50WSxhQWRGc1k7TUFlRixZQWhCdUJ4SCxRQWVuQjlRLEtBZEZzWSxTQUNBdGdCLFNBQUFBO01BY0Ysd0JBRElnSTs7O0lBSUosT0FuQnVCOFE7R0FtQnBCO1lBR0hva0Isc0JBQXNCcGtCO0lBQ3hCO0tBQUk2VCxrQkFEb0I3VDtLQUVwQmpZLElBQUosc0JBREk4ckI7S0FFQTNrQixhQURBbkg7SUFFSixpQkFISThyQixVQUVBM2tCLFFBREFuSDtJQUVKLHdCQURJbUg7R0FFc0I7WUFJeEJtMUI7SUFBa0I7O09BQ2lCOztPQUFrQjs7T0FDbEI7O09BQWtCOztPQUM1Qzs7T0FBaUI7O09BQ2pCOztPQUFpQjs7T0FDakI7O09BQWlCOzs7T0FKUjs7O09BQ0E7ZUFJQTs7R0FBSTtZQUV0QkM7SUFBbUI7O09BQ2lCOztPQUFtQjs7T0FDbkI7O09BQW1COztPQUM5Qzs7T0FBa0I7O09BQ2xCOztPQUFrQjs7T0FDbEI7O09BQWtCOzs7T0FKVDs7O09BQ0E7ZUFJQTs7R0FBSztZQUV2QkM7SUFBbUI7O09BQ2lCOztPQUFtQjs7T0FDbkI7O09BQW1COztPQUM5Qzs7T0FBa0I7O09BQ2xCOztPQUFrQjs7T0FDbEI7O09BQWtCOzs7T0FKVDs7O09BQ0E7ZUFJQTs7R0FBSztZQUV2QkM7SUFBbUI7O09BQ2lCOztPQUFtQjs7T0FDbkI7O09BQW1COztPQUM5Qzs7T0FBa0I7O09BQ2xCOztPQUFrQjs7T0FDbEI7O09BQWtCOzs7T0FKVDs7O09BQ0E7ZUFJQTs7R0FBSztZQUd2QkMsZ0JBQWdCdGMsT0FBTWhVO0lBQ3RCO0tBQUlxVCxTbkJseUNKcUMsSW1CaXlDc0IxVjtLQUVsQjhOLE9BL2xDSnVSLG9CQTZsQ2dCckw7S0FHWnBSLE1BeG9DSmdjO0lBY0FLLGdCQTBuQ0lyYztJQTU4QkoyYyxrQkE0OEJJM2MsS0FIWW9SO0lBdm5DaEJpTCxnQkEwbkNJcmM7SUFwbkNKc2Msa0JBb25DSXRjLEtUcDFDSmdYLFVTazFDSXZHO0lBeG5DSjRMLGdCQTBuQ0lyYyxLQURBa0w7SUFNSixPQWxuQ0FzUixnQkE2bUNJeGM7R0FNZTtZQUVuQjJ0QixrQkFBa0JuZCxPQUFNN2Y7SUFDMUIsUUFEb0I2ZixPQXVCYixPQXZCbUI3ZjtJQUlkLElBQUpZLHlDQUprQlosWUFJZDs7U0FDUjRpQjs7cUNBTHNCNWlCLEdBS3RCNGlCLGlCQURJaGlCO01BQ0osV0FBQWdpQjtrQkFBQUE7VUFBQUE7OztJQU9RO0tBVE5xYSxTQUNFcjhCO0tBUUZ5TztPQUFNOytCQVpjclAsT0FHcEJpOUI7S0FVQTN0QjthQUNBNHRCLElBQUloOEIsR0FBSSxlQUZSbU8sS0FDQUMsUUFDSXBPLElBREpvTyxpQkFDc0M7SUFDL0I7S0FBUDZ0QixhQVpBRjtrQ0FIb0JqOUI7S0FlYjs7U0FDWEo7O1VBRUlzQiwyQkFsQm9CbEIsR0FnQnhCSjthQUVJc0I7T0FKQWc4QixJQUlBaDhCO29CQUhBaThCLFNBREFELFNBQ0FDLGNBQUFBLGVBREFELElBSUFoOEI7TUFGSixXQUFBdEI7a0JBQUFBO1VBQUFBOzs7SUFNQSx3QkFWSXlQO0dBV0U7WUFHTit0QixZQUFZdmQsT0FBTWpmO0lBQ3BCLE9BM0JFbzhCO2FBMEJZbmQsT0FDVSxnQkF2RXRCOGMsZ0JBc0VZOWMsUUFBTWpmO0dBQzBDO1lBQzVEeThCLGNBQWN4ZCxPQUFNamY7SUFDdEIsT0E3QkVvOEI7YUE0QmNuZCxPQUNRLGdCQXpEdEJnZCxpQkF3RGNoZCxRQUFNamY7R0FDMkM7WUFDL0QwOEIsa0JBQWtCemQsT0FBTWpmO0lBQzFCLE9BL0JFbzhCO2FBOEJrQm5kLE9BQ0ksZ0JBbkR0QmlkLGlCQWtEa0JqZCxRQUFNamY7R0FDMkM7WUFDbkUyOEIsY0FBYzFkLE9BQU1qZjtJQUN0QixPQWpDRW84QjthQWdDY25kLE9BQ1Esa0JBckV0QitjLGlCQW9FYy9jLFFBQU1qZjtHQUMyQztZQUkvRDQ4QixjQUFjL2MsT0FBTWhVLE1BQUs3SzthQUN2QjY3QjtLQUNGLE9BRmNoZDs7WUFFVmxiOztZQUFBQTtvQkFBQUE7O0tBS0osT0FBQSx3QkFQeUIzRCxHQUFMNkssTUFFaEJsSDtJQUswQjtJQUNoQyxTQUFJbTRCLGtCQUFrQnBsQjtLQUNwQixJQUFJOVksNEJBRGdCOFk7Y0FFWnFsQixTQUFTLzlCO01BQ2YsSUFEZWdqQixNQUFBaGpCO01BQ2Y7VUFEZWdqQixRQURicGpCLEtBRWM7T0FDUixXQUFBLGdCQUpVOFksS0FFSHNLOzs7Ozs7O1FBSU4sSUFKTUMsTUFBQUQsYUFBQUEsTUFBQUM7OztPQUdROztLQUNFO0tBQ3hCLE9BTEs4YSxjQUZZcmxCLGFBQUFBO0lBT2lCO0lBQ3ZDLFNBQUlzbEIsaUJBQWlCdGxCO0tBQVksWUFBQSxvQkFoQk4xVzswQkFBQUEsMkNBZ0JOMFc7SUFHRjtXQW5CSG1JOztPQXlCSixJQUFObkksTUFBTSxrQkF6RVZ5a0IsZ0JBZ0RjdGMsT0FBTWhVLE9BQUs3SztPQTBCUixPQVZmZzhCLGlCQVJBRixrQkFpQkVwbEI7O09BSk8sT0FwQlRtbEI7O09BcUJnQyx5QkFyQmhDQTs7T0FzQjJCLE9BUDNCRyxpQkFmQUg7ZUEyQkYsT0FBQSxrQkE1RUFWLGdCQWdEY3RjLE9BQU1oVSxPQUFLN0s7O0dBNEJrQjtZQUczQ2k4QixpQkFBaUIzOEI7SUFDbkI7S0FBSW9YLGNBRGVwWDtLQUVmYixJQUFKLHNCQURJaVk7S0FFQTlRLGFBREFuSDtJQUVKLGlCQUhJaVksUUFFQTlRLFFBREFuSDtJQUVKLHdCQURJbUg7R0FFc0I7WUFHeEJzMkIsZ0JBQWdCbGQ7SUFDUixJQUFOdlIsTUE3dENGZ2M7SUE4T0llLGFBKytCRi9jLEtBRGN1UjtJQUVsQixPQW5zQ0VpTCxnQkFrc0NFeGM7R0FFZTtZQVliMHVCLHVCQUdKLzNCLEdBQUV5ZixLQUFJdFo7SUFBTyxJQUFiNnhCLE1BQUFoNEIsR0FBRTBmLFFBQUFELEtBQUk0TyxRQUFBbG9CO0lBQU87ZUFBUGtvQixvQkF1Rk4sT0FBQSxXQXZGQTJKLEtBQUV0WTtZQUFJMk87O1lBQ0RuVyxPQURDbVc7UUFFTixnQkFBSW56QjtTQUNZLElBQVYrOEIsY0FISnZZLE9BRUV4a0I7U0FFRixPQVBFZzlCLFlBR0pGLEtBR01DLFNBRkQvZixNQUd1Qjs7WUFDbEJDLFNBTEprVztRQU1OLGdCQUFJbnpCO1NBQ1ksSUFBVis4QixjQVBKdlksT0ExQkZtWSxpQkFnQ0kzOEI7U0FFRixPQVhFZzlCLFlBR0pGLEtBT01DLFNBRkk5ZixRQUdrQjs7WUFDZkMsU0FUUGlXLFVBU0UzVSxNQVRGMlU7UUFVc0IsT0EwSTVCOEo7aUJBcEpBSCxLQUFFdFksT0FTV3RILFFBQUxzQixjQUN5QnBILEtBQU8sT0FBUEEsSUFBVTs7WUFDekIrRixTQVhaZ1csVUFXTzFVLFFBWFAwVTtRQVlOLE9Bd0lBOEosYUFwSkFILEtBQUV0WSxPQVdnQnJILFFBQUxzQixPQTlKYitjOzs7U0FnS3VCcGUsU0FiakIrVjtTQWFXNW5CLE9BYlg0bkI7U0FhTXpVLFFBYk55VTtTQWFEeFUsUUFiQ3dVO1FBY04sT0EwSkErSjtpQkF4S0FKLEtBQUV0WSxPQWFxQnBILFFBQVhzQixPQUFLblQsTUFqRmpCMndCLGFBaUZLdmQ7OztTQUVvQnRCLFNBZm5COFY7U0FlYXZVLFNBZmJ1VTtTQWVRdFUsUUFmUnNVO1NBZUNyVSxVQWZEcVU7UUFnQk4sT0F3SkErSjtpQkF4S0FKLEtBQUV0WSxPQWV1Qm5ILFFBQVh3QixPQUFLRCxRQWpGbkJ1ZCxlQWlGT3JkOzs7U0FFc0J4QixTQWpCdkI2VjtTQWlCaUJwVSxTQWpCakJvVTtTQWlCWW5VLFFBakJabVU7U0FpQktsVSxVQWpCTGtVO1FBa0JOLE9Bc0pBK0o7aUJBeEtBSjtpQkFBRXRZO2lCQWlCMkJsSDtpQkFBWDBCO2lCQUFLRDtpQkFqRnZCcWQ7aUJBaUZXbmQ7OztTQUVjMUIsU0FuQm5CNFY7U0FtQmFqVSxTQW5CYmlVO1NBbUJRaFUsUUFuQlJnVTtTQW1CQy9ULFVBbkJEK1Q7UUFvQk4sT0FvSkErSjtpQkF4S0FKLEtBQUV0WSxPQW1CdUJqSCxRQUFYNEIsT0FBS0QsUUFqRm5CbWQsZUFpRk9qZDs7O1NBRWtCNUIsU0FyQm5CMlY7U0FxQmE5VCxTQXJCYjhUO1NBcUJRN1QsUUFyQlI2VDtTQXFCQzVULFFBckJENFQ7UUFzQk4sT0ErTEFnSztpQkFyTkFMLEtBQUV0WSxPQXFCdUJoSCxRQUFYOEIsT0FBS0QsUUFBWkU7O1lBRUk3QixTQXZCTHlWLFVBdUJBM1QsUUF2QkEyVDtRQXdCTixPQTRIQThKLGFBcEpBSCxLQUFFdFksT0F1QlM5RyxRQUFMOEIsT25CdHdDTjhCOztRbUJ5eENjO1NBMUNSMUQsU0FBQXVWO1NBQUoxTyxZQUFBRDtTQUFBQSxRQUFBQztTQUFJME8sUUFBQXZWOzs7UUE2Q1E7U0E3Q1JDLFVBQUFzVjtTQTRDVS9iLE1BNUNWK2I7U0FBSmlLLFlBQUE1WSxPQTRDY3BOO1NBNUNkb04sUUFBQTRZO1NBQUlqSyxRQUFBdFY7OztRQStDUTtTQS9DUkMsVUFBQXFWO1NBOENRMVQsTUE5Q1IwVDtTQUFKa0ssWUFBQTdZLE9BOENZL0U7U0E5Q1orRSxRQUFBNlk7U0FBSWxLLFFBQUFyVjs7O1FBa0RHO1NBRGlCQyxVQWpEcEJvVjtTQWlEU3ZILFlBakRUdUg7U0FrREYxVixLQXBFSm1mLGdCQW1FZWhSO1FBRWYsZ0JBQUt4VTtTQUNILE9BdkRFNGxCLFlBR0pGLFNBQUV0WSxPQWtERS9HLEtBRHNCTSxTQUlzQjs7WUFDeEJDLFVBdERsQm1WLFVBc0RXelQsUUF0RFh5VDtRQXVETjtTQUFBLElBQWFsb0I7U0FDWCxPQTNERSt4QjtrQkFHSkYsS0FBRXRZLE9yQjMzQkVuRyxXcUJvcUJKOGMsT0E4UWFsd0IsS0FESXlVLFFBQU8xQixVQUVjOztZQS9CaEM4QixVQXpCQXFUO1FBMEJOLGdCQUFJeDBCLEdBQUUrQjtTQUFLLE9BN0JQczhCO2tCQUdKRjtzQkFBRXRZLGdCQTBCNENyVSxHQUFLLGtCQUEvQ3hSLEdBQTBDd1IsR0FBeEN6UCxHQUFrRDtrQkFEbERvZixTQUN5RDs7WUFDekRDLFVBM0JBb1Q7UUE0Qk4sZ0JBQUl4MEIsR0FBSyxPQS9CTHErQixZQUdKRixTQUFFdFksT0E0QkU3bEIsSUFERW9oQixTQUMwQzs7UUFnRGxDO1NBNUVSQyxVQUFBbVQ7U0EyRVVsVCxhQTNFVmtUO1NBQUptSyxZQUFBOVksT0EyRWN2RTtTQTNFZHVFLFFBQUE4WTtTQUFJbkssUUFBQW5UOzs7bUJBQUFtVDs7YUE2RXVDalQsVUE3RXZDaVQsVUFBQUs7YUFBSmpQLE1BQUFDLE9BQUYxZixJQUFBZzRCLEtBNkU2QzlmLE9BQUFrRDs7VUE3RTdDcWQ7cUJBOEVPQyxNQUNMLE9BbEZFUixZQUdKbDRCLE9BQUV5ZixTQThFS2laLFFBRHNDeGdCLE1BRXFCO1VBL0VsRThmLE1BQUFTO1VBQUUvWTtVQUFJMk8sUUFBQUs7OzthQWlGdUNwVCxVQWpGdkMrUyxVQUFBUTthQUFKcFAsTUFBQUMsT0FBRjFmLElBQUFnNEIsS0FpRjZDOWYsT0FBQW9EOztVQWpGN0NxZDtxQkFrRk9ELE1BQ0wsT0F0RkVSLFlBR0psNEIsT0FBRXlmLFNBa0ZLaVosUUFEc0N4Z0IsTUFFcUI7VUFuRmxFOGYsTUFBQVc7VUFBRWpaO1VBQUkyTyxRQUFBUTs7OztRQXdDTixNQUFBOztRQW1CYyxJQURPdFQsVUExRGY4UyxVQTJERjRKLGNBM0RGdlk7UUE0REYsdUJBQVMsT0EvREx3WSxZQUdKRixLQTJESUMsU0FEaUIxYyxTQUVjOztZQUNkRyxVQTdEZjJTO1FBaUVOLGdCQUFJenpCO1NBQ1ksSUFBVnE5QixjQWxFSnZZLE9Ba0VvQyx1QkFEbEM5a0I7U0FFRixPQXRFRXM5QixZQUdKRixLQWtFTUMsU0FMZXZjLFNBTU87O1lBQ2JFLFVBcEVUeVM7UUFxRU4sZ0JBQUluekI7U0FDWSxJQUFWKzhCLGNBdEVKdlksT0FxRUV4a0I7U0FFRixPQTFFRWc5QixZQUdKRixLQXNFTUMsU0FGU3JjLFNBR2E7O1lBQ1JDLFVBeEVkd1MsVUF3RVN2UyxNQXhFVHVTO1FBeUVOO1NBQUEsT0FBQTtrQkFrQkF1Syx3QkEzRkFaLEtBQUV0WSxPQXdFYTVELEtBQUtEOztRQUNwQixPQWtCQStjLDhCQTNGQVosS0FBRXRZLE9Bd0VhNUQsS0FBS0Q7O1FBMUNTO1NBRFhFLFVBN0Jac1M7U0E2QlN4MEIsSUE3QlR3MEI7U0E2QkV0ZixRQTdCRnNmO1NBOEJ1QixPQUFBLFdBRGR4MEI7UUFDYztTQUFBLE9BQUE7a0JBa083QmcvQixtQkFoUUFiLEtBQUV0WSxPQTZCZ0IzRCxTQUFWaE47O1FBQ3FCLE9Ba083QjhwQix5QkFoUUFiLEtBQUV0WSxPQTZCZ0IzRCxTQUFWaE47OztHQTBESDtZQTFGRG1wQixZQUdKbDRCLEdBQUV5ZixLQUFJdFo7SSx1QkFIRjR4QixpQkFHSi8zQixHQUFFeWYsS0FBSXRaOztZQTJGTnl5Qiw0QkFJQTU0QixHQUFFeWYsS0FBSTNELEtBQUkzVjtJQUFPLFVBQVgyVjtZQUFBQTs7UUFDNkI7U0FBQSxPQUFBLHVCQTZDbkNnZCxzQkE5Q0E5NEIsR0FBRXlmLEtBQVF0Wjs7UUFDeUIsT0E2Q25DMnlCLDRCQTlDQTk0QixHQUFFeWYsS0FBUXRaOztRQUV5QjtTQUFBLE9BQUEsdUJBNENuQzJ5QixzQkE5Q0E5NEIsR0FBRXlmLEtBQVF0Wjs7UUFFeUIsT0E0Q25DMnlCLDRCQTlDQTk0QixHQUFFeWYsS0FBUXRaOztRQWF5QixNQUFBOztRQUdBO1NBQUEsT0FBQSx1QkE4Qm5DMnlCLHNCQTlDQTk0QixHQUFFeWYsS0FBUXRaOztRQWdCeUIsT0E4Qm5DMnlCLDRCQTlDQTk0QixHQUFFeWYsS0FBUXRaOztXQUFKMlY7O09BRzZCO1FBQUEsT0FBQSx1QkEyQ25DZ2Qsc0JBOUNBOTRCLEdBQUV5ZixLQUFRdFo7O09BR3lCLE9BMkNuQzJ5Qiw0QkE5Q0E5NEIsR0FBRXlmLEtBQVF0Wjs7T0FJeUI7UUFBQSxPQUFBLHVCQTBDbkMyeUIsc0JBOUNBOTRCLEdBQUV5ZixLQUFRdFo7O09BSXlCLE9BMENuQzJ5Qiw0QkE5Q0E5NEIsR0FBRXlmLEtBQVF0Wjs7T0FLeUI7UUFBQSxPQUFBLHVCQXlDbkMyeUIsc0JBOUNBOTRCLEdBQUV5ZixLQUFRdFo7O09BS3lCLE9BeUNuQzJ5Qiw0QkE5Q0E5NEIsR0FBRXlmLEtBQVF0Wjs7T0FNeUI7UUFBQSxPQUFBLHVCQXdDbkMyeUIsc0JBOUNBOTRCLEdBQUV5ZixLQUFRdFo7O09BTXlCLE9Bd0NuQzJ5Qiw0QkE5Q0E5NEIsR0FBRXlmLEtBQVF0Wjs7T0FPeUI7UUFBQSxPQUFBLHVCQXVDbkMyeUIsc0JBOUNBOTRCLEdBQUV5ZixLQUFRdFo7O09BT3lCLE9BdUNuQzJ5Qiw0QkE5Q0E5NEIsR0FBRXlmLEtBQVF0Wjs7T0FReUI7UUFBQSxPQUFBLHVCQXNDbkMyeUIsc0JBOUNBOTRCLEdBQUV5ZixLQUFRdFo7O09BUXlCLE9Bc0NuQzJ5Qiw0QkE5Q0E5NEIsR0FBRXlmLEtBQVF0Wjs7T0FTeUI7UUFBQSxPQUFBLHVCQXFDbkMyeUIsc0JBOUNBOTRCLEdBQUV5ZixLQUFRdFo7O09BU3lCLE9BcUNuQzJ5Qiw0QkE5Q0E5NEIsR0FBRXlmLEtBQVF0Wjs7T0FVeUI7UUFBQSxPQUFBLHVCQW9DbkMyeUIsc0JBOUNBOTRCLEdBQUV5ZixLQUFRdFo7O09BVXlCLE9Bb0NuQzJ5Qiw2QkE5Q0E5NEIsR0FBRXlmLEtBQVF0Wjs7T0FXeUI7UUFBQSxPQUFBLHVCQW1DbkMyeUIsc0JBOUNBOTRCLEdBQUV5ZixLQUFRdFo7O09BV3lCLE9BbUNuQzJ5Qiw2QkE5Q0E5NEIsR0FBRXlmLEtBQVF0Wjs7V0FZZXlVLFFBWm5Ca0I7T0FZNkI7UUFBQSxPQUFBO2lCQVFuQ2lkLHVCQXBCQS80QixHQUFFeWYsS0FZdUI3RSxPQVpmelU7O09BWXlCLE9BUW5DNHlCLDhCQXBCQS80QixHQUFFeWYsS0FZdUI3RSxPQVpmelU7O09BY3lCO1FBQUEsT0FBQSx1QkFnQ25DMnlCLHNCQTlDQTk0QixHQUFFeWYsS0FBUXRaOztPQWN5QixPQWdDbkMyeUIsNkJBOUNBOTRCLEdBQUV5ZixLQUFRdFo7O09BZXlCO1FBQUEsT0FBQSx1QkErQm5DMnlCLHNCQTlDQTk0QixHQUFFeWYsS0FBUXRaOztPQWV5QixPQStCbkMyeUIsNkJBOUNBOTRCLEdBQUV5ZixLQUFRdFo7O0dBZ0JtRDtZQUk3RDR5QiwyQkFJQS80QixHQUFFeWYsS0FBSTdFLE9BQU16VTtJQUFPLFVBQWJ5VTtZQUFBQTs7WUFDRTFDLE9BREYwQztRQUNxQix1QkFBUyxPQUxwQ29lLGdCQUlBaDVCLEdBQUV5ZixLQUNNdkgsTUFESS9SLEtBQ3NEOztZQUN4RGdTLFNBRkp5QztRQUVxQix1QkFBUyxPQU5wQ29lLGdCQUlBaDVCLEdBQUV5ZixLQUVRdEgsUUFGRWhTLEtBRXNEOztZQUMzRGlTLFNBSER3QztRQUdxQix1QkFBUyxPQVBwQ29lLGdCQUlBaDVCLEdBQUV5ZixLQUdLckgsUUFIS2pTLEtBR3NEOztZQUN6RGtTLFNBSkh1QztRQUlxQix1QkFBUyxPQVJwQ29lLGdCQUlBaDVCLEdBQUV5ZixLQUlPcEgsUUFKR2xTLEtBSXNEOztZQUNyRG1TLFNBTFBzQztRQUtxQix1QkFBUyxPQVRwQ29lLGdCQUlBaDVCLEdBQUV5ZixLQUtXbkgsUUFMRG5TLEtBS3NEOztZQUN6RG9TLFNBTkhxQztRQU1xQix1QkFBUyxPQVZwQ29lLGdCQUlBaDVCLEdBQUV5ZixLQU1PbEgsUUFOR3BTLEtBTXNEOztZQUN6RHFTLFNBUEhvQztRQU9xQix1QkFBUyxPQVhwQ29lLGdCQUlBaDVCLEdBQUV5ZixLQU9PakgsUUFQR3JTLEtBT3NEOztZQUMxRHNTLFNBUkZtQztRQVFxQix1QkFBUyxPQVpwQ29lLGdCQUlBaDVCLEdBQUV5ZixLQVFNaEgsUUFSSXRTLEtBUXNEOztZQU1oRHVTLFNBZFprQztRQWNxQix1QkFBUyxPQWxCcENvZSxnQkFJQWg1QixHQUFFeWYsS0FjZ0IvRyxRQWROdlMsS0Fjc0Q7O1FBR3pEO1NBRGtCeVMsU0FoQnJCZ0M7U0FnQmdCdEIsTUFoQmhCc0I7U0FnQlcvQixNQWhCWCtCO1NBaUJGakMsS0E5MUJKcVIsTUF2SUkxQyxLQW8rQmF6TyxNQUFLUztRQUV0QjtTQUFTLE9BdEJUMGYsZ0JBSUFoNUIsR0FBRXlmLEtyQmxpQ0V0RyxhcUJtakNBUixJQUR1QkMsU0FoQmZ6UyxLQWtCNkM7O1lBVGhEMlMsU0FUSDhCO1FBU3FCO1NBQVcsT0FidENvZSxnQkFJQWg1QixHQUFFeWYsS0FTTzNHLFFBVEczUyxLQVN3RDs7WUFDM0Q0UyxVQVZINkI7UUFVcUIsdUJBQVMsT0FkcENvZSxnQkFJQWg1QixHQUFFeWYsS0FVTzFHLFNBVkc1UyxLQVVzRDs7WUFDM0Q2UyxVQVhENEI7UUFXcUIsdUJBQVMsT0FmcENvZSxnQkFJQWg1QixHQUFFeWYsS0FXS3pHLFNBWEs3UyxLQVdzRDs7UUFDdkMsTUFBQTs7UUFDQSxNQUFBOztJQUVBO0tBQUEsT0FBQSx1QkFPM0IyeUIsc0JBdEJBOTRCLEdBQUV5ZixLQUFVdFo7O0lBZWUsT0FPM0IyeUIsNEJBdEJBOTRCLEdBQUV5ZixLQUFVdFo7R0FrQjZDO1lBdEJ6RDZ5QixnQkFJQWg1QixHQUFFeWYsS0FBSTdFLE9BQU16VTtJLHVCQUpaNHlCLHFCQUlBLzRCLEdBQUV5ZixLQUFJN0UsT0FBTXpVOztZQXNCWjJ5QiwwQkFHQTk0QixHQUFFeWYsS0FBSXRaO0lBQ00sZUFEVnNaO0lBQ0o7S0FBQSxPQUFBLHVCQXBKTXNZLG1CQW1KSi8zQixTQUFNbUc7O0lBQ1IsT0FwSk00eEIseUJBbUpKLzNCLFNBQU1tRztHQUM4RDtZQUdwRWd5QixhQUlFbjRCLEdBQUV5ZixLQUFJdFosS0FBSXVULEtBQUlzUTtJQUFTLFVBQWJ0UTtLQUVaLGdCQUFJOWQ7TUFDWSxJQUFWcThCLGNBSEZ4WSxLQUdrQyxXQUh0QnVLLE9BRVpwdUI7TUFFRixPQS9KRXM4QixZQTJKRmw0QixHQUdJaTRCLFNBSEU5eEIsS0FJbUI7YUFKZnVUO1NBS1E2YyxRQUxSN2MsUUFLQ3NVLFFBTER0VTtLQU1aLGdCQUFJOWQ7TUFDWSxJQUFWcThCLGNBUEZ4WSxLQWhXSjZXLFlBcVdhdEksT0FBT3VJLE9BRTBDLFdBUDlDdk0sT0FNWnB1QjtNQUVGLE9BbktFczhCLFlBMkpGbDRCLEdBT0lpNEIsU0FQRTl4QixLQVFtQjs7UUFDZjhuQixVQVRBdlU7SUFVWixnQkFBSTVWLEdBQUVsSTtLQUNVLElBQVZxOEIsY0FYRnhZLEtBaFdKNlcsWUF5V1lySSxTQUNSbnFCLEdBQ3NELFdBWDFDa21CLE9BVVZwdUI7S0FFSixPQXZLRXM4QixZQTJKRmw0QixHQVdJaTRCLFNBWEU5eEIsS0FZbUI7R0FBQTtZQUkzQml5QiwyQkFLRXA0QixHQUFFeWYsS0FBSXRaLEtBQUl1VCxLQUFJalQsTUFBS3VqQixPQUFNblE7SUFBUyxVQUF4Qkg7ZUFBSWpUO2FBQUFBOztnQkFVWkMsR0FBRTlLO2dCQUNNLElBQU4wVyxNQWpXTm1rQixrQkFnV0kvdkIsR0FDNEIsV0FYWHNqQixPQUFNblEsT0FVckJqZTtnQkFFSixPQTVMRXM4QixZQWdMRmw0QixPQUFFeWYsS0FXRW5OLE1BWEVuTTtlQVl3Qzs7Z0JBVjVDdks7Z0JBQ1EsSUFBTjBXLE1BQU0sV0FIUzBYLE9BQU1uUSxPQUV2QmplO2dCQUVGLE9BcExFczhCLFlBZ0xGbDRCLE9BQUV5ZixLQUdFbk4sTUFIRW5NO2VBSXdDO1NBQ3RCTyxJQUxWRDtLQU1oQixnQkFBSTdLO01BQ1EsSUFBTjBXLE1BN1ZObWtCLGtCQTJWMEIvdkIsR0FFTSxXQVBYc2pCLE9BQU1uUSxPQU12QmplO01BRUYsT0F4TEVzOEIsWUFnTEZsNEIsT0FBRXlmLEtBT0VuTixNQVBFbk0sS0FRd0M7O2FBUnBDdVQ7U0FpQlE1VixJQWpCUjRWLFFBaUJDc1UsUUFqQkR0VTtlQUFJalQ7YUFBQUE7O2dCQXNCWkMsR0FBRTlLO2dCQUNNO2lCQUFOMFc7bUJBNVlOZ2tCO3FCQXNZYXRJO3FCQUFPbHFCO3FCQXZXcEIyeUIsa0JBNFdJL3ZCLEdBQ2lELFdBdkJoQ3NqQixPQUFNblEsT0FzQnJCamU7Z0JBRUosT0F4TUVzOEIsWUFnTEZsNEIsT0FBRXlmLEtBdUJFbk4sTUF2QkVuTTtlQXdCd0M7O2dCQVY1Q3ZLO2dCQUNRLElBQU4wVyxNQXBZTmdrQixZQXNZYXRJLE9BQU9scUIsR0FGWSxXQWZYa21CLE9BQU1uUSxPQWN2QmplO2dCQUVGLE9BaE1FczhCLFlBZ0xGbDRCLE9BQUV5ZixLQWVFbk4sTUFmRW5NO2VBZ0J3QztTQUNWOHlCLE1BakJ0Qnh5QjtLQWtCaEIsZ0JBQUk3SztNQUNRO09BQU4wVztTQXhZTmdrQjtXQXNZYXRJLE9BQU9scUIsR0F2V3BCMnlCLGtCQXVXc0N3QyxLQUVlLFdBbkJoQ2pQLE9BQU1uUSxPQWtCdkJqZTtNQUVGLE9BcE1FczhCLFlBZ0xGbDRCLE9BQUV5ZixLQW1CRW5OLE1BbkJFbk0sS0FvQndDOztRQVNwQzhuQixVQTdCQXZVO2NBQUlqVDtZQUFBQTs7ZUFrQ1ozQyxHQUFFNEMsR0FBRTlLO2VBQ0k7Z0JBQU4wVztrQkF4Wk5na0I7b0JBa1pZckk7b0JBS1JucUI7b0JBeFhKMnlCLGtCQXdYTS92QixHQUMrQyxXQW5DaENzakIsT0FBTW5RLE9Ba0NuQmplO2VBRU4sT0FwTkVzOEIsWUFnTEZsNEIsT0FBRXlmLEtBbUNFbk4sTUFuQ0VuTTtjQW9Dd0M7O2VBVjVDckMsR0FBRWxJO2VBQ00sSUFBTjBXLE1BaFpOZ2tCLFlBa1pZckksU0FIUm5xQixHQUM0QixXQTNCWGttQixPQUFNblEsT0EwQnJCamU7ZUFFSixPQTVNRXM4QixZQWdMRmw0QixPQUFFeWYsS0EyQkVuTixNQTNCRW5NO2NBNEJ3QztRQUNmK3lCLE1BN0JqQnp5QjtJQThCaEIsZ0JBQUkzQyxHQUFFbEk7S0FDTTtNQUFOMFc7UUFwWk5na0I7VUFrWllySSxTQUNSbnFCLEdBcFhKMnlCLGtCQW1YaUN5QyxLQUVvQixXQS9CaENsUCxPQUFNblEsT0E4QnJCamU7S0FFSixPQWhORXM4QixZQWdMRmw0QixPQUFFeWYsS0ErQkVuTixNQS9CRW5NLEtBZ0N3QztHQUlBO1lBSWhEa3lCLDZCQUlFcjRCLEdBQUV5ZixLQUFJdFosS0FBSXVULEtBQUlqVCxNQUFLZ1U7SUFBUyxVQUFsQmY7ZUFBSWpUO2FBQUFBOztnQkFVWkMsR0FBRTlLO2dCQUNNLElBQU4wVyxNQTdSTmtsQixjQWtScUIvYyxPQVVqQi9ULEdBQUU5SztnQkFFSixPQXhPRXM4QixZQTRORmw0QixPQUFFeWYsS0FXRW5OLE1BWEVuTTtlQVl3Qzs7Z0JBVjVDdks7Z0JBQ1E7aUJBQU4wVyxNQXJSTmtsQixjQWtScUIvYyxPQTMrQ3JCMkssd0JBMitDcUIzSyxRQUVqQjdlO2dCQUVGLE9BaE9FczhCLFlBNE5GbDRCLE9BQUV5ZixLQUdFbk4sTUFIRW5NO2VBSXdDO1NBQ3RCTyxJQUxWRDtLQU1oQixnQkFBSTdLO01BQ1EsSUFBTjBXLE1BelJOa2xCLGNBa1JxQi9jLE9BS0svVCxHQUN0QjlLO01BRUYsT0FwT0VzOEIsWUE0TkZsNEIsT0FBRXlmLEtBT0VuTixNQVBFbk0sS0FRd0M7O2FBUnBDdVQ7U0FrQlE1VixJQWxCUjRWLFFBa0JDc1UsUUFsQkR0VTtlQUFJalQ7YUFBQUE7O2dCQXVCWkMsR0FBRTlLO2dCQUNNLElBQU4wVyxNQXpiTmdrQixZQW1iYXRJLE9BQU9scUIsR0FwU3BCMHpCLGNBa1JxQi9jLE9BdUJqQi9ULEdBQUU5SztnQkFFSixPQXJQRXM4QixZQTRORmw0QixPQUFFeWYsS0F3QkVuTixNQXhCRW5NO2VBeUJ3Qzs7Z0JBWDVDdks7Z0JBQ0Y7aUJBQUkwVyxNQWpTTmtsQixjQWtScUIvYyxPQTMrQ3JCMkssd0JBMitDcUIzSyxRQWNqQjdlO2lCQUVFdXFCLFFBamJObVEsWUFtYmF0SSxPQUFPbHFCLEdBSGR3TztnQkFFSixPQTdPRTRsQixZQTRORmw0QixPQUFFeWYsS0FnQkUwRyxRQWhCRWhnQjtlQWlCeUM7U0FDWDh5QixNQWxCdEJ4eUI7S0FtQmhCLGdCQUFJN0s7TUFDUSxJQUFOMFcsTUFyYk5na0IsWUFtYmF0SSxPQUFPbHFCLEdBcFNwQjB6QixjQWtScUIvYyxPQWtCaUJ3ZSxLQUNsQ3I5QjtNQUVGLE9BalBFczhCLFlBNE5GbDRCLE9BQUV5ZixLQW9CRW5OLE1BcEJFbk0sS0FxQndDOztRQVVwQzhuQixVQS9CQXZVO2NBQUlqVDtZQUFBQTs7ZUFvQ1ozQyxHQUFFNEMsR0FBRTlLO2VBQ0ksSUFBTjBXLE1BdGNOZ2tCLFlBZ2NZckksU0FLUm5xQixHQXRUSjB6QixjQWtScUIvYyxPQW9DZi9ULEdBQUU5SztlQUVOLE9BbFFFczhCLFlBNE5GbDRCLE9BQUV5ZixLQXFDRW5OLE1BckNFbk07Y0FzQ3dDOztlQVg1Q3JDLEdBQUVsSTtlQUNKO2dCQUFJMFcsTUE5U05rbEIsY0FrUnFCL2MsT0EzK0NyQjJLLHdCQTIrQ3FCM0ssUUEyQmY3ZTtnQkFFQXVxQixRQTliTm1RLFlBZ2NZckksU0FKUm5xQixHQUNFd087ZUFFSixPQTFQRTRsQixZQTRORmw0QixPQUFFeWYsS0E2QkUwRyxRQTdCRWhnQjtjQThCeUM7UUFDaEIreUIsTUEvQmpCenlCO0lBZ0NoQixnQkFBSTNDLEdBQUVsSTtLQUNNLElBQU4wVyxNQWxjTmdrQixZQWdjWXJJLFNBQ1JucUIsR0FsVEowekIsY0FrUnFCL2MsT0ErQll5ZSxLQUMzQnQ5QjtLQUVKLE9BOVBFczhCLFlBNE5GbDRCLE9BQUV5ZixLQWlDRW5OLE1BakNFbk0sS0FrQ3dDO0dBSUE7WUFDaEQweUIsdUJBSUU3NEIsR0FBRXlmLEtBQUl2SCxNQUFLbkosT0FBTWxWO0lBQUssR0FBWGtWO1NBRURvcUIsVUFGQ3BxQjtLQUdiLGdCQUFJblQ7TUFDRixPQVJGdzlCLFlBSUVwNUIsR0FBRXlmLEtBQUl2SCxNQUVJaWhCLFNBRW1CLFdBSlp0L0IsR0FHZitCLElBQ2dDOztJQUhQLGVBRHpCNmpCLEtBQWU1bEI7SUFDSjtLQUFBLE9BQUEsdUJBeFFYaytCLG1CQXVRRi8zQixTQUFNa1k7O0lBQ08sT0F4UVg2Zix5QkF1UUYvM0IsU0FBTWtZO0dBSTRCO1lBUnBDa2hCLFlBSUVwNUIsR0FBRXlmLEtBQUl2SCxNQUFLbkosT0FBTWxWO0ksdUJBSm5CZy9CLGlCQUlFNzRCLEdBQUV5ZixLQUFJdkgsTUFBS25KLE9BQU1sVjs7WUF1SGZ3L0IsV0FBV2h1QixHQUFFb1U7SUFBTSxJQUFOQyxRQUFBRDtJQUFNO2VBQU5DLG9CQWVXO1lBZlhBOztRQUVUO1NBRGV2RSxhQUROdUU7U0FDR2haLElBREhnWjtTQUViMWxCLElBMTVDSmlzQix5QkF5NUN1QjlLO1FBRG5Ca2UsV0FBV2h1QixHQUNLM0U7UUFFcEIsT25CNS9DQTRXLGNtQnkvQ2VqUyxHQUVYclI7O29CQUZhMGxCLFVBTUd1WixNQU5Idlo7O2FBQUFDO1NBQWIwWixXQUFXaHVCLEdBTUs0dEI7U25CLy9DcEIzYixjbUJ5L0NlalM7YUFBRXFVLFFBQUFDOzs7YUFBQTJZO1NBQWJlLFdBQVdodUIsR0FNSzR0QjtTbkIvL0NwQjNiLGNtQnkvQ2VqUzthQUFFcVUsUUFBQTRZOzs7O1lBWUh6K0IsSUFaRzZsQixVQVlONFosTUFaTTVaO1FBQWIyWixXQUFXaHVCLEdBWUppdUI7UUFBaUIsT0FBQSxXQUFkei9CLEdBWkN3Ujs7WUFhTGt1QixNQWJPN1osVUFBYjJaLFdBQVdodUIsR0FhTGt1QixNQUFrQixXQWJibHVCOztZQWNLdE8sTUFkSDJpQixVQWNBOFosTUFkQTlaO1FBQWIyWixXQUFXaHVCLEdBY0VtdUI7UUFBVyxPbkJ6MUQ1QnRkLFltQnkxRG9CbmY7OztZQU5HaWlCLE1BUk5VLFVBUUd3WixNQVJIeFo7UUFBYjJaLFdBQVdodUIsR0FRSzZ0QjtRQUNRLE9uQmxnRDVCNWIsY21CeS9DZWpTLEdBUVEyVDs7WUFFRjlqQixJQVZKd2tCLFVBVUMrWixNQVZEL1o7UUFBYjJaLFdBQVdodUIsR0FVR291QjtRQUNVLFdBWGJwdUIsR0FVTW5ROzs7R0FLUztZQTBCMUJ3K0IsV0FBV3QvQixHQUFFcWxCO0lBQU0sSUFBTkMsUUFBQUQ7SUFBTTtlQUFOQyxvQkFlVztZQWZYQTs7UUFFVDtTQURldkUsYUFETnVFO1NBQ0doWixJQURIZ1o7U0FFYjFsQixJQW44Q0ppc0IseUJBazhDdUI5SztRQURuQnVlLFdBQVd0L0IsR0FDS3NNO1FBRXBCLE9EdHVEQXllLFdDbXVEZS9xQixHQUVYSjs7b0JBRmEwbEIsVUFNR3VaLE1BTkh2Wjs7YUFBQUM7U0FBYitaLFdBQVd0L0IsR0FNSzYrQjtTRHp1RHBCOVQsV0NtdURlL3FCO2FBQUVzbEIsUUFBQUM7OzthQUFBMlk7U0FBYm9CLFdBQVd0L0IsR0FNSzYrQjtTRHp1RHBCOVQsV0NtdURlL3FCO2FBQUVzbEIsUUFBQTRZOzs7O1lBWUh6K0IsSUFaRzZsQixVQVlONFosTUFaTTVaO1FBQWJnYSxXQUFXdC9CLEdBWUprL0I7UUFBcUQsT0QvdURoRW5VLFdDbXVEZS9xQixHQVlpRCxXQUFsRFA7O1lBWkcwK0IsUUFBQTdZLFVBQUFBLFFBQUE2WTs7WUFjR3g3QixNQWRIMmlCLFVBY0E2WixNQWRBN1o7UUFBYmdhLFdBQVd0L0IsR0FjRW0vQjtRQUFXLE9uQmw0RDVCcmQsWW1CazREb0JuZjs7O1lBTkdpaUIsTUFSTlUsVUFRR3daLE1BUkh4WjtRQUFiZ2EsV0FBV3QvQixHQVFLOCtCO1FBQ1EsT0Q1dUQ1Qi9ULFdDbXVEZS9xQixHQVFRNGtCOztZQUVGOWpCLElBVkp3a0IsVUFVQytaLE1BVkQvWjtRQUFiZ2EsV0FBV3QvQixHQVVHcS9CO1FBQ1UsT1pwNUQ1QnpVLFNZeTREZTVxQixHQVVNYzs7O0dBS1M7WUFNOUJ5K0I7SUFDUSxJQURrQnh6QixnQkFDeEJrRCxNRHo0REYrYTthQzA0REVwa0IsRUFBRXlmLEtBdkJBaWEsV0FzQkZyd0IsS0FDRW9XLE1BQW1DLE9uQjU0RHZDeEQsU2tCUUEzZ0IsU0NtNERFK04sTUFDMEQ7SUFDOUQsT0EvYk02dUIsWUE4YkZsNEIsTUFGd0JtRzs7WUFTMUJ5ekIsbUJBQW1CdG5CO0lBQ3JCLEdBQUcsa0JBRGtCQSxhQUNKO1FBQ1g5WSw0QkFGZThZO2FBR2Z1bkI7S0FBaUIsT0FBckIsV0FaQUYsd0JBU21Ccm5CO0lBR21EO2FBQzlEd25CLGFBQWFsZ0M7S0FDbkIsSUFEbUJnakIsTUFBQWhqQjtLQUNuQjtTQURtQmdqQixRQUZqQnBqQixLQUdjLE9BREdvakI7TUFFWCxZQUFBLGdCQU5TdEssS0FJRXNLO3NDQUlWLE9BSlVBO01BR0QsSUFIQ0MsTUFBQUQsYUFBQUEsTUFBQUM7O0lBSVQ7YUFDUmtkLFlBQVluZ0MsR0FBRUg7S0FDaEIsSUFEZ0J1Z0MsTUFBQXZnQztLQUNoQjtTQURnQnVnQyxRQVBkeGdDLEtBUWMsT0FEQXdnQztjQUVSLGdCQVhTMW5CLEtBU0QwbkIsaUJBSVAsT0FKT0E7TUFHRSxJQUhGQyxNQUFBRCxhQUFBQSxNQUFBQzs7SUFJTjthQUNSQyxVQUFVdGdDLEdBQUVIO0tBQ2QsSUFEY3VnQyxNQUFBdmdDO0tBQ2Q7U0FEY3VnQyxRQVpaeGdDLEtBYWMsT0FERndnQztNQUVOLFlBQUEsZ0JBaEJTMW5CLEtBY0gwbkI7Ozs7T0FJTCxPQUpLQTs7TUFHVSxJQUhWQyxNQUFBRCxhQUFBQSxNQUFBQzs7SUFJSjtJQUNDO0tBQVRFLFNBZklMO0tBZ0JKTSxPQVhBTCxZQVVBSSxRQUFBQTtLQUVBRSxpQkFyQmUvbkIsS0FtQmY2bkIsUUFDQUMsT0FEQUQ7S0FHQUcsU0FsQklSLGFBZ0JKTTtLQUdBRyxPQVRBTCxVQVFBSSxRQUFBQTtPQUFBQSxXQUNBQztTQUNBQzs7S0FFQTtNQUFJO09BQUEsT0FBQSx5QkExQldsb0IsS0FzQmZnb0IsUUFDQUMsT0FEQUQ7T0FFQUU7Ozs7O01BR2tCLElBQUEsT0F4QmxCWCxnQkFxQkFXOztJQUlVLElBQVZDLFVBeEJJWCxhQW1CSlM7T0FLQUUsWUExQkFqaEMsS0FDQXFnQzs7Ozs0QkFrQkFROytCQUFBQTtnQ0FBQUEsb0JBU0FLO2dDQVRBTCxzQkFTQUs7Z0NBVEFMLHFCQVNBSzs4QkFUQUw7V0FTQUssV0EzQkFiOzs7VUEyQkFhOzs7U0FBQUE7O0lBT0osV0FiSUYsUUFNQUU7R0FPYztZQ2w4RGxCQyxTQUFTMzZCLEdBQUVxTDtRQUFXbEY7SUFDeEIsT0R1OUNNK3hCO3NCQ3Y5Q1d6WSxLRHExRFg0WixXQ3QxRE9odUIsR0FDSW9VLHdCQUROemYsR0FBRXFMLEdBQ2dDOzthQURyQmxGOztZQVF0QnkwQixRQUFRcmQsSUFBR3BYO0lBQU0sT0FSakJ3MEIsd0IsWUFRUXBkLElBQUdwWDtHQUE0QjtZQUt2QzAwQixRQUFRMTBCLEtBQU0sT0FMZHkwQixRcEJpU0E1ZCxRb0I1UlE3VyxLQUF3QjtZQUVoQzIwQixTQUFTOTZCO1FBQVdtRztJQUN0QixTQUFJNnhCLElBQUd2WTtLQUNLLElBQU5wVyxNRkxKK2E7S0NtM0RJc1YsV0M5MkRBcndCLEtBRENvVztLQUdILE9BQUEsV0FKT3pmLEdGR1QxRSxTRURJK047SUFFbUI7SUFDekIsT0RvOENNNnVCLFlDeDhDRkYsUUFEa0I3eEI7O1lDM0JwQjQwQixRRGtDUTUwQixLQUFNLE9BUGQyMEIsa0JBTzRCOWdDLEdBQUssT0FBTEEsRUFBTSxHQUExQm1NLEtBQStCO0czQnJCNUIsSUFBWDYwQjtZQUlBQyxNQUFNci9CLEdBQUVoQztJQUNGLElBQUpDLElBREkrQixNQUFFaEM7SUFFSCxPVUFZMGtCLFNWRGZ6a0I7Y0FHSTtnQkFISkE7O2dCQUlGLFc0QnRCQWtoQyxlNUJrQkVsaEM7Z0JBS0ksYUFMSkEsYU93UUZpakIsZ0JQeFFFampCO2NBRUYsVzRCcEJBa2hDLGU1QmtCRWxoQztHQVFDO1lBRUNxaEMsYUFBYXQvQixHQUFFaEM7SUFDckIsR0FEbUJnQyxnQkFBRWhDLEdBQ0c7SUFDVSxJQUFBLE9BRjVCc2hDLGFBQWF0L0IsR0FBRWhDLFlBRUMsT0FicEJxaEMsTUFXaUJyL0IsR0FBRWhDO0lBRWEsT0FBQSxXNEI5QmhDbWhDO0c1QjhCc0Q7WUFFdERJLE9BQU92L0I7SUFDVCxZQURTQTs7OztRQUVGOztRQUNBOztRQUNlLFdBbkJwQnEvQixNQWVPci9CLE9BSWEsT0FBQSxXNEJwQ3BCbS9COztJNUJxQ2tDLElBQUEsT0FUOUJHLGFBSUd0L0IsT0FLZSxPQXBCdEJxL0IsTUFlT3IvQjtJQUsyQixPQUFBLFc0QnJDbENtL0I7RzVCcUNvRDtZQUVwREssYUFBYXgvQjthQUNQeS9CO0tBQU87S0FBQTtvQkFLTDtVQUpBMWEsaUJBQU4xQjs7O09BQ0UsSUFBTyxVQUFBLFdBRFRBLElBRldyakI7bUJBS0Q1QixZQUFLLFdBQUxBOztvQkFISjJtQjs7SUFJSTtJQUNULE9BTkcwYSxTQTNCTkw7R0FpQ3dCO1lBRXhCTSxrQkFVTTEvQjtJQVZjLEdBVWRBLHFCQVRXO09BU1hBLHNCQVJZO09BUVpBO2lCQUFBQSxNQVBvQjIvQixtQkFBTkMsaUJBQU43eEI7S0FDWixPQUFBO2M0QnBERm94QixRNUJlQTFrQixTQW9DYzFNLE1BQU02eEIsTUFBTUQsUUFBQUE7O09BT3BCMy9COztnQkFBQUE7TUFMcUI2L0I7TUFBTkM7TUFBTkM7S0FDYixPQUFBO2M0QnRERlosUTVCZUExa0IsU0FzQ2VzbEIsUUFBTUQsUUFBTUQsUUFBQUE7O09BS3JCNy9COztnQkFBQUE7TUFIaUNnZ0M7TUFBTkM7TUFBTkM7S0FDekIsT0FBQTtjNEJ4REZmLFE1QmVBMWtCLFNBd0MyQnlsQixRQUFNRCxRQUFNRCxRQUFBQTs7SUFJbEMsU0FBQSxhQURDaGdDLElBRVMsT0FGVEE7SUFLVyxJQURUbWdDLGNBSkZuZ0M7SUFNWSxjQUZWbWdDLGFBOUJSWixPQTBCTXYvQjtHQU1zQjtZQUU1Qm9nQyxZQUFVaGdDO0lBQ04sWUE1QkpvL0IsYUEyQlVwL0I7Z0JBR0YsT0FyQlJzL0Isa0JBa0JVdC9CO1FBRUxoQztJQUFLLE9BQUxBO0dBQ3NCO1lBd0QzQmlpQyxzQkFBc0JDO0lBQ3BCLGVBQUssMkJBRGVBO0lBQ3BCO0dBQ2tCO1lBRXBCQyxzQkFBc0I3eUIsS0FBSTh5QjthQUN4QkMsS0FBS0M7S0FDUCxPQURPQSxpQkFEZWh6QiwwQkFBQUE7SUFLaUQ7SUFFekUsU0FQNEI4eUI7S0FlaEI7YUFmZ0JBO2FBQUFBO2FBQUFBO2FBQUFBO2FBQUFBO2FBQUFBO01BZWhCLE9BZFJDLEtBRHdCRDtLQWN4QjthQUFLO2U0Qi9JUHJCOztPNUJpSTBCcUIsU0FVb0I7SUFFTixXQVh0Q0M7SUFXRSxXQUFLLFc0QjdJVHRCO0c1QmtKZ0Q7WUFFaER3QiwwQkFBMEJDLFNBQVFDO0lBQ3BDLEtBRG9DQSxXQUdoQyxPMkJuSUY3QixRM0JnSTBCNEI7UUFLckI3aUMsSUFMNkI4aUMscUJBSzdCOWlDOztTQUNIQzs7TUFDUSxZQTFCVnVpQyxzQkF5QkV2aUMsb0JBREdELEdBQ0hDLE9BQUFBO29CQUdXMFksZ0JBQU8sVzJCeklwQnNvQixRM0JnSTBCNEIsZ0JBU2JscUI7TUFIWCxXQUFBMVk7a0JBQUFBO1VBQUFBOzs7O0dBSUk7WUFFTjhpQyxvQkFBb0JGLFNBQVFHO0lBQzlCLE9BYkVKO2FBWW9CQyxTQW5DcEJQLHNCQW1DNEJVO0dBQ3lDO1lBb0dqRUMsaUJBQWlCQztJQUN2QjtLQUFtQjtNQUFmQyxtQkF6UEY5QjtNQTBQRStCLG1CQUZtQkYsSUFDbkJDO01BRUExZSwwQkEzUEY0YyxVQXlQRThCLGNBQ0FDO01BRUosV0FESTNlO2dCQUNKOztHQUF1QztPQW1CckM0ZTtZQWdCQUMsK0JBQW1DemdDLEtBQUltZ0M7SUFDSCxXQTNPcENYLFlBME9tQ3gvQjtJQUNyQyxXMkJwUkVxK0I7STNCdUlBNkIsb0JPcUpBMWYsUVBUdUMyZjtJQUc1QixJQUFUTyxTQUFTO09BQVRBO0tBRW9CLFdPcE50Qi9nQixJUGtORStnQjtLT2dNRnJmLCtCUG5OQW1mOztJQXFCQSxXT0lBaGdCO0dQSFU7T0FNVm1nQjtZQUVBQztJQUVBLFdBQUE7SUFBQTtHQUVlO1lBRWZDLDBCQUEyQjdnQyxLQUFJOGdDO0lBQ2pDOztNQUdNWDtRQUoyQlcsa0JBUi9CSCxrQkFFQUM7S0FnQkEsSU9xT0EvZTtLUHBPQTtNQUNFO09BQUEsT0FoQ0Y0ZSwrQkFvQjJCemdDLEtBSXZCbWdDOzs7V0FTQ1k7TUFDa0I7T0FEbEJDLDRCQUFBRDtPQUNDRSxrQkFwQk5MO09BcUJ3QyxPQTdReENwQixZQThQMkJ4L0I7TUFlekIsVzJCdFRGcStCO00zQnVJQTZCLG9CT3FKQTFmLFFQZUkyZjtNQWNBLFdBaFJKWCxZQTJRS3dCO01BSUgsVzJCeFRGM0M7TTNCdUlBNkIsb0JPcUpBMWYsUVB5Qk15Z0I7cUJPekJOemdCOztLUCtCRTs7OztnQ0FHRSxPT3dKSmE7OztHUHZKZ0U7WUFJaEU2Ziw0QkFBMEJsaEMsS0FBSThnQztJQUNoQztLQUNFLFdBOUJBRCwwQkE0QjBCN2dDLEtBQUk4Z0M7S0FFOUI7O2dCQUdBO0dBQUU7R0FNSjsyQ0FYRUk7RzZCOVVKO0c3QnVQUWQ7O002QnJQOEIsZ0NBRS9CO1VBRFVwZ0M7TUFBTyx3QjdCaURwQncvQixZNkJqRGF4L0I7S0FDTjttQkNDQThWO0lBQ1QsT0FBQSxnQkFEU0EsOEJBQUFBO0dBQzhCO1l0Qk9uQ3FyQixpQkFBZSxXQUFPLDBCQUEwQjtZQUNoREMsT0FBT0MsS0FBSUM7SUFDYixPQURhQSxXQUFKRDtJQUFBQSxTQUFJQzs7R0FFSztZQUdoQkMsVUFBVS9qQyxHQUFFNlM7SUFDZCxTQUFJbXhCLFFBQVFqZSxNQUFLbmtCLEdBQUkscUJBQVRta0IsTVNXWk0sVVRYaUJ6a0IsS0FBMEM7SUFDM0QsU0FBSXFpQyxRQUFRbGlDO0tBQ1Y7TUFDYSxPQUFBLGdCQUZIQTtNQUM2QyxPQUFBLGdCQUQ3Q0E7TUFDbUIsT0FBQSxnQkFEbkJBO2NBQ0EsZ0JBREFBO0lBRWdCO0lBRzVCO0tBREltaUMsZUFOVXJ4QiwyQkFBQUE7S0FPVnhTLElBREE2akM7S0FFSnRoQjs7S0FDRSxpQkFUVTVpQixNQVFaNGlCLFNBQUFBLE9BQUFBO0tBQ0UsV0FERkE7ZUFBQUE7U0FBQUE7O0lBR1csSUFBUG1ELDhCU1RKSyxRVEtJL2xCLFFBSU87O1NBQ1hUOztNQUd3QjtPQUZsQkgsSUFETkc7T0FFTW9HLGFBRk5wRyxHQUxJUztPQVFvQix3QkFUcEI2akMsUUFRRWwrQixPQUFBQTtNQUhGK2YsVUFWQWllLFFBVUFqZTtNQUt5QjtPQUFBLE9BZHpCa2UsUUFTQWxlO2dDQVhRL2xCLE1BYU5QLE9BQUFBO01BR0osaUJBaEJVTyxNQWFOUCxPQUFBQTtNQUROLFdBQUFHO2tCQUFBQTtVQUFBQTs7O0lBWllJOztHQWtCRjtZQUdSbWtDLE9BQUt0eEI7SUFDTSxJQUFUeEYsU0E1QkZzMkI7SUFNQUksVUFzQkUxMkIsUUFER3dGO0lBRVAsT0FESXhGO0dBRUU7WUFHSisyQixzQkFBb0IsT0FOcEJELE9BTXlCLHlCQUFnQjtZQUV6Q0UsT0FBS3JrQztJQUNNLElBQVRxTixTQXBDRnMyQjtJQUNBQyxPQW1DRXYyQixRQURHck47SUFFUCxPQURJcU47R0FFRTtZQUlKaTNCLEtBQUt0a0M7SUFBQUEsUUFBQUE7SUFFTTtZQUZOQTtLQUVIdWtDLDBCQUZHdmtDO2FBQUFBO0tBR0h3a0M7d0JBSEd4a0M7VUFFSHVrQyxVQUFBQTs7S0FHQUUsV0FGQUQ7WUFIR3hrQztJQU1QLGlCQU5PQSx3QkFLSHlrQztJQUNKLE9BRElBO0dBRUk7WUFHRkMsT0FBTzFrQyxHQUFFWTtJQUNmO0tBQVEsSUFBSkMsSUFYRnlqQyxLQVVXdGtDLElBRVRtQixhQURBTixHQURXRDt1QkFBQUEsb0JBQ1hDLElBQ0FNLFFBQytDLE9BRC9DQTs7R0FDZ0Q7WUFFbER3akMsTUFBSTNrQyxHQUFFNGtDO0lBQ1IsaUJBRFFBLGFBQUFBLE9BR0gsT0FSQ0YsT0FLQTFrQyxHQUFFNGtDO0lBRUgsT0QvREwxaUI7R0NnRW1CO0dBeUdULElBQVYyaUI7WUFpQkFDLE1BQUlGLE9BQVEsT0E3SFZELE1BNEdGRSxXQWlCSUQsT0FBK0I7d0JBV3pCL3hCLE1BQU8sT0EzTGZreEIsVUErSkZjLFdBNEJVaHlCLE1BQW1DOzZCQUU5QixtQkFBVSx5QkFBZTs2QkFJekIsT0FwS2J3eEIsT0FrSUZRLFdBa0NpQztZdUJqTWpDRSxrQkFBa0J6L0I7SUFDcEIsV0FEb0JBLDBDQUFBQTs7R0FFQztPQVNmLElBQUEsT0FBQSxrQ0FERjAvQjs7OztJQUVGLElBQUksSUFBQSxPQUFBOzs7Ozs7UUFGRkE7O0dBR0o7SUFKRUMsOEJBQ0VEO0lBVUZFLDRCLE92Qk9FZDtZdUJDRWUsY0FBY3ZqQyxHQUFFaEI7SUFDdEIsSUFEb0J3a0MsTUFBQXhqQztJQUNwQjtRQURzQmhCLEtBQUZ3a0MsS0FDTCxPQURLQTs0QkFBQUEsY0FFc0IsT0FGdEJBO1NBQUFDLE1BQUFELGFBQUFBLE1BQUFDOztHQUdRO3FCQUVqQnpkLEtBQXNCMGQ7SUFDakMsR0FEVzFkO1NBQVNDLE1BQVRELFFBQUEyZCxTQUFTMWQ7O1NBQVQwZCxTQXhCVE47SUF5Qk0sSUFBSmpsQyxJQU5FbWxDLGtCQUsyQkc7SUFFakMsR0FGV0M7OzBCQWJUTDs7dUJBQUFBLHlCcEJqQ0ExZ0IsaUJvQmlDQTBnQixRQUFBQTtNQWVFcnlCLE92QkNBeXhCOztTdUJEQXp4QjtJQUNKLGNBQWtELGVBRjlDN1MsT0FDQTZTLE1BREE3UztHQUVrRTtZQXVDcEV3bEMsbUJBQW1CQyxVQUFTQyxTQUFRQyxPQUFNQztJQUM1QyxJQUFJQyxRQUR3Q0Qsa0JBRXhDRSxhQUFhLGVBRGJEO2FBRUlFO0tBQWdCLElBRXBCQztLQUZvQjtXQUVwQkEsUUFEUztNQUVQO09BREk3MEIsTUFBTjYwQjtPQUFXNytCLE9BQVg2K0I7T0FBaUIvYixPQUFqQitiO09BQ01DLFNBTm9CUCxVQUsxQk0sYUFBTTcwQixLQUFLaEs7T0FLTCsrQixPQUFPLFdBVklULFVBS1h0MEI7T0FRRzJZLHlCQVhUZ2MsWUFRTUksVUFBQUE7U0FHR3BjO09BQUFBLFdBUEhtYzs7T0FNTyxpQkFaMkJMLE9BVWxDTSxVQUFBQSxRQUpBRDtNQVNKLGlCQWJGSCxZQVFNSSxVQUFBQSxRQUpBRDtVQURORCxTQUFpQi9iOztJQVdHO0lBRXhCLFdBbEJzQzBiLDBCQWtCdEM7O1NBQUEvaUI7O01BZlFtakIsK0JBSDhCSixPQWtCdEMvaUIsU0FBQUE7TUFDRSxXQURGQTtrQkFBQUE7VUFBQUE7OztPQWxCOEI4aUI7S0FzQjVCLFdBckJFRyxlQXFCRjs7VUFBQWptQzs7T0FDUSxJQUVDa3FCLHlCQXZCUGdjLFlBb0JGbG1DLE9BQUFBO1VBR1NrcUIsT0FBQUE7T0FIVCxXQUFBbHFCO21CQUFBQTtXQUFBQTs7Ozs7R0FJSTtZQUVKdW1DLFNBQU9WLFVBQVNuZ0M7SUFDbEI7S0FBSXFnQyxRQURjcmdDO0tBRWQ4Z0MsUUFEQVQ7S0FFQUUsUUFEQU87WUFDQVA7O0lBRVUsSUFBUkQsUUFBUSxlQUZWQyxXQUdFSCxjQTdHSlgsa0JBdUdnQnovQjtJQUFBQSxPQUtac2dDO0lBR0osT0FwQ0FKLG1CQW9DbUIsV0FSWkMsVUFBU25nQyxJQU1ab2dDLFNBTEZDLE9BSUVDO0dBSUg7aUJBMFZJaGtDLEdBQUksT0FBQSxzQkFBSkEsR0FBZ0M7WUFJckN5a0MsVUFBVS9nQyxHQUFFNkw7SUFDZCxZQURZN0w7Y0FFUCxtQkFGT0EsTUFBRTZMLFFBQUY3TDtjeEJ4ZFY0YztHd0IyZHVEO2tCQUVuRDVjLEdBQUU2TCxLQUFJaEs7SUFDWjtLQUFJdkgsSUFORnltQyxVQUtJL2dDLEdBQUU2TDtLQUVKeUssYUFGSXpLLEtBQUloSyx1QkFBTjdCLE1BQ0YxRixPQUFBQTtJQUVKLGlCQUhNMEYsTUFDRjFGLE9BQUFBLEtBQ0FnYztJQUZFdFcsT0FBQUE7ZUFBQUEsdUJBQUFBO2tCQTVXSjZnQyxTQXVXQUUsV0FLSS9nQztHQUt1RDtZQUV2RGdoQyxjQUFjaGhDLEdBQUUxRixHQUFFdVI7UUFBSThPLGVBRzFCSDs7VUFBQUEsUUFERTtTQUNTOVosSUFBWDhaLFdBQWNtSyxPQUFkbks7S0FDSyxTQUFBLGFBRE05WixHQUhXbUw7TUFBSjdMLE9BQUFBO1NBQVEyYSxRQUFBQSxZQUdaZ0s7TUFLQyxpQkFSRzNrQixNQUFFMUYsT0FBQUEsS0FHTnFxQjtNQUtDOztTQVJXaEssU0FHMUJILFFBQUFBLFNBQWNtSzs7O21CQVVQM2tCLEdBQUU2TDtJQUNILElBQUp2UixJQTFCRnltQyxVQXlCTy9nQyxHQUFFNkw7SUFFaUIsT0FmdEJtMUIsY0FhR2hoQyxHQUNMMUYsR0FET3VSLHlCQUFGN0wsTUFDTDFGLE9BQUFBO0dBQ2tDO1lBRWhDMm1DLFNBQVNwMUI7OzttQkFFWCxNQUFBO1NBQ09uTCxnQkFBR21CLG1CQUFNOGlCO0tBQ2IsU0FBQSxhQUpROVksS0FHSm5MLElBQ21CLE9BRGhCbUI7bUJBQU04aUI7OztpQkFHYjNrQixHQUFFNkw7SUFDVDtLQUFjLE9BcENaazFCLFVBbUNLL2dDLEdBQUU2TDtLQUNILHlCQURDN0w7Z0JBRUksTUFBQTtRQUNBaUQsZUFBU2krQixlQUFTQztJQUN0QixTQUFBLGFBSkV0MUIsS0FHRTVJLEtBQ29CLE9BRFhpK0I7U0FBU0MsT0FHZCxNQUFBO1FBQ0FqK0IsS0FKY2krQixVQUlMQyxLQUpLRCxVQUlJRSxRQUpKRjtJQUtsQixTQUFBLGFBUkZ0MUIsS0FPTTNJLEtBQ29CLE9BRFhrK0I7U0FBU0MsT0FHZCxNQUFBO1FBQ0FDLEtBSmNELFVBSUxFLEtBSktGLFVBSUlHLFFBSkpIO0lBS2xCLGFBQUEsYUFaTngxQixLQVdVeTFCLE1BQVNDLEtBakJ0Qk4sU0FNR3AxQixLQVc0QjIxQjtHQUM0QjtxQkFzQnREeGhDLEdBQUU2TDthQUNMNDFCO0tBQWlCO0tBQUE7b0JBRXJCO1VBQ08vZ0MsZ0JBQUdtQixtQkFBTThpQjtNQUNiLFNBQUEsYUFESWprQixHQUpFbUwsTUFNSixXQUZLaEssTUFITjQvQixlQUdZOWM7b0JBQUFBOztJQUdRO0lBQ0wsV0E3RXJCb2MsVUFxRVMvZ0MsR0FBRTZMO0lBUUUsT0FQUDQxQixnQ0FER3poQztHQVE0QjtZQzVpQnJDc1UsR0FBR2hZLEdBQUksT0FBSkEsRUFBSztPQThyQkpvbEMsVUE1cUJGQztZQUNBQyxTQUFTdG1DLEdBQUksWUFBSkEsVUFBVTtHQWlEWjtZQStIVHVtQyxXQUFXaHhCLE9BQU1peEI7SUFBTmp4QixZQUFBQSxZQUFNaXhCO1dUbExqQnZ3QixJU2tMaUJ1d0IsT0FBTmp4QjtHQUVpQjtZQUc1Qmt4QixlQUFlbHhCO0lBQUFBO0lBQUFBO1dUNUxmeVQsUVM0TGV6VDtHQUVTO09BdUJ4Qm14QjtZQUdBQyxpQkFBaUJweEIsT0FBTW5XO0lBQUksa0JBQVZtVyxXQUFNblcsNEJBQUFBO0dBQTZDO1lBQ3BFd25DLGtCQUFrQnJ4QixPQUFRLE9BQUEsV0FBUkEsY0FBK0I7WUFDakRzeEIsaUJBQWlCdHhCLE9BQU12VixHQUFJLE9BQUEsV0FBVnVWLFdBQU12VixHQUF5QjtZQUNoRDhtQyxpQkFBaUJ2eEIsT0FBTXZWLEdBQUksT0FBQSxXQUFWdVYsV0FBTXZWLEdBQXlCO1lBR2hEK21DLGVBQWV4eEIsT0FBTXRQLE1BQUsrZ0M7SUFBWHp4QixXQUFBQSxXQUFNdFA7SUFOckIwZ0MsaUJBTWVweEIsT0FBV3l4QjtJQUFYenhCOztHQUdZO1lBRzNCMHhCLGNBQWMxeEIsT0FBTW5XO0lBQ25CLFdBQUEscUJBRG1CQTtJQUNuQixjQVBEMm5DLGVBTWN4eEIsNkJBQU1uVyxJQUFBQTtHQUNrQztZQUd0RDhuQyxlQUFlM3hCLGNBQThCb21CO1FBQVB3TCxrQkFBUnZpQyxtQkFBUndpQztJQUp0QkgsY0FJZTF4QixPQUFPNnhCO0lBZnRCUixrQkFlZXJ4QjtJQUFBQTtJQU1DO0tBRmRxcUIsVUFKYXJxQixXQUE4Qm9tQixhQUFmLzJCO0tBTTVCeWlDLGNmeE9GOWhCLE1la09laFEsVUFJYnFxQjtJQUphcnFCLFlBTWI4eEI7SUFOYTl4QixXQUFBQSxXQUFBQTtJQWJmdXhCLGlCQWFldnhCLE9BQUFBO0lBU2pCLE9BYkUweEIsY0FJZTF4QixPQUF1QjR4Qjs7WUFjdENHLFdBQVcveEIsT0FBTW9tQjtJQUFRLE9BZHpCdUwsZUFjVzN4QixhQUFNb21CO0dBQThDO1lBRy9ENEwsZ0JBQWdCaHlCO1FBQXNCNHhCLGtCQUFQeEwsa0JBQVJ5TDtJQXJCdkJILGNBcUJnQjF4QixPQUFPNnhCO0lBQVA3eEIsV0FBQUEsV0FBZW9tQjtJQS9CL0JrTCxpQkErQmdCdHhCLE9BQWVvbUI7SUFHakMsT0F4QkVzTCxjQXFCZ0IxeEIsT0FBc0I0eEI7O1lBVXRDSyxvQkFBb0JqeUI7SUFDaEIsWVY1UEpzVCxRVTJQb0J0VDtnQkFFWixPQTVDUnF4QixrQkEwQ29CcnhCOzs7S0FHSG9tQjtLQUFWbUU7WUFIYXZxQixXQUdIb21COztXQUFWbUUsb0JBR2tCO0lBQ3NCLE9BcEIvQ3dILFdBYW9CL3hCLE9BR0hvbUI7R0FJb0Q7WUFJckU4TCxjQUFjbHlCO0lBQ1YsWVRoT0orVCxTUytOYy9UO2dCQUVOOzRCQUNEdFAsbUJBQU10RjtJQUhDNFUsWUFBQUEsWUFHRDVVO0lBRWdDLFdBL1I3Q3FZLEdBNlJPL1M7SUFIT3NQLFdBQUFBOztHQUsrQztZQVU3RG15QixnQkFBZ0JueUIsT0FBTXRQO0k7OztRQTRCVixZVmpUWjRpQixRVXFSZ0J0VDtvQkE2Qk47UUFFUjtTQURjb3lCO1NBQ05DO29CQUFRNW5DLEdBRVo2bkM7WSxLQUFBQSxJQURNLFdBRE03bkM7Z0JBRVBQLElBQUxvb0MsT0FBQTdtQyxJQUFBNm1DO1lBQW1CLE9BQUEsY0FGUDduQyxHQUVaZ0IsU0FGWWhCLEdBRVo2bkMsVUFBQTdtQyxHQUZJNG1DLFFBQVE1bkMsR0FFUFA7O1FBSEtrb0MsVUFDTkMsUUEvQk1yeUIsV0FBQUEsY0E4QkFveUI7OztRVjdUaEIvZSxRVStSZ0JyVCxXQW1CaEI7O1FWbFRBcVQsUVUrUmdCclQsV0F5QmhCOztRQWlDWSxjVi9VWnNULFFVcVJnQnRUO3NCQTJETixPQS9IVnF4QixrQkFvRWdCcnhCO1lBNERQb21CO1FBQWEsT0FuR3RCMkwsV0F1Q2dCL3hCLE9BNERQb21COzttQkE1RE9wbUIsZUFBQUEsV0FBQUE7c0JBZmhCa3lCLGNBZWdCbHlCOztRQW1HSCxjVmxZYnFULFFVK1JnQnJUO3NCQW9HTDtRQUVLLElBRFJ1eUIsdUJBQ0RDLFNBQVMsV0F0R0F4eUIsV0FxR1J1eUI7UUFFTCxPQTVLSG5CLGlCQXFFZ0JweEIsT0FzR1R3eUI7Ozs7V0FwR0Mzb0MsY0FDUixPQWxFQTJuQyxlQStEZ0J4eEIsT0FBTXRQLE1BRWQ3Rzs7T0FrRVI7UUFEaUI0b0M7UUFBTkM7UUFDQ0MsTUFES0Y7UUFDYlosU0FEYVk7UUFFTCxVVjFWWm5mLFFVcVJnQnRUO3FCQXNFTjtpQ0FDU3FtQixzQkFBVmtFO09BQ1AsT0FET0E7O1VBa0JNLE9BN0hmeUgsZ0JBb0NnQmh5QixPQW1FTDB5Qjs7VUFxQkksT0E3SWZmLGVBcURnQjN4QixPQW1FQ3l5QixRQUlFcE07O1VBZUgsT0EzSWhCc0wsZUFxRGdCM3hCLE9BbUVDeXlCLFFBSUVwTTs7aUJBdkVIcm1CLFlBQU10UCw2QkFvRWxCbWhDO29CQXpISkYsZUFxRGdCM3hCLE9BbUVDeXlCLFFBSUVwTTtvQkEzR25CMkwsZ0JBb0NnQmh5QixPQW1FTDB5Qjs7aUJBbkVLMXlCO29CQXBDaEJneUIsZ0JBb0NnQmh5QixPQW1FTDB5QjtvQkFuRUsxeUI7O3VCQUFNdFAsNkJBb0VsQm1oQztzQkF6SEpGLGVBcURnQjN4QixPQW1FQ3l5QixRQUlFcE07d0JBdkVIcm1COzt3QkF1RUdxbUI7O3dCQUhQc007O3dCQXBFSTN5Qjt3QkFyRGhCMnhCLGVBcURnQjN4QixPQW1FQ3l5QixRQUlFcE07d0JBM0duQjJMLGdCQW9DZ0JoeUIsT0FtRUwweUI7a0JBb0JJLE9BM0hmVixnQkFvQ2dCaHlCLE9BbUVMMHlCOzs7T0E1QkM7UUFGRUU7UUFBSG5vQztRQUNQb29DLGtCQXRDWTd5QixXQUFBQTtRQXVDSixVVjVUWnNULFFVcVJnQnRUO3FCQXdDTjtPQUVSLElBRGM4eUIsd0JBQ2QsVUFEY0E7OztTQUlWQztTQUNRQzs7WUFBTztZQUFBOzJCQUFmLE9BREFEO2lCQUVZRSxtQkFBUkM7Z0JBVE5MLG1CQVNNSyxNQUNnQyxPQURoQ0E7MkJBQVFEOztXQUVHO1NBUGZFLE1BSVFILEtBTEVGOztZQUNWSyxNQUpGTjtXQWFFeGpDLFNBVEE4akMsTUFKRk47T0FjRixZQURJeGpDO2lCQXZGTjJpQyxnQkFvQ2dCaHlCLGlCQW1EVjNRLFNBZEs1RTtpQkExRlhrbkM7a0JBcURnQjN4QixpQkEwQ1ZtekIsTUFMUVAsa0JBckNFNXlCOzs7UUFLRHdJO1FBQUw0cUI7UUFDTkMsb0JBTllyekIsV0FBQUE7VUFBQUEsV0FNWnF6QixtQkFoQ0pwQixvQkEwQmdCanlCO09BV2hCO1FBRElzekIsVUFWWXR6QixXQUtOb3pCO1FBTU5HLG1CQU5XL3FCLFNBTEN4SSxXQUFNdFAsT0FLUDhYO09BV2YsT1Z0VEE0SyxTVWlUSW1nQixZQURBRCxVQVZZdHpCOztXQXFCTnd6QixpQkFDVixPVjVUQXBnQixLVTJUVW9nQixNQXJCTXh6Qjs7T0E4RkY7UUFERHl6QjtRQUNSQyxXQUFTLFdBOUZFMXpCLFdBNkZIeXpCO09BbEtickMsaUJBcUVnQnB4QixPQThGWDB6QjtjVnBZTHRnQixLVW1ZYXFnQixZQTdGR3p6Qjs7O1lBOEdaMnpCLGFBQWEzekI7SUFDbkI7S0FBTSxZVGhYSjRULFNTK1dpQjVUO2lCQUVUO0tBR0w7O01BRkl0UDtNQUFhdEY7TUFBUDZsQztNQUNUMkMsZ0JBSmE1ekIsWUFBQUE7TUFLZCxPQXpZRCt3QixTQXVZS3JnQztNQUVKLGdCQUxjc1AsWUFJYjR6QjtnQkFDRDtLVDVXSC9mLEtTdVdpQjdUO0tBT0QsSUFBVjZ6QixTQTNZSjlDLFNBdVlLcmdDLFFBMVpQK1MsR0EwWk8vUyxRQXpMUHlnQztLQXdFQWdCLGdCQThHaUJueUIsT0FPWDZ6QixRQUpPNUM7S0FISWp4QixZQUdHNVUsU0FISDRVOztHQVdkO1lBSUg4ekIsZ0JBQWdCOXpCLE9BQU0rekI7SUFuT3RCL0MsV0FtT2dCaHhCLE9BQU0rekI7SUFBTSxPQWZ4QkosYUFlWTN6QjtHQUFvRDtZQUlwRWcwQixrQkFBa0JoMEIsT0FBTXRQLE1BQUs3RztJQUMvQixPQUxFaXFDLGdCQUlrQjl6QixXQUFNdFAsVUFBSzdHLElBMWE3QjRaLEdBMGF3Qi9TO0dBQ2tEO1lBRzFFdWpDLGVBQWVqMEIsT0FBTW5XO0lBQ3ZCLE9BTEVtcUMsa0JBSWVoMEIsT0E5YWZ5RCx5QkE4YXFCNVosS0FBQUE7R0FDa0M7WUFPdkRxcUMsc0JBQXNCaC9CO0lWdmJ0QmllLE1VdWJzQmplO0lBRVAsSUFBYmkvQixpQkF0YUFyRDtJQXVhSixPVnRiRTFkLGFVcWJFK2dCLGFBRm9Cai9CO0dBR3dCO1lBVzlDay9CLFNBQVNwMEIsT0FBTXdJO0lBQ1gsWVZqYko4SyxRVWdiU3RUO2dCQUVEO0lBRUc7O0tBRFFtMEI7S0FBWkU7S0FDSDNqQyxPQXhjSitTLEdBdWNtQjB3QjtPQUFaRSxhQUhFcjBCLGtCQWRUazBCLHNCQWNTbDBCO2VBR1VtMEI7Ozs7ZUFISjNyQjtTQUdJMnJCLGdCQXZjbkIxd0IsR0FvY1N6RCxZQUlMdFA7U1Y5YkoyaUIsUVUwYlNyVDs7UUFrQkg7OztXQWxCU3dJLElBR0kyckIsZ0JBdmNuQjF3QixHQW9jU3pELFlBSUx0UCxXVjliSjJpQixRVTBiU3JUO1FBYUg7O0lBU0Y7R0FBRTtZQUtOczBCLFVBQVV0MEIsT0FBTS9WLEdBQUVnbkM7SUE1UmxCRCxXQTRSVWh4QixPQUFRaXhCO09BQUZobkMsR0EzQmhCbXFDLFNBMkJVcDBCO0lBR0QsSUFBUHUwQixXQUhRdjBCLFdBQVFpeEI7SUFJcEIsT1ZoZUU3ZCxLVStkRW1oQixNQUhRdjBCO0dBSXVCO1lBTWpDdzBCLGdCQUFnQngwQixPQUFNcXFCLFFBQU9vSztJQUFiejBCLFlBQUFBO09BQUFBLFlBQUFBO0tBR0wsSUFBUHRQLE9BNWVKK1MsS0F5ZWdCekQsZ0JBSVp1MEIsV0FEQTdqQyxVQUhrQjI1QixRQUFPb0s7S0FLN0IsT0FmQUgsVUFVZ0J0MEIsVUFJWnUwQjs7ZUFKWXYwQixjQUFBQTtrQkEzRGhCaTBCLGVBMkRnQmowQixPQUFBQTtHQU95QjtZQUl6QzAwQixnQkFBZ0IxMEIsT0FBUSxPQVh4QncwQixnQkFXZ0J4MEIsYUFBeUM7WUFHekQyMEIsYUFBYTMwQjtJQUNmLGVBRGVBOztRQUFBQSxZQUFBQTtNQXBUYmd4QixXQW9UYWh4QixXQXVNVDZ3QjtNQTFQSnVELFNBbURhcDBCO01BbkRibzBCLFNBbURhcDBCOztLQUFBQSxZQUFBQTs7Ozs7O0dBU1o7WUFJRDQwQixhQUFhNTBCLE9BQU11eUI7SUFDckIsR0FEZXZ5QixXVmpnQmJvVCxLVWlnQm1CbWYsVUFBTnZ5QixXQUliLFdBSmFBLFdBQU11eUI7ZUFBTnZ5Qjs7SUFPRCxJQUFSaXhCLFlBUGVzQjtJQVFGLE9BelVqQnZCLFdBaVVhaHhCLFdBMExUNndCLE1BbkxBSTtHQUNvRDtZQUl4RDRELGNBQWM3MEI7SUFDaEIsR0FEZ0JBLFdBN1VkZ3hCLFdBNlVjaHhCLFdBOEtWNndCO2VBOUtVN3dCOztLQUlSLFlWMWdCTnFULFFVc2dCY3JUOztVQU1QdXlCO01BQ0wsT0FBQSxXQVBZdnlCLFdBTVB1eUI7Ozs7OztJQURHO0dBRXlCO1lBR25DdUMsYUFBYTkwQixjQUFXLE9BVnhCNjBCLGNBVWE3MEIsVUFBaUM7WUFnQzlDKzBCLFNBQVMvMEI7SUFsWFRreEIsZUFrWFNseEI7SUFwSVRrMEIsc0JBb0lTbDBCO0lWM2pCVG1ULE1VMmpCU25UO0lWM2pCVG1ULE1VMmpCU25UO0lWM2pCVG1ULE1VMmpCU25UO0lWM2pCVG1ULE1VMmpCU25UO0lBQUFBO0lBQUFBO0lBQUFBLFdBQUFBO0lBVVgsT0FoRkUwMEIsZ0JBc0VTMTBCO0dBVVU7WUFFbkJnMUIsZ0JBQWdCaDFCO0lBQ2xCLE9WMWlCRXVULHVCVTBpQm1CLE9BN0NuQnVoQixhQTRDZ0I5MEIsVUFDd0IsR0FEeEJBO0dBQzRDO1lBSTVEaTFCLGVBQWVqMUIsT0FBTS9WO0lBTHJCK3FDLGdCQUtlaDFCO0lBR2Y7YUFIZUE7TUFBQUEsWUExV2ZteEI7TUFzTEl3QyxhQW9MVzN6QjtTQUFNL1YsR0F0V3JCb25DLGtCQXNXZXJ4QjtNQU9QLE9BeEJSKzBCLFNBaUJlLzBCOztLQXBGZjIwQixhQW9GZTMwQjs7R0FRSDtZQVNaazFCLGlCQUFpQmwxQixPQUFNdFAsTUFBSzdHO0lBQzlCLFdBRG1CbVcsWUFBQUE7a0JBbExqQmcwQixrQkFrTGlCaDBCLE9BQU10UCxNQUFLN0c7R0FFSztZQUdqQ3NyQyxZQUFZbjFCLE9BQU1vMUIsT0FBTXZyQztJQUMxQixPQU5FcXJDLGlCQUtZbDFCLE9Bam1CWnlELEdBaW1Ca0IyeEIsUUFBTXZyQztHQUNrQjtZQUcxQ3dyQyxnQkFBZ0JyMUIsT0FBTW5XO0lBQ3hCLE9BTEVzckMsWUFJZ0JuMUIsNkJBQU1uVyxJQUFBQTtHQUNhO1lBWW5DeXJDLGNBQWN0MUIsT0FBTS9WO0lBQUksT0FieEJvckMsZ0JBYWNyMUIsT3pCMVlkcU0sZXlCMFlvQnBpQjtHQUE0QztZbEIvbkJoRXNyQyxja0Jrb0JjdjFCLE9BQU1qVjtJQUN0QixPQXJCRW9xQyxZQW9CY24xQixvQkFBTWpWO0dBQ2U7WUFvQm5DeXFDLGlCQUFpQngxQjtJQS9EakJpMUIsZUErRGlCajFCO0lBQ25CLE9BQUEsV0FEbUJBO0dBQzZCO1lBQzlDeTFCLGVBQWV6MUI7SUFqRWZpMUIsZUFpRWVqMUI7SUFDakIsT0FBQSxXQURpQkE7R0FDZ0M7WUFJL0MwMUIsaUJBQWlCMTFCO0lBQ25CLFdBRG1CQSxZQUFBQTtrQkEzT2pCOHpCLGdCQTJPaUI5ekIsV0E2Q2I2d0I7R0EzQ3NFO1lBWTFFOEUsc0JBQXNCMzFCLE9BQU8weUIsTUFBTUQ7SUFDckM7S0FBbUJiLFFBRFljO0tBQ25CdE0sUUFEbUJzTTtLQUMzQmIsU0FEMkJhO1lBQVAxeUIsWUFBQUE7O0lBR1g7S0FBUHRQLE9BbHFCSitTLEtBK3BCc0J6RDtLQUlsQml4QixZQUp5QnlCLE1BQU1EO0tBSy9Ccm5DOzhCQUpGeW1DLFVBQVF6TDtTQUlWLHNCQUppQndMOztLQUtiMkMsV0FIQTdqQyxNQUNBdWdDLE9BQ0E3bEM7SUFFSixPQXZNQWtwQyxVQWdNc0J0MEIsVUFNbEJ1MEI7R0FDcUI7WUFNekJxQixlQUFlNTFCLE9BQU1vbUIsT0FBTS8yQjtJQUM3QixPQWRFc21DO2FBYWUzMUIsaUJBQU1vbUIsd0JBQU0vMkI7R0FFbUI7WUFTOUN3bUMsYUFBYTcxQixjQUFXLE9BWHhCNDFCLGVBV2E1MUIsYUFBbUM7WUFnTGhEODFCLGdCQUFnQjkxQjtJQUFXLE9BQUEsV0FBWEE7R0FBd0M7R0FHM0MsSUFBYisxQjtZQUNJQyxlQUFlaDJCLE9BQU12VjtJQUMzQixJQUQyQnlwQixNQUFBenBCO0lBQzNCO29CQUQyQnlwQjs7Y0FBQUEsS0FFWCxPQUFBLFdBRktsVSxXQURuQisxQixlQUN5QjdoQjtLQUl6QixXQUptQmxVLFdBRG5CKzFCO0tBS0EsSUFKeUI1aEIsTUFBQUQsY0FBQUEsTUFBQUM7O0dBTXhCO1lBcUJEOGhCO0lBQTJCLDRCQUV0QjtRQURNcHNDO0lBQVcsMkJBQVhBO0dBQ0o7WUFDUHFzQztJQUE0Qiw0QkFFdkI7UUFETXJzQztJQUFZLDJCQUFaQTtHQUNKO1lBRVBzc0MsZ0M7WUFDQUMsaUM7WUFJQUMsa0JBQWtCM3NDLEdBQUUyRCxHQUFFOEIsR0FBRTFGLEdBQUVIO0lBRTVCLElBQUlndEMsV1Q5NEJGOWlCLGFTKzRCRStpQixjQW40QkF6RjtJVERGcHdCLElTbzRCRTYxQixTQURBRDtJQUlhLElBQWJFLGFWMzVCRjNrQjtJVXliQXFpQixzQkFrZUVzQztJVnI1QkZwakIsWVVrNUJFbWpCLFVBR0FDO0lBRUosSUFDSUMsZ0JBT2MsT1ZyNkJoQjVrQixXVW82QmUsT1ZwNkJmQSxXVW02QmdCLE9WbjZCaEJBO0lVZzZCRjtZQUxJMmtCO1lWMzVCRjNrQjs7OztZVTg1QkU0a0I7OztZQUFBQTs7Ozs7O1l4QjkwQk14cUI7O1l3QnEwQlV2aUI7WUFBRTJEO1lBQUU4QjtZQUFFMUY7WUFBRUg7OztZQVoxQjJzQztZQUdBQztZQUlBQztZQUNBQztZQU1FRTtHQXNDSDtZQWVDSSxlQUFlQyxRQUFPQztJQUNkO0tBQU5DO09BeERGUjtTQXVEZU07U0FBT0M7d0I7d0I7d0I7SUFDcEJDLHlCLE9BbkdGZixnQkFtR0VlO0lBQUFBLHlCLE9BL0ZFYixlQStGRmE7SUFBQUEseUIsT0EvRkViLGVBK0ZGYTtJQUlKLE9BSklBO0dBSUQ7WUFJREMseUJBQXlCMXBCO0lBQzNCLE9BVkVzcEI7O2MsT3pCeG1CQXJwQixpQnlCaW5CeUJEOzs2QkFDcUIsV0FEckJBLElBQzZCO0dBQUM7WUFJdkQycEIsb0JBQW9COXNDO0lBQ3RCLE9BZkV5c0M7O2MsT1A1ekJBNWhCLGNPMDBCb0I3cUI7OzRCO0dBQ3dCO09BTTVDK3NDO1lBQ0FDLHNCQUFvQixPUHY5QnBCaGpCLFNPczlCQStpQixnQkFDZ0Q7R0FHdkM7SUFBVEUsU0FIQUQ7SUFPQUUsZ0JBcEJBTCx5QnpCOXFCQWxxQjtJeUJtc0JBd3FCLGdCQXJCQU4seUJ6QjdxQkFqcUI7R3lCa3JCQWtxQixvQkFXQUc7WUFhQUcsdUJBQXVCbitCLEtBQUkyOUI7SUFwYTNCNUIsZUFvYTJCNEI7SUFFckIsSUFBSmh0QyxJUG4rQkZzQixTT2krQnVCK047SVB0OEJ2Qm9iLE1PczhCdUJwYjtJQUd6QixPQURJclA7R0FFSDtZQTJKS3l0QyxjQUFnQjdsQixLQUF1QjhsQixNQUFLVjtRQUE1QlcsUUFBQS9sQjs7S0FBa0MsR0FBbEMrbEI7VUFBUzlsQixNQUFUOGxCLFVBQUFDLFNBQVMvbEI7O1VBQVQrbEIsU0F2ZHBCNUI7S0F1ZHNELGNBQ2hEO1NBQ0w3cUM7c0JBQU0sT0FBQSxXQUZvQ3VzQyxNQUFLVixLQUUvQzdyQzs7S0FFRCxXQUoyQ3VzQyxNQUFLVixLQUUvQzdyQztLQUdELFdBTG9CeXNDLFFBQTRCWjtLQU1qQyxJQU5LYSxZQUFBRCxTQUFBRCxRQUFBRTs7O1lBNERwQkMsWUFBWWhCLFFBQU9pQjtJQUNyQixJQUFJMStCLE1QbnNDRithLGNPb3NDRTRpQixNQXJQRkUsb0JBb1BFNzlCO0lBRUosV0FIY3k5QixRQUVWRSxLQUZpQmU7SUE5akJuQm5DLGVBZ2tCRW9CO0lBR00sSUFBTnh0QyxNUDFxQ0ZnckIsU09zcUNFbmI7SUFLSixZQURJN1AsTVA5ckNGK3FCLE1PMHJDRWxiLFFBSUE3UCxlUGpzQ0Y4QixTTzZyQ0UrTjtHQU0yQjtZQWE3QjIrQixzQkFBc0JoQixLQUFJN3JCO0lBQWEsVUFBYkE7WUFBQUE7O1FBQ0csT0F4dUI3QjJwQixhQXV1QnNCa0M7O1FBRU8sT0F0c0I3Qi9CLGFBb3NCc0IrQjs7UUFJTyxPQXRsQjdCcEIsZUFrbEJzQm9COztRQUtPLE9BbGxCN0JuQixpQkE2a0JzQm1COztRQU1PLE9BMWxCN0JyQixpQkFvbEJzQnFCOztRQVFPLE9sQm52QzdCdEIsY2tCMnVDc0JzQjtnQkFTTyxPbEJwdkM3QnRCLGNrQjJ1Q3NCc0I7O1dBQUk3ckI7O1dBR1QzYixTQUhTMmIsZUFHaEJvYixRQUhnQnBiO09BR0csT0FyakI3QjRxQixlQWtqQnNCaUIsS0FHWnpRLE9BQU8vMkI7O09BSVk7O1dBR2xCdEUsSUFWZWlnQjtPbEIzdUMxQnVxQixja0IydUNzQnNCO09BVU8sT2xCcnZDN0J0Qixja0IydUNzQnNCLEtBVVg5ckM7O0dBQTREO1lBTW5FK3NDLGFBQVdqQixLQUFJdm5CO0lBQU0sVUFBTkEsa0JBMEJTOzs7Ozs7O2NBMUJUQTs7Y0FTSTVsQixJQVRKNGxCLFFBU0MvWSxJQVREK1k7VUFBZndvQixhQUFXakIsS0FTS3RnQztVQUNwQixPQTFCQXNoQyxzQkFnQmVoQixLQVNRbnRDOztzQkFUSjRsQixRQWVDd1osTUFmRHhaOztlQVlpQkM7V0FaaEN1b0IsYUFBV2pCLEtBZUsvTjtXQURILE9BeHZCakI4TDtvQkEwdUJlaUMscUJBcENmYyxZQW9DSUcsY0FZZ0N2b0I7O2NBR0FDO1VBZmhDc29CLGFBQVdqQixLQWVLL047VUFFQTtXQUFBLFVOMHBCcEJXLG1CTS9zQkFrTyxZQW9DSUcsY0FlZ0N0b0I7V0FFdkJ1b0I7V0FBUjFOO1VBQ0wsT0F2eEJBbUssZ0JBcXdCZXFDLEtBaUJWeE0sUUFBUTBOOztxQkFqQk16b0I7Ozs7Z0JBQytDVCxNQUQvQ1MsUUFDdUM1ZSxnQkFBbEI0NEI7Ozs7Y0FrQmpCei9CLElBbkJKeWxCLFFBbUJDeVo7OztxQkFuQkR6Wjs7OztnQkFLNkMwb0IsTUFMN0Mxb0IsUUFLcUN1a0Isa0JBQWxCeks7Ozs7Y0FnQmpCcitCLElBckJGdWtCLFFBcUJENlo7OztxQkFyQkM3Wjs7OztnQkFDK0NULE1BRC9DUyxRQUN1QzVlLGdCQUFsQjQ0Qjs7OztjQWtCakJ6L0IsSUFuQkp5bEIsUUFtQkN5Wjs7O3FCQW5CRHpaOzs7O2dCQUs2QzBvQixNQUw3QzFvQixRQUtxQ3VrQixrQkFBbEJ6Szs7OztjQWdCakJyK0IsSUFyQkZ1a0IsUUFxQkQ2Wjs7O2NBRUo4TyxNQXZCSzNvQixRQXVCUitaLE1BdkJRL1o7VUFBZndvQixhQUFXakIsS0F1Qkp4TjtVQUFpQixPQUFBLFdBQWQ0TyxLQXZCQ3BCOztjQXdCTHFCLE1BeEJTNW9CO1VBQWZ3b0IsYUFBV2pCLEtBd0JMcUI7VUFBa0IsT0ExbkI1QnpDLGVBa21CZW9COztjQXlCS2pxQyxNQXpCRDBpQixRQXlCRjZvQixNQXpCRTdvQjtVQUFmd29CLGFBQVdqQixLQXlCRXNCO1VBQVcsT3pCaHdDNUJwc0IsWXlCZ3dDb0JuZjs7T0F6QmhCa3JDLGFBQVdqQixLQUt1QnpOO09BR0UscUJBSHdCNE87T0FHeEIsT0ExcEJ4QzlDLGlCQWtwQmUyQixLQTl1Q2ZwekIsR0FtdkN3RG93Qjs7TUFMcERpRSxhQUFXakIsS0FxQkcxTjtNQUNVLE9sQmp4QzVCb00sY2tCMnZDZXNCLEtBcUJNOXJDOztLQXJCakIrc0MsYUFBV2pCLEtBQ3lCdk47S0FFeEMsT0FycEJBNEwsaUJBa3BCZTJCLEtBOXVDZnB6QixHQSt1QzBEL1MsT0FBUW1lOztJQUQ5RGlwQixhQUFXakIsS0FtQks5TjtJQUNRLE9BN3BCNUJzTSxnQkF5b0Jld0IsS0FtQlFodEM7R0FPTztZQTJDOUJ1dUMsV0FBU3ZvQyxHQUFFZ25DO1FBQWE3Z0M7SUFDMUIsT05nS00reEI7c0JNL0pDelksS0F2RUR3b0IsYUFxRU9qQixLQUVOdm5CLHdCQUZJemYsR0FBRWduQyxLQUUwQjs7YUFGYjdnQzs7WUFXeEJxaUMsVUFBUXhCO3dCO0lBQU0sc0IsT0FYZHVCLGlCQVdRdkI7R0FBeUI7WUFzQmpDeUIsVUFBVXpvQztJQUNKLElBRGVtRyxnQkFDbkIvTCxJQXRYRmd0QyxtQkF1WEVKLE1BL1hGRSxvQkE4WEU5c0M7YUFFQTQ5QixJQUFFdlk7S0F6R0F3b0IsYUF3R0ZqQixLQUNFdm5CO0tBRUYsT0FBQSxXQUxRemYsR0FyV1Z3bkMsdUJBc1dFcHRDLEdBQ0E0c0M7SUFHOEI7SUFDbEMsT04wSE05TyxZTTdIRkYsUUFIbUI3eEI7O1lBU3JCdWlDLFNBQVN2aUMsS0FBTSxPQVRmc2lDLFVBcDFDQTcwQixJQTYxQ1N6TixLQUFzQjtZQUkvQndpQztJQXJ0QkEvQyxlQTBWQTBCO0lBNFhGLE9BdHRCRTFCLGVBMlZBMkI7R0E0WDZCO0d6QmgxQnpCdnhCLFF5QjgwQkoyeUI7WUNoMkNBQyxtQkFBbUI3bEMsTUFDakJ2RztJQUFKLElBQ0k0L0IsT0FBVSxhQURWNS9CLGVBQUFBLE1BQUFBO0lBRUosMEJBSHFCdUcsTUFFakJxNUI7SUFDSjtHQUE4QjtHQ2dJOUI7R0RuSUV3TTtHQ3VJcUIsZSxVO0c7RztHLEksZTt1Qiw0Qjs0QixpQzs7STtJO0c7O0ksNEI7Rzs7SSxZOztJLE87O0c7O0ksWTs7STtJOzt3QixNLE87eUIsYyxPOztJLFk7O0k7OzJCLFUsTzs7SSxZOztJOzt3Qiw4Qjt3QixtQjs7STtJLCtCLE8sdUI7Rzs7SSx3QixvQixvQjs7OztNLFE7TTs7Ozs7STtHOztJO0ksNkIsTyx1QjtHOzs7OztvQjs7TSxVOzs7O0k7Rzs7STtJLFc7O0k7STtHOztJO0ksTyx5QixVO0c7Rzs7O0ssTzs2QixPLE8sZSxPLE87STtJLG1CO0c7dUIsTyxtQjt5QixPLE8sc0M7O0ksTzthO2E7RztxQixPLGlCO3VCO3VCO21CLGdCO3lCLGtCO3lCLGtCOztJO0ssTTtJO0ksdUIsK0M7STtJLHFDLDhCO0k7b0IsdUQ7STtHO3dCLHVCOztJOzs7MkIsaUIsbUI7Rzs7SSw2QixnQixtQjtHOztJLEksZ0M7STtLLHdDO0k7STtHO2tCLHdCOztxQixtQixvQjtJLG9CLG1CLHVCO0k7Rzs7SSxxQztHO3lCLG9COztJLHNCOztjLGU7O2MsTzthO0c7O0ksNEIsT3JCdElyQjlwQjtHO0c7OEIsMEI7O0k7SSxVO0k7STtHO0c7RztHO0c7RztzQixPLGtCOztJLEksUTs7Ozs7Szs7STtHO0c7RztHO0c7Rzs7SSxXOztJO0c7Rzt1QixPLGE7c0Isa0I7O0k7STtJO0c7eUIsTyxhOztJLEk7Ozs7O0s7O0k7RztHO0csK0I7Z0Msa0MsUztHOztJOzs7b0I7O007TSxJOzs7SSxPO0c7cUIsOEM7dUIsOEM7c0IsOEM7RztHO0c7RztHO0c7Rzs0Qjs7SSxtQyxlO0c7Rzs7STtJLFM7STs7SztLOztJLG9CO0k7Rzs7Ozs7Ozs7Ozs7Ozs7O0k7SSxrRDtJO0k7SSxxQkREQUYsbUI7STtJO0k7STtJO0k7STtJLG9EO0k7RztHOztJO0k7RztHO0c7O3dCO0ksc0Isa0M7RztHO0c7RztHO0c7b0IsaUI7RztHO0c7O0k7STtHO0c7O0k7STtJO0c7RztHO0c7WXVCbEJNaXFCO0lBQVEsdUJBQ1RuaUMsY0FBSyxZQUFMQTtRQUNEb2lDO0lBQVEsZ0JBRk5ELE9BRUZDO0dBQThCO1lBUWhDbEssTUFBT21LLE9BQU9DLE9BQVFwbkI7SUFDeEIsR0FEd0JBLFNBQWFDLE1BQWJELFFBQUFxbkIsYUFBYXBuQixjQUFib25CO0lBQ3hCLGFBRDJEQyxpQkFBYkMsYUFBYUQsZ0JBQWJDO0lBQ3RDLElBQUpqdUM7SUFDSixPQURJQSxRQURLNnRDLE9BQU9DLFdBQVFDLGdCQUFzQkU7R0FHb0I7WUFPOURDLFlBQVludUMsR0FBSSxPQUFKQSxnQkFBc0M7WUFDbERvdUMsWUFBWXB1QyxHQUFJLE9BQUpBLGdCQUFzQztHQUl2QztJQURicXVDO0lBR0FsckI7SUFDQW1yQjtZQVFBQyxNQUFPM3ZDLEdBQUVKLEdBQUksV0FBSkEsR0FBRkksR0FBaUM7WUFDeEM0dkMsUUFBTXh1QyxHQUFJLE9BQUpBLGdCQUFzQztZQUU1Q29NLE9BQWlCcE07SUFFbkIsV0FGbUJBO0lBRW5CLE9BQUEsV0FGbUJBO0dBRVk7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QixRQUNBdmxCLFNBSGNPO0dBaUUrQzs7SSxhO0k7Rzs7YTFDMEczRGkyQyxnQkFBSzNnQztLQUNWO0tBQUE7TUFBQSxPQUFBLHVCQUNDNGdDLHdCQUZTNWdDOztLQUNWLE9BQ0M0Z0MsOEJBRlM1Z0M7SUFDbUI7YUFEeEJ0RSxLQUFLc0UsUSx1QkFBTDJnQyxVQUFLM2dDO2FBRVQ0Z0MsNEJBQXFCNWdDLFFBQU82Z0M7S0FDOUIsSUFEOEJDLG9CQUFBRDtLQUM5QjtNQUFNO09BRHdCRSwyQkF4TzVCLzVCLGtCQXdPNEI4NUIsbUJBQVA5Z0M7ZUFBTytnQztjQUFBQTs7VTs7VTs7VTs7VTs7VTs7VTs7VTs7VSxPOztvQjBDcFE1QnpCLHFDMUNvUXFCdC9COztVLE87O29CMENwUXJCcy9CLHFDMUNvUXFCdC9COztVLE87O29CMENwUXJCcy9CLHFDMUNvUXFCdC9COztVLE87O29CMENwUXJCcy9CLHFDMUNvUXFCdC9COztVOztVOztVLE87O1UsTzs7VSxPOztVLE87O1UsVTBDeFByQjAvQixrQjFDd1BxQjEvQjs7OztjLE87O2MsTzs7VTs7VSxlLDRCQUFBQTtVLE87O1U7O1VBNEh2QixtQkE1SHVCQSxRQUFBQSxtQkFBQUE7VSxXMEM3S3JCd2dDOztVOztVO1csTyx1QjFDMktJRyxZQUVpQjNnQzs7VSxPQUZqQjJnQyxrQkFFaUIzZ0M7O1UwQ3BQckIyL0IsVzFDb1BxQjMvQjtVO1csTyx1QkFGakIyZ0MsWUFFaUIzZ0M7O1UsT0FGakIyZ0Msa0JBRWlCM2dDOztVLFk7aUQ7VUEwS3JCZ2hDLGFBMUtxQmhoQztVO1csTyx1QkFGakIyZ0MsWUFFaUIzZ0M7O1UsT0FGakIyZ0Msa0JBRWlCM2dDOztVLGM7dUQ7VTtXLE8sdUJBRmpCMmdDLFlBRWlCM2dDOztVLE9BRmpCMmdDLGtCQUVpQjNnQzs7VSxPMENwUXJCcy9CLHFDMUNvUXFCdC9COztNQXVLQSxXQXZLQUEsV0FBQUE7VUFBTzhnQyxvQkFBQUM7O0lBd0ttQjthQUUvQ0Usd0JBQWFqaEM7S0FDZDtLQUFBO01BQUEsT0FBQTtlQUNDa2hDLGdDQUZh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L0RFUSxhMUIrREZsbkMsVUFBQTBtQzs7OzsyQjBCL0RFUSxhMUIrREZsbkMsVUFBQTBtQzs7MkIwQi9ERVEsYTFCK0RGbG5DLFVBQUEwbUM7OzJCMEIvREVRLGExQitERmxuQyxVQUFBMG1DOzsyQjBCL0RFUSxhMUIrREZsbkMsVUFBQTBtQzs7MkIwQi9ERVEsYTFCK0RGbG5DLFVBQUEwbUM7OzJCMEIvREVRLGExQitERmxuQyxVQUFBMG1DOzsyQjBCL0RFUSxhMUIrREZsbkMsVUFBQTBtQzs7MkIwQi9ERVEsYTFCK0RGbG5DLFVBQUEwbUM7OzJCMEIvREVRLGExQitERmxuQyxVQUFBMG1DOzs7Ozs7OzJCMEIvREVRLGExQitERmxuQyxVQUFBMG1DOzsyQjBCL0RFUSxhMUIrREZsbkMsVUFBQTBtQzs7MkIwQi9ERVEsYTFCK0RGbG5DLFVBQUEwbUM7OzJCMEIvREVRLGExQitERmxuQyxVQUFBMG1DOzsyQjBCL0RFUSxhMUIrREZsbkMsVUFBQTBtQzs7MkIwQi9ERVEsYTFCK0RGbG5DLFVBQUEwbUM7OzJCMEIvREVRLGExQitERmxuQyxVQUFBMG1DOzsyQjBCL0RFUSxhMUIrREZsbkMsVUFBQTBtQzs7MkIwQi9ERVEsYTFCK0RGbG5DLFVBQUEwbUM7Ozs7MkIwQi9ERVEsYTFCK0RGbG5DLFVBQUEwbUM7OzJCMEIvREVRLGExQitERmxuQyxVQUFBMG1DOzsyQjBCL0RFUSxhMUIrREZsbkMsVUFBQTBtQzs7MkIwQi9ERVEsYTFCK0RGbG5DLFVBQUEwbUM7OzJCMEIvREVRLGExQitERmxuQyxVQUFBMG1DOzsyQjBCL0RFUSxhMUIrREZsbkMsVUFBQTBtQzs7MkIwQi9ERVEsYTFCK0RGbG5DLFVBQUEwbUM7OzJCMEIvREVRLGExQitERmxuQyxVQUFBMG1DOzsyQjBCL0RFUSxhMUIrREZsbkMsVUFBQTBtQzs7Ozs7T0FBQSxPMEJoREVTLHdCMUJnREZubkMsVUFBQTBtQzs7O0lBQUEsTzBCeENFVyxnQjFCd0NGcm5DLFVBQUEwbUM7R0FzQ21CO1lBdENuQjZDO0lBQUE7O09BQ0U7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7ZUFDQTs7R0FDaUI7R0FFbkIsU0FBQUMsZ0JBQUE5QztJQUFBLFVBQUFBLHFDQUFBQTtnQkFBQUE7Z0JBQUEsTzBCcEZFVSx1QjFCb0ZGbm5DLFVBQUF5bUM7Ozs7Ozs7Ozs7MEIwQnZHRVEsYTFCdUdGam5DLFVBQUF5bUM7Ozs7OzJCMEJ2R0VRLGExQnVHRmpuQyxVQUFBeW1DOzs7OzRCMEJ2R0VRLGExQnVHRmpuQyxVQUFBeW1DOzs0QjBCdkdFUSxhMUJ1R0ZqbkMsVUFBQXltQzs7NEIwQnZHRVEsYTFCdUdGam5DLFVBQUF5bUM7OzRCMEJ2R0VRLGExQnVHRmpuQyxVQUFBeW1DOzs0QjBCdkdFUSxhMUJ1R0ZqbkMsVUFBQXltQzs7NEIwQnZHRVEsYTFCdUdGam5DLFVBQUF5bUM7OzRCMEJ2R0VRLGExQnVHRmpuQyxVQUFBeW1DOzs7OzRCMEJ2R0VRLGExQnVHRmpuQyxVQUFBeW1DOzs0QjBCdkdFUSxhMUJ1R0ZqbkMsVUFBQXltQzs7NEIwQnZHRVEsYTFCdUdGam5DLFVBQUF5bUM7OzRCMEJ2R0VRLGExQnVHRmpuQyxVQUFBeW1DOzs0QjBCdkdFUSxhMUJ1R0ZqbkMsVUFBQXltQzs7NEIwQnZHRVEsYTFCdUdGam5DLFVBQUF5bUM7OzRCMEJ2R0VRLGExQnVHRmpuQyxVQUFBeW1DOzs7Ozs7Ozs0QjBCdkdFUSxhMUJ1R0ZqbkMsVUFBQXltQzs7NEIwQnZHRVEsYTFCdUdGam5DLFVBQUF5bUM7OzRCMEJ2R0VRLGExQnVHRmpuQyxVQUFBeW1DOzs0QjBCdkdFUSxhMUJ1R0ZqbkMsVUFBQXltQzs7NEIwQnZHRVEsYTFCdUdGam5DLFVBQUF5bUM7OzRCMEJ2R0VRLGExQnVHRmpuQyxVQUFBeW1DOzs0QjBCdkdFUSxhMUJ1R0ZqbkMsVUFBQXltQzs7NEIwQnZHRVEsYTFCdUdGam5DLFVBQUF5bUM7Ozs7NEIwQnZHRVEsYTFCdUdGam5DLFVBQUF5bUM7OzRCMEJ2R0VRLGExQnVHRmpuQyxVQUFBeW1DOzs0QjBCdkdFUSxhMUJ1R0ZqbkMsVUFBQXltQzs7NEIwQnZHRVEsYTFCdUdGam5DLFVBQUF5bUM7OzRCMEJ2R0VRLGExQnVHRmpuQyxVQUFBeW1DOzs0QjBCdkdFUSxhMUJ1R0ZqbkMsVUFBQXltQzs7NEIwQnZHRVEsYTFCdUdGam5DLFVBQUF5bUM7Ozs7Ozs7OzsyQjBCdkdFUSxhMUJ1R0ZqbkMsVUFBQXltQzs7Ozs0QjBCdkdFUSxhMUJ1R0ZqbkMsVUFBQXltQzs7NEIwQnZHRVEsYTFCdUdGam5DLFVBQUF5bUM7OzRCMEJ2R0VRLGExQnVHRmpuQyxVQUFBeW1DOzs0QjBCdkdFUSxhMUJ1R0ZqbkMsVUFBQXltQzs7NEIwQnZHRVEsYTFCdUdGam5DLFVBQUF5bUM7OzRCMEJ2R0VRLGExQnVHRmpuQyxVQUFBeW1DOzs0QjBCdkdFUSxhMUJ1R0ZqbkMsVUFBQXltQzs7Ozs0QjBCdkdFUSxhMUJ1R0ZqbkMsVUFBQXltQzs7NEIwQnZHRVEsYTFCdUdGam5DLFVBQUF5bUM7OzRCMEJ2R0VRLGExQnVHRmpuQyxVQUFBeW1DOzs0QjBCdkdFUSxhMUJ1R0ZqbkMsVUFBQXltQzs7NEIwQnZHRVEsYTFCdUdGam5DLFVBQUF5bUM7OzRCMEJ2R0VRLGExQnVHRmpuQyxVQUFBeW1DOzs0QjBCdkdFUSxhMUJ1R0ZqbkMsVUFBQXltQzs7Ozs7Ozs0QjBCdkdFUSxhMUJ1R0ZqbkMsVUFBQXltQzs7NEIwQnZHRVEsYTFCdUdGam5DLFVBQUF5bUM7OzRCMEJ2R0VRLGExQnVHRmpuQyxVQUFBeW1DOzs0QjBCdkdFUSxhMUJ1R0ZqbkMsVUFBQXltQzs7NEIwQnZHRVEsYTFCdUdGam5DLFVBQUF5bUM7OzRCMEJ2R0VRLGExQnVHRmpuQyxVQUFBeW1DOzs0QjBCdkdFUSxhMUJ1R0ZqbkMs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QUFBO29Cd0QxTUVkLFN4RGlOQW1HO2tCQVBGeEYsb0JBQUFHLFl3RDFNRWQsU3hEME1GVzs7a0JBT0UsSUFBQWtDLFd1RHBJQWhFLGN2RDZIRmdDO2tCQU9Fc0YscUJBQUF0RDs7O3dCd0RqTkE3QyxTeEQrTUFpRztpQkFMRnRGLG9CQUFBRyxZd0QxTUVkLFN4RDBNRlc7O3FCQUtFbUMsV3VEbkVBOUQsZXZEM0VGc0MsZ0JBeUlBVDtpQkFLRW9GLGtDQUFBbkQ7O3VCd0QvTUE5QyxTeEQyTUE4RjtnQkFERm5GLG9CQUFBRyxZd0QxTUVkLFN4RDBNRlc7O29CQUNFb0MsV3VEL0RBL0QsZUFwRkFKLGtCdkRrSkZpQztnQkFDRWlGLG1CQUFBL0M7O3NCd0QzTUEvQyxTeEQ4TUFnRztlQUpGckYsb0JBQUFHLFl3RDFNRWQsU3hEME1GVzs7bUJBSUVxQyxXdURsRUFoRSxldkRuQ0Z3QyxpQkFpR0FYO2VBSUVtRixzQkFBQWhEOztxQndEOU1BaEQsU3hEcU5BdUc7Y0FYRjVGLG9CQUFBRyxZd0QxTUVkLFN4RDBNRlc7O2NBV0UsSUFBQThGLFd1RG5LQTlILGV2RHdKRmtDO2NBV0UwRixnQ0FBQUU7O29Cd0RyTkF6RyxTeERzTkF3RzthQVpGN0Ysb0JBQUFHLFl3RDFNRWQsU3hEME1GVzs7YUFZRSxJQUFBK0YsWXVEcEtBL0gsZXZEd0pGa0M7YUFZRTJGLDZCQUFBRTs7OztXQVpGLEd3RDFNRTFHLFNEd0NBekI7WXZEa0tGcUMsZUFBQUUsWXdEMU1FZCxTeEQwTUZZOzt3QkFBQWxjOztRQWNtQjtLQWRuQi9sQixLQUFBOGhDO1F3RDFNRVQsU3hEME1GVztNQUFBLE8wQnJLRWxCLHdCMUJxS0Z0bkMsVXdEMU1FNm5DLFN4RDBNRlcsYUFBQWpDO1F3RDFNRXNCLFN4RDBNRlk7TUFBQSxPMEJqS0VsQixvQjFCaUtGdm5DLFV3RDFNRTZuQyxTeEQwTUZZLFFBQUFsQztLQUNFO01BQUFpSSxZd0QzTUEzRyxTeEQyTUE4RjtNQUNBMUMsa0J3RDVNQXBELFN4RDRNQW1DO01BQ0EsUXdEN01BbkMsU3hENk1BK0Y7TUFDQSxVd0Q5TUEvRixTeEQ4TUFnRztNQUNBLFV3RC9NQWhHLFN4RCtNQWlHO01BQ0FXLG9Cd0RoTkE1RyxTeERnTkFrRztNQUNBVyxjd0RqTkE3RyxTeERpTkFtRztNQUNBVyxtQndEbE5BOUcsU3hEa05Bb0c7TUFDQSxVd0RuTkFwRyxTeERtTkFxRztNQUNBLFV3RHBOQXJHLFN4RG9OQXNHO01BQ0EsVXdEck5BdEcsU3hEcU5BdUc7TUFDQSxVd0R0TkF2RyxTeERzTkF3Rzs7OztPQUFBTztPQURBQztPQURBQztPQURBQztPQUpBQztPQURBQztPQURBQztTQUZBVixlQURGbHFELElBQ0VrcUQsY0FERmxPLE1BQUFoOEMsWUFBQWc4QztNQUFBO2NBQUFBO2NBRUUySztjQUNBaUU7Y0FDQUQ7Y0FDQUQ7Y0FDQVA7Y0FDQUM7Y0FDQUM7Y0FDQUk7Y0FDQUQ7Y0FDQUQ7Y0FDQUQ7O0tBWkY7TUFBQSxxQndEMU1FL0csU3hEc05Bd0c7TUFaRjtzQndEMU1FeEcsU3hEcU5BdUc7TUFYRixxQndEMU1FdkcsU3hEb05Bc0c7TUFWRixxQndEMU1FdEcsU3hEbU5BcUc7TUFURjtzQndEMU1FckcsU3hEK01BaUc7TUFMRixxQndEMU1FakcsU3hEOE1BZ0c7S0FKRixPMEJ2SkVuRztjMUJ1SkYxbkM7Y0FBQXVtQzs0QndEMU1Fc0IsU3hENk1BK0Y7O0lBSEYsTzBCL0lFaEcseUIxQitJRjVuQyxVQUFBdW1DO0dBY21CO1lBZG5CNEk7SUFBQTtLQVlFQztLQURBQztLQURBQztLQURBQztLQURBQztLQURBQztLQURBQztLQURBQztLQURBQztLQURBQztLQURBaEU7S0FETWlFO0tBV04vcEQsTXVEN05BOC9DLGV2RDZOQXVKO0tBQUFwRyxxQkFBQWpqRDtLQURBdW1ELFF1RDVOQXpHLGV2RDROQXdKO0tBQUFuRyx1QkFBQW9ELFFBQ0F0RDtLQUZBd0QsUXVEM05BM0csZXZEMk5BeUo7S0FBQWpELHVCQUFBRyxRQUNBdEQ7S0FGQXdELFF1RC9MQXhHLGV2RHhCRmdDLGdCQXVORXFIO0tBQUFoRCx1QkFBQUcsUUFDQUw7T0FGQW1EOztNQUFBbHJELElBQUFrckQ7TUFBQTVDLFFBeE5GNUUsZ0JBd05FMWpEO01BQUEya0QsZ0JBQUEyRDtNQUFBSCxhQUFBeEQsS0FDQXNEOztTQURBRSxTQUNBRjtPQUZBa0Q7O01BQUFuUCxNQUFBbVA7TUFBQTFDLFF1RHBOQWhILGN2RG9OQXpGO01BQUF1TSxrQkFBQUU7TUFBQUosYUFBQUUsT0FDQUo7O1NBREFFLFNBQ0FGO09BRkFpRDs7TUFBQXZQLE1BQUF1UDtNQUFBeEMsUXVEbk5BbkgsY3ZEbU5BNUY7TUFBQTZNLGtCQUFBRTtNQUFBSixhQUFBRSxPQUNBTDs7U0FEQUcsU0FDQUg7O0tBRkFVLFF1RDNMQW5ILGV2RDZDRmtELGdCQThJRXVHO0tBQUExQyx1QkFBQUksUUFDQVA7S0FGQVUsUXVEMUxBdEgsZXZEcUZGb0QsaUJBcUdFc0c7S0FBQXpDLHVCQUFBSyxRQUNBUDtLQUZBZCxRdURuTkFyRyxpQnZEbU5BK0o7S0FBQXRDLHVCQUFBcEIsUUFDQWdCO09BRkF0Qjs7TUFBQXVCLE1BQUF2QjtNQUFBa0UsUXVEbE5BakssaUJ2RGtOQXNIO01BQUFFLGtCQUFBeUM7TUFBQXRDLGFBQUFILE9BQ0FDOztTQURBRSxTQUNBRjthQUZNdUM7U0FBQUUsVUFDTnZDOzs7TUFETXdDO3VCLE91RHZMTi9KLGVBMUJBSiwwQnZEaU5NZ0s7TUFBQTFELGtCQUFBNkQ7TUFBQUQsY0FBQTVELE9BQ05xQjtJQUZGLHNCQUNRdUM7R0FhVztZQUVuQkUsbUJBQUEzSjtJQUFBLFVBQUFBLHFDQUFBQTtLQUNFO01BREYrQixnQkFBQS9CO01BQ0U0SjtNQUNBQztNQUNBckM7TUFIRnZGO01BQUFDO01BQUFqaUM7O1NBQUE7U0FBQTt3QkFBQTs7V0FBQStsQjs7V0FBQW1jO1dBQUFDO2tDQUFBQTttQ0FBQUE7c0NBQUFBO2dCd0QxTkVkLFN4RDROQXVJO2NBRkY1SCxvQkFBQUcsWXdEMU5FZCxTeEQwTkZXOztjQUVFLElBQUFJLFN1RC9JQWxDLGN2RDZJRmdDO2NBRUUwSCxrQ0FBQXhIOzs7bUJ3RDVOQWYsU3hENk5Ba0c7WUFIRnZGLG9CQUFBRyxZd0QxTkVkLFN4RDBORlc7O1lBR0UsSUFBQTZCLFd1RGhKQTNELGN2RDZJRmdDO1lBR0VxRiwyQkFBQTFEOztrQndEN05BeEMsU3hEMk5Bc0k7V0FERjNILG9CQUFBRyxZd0QxTkVkLFN4RDBORlc7O2VBQ0U4QixXdUQvRUF6RCxldkR3Q0Y2QyxhQXNDQWhCO1dBQ0V5SCxxQkFBQTdGOzt3QkFERi9kOztRQUtpRDtLQUxqRC9sQixLQUFBOGhDO1F3RDFORVQsU3hEME5GVztNQUFBLE8wQnJMRWxCLHdCMUJxTEZybkMsVXdEMU5FNG5DLFN4RDBORlcsYUFBQWpDO1F3RDFORXNCLFN4RDBORlk7TUFBQSxPMEJqTEVsQixvQjFCaUxGdG5DLFV3RDFORTRuQyxTeEQwTkZZLFFBQUFsQztLQUNFO01BQUEsUXdEM05Bc0IsU3hEMk5Bc0k7TUFDQSxVd0Q1TkF0SSxTeEQ0TkF1STtNQUNBLFV3RDdOQXZJLFN4RDZOQWtHOzs7T0FBQVU7T0FEQTRCO09BREFDO01BREYsV0FDRUEsYUFDQUQsMEJBQ0E1Qjs7S0FIRjtNQUFBLHFCd0QxTkU1RyxTeEQ2TkFrRztNQUhGO3NCd0QxTkVsRyxTeEQ0TkF1STtLQUZGLE8wQnZLRTFJO2MxQnVLRnpuQztjQUFBc21DOzRCd0QxTkVzQixTeEQyTkFzSTs7SUFERixPMEIvSkV2SSx5QjFCK0pGM25DLFVBQUFzbUM7R0FLaUQ7WUFMakRnSztJQUFBO0tBR0ViO0tBREFjO0tBREFDO0tBRUExcUQsTXVEaE9BZ2dELGN2RGdPQTJKO0tBQUExRyxxQkFBQWpqRDtLQURBdW1ELFF1RC9OQXZHLGN2RCtOQXlLO0tBQUF0SCx1QkFBQW9ELFFBQ0F0RDtLQUZBd0QsUXVEdk1BdEcsZXZEZ0tGc0YsYUF1Q0VpRjtLQUFBcEUsdUJBQUFHLFFBQ0F0RDtJQUZGLHNCQUNFbUQ7R0FJK0M7T0FFN0NxRTtZQUNBQyxnQkFBYSxZQUFRO0dBTXpCLFNBQUFDLG1CQUFBcks7SUFBQSxVQUFBQSxxQ0FBQUE7S0FDRTtNQURGK0IsZ0JBQUEvQjtNQUNFc0s7TUFERnJJO01BQUFDO01BQUFqaUM7O1NBQUE7U0FBQTt3QkFBQTs7V0FBQStsQjs7V0FBQW1jO1dBQUFDO2tDQUFBQTtXQUFBLEd3RHhPRWQsU0R3Q0F6QjtZdkRnTUZxQyxlQUFBRSxZd0R4T0VkLFN4RHdPRlk7O2tCd0R4T0VaLFN4RHlPQWdKO1dBREZySSxvQkFBQUcsWXdEeE9FZCxTeER3T0ZXOztXQUNFLElBQUFJLFN1RHZMQXBDLGV2RHNMRmtDO1dBQ0VtSSx3Q0FBQWpJOzt3QkFERnJjOztRQUdtQjtLQUhuQi9sQixLQUFBOGhDO1F3RHhPRVQsU3hEd09GVztNQUFBLE8wQm5NRWxCLHdCMUJtTUZwbkMsVXdEeE9FMm5DLFN4RHdPRlcsYUFBQWpDO1F3RHhPRXNCLFN4RHdPRlk7TUFBQSxPMEIvTEVsQixvQjFCK0xGcm5DLFV3RHhPRTJuQyxTeER3T0ZZLFFBQUFsQztLQUNFLFl3RHpPQXNCLFN4RHlPQWdKOztNQURGLE8wQnJMRW5KO2UxQnFMRnhuQztlQUFBcW1DOzs7dUJ3RHhPRXNCLFN4RHlPQWdKOzs7U0FBQUM7S0FERixXQUNFQTs7SUFERixPMEI3S0VsSix5QjFCNktGMW5DLFVBQUFxbUM7R0FHbUI7WUFIbkJ3SztJQUFBO0tBQ0VDO0tBQUFqckQsTXVEaFBBOC9DLGV2RGdQQW1MO0tBQUFoSSxxQkFBQWpqRDtJQURGLHNCQUNFaWpEO0dBRWlCO1lBRW5CaUkscUJBQUExSztJQUFBLFVBQUFBLHFDQUFBQTtLQUNFO01BREYrQixnQkFBQS9CO01BQ0U0SjtNQUNBQztNQUNBckM7TUFIRnZGO01BQUFDO01BQUFqaUM7O1NBQUE7U0FBQTt3QkFBQTs7V0FBQStsQjs7V0FBQW1jO1dBQUFDO2tDQUFBQTttQ0FBQUE7c0NBQUFBO2dCd0Q3T0VkLFN4RCtPQXVJO2NBRkY1SCxvQkFBQUcsWXdEN09FZCxTeEQ2T0ZXOztjQUVFLElBQUFJLFN1RGxLQWxDLGN2RGdLRmdDO2NBRUUwSCxrQ0FBQXhIOzs7bUJ3RC9PQWYsU3hEZ1BBa0c7WUFIRnZGLG9CQUFBRyxZd0Q3T0VkLFN4RDZPRlc7O1lBR0UsSUFBQTZCLFd1RG5LQTNELGN2RGdLRmdDO1lBR0VxRiwyQkFBQTFEOztrQndEaFBBeEMsU3hEOE9Bc0k7V0FERjNILG9CQUFBRyxZd0Q3T0VkLFN4RDZPRlc7O2VBQ0U4QixXdURsR0F6RCxldkR3Q0Y2QyxhQXlEQWhCO1dBQ0V5SCxxQkFBQTdGOzt3QkFERi9kOztRQUtpRDtLQUxqRC9sQixLQUFBOGhDO1F3RDdPRVQsU3hENk9GVztNQUFBLE8wQnhNRWxCLHdCMUJ3TUZubkMsVXdEN09FMG5DLFN4RDZPRlcsYUFBQWpDO1F3RDdPRXNCLFN4RDZPRlk7TUFBQSxPMEJwTUVsQixvQjFCb01GcG5DLFV3RDdPRTBuQyxTeEQ2T0ZZLFFBQUFsQztLQUNFO01BQUEsUXdEOU9Bc0IsU3hEOE9Bc0k7TUFDQSxVd0QvT0F0SSxTeEQrT0F1STtNQUNBLFV3RGhQQXZJLFN4RGdQQWtHOzs7T0FBQVU7T0FEQTRCO09BREFDO01BREYsV0FDRUEsYUFDQUQsMEJBQ0E1Qjs7S0FIRjtNQUFBLHFCd0Q3T0U1RyxTeERnUEFrRztNQUhGO3NCd0Q3T0VsRyxTeEQrT0F1STtLQUZGLE8wQjFMRTFJO2MxQjBMRnZuQztjQUFBb21DOzRCd0Q3T0VzQixTeEQ4T0FzSTs7SUFERixPMEJsTEV2SSx5QjFCa0xGem5DLFVBQUFvbUM7R0FLaUQ7WUFMakQySztJQUFBO0tBR0V4QjtLQURBYztLQURBQztLQUVBMXFELE11RG5QQWdnRCxjdkRtUEEySjtLQUFBMUcscUJBQUFqakQ7S0FEQXVtRCxRdURsUEF2RyxjdkRrUEF5SztLQUFBdEgsdUJBQUFvRCxRQUNBdEQ7S0FGQXdELFF1RDFOQXRHLGV2RGdLRnNGLGFBMERFaUY7S0FBQXBFLHVCQUFBRyxRQUNBdEQ7SUFGRixzQkFDRW1EO0dBSStDO1lBRzdDOEUsV0FBU0M7SUFBSyxXQUFMQTtzQjBCN1BYbHRCO0cxQjZQMkQ7R0FPN0QsU0NwSUFtdEIseUJEb0lBOUs7SUFBQSxVQUFBQSxxQ0FBQUE7S0FDRTtNQURGK0IsZ0JBQUEvQjtNQUNFb0Q7TUFDQTJIO01BQ0FDO01BSEYvSTtNQUFBQztNQUFBamlDOztTQUFBO1NBQUE7d0JBQUE7O1dBQUErbEI7O1dBQUFtYztXQUFBQztrQ0FBQUE7bUNBQUFBO3NDQUFBQTtnQndENVBFZCxTeEQ2UEE4QjtjQURGbkIsb0JBQUFHLFl3RDVQRWQsU3hENFBGVzs7Y0FDRSxJQUFBSSxTdURyTUFuQyxpQnZEb01GaUM7Y0FDRWlCLG9CQUFBZjs7O21Cd0Q3UEFmLFN4RDhQQXlKO1lBRkY5SSxvQkFBQUcsWXdENVBFZCxTeEQ0UEZXOztnQkFFRTZCLFd1RGxIQXhELGVBcEZBSixrQnZEb01GaUM7WUFFRTRJLHlCQUFBakg7O2tCd0Q5UEF4QyxTeEQrUEEwSjtXQUhGL0ksb0JBQUFHLFl3RDVQRWQsU3hENFBGVzs7V0FHRSxJQUFBOEIsV3VEdk1BN0QsaUJ2RG9NRmlDO1dBR0U2SSx1QkFBQWpIOzt3QkFIRi9kOztRQUtpRDtLQUxqRC9sQixLQUFBOGhDO1F3RDVQRVQsU3hENFBGVztNQUFBLE8wQnZORWxCLHdCMUJ1TkZsbkMsVXdENVBFeW5DLFN4RDRQRlcsYUFBQWpDO1F3RDVQRXNCLFN4RDRQRlk7TUFBQSxPMEJuTkVsQixvQjFCbU5Gbm5DLFV3RDVQRXluQyxTeEQ0UEZZLFFBQUFsQztLQUNFO01BQUEsUXdEN1BBc0IsU3hENlBBOEI7TUFDQSxVd0Q5UEE5QixTeEQ4UEF5SjtNQUNBLFV3RC9QQXpKLFN4RCtQQTBKOzs7T0FBQUM7T0FEQUM7T0FEQWxHO01BREYsV0FDRUEsWUFDQWtHLGlCQUNBRDs7S0FIRjtNQUFBLHFCd0Q1UEUzSixTeEQrUEEwSjtNQUhGLHFCd0Q1UEUxSixTeEQ4UEF5SjtLQUZGLE8wQnpNRTVKO2MxQnlNRnRuQztjQUFBbW1DOzRCd0Q1UEVzQixTeEQ2UEE4Qjs7SUFERixPMEJqTUUvQix5QjFCaU1GeG5DLFVBQUFtbUM7R0FLaUQ7WUN6SWpEbUw7SURvSUE7S0FHRUM7S0FEQUM7S0FEQTFGO0tBRUFubUQsTXVEclFBKy9DLGlCdkRxUUE2TDtLQUFBM0kscUJBQUFqakQ7S0FEQXVtRCxRdUQxT0FwRyxlQTFCQUosa0J2RG9RQThMO0tBQUExSSx1QkFBQW9ELFFBQ0F0RDtLQUZBd0QsUXVEblFBMUcsaUJ2RG1RQW9HO0tBQUFHLHVCQUFBRyxRQUNBdEQ7SUFGRixzQkFDRW1EO0dBSStDO1lBMkIvQ3dGLGNBQWV0bkI7SUFDakIsR0FEaUJBO1NBRW9Cbm1DLElBRnBCbW1DLFVBQ2J1bkIsVUFDc0MsVzBCdFN4QzV0QixlMUJzU21DOS9COztTQURqQzB0RDtJQUdKLE9BQUEsVzBCeFNFNXRCLHFCMUJxU0U0dEI7R0FNWTtZQUVkQyxVQUF1QkMsVUFBVXpuQixPQUFPMG5CLFNBQ2hDQztJLGdCQUdtQi9wQixRQUFhZ3FCO0tBQzFDO01BRzhDLE9BQUEsd0JBQUcsV0FQdkNELE1BR2dDQztNQUV0Q0M7UVdyU0ZwcUM7O1lER0FEOzZCLHdDVjRSdUJpcUM7O01BV3JCSyxrQkFwQkZSLGNBU2lDdG5CO01BWS9CK25COztVQVpzQ0w7Ozs7OzthQWlCUCx3QkFOL0JJOztNQVNBM0IsU0FsVUY1SSxlQStTUW9LO1FBQUFBO01BK0JGO09BREVLOztXQUNGO2FxRDlMSjNPLHFCckQ4TEksV0EvQkVzTyxNQUdtQi9wQjtPQStCbUIsZ0JBN0I1Q2lxQjtPQWVNSTtPQUFOLzRDOztlQVVNODRDOzs7ZUFuQk5EOzs7ZUFRQTVCOzs7Ozs7OztNQUtJO09BREUrQjs7V1d2VFJ6cUM7O2VYd1RNO2lCcUR2TEo0N0IscUJyRHVMSSxXQXhCRXNPLE1BR21CL3BCO09Bd0JuQnVxQixvQ0F0Qk5OLEtBa0JNSztPQUhBRSxrQkFPQUQ7T0FQTkU7NkJBVEFOLHNCQVFBNUI7T0FDTThCLFFBQUFHO09BQU5sNUMsT0FBQW01QztLQWtCSjtnQ0FsQkluNUMsT0FBTSs0Qzt1QkFpQkw3bkQ7ZUFDTDs2QkFES0E7aUNBQ0E2eEM7eUJBQ1E7MEJBQVQrSjs0QnFENVNBNUMsdUJyRDRTaUMsd0JBRGhDbkg7eUJBRUwsSUFBSSxXQUFBLFdBeENNMFYsTUF1Q04zTCxTQUNBOytCQUNDeitCOzhCQUFBM2lCLHdCQUFBMmlCOzBCQUNILGtCQUpHMDBCOzBCQUtILFFBRkdyM0M7MEJBR0gsTUFBQSw0QkFIR0E7O3dCQUdJO2NBQUEsR0FBQTs7T0E5RkwwdEQ7WXlEelBGQyxVQUFVMXVELEdBQUksT0FBSkEsUUFBeUQ7WUFVbkVxdkMsTUFBTXJ2QztJQUNSO0tBQUltbUMsUUFYRnVvQixVQVVNMXVEO0tBRUo0dEQsV0FGSTV0RDtLQUd3QixXQUY1Qm1tQztLQUVrQixXQURsQnluQjtJQUM0Qiw0QixPekQ2UjlCRDtHeUQ3Um1DO1lDakJuQ2dCLE9BRUU5OEM7SUFBSixPbERrQm1Cd1IsU2tEbEJmeFIsV0FDMkIsYUFEM0JBLFlBQUFBO0dBQ2lFOzs7S0FxQmxCO01BQTdDKzhDO01BQ0FDO01BQ0FDLHFCQUF5QztjQWlCekNDLFdBQVdyZ0I7TXBCeU5iK0Q7UWdCMVBBNE8sZUlpQ2EzUztpQkFLUnNnQjtTQUdMLFNBSEtBO1VBT087bUJBUFBBO1dBTVk5b0Q7V0FBTitvRDtXQUNIcndELFNBL0JOZ3dELFNBOEJTSztVQUVQLE9BaENGTCxTQThCU0s7VUFFUCxPQUFBLFdBRElyd0QsR0FEU3NIOzt1QkFOWjhvRCxZQUlPOXVELGdCQUFIYTt1QkFDc0RuQyxHQUFLLE9BQWhFLFdBQTJEQSxHQURuRHNCLEdBQzJEO1NBQW5FLHNCOzJCQTVCRjJ1RCxXQXpCSkYsT0FvRFc1dEQ7UUFLQztNQVRWO0tBU1U7O0tBR1YsZ0IsNkJBakJFZ3VELG9CQWpCQUQ7S0FITjs7YUE2Q0lJLGVBQXlCbnVELEdBQWNiLEdBRXpDLGVKL0RFa2hELGtCSTZEeUJyZ0QsR0FBY2IsTUFFb0M7OztjQU96RTZ1RCxXQUFXcmdCO01wQnVMYitEO1FnQjFQQTRPLGVJbUVhM1M7O1NBUWIsSUFIY3hvQyxpQkFBTitvRDtTQUtSO2tCQURjLG1CQUpBL29EOzJCQUlUa0c7bUJBQ00sSUFBUGxHLE9KaEZKazdDLFVJK0VLaDFDO21CQUdGLGVKbEZIZzFDLGtCSTJFUTZOLE1BS0ovb0Q7a0JBRXVEO1FBQUE7TUFQM0Q7S0FPMkQ7S0FFckQsbUJBZEo2b0Q7S0FKaUM7O0lBL0RiLHlCQTBEdEJHOzs7O3lDOztZQzdEQUMsUUFBU3ZwRDtJLFVBS0o7SUFITyxJQUFOdU8sYUFGR3ZPLHFCQUVQO0lBQ1MsVUFETHVPO0lBRUosV0FGSUE7O1lBS05pN0MsTUFBTXB2RCxHQUFFckI7SUFDVixLQURRcUIsR0FDZ0IsT0FEZHJCO1FBQ3lCRCxJQUQzQnNCO0lBQ3dELHdCQUE3QnRCLEdBRHpCQyxPQUFBQTtHQUMyRDtZMUROckUwd0QsUUFBUUMsU0FBUXR2RDtJQUNsQixPcUM2RUV1eUM7O2VyQzdFRjtpQm9Ec0lJaU4scUJwRHRJSixXQURVOFAsU0FBUXR2RDtHQUVEO1lBRWZ1dkQsUUFBUUMsU0FBUWh4RDtJQUNQLElBQVA0NUMsY0FEYzU1QztJQUVsQjtZQUFHO2NBRk9neEQsU29ENkJOalEsdUJwRDNCQSx3QkFEQW5IO0dBQzBEO0dBRzlELFNBQUFxWCxjQUFBdE47SUFBQSxVQUFBQSxxQ0FBQUE7S0FBVztNQUFYK0IsZ0JBQUEvQjtNQUFXc0Q7TUFBVWlLO01BQXJCdEw7TUFBQUM7TUFBQWppQzs7U0FBQTtTQUFBO3dCQUFBOztXQUFBK2xCOztXQUFBbWM7V0FBQUM7a0NBQUFBO21DQUFBQTtZQUFBLEd1RFRFZCxTRHdDQXpCO2F0RC9CRnFDLGVBQUFFLFl1RFRFZCxTdkRTRlk7O21CdURURVosU3ZEU21CaU07WUFBckJ0TCxvQkFBQUcsWXVEVEVkLFN2RFNGVzs7Z0JBQXFCSSxTc0QwR25CakMsaUJBM0RBRixrQnREL0NGaUM7WUFBcUJvTCxvQkFBQWxMOztrQnVEVG5CZixTdkRTU2dDO1dBQVhyQixvQkFBQUcsWXVEVEVkLFN2RFNGVzs7V0FBVyxJQUFBNkIsV3NEb0VUM0QsY3REcEVGZ0M7V0FBV21CLGtCQUFBUTs7d0JBQVg5ZDs7UUFBK0Q7S0FBL0QvbEIsS0FBQThoQztRdURURVQsU3ZEU0ZXO01BQUEsT3lCNEJFbEIsd0J6QjVCRmpuQyxXdURURXduQyxTdkRTRlcsYUFBQWpDO1F1RFRFc0IsU3ZEU0ZZO01BQUEsT3lCZ0NFbEIsb0J6QmhDRmxuQyxXdURURXduQyxTdkRTRlksUUFBQWxDO0tBQVcsSUFBQSxRdURUVHNCLFN2RFNTZ0MsV0FBVSxVdURUbkJoQyxTdkRTbUJpTTs7VUFBQUMseUJBQVZ6STtNQUFYLFdBQVdBLFVBQVV5STs7S0FBckIseUJ1RFRFbE0sU3ZEU21CaU07S0FBckIsT3lCMENFcE07Y3pCMUNGcm5DO2NBQUFrbUM7NEJ1RFRFc0IsU3ZEU1NnQzs7SUFBWCxPeUJrREVqQyx5QnpCbERGdm5DLFdBQUFrbUM7R0FBK0Q7WUFBL0R5TjtJQUFBO0tBQXFCQztLQUFWakk7S0FBVWptRCxNc0RKbkJpZ0QsaUJBWEFGLGtCdERlbUJtTztLQUFBakwscUJBQUFqakQ7S0FBVnVtRCxRc0RaVHZHLGN0RFlTaUc7S0FBQTlDLHVCQUFBb0QsUUFBVXREO0lBQXJCLHNCQUFXRTtHQUFvRDtZQUt6RGdMLFFBQU0vcUQsR0FBSSxPQUFKQSxFQUFlO1lBQ3JCZ3JELFFBQU12eEQsR0FBSSxPQUFKQSxFQUFlO1lBS3ZCd3hELFFBQU1od0QsR0FBSSxPQXBCWnF2RCxRQVNGTyxlQVdVNXZELEdBQXlCO1lBQy9CaXdELFFBQU16eEQsR0FBSSxPcUN5RForekMsUXJDMUVBZ2QsUUFLRkUsZUFZVWp4RCxJQUEyQztZQUNqRDB4RCxRQUFRbHdELEdBQUksT0FBSkEsS0FBUTtHQU1wQixTQUFBbXdELGdCQUFBaE87SUFBQSxVQUFBQSxxQ0FBQUE7S0FBZTtNQUFmK0IsZ0JBQUEvQjtNQUFlaU87TUFBa0JDO01BQXFCN0s7TUFBdERwQjtNQUFBQztNQUFBamlDOztTQUFBO1NBQUE7d0JBQUE7O1dBQUErbEI7O1dBQUFtYztXQUFBQztrQ0FBQUE7bUNBQUFBO29DQUFBQTthQUFBLEd1RDVCRWQsU0R3Q0F6QjtjdERaRnFDLGVBQUFFLFl1RDVCRWQsU3ZENEJGWTs7b0J1RDVCRVosU3ZENEIrQjRNO2FBQWpDak0sb0JBQUFHLFl1RDVCRWQsU3ZENEJGVzs7aUJBQWlDSSxTc0RnSC9CL0IsZUFwRkFKLGtCdEQ1QkZpQzthQUFpQytMLHFCQUFBN0w7O21CdUQ1Qi9CZixTdkQ0Qm9EK0I7WUFBdERwQixvQkFBQUcsWXVENUJFZCxTdkQ0QkZXOztZQUFzRCxJQUFBNkIsV3NENEJwRDVELGlCdEQ1QkZpQztZQUFzRGtCLHlCQUFBUzs7a0J1RDVCcER4QyxTdkQ0QmEyTTtXQUFmaE0sb0JBQUFHLFl1RDVCRWQsU3ZENEJGVzs7V0FBZSxJQUFBOEIsV3NEaURiNUQsY3REakRGZ0M7V0FBZThMLDBCQUFBbEs7O3dCQUFmL2Q7O1FBQ21CO0tBRG5CL2xCLEtBQUE4aEM7UXVENUJFVCxTdkQ0QkZXO01BQUEsT3lCU0VsQix3QnpCVEYvbUMsV3VENUJFc25DLFN2RDRCRlcsYUFBQWpDO1F1RDVCRXNCLFN2RDRCRlk7TUFBQSxPeUJhRWxCLG9CekJiRmhuQyxXdUQ1QkVzbkMsU3ZENEJGWSxRQUFBbEM7S0FBZTtNQUFBLFF1RDVCYnNCLFN2RDRCYTJNO01BQWtCLFV1RDVCL0IzTSxTdkQ0QitCNE07TUFBcUIsVXVENUJwRDVNLFN2RDRCb0QrQjs7O09BQUFrQjtPQUFyQjRKO09BQWxCQztNQUFmLFdBQWVBLGtCQUFrQkQsYUFBcUI1Sjs7S0FBdEQ7TUFBQSxxQnVENUJFakQsU3ZENEJvRCtCO01BQXRELHFCdUQ1QkUvQixTdkQ0QitCNE07S0FBakMsT3lCdUJFL007Y3pCdkJGbm5DO2NBQUFnbUM7NEJ1RDVCRXNCLFN2RDRCYTJNOztJQUFmLE95QitCRTVNLHlCekIvQkZybkMsV0FBQWdtQztHQUNtQjtZQURuQnFPO0lBQUE7S0FBc0QzSTtLQUFyQjRJO0tBQWxCQztLQUF1Qy91RCxNc0RsQ3BEKy9DLGlCdERrQ29EbUc7S0FBQWpELHFCQUFBampEO0tBQXJCdW1ELFFzRFIvQnBHLGVBMUJBSixrQnREa0MrQitPO0tBQUEzTCx1QkFBQW9ELFFBQXFCdEQ7S0FBdkN3RCxRc0QvQmJ6RyxjdEQrQmErTztLQUFBekksdUJBQUFHLFFBQWtCdEQ7SUFBakMsc0JBQWVtRDtHQUNJO1lBRW5CMEksY0FBQXhPO0lBQUEsVUFBQUEscUNBQUFBO0tBQVc7TUFBWCtCLGdCQUFBL0I7TUFBV3lPO01BQWVsQjtNQUExQnRMO01BQUFDO01BQUFqaUM7O1NBQUE7U0FBQTt3QkFBQTs7V0FBQStsQjs7V0FBQW1jO1dBQUFDO2tDQUFBQTttQ0FBQUE7WUFBQSxHdUQvQkVkLFNEd0NBekI7YXREVEZxQyxlQUFBRSxZdUQvQkVkLFN2RCtCRlk7O21CdUQvQkVaLFN2RCtCU21OO1lBQVh4TSxvQkFBQUcsWXVEL0JFZCxTdkQrQkZXOztZQUFXLElBQUFJLFNBSFgyTCxnQkFHQTdMO1lBQVdzTSxxQkFBQXBNOztrQnVEL0JUZixTdkQrQndCaU07V0FBMUJ0TCxvQkFBQUcsWXVEL0JFZCxTdkQrQkZXOztXQUEwQixJQUFBNkIsV0RxSjFCWCxZQ3JKQWhCO1dBQTBCb0wsb0JBQUF6Sjs7d0JBQTFCOWQ7O1FBQTZEO0tBQTdEL2xCLEtBQUE4aEM7UXVEL0JFVCxTdkQrQkZXO01BQUEsT3lCTUVsQix3QnpCTkY5bUMsV3VEL0JFcW5DLFN2RCtCRlcsYUFBQWpDO1F1RC9CRXNCLFN2RCtCRlk7TUFBQSxPeUJVRWxCLG9CekJWRi9tQyxXdUQvQkVxbkMsU3ZEK0JGWSxRQUFBbEM7S0FBVyxJQUFBLFF1RC9CVHNCLFN2RCtCU21OLGNBQWUsVXVEL0J4Qm5OLFN2RCtCd0JpTTs7VUFBQUMseUJBQWZrQjtNQUFYLFdBQVdBLGFBQWVsQjs7S0FBMUIseUJ1RC9CRWxNLFN2RCtCd0JpTTtLQUExQixPeUJvQkVwTTtjekJwQkZsbkM7Y0FBQStsQzs0QnVEL0JFc0IsU3ZEK0JTbU47O0lBQVgsT3lCNEJFcE4seUJ6QjVCRnBuQyxXQUFBK2xDO0dBQTZEO1lBQTdEMk87SUFBQTtLQUEwQmpCO0tBQWZrQjtLQUFlcHZELE1EcUoxQnlsRCxZQ3JKMEJ5STtLQUFBakwscUJBQUFqakQ7S0FBZnVtRCxRQUhYc0ksZ0JBR1dPO0tBQUFqTSx1QkFBQW9ELFFBQWV0RDtJQUExQixzQkFBV0U7R0FBa0Q7WUFPdkRrTTtJQUNPO0tBRGVDO0tBQVhDO0tBQUp2NEM7S0FDTHc0QyxZQURLeDRDO0tBRUx5NEMsbUJBRlNGO0tBR1RHLDBCQUhvQko7SUFJeEIsT0FBQSx1QkFISUUsTUFDQUMsYUFDQUM7O1lBR0ZDLFFBQU05eUQ7SUFDUixJQUFNLFFBQUEsaUJBREVBOztLQU9ELE1BQUE7SUFKTTtLQURSbWE7S0FBSXU0QztLQUFXRDtLQUNaRSxZQURIeDRDO0tBRUd5NEMsbUJBRkNGO0tBR0RHLDBCQUhZSjtJQUloQixXQUhJRSxNQUNBQyxhQUNBQztHQUVXO0dBSWpCLElBRkFFO1lBV0FDLFFBQU16c0QsR0FBSSxPQUFKQSxFQUFlO1lBQ3JCMHNELFFBQU1qekQsR0FBSSxPQUFKQSxFQUFlO1lBT3JCa3pELFFBQU0zc0QsR0FBSSxZQUFKQSxHQUFrQjtZQUN4QjRzRCxRQUFNbnpELEdBQUksWUFBSkEsR0FBa0I7WUFReEJvekQsUUFBTTdzRDtJQUFLLE1BQUE7R0FBWTtZQUV2QjhzRCxRQUFNcnpEO0lBQ1IsSUFBVSxRQUFBLGlCQURGQTs7S0FJRCxNQUFBO0lBRHVDLElBRHpDc3pELGlCQUFPYixrQkFDa0MsdUJBRGxDQTtJQUNSLGdCQURDYTtHQUVjO0dBRVYsSUFBUEM7WUFNQUMsUUFBTWh5RDtJQUFLLE1BQUE7R0FBWTtZQUV2Qml5RCxRQUFNenpEO0lBQ1IsSUFBVSxRQUFBLGlCQURGQTs7S0FPRCxNQUFBO0lBRlc7S0FIYjB6RDtLQUFpQmhCO0tBR0osWUFISUE7SUFDbEIsZ0JBRENnQjtHQUtjO0dBR25CLElBREVDO1lBS0ZDLFFBQU1weUQsR0FBSSxPQS9HWnF2RCxRQStCRnlCLGVBZ0ZVOXdELEdBQXlCO1lBQy9CcXlELFFBQU03ekQsR0FBSSxPcUNsQ1orekMsUXJDMUVBZ2QsUUEyQkZvQixlQWlGVW55RCxJQUEyQztZQUNqRDh6RCxVQUFRdHlELEdBQUksV0FBSkEsU0FBQUEsU0FBQUEsU0FBc0Q7WUFZNUR1eUQsUUFBTXh0RCxHQUFJLFlBQUpBLEdBQWtCO1lBQ3hCeXRELFFBQU1oMEQsR0FBSSxZQUFKQSxHQUFrQjtZQUsxQmkwRCxTQUFNenlELEdBQUksT0FuSVpxdkQsUUF3SEYvQiwwQkFXVXR0RCxHQUF5QjtZQUMvQjB5RCxRQUFNbDBELEdBQUksT3FDdERaK3pDLFFyQzFFQWdkLFFBb0hGdEMsMEJBWVV6dUQsSUFBMkM7WUFDakRtMEQsVUFBUTN5RCxHQUFJLE9BQUpBLEtBQTZCOzs7O2dCQXJIbkNpTSxNQUZBNmpELFNBQ0FDLFVBSUY3ekMsUUFDQTh6QyxTQUNBQyxTQUNBQzs7OzthQStCRXFCLFFBZkFQLFNBTUFNO1NBa0VGLzBDO1NBQ0E2MUM7U0FDQUM7U0FDQUM7Ozs7YUFjRTkxQyxRQUZBKzFDLFNBQ0FDO1NBSUYvMUM7U0FDQWcyQztTQUNBQztTQUNBQztJQVlEO2NBNUZHcEIsUUFmQVAsU0FNQU0sVUFrRUYvMEMsUUFDQTYxQyxTQUNBQyxTQUNBQztJQTZCRCxXQUNLNTFDOzZCOzs7cUIsOEJBN0VGTCxRQUZBbTFDLFNBQ0FDO0lBd0ZIO2NBcEdHRixRQWZBUCxTQU1BTSxVQWtFRi8wQyxRQUNBNjFDLFNBQ0FDLFNBQ0FDO0lBcUNELFdBQ0szMUM7NkI7OztxQiw4QkE5REZvMUMsUUFSQUgsU0FFQUM7SUE4RUg7Y0E1R0dOLFFBZkFQLFNBTUFNLFVBa0VGLzBDLFFBQ0E2MUMsU0FDQUMsU0FDQUM7SUE2Q0QsV0FDSzExQzs2Qjs7O3FCLDhCQXJGRk4sUUFGQW8xQyxTQUNBQztJQWdHSDtjQXBIR0osUUFmQVAsU0FNQU0sVUFrRUYvMEMsUUFDQTYxQyxTQUNBQyxTQUNBQztJQXFERCxXQUNLejFDOzZCOzs7cUIsOEJBN0RGczFDLFFBWEFILFNBRUFDO0lDN0VKVztZQUdBQyx1QkFBdUJDO0lBTW5COzs7OztRQU5tQkE7O1FBRnZCaDJDOzs7Ozs7OztJQXlCRjthQXBCRTtldURyQkF1eUIsTXZEa0J1QnlqQjs7O2tCRm1MekIvSDtrQkFBQXpCO2tCQWdCQTZDO2tCQUFBTDtrQkFPSVE7a0JBQ0FDOzs7c0JFek1DaG1ELEtBcUJMLE9BckJLQSxPQXFCaUI7R0FBQTtZQU9wQndzRCxhQUFhQztJQUNmO0tBQXVCO0tBQVpDO0tBQVBDO0tBQ0FDO08rQjZPQW5pQjtnQzs7Uy9CL09XZ2lCO0tBR1hJO08rQnVOQTNpQjs2QjtTL0J4TkEwaUI7S0FFQTloQixrREFEQStoQjtLQUVBQztJK0J4QkE1a0I7c0IvQjBCK0I5cEM7T0FDdkIsWStCL0JSeUgsTy9COEIrQnpIO21CQUVULE9BUmZzdUQsY0FJUEk7V0FLU0M7T0FDQSxHa0N4RFhwaEIsVWxDa0RFbWhCO1FBQUFBLG9EQUtTQztPQUdHLG9EQUhIQTs7WUFJSUM7V0FBQUEsU0FDTyxPQWRiTixjQUlQSSxpQkFTYUU7O09BRUEsZ0RBTkpEO01BTXlDO01BWmxEamlCO0lBR0YsT0FORTZoQjtHQWlCQztZQUVITSx3QkFBNEJDLHNCQUFxQkM7SUFDcEMsSUFBWEwsV2tDeUJGdmpCLE1sQzFCaUQ0akI7SUFFaEQsZ0JBRENMLFVBRDBCSTtHQU94QjtZQXdDSkUsYUFBY2IsUUFBT0U7SUFDdkI7YUFwRUVELGFBbUVxQkM7c0JBRWxCWTtjQUNMO3VCQXBHRWYsdUJBaUdjQztnQ0FJWGU7d0JBRUwsSUFBSUosdUJBRkNJO3dCQUdFOzRCQXRETEwsaUJBK0NjVixRQU1aVyxzQkFKQ0c7eUJBTUg7b0NBTkdBOzs2QkE2QmlCMWpELGdCQVprQnFqRCxPQWpCbkNLO3lCQWlCK0MsWUFZOUIxakQsS0F6QmxCdWpEOzZCQWFvQ0Y7K0JBSUc1NkMsS0FKSDQ2QyxZQUc5Qk8sc0JBQ2lDbjdDOzsrQkFEakNtN0M7MEJBSUY7a0NBS2M1akQ7a0NBVFo0akQ7a0NBaEJOTDs7NkJBeUJvQ00sU0E3Qm5DSDt5QkE2QitDLFlBQTlCMWpELEtBekJsQnVqRDsrQkF5Qm9DTSxRQU9oQixjQWhDcEJOOzhCQTZCV3RDLE9BSnlCNEM7MEJBR1osZ0JBQ2I1QyxNQUpPamhEOzt3Q0FJUGloRCxjQTdCWHNDOzs7a0NBSkNHO3lCQVlHLGlCQVJKSDt3QkFpQ0s7dUJBQVk7YUFBQTtHQUFBO1lBRW5CTyxhQUFhbEIsUUFBT0U7SUFNbEIsZUFOV0Y7SUFRZjthQUxFO2V1RC9KQXpqQixNdkQ0SmF5akI7OztrQkZ1RWZuRztrQkFBQUg7a0JBS0FNO2tCQUFBRDtrQkFPSTRCO2tCQUNBMUI7OztzQkVsRkNrRTtjQU1MO3lCQUErQnNDO2lCQUMzQjtrQkFDSUo7b0IrQnlISm5pQjs7MEM7OEM7O3NCL0JuSWtCZ2lCO2tCQWFkaUI7b0IrQmlHSnhqQjswQztzQi9CcEdJMGlCO2tCQUlBakMsWWtDNUVOcGhCLE1sQ3NFNkJ5akIsU0FBQUE7aUJBTzNCO3dDQURJckMsWUFOdUJxQyxVQUt2QlU7aUJBRUo7Z0JBQ1M7Z0JBZFJoRDtjQU1MLE9BTktBO2FBZUE7R0FBQTtZQUVIaUQsK0JBQWtDcEIsUUFBUTdCO2FBRXhDa0Q7S0FLSTtNQUwwQng3QztNQUsxQixrQkFMMEJBLEtBRkVtNkM7S0F1QmxDO2NBbkJFO2dCdURuTEZ6akIsTXZEK0trQ3lqQjs7O21CRnNCcEMvSDttQkFBQXpCO21CQWdCQTZDO21CQUFBTDttQkFPSVE7bUJBQ0FDOzs7dUJFM0NHaG1EO2VBb0JMO2lDQUNVc29DO3lCQUFMLElBQVd1bEI7eUJBQ1osR0FEWUE7c0NBQUFBOzsrQkFHQ0M7MkJBQVEseUJBQVJBLEtBSFB4bEI7Ozt5QkFFZ0IsT0FGaEJBO3dCQUdzQzs7d0JBeEIzQ3RvQztjQXdCMkM7O0lBRWxELFNBQUkrdEQsaUJBQWlCQztLQUNuQjthQTlCa0N6QjtNQWtDNUI7OzRCQUxheUI7Ozs7Ozs7Ozs7OztLQXFCbkI7Y0FuQkU7Z0J1RDlNRmxsQixNdkQrS2tDeWpCOzs7bUJGc0JwQy9IO21CQUFBekI7bUJBZ0JBNkM7bUJBQUFMO21CQU9JUTttQkFDQUM7Ozt1QkVoQkdobUQ7ZUFvQkw7O3lCQUE2QixJQUFnQjBGLGlCQUFUME07eUJBQ2hDLE9rQ2hFRnM1QixrQmxDZ0VrQmhtQyxNQUFRLFdBRFEwTSxJQUNoQjFNLE1BQWtCLEdBRE9BO3dCQUNBO3dCQXJCeEMxRjtjQXFCd0M7SUFBQTtJQVcvQzs7OzBCQVArQlY7a0JBQUwsSUFBUThTLEtBQUg5UztrQkFHekI7MkJBeERGc3VELDRCQXFEMkJ0dUQ7b0NBRXBCMHVEOzRCQUNMO3FDQTdCRkQsaUJBNEJPQzs4Q0FDQUMsT0FDTCxXQUo0Qjc3QyxJQUd2QjY3QyxPQUNNOzJCQUFBO2lCQUFDO2lCQTNEMEJ2RDtzQkFzRHZDN2tELFFBUUwsT29DekRFb21DLFVwQ2lER3BtQyxRQVFrQjtHQUFBO1lBRXJCcW9ELGNBQWVDLFVBQW1Eem9EO0lBR3BFOztjQUE0QixJQUFlMG9ELHNCQUFUQztjQUMzQjs7eUJBQXlCLElBQVNuaEI7eUJBQVEsY0FBUkEsS0FKMkJ4bkM7d0JBSUs7d0JBRDlCMG9EOzRCQUFUQzs7YUFHcEI7YUFOR0Y7R0FNSDtZQUVaRyxLQUFPbHVDO0ksR0FBQUE7U0FBU0MsTUFBVEQsUUFBQW11QyxTQUFTbHVDOztTQUFUa3VDLHlCQUFrQixPQUFFO29CQUErQjlCO2NBRXhEK0Isa0JBQWtCOXNCLE9BQU0rc0I7TUFFMUI7T0FBSTdCO1MrQm9DRm5pQjtrQzs7Vy9CeEN3RGdpQjtPQU90REk7UytCWUYzaUI7K0I7Vy9CZkUwaUI7U0FGc0I2QixRQUFOL3NCO1dBTXBCdHBDLElBTm9Cc3BDOztRQU9SLHdDQURadHBDLFVBREl5MEQ7UUFFUSxXQURaejBEO1dBTjBCcTJELFNBTTFCcjJEO1lBQUFBOzs7O0tBRUk7Y0FFRnMyRCxvQkFBb0JodEIsT0FBTStzQjtNQUM1QjtlQXhHQWhCLHFCQTJGMERoQjt3QkFjckQvQjtnQkFDTDt5QkF2RkFpRCx1Q0FzRktqRDtrQ0FDQXlEOzBCQUNMLG1CQUpzQnpzQixxQkFBTStzQjswQkFLVjsyQkFBZEUsY21CL1BKeHNDOzJCbkJnUUlyaEIsU0FOd0IydEQsT0FBTi9zQjttQ0FPZGt0QixRQUFTQyxhQUFZQzsyQkFDM0IsSUFEZUMsZ0JBQUFGLGFBQVlHLFNBQUFGOzJCQUMzQjs0QkFBRyxvQkFEd0JFOzRCQUN4QixXQUFBOzRCQUNXOzZCQUFSNWpELFlBRnFCNGpELFFBM1A3QjNDOzZCQThQUXZoQjs7Ozs7O2dDQTdQUnYwQjtvQ0EwUGlCdzRDO29DQUVUM2pEOzs7Ozs7NEJtQnhQUmlFLEluQnlQUXk3QixLQUxKNmpCOzs2QkFFeUJNLFNBQUFELFNBRXJCNWpEOzZCQUZTOGpELGdCQUFBSCxnQkFFVDNqRDs2QkFGUzJqRCxnQkFBQUc7NkJBQVlGLFNBQUFDOzswQkFzQmlDOzBCQXRCdERMLFFBUGNsdEIsT0FNbEI1Z0M7MEJBMEJnQixJQUFoQnF1RCxnQm1CdE1KcDFELE9uQjJLSTQwRDttQ0E0QklTLFVBQVlodkMsS0FBYWhpQjsyQkFDL0IsR0FEa0JnaUI7Z0NBQVVDLE1BQVZELFFBQUFpdkMsVUFBVWh2Qzs7Z0NBQVZndkM7MkJBQ1gsY0FEV0E7NEJBQ2xCLE1BQUE7O29DQUNRQyxPQUFPcnhDLEtBQUk3a0I7NEJBQ2pCLElBRGE4a0IsUUFBQUQsS0FBSTRFLE1BQUF6cEI7NEJBQ2pCOzZCQUFHLFlBRGN5cEIsU0FDSCxPWS9QbEI5RSxJWjhQaUJHOzZCQUdMLFltQjNPWndFLFNuQnNPaUN0a0I7eUNBTWpCLE9ZbFFoQjJmLElaOFBpQkc7NkJBS0c7OEJBQVBxeEM7OEJBTFF6c0MsTUFBQUQ7OEJBQUoxRSxZQUtKb3hDLEtBTElyeEM7OEJBQUFBLFFBQUFDOzhCQUFJMEUsTUFBQUM7OzJCQUswQjtvQ0FFekN6cUIsRUFBRXl5Qzs0QkFDSjtxQ0FDRTt1Q3VEL1NOaEM7OzswQ3pEcU1GMGI7MENBQUF6QjswQ0FnQkE2QzswQ0FBQUw7MENBT0lROzBDQUNBQzt1Q0VnRk1sYjs7O3NDQUlKLElBSE8rakIsd0JBQXVCVztzQ0FJNUI7d0NBM0RDakIsZ0JBNENIWSxlbUJ0TUpwMUQsT25CMktJNDBEOytDQThDSWMsUUFBU1osYUFBWVc7dUNBQ3ZCO3dDQUNJNUM7MEMrQnpCUm5pQjs7Z0U7b0U7OzRDL0J4Q3dEZ2lCO3dDQW9FaERpRDswQytCakRSeGxCO2dFOzRDL0I4Q1EwaUI7d0NBSUFjOzBDK0JsRFJ4akI7Z0U7NEMvQjhDUTBpQjt1Q0FLSjt5REFBeUJud0QsT0FBTXV3RDtpREFBWDtrREFBMkJ0bkQsT0FBaEJzbkQ7a0RBQUc1NkMsS0FBSDQ2QztrREFDdkIyQyxVQVJHZCxjQU9jcHlEO2tEQUVqQnV1RCxTa0NqT2R6aEIsTWxDK05xRDdqQztrREFHdkNnbEQsUUFqRmR3RCxjQXVCS0MsVUF5RFNuRDtrREFFQUwsWWtDbk9kcGhCLE1sQytOcUN5akIsU0FBQUE7aURBS3BCOzZEQUpIMkMsYUFEMEJ2OUMsU0FGOUJzOUM7aURBU0U7OzJEQU5FQyxTQUVBakYsT0FDQUMsWUFKdUJxQzs7bURBRDNCVTtpREFRRTtnREFFWTtnREFoQks4QjtzQ0FnQkw7c0NBRXBCLE9BbEJJQyxRQVJHWixhQUF1Qlc7cUNBMEJKOzJCQUFBOzJCQUVqQixJQUFQSSxPQXBDSU4sVUFGVUQ7MkJBeUNsQjt1REFoQ0loM0QsR0E2QkF1M0Q7NkNBRUNBO3FDQUNMLGdCQURLQSxnQkF4Q0NSLGFBQXlCaHhEO29DQXlDc0I7MEJBQUE7MEJBRXZELE9BM0NRZ3hELGFBNUJKVDt5QkF1RWlCO2VBQUE7S0FBQTtLQUV2QjtNQUFBOzs7UUFDc0R6QjtRQUFyQks7UUFBbkJzQztPQXpGVnJCLGtCQXlGVXFCLG1CQUF3QzNDO09BRWxELE9BakZBd0Isb0JBK0U2Qm5CLHFCQUFxQkw7O1VBSWY0QyxtQ0FBckJDO01BQ2QsT0FwRkFyQjtlQW1GY3FCLHVCQUFxQkQsd0JBR3ZCLEVBQUE7O1lBRWRFLGVBQWdCekIsUUFBUWhDLFFBQU9FO0lBQ2pDO2FBek9FVyxhQXdPd0JiLFFBQU9FO3NCQUU1Qi93QjtjQUNMO2VBQUl1MEIsY0FEQ3YwQixRQWxRSGxsQjtlQW9RRTA1QztpQmtDN0xBeGtCOzRCbEMrTEs2aUI7b0JBQ2dDLFdBRGhDQSxRQUhMMEI7b0JBS0UsZ0JBQUlFO3FCQUFpQixPQUFPLFdBRnpCNUIsWUFITDBCLFlBS01FLGdCQUFzRDttQkFBQTttQkFSOUM1QjtjQVlsQjt1QkFEVSxXQS9HUkQsS0F3R0U0QixVQUpzQjNELFFBQU9FLE1BRTVCL3dCOzt3QkFVTCxPa0N4UkVrUTswQ2xDeVJLMmlCLFFBQVUsT0FBQSxXQUFWQSxjQUEyRCxHQWJoREE7dUJBY1Y7YUFBQTtHQUFBO0cwRHRYTztJQUFBOzs7Ozs7WUNjYjZCLG9CQUFrQjUxRCxHQUFFNEQ7SUFDdEIsSUFDaUJpeUQsZ0I1QklYeG9CLFk0Qk5jcnRDLElBRWhCODFELGdCNUJHRTFvQixZNEJMY3B0QztJQU1wQixtQkFKSTgxRCw2QkFBYUQ7SUFRUjtLQUFMRSxLNUJjQTFxRCxPNEJ4QmtCekg7S0FXbEJ1NEM7TzVCdVFBdk07NkI7ZTRCeFFBbW1CO0tBSUFmO081Qm9RQXBsQix1QztlNEJ4UUFtbUI7S0FPQUM7TzVCaVFBcG1COzZCO2U0QnhRQW1tQjtLQVVBRTtPQUNGOzs7OzJCOzs7U0FQRWpCO0lBU0k7Ozs7d0I7OztNQVRKQTtJQVVJOzs7O3dCOzs7TUFWSkE7SUFXSTs7aUM7TUFYSkE7SUFhRjs7OztlQWhCRTdZO21CQUdBNlksV0FNQWlCLHNCQUhBRDtHQVVtRTtZQUVyRUUsU0FBVTFsQixTQUFTenBDLE1BQUtsSjthQUV0QnV1QyxJQUFFdUIsSUFBSXdvQixLQUNDLElBQUxKLEs1QlJGMXFELE80Qk9NOHFELE1BRVIsT0FBQSxXQUp3QnQ0RCxHQUdwQms0RCxJQUNBO0lBRU4sZ0IsTzVCUElyb0IsVzRCR0F0QjtzQixPNUJ5UUFpRSxrQjRCeFNGdWxCO3dCLE81QjBURXJsQixLNEI3UmlCeHBDLE1BQVR5cEMsaUI1QndTVkM7STRCbFNGO0dBR2tDO0dDbkQzQjtZQUVMMmxCLFVBQVV2NEQ7SUFDWjthQURZQTtzQkFFUEE7Y0FDTCxPeEIwREUwekMsaUJ3QjFEa0JwRCxJQUFNLGtCQUFOQSxJQUFZLEdBRDNCdHdDO2FBQzhCO0dBQUE7WUFFakN3NEQsT0FBT3p5RCxHQUFJLE9BTFh3eUQsVTdCaURFdm9CLE02QjVDS2pxQyxJQUFrQztZQUV6QzB5RCxhQUFjei9DO0lBQ2hCLFNBQUkwL0MsSUFBSTdyRCxHQUFJLGFBQUpBLEdBQTJCO0lBQ25DLFNBQUk4ckQsUUFBUzM0RCxHQUFJLE9BQUpBLFdBQTRCO0lBQy9CLElBQU40NEQsZUFEQUQsU0FGWTMvQyxLQUlaNi9DLFlBREFEO0lBRUosU0FBSUUsV0FBU3Q0RDtLQUFJLHVDLGVBQUpBO0lBQWdEO0lBQ3pDLE9BTGhCazRELFNBR0FHLE9BQ0FDO0dBQzRDOzthQUc1Q0MsU0FBUzNFLEtBQUlGO0tBQ2YsSUFBZThFLFdBREE5RSxXQUNYK0UsWUFEVy9FO0tBRWYsU0FBSWdDLE9BQU83eUI7TUFDVCw2QkFGRTQxQixXQUNPNTFCO0tBQytDO0tBRTFELE81RGdWQXMwQixtQjREblZJekIsU0FEVzhDLFVBREo1RTtJQUsrQjtJQUd2QixJQUFBLHFCQUFWOEUsb0JBRFA5RTtJQUdBLGdCLE9EY0ZpRTtnQkNkK0NqRSxLQUZ0QzhFLFlBRXNDOUUsT0FDdEMsU0FBbUI7YUFJMUIrRTtLQUNGO2NBVEUvRTt1QkFVR0E7ZUFDTDs7a0I3QnVRRWhpQjsyQzs7b0I2QnhRR2dpQjtlQUNMLE83QmtQRXZpQjs0Qzs7YzZCalAyQztJQUFBO0lBSzNDLElBRkV1bkIsNkJBSUFDO2FBTEZDLGNBTUU5RTtLQUFKO01BQW1EK0U7TUFBckJDO01BR3hCQyxrQkFId0JELFdBQXFCRDtLQUk5QyxHdkRyQ0xwbUIsUXVEZ0NJa21CLGlCQUlFSSxtQkFKRko7S0FPVTtNQUFOemxEO1FBQU07Ozs0Qjs7O1VBTlY0Z0Q7bUJBT0t2bEI7TUFzQkw7O1VBN0IrQ3NxQixhQUFBQTtZQStCbEM3a0IsTUEvQmtDNmtCO1FBK0JuQixnQkFBZjdrQjtTQUNHO1VBQU5nbEIsMEJBREdobEI7VUFFUDs7O2VBQXFCO2dCQUFTNGQ7Z0JBQ3RCRSxnQ0FEc0JGO2dCQUV0QmplLFV0QjBGaEJJLFFzQjFGOEMsV3BDakZoRHZULGVvQzhFY3c0QjtlQUlBLGdCdEJxR1ova0IsVXNCdEdnQk4sU0FEQW1lO2NBRXFDO2NBN0I5Q3ZqQjtVQXNCRDBxQjs7OztXQUFBQSxTQXRCQzFxQjs7TUFSTG9xQixtQkFJRUksUUEwQkVFO01BV0osT0FYSUE7S0FXQTtTQWhDRSxJQUFBLGVBYk5QLFdBSzBCSTs7OztNQVdSO09BQVJ0cUI7T0FDQUM7T0FDQXNCLFE3QmxEWjFMLE02QmdEWW1LLE9BQ0FDO09BRk47O1dBaERScXBCLDRDQW1EYy9uQixRQVBONzhCO29CQUlLZ21EO1lBU0wsR0FuQnNCSjs7Y0FzQmJLLGNBdEJhTDtjQW1CbEJ2cUI7OzttQkFJMkIsSUFBY29qQjttQkFDbkM7cUNBQTBCL3dELEdBQUssWUFBTEEsR0FGM0J1NEQsYUFFMEQsR0FEdEJ4SDtrQkFDd0I7a0JBZGhFdUg7O2lCQVNEM3FCLE9BVEMycUI7WUFnQkwsTUEvQkpSLFdBSzBCSSxXQW1CbEJ2cUI7WUFPSixPQVBJQTtXQVFBOzs7S0FFUjtJQVdJO2FBRU42cUIsU0FBbUIvekQ7S0FDckIsT0FEcUJBOztZQUdQdkYsSUFIT3VGO1FBS2pCO2lCQW5FRnF1RDswQkFrRU9BO2tCQUNMOzJCQTFFRjJFLFNBeUVPM0UsS2hEdEVUaHZDLEdnRHFFYzVrQjtvQ0FHTG1IOzRCQUNMLE94Qi9CSityQyxpQndCK0J3QnBELElBQU0sa0JBQU5BLElBQVksR0FEM0Izb0M7MkJBQ2dDO2lCQUFBOztRQUdyQztpQkFoRUZ3eEQ7MEJBK0RPM0U7a0JBQ0w7MkJBMUZKZ0UsaUNBeUZTaEU7b0NBQ0EvaEI7NEJBQ0wsOEJBQWtCMXlDLEdBQUssT0FBTEEsS0FBMkIsR0FEeEMweUM7MkJBQzhEO2lCQUFBOztRQTRCbkU7aUJBN0ZGMG1COzBCQTRGTzNFO2tCQUNMO21CQUFJOEM7cUJBQVk7Ozt5Qzs7O3VCQURYOUM7bUJBRUR0bEI7bUJBQ0FDO21CQUNBc0IsUTdCekhOMUwsTTZCdUhNbUssT0FDQUM7a0JBTUo7MkJBL0hKcXBCO2tFQTBIUS9uQixRQUhBNm1CO29DQU9Dcm9COzRCQUNMOzs7a0RBRXdDOW9DLEdBQUssT0FqSWpEcXlELGFBaUk0Q3J5RCxHQVhuQ3F1RCxRQVdnRTtpREFIaEV2bEI7OENBRUFrb0I7b0RBTWdCMzJEO3VDQUNaOytELE8xQjNCYmd6QywwQjBCMEJ5Qmh6QztzQ0FDMkM7c0NBRjlEO3VDQURFdTVEO3dELE94Qm1ITnRtQjsyQ0E5REZHLFV3QnpEU3VqQjtzQ0FTTCxPQUxJNEM7cUNBS0M7MkJBQUE7aUJBQUE7O1lBN0NjZCxZQVpGbHpEO1FBY2pCO2lCQXBFRm96RDswQkFtRU8zRTtrQkFDTDttQkFBSThDO3FCQUFZOzs7eUM7Ozt1QkFEWDlDO21CQUVEdGxCO21CQUNBQzttQkFDQXNCLFE3QmhHTjFMLE02QjhGTW1LLE9BQ0FDO2tCQU1KOzJCQXRHSnFwQjtrRUFpR1EvbkIsUUFIQTZtQjtvQ0FPQ3JvQjs0QkFDTDs7O2tEQUV3QzlvQyxHQUFLLE9BeEdqRHF5RCxhQXdHNENyeUQsR0FYbkNxdUQsUUFXZ0U7aURBSGhFdmxCOzhDQUVBa29COzt1Q0FPc0I7NENBQ1h4QyxpQkFBNEJxRixjQUE1QnJGO3dDQUNBLFlBRDRCcUYsYUFuQnpCZixZQXFCTixXQUZHdEU7O3VDQUdZO3NDQUFLO3NDQUoxQixvQjtzQ0FGTDt1Q0FERW9GO3dELE94QjRJTnRtQjsyQ0E5REZHLFV3QmxGU3VqQjtzQ0FhTCxPQVRJNEM7cUNBU0M7MkJBQUE7aUJBQUE7O1FBdUJNLElBRERFLFVBMURPbDBELE1BMkRic3FELE9SL0hSek47UVFpSUk7aUJBbkhGdVc7MEJBa0hPM0U7a0JBQ0w7MkJBN0dGOEUsY0E0R085RSxPQUZLeUY7b0NBR0xockI7NEJBQ0w7NkJBQUlpckIsYUFEQ2pyQjs2QkFFRGtyQixRSGpKTjVKLFFHZ0pNMkosWUFKTUQ7NEJBTVYsV0FMSTVKLE1BRE00SixTQUtORSxVQURBRDsyQkFFMEQ7aUJBQUE7O1lBQ3JERSxVQWpFUXIwRCxNQWlFZGtCLE9BakVjbEI7UUFxRWpCO2lCQTNIRm96RDswQkEwSE8zRTtrQkFDTDsyQkFySEY4RSxjQW9ITzlFLE9BSEZ2dEQ7b0NBSUVnb0M7NEJBQ0w7cUNBcEpKd3BCOztrREFzSmdDcjBEOzBDQUN0QjsyQ0FFYzs0Q0FEUmt6RCxVQUZnQmx6RCxRQVB6QjZDOzRDQVVTb3pELFVIdEpkN0osTUc0SUt2cEQsU0FTU3F3RDs0Q0FHQWhtRCx1QkFSUDI5QixNQU1Pb3JCLGFBQUFBOzRDQUlKOztnRDdCbkhWcnFCLFk2QmlIYzErQixLQVRQa2pEO3lEQVdRaG5EO2lEQUNMLFNBREtBO3NEQUdHeUQsTUFISHpEO2tEQUlELG9CQU5BOEQsU0FLSUw7a0RBQ0o7OzZEQUpDekQ7NkRBRVE7cURBS0ZsTTtpREFBTSxXQUFOQTtnREFBWTsyQ0FQdkI7O3NEQVFRO3lDQUFlO3lDQXRCdEI4NEQ7OENBTUpFLFNBbUJMLFdBbkJLQSxTQW1CSzsyQkFBQTtpQkFBQTs7SUFBQTtJQWhLQyxtQkFzRWJSOzs4QkE2RmU7R3pEMFhqQnQxQzs7RSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gQXJyYXlcblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9zdWIgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9zdWIgKGEsIGksIGxlbikge1xuICB2YXIgYTIgPSBuZXcgQXJyYXkobGVuKzEpO1xuICBhMlswXT0wO1xuICBmb3IodmFyIGkyID0gMSwgaTE9IGkrMTsgaTIgPD0gbGVuOyBpMisrLGkxKysgKXtcbiAgICBhMltpMl09YVtpMV07XG4gIH1cbiAgcmV0dXJuIGEyO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2FwcGVuZCBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X2FwcGVuZChhMSwgYTIpIHtcbiAgdmFyIGwxID0gYTEubGVuZ3RoLCBsMiA9IGEyLmxlbmd0aDtcbiAgdmFyIGwgPSBsMStsMi0xXG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBhWzBdID0gMDtcbiAgdmFyIGkgPSAxLGogPSAxO1xuICBmb3IoO2k8bDE7aSsrKSBhW2ldPWExW2ldO1xuICBmb3IoO2k8bDtpKyssaisrKSBhW2ldPWEyW2pdO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9jb25jYXQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9jb25jYXQobCkge1xuICB2YXIgYSA9IFswXTtcbiAgd2hpbGUgKGwgIT09IDApIHtcbiAgICB2YXIgYiA9IGxbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSBhLnB1c2goYltpXSk7XG4gICAgbCA9IGxbMl07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYmxpdFxuZnVuY3Rpb24gY2FtbF9hcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgaWYgKGkyIDw9IGkxKSB7XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gbGVuOyBqKyspIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGogPSBsZW47IGogPj0gMTsgai0tKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRhcnJheV9ibGl0XG5mdW5jdGlvbiBjYW1sX2Zsb2F0YXJyYXlfYmxpdChhMSwgaTEsIGEyLCBpMiwgbGVuKSB7XG4gIGlmIChpMiA8PSBpMSkge1xuICAgIGZvciAodmFyIGogPSAxOyBqIDw9IGxlbjsgaisrKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBqID0gbGVuOyBqID49IDE7IGotLSkgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH07XG4gIHJldHVybiAwO1xufVxuXG4vLy8vLy8vLy8vLy8vIFBlcnZhc2l2ZVxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9zZXQgKG11dGFibGUsIGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9hcnJheV9zZXQgKGFycmF5LCBpbmRleCwgbmV3dmFsKSB7XG4gIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgYXJyYXlbaW5kZXgrMV09bmV3dmFsOyByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9nZXQgbXV0YWJsZSAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2FycmF5X2dldCAoYXJyYXksIGluZGV4KSB7XG4gIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFycmF5W2luZGV4KzFdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2ZpbGxcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfZmlsbChhcnJheSwgb2ZzLCBsZW4sIHYpe1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspe1xuICAgIGFycmF5W29mcytpKzFdID0gdjtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jaGVja19ib3VuZCAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2NoZWNrX2JvdW5kIChhcnJheSwgaW5kZXgpIHtcbiAgaWYgKGluZGV4ID4+PiAwID49IGFycmF5Lmxlbmd0aCAtIDEpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFycmF5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfdmVjdCBjb25zdCAoY29uc3QsIG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX21ha2VfdmVjdCAobGVuLCBpbml0KSB7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0wO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gaW5pdDtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV9mbG9hdF92ZWN0IGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfbWFrZV9mbG9hdF92ZWN0KGxlbil7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0yNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYlxufVxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2NyZWF0ZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlKGxlbil7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0yNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYlxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTQgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8gQW4gT0NhbWwgc3RyaW5nIGlzIGFuIG9iamVjdCB3aXRoIHRocmVlIGZpZWxkczpcbi8vIC0gdGFnICd0J1xuLy8gLSBsZW5ndGggJ2wnXG4vLyAtIGNvbnRlbnRzICdjJ1xuLy9cbi8vIFRoZSBjb250ZW50cyBvZiB0aGUgc3RyaW5nIGNhbiBiZSBlaXRoZXIgYSBKYXZhU2NyaXB0IGFycmF5IG9yXG4vLyBhIEphdmFTY3JpcHQgc3RyaW5nLiBUaGUgbGVuZ3RoIG9mIHRoaXMgc3RyaW5nIGNhbiBiZSBsZXNzIHRoYW4gdGhlXG4vLyBsZW5ndGggb2YgdGhlIE9DYW1sIHN0cmluZy4gSW4gdGhpcyBjYXNlLCByZW1haW5pbmcgYnl0ZXMgYXJlXG4vLyBhc3N1bWVkIHRvIGJlIHplcm9lcy4gQXJyYXlzIGFyZSBtdXRhYmxlIGJ1dCBjb25zdW1lcyBtb3JlIG1lbW9yeVxuLy8gdGhhbiBzdHJpbmdzLiBBIGNvbW1vbiBwYXR0ZXJuIGlzIHRvIHN0YXJ0IGZyb20gYW4gZW1wdHkgc3RyaW5nIGFuZFxuLy8gcHJvZ3Jlc3NpdmVseSBmaWxsIGl0IGZyb20gdGhlIHN0YXJ0LiBQYXJ0aWFsIHN0cmluZ3MgbWFrZXMgaXRcbi8vIHBvc3NpYmxlIHRvIGltcGxlbWVudCB0aGlzIGVmZmljaWVudGx5LlxuLy9cbi8vIFdoZW4gY29udmVydGluZyB0byBhbmQgZnJvbSBVVEYtMTYsIHdlIGtlZXAgdHJhY2sgb2Ygd2hldGhlciB0aGVcbi8vIHN0cmluZyBpcyBjb21wb3NlZCBvbmx5IG9mIEFTQ0lJIGNoYXJhY3RlcnMgKGluIHdoaWNoIGNhc2UsIG5vXG4vLyBjb252ZXJzaW9uIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCkgb3Igbm90LlxuLy9cbi8vIFRoZSBzdHJpbmcgdGFnIGNhbiB0aHVzIHRha2UgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4vLyAgIGZ1bGwgc3RyaW5nICAgICBCWVRFIHwgVU5LTk9XTjogICAgICAwXG4vLyAgICAgICAgICAgICAgICAgICBCWVRFIHwgQVNDSUk6ICAgICAgICA5XG4vLyAgICAgICAgICAgICAgICAgICBCWVRFIHwgTk9UX0FTQ0lJOiAgICA4XG4vLyAgIHN0cmluZyBwcmVmaXggICBQQVJUSUFMOiAgICAgICAgICAgICAyXG4vLyAgIGFycmF5ICAgICAgICAgICBBUlJBWTogICAgICAgICAgICAgICA0XG4vL1xuLy8gT25lIGNhbiB1c2UgYml0IG1hc2tpbmcgdG8gZGlzY3JpbWluYXRlIHRoZXNlIGRpZmZlcmVudCBjYXNlczpcbi8vICAga25vd25fZW5jb2RpbmcoeCkgPSB4Jjhcbi8vICAgaXNfYXNjaWkoeCkgPSAgICAgICB4JjFcbi8vICAga2luZCh4KSA9ICAgICAgICAgICB4JjZcblxuLy9Qcm92aWRlczogY2FtbF9zdHJfcmVwZWF0XG5mdW5jdGlvbiBjYW1sX3N0cl9yZXBlYXQobiwgcykge1xuICBpZihuID09IDApIHJldHVybiBcIlwiO1xuICBpZiAocy5yZXBlYXQpIHtyZXR1cm4gcy5yZXBlYXQobik7fSAvLyBFQ01Bc2NyaXB0IDYgYW5kIEZpcmVmb3ggMjQrXG4gIHZhciByID0gXCJcIiwgbCA9IDA7XG4gIGZvcig7Oykge1xuICAgIGlmIChuICYgMSkgciArPSBzO1xuICAgIG4gPj49IDE7XG4gICAgaWYgKG4gPT0gMCkgcmV0dXJuIHI7XG4gICAgcyArPSBzO1xuICAgIGwrKztcbiAgICBpZiAobCA9PSA5KSB7XG4gICAgICBzLnNsaWNlKDAsMSk7IC8vIGZsYXR0ZW4gdGhlIHN0cmluZ1xuICAgICAgLy8gdGhlbiwgdGhlIGZsYXR0ZW5pbmcgb2YgdGhlIHdob2xlIHN0cmluZyB3aWxsIGJlIGZhc3RlcixcbiAgICAgIC8vIGFzIGl0IHdpbGwgYmUgY29tcG9zZWQgb2YgbGFyZ2VyIHBpZWNlc1xuICAgIH1cbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbi8vV2Vha2RlZlxuLy8gUHJlIEVDTUFTY3JpcHQgNSwgW2FwcGx5XSB3b3VsZCBub3Qgc3VwcG9ydCBhcnJheS1saWtlIG9iamVjdC5cbi8vIEluIHN1Y2ggc2V0dXAsIFR5cGVkX2FycmF5IHdvdWxkIGJlIGltcGxlbWVudGVkIGFzIHBvbHlmaWxsLCBhbmQgW2YuYXBwbHldIHdvdWxkXG4vLyBmYWlsIGhlcmUuIE1hcmsgdGhlIHByaW1pdGl2ZSBhcyBXZWFrZGVmLCBzbyB0aGF0IHBlb3BsZSBjYW4gb3ZlcnJpZGUgaXQgZWFzaWx5LlxuZnVuY3Rpb24gY2FtbF9zdWJhcnJheV90b19qc2J5dGVzIChhLCBpLCBsZW4pIHtcbiAgdmFyIGYgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuICBpZiAoaSA9PSAwICYmIGxlbiA8PSA0MDk2ICYmIGxlbiA9PSBhLmxlbmd0aCkgcmV0dXJuIGYuYXBwbHkgKG51bGwsIGEpO1xuICB2YXIgcyA9IFwiXCI7XG4gIGZvciAoOyAwIDwgbGVuOyBpICs9IDEwMjQsbGVuLT0xMDI0KVxuICAgIHMgKz0gZi5hcHBseSAobnVsbCwgYS5zbGljZShpLGkgKyBNYXRoLm1pbihsZW4sIDEwMjQpKSk7XG4gIHJldHVybiBzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3V0Zjhfb2ZfdXRmMTZcbmZ1bmN0aW9uIGNhbWxfdXRmOF9vZl91dGYxNihzKSB7XG4gIGZvciAodmFyIGIgPSBcIlwiLCB0ID0gYiwgYywgZCwgaSA9IDAsIGwgPSBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGMgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IChqIDwgbCkgJiYgKGMgPSBzLmNoYXJDb2RlQXQoaikpIDwgMHg4MDsgaisrKTtcbiAgICAgIGlmIChqIC0gaSA+IDUxMikgeyB0LnN1YnN0cigwLCAxKTsgYiArPSB0OyB0ID0gXCJcIjsgYiArPSBzLnNsaWNlKGksIGopIH1cbiAgICAgIGVsc2UgdCArPSBzLnNsaWNlKGksIGopO1xuICAgICAgaWYgKGogPT0gbCkgYnJlYWs7XG4gICAgICBpID0gajtcbiAgICB9XG4gICAgaWYgKGMgPCAweDgwMCkge1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4YzAgfCAoYyA+PiA2KSk7XG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHg4MCB8IChjICYgMHgzZikpO1xuICAgIH0gZWxzZSBpZiAoYyA8IDB4ZDgwMCB8fCBjID49IDB4ZGZmZikge1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZTAgfCAoYyA+PiAxMiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8ICgoYyA+PiA2KSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoYyAmIDB4M2YpKTtcbiAgICB9IGVsc2UgaWYgKGMgPj0gMHhkYmZmIHx8IGkgKyAxID09IGwgfHxcbiAgICAgICAgICAgICAgIChkID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgZCA+IDB4ZGZmZikge1xuICAgICAgLy8gVW5tYXRjaGVkIHN1cnJvZ2F0ZSBwYWlyLCByZXBsYWNlZCBieSBcXHVmZmZkIChyZXBsYWNlbWVudCBjaGFyYWN0ZXIpXG4gICAgICB0ICs9IFwiXFx4ZWZcXHhiZlxceGJkXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGMgPSAoYyA8PCAxMCkgKyBkIC0gMHgzNWZkYzAwO1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZjAgfCAoYyA+PiAxOCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8ICgoYyA+PiAxMikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKChjID4+IDYpICYgMHgzZiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8IChjICYgMHgzZikpO1xuICAgIH1cbiAgICBpZiAodC5sZW5ndGggPiAxMDI0KSB7dC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7fVxuICB9XG4gIHJldHVybiBiK3Q7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdXRmMTZfb2ZfdXRmOFxuZnVuY3Rpb24gY2FtbF91dGYxNl9vZl91dGY4KHMpIHtcbiAgZm9yICh2YXIgYiA9IFwiXCIsIHQgPSBcIlwiLCBjLCBjMSwgYzIsIHYsIGkgPSAwLCBsID0gcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjMSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoYzEgPCAweDgwKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IChqIDwgbCkgJiYgKGMxID0gcy5jaGFyQ29kZUF0KGopKSA8IDB4ODA7IGorKyk7XG4gICAgICBpZiAoaiAtIGkgPiA1MTIpIHsgdC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7IGIgKz0gcy5zbGljZShpLCBqKSB9XG4gICAgICBlbHNlIHQgKz0gcy5zbGljZShpLCBqKTtcbiAgICAgIGlmIChqID09IGwpIGJyZWFrO1xuICAgICAgaSA9IGo7XG4gICAgfVxuICAgIHYgPSAxO1xuICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpKSB7XG4gICAgICBjID0gYzIgKyAoYzEgPDwgNik7XG4gICAgICBpZiAoYzEgPCAweGUwKSB7XG4gICAgICAgIHYgPSBjIC0gMHgzMDgwO1xuICAgICAgICBpZiAodiA8IDB4ODApIHYgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdiA9IDI7XG4gICAgICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpKSB7XG4gICAgICAgICAgYyA9IGMyICsgKGMgPDwgNik7XG4gICAgICAgICAgaWYgKGMxIDwgMHhmMCkge1xuICAgICAgICAgICAgdiA9IGMgLSAweGUyMDgwO1xuICAgICAgICAgICAgaWYgKCh2IDwgMHg4MDApIHx8ICgodiA+PSAweGQ3ZmYpICYmICh2IDwgMHhlMDAwKSkpIHYgPSAyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2ID0gMztcbiAgICAgICAgICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpICYmXG4gICAgICAgICAgICAgICAgKGMxIDwgMHhmNSkpIHtcbiAgICAgICAgICAgICAgdiA9IGMyIC0gMHgzYzgyMDgwICsgKGMgPDwgNik7XG4gICAgICAgICAgICAgIGlmICh2IDwgMHgxMDAwMCB8fCB2ID4gMHgxMGZmZmYpIHYgPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodiA8IDQpIHsgLy8gSW52YWxpZCBzZXF1ZW5jZVxuICAgICAgaSAtPSB2O1xuICAgICAgdCArPSBcIlxcdWZmZmRcIjtcbiAgICB9IGVsc2UgaWYgKHYgPiAweGZmZmYpXG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhkN2MwICsgKHYgPj4gMTApLCAweGRjMDAgKyAodiAmIDB4M0ZGKSlcbiAgICBlbHNlXG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodik7XG4gICAgaWYgKHQubGVuZ3RoID4gMTAyNCkge3Quc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiO31cbiAgfVxuICByZXR1cm4gYit0O1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX2lzX2FzY2lpXG5mdW5jdGlvbiBqc29vX2lzX2FzY2lpIChzKSB7XG4gIC8vIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gZ2V0cyBiZXR0ZXIgYXQgYXJvdW5kIHRoaXMgcG9pbnQgZm9yIGFsbCBicm93c2Vyc1xuICBpZiAocy5sZW5ndGggPCAyNCkge1xuICAgIC8vIFNwaWRlcm1vbmtleSBnZXRzIG11Y2ggc2xvd2VyIHdoZW4gcy5sZW5ndGggPj0gMjQgKG9uIDY0IGJpdCBhcmNocylcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIGlmIChzLmNoYXJDb2RlQXQoaSkgPiAxMjcpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlXG4gICAgcmV0dXJuICEvW15cXHgwMC1cXHg3Zl0vLnRlc3Qocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpIHtcbiAgc3dpdGNoIChzLnQgJiA2KSB7XG4gIGRlZmF1bHQ6IC8qIFBBUlRJQUwgKi9cbiAgICBpZiAoaSA+PSBzLmMubGVuZ3RoKSByZXR1cm4gMDtcbiAgY2FzZSAwOiAvKiBCWVRFUyAqL1xuICAgIHJldHVybiBzLmMuY2hhckNvZGVBdChpKTtcbiAgY2FzZSA0OiAvKiBBUlJBWSAqL1xuICAgIHJldHVybiBzLmNbaV1cbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpLCBjKSB7XG4gIC8vIFRoZSBPQ2FtbCBjb21waWxlciB1c2VzIENoYXIudW5zYWZlX2NociBvbiBpbnRlZ2VycyBsYXJnZXIgdGhhbiAyNTUhXG4gIGMgJj0gMHhmZjtcbiAgaWYgKHMudCAhPSA0IC8qIEFSUkFZICovKSB7XG4gICAgaWYgKGkgPT0gcy5jLmxlbmd0aCkge1xuICAgICAgcy5jICs9IFN0cmluZy5mcm9tQ2hhckNvZGUgKGMpO1xuICAgICAgaWYgKGkgKyAxID09IHMubCkgcy50ID0gMDsgLypCWVRFUyB8IFVOS09XTiovXG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5IChzKTtcbiAgfVxuICBzLmNbaV0gPSBjO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcImluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0IChzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0MTYocyxpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDEpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMSk7XG4gIHJldHVybiAoYjIgPDwgOCB8IGIxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDE2KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAxKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDEpO1xuICByZXR1cm4gKGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldDMyXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQzMihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gMykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKSxcbiAgICAgIGIzID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDIpLFxuICAgICAgYjQgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMyk7XG4gIHJldHVybiAoYjQgPDwgMjQgfCBiMyA8PCAxNiB8IGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQzMihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gMykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKSxcbiAgICAgIGIzID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgMiksXG4gICAgICBiNCA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDMpO1xuICByZXR1cm4gKGI0IDw8IDI0IHwgYjMgPDwgMTYgfCBiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0NjQocyxpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDcpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBhID0gbmV3IEFycmF5KDgpO1xuICBmb3IodmFyIGogPSAwOyBqIDwgODsgaisrKXtcbiAgICBhWzcgLSBqXSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyBqKTtcbiAgfVxuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDY0KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSA3KSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBhID0gbmV3IEFycmF5KDgpO1xuICBmb3IodmFyIGogPSAwOyBqIDwgODsgaisrKXtcbiAgICBhWzcgLSBqXSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIGopO1xuICB9XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldCAocywgaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQgKHMsIGksIGMpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0IChzLCBpLCBjKSB7XG4gIGlmIChpID4+PiAwID49IHMubCkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQgKHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MTYocyxpLGkxNil7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDEpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIyID0gMHhGRiAmIGkxNiA+PiA4LFxuICAgICAgYjEgPSAweEZGICYgaTE2O1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAwLCBiMSk7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDEsIGIyKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MTYocyxpLGkxNil7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXQxNlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfc2V0MTZcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDE2KHMsaSxpMTYpe1xuICByZXR1cm4gY2FtbF9ieXRlc19zZXQxNihzLGksaTE2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldDMyKHMsaSxpMzIpe1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAzKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiNCA9IDB4RkYgJiBpMzIgPj4gMjQsXG4gICAgICBiMyA9IDB4RkYgJiBpMzIgPj4gMTYsXG4gICAgICBiMiA9IDB4RkYgJiBpMzIgPj4gOCxcbiAgICAgIGIxID0gMHhGRiAmIGkzMjtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMCwgYjEpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAxLCBiMik7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDIsIGIzKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMywgYjQpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQzMihzLGksaTMyKXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldDMyXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19zZXQzMlxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MzIocyxpLGkzMil7XG4gIHJldHVybiBjYW1sX2J5dGVzX3NldDMyKHMsaSxpMzIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0NjQocyxpLGk2NCl7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDcpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGEgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGk2NCk7XG4gIGZvcih2YXIgaiA9IDA7IGogPCA4OyBqKyspIHtcbiAgICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyA3IC0gaiwgYVtqXSk7XG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0NjQocyxpLGk2NCl7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXQ2NFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfc2V0NjRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDY0KHMsaSxpNjQpe1xuICByZXR1cm4gY2FtbF9ieXRlc19zZXQ2NChzLGksaTY0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQgKHMsIGksIGMpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0Zjhfb2ZfdXRmMTYsIE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmcgKHMpIHtcbiAgdmFyIHRhZyA9IDkgLyogQllURVMgfCBBU0NJSSAqLztcbiAgaWYgKCFqc29vX2lzX2FzY2lpKHMpKVxuICAgIHRhZyA9IDggLyogQllURVMgfCBOT1RfQVNDSUkgKi8sIHMgPSBjYW1sX3V0Zjhfb2ZfdXRmMTYocyk7XG4gIHJldHVybiBuZXcgTWxCeXRlcyh0YWcsIHMsIHMubGVuZ3RoKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBNbEJ5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzLCBqc29vX2lzX2FzY2lpLCBjYW1sX3V0ZjE2X29mX3V0ZjhcbmZ1bmN0aW9uIE1sQnl0ZXMgKHRhZywgY29udGVudHMsIGxlbmd0aCkge1xuICB0aGlzLnQ9dGFnOyB0aGlzLmM9Y29udGVudHM7IHRoaXMubD1sZW5ndGg7XG59XG5NbEJ5dGVzLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCl7XG4gIHN3aXRjaCAodGhpcy50KSB7XG4gIGNhc2UgOTogLypCWVRFUyB8IEFTQ0lJKi9cbiAgICByZXR1cm4gdGhpcy5jO1xuICBkZWZhdWx0OlxuICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXModGhpcyk7XG4gIGNhc2UgMDogLypCWVRFUyB8IFVOS09XTiovXG4gICAgaWYgKGpzb29faXNfYXNjaWkodGhpcy5jKSkge1xuICAgICAgdGhpcy50ID0gOTsgLypCWVRFUyB8IEFTQ0lJKi9cbiAgICAgIHJldHVybiB0aGlzLmM7XG4gICAgfVxuICAgIHRoaXMudCA9IDg7IC8qQllURVMgfCBOT1RfQVNDSUkqL1xuICBjYXNlIDg6IC8qQllURVMgfCBOT1RfQVNDSUkqL1xuICAgIHJldHVybiB0aGlzLmM7XG4gIH1cbn07XG5NbEJ5dGVzLnByb3RvdHlwZS50b1V0ZjE2ID0gZnVuY3Rpb24gKCl7XG4gIHZhciByID0gdGhpcy50b1N0cmluZygpO1xuICBpZih0aGlzLnQgPT0gOSkgcmV0dXJuIHJcbiAgcmV0dXJuIGNhbWxfdXRmMTZfb2ZfdXRmOChyKTtcbn1cbk1sQnl0ZXMucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gKCl7XG4gIHZhciBjb250ZW50ID0gdGhpcy50ID09IDQgPyB0aGlzLmMuc2xpY2UoKSA6IHRoaXMuYztcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKHRoaXMudCxjb250ZW50LHRoaXMubCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3RyX3JlcGVhdCwgY2FtbF9zdWJhcnJheV90b19qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzIChzKSB7XG4gIC8qIEFzc3VtZXMgbm90IEJZVEVTICovXG4gIGlmIChzLnQgPT0gMiAvKiBQQVJUSUFMICovKVxuICAgIHMuYyArPSBjYW1sX3N0cl9yZXBlYXQocy5sIC0gcy5jLmxlbmd0aCwgJ1xcMCcpXG4gIGVsc2VcbiAgICBzLmMgPSBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMgKHMuYywgMCwgcy5jLmxlbmd0aCk7XG4gIHMudCA9IDA7IC8qQllURVMgfCBVTktPV04qL1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheSAocykge1xuICAvKiBBc3N1bWVzIG5vdCBBUlJBWSAqL1xuICB2YXIgYSA9IG5ldyBVaW50OEFycmF5KHMubCk7XG4gIHZhciBiID0gcy5jLCBsID0gYi5sZW5ndGgsIGkgPSAwO1xuICBmb3IgKDsgaSA8IGw7IGkrKykgYVtpXSA9IGIuY2hhckNvZGVBdChpKTtcbiAgZm9yIChsID0gcy5sOyBpIDwgbDsgaSsrKSBhW2ldID0gMDtcbiAgcy5jID0gYTtcbiAgcy50ID0gNDsgLyogQVJSQVkgKi9cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzIChzKSB7XG4gIGlmIChzLnQgIT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICByZXR1cm4gcy5jO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuZnVuY3Rpb24gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcgKHMpIHtcbiAgdmFyIGwgPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIHZhciBhID0gbmV3IFVpbnQ4QXJyYXkobCk7XG4gIHZhciBpID0gMDtcbiAgZm9yICg7IGkgPCBsOyBpKyspIGFbaV0gPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsaSk7XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9jcmVhdGVfc3RyaW5nKGxlbikge1xuICBpZihsZW4gPCAwKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHJpbmcuY3JlYXRlXCIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMobGVuPzI6OSxcIlwiLGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX3N0cmluZyhsZW4pIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyaW5nLmNyZWF0ZVwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pIHtcbiAgaWYgKGxlbiA8IDApIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJ5dGVzLmNyZWF0ZVwiKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKGxlbj8yOjksXCJcIixsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9zdWJhcnJheV90b19qc2J5dGVzLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9hcnJheSAoYSkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMoYSwwLGEubGVuZ3RoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfYXJyYXkgKGEpIHtcbiAgaWYoISAoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgYSA9IG5ldyBVaW50OEFycmF5KGEpO1xuICB9XG4gIHJldHVybiBuZXcgTWxCeXRlcyg0LGEsYS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2NvbXBhcmUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19jb21wYXJlKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPCBzMi5jKT8tMTooczEuYyA+IHMyLmMpPzE6MDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2VxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKSB7XG4gIGlmKHMxID09PSBzMikgcmV0dXJuIDE7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA9PSBzMi5jKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ub3RlcXVhbChzMSwgczIpIHsgcmV0dXJuIDEtY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfZXF1YWxcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbm90ZXF1YWwoczEsIHMyKSB7IHJldHVybiAxLWNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbCBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgKHMxLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgKHMyLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIChzMS5jIDw9IHMyLmMpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19sZXNzdGhhbiBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2xlc3N0aGFuKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPCBzMi5jKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dyZWF0ZXJlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ncmVhdGVyZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczIsczEpO1xufVxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ncmVhdGVyZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc2VxdWFsXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dyZWF0ZXJlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMyLHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ3JlYXRlcnRoYW5cbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ncmVhdGVydGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX2xlc3N0aGFuKHMyLCBzMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ3JlYXRlcnRoYW5cbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc3RoYW5cbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ3JlYXRlcnRoYW4oczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3N0aGFuKHMyLCBzMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmlsbF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9zdHJfcmVwZWF0LCBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbi8vQWxpYXM6IGNhbWxfZmlsbF9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZmlsbF9ieXRlcyhzLCBpLCBsLCBjKSB7XG4gIGlmIChsID4gMCkge1xuICAgIGlmIChpID09IDAgJiYgKGwgPj0gcy5sIHx8IChzLnQgPT0gMiAvKiBQQVJUSUFMICovICYmIGwgPj0gcy5jLmxlbmd0aCkpKSB7XG4gICAgICBpZiAoYyA9PSAwKSB7XG4gICAgICAgIHMuYyA9IFwiXCI7XG4gICAgICAgIHMudCA9IDI7IC8qIFBBUlRJQUwgKi9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMuYyA9IGNhbWxfc3RyX3JlcGVhdCAobCwgU3RyaW5nLmZyb21DaGFyQ29kZShjKSk7XG4gICAgICAgIHMudCA9IChsID09IHMubCk/MCAvKiBCWVRFUyB8IFVOS09XTiAqLyA6MjsgLyogUEFSVElBTCAqL1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocy50ICE9IDQgLyogQVJSQVkgKi8pIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheShzKTtcbiAgICAgIGZvciAobCArPSBpOyBpIDwgbDsgaSsrKSBzLmNbaV0gPSBjO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGl0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9ibGl0X2J5dGVzKHMxLCBpMSwgczIsIGkyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSAwKSByZXR1cm4gMDtcbiAgaWYgKChpMiA9PSAwKSAmJlxuICAgICAgKGxlbiA+PSBzMi5sIHx8IChzMi50ID09IDIgLyogUEFSVElBTCAqLyAmJiBsZW4gPj0gczIuYy5sZW5ndGgpKSkge1xuICAgIHMyLmMgPSAoczEudCA9PSA0IC8qIEFSUkFZICovKT9cbiAgICAgIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyhzMS5jLCBpMSwgbGVuKTpcbiAgICAgIChpMSA9PSAwICYmIHMxLmMubGVuZ3RoID09IGxlbik/czEuYzpzMS5jLnN1YnN0cihpMSwgbGVuKTtcbiAgICBzMi50ID0gKHMyLmMubGVuZ3RoID09IHMyLmwpPzAgLyogQllURVMgfCBVTktPV04gKi8gOjI7IC8qIFBBUlRJQUwgKi9cbiAgfSBlbHNlIGlmIChzMi50ID09IDIgLyogUEFSVElBTCAqLyAmJiBpMiA9PSBzMi5jLmxlbmd0aCkge1xuICAgIHMyLmMgKz0gKHMxLnQgPT0gNCAvKiBBUlJBWSAqLyk/XG4gICAgICBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMoczEuYywgaTEsIGxlbik6XG4gICAgICAoaTEgPT0gMCAmJiBzMS5jLmxlbmd0aCA9PSBsZW4pP3MxLmM6czEuYy5zdWJzdHIoaTEsIGxlbik7XG4gICAgczIudCA9IChzMi5jLmxlbmd0aCA9PSBzMi5sKT8wIC8qIEJZVEVTIHwgVU5LT1dOICovIDoyOyAvKiBQQVJUSUFMICovXG4gIH0gZWxzZSB7XG4gICAgaWYgKHMyLnQgIT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMyKTtcbiAgICB2YXIgYzEgPSBzMS5jLCBjMiA9IHMyLmM7XG4gICAgaWYgKHMxLnQgPT0gNCAvKiBBUlJBWSAqLykge1xuICAgICAgaWYgKGkyIDw9IGkxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGMyIFtpMiArIGldID0gYzEgW2kxICsgaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIGMyIFtpMiArIGldID0gYzEgW2kxICsgaV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBsID0gTWF0aC5taW4gKGxlbiwgYzEubGVuZ3RoIC0gaTEpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIGMyIFtpMiArIGldID0gYzEuY2hhckNvZGVBdChpMSArIGkpO1xuICAgICAgZm9yICg7IGkgPCBsZW47IGkrKykgYzIgW2kyICsgaV0gPSAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGl0X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ibGl0X3N0cmluZyhhLGIsYyxkLGUpIHtcbiAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGEpLGIsYyxkLGUpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9ieXRlc19sZW5ndGgocykgeyByZXR1cm4gcy5sIH1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKSB7XG4gIHJldHVybiBzLmNoYXJDb2RlQXQoaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX3NldCAocywgaSwgYykge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfdW5zYWZlX3NldFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSB7XG4gIHJldHVybiBzLmxlbmd0aFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb21wYXJlIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2NvbXBhcmUoczEsIHMyKSB7XG4gIHJldHVybiAoczEgPCBzMik/LTE6KHMxID4gczIpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZXF1YWwgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKSB7XG4gIGlmKHMxID09PSBzMikgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzZXF1YWwgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gKHMxIDw9IHMyKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3N0aGFuKHMxLCBzMikge1xuICByZXR1cm4gKHMxIDwgczIpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfYnl0ZXMocykge1xuICAocy50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocy5jKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh4KSB7IHJldHVybiB4IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHgpIHsgcmV0dXJuIHggfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczoganNvb19pc19hc2NpaSwgY2FtbF91dGYxNl9vZl91dGY4XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpIHtcbiAgaWYoanNvb19pc19hc2NpaShzKSlcbiAgICByZXR1cm4gcztcbiAgcmV0dXJuIGNhbWxfdXRmMTZfb2ZfdXRmOChzKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczoganNvb19pc19hc2NpaSwgY2FtbF91dGY4X29mX3V0ZjE2LCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIChzKSB7XG4gIGlmIChqc29vX2lzX2FzY2lpKHMpKVxuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpXG4gIGVsc2UgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF91dGY4X29mX3V0ZjE2KHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMocykgeyByZXR1cm4gbmV3IE1sQnl0ZXMoMCxzLHMubGVuZ3RoKTsgfVxuXG5cbi8vIFRoZSBzZWN0aW9uIGJlbG93IHNob3VsZCBiZSB1c2VkIHdoZW4gdXNlLWpzLXN0cmluZz1mYWxzZVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQgKHMsIGksIGMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX3NldChzLGksYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19sZW5ndGhcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSB7XG4gIHJldHVybiBjYW1sX21sX2J5dGVzX2xlbmd0aChzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb21wYXJlXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2NvbXBhcmVcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2NvbXBhcmUoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2NvbXBhcmUoczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2VxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2VxdWFsXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19lcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfZXF1YWwoczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3NlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzZXF1YWxcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMxLHMyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzdGhhblxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzdGhhblxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3N0aGFuKHMxLHMyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9ieXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfYnl0ZXMocykgeyByZXR1cm4gcyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3N0cmluZyhzKSB7IHJldHVybiBzIH1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpIHsgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhzKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgKHMudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocyk7XG4gIHJldHVybiBzLmMgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpe1xuICByZXR1cm4gcy50b1V0ZjE2KClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmdcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIChzKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nKHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX21sX2J5dGVzXG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2lzX21sX2J5dGVzKHMpIHtcbiAgcmV0dXJuIChzIGluc3RhbmNlb2YgTWxCeXRlcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfYnl0ZXNfY29udGVudFxuLy9SZXF1aXJlczogTWxCeXRlcywgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9tbF9ieXRlc19jb250ZW50KHMpIHtcbiAgc3dpdGNoIChzLnQgJiA2KSB7XG4gIGRlZmF1bHQ6IC8qIFBBUlRJQUwgKi9cbiAgICBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICBjYXNlIDA6IC8qIEJZVEVTICovXG4gICAgcmV0dXJuIHMuYztcbiAgY2FzZSA0OlxuICAgIHJldHVybiBzLmNcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX21sX3N0cmluZ1xuLy9SZXF1aXJlczoganNvb19pc19hc2NpaVxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2lzX21sX3N0cmluZyhzKSB7XG4gIHJldHVybiAodHlwZW9mIHMgPT09IFwic3RyaW5nXCIgJiYgIS9bXlxceDAwLVxceGZmXS8udGVzdChzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2lzX21sX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2lzX21sX2J5dGVzKHMpO1xufVxuXG4vLyBUaGUgZnVuY3Rpb25zIGJlbG93IGFyZSBkZXByZWNhdGVkXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcocykgeyByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmV3X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9uZXdfc3RyaW5nIChzKSB7IHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdG9fanNfc3RyaW5nIG11dGFibGUgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfdG9fanNfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc190b19zdHJpbmcgKHMpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHMpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9hcnJheV9vZl9zdHJpbmcoeCkgeyByZXR1cm4gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcoeCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2FycmF5X29mX2J5dGVzKHgpIHsgcmV0dXJuIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoeCkgfVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBTeXNcblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZywgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yYWlzZV9zeXNfZXJyb3IgKG1zZykge1xuICBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nKGNhbWxfZ2xvYmFsX2RhdGEuU3lzX2Vycm9yLCBtc2cpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19leGl0XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfc3lzX2V4aXQgKGNvZGUpIHtcbiAgaWYoZ2xvYmFsVGhpcy5xdWl0KSBnbG9iYWxUaGlzLnF1aXQoY29kZSk7XG4gIC8vbm9kZWpzXG4gIGlmKGdsb2JhbFRoaXMucHJvY2VzcyAmJiBnbG9iYWxUaGlzLnByb2Nlc3MuZXhpdClcbiAgICBnbG9iYWxUaGlzLnByb2Nlc3MuZXhpdChjb2RlKTtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiRnVuY3Rpb24gJ2V4aXQnIG5vdCBpbXBsZW1lbnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvbihleG4pe1xuICBzd2l0Y2goZXhuWzJdKSB7XG4gIGNhc2UgLTg6IC8vIE1hdGNoX2ZhaWx1cmVcbiAgY2FzZSAtMTE6IC8vIEFzc2VydF9mYWlsdXJlXG4gIGNhc2UgLTEyOiAvLyBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZVxuICAgIHJldHVybiAxO1xuICBkZWZhdWx0OlxuICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2V4Y2VwdGlvblxuLy9SZXF1aXJlczogTWxCeXRlcywgY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9mb3JtYXRfZXhjZXB0aW9uKGV4bil7XG4gIHZhciByID0gXCJcIjtcbiAgaWYoZXhuWzBdID09IDApIHtcbiAgICByICs9IGV4blsxXVsxXTtcbiAgICBpZihleG4ubGVuZ3RoID09IDMgJiYgZXhuWzJdWzBdID09IDAgJiYgY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvbihleG5bMV0pKSB7XG5cbiAgICAgIHZhciBidWNrZXQgPSBleG5bMl07XG4gICAgICB2YXIgc3RhcnQgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RhcnQgPSAyXG4gICAgICB2YXIgYnVja2V0ID0gZXhuO1xuICAgIH1cbiAgICByICs9IFwiKFwiO1xuICAgIGZvcih2YXIgaSA9IHN0YXJ0OyBpIDwgYnVja2V0Lmxlbmd0aDsgaSArKyl7XG4gICAgICBpZihpID4gc3RhcnQpIHIrPVwiLCBcIjtcbiAgICAgIHZhciB2ID0gYnVja2V0W2ldXG4gICAgICBpZih0eXBlb2YgdiA9PSBcIm51bWJlclwiKVxuICAgICAgICByKz0gdi50b1N0cmluZygpO1xuICAgICAgZWxzZSBpZih2IGluc3RhbmNlb2YgTWxCeXRlcyl7XG4gICAgICAgIHIrPSAnXCInICsgdi50b1N0cmluZygpICsgJ1wiJztcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYodHlwZW9mIHYgPT0gXCJzdHJpbmdcIil7XG4gICAgICAgIHIrPSAnXCInICsgdi50b1N0cmluZygpICsgJ1wiJztcbiAgICAgIH1cbiAgICAgIGVsc2UgciArPSBcIl9cIjtcbiAgICB9XG4gICAgciArPSBcIilcIlxuICB9IGVsc2UgaWYgKGV4blswXSA9PSAyNDgpe1xuICAgIHIgKz0gZXhuWzFdXG4gIH1cbiAgcmV0dXJuIHJcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25cbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfZm9ybWF0X2V4Y2VwdGlvbiwgY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXJyKXtcbiAgaWYoZXJyIGluc3RhbmNlb2YgQXJyYXkgJiYgKGVyclswXSA9PSAwIHx8IGVyclswXSA9PSAyNDgpKSB7XG4gICAgdmFyIGhhbmRsZXIgPSBjYW1sX25hbWVkX3ZhbHVlKFwiUHJpbnRleGMuaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblwiKTtcbiAgICBpZihoYW5kbGVyKSBjYW1sX2NhbGxiYWNrKGhhbmRsZXIsIFtlcnIsZmFsc2VdKTtcbiAgICBlbHNlIHtcbiAgICAgIHZhciBtc2cgPSBjYW1sX2Zvcm1hdF9leGNlcHRpb24oZXJyKTtcbiAgICAgIHZhciBhdF9leGl0ID0gY2FtbF9uYW1lZF92YWx1ZShcIlBlcnZhc2l2ZXMuZG9fYXRfZXhpdFwiKTtcbiAgICAgIGlmKGF0X2V4aXQpIGNhbWxfY2FsbGJhY2soYXRfZXhpdCwgWzBdKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYXRhbCBlcnJvcjogZXhjZXB0aW9uIFwiICsgbXNnKTtcbiAgICAgIGlmKGVyci5qc19lcnJvcikgdGhyb3cgZXJyLmpzX2Vycm9yO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NldF9zdGF0aWNfZW52XG5mdW5jdGlvbiBjYW1sX3NldF9zdGF0aWNfZW52KGssdil7XG4gIGlmKCFnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudilcbiAgICBnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudiA9IHt9XG4gIGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52W2tdID0gdjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29fc3lzX2dldGVudiAoY29uc3QpXG5mdW5jdGlvbiBqc29vX3N5c19nZXRlbnYobikge1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgLy9ub2RlanMgZW52XG4gIGlmKHByb2Nlc3NcbiAgICAgJiYgcHJvY2Vzcy5lbnZcbiAgICAgJiYgcHJvY2Vzcy5lbnZbbl0gIT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBwcm9jZXNzLmVudltuXTtcbiAgaWYoZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZcbiAgICAgJiYgZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZbbl0pXG4gICAgcmV0dXJuIGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52W25dXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldGVudiAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX3N5c19nZXRlbnZcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldGVudiAobmFtZSkge1xuICB2YXIgciA9IGpzb29fc3lzX2dldGVudihjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lKSk7XG4gIGlmKHIgPT09IHVuZGVmaW5lZClcbiAgICBjYW1sX3JhaXNlX25vdF9mb3VuZCAoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3Vuc2FmZV9nZXRlbnZcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2dldGVudlxuZnVuY3Rpb24gY2FtbF9zeXNfdW5zYWZlX2dldGVudihuYW1lKXtcbiAgcmV0dXJuIGNhbWxfc3lzX2dldGVudiAobmFtZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJndlxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbnZhciBjYW1sX2FyZ3YgPSAoKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG4gIHZhciBtYWluID0gXCJhLm91dFwiO1xuICB2YXIgYXJncyA9IFtdXG5cbiAgaWYocHJvY2Vzc1xuICAgICAmJiBwcm9jZXNzLmFyZ3ZcbiAgICAgJiYgcHJvY2Vzcy5hcmd2Lmxlbmd0aCA+IDEpIHtcbiAgICB2YXIgYXJndiA9IHByb2Nlc3MuYXJndlxuICAgIC8vbm9kZWpzXG4gICAgbWFpbiA9IGFyZ3ZbMV07XG4gICAgYXJncyA9IGFyZ3Yuc2xpY2UoMik7XG4gIH1cblxuICB2YXIgcCA9IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKG1haW4pO1xuICB2YXIgYXJnczIgPSBbMCwgcF07XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKVxuICAgIGFyZ3MyLnB1c2goY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoYXJnc1tpXSkpO1xuICByZXR1cm4gYXJnczI7XG59KSgpKVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2V4ZWN1dGFibGVfbmFtZVxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG52YXIgY2FtbF9leGVjdXRhYmxlX25hbWUgPSBjYW1sX2FyZ3ZbMV1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0X2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0X2FyZ3YgKGEpIHtcbiAgcmV0dXJuIFswLCBjYW1sX2FyZ3ZbMV0sIGNhbWxfYXJndl07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxuZnVuY3Rpb24gY2FtbF9zeXNfYXJndiAoYSkge1xuICByZXR1cm4gY2FtbF9hcmd2O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19tb2RpZnlfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19tb2RpZnlfYXJndihhcmcpe1xuICBjYW1sX2FyZ3YgPSBhcmc7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19leGVjdXRhYmxlX25hbWUgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfZXhlY3V0YWJsZV9uYW1lXG5mdW5jdGlvbiBjYW1sX3N5c19leGVjdXRhYmxlX25hbWUoYSl7XG4gIHJldHVybiBjYW1sX2V4ZWN1dGFibGVfbmFtZVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kKGNtZCl7XG4gIHZhciBjbWQgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhjbWQpO1xuICBpZiAodHlwZW9mIHJlcXVpcmUgIT0gXCJ1bmRlZmluZWRcIil7XG4gICAgdmFyIGNoaWxkX3Byb2Nlc3MgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7XG4gICAgaWYoY2hpbGRfcHJvY2VzcyAmJiBjaGlsZF9wcm9jZXNzLmV4ZWNTeW5jKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY2hpbGRfcHJvY2Vzcy5leGVjU3luYyhjbWQse3N0ZGlvOiAnaW5oZXJpdCd9KTtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIDFcbiAgICAgIH1cbiAgfVxuICBlbHNlIHJldHVybiAxMjc7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmQoY21kKXtcbiAgcmV0dXJuIDEyNztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGltZSBtdXRhYmxlXG52YXIgY2FtbF9pbml0aWFsX3RpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpICogMC4wMDE7XG5mdW5jdGlvbiBjYW1sX3N5c190aW1lICgpIHtcbiAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gIHJldHVybiBub3cgKiAwLjAwMSAtIGNhbWxfaW5pdGlhbF90aW1lO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c190aW1lX2luY2x1ZGVfY2hpbGRyZW5cbi8vUmVxdWlyZXM6IGNhbWxfc3lzX3RpbWVcbmZ1bmN0aW9uIGNhbWxfc3lzX3RpbWVfaW5jbHVkZV9jaGlsZHJlbihiKSB7XG4gIHJldHVybiBjYW1sX3N5c190aW1lKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JhbmRvbV9zZWVkIG11dGFibGVcbi8vVGhlIGZ1bmN0aW9uIG5lZWRzIHRvIHJldHVybiBhbiBhcnJheSBzaW5jZSBPQ2FtbCA0LjAuLi5cbmZ1bmN0aW9uIGNhbWxfc3lzX3JhbmRvbV9zZWVkICgpIHtcbiAgaWYgKGdsb2JhbFRoaXMuY3J5cHRvKSB7XG4gICAgIGlmIChnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgICB2YXIgYSA9IGdsb2JhbFRoaXMuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgSW50MzJBcnJheSg0KSk7XG4gICAgICAgcmV0dXJuIFswLCBhWzBdLCBhWzFdLCBhWzJdLCBhWzNdXTtcbiAgICAgfSBlbHNlIGlmIChnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcykge1xuICAgICAgIHZhciBhID0gbmV3IEludDMyQXJyYXkoZ2xvYmFsVGhpcy5jcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLmJ1ZmZlcik7XG4gICAgICAgcmV0dXJuIFswLCBhWzBdLCBhWzFdLCBhWzJdLCBhWzNdXTtcbiAgICAgfVxuICB9XG4gIHZhciBub3cgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICB2YXIgeCA9IG5vd14weGZmZmZmZmZmKk1hdGgucmFuZG9tKCk7XG4gIHJldHVybiBbMCx4XTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfYmlnX2VuZGlhbiBjb25zdFxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfYmlnX2VuZGlhbiAoKSB7IHJldHVybiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X3dvcmRfc2l6ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfd29yZF9zaXplICgpIHsgcmV0dXJuIDMyOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2ludF9zaXplIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9pbnRfc2l6ZSAoKSB7IHJldHVybiAzMjsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9tYXhfd29zaXplIGNvbnN0XG4vLyBtYXhfaW50IC8gNCBzbyB0aGF0IHRoZSBmb2xsb3dpbmcgZG9lcyBub3Qgb3ZlcmZsb3dcbi8vbGV0IG1heF9zdHJpbmdfbGVuZ3RoID0gd29yZF9zaXplIC8gOCAqIG1heF9hcnJheV9sZW5ndGggLSAxOztcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X21heF93b3NpemUgKCkgeyByZXR1cm4gKDB4N0ZGRkZGRkYvNCkgfCAwO31cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3VuaXggY29uc3Rcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV91bml4ICgpIHsgcmV0dXJuIG9zX3R5cGUgPT0gXCJVbml4XCIgPyAxIDogMDsgfVxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3dpbjMyIGNvbnN0XG4vL1JlcXVpcmVzOiBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfd2luMzIgKCkgeyByZXR1cm4gb3NfdHlwZSA9PSBcIldpbjMyXCIgPyAxIDogMDsgfVxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfb3N0eXBlX2N5Z3dpbiBjb25zdFxuLy9SZXF1aXJlczogb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfb3N0eXBlX2N5Z3dpbiAoKSB7IHJldHVybiBvc190eXBlID09IFwiQ3lnd2luXCIgPyAxIDogMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9iYWNrZW5kX3R5cGUgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2JhY2tlbmRfdHlwZSAoKSB7XG4gIHJldHVybiBbMCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcImpzX29mX29jYW1sXCIpXTtcbn1cblxuLy9Qcm92aWRlczogb3NfdHlwZVxudmFyIG9zX3R5cGUgPSAoZ2xvYmFsVGhpcy5wcm9jZXNzICYmXG4gICAgICAgICAgICAgICBnbG9iYWxUaGlzLnByb2Nlc3MucGxhdGZvcm0gJiZcbiAgICAgICAgICAgICAgIGdsb2JhbFRoaXMucHJvY2Vzcy5wbGF0Zm9ybSA9PSBcIndpbjMyXCIpID8gXCJDeWd3aW5cIiA6IFwiVW5peFwiO1xuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldF9jb25maWcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldF9jb25maWcgKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMob3NfdHlwZSksIDMyLCAwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfaXNhdHR5XG5mdW5jdGlvbiBjYW1sX3N5c19pc2F0dHkoX2NoYW4pIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV92YXJpYW50XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfdmFyaWFudChfdW5pdCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9wYXJhbWV0ZXJzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfcGFyYW1ldGVycyhfdW5pdCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2luc3RhbGxfc2lnbmFsX2hhbmRsZXIoKXtyZXR1cm4gMH1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX3dhcm5pbmdzXG52YXIgY2FtbF9ydW50aW1lX3dhcm5pbmdzID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9tbF9lbmFibGVfcnVudGltZV93YXJuaW5nc1xuLy9SZXF1aXJlczogY2FtbF9ydW50aW1lX3dhcm5pbmdzXG5mdW5jdGlvbiBjYW1sX21sX2VuYWJsZV9ydW50aW1lX3dhcm5pbmdzIChib29sKSB7XG4gIGNhbWxfcnVudGltZV93YXJuaW5ncyA9IGJvb2w7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3J1bnRpbWVfd2FybmluZ3NfZW5hYmxlZFxuLy9SZXF1aXJlczogY2FtbF9ydW50aW1lX3dhcm5pbmdzXG5mdW5jdGlvbiBjYW1sX21sX3J1bnRpbWVfd2FybmluZ3NfZW5hYmxlZCAoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfcnVudGltZV93YXJuaW5ncztcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NwYWNldGltZV9lbmFibGVkIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfc3BhY2V0aW1lX2VuYWJsZWQoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X25ha2VkX3BvaW50ZXJzX2NoZWNrZWQgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfbmFrZWRfcG9pbnRlcnNfY2hlY2tlZChfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9jaGFubmVsX2Zvcl9zcGFjZXRpbWUgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9jaGFubmVsX2Zvcl9zcGFjZXRpbWUoX2NoYW5uZWwpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3BhY2V0aW1lX29ubHlfd29ya3NfZm9yX25hdGl2ZV9jb2RlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX3NwYWNldGltZV9vbmx5X3dvcmtzX2Zvcl9uYXRpdmVfY29kZSgpIHtcbiAgY2FtbF9mYWlsd2l0aChcIlNwYWNldGltZSBwcm9maWxpbmcgb25seSB3b3JrcyBmb3IgbmF0aXZlIGNvZGVcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfeGRnX2RlZmF1bHRzXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF94ZGdfZGVmYXVsdHMoX3VuaXQpIHtcbiAgcmV0dXJuIDA7IC8vIGVtcHR5IGxpc3Rcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfaXNfcmVndWxhcl9maWxlXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfaXNfcmVndWxhcl9maWxlKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmlzRmlsZShyb290LnJlc3QpO1xufVxuLy9BbHdheXNcbi8vUmVxdWlyZXM6IGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyKCkge1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgaWYocHJvY2VzcyAmJiBwcm9jZXNzLm9uKSB7XG4gICAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBmdW5jdGlvbiAoZXJyLCBvcmlnaW4pIHtcbiAgICAgIGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uKGVycik7XG4gICAgICBwcm9jZXNzLmV4aXQgKDIpO1xuICAgIH0pXG4gIH1cbiAgZWxzZSBpZihnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIpe1xuICAgIGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmdW5jdGlvbihldmVudCl7XG4gICAgICBpZihldmVudC5lcnJvcil7XG4gICAgICAgIGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uKGV2ZW50LmVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuY2FtbF9zZXR1cF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlcigpO1xuXG5cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cblxuLy9Qcm92aWRlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWdcbi8vUmVxdWlyZXM6IGpzb29fc3lzX2dldGVudlxudmFyIGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnID0gRkxBRyhcIndpdGgtanMtZXJyb3JcIik7XG5cbihmdW5jdGlvbiAoKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KFwiT0NBTUxSVU5QQVJBTVwiKVxuICBpZihyICE9PSB1bmRlZmluZWQpe1xuICAgIHZhciBsID0gci5zcGxpdChcIixcIik7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGwubGVuZ3RoOyBpKyspe1xuICAgICAgaWYobFtpXSA9PSBcImJcIikgeyBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyA9IDE7IGJyZWFrIH1cbiAgICAgIGVsc2UgaWYgKGxbaV0uc3RhcnRzV2l0aChcImI9XCIpKSB7XG4gICAgICAgIGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnID0gKyhsW2ldLnNsaWNlKDIpKX1cbiAgICAgIGVsc2UgY29udGludWU7XG4gICAgfVxuICB9XG59KSAoKVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXMgKCkgeyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9iYWNrdHJhY2Vfc3RhdHVzXG4vL1JlcXVpcmVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZ1xuZnVuY3Rpb24gY2FtbF9iYWNrdHJhY2Vfc3RhdHVzIChfdW5pdCkgeyByZXR1cm4gY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPyAxIDogMDsgfVxuLy9Qcm92aWRlczogY2FtbF9nZXRfZXhjZXB0aW9uX2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfZXhjZXB0aW9uX2JhY2t0cmFjZSAoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2UgKCkgeyByZXR1cm4gWzBdOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnXG5mdW5jdGlvbiBjYW1sX3JlY29yZF9iYWNrdHJhY2UgKGIpIHsgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPSBiOyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlICgpIHsgcmV0dXJuIFswXTsgfVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aCgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3RcbmZ1bmN0aW9uIGNhbWxfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3QoKSB7IHJldHVybiAwIH1cbi8vUHJvdmlkZXM6IGNhbWxfcmF3X2JhY2t0cmFjZV9zbG90XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfcmF3X2JhY2t0cmFjZV9zbG90ICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiUHJpbnRleGMuZ2V0X3Jhd19iYWNrdHJhY2Vfc2xvdDogaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfcmVzdG9yZV9yYXdfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZShleG4sIGJ0KSB7IHJldHVybiAwIH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFjayAoKSB7IHJldHVybiBbMF07IH1cblxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdCgpe1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdFwiKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuIChjb25zdCwgc2hhbGxvdylcbi8vSWY6ICFlZmZlY3RzXG4vL1dlYWtkZWZcbmZ1bmN0aW9uIGNhbWxfY2FsbF9nZW4oZiwgYXJncykge1xuICB2YXIgbiA9IChmLmwgPj0gMCk/Zi5sOihmLmwgPSBmLmxlbmd0aCk7XG4gIHZhciBhcmdzTGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gIGlmIChkID09IDApXG4gICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gIGVsc2UgaWYgKGQgPCAwKSB7XG4gICAgdmFyIGcgPSBmLmFwcGx5KG51bGwsYXJncy5zbGljZSgwLG4pKTtcbiAgICBpZih0eXBlb2YgZyAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZztcbiAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihnLGFyZ3Muc2xpY2UobikpO1xuICB9XG4gIGVsc2Uge1xuICAgIHN3aXRjaCAoZCkge1xuICAgIGNhc2UgMToge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoeCl7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgMSk7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIG5hcmdzW2FyZ3NMZW5dID0geDtcbiAgICAgICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgbmFyZ3MpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgMjoge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoeCwgeSl7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgMik7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIG5hcmdzW2FyZ3NMZW5dID0geDtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbiArIDFdID0geTtcbiAgICAgICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgbmFyZ3MpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKCl7XG4gICAgICAgIHZhciBleHRyYV9hcmdzID0gKGFyZ3VtZW50cy5sZW5ndGggPT0gMCk/MTphcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJncy5sZW5ndGgrZXh0cmFfYXJncyk7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkgbmFyZ3NbYXJncy5sZW5ndGgraV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYsIG5hcmdzKVxuICAgICAgfTtcbiAgICB9fVxuICAgIGcubCA9IGQ7XG4gICAgcmV0dXJuIGc7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9jYWxsX2dlbiAoY29uc3QsIHNoYWxsb3cpXG4vL0lmOiBlZmZlY3RzXG4vL1dlYWtkZWZcbmZ1bmN0aW9uIGNhbWxfY2FsbF9nZW4oZiwgYXJncykge1xuICB2YXIgbiA9IChmLmwgPj0gMCk/Zi5sOihmLmwgPSBmLmxlbmd0aCk7XG4gIHZhciBhcmdzTGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gIGlmIChkID09IDApIHtcbiAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTtcbiAgfSBlbHNlIGlmIChkIDwgMCkge1xuICAgIHZhciByZXN0ID0gYXJncy5zbGljZShuIC0gMSk7XG4gICAgdmFyIGsgPSBhcmdzIFthcmdzTGVuIC0gMV07XG4gICAgYXJncyA9IGFyZ3Muc2xpY2UoMCwgbik7XG4gICAgYXJnc1tuIC0gMV0gPSBmdW5jdGlvbiAoZykge1xuICAgICAgaWYgKHR5cGVvZiBnICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBrKGcpO1xuICAgICAgdmFyIGFyZ3MgPSByZXN0LnNsaWNlKCk7XG4gICAgICBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPSBrO1xuICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZywgYXJncyk7IH07XG4gICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgYXJnc0xlbi0tO1xuICAgIHZhciBrID0gYXJncyBbYXJnc0xlbl07XG4gICAgc3dpdGNoIChkKSB7XG4gICAgY2FzZSAxOiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4LCB5KXtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAyKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICBuYXJnc1thcmdzTGVuICsgMV0gPSB5O1xuICAgICAgICByZXR1cm4gZi5hcHBseShudWxsLCBuYXJncylcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAyOiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4LCB5LCB6KXtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAzKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICBuYXJnc1thcmdzTGVuICsgMV0gPSB5O1xuICAgICAgICBuYXJnc1thcmdzTGVuICsgMl0gPSB6O1xuICAgICAgICByZXR1cm4gZi5hcHBseShudWxsLCBuYXJncylcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoKXtcbiAgICAgICAgdmFyIGV4dHJhX2FyZ3MgPSAoYXJndW1lbnRzLmxlbmd0aCA9PSAwKT8xOmFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgZXh0cmFfYXJncyk7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKVxuICAgICAgICAgIG5hcmdzW2FyZ3NMZW4gKyBpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgbmFyZ3MpXG4gICAgICB9O1xuICAgIH19XG4gICAgZy5sID0gZCArIDE7XG4gICAgcmV0dXJuIGsoZyk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9uYW1lZF92YWx1ZXNcbnZhciBjYW1sX25hbWVkX3ZhbHVlcyA9IHt9O1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlIChjb25zdCxtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWUobm0sdikge1xuICBjYW1sX25hbWVkX3ZhbHVlc1tjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5tKV0gPSB2O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9uYW1lZF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZXNcbmZ1bmN0aW9uIGNhbWxfbmFtZWRfdmFsdWUobm0pIHtcbiAgcmV0dXJuIGNhbWxfbmFtZWRfdmFsdWVzW25tXVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dsb2JhbF9kYXRhXG52YXIgY2FtbF9nbG9iYWxfZGF0YSA9IFswXTtcblxuLy9Qcm92aWRlczogY2FtbF9idWlsZF9zeW1ib2xzXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9idWlsZF9zeW1ib2xzKHN5bWIpIHtcbiAgdmFyIHIgPSB7fTtcbiAgaWYoc3ltYikge1xuICAgIGZvcih2YXIgaSA9IDE7IGkgPCBzeW1iLmxlbmd0aDsgaSsrKXtcbiAgICAgIHJbY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoc3ltYltpXVsxXSldID0gc3ltYltpXVsyXVxuICAgIH1cbiAgfVxuICByZXR1cm4gcjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9nbG9iYWwgKGNvbnN0LCBzaGFsbG93LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfY2FsbGJhY2ssIGNhbWxfYnVpbGRfc3ltYm9sc1xuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9nbG9iYWwgKG4sIHYsIG5hbWVfb3B0KSB7XG4gIGlmIChuYW1lX29wdCkge1xuICAgIHZhciBuYW1lID0gbmFtZV9vcHQ7XG4gICAgaWYoZ2xvYmFsVGhpcy50b3BsZXZlbFJlbG9jKSB7XG4gICAgICBuID0gY2FtbF9jYWxsYmFjayhnbG9iYWxUaGlzLnRvcGxldmVsUmVsb2MsIFtuYW1lXSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNhbWxfZ2xvYmFsX2RhdGEuc3ltYm9scykge1xuICAgICAgaWYoIWNhbWxfZ2xvYmFsX2RhdGEuc3ltaWR4KSB7XG4gICAgICAgIGNhbWxfZ2xvYmFsX2RhdGEuc3ltaWR4ID0gY2FtbF9idWlsZF9zeW1ib2xzKGNhbWxfZ2xvYmFsX2RhdGEuc3ltYm9scylcbiAgICAgIH1cbiAgICAgIHZhciBuaWQgPSBjYW1sX2dsb2JhbF9kYXRhLnN5bWlkeFtuYW1lXVxuICAgICAgaWYobmlkID49IDApXG4gICAgICAgIG4gPSBuaWRcbiAgICAgIGVsc2Uge1xuICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9yZWdpc3Rlcl9nbG9iYWw6IGNhbm5vdCBsb2NhdGUgXCIgKyBuYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY2FtbF9nbG9iYWxfZGF0YVtuICsgMV0gPSB2O1xuICBpZihuYW1lX29wdCkgY2FtbF9nbG9iYWxfZGF0YVtuYW1lX29wdF0gPSB2O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9nbG9iYWxfZGF0YSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2dldF9nbG9iYWxfZGF0YSAoKSB7IHJldHVybiBjYW1sX2dsb2JhbF9kYXRhOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfcHJpbnRhYmxlIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfaXNfcHJpbnRhYmxlKGMpIHsgcmV0dXJuICsoYyA+IDMxICYmIGMgPCAxMjcpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWF5YmVfcHJpbnRfc3RhdHNcbmZ1bmN0aW9uIGNhbWxfbWF5YmVfcHJpbnRfc3RhdHModW5pdCkgeyByZXR1cm4gMCB9XG4iLCIvLyBKc19vZl9vY2FtbCBsaWJyYXJ5XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSnNsaWJcblxuLy9Qcm92aWRlczogY2FtbF9qc19wdXJlX2V4cHIgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfcHVyZV9leHByIChmKSB7IHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIFswXSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19zZXQgKG11dGFibGUsIGNvbnN0LCBtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9qc19zZXQobyxmLHYpIHsgb1tmXT12O3JldHVybiAwfVxuLy9Qcm92aWRlczogY2FtbF9qc19nZXQgKG11dGFibGUsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19nZXQobyxmKSB7IHJldHVybiBvW2ZdOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2RlbGV0ZSAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2RlbGV0ZShvLGYpIHsgZGVsZXRlIG9bZl07IHJldHVybiAwfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2luc3RhbmNlb2YgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfaW5zdGFuY2VvZihvLGMpIHsgcmV0dXJuIChvIGluc3RhbmNlb2YgYykgPyAxIDogMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3R5cGVvZiAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3R5cGVvZihvKSB7IHJldHVybiB0eXBlb2YgbzsgfVxuXG4vL1Byb3ZpZGVzOmNhbWxfdHJhbXBvbGluZVxuZnVuY3Rpb24gY2FtbF90cmFtcG9saW5lKHJlcykge1xuICB2YXIgYyA9IDE7XG4gIHdoaWxlKHJlcyAmJiByZXMuam9vX3RyYW1wKXtcbiAgICByZXMgPSByZXMuam9vX3RyYW1wLmFwcGx5KG51bGwsIHJlcy5qb29fYXJncyk7XG4gICAgYysrO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6Y2FtbF90cmFtcG9saW5lX3JldHVyblxuZnVuY3Rpb24gY2FtbF90cmFtcG9saW5lX3JldHVybihmLGFyZ3MpIHtcbiAgcmV0dXJuIHtqb29fdHJhbXA6Zixqb29fYXJnczphcmdzfTtcbn1cblxuLy9Qcm92aWRlczpjYW1sX3N0YWNrX2RlcHRoXG4vL0lmOiBlZmZlY3RzXG52YXIgY2FtbF9zdGFja19kZXB0aCA9IDA7XG5cbi8vUHJvdmlkZXM6Y2FtbF9zdGFja19jaGVja19kZXB0aFxuLy9JZjogZWZmZWN0c1xuLy9SZXF1aXJlczpjYW1sX3N0YWNrX2RlcHRoXG5mdW5jdGlvbiBjYW1sX3N0YWNrX2NoZWNrX2RlcHRoKCkge1xuICAgIHJldHVybiAtLWNhbWxfc3RhY2tfZGVwdGggPiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxiYWNrXG4vL0lmOiAhZWZmZWN0c1xuLy9SZXF1aXJlczpjYW1sX2NhbGxfZ2VuXG52YXIgY2FtbF9jYWxsYmFjayA9IGNhbWxfY2FsbF9nZW47XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbGJhY2tcbi8vSWY6IGVmZmVjdHNcbi8vUmVxdWlyZXM6Y2FtbF9zdGFja19kZXB0aCwgY2FtbF9jYWxsX2dlbiwgY2FtbF9leG5fc3RhY2ssIGNhbWxfZmliZXJfc3RhY2ssIGNhbWxfd3JhcF9leGNlcHRpb24sIGNhbWxfcmVzdW1lX3N0YWNrLCBjYW1sX2ZyZXNoX29vX2lkLCBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX3JhaXNlX3dpdGhfYXJnLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50XG5mdW5jdGlvbiBjYW1sX2NhbGxiYWNrKGYsYXJncykge1xuICBmdW5jdGlvbiB1bmNhdWdodF9lZmZlY3RfaGFuZGxlcihlZmYsayxtcykge1xuICAgIC8vIFJlc3VtZXMgdGhlIGNvbnRpbnVhdGlvbiBrIGJ5IHJhaXNpbmcgZXhjZXB0aW9uIFVuaGFuZGxlZC5cbiAgICBjYW1sX3Jlc3VtZV9zdGFjayhrWzFdLG1zKTtcbiAgICB2YXIgZXhuID0gY2FtbF9uYW1lZF92YWx1ZShcIkVmZmVjdC5VbmhhbmRsZWRcIik7XG4gICAgaWYoZXhuKSBjYW1sX3JhaXNlX3dpdGhfYXJnKGV4biwgZWZmKTtcbiAgICBlbHNlIHtcbiAgICAgIGV4biA9IFsyNDgsY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIkVmZmVjdC5VbmhhbmRsZWRcIiksIGNhbWxfZnJlc2hfb29faWQoMCldO1xuICAgICAgY2FtbF9yYWlzZV9jb25zdGFudChleG4pO1xuICAgIH1cbiAgfVxuICB2YXIgc2F2ZWRfc3RhY2tfZGVwdGggPSBjYW1sX3N0YWNrX2RlcHRoO1xuICB2YXIgc2F2ZWRfZXhuX3N0YWNrID0gY2FtbF9leG5fc3RhY2s7XG4gIHZhciBzYXZlZF9maWJlcl9zdGFjayA9IGNhbWxfZmliZXJfc3RhY2s7XG4gIHRyeSB7XG4gICAgY2FtbF9leG5fc3RhY2sgPSAwO1xuICAgIGNhbWxfZmliZXJfc3RhY2sgPVxuICAgICAge2g6WzAsIDAsIDAsIHVuY2F1Z2h0X2VmZmVjdF9oYW5kbGVyXSwgcjp7azowLCB4OjAsIGU6MH19O1xuICAgIHZhciByZXMgPSB7am9vX3RyYW1wOiBmLFxuICAgICAgICAgICAgICAgam9vX2FyZ3M6IGFyZ3MuY29uY2F0KGZ1bmN0aW9uICh4KXtyZXR1cm4geDt9KX07XG4gICAgZG8ge1xuICAgICAgY2FtbF9zdGFja19kZXB0aCA9IDQwO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzID0gY2FtbF9jYWxsX2dlbihyZXMuam9vX3RyYW1wLCByZXMuam9vX2FyZ3MpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiBIYW5kbGUgZXhjZXB0aW9uIGNvbWluZyBmcm9tIEphdmFTY3JpcHQgb3IgZnJvbSB0aGUgcnVudGltZS4gKi9cbiAgICAgICAgaWYgKCFjYW1sX2V4bl9zdGFjaykgdGhyb3cgZTtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBjYW1sX2V4bl9zdGFja1sxXTtcbiAgICAgICAgY2FtbF9leG5fc3RhY2sgPSBjYW1sX2V4bl9zdGFja1syXTtcbiAgICAgICAgcmVzID0ge2pvb190cmFtcDogaGFuZGxlcixcbiAgICAgICAgICAgICAgIGpvb19hcmdzOiBbY2FtbF93cmFwX2V4Y2VwdGlvbihlKV19O1xuICAgICAgfVxuICAgIH0gd2hpbGUocmVzICYmIHJlcy5qb29fYXJncylcbiAgfSBmaW5hbGx5IHtcbiAgICBjYW1sX3N0YWNrX2RlcHRoID0gc2F2ZWRfc3RhY2tfZGVwdGg7XG4gICAgY2FtbF9leG5fc3RhY2sgPSBzYXZlZF9leG5fc3RhY2s7XG4gICAgY2FtbF9maWJlcl9zdGFjayA9IHNhdmVkX2ZpYmVyX3N0YWNrO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfanNcbmZ1bmN0aW9uIGNhbWxfaXNfanMoKSB7XG4gIHJldHVybiAxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc29vX2ZsYWdzX3VzZV9qc19zdHJpbmcodW5pdCl7XG4gIHJldHVybiBGTEFHKFwidXNlLWpzLXN0cmluZ1wiKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzb29fZmxhZ3NfZWZmZWN0c1xuZnVuY3Rpb24gY2FtbF9qc29vX2ZsYWdzX2VmZmVjdHModW5pdCl7XG4gIHJldHVybiBGTEFHKFwiZWZmZWN0c1wiKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3dyYXBfZXhjZXB0aW9uIGNvbnN0IChtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YSxjYW1sX3N0cmluZ19vZl9qc3N0cmluZyxjYW1sX25hbWVkX3ZhbHVlXG5mdW5jdGlvbiBjYW1sX3dyYXBfZXhjZXB0aW9uKGUpIHtcbiAgaWYgKEZMQUcoXCJleGN3cmFwXCIpKSB7XG4gICAgaWYoZSBpbnN0YW5jZW9mIEFycmF5KSByZXR1cm4gZTtcbiAgICB2YXIgZXhuO1xuICAgIC8vU3RhY2tfb3ZlcmZsb3c6IGNocm9tZSwgc2FmYXJpXG4gICAgaWYoZ2xvYmFsVGhpcy5SYW5nZUVycm9yXG4gICAgICAgJiYgZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuUmFuZ2VFcnJvclxuICAgICAgICYmIGUubWVzc2FnZVxuICAgICAgICYmIGUubWVzc2FnZS5tYXRjaCgvbWF4aW11bSBjYWxsIHN0YWNrL2kpKVxuICAgICAgZXhuID0gY2FtbF9nbG9iYWxfZGF0YS5TdGFja19vdmVyZmxvdztcbiAgICAvL1N0YWNrX292ZXJmbG93OiBmaXJlZm94XG4gICAgZWxzZSBpZihnbG9iYWxUaGlzLkludGVybmFsRXJyb3JcbiAgICAgICAmJiBlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5JbnRlcm5hbEVycm9yXG4gICAgICAgJiYgZS5tZXNzYWdlXG4gICAgICAgJiYgZS5tZXNzYWdlLm1hdGNoKC90b28gbXVjaCByZWN1cnNpb24vaSkpXG4gICAgICBleG4gPSBjYW1sX2dsb2JhbF9kYXRhLlN0YWNrX292ZXJmbG93O1xuICAgIC8vV3JhcCBFcnJvciBpbiBKcy5FcnJvciBleGNlcHRpb25cbiAgICBlbHNlIGlmKGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLkVycm9yICYmIGNhbWxfbmFtZWRfdmFsdWUoXCJqc0Vycm9yXCIpKVxuICAgICAgZXhuID0gWzAsY2FtbF9uYW1lZF92YWx1ZShcImpzRXJyb3JcIiksZV07XG4gICAgZWxzZVxuICAgICAgLy9mYWxsYmFjazogd3JhcHBlZCBpbiBGYWlsdXJlXG4gICAgICBleG4gPSBbMCxjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUsY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKFN0cmluZyhlKSldO1xuICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBlcnJvciBhdCBoYW5kLCBsZXQncyB1c2UgaXQuXG4gICAgaWYgKGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLkVycm9yKVxuICAgICAgZXhuLmpzX2Vycm9yID0gZTtcbiAgICByZXR1cm4gZXhuO1xuICB9IGVsc2VcbiAgICByZXR1cm4gZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG4vL1JlcXVpcmVzOiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWdcbmZ1bmN0aW9uIGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZShleG4sIGZvcmNlKSB7XG4gIGlmKGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnKVxuICAgIHJldHVybiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZShleG4sIGZvcmNlKTtcbiAgZWxzZSByZXR1cm4gZXhuXG59XG5cbi8vIEV4cGVyaW1lbnRhbFxuLy9Qcm92aWRlczogY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlKGV4biwgZm9yY2UpIHtcbiAgLy9uZXZlciByZXJhaXNlIGZvciBjb25zdGFudCBleG5cbiAgaWYoIWV4bi5qc19lcnJvciB8fCBmb3JjZSB8fCBleG5bMF0gPT0gMjQ4KSBleG4uanNfZXJyb3IgPSBuZXcgZ2xvYmFsVGhpcy5FcnJvcihcIkpzIGV4Y2VwdGlvbiBjb250YWluaW5nIGJhY2t0cmFjZVwiKTtcbiAgcmV0dXJuIGV4bjtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfanNfZXJyb3Jfb3B0aW9uX29mX2V4Y2VwdGlvbihleG4pIHtcbiAgaWYoZXhuLmpzX2Vycm9yKSB7IHJldHVybiBbMCwgZXhuLmpzX2Vycm9yXTsgfVxuICByZXR1cm4gMDtcbn1cblxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9ib29sIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9ib29sKHgpIHsgcmV0dXJuICEheDsgfVxuLy9Qcm92aWRlczogY2FtbF9qc190b19ib29sIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdG9fYm9vbCh4KSB7IHJldHVybiAreDsgfVxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2Zsb2F0IGNvbnN0IChjb25zdClcbi8vQWxpYXM6IGNhbWxfanNfZnJvbV9pbnQzMlxuLy9BbGlhczogY2FtbF9qc19mcm9tX25hdGl2ZWludFxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2Zsb2F0KHgpIHsgcmV0dXJuIHg7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fZmxvYXQgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc190b19mbG9hdCh4KSB7IHJldHVybiB4OyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2ludDMyIGNvbnN0IChjb25zdClcbi8vQWxpYXM6IGNhbWxfanNfdG9fbmF0aXZlaW50XG5mdW5jdGlvbiBjYW1sX2pzX3RvX2ludDMyKHgpIHsgcmV0dXJuIHh8MDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fYXJyYXkgbXV0YWJsZSAoc2hhbGxvdylcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9hcnJheShhKSB7XG4gIHJldHVybiBhLnNsaWNlKDEpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc190b19hcnJheSBtdXRhYmxlIChzaGFsbG93KVxuZnVuY3Rpb24gY2FtbF9qc190b19hcnJheShhKSB7XG4gIHZhciBsZW4gPSBhLmxlbmd0aDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKzEpO1xuICBiWzBdID0gMDtcbiAgZm9yKHZhciBpPTA7aTxsZW47aSsrKSBiW2krMV0gPSBhW2ldO1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9saXN0X29mX2pzX2FycmF5IGNvbnN0IChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9saXN0X29mX2pzX2FycmF5KGEpe1xuICB2YXIgbCA9IDA7XG4gIGZvcih2YXIgaT1hLmxlbmd0aCAtIDE7IGk+PTA7IGktLSl7XG4gICAgdmFyIGUgPSBhW2ldO1xuICAgIGwgPSBbMCxlLGxdO1xuICB9XG4gIHJldHVybiBsXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGlzdF90b19qc19hcnJheSBjb25zdCAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfbGlzdF90b19qc19hcnJheShsKXtcbiAgdmFyIGEgPSBbXTtcbiAgZm9yKDsgbCAhPT0gMDsgbCA9IGxbMl0pIHtcbiAgICBhLnB1c2gobFsxXSk7XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdmFyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX3Zhcih4KSB7XG4gIHZhciB4ID0gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoeCk7XG4gIC8vQ2hlY2tzIHRoYXQgeCBoYXMgdGhlIGZvcm0gaWRlbnRbLmlkZW50XSpcbiAgaWYoIXgubWF0Y2goL15bYS16QS1aXyRdW2EtekEtWl8kMC05XSooXFwuW2EtekEtWl8kXVthLXpBLVpfJDAtOV0qKSokLykpe1xuICAgIGNvbnNvbGUuZXJyb3IoXCJjYW1sX2pzX3ZhcjogXFxcIlwiICsgeCArIFwiXFxcIiBpcyBub3QgYSB2YWxpZCBKYXZhU2NyaXB0IHZhcmlhYmxlLiBjb250aW51aW5nIC4uXCIpO1xuICAgIC8vY29uc29sZS5lcnJvcihcIkpzLlVuc2FmZS5ldmFsX3N0cmluZ1wiKVxuICB9XG4gIHJldHVybiBldmFsKHgpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19jYWxsIChjb25zdCwgbXV0YWJsZSwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19jYWxsKGYsIG8sIGFyZ3MpIHsgcmV0dXJuIGYuYXBwbHkobywgY2FtbF9qc19mcm9tX2FycmF5KGFyZ3MpKTsgfVxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5fY2FsbCAoY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfZnVuX2NhbGwoZiwgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gIGNhc2UgMTogcmV0dXJuIGYoKTtcbiAgY2FzZSAyOiByZXR1cm4gZiAoYVsxXSk7XG4gIGNhc2UgMzogcmV0dXJuIGYgKGFbMV0sYVsyXSk7XG4gIGNhc2UgNDogcmV0dXJuIGYgKGFbMV0sYVsyXSxhWzNdKTtcbiAgY2FzZSA1OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSk7XG4gIGNhc2UgNjogcmV0dXJuIGYgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSk7XG4gIGNhc2UgNzogcmV0dXJuIGYgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdKTtcbiAgY2FzZSA4OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0sYVs3XSk7XG4gIH1cbiAgcmV0dXJuIGYuYXBwbHkobnVsbCwgY2FtbF9qc19mcm9tX2FycmF5KGEpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfbWV0aF9jYWxsIChtdXRhYmxlLCBjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfbWV0aF9jYWxsKG8sIGYsIGFyZ3MpIHtcbiAgcmV0dXJuIG9bY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoZildLmFwcGx5KG8sIGNhbWxfanNfZnJvbV9hcnJheShhcmdzKSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX25ldyAoY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfbmV3KGMsIGEpIHtcbiAgc3dpdGNoIChhLmxlbmd0aCkge1xuICBjYXNlIDE6IHJldHVybiBuZXcgYztcbiAgY2FzZSAyOiByZXR1cm4gbmV3IGMgKGFbMV0pO1xuICBjYXNlIDM6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdKTtcbiAgY2FzZSA0OiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSxhWzNdKTtcbiAgY2FzZSA1OiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSxhWzNdLGFbNF0pO1xuICBjYXNlIDY6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdKTtcbiAgY2FzZSA3OiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdKTtcbiAgY2FzZSA4OiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdLGFbN10pO1xuICB9XG4gIGZ1bmN0aW9uIEYoKSB7IHJldHVybiBjLmFwcGx5KHRoaXMsIGNhbWxfanNfZnJvbV9hcnJheShhKSk7IH1cbiAgRi5wcm90b3R5cGUgPSBjLnByb3RvdHlwZTtcbiAgcmV0dXJuIG5ldyBGO1xufVxuLy9Qcm92aWRlczogY2FtbF9vanNfbmV3X2FyciAoY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb2pzX25ld19hcnIoYywgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gIGNhc2UgMDogcmV0dXJuIG5ldyBjO1xuICBjYXNlIDE6IHJldHVybiBuZXcgYyAoYVswXSk7XG4gIGNhc2UgMjogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0pO1xuICBjYXNlIDM6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdLGFbMl0pO1xuICBjYXNlIDQ6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdLGFbMl0sYVszXSk7XG4gIGNhc2UgNTogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdLGFbNF0pO1xuICBjYXNlIDY6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0pO1xuICBjYXNlIDc6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSk7XG4gIH1cbiAgZnVuY3Rpb24gRigpIHsgcmV0dXJuIGMuYXBwbHkodGhpcywgYSk7IH1cbiAgRi5wcm90b3R5cGUgPSBjLnByb3RvdHlwZTtcbiAgcmV0dXJuIG5ldyBGO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFjayhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgaWYobGVuID4gMCl7XG4gICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncyA9IFt1bmRlZmluZWRdO1xuICAgIH1cbiAgICB2YXIgcmVzID0gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgICByZXR1cm4gKHJlcyBpbnN0YW5jZW9mIEZ1bmN0aW9uKT9jYW1sX2pzX3dyYXBfY2FsbGJhY2socmVzKTpyZXM7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1xuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50cyhmKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgW2FyZ3NdKTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdChhcml0eSwgZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcml0eSk7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGgsIGFyaXR5KVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfdW5zYWZlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmUoZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTsgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2sgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFjaywgY2FtbF9qc193cmFwX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFjayhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgYXJnc1swXSA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpKzFdID0gYXJndW1lbnRzW2ldO1xuICAgIHZhciByZXMgPSBjYW1sX2NhbGxiYWNrKGYsYXJncyk7XG4gICAgcmV0dXJuIChyZXMgaW5zdGFuY2VvZiBGdW5jdGlvbik/Y2FtbF9qc193cmFwX2NhbGxiYWNrKHJlcyk6cmVzO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHMgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZixbdGhpcyxhcmdzXSk7XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJpdHkgKyAxKTtcbiAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCwgYXJpdHkpXG4gICAgYXJnc1swXSA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpKzFdID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpO1xuICB9O1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZShmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikgLSAxO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICAgIGFyZ3NbMF0gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaSsxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTsgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG4vL0lmOiAhZWZmZWN0c1xuZnVuY3Rpb24gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKSB7XG4gIHJldHVybiAoZi5sID49IDApP2YubDooZi5sID0gZi5sZW5ndGgpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbi8vSWY6IGVmZmVjdHNcbmZ1bmN0aW9uIGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikge1xuICAvLyBGdW5jdGlvbnMgaGF2ZSBhbiBhZGRpdGlvbmFsIGNvbnRpbnVhdGlvbiBwYXJhbWV0ZXIuIFRoaXMgc2hvdWxkXG4gIC8vIG5vdCBiZSB2aXNpYmxlIHdoZW4gY2FsbGluZyB0aGVtIGZyb20gSmF2YVNjcmlwdFxuICByZXR1cm4gKChmLmwgPj0gMCk/Zi5sOihmLmwgPSBmLmxlbmd0aCkpIC0gMVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2VxdWFscyBtdXRhYmxlIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2VxdWFscyAoeCwgeSkgeyByZXR1cm4gKyh4ID09IHkpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfc3RyaWN0X2VxdWFscyBtdXRhYmxlIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3N0cmljdF9lcXVhbHMgKHgsIHkpIHsgcmV0dXJuICsoeCA9PT0geSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19ldmFsX3N0cmluZyAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19ldmFsX3N0cmluZyAocykge3JldHVybiBldmFsKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpKTt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXhwciAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19leHByKHMpIHtcbiAgY29uc29sZS5lcnJvcihcImNhbWxfanNfZXhwcjogZmFsbGJhY2sgdG8gcnVudGltZSBldmFsdWF0aW9uXFxuXCIpO1xuICByZXR1cm4gZXZhbChjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKSk7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3B1cmVfanNfZXhwciBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9wdXJlX2pzX2V4cHIgKHMpe1xuICBjb25zb2xlLmVycm9yKFwiY2FtbF9wdXJlX2pzX2V4cHI6IGZhbGxiYWNrIHRvIHJ1bnRpbWUgZXZhbHVhdGlvblxcblwiKTtcbiAgcmV0dXJuIGV2YWwoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO31cblxuLy9Qcm92aWRlczogY2FtbF9qc19vYmplY3QgKG9iamVjdF9saXRlcmFsKVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfb2JqZWN0IChhKSB7XG4gIHZhciBvID0ge307XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwID0gYVtpXTtcbiAgICBvW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHBbMV0pXSA9IHBbMl07XG4gIH1cbiAgcmV0dXJuIG87XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1JhaXNlIGV4Y2VwdGlvblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX2NvbnN0YW50IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfcmFpc2VfY29uc3RhbnQgKHRhZykgeyB0aHJvdyB0YWc7IH1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV93aXRoX2FyZyAoY29uc3QsIG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2VcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfd2l0aF9hcmcgKHRhZywgYXJnKSB7IHRocm93IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZShbMCwgdGFnLCBhcmddKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3dpdGhfYXJncyAoY29uc3QsIG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2VcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfd2l0aF9hcmdzICh0YWcsIGFyZ3MpIHsgdGhyb3cgY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKFswLCB0YWddLmNvbmNhdChhcmdzKSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZyAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX2FyZywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9yYWlzZV93aXRoX3N0cmluZyAodGFnLCBtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX2FyZyAodGFnLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG1zZykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZhaWx3aXRoIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcsIGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZmFpbHdpdGggKG1zZykge1xuICBpZighY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlKVxuICAgIGNhbWxfZ2xvYmFsX2RhdGEuRmFpbHVyZT1bMjQ4LGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJGYWlsdXJlXCIpLC0zXTtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUsIG1zZyk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfaW52YWxpZF9hcmd1bWVudCAobXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5JbnZhbGlkX2FyZ3VtZW50LCBtc2cpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlICgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLkVuZF9vZl9maWxlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9jb25zdGFudCwgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKSB7XG4gIGNhbWxfcmFpc2VfY29uc3RhbnQoY2FtbF9nbG9iYWxfZGF0YS5EaXZpc2lvbl9ieV96ZXJvKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfbm90X2ZvdW5kICgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLk5vdF9mb3VuZCk7IH1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGpzb29fZmxvb3JfbG9nMlxudmFyIGxvZzJfb2sgPSBNYXRoLmxvZzIgJiYgTWF0aC5sb2cyKDEuMTIzNTU4MjA5Mjg4OTQ3NEUrMzA3KSA9PSAxMDIwXG5mdW5jdGlvbiBqc29vX2Zsb29yX2xvZzIoeCkge1xuICBpZihsb2cyX29rKSByZXR1cm4gTWF0aC5mbG9vcihNYXRoLmxvZzIoeCkpXG4gIHZhciBpID0gMDtcbiAgaWYgKHggPT0gMCkgcmV0dXJuIC1JbmZpbml0eTtcbiAgaWYoeD49MSkge3doaWxlICh4Pj0yKSB7eC89MjsgaSsrfSB9XG4gIGVsc2Uge3doaWxlICh4IDwgMSkge3gqPTI7IGktLX0gfTtcbiAgcmV0dXJuIGk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczoganNvb19mbG9vcl9sb2cyLCBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaVxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0ICh4KSB7XG4gIGlmICghaXNGaW5pdGUoeCkpIHtcbiAgICBpZiAoaXNOYU4oeCkpXG4gICAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkoMSwgMCwgMHg3ZmYwKTtcbiAgICBpZiAoeCA+IDApXG4gICAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkoMCwgMCwgMHg3ZmYwKVxuICAgIGVsc2VcbiAgICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSgwLCAwLCAweGZmZjApXG4gIH1cbiAgdmFyIHNpZ24gPSAoeD09MCAmJiAxL3ggPT0gLUluZmluaXR5KT8weDgwMDA6KHg+PTApPzA6MHg4MDAwO1xuICBpZiAoc2lnbikgeCA9IC14O1xuICAvLyBJbnQ2NC5iaXRzX29mX2Zsb2F0IDEuMTIzNTU4MjA5Mjg4OTQ3NEUrMzA3ID0gMHg3ZmIwMDAwMDAwMDAwMDAwTFxuICAvLyB1c2luZyBNYXRoLkxPRzJFKk1hdGgubG9nKHgpIGluIHBsYWNlIG9mIE1hdGgubG9nMiByZXN1bHQgaW4gcHJlY2lzaW9uIGxvc3RcbiAgdmFyIGV4cCA9IGpzb29fZmxvb3JfbG9nMih4KSArIDEwMjM7XG4gIGlmIChleHAgPD0gMCkge1xuICAgIGV4cCA9IDA7XG4gICAgeCAvPSBNYXRoLnBvdygyLC0xMDI2KTtcbiAgfSBlbHNlIHtcbiAgICB4IC89IE1hdGgucG93KDIsZXhwLTEwMjcpO1xuICAgIGlmICh4IDwgMTYpIHtcbiAgICAgIHggKj0gMjsgZXhwIC09MTsgfVxuICAgIGlmIChleHAgPT0gMCkge1xuICAgICAgeCAvPSAyOyB9XG4gIH1cbiAgdmFyIGsgPSBNYXRoLnBvdygyLDI0KTtcbiAgdmFyIHIzID0geHwwO1xuICB4ID0gKHggLSByMykgKiBrO1xuICB2YXIgcjIgPSB4fDA7XG4gIHggPSAoeCAtIHIyKSAqIGs7XG4gIHZhciByMSA9IHh8MDtcbiAgcjMgPSAocjMgJjB4ZikgfCBzaWduIHwgZXhwIDw8IDQ7XG4gIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaShyMSwgcjIsIHIzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2Zsb29yX2xvZzJcbmZ1bmN0aW9uIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdCAoeCkge1xuICB2YXIgZmxvYXQzMmEgPSBuZXcgRmxvYXQzMkFycmF5KDEpO1xuICBmbG9hdDMyYVswXSA9IHg7XG4gIHZhciBpbnQzMmEgPSBuZXcgSW50MzJBcnJheShmbG9hdDMyYS5idWZmZXIpO1xuICByZXR1cm4gaW50MzJhWzBdIHwgMDtcbn1cblxuLy9GUCBsaXRlcmFscyBjYW4gYmUgd3JpdHRlbiB1c2luZyB0aGUgaGV4YWRlY2ltYWxcbi8vbm90YXRpb24gMHg8bWFudGlzc2EgaW4gaGV4PnA8ZXhwb25lbnQ+IGZyb20gSVNPIEM5OS5cbi8vaHR0cHM6Ly9naXRodWIuY29tL2RhbmtvZ2FpL2pzLWhleGZsb2F0L2Jsb2IvbWFzdGVyL2hleGZsb2F0LmpzXG4vL1Byb3ZpZGVzOiBjYW1sX2hleHN0cmluZ19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcsIGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQgKHgsIHByZWMsIHN0eWxlKSB7XG4gIGlmICghaXNGaW5pdGUoeCkpIHtcbiAgICBpZiAoaXNOYU4oeCkpIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhcIm5hblwiKTtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKCh4ID4gMCk/XCJpbmZpbml0eVwiOlwiLWluZmluaXR5XCIpO1xuICB9XG4gIHZhciBzaWduID0gKHg9PTAgJiYgMS94ID09IC1JbmZpbml0eSk/MTooeD49MCk/MDoxO1xuICBpZihzaWduKSB4ID0gLXg7XG4gIHZhciBleHAgPSAwO1xuICBpZiAoeCA9PSAwKSB7IH1cbiAgZWxzZSBpZiAoeCA8IDEpIHtcbiAgICB3aGlsZSAoeCA8IDEgJiYgZXhwID4gLTEwMjIpICB7IHggKj0gMjsgZXhwLS0gfVxuICB9IGVsc2Uge1xuICAgIHdoaWxlICh4ID49IDIpIHsgeCAvPSAyOyBleHArKyB9XG4gIH1cbiAgdmFyIGV4cF9zaWduID0gZXhwIDwgMCA/ICcnIDogJysnO1xuICB2YXIgc2lnbl9zdHIgPSAnJztcbiAgaWYgKHNpZ24pIHNpZ25fc3RyID0gJy0nXG4gIGVsc2Uge1xuICAgIHN3aXRjaChzdHlsZSl7XG4gICAgY2FzZSA0MyAvKiAnKycgKi86IHNpZ25fc3RyID0gJysnOyBicmVhaztcbiAgICBjYXNlIDMyIC8qICcgJyAqLzogc2lnbl9zdHIgPSAnICc7IGJyZWFrO1xuICAgIGRlZmF1bHQ6IGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAocHJlYyA+PSAwICYmIHByZWMgPCAxMykge1xuICAgIC8qIElmIGEgcHJlY2lzaW9uIGlzIGdpdmVuLCBhbmQgaXMgc21hbGwsIHJvdW5kIG1hbnRpc3NhIGFjY29yZGluZ2x5ICovXG4gICAgdmFyIGNzdCA9IE1hdGgucG93KDIscHJlYyAqIDQpO1xuICAgIHggPSBNYXRoLnJvdW5kKHggKiBjc3QpIC8gY3N0O1xuICB9XG4gIHZhciB4X3N0ciA9IHgudG9TdHJpbmcoMTYpO1xuICBpZihwcmVjID49IDApe1xuICAgIHZhciBpZHggPSB4X3N0ci5pbmRleE9mKCcuJyk7XG4gICAgaWYoaWR4PDApIHtcbiAgICAgIHhfc3RyICs9ICcuJyArIGNhbWxfc3RyX3JlcGVhdChwcmVjLCAnMCcpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBzaXplID0gaWR4KzErcHJlYztcbiAgICAgIGlmKHhfc3RyLmxlbmd0aCA8IHNpemUpXG4gICAgICAgIHhfc3RyICs9IGNhbWxfc3RyX3JlcGVhdChzaXplIC0geF9zdHIubGVuZ3RoLCAnMCcpO1xuICAgICAgZWxzZVxuICAgICAgICB4X3N0ciA9IHhfc3RyLnN1YnN0cigwLHNpemUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHNpZ25fc3RyICsgJzB4JyArIHhfc3RyICsgJ3AnICsgZXhwX3NpZ24gKyBleHAudG9TdHJpbmcoMTApKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgKHgpIHtcbiAgdmFyIGxvID0geC5sbztcbiAgdmFyIG1pID0geC5taTtcbiAgdmFyIGhpID0geC5oaTtcbiAgdmFyIGV4cCA9IChoaSAmIDB4N2ZmZikgPj4gNDtcbiAgaWYgKGV4cCA9PSAyMDQ3KSB7XG4gICAgaWYgKChsb3xtaXwoaGkmMHhmKSkgPT0gMClcbiAgICAgIHJldHVybiAoaGkgJiAweDgwMDApPygtSW5maW5pdHkpOkluZmluaXR5O1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBOYU47XG4gIH1cbiAgdmFyIGsgPSBNYXRoLnBvdygyLC0yNCk7XG4gIHZhciByZXMgPSAobG8qayttaSkqaysoaGkmMHhmKTtcbiAgaWYgKGV4cCA+IDApIHtcbiAgICByZXMgKz0gMTY7XG4gICAgcmVzICo9IE1hdGgucG93KDIsZXhwLTEwMjcpO1xuICB9IGVsc2VcbiAgICByZXMgKj0gTWF0aC5wb3coMiwtMTAyNik7XG4gIGlmIChoaSAmIDB4ODAwMCkgcmVzID0gLSByZXM7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmV4dGFmdGVyX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMsIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCwgY2FtbF9pbnQ2NF9hZGQsIGNhbWxfaW50NjRfc3ViLGNhbWxfaW50NjRfb2ZfaW50MzJcbmZ1bmN0aW9uIGNhbWxfbmV4dGFmdGVyX2Zsb2F0ICh4LHkpIHtcbiAgaWYoaXNOYU4oeCkgfHwgaXNOYU4oeSkpIHJldHVybiBOYU47XG4gIGlmKHg9PXkpIHJldHVybiB5O1xuICBpZih4PT0wKXtcbiAgICBpZih5IDwgMClcbiAgICAgIHJldHVybiAtTWF0aC5wb3coMiwgLTEwNzQpXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIE1hdGgucG93KDIsIC0xMDc0KVxuICB9XG4gIHZhciBiaXRzID0gY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHgpO1xuICB2YXIgb25lID0gY2FtbF9pbnQ2NF9vZl9pbnQzMigxKTtcbiAgaWYgKCh4PHkpID09ICh4PjApKVxuICAgIGJpdHMgPSBjYW1sX2ludDY0X2FkZChiaXRzLCBvbmUpXG4gIGVsc2VcbiAgICBiaXRzID0gY2FtbF9pbnQ2NF9zdWIoYml0cywgb25lKVxuICByZXR1cm4gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGJpdHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RydW5jX2Zsb2F0XG5mdW5jdGlvbiBjYW1sX3RydW5jX2Zsb2F0KHgpe1xuICByZXR1cm4gTWF0aC50cnVuYyh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMgKHgpIHtcbiAgdmFyIGludDMyYSA9IG5ldyBJbnQzMkFycmF5KDEpO1xuICBpbnQzMmFbMF0gPSB4O1xuICB2YXIgZmxvYXQzMmEgPSBuZXcgRmxvYXQzMkFycmF5KGludDMyYS5idWZmZXIpO1xuICByZXR1cm4gZmxvYXQzMmFbMF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2xhc3NpZnlfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY2xhc3NpZnlfZmxvYXQgKHgpIHtcbiAgaWYgKGlzRmluaXRlICh4KSkge1xuICAgIGlmIChNYXRoLmFicyh4KSA+PSAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwOCkgcmV0dXJuIDA7XG4gICAgaWYgKHggIT0gMCkgcmV0dXJuIDE7XG4gICAgcmV0dXJuIDI7XG4gIH1cbiAgcmV0dXJuIGlzTmFOKHgpPzQ6Mztcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbW9kZl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tb2RmX2Zsb2F0ICh4KSB7XG4gIGlmIChpc0Zpbml0ZSAoeCkpIHtcbiAgICB2YXIgbmVnID0gKDEveCkgPCAwO1xuICAgIHggPSBNYXRoLmFicyh4KTtcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IgKHgpO1xuICAgIHZhciBmID0geCAtIGk7XG4gICAgaWYgKG5lZykgeyBpID0gLWk7IGYgPSAtZjsgfVxuICAgIHJldHVybiBbMCwgZiwgaV07XG4gIH1cbiAgaWYgKGlzTmFOICh4KSkgcmV0dXJuIFswLCBOYU4sIE5hTl07XG4gIHJldHVybiBbMCwgMS94LCB4XTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbGRleHBfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbGRleHBfZmxvYXQgKHgsZXhwKSB7XG4gIGV4cCB8PSAwO1xuICBpZiAoZXhwID4gMTAyMykge1xuICAgIGV4cCAtPSAxMDIzO1xuICAgIHggKj0gTWF0aC5wb3coMiwgMTAyMyk7XG4gICAgaWYgKGV4cCA+IDEwMjMpIHsgIC8vIGluIGNhc2UgeCBpcyBzdWJub3JtYWxcbiAgICAgIGV4cCAtPSAxMDIzO1xuICAgICAgeCAqPSBNYXRoLnBvdygyLCAxMDIzKTtcbiAgICB9XG4gIH1cbiAgaWYgKGV4cCA8IC0xMDIzKSB7XG4gICAgZXhwICs9IDEwMjM7XG4gICAgeCAqPSBNYXRoLnBvdygyLCAtMTAyMyk7XG4gIH1cbiAgeCAqPSBNYXRoLnBvdygyLCBleHApO1xuICByZXR1cm4geDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZnJleHBfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZmxvb3JfbG9nMlxuZnVuY3Rpb24gY2FtbF9mcmV4cF9mbG9hdCAoeCkge1xuICBpZiAoKHggPT0gMCkgfHwgIWlzRmluaXRlKHgpKSByZXR1cm4gWzAsIHgsIDBdO1xuICB2YXIgbmVnID0geCA8IDA7XG4gIGlmIChuZWcpIHggPSAtIHg7XG4gIHZhciBleHAgPSBNYXRoLm1heCgtMTAyMywganNvb19mbG9vcl9sb2cyKHgpICsgMSk7XG4gIHggKj0gTWF0aC5wb3coMiwtZXhwKTtcbiAgd2hpbGUgKHggPCAwLjUpIHtcbiAgICB4ICo9IDI7XG4gICAgZXhwLS07XG4gIH1cbiAgd2hpbGUgKHggPj0gMSkge1xuICAgIHggKj0gMC41O1xuICAgIGV4cCsrO1xuICB9XG4gIGlmIChuZWcpIHggPSAtIHg7XG4gIHJldHVybiBbMCwgeCwgZXhwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9jb21wYXJlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Zsb2F0X2NvbXBhcmUgKHgsIHkpIHtcbiAgaWYgKHggPT09IHkpIHJldHVybiAwO1xuICBpZiAoeCA8IHkpIHJldHVybiAtMTtcbiAgaWYgKHggPiB5KSByZXR1cm4gMTtcbiAgaWYgKHggPT09IHgpIHJldHVybiAxO1xuICBpZiAoeSA9PT0geSkgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb3B5c2lnbl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jb3B5c2lnbl9mbG9hdCAoeCwgeSkge1xuICBpZiAoeSA9PSAwKSB5ID0gMSAvIHk7XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgcmV0dXJuICh5IDwgMCk/KC14KTp4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NpZ25iaXRfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc2lnbmJpdF9mbG9hdCh4KSB7XG4gIGlmICh4ID09IDApIHggPSAxIC8geDtcbiAgcmV0dXJuICh4IDwgMCk/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2V4cG0xX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2V4cG0xX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmV4cG0xKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2V4cDJfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXhwMl9mbG9hdCh4KSB7IHJldHVybiBNYXRoLnBvdygyLCB4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9sb2cxcF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sb2cxcF9mbG9hdCh4KSB7IHJldHVybiBNYXRoLmxvZzFwKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzJfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMl9mbG9hdCh4KSB7IHJldHVybiBNYXRoLmxvZzIoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfaHlwb3RfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaHlwb3RfZmxvYXQgKHgsIHkpIHsgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbG9nMTBfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMTBfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGgubG9nMTAoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfY29zaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jb3NoX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmNvc2goeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYWNvc2hfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYWNvc2hfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguYWNvc2goeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfc2luaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9zaW5oX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLnNpbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYXNpbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYXNpbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguYXNpbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfdGFuaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF90YW5oX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLnRhbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYXRhbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYXRhbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguYXRhbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfcm91bmRfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfcm91bmRfZmxvYXQgKHgpIHtcbiAgaWYgKHggPj0gMCkge1xuICAgIHZhciB5ID0gTWF0aC5mbG9vcih4KTtcbiAgICByZXR1cm4gKHggLSB5ID49IDAuNSk/KHkgKyAxKTp5XG4gIH0gZWxzZSB7XG4gICAgdmFyIHkgPSBNYXRoLmNlaWwoeCk7XG4gICAgcmV0dXJuICh5IC0geCA+PSAwLjUpPyh5IC0gMSk6eVxuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2NicnRfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY2JydF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5jYnJ0KHgpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXJmX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2VyZl9mbG9hdCh4KSB7XG4gIHZhciBhMSA9IDAuMjU0ODI5NTkyO1xuICB2YXIgYTIgPSAtMC4yODQ0OTY3MzY7XG4gIHZhciBhMyA9IDEuNDIxNDEzNzQxO1xuICB2YXIgYTQgPSAtMS40NTMxNTIwMjc7XG4gIHZhciBhNSA9IDEuMDYxNDA1NDI5O1xuICB2YXIgcCA9IDAuMzI3NTkxMTtcblxuICB2YXIgc2lnbiA9IDE7XG4gIGlmICh4IDwgMCkge1xuICAgIHNpZ24gPSAtMTtcbiAgfVxuICB4ID0gTWF0aC5hYnMoeCk7XG4gIHZhciB0ID0gMS4wIC8gKDEuMCArIHAgKiB4KTtcbiAgdmFyIHkgPSAxLjAgLSAoKCgoYTUgKiB0ICsgYTQpICogdCArIGEzKSAqIHQgKyBhMikgKiB0ICsgYTEpICogdCAqIE1hdGguZXhwKC14ICogeCk7XG5cbiAgcmV0dXJuIHNpZ24gKiB5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VyZmNfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfZXJmX2Zsb2F0XG5mdW5jdGlvbiBjYW1sX2VyZmNfZmxvYXQoeCkge1xuICByZXR1cm4gMSAtIGNhbWxfZXJmX2Zsb2F0KHgpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZm1hX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ZtYV9mbG9hdCh4LCB5LCB6KSB7XG4gIHZhciBTUExJVCA9IE1hdGgucG93KDIsIDI3KSArIDE7XG4gIHZhciBNSU5fVkFMVUUgPSBNYXRoLnBvdygyLCAtMTAyMik7XG4gIHZhciBFUFNJTE9OID0gTWF0aC5wb3coMiwgLTUyKTtcbiAgdmFyIEMgPSA0MTY7XG4gIHZhciBBID0gTWF0aC5wb3coMiwgK0MpO1xuICB2YXIgQiA9IE1hdGgucG93KDIsIC1DKTtcblxuICBmdW5jdGlvbiBtdWx0aXBseSAoYSwgYikge1xuICAgIHZhciBhdCA9IFNQTElUICogYTtcbiAgICB2YXIgYWhpID0gYXQgLSAoYXQgLSBhKTtcbiAgICB2YXIgYWxvID0gYSAtIGFoaTtcbiAgICB2YXIgYnQgPSBTUExJVCAqIGI7XG4gICAgdmFyIGJoaSA9IGJ0IC0gKGJ0IC0gYik7XG4gICAgdmFyIGJsbyA9IGIgLSBiaGk7XG4gICAgdmFyIHAgPSBhICogYjtcbiAgICB2YXIgZSA9ICgoYWhpICogYmhpIC0gcCkgKyBhaGkgKiBibG8gKyBhbG8gKiBiaGkpICsgYWxvICogYmxvO1xuICAgIHJldHVybiB7XG4gICAgICBwOiBwLFxuICAgICAgZTogZVxuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gYWRkIChhLCBiKSB7XG4gICAgdmFyIHMgPSBhICsgYjtcbiAgICB2YXIgdiA9IHMgLSBhO1xuICAgIHZhciBlID0gKGEgLSAocyAtIHYpKSArIChiIC0gdik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHM6IHMsXG4gICAgICBlOiBlXG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBhZGp1c3QgKHgsIHkpIHtcbiAgICByZXR1cm4geCAhPT0gMCAmJiB5ICE9PSAwICYmIFNQTElUICogeCAtIChTUExJVCAqIHggLSB4KSA9PT0geCA/IHggKiAoMSArICh4IDwgMCA/IC0xIDogKzEpICogKHkgPCAwID8gLTEgOiArMSkgKiBFUFNJTE9OKSA6IHg7XG4gIH07XG5cbiAgaWYgKHggPT09IDAgfHwgeCAhPT0geCB8fCB4ID09PSArMSAvIDAgfHwgeCA9PT0gLTEgLyAwIHx8XG4gICAgICB5ID09PSAwIHx8IHkgIT09IHkgfHwgeSA9PT0gKzEgLyAwIHx8IHkgPT09IC0xIC8gMCkge1xuICAgIHJldHVybiB4ICogeSArIHo7XG4gIH1cbiAgaWYgKHogPT09IDApIHtcbiAgICByZXR1cm4geCAqIHk7XG4gIH1cbiAgaWYgKHogIT09IHogfHwgeiA9PT0gKzEgLyAwIHx8IHogPT09IC0xIC8gMCkge1xuICAgIHJldHVybiB6O1xuICB9XG5cbiAgdmFyIHNjYWxlID0gMTtcbiAgd2hpbGUgKE1hdGguYWJzKHgpID4gQSkge1xuICAgIHNjYWxlICo9IEE7XG4gICAgeCAqPSBCO1xuICB9XG4gIHdoaWxlIChNYXRoLmFicyh5KSA+IEEpIHtcbiAgICBzY2FsZSAqPSBBO1xuICAgIHkgKj0gQjtcbiAgfVxuICBpZiAoc2NhbGUgPT09IDEgLyAwKSB7XG4gICAgcmV0dXJuIHggKiB5ICogc2NhbGU7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHgpIDwgQikge1xuICAgIHNjYWxlICo9IEI7XG4gICAgeCAqPSBBO1xuICB9XG4gIHdoaWxlIChNYXRoLmFicyh5KSA8IEIpIHtcbiAgICBzY2FsZSAqPSBCO1xuICAgIHkgKj0gQTtcbiAgfVxuICBpZiAoc2NhbGUgPT09IDApIHtcbiAgICByZXR1cm4gejtcbiAgfVxuXG4gIHZhciB4cyA9IHg7XG4gIHZhciB5cyA9IHk7XG4gIHZhciB6cyA9IHogLyBzY2FsZTtcblxuICBpZiAoTWF0aC5hYnMoenMpID4gTWF0aC5hYnMoeHMgKiB5cykgKiA0IC8gRVBTSUxPTikge1xuICAgIHJldHVybiB6O1xuICB9XG4gIGlmIChNYXRoLmFicyh6cykgPCBNYXRoLmFicyh4cyAqIHlzKSAqIEVQU0lMT04gLyA0ICogRVBTSUxPTiAvIDQpIHtcbiAgICB6cyA9ICh6IDwgMCA/IC0xIDogKzEpICogTUlOX1ZBTFVFO1xuICB9XG5cbiAgdmFyIHh5ID0gbXVsdGlwbHkoeHMsIHlzKTtcbiAgdmFyIHMgPSBhZGQoeHkucCwgenMpO1xuICB2YXIgdSA9IGFkZCh4eS5lLCBzLmUpO1xuICB2YXIgaSA9IGFkZChzLnMsIHUucyk7XG5cbiAgdmFyIGYgPSBpLnMgKyBhZGp1c3QoaS5lLCB1LmUpO1xuICBpZiAoZiA9PT0gMCkge1xuICAgIHJldHVybiBmO1xuICB9XG5cbiAgdmFyIGZzID0gZiAqIHNjYWxlO1xuICBpZiAoTWF0aC5hYnMoZnMpID4gTUlOX1ZBTFVFKSB7XG4gICAgcmV0dXJuIGZzO1xuICB9XG5cbiAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCB0aGVyZSB3YXMgZXh0cmEgcm91bmRpbmcgZm9yIGEgZGVub3JtYWxpemVkIHZhbHVlLlxuICByZXR1cm4gZnMgKyBhZGp1c3QoZiAtIGZzIC8gc2NhbGUsIGkuZSkgKiBzY2FsZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2VfZm9ybWF0LCBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9mbG9hdCAoZm10LCB4KSB7XG4gIGZ1bmN0aW9uIHRvRml4ZWQoeCxkcCkge1xuICAgIGlmIChNYXRoLmFicyh4KSA8IDEuMCkge1xuICAgICAgcmV0dXJuIHgudG9GaXhlZChkcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlID0gcGFyc2VJbnQoeC50b1N0cmluZygpLnNwbGl0KCcrJylbMV0pO1xuICAgICAgaWYgKGUgPiAyMCkge1xuICAgICAgICBlIC09IDIwO1xuICAgICAgICB4IC89IE1hdGgucG93KDEwLGUpO1xuICAgICAgICB4ICs9IChuZXcgQXJyYXkoZSsxKSkuam9pbignMCcpO1xuICAgICAgICBpZihkcCA+IDApIHtcbiAgICAgICAgICB4ID0geCArICcuJyArIChuZXcgQXJyYXkoZHArMSkpLmpvaW4oJzAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geDtcbiAgICAgIH1cbiAgICAgIGVsc2UgcmV0dXJuIHgudG9GaXhlZChkcClcbiAgICB9XG4gIH1cbiAgdmFyIHMsIGYgPSBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpO1xuICB2YXIgcHJlYyA9IChmLnByZWMgPCAwKT82OmYucHJlYztcbiAgaWYgKHggPCAwIHx8ICh4ID09IDAgJiYgMS94ID09IC1JbmZpbml0eSkpIHsgZi5zaWduID0gLTE7IHggPSAteDsgfVxuICBpZiAoaXNOYU4oeCkpIHsgcyA9IFwibmFuXCI7IGYuZmlsbGVyID0gJyAnOyB9XG4gIGVsc2UgaWYgKCFpc0Zpbml0ZSh4KSkgeyBzID0gXCJpbmZcIjsgZi5maWxsZXIgPSAnICc7IH1cbiAgZWxzZVxuICAgIHN3aXRjaCAoZi5jb252KSB7XG4gICAgY2FzZSAnZSc6XG4gICAgICB2YXIgcyA9IHgudG9FeHBvbmVudGlhbChwcmVjKTtcbiAgICAgIC8vIGV4cG9uZW50IHNob3VsZCBiZSBhdCBsZWFzdCB0d28gZGlnaXRzXG4gICAgICB2YXIgaSA9IHMubGVuZ3RoO1xuICAgICAgaWYgKHMuY2hhckF0KGkgLSAzKSA9PSAnZScpXG4gICAgICAgIHMgPSBzLnNsaWNlICgwLCBpIC0gMSkgKyAnMCcgKyBzLnNsaWNlIChpIC0gMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmJzpcbiAgICAgIHMgPSB0b0ZpeGVkKHgsIHByZWMpOyBicmVhaztcbiAgICBjYXNlICdnJzpcbiAgICAgIHByZWMgPSBwcmVjP3ByZWM6MTtcbiAgICAgIHMgPSB4LnRvRXhwb25lbnRpYWwocHJlYyAtIDEpO1xuICAgICAgdmFyIGogPSBzLmluZGV4T2YoJ2UnKTtcbiAgICAgIHZhciBleHAgPSArcy5zbGljZShqICsgMSk7XG4gICAgICBpZiAoZXhwIDwgLTQgfHwgeCA+PSAxZTIxIHx8IHgudG9GaXhlZCgwKS5sZW5ndGggPiBwcmVjKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvZXNcbiAgICAgICAgdmFyIGkgPSBqIC0gMTsgd2hpbGUgKHMuY2hhckF0KGkpID09ICcwJykgaS0tO1xuICAgICAgICBpZiAocy5jaGFyQXQoaSkgPT0gJy4nKSBpLS07XG4gICAgICAgIHMgPSBzLnNsaWNlKDAsIGkgKyAxKSArIHMuc2xpY2Uoaik7XG4gICAgICAgIGkgPSBzLmxlbmd0aDtcbiAgICAgICAgaWYgKHMuY2hhckF0KGkgLSAzKSA9PSAnZScpXG4gICAgICAgICAgcyA9IHMuc2xpY2UgKDAsIGkgLSAxKSArICcwJyArIHMuc2xpY2UgKGkgLSAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcCA9IHByZWM7XG4gICAgICAgIGlmIChleHAgPCAwKSB7IHAgLT0gZXhwICsgMTsgcyA9IHgudG9GaXhlZChwKTsgfVxuICAgICAgICBlbHNlIHdoaWxlIChzID0geC50b0ZpeGVkKHApLCBzLmxlbmd0aCA+IHByZWMgKyAxKSBwLS07XG4gICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHplcm9lc1xuICAgICAgICAgIHZhciBpID0gcy5sZW5ndGggLSAxOyB3aGlsZSAocy5jaGFyQXQoaSkgPT0gJzAnKSBpLS07XG4gICAgICAgICAgaWYgKHMuY2hhckF0KGkpID09ICcuJykgaS0tO1xuICAgICAgICAgIHMgPSBzLnNsaWNlKDAsIGkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICByZXR1cm4gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCBzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9vZl9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9mbG9hdF9vZl9zdHJpbmcocykge1xuICB2YXIgcmVzO1xuICBzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKVxuICByZXMgPSArcztcbiAgaWYgKChzLmxlbmd0aCA+IDApICYmIChyZXMgPT09IHJlcykpIHJldHVybiByZXM7XG4gIHMgPSBzLnJlcGxhY2UoL18vZyxcIlwiKTtcbiAgcmVzID0gK3M7XG4gIGlmICgoKHMubGVuZ3RoID4gMCkgJiYgKHJlcyA9PT0gcmVzKSkgfHwgL15bKy1dP25hbiQvaS50ZXN0KHMpKSByZXR1cm4gcmVzO1xuICB2YXIgbSA9IC9eICooWystXT8pMHgoWzAtOWEtZl0rKVxcLj8oWzAtOWEtZl0qKShwKFsrLV0/WzAtOV0rKSk/L2kuZXhlYyhzKTtcbiAgLy8gICAgICAgICAgMSAgICAgICAgMiAgICAgICAgICAgICAzICAgICAgICAgICA1XG4gIGlmKG0pe1xuICAgIHZhciBtMyA9IG1bM10ucmVwbGFjZSgvMCskLywnJyk7XG4gICAgdmFyIG1hbnRpc3NhID0gcGFyc2VJbnQobVsxXSArIG1bMl0gKyBtMywgMTYpO1xuICAgIHZhciBleHBvbmVudCA9IChtWzVdfDApIC0gNCptMy5sZW5ndGg7XG4gICAgcmVzID0gbWFudGlzc2EgKiBNYXRoLnBvdygyLCBleHBvbmVudCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBpZigvXlxcKz9pbmYoaW5pdHkpPyQvaS50ZXN0KHMpKSByZXR1cm4gSW5maW5pdHk7XG4gIGlmKC9eLWluZihpbml0eSk/JC9pLnRlc3QocykpIHJldHVybiAtSW5maW5pdHk7XG4gIGNhbWxfZmFpbHdpdGgoXCJmbG9hdF9vZl9zdHJpbmdcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VwZGF0ZV9kdW1teVxuZnVuY3Rpb24gY2FtbF91cGRhdGVfZHVtbXkgKHgsIHkpIHtcbiAgaWYoIHkuZnVuICkgeyB4LmZ1biA9IHkuZnVuOyByZXR1cm4gMDsgfVxuICBpZiggdHlwZW9mIHk9PT1cImZ1bmN0aW9uXCIgKSB7IHguZnVuID0geTsgcmV0dXJuIDA7IH1cbiAgdmFyIGkgPSB5Lmxlbmd0aDsgd2hpbGUgKGktLSkgeFtpXSA9IHlbaV07IHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FsbG9jX2R1bW15X2luZml4XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxfZ2VuXG5mdW5jdGlvbiBjYW1sX2FsbG9jX2R1bW15X2luZml4ICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGYgKHgpIHsgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZi5mdW4sIFt4XSkgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9pc19ibG9jayBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX29ial9pc19ibG9jayAoeCkgeyByZXR1cm4gKyh4IGluc3RhbmNlb2YgQXJyYXkpOyB9XG5cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX2lzX21sX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9vYmpfdGFnICh4KSB7XG4gIGlmICgoeCBpbnN0YW5jZW9mIEFycmF5KSAmJiB4WzBdID09ICh4WzBdID4+PiAwKSlcbiAgICByZXR1cm4geFswXVxuICBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHgpKVxuICAgIHJldHVybiAyNTJcbiAgZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcoeCkpXG4gICAgcmV0dXJuIDI1MlxuICBlbHNlIGlmICgoeCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB8fCB0eXBlb2YgeCA9PSBcImZ1bmN0aW9uXCIpXG4gICAgcmV0dXJuIDI0N1xuICBlbHNlIGlmICh4ICYmIHguY2FtbF9jdXN0b20pXG4gICAgcmV0dXJuIDI1NVxuICBlbHNlXG4gICAgcmV0dXJuIDEwMDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfc2V0X3RhZyAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX29ial9zZXRfdGFnICh4LCB0YWcpIHsgeFswXSA9IHRhZzsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2Jsb2NrIGNvbnN0IChjb25zdCxjb25zdClcbmZ1bmN0aW9uIGNhbWxfb2JqX2Jsb2NrICh0YWcsIHNpemUpIHtcbiAgdmFyIG8gPSBuZXcgQXJyYXkoc2l6ZSsxKTtcbiAgb1swXT10YWc7XG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IHNpemU7IGkrKykgb1tpXSA9IDA7XG4gIHJldHVybiBvO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial93aXRoX3RhZ1xuZnVuY3Rpb24gY2FtbF9vYmpfd2l0aF90YWcodGFnLHgpIHtcbiAgdmFyIGwgPSB4Lmxlbmd0aDtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGFbMF0gPSB0YWc7XG4gIGZvcih2YXIgaSA9IDE7IGkgPCBsOyBpKysgKSBhW2ldID0geFtpXTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2R1cCBtdXRhYmxlIChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9vYmpfZHVwICh4KSB7XG4gIHZhciBsID0geC5sZW5ndGg7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbDsgaSsrICkgYVtpXSA9IHhbaV07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial90cnVuY2F0ZSAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfb2JqX3RydW5jYXRlICh4LCBzKSB7XG4gIGlmIChzPD0wIHx8IHMgKyAxID4geC5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcIk9iai50cnVuY2F0ZVwiKTtcbiAgaWYgKHgubGVuZ3RoICE9IHMgKyAxKSB4Lmxlbmd0aCA9IHMgKyAxO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfbWFrZV9mb3J3YXJkXG5mdW5jdGlvbiBjYW1sX29ial9tYWtlX2ZvcndhcmQgKGIsdikge1xuICBiWzBdPTI1MDtcbiAgYlsxXT12O1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9jb21wYXJlX2FuZF9zd2FwXG5mdW5jdGlvbiBjYW1sX29ial9jb21wYXJlX2FuZF9zd2FwKHgsaSxvbGQsbil7XG4gIGlmKHhbaSsxXSA9PSBvbGQpIHtcbiAgICB4W2krMV0gPSBuO1xuICAgIHJldHVybiAxO1xuICB9XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2lzX3NoYXJlZFxuZnVuY3Rpb24gY2FtbF9vYmpfaXNfc2hhcmVkKHgpe1xuICByZXR1cm4gMVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfbWFrZV9mb3J3YXJkIGNvbnN0IChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9sYXp5X21ha2VfZm9yd2FyZCAodikgeyByZXR1cm4gWzI1MCwgdl07IH1cblxuLy8vLy8vLy8vLy8vLyBDYW1saW50ZXJuYWxPT1xuLy9Qcm92aWRlczogY2FtbF9nZXRfcHVibGljX21ldGhvZCBjb25zdFxudmFyIGNhbWxfbWV0aG9kX2NhY2hlID0gW107XG5mdW5jdGlvbiBjYW1sX2dldF9wdWJsaWNfbWV0aG9kIChvYmosIHRhZywgY2FjaGVpZCkge1xuICB2YXIgbWV0aHMgPSBvYmpbMV07XG4gIHZhciBvZnMgPSBjYW1sX21ldGhvZF9jYWNoZVtjYWNoZWlkXTtcbiAgaWYgKG9mcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJheSBpcyBub3Qgc3BhcnNlXG4gICAgZm9yICh2YXIgaSA9IGNhbWxfbWV0aG9kX2NhY2hlLmxlbmd0aDsgaSA8IGNhY2hlaWQ7IGkrKylcbiAgICAgIGNhbWxfbWV0aG9kX2NhY2hlW2ldID0gMDtcbiAgfSBlbHNlIGlmIChtZXRoc1tvZnNdID09PSB0YWcpIHtcbiAgICByZXR1cm4gbWV0aHNbb2ZzIC0gMV07XG4gIH1cbiAgdmFyIGxpID0gMywgaGkgPSBtZXRoc1sxXSAqIDIgKyAxLCBtaTtcbiAgd2hpbGUgKGxpIDwgaGkpIHtcbiAgICBtaSA9ICgobGkraGkpID4+IDEpIHwgMTtcbiAgICBpZiAodGFnIDwgbWV0aHNbbWkrMV0pIGhpID0gbWktMjtcbiAgICBlbHNlIGxpID0gbWk7XG4gIH1cbiAgY2FtbF9tZXRob2RfY2FjaGVbY2FjaGVpZF0gPSBsaSArIDE7XG4gIC8qIHJldHVybiAwIGlmIHRhZyBpcyBub3QgdGhlcmUgKi9cbiAgcmV0dXJuICh0YWcgPT0gbWV0aHNbbGkrMV0gPyBtZXRoc1tsaV0gOiAwKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vb19sYXN0X2lkXG52YXIgY2FtbF9vb19sYXN0X2lkID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9zZXRfb29faWRcbi8vUmVxdWlyZXM6IGNhbWxfb29fbGFzdF9pZFxuZnVuY3Rpb24gY2FtbF9zZXRfb29faWQgKGIpIHtcbiAgYlsyXT1jYW1sX29vX2xhc3RfaWQrKztcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZnJlc2hfb29faWQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfb29fbGFzdF9pZFxuZnVuY3Rpb24gY2FtbF9mcmVzaF9vb19pZCgpIHtcbiAgcmV0dXJuIGNhbWxfb29fbGFzdF9pZCsrO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9yYXdfZmllbGRcbmZ1bmN0aW9uIGNhbWxfb2JqX3Jhd19maWVsZChvLGkpIHsgcmV0dXJuIG9baSsxXSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3NldF9yYXdfZmllbGRcbmZ1bmN0aW9uIGNhbWxfb2JqX3NldF9yYXdfZmllbGQobyxpLHYpIHsgcmV0dXJuIG9baSsxXSA9IHYgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9yZWFjaGFibGVfd29yZHNcbmZ1bmN0aW9uIGNhbWxfb2JqX3JlYWNoYWJsZV93b3JkcyhvKSB7IHJldHVybiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2FkZF9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfb2JqX2FkZF9vZmZzZXQodixvZmZzZXQpIHtcbiAgY2FtbF9mYWlsd2l0aChcIk9iai5hZGRfb2Zmc2V0IGlzIG5vdCBzdXBwb3J0ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3VwZGF0ZV90YWdcbmZ1bmN0aW9uIGNhbWxfb2JqX3VwZGF0ZV90YWcoYixvLG4pIHtcbiAgICBpZihiWzBdPT1vKSB7IGJbMF0gPSBuOyByZXR1cm4gMSB9XG4gICAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X3VwZGF0ZV90b19mb3JjaW5nXG4vL1JlcXVpcmVzOiBjYW1sX29ial91cGRhdGVfdGFnXG5mdW5jdGlvbiBjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcmNpbmcobykge1xuICBpZiAoKG8gaW5zdGFuY2VvZiBBcnJheSkgJiYgb1swXSA9PSAob1swXSA+Pj4gMCkgJiZcbiAgICAgIGNhbWxfb2JqX3VwZGF0ZV90YWcobywgMjQ2LCAyNDQpKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X3VwZGF0ZV90b19mb3J3YXJkXG4vL1JlcXVpcmVzOiBjYW1sX29ial91cGRhdGVfdGFnXG4gIGZ1bmN0aW9uIGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yd2FyZChvKSB7XG4gIGNhbWxfb2JqX3VwZGF0ZV90YWcobywyNDQsMjUwKTtcbiAgcmV0dXJuIDA7IC8vIHVuaXRcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfcmVzZXRfdG9fbGF6eVxuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuZnVuY3Rpb24gY2FtbF9sYXp5X3Jlc2V0X3RvX2xhenkobykge1xuICBjYW1sX29ial91cGRhdGVfdGFnKG8sMjQ0LDI0Nik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfcmVhZF9yZXN1bHRcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3RhZ1xuZnVuY3Rpb24gY2FtbF9sYXp5X3JlYWRfcmVzdWx0KG8pIHtcbiAgcmV0dXJuIChjYW1sX29ial90YWcobykgPT0gMjUwKT9vWzFdOm87XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9pc19jb250aW51YXRpb25fdGFnXG4vL1ZlcnNpb246IDwgNVxuZnVuY3Rpb24gY2FtbF9pc19jb250aW51YXRpb25fdGFnKHQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodCkge1xuICByZXR1cm4gKHQgPT0gMjQ1KSA/IDEgOiAwO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2Zmc2V0XG52YXIgY2FtbF9pbnQ2NF9vZmZzZXQgPSBNYXRoLnBvdygyLCAtMjQpO1xuXG4vL1Byb3ZpZGVzOiBNbEludDY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mZnNldCwgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuZnVuY3Rpb24gTWxJbnQ2NCAobG8sbWksaGkpIHtcbiAgdGhpcy5sbyA9IGxvICYgMHhmZmZmZmY7XG4gIHRoaXMubWkgPSBtaSAmIDB4ZmZmZmZmO1xuICB0aGlzLmhpID0gaGkgJiAweGZmZmY7XG59XG5NbEludDY0LnByb3RvdHlwZS5jYW1sX2N1c3RvbSA9IFwiX2pcIlxuTWxJbnQ2NC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG8sdGhpcy5taSx0aGlzLmhpKTtcbn1cblxuTWxJbnQ2NC5wcm90b3R5cGUudWNvbXBhcmUgPSBmdW5jdGlvbiAoeCkge1xuICBpZiAodGhpcy5oaSA+IHguaGkpIHJldHVybiAxO1xuICBpZiAodGhpcy5oaSA8IHguaGkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubWkgPiB4Lm1pKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubWkgPCB4Lm1pKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLmxvID4geC5sbykgcmV0dXJuIDE7XG4gIGlmICh0aGlzLmxvIDwgeC5sbykgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgaGkgPSB0aGlzLmhpIDw8IDE2O1xuICB2YXIgeGhpID0geC5oaSA8PCAxNjtcbiAgaWYgKGhpID4geGhpKSByZXR1cm4gMTtcbiAgaWYgKGhpIDwgeGhpKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLm1pID4geC5taSkgcmV0dXJuIDE7XG4gIGlmICh0aGlzLm1pIDwgeC5taSkgcmV0dXJuIC0xO1xuICBpZiAodGhpcy5sbyA+IHgubG8pIHJldHVybiAxO1xuICBpZiAodGhpcy5sbyA8IHgubG8pIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59XG5NbEludDY0LnByb3RvdHlwZS5uZWcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsbyA9IC0gdGhpcy5sbztcbiAgdmFyIG1pID0gLSB0aGlzLm1pICsgKGxvID4+IDI0KTtcbiAgdmFyIGhpID0gLSB0aGlzLmhpICsgKG1pID4+IDI0KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIGxvID0gdGhpcy5sbyArIHgubG87XG4gIHZhciBtaSA9IHRoaXMubWkgKyB4Lm1pICsgKGxvID4+IDI0KTtcbiAgdmFyIGhpID0gdGhpcy5oaSArIHguaGkgKyAobWkgPj4gMjQpO1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5zdWIgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbG8gPSB0aGlzLmxvIC0geC5sbztcbiAgdmFyIG1pID0gdGhpcy5taSAtIHgubWkgKyAobG8gPj4gMjQpO1xuICB2YXIgaGkgPSB0aGlzLmhpIC0geC5oaSArIChtaSA+PiAyNCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBsbyA9IHRoaXMubG8gKiB4LmxvO1xuICB2YXIgbWkgPSAoKGxvICogY2FtbF9pbnQ2NF9vZmZzZXQpIHwgMCkgKyB0aGlzLm1pICogeC5sbyArIHRoaXMubG8gKiB4Lm1pO1xuICB2YXIgaGkgPSAoKG1pICogY2FtbF9pbnQ2NF9vZmZzZXQpIHwgMCkgKyB0aGlzLmhpICogeC5sbyArIHRoaXMubWkgKiB4Lm1pICsgdGhpcy5sbyAqIHguaGk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmlzWmVybyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICh0aGlzLmxvfHRoaXMubWl8dGhpcy5oaSkgPT0gMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLmlzTmVnID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKHRoaXMuaGkgPDwgMTYpIDwgMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLmFuZCA9IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh0aGlzLmxvICYgeC5sbywgdGhpcy5taSAmIHgubWksIHRoaXMuaGkgJiB4LmhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLm9yID0gZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG98eC5sbywgdGhpcy5taXx4Lm1pLCB0aGlzLmhpfHguaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUueG9yID0gZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG9eeC5sbywgdGhpcy5taV54Lm1pLCB0aGlzLmhpXnguaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuc2hpZnRfbGVmdCA9IGZ1bmN0aW9uIChzKSB7XG4gIHMgPSBzICYgNjM7XG4gIGlmIChzID09IDApIHJldHVybiB0aGlzO1xuICBpZiAocyA8IDI0KSB7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0ICh0aGlzLmxvIDw8IHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5taSA8PCBzKSB8ICh0aGlzLmxvID4+ICgyNCAtIHMpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmhpIDw8IHMpIHwgKHRoaXMubWkgPj4gKDI0IC0gcykpKTtcbiAgfVxuICBpZiAocyA8IDQ4KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG8gPDwgKHMgLSAyNCksXG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5taSA8PCAocyAtIDI0KSkgfCAodGhpcy5sbyA+PiAoNDggLSBzKSkpO1xuICByZXR1cm4gbmV3IE1sSW50NjQoMCwgMCwgdGhpcy5sbyA8PCAocyAtIDQ4KSlcbn1cbk1sSW50NjQucHJvdG90eXBlLnNoaWZ0X3JpZ2h0X3Vuc2lnbmVkID0gZnVuY3Rpb24gKHMpIHtcbiAgcyA9IHMgJiA2MztcbiAgaWYgKHMgPT0gMCkgcmV0dXJuIHRoaXM7XG4gIGlmIChzIDwgMjQpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLmxvID4+IHMpIHwgKHRoaXMubWkgPDwgKDI0IC0gcykpLFxuICAgICAgKHRoaXMubWkgPj4gcykgfCAodGhpcy5oaSA8PCAoMjQgLSBzKSksXG4gICAgICAodGhpcy5oaSA+PiBzKSk7XG4gIGlmIChzIDwgNDgpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICh0aGlzLmhpID4+IChzIC0gMjQpKSxcbiAgICAgIDApO1xuICByZXR1cm4gbmV3IE1sSW50NjQgKHRoaXMuaGkgPj4gKHMgLSA0OCksIDAsIDApO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuc2hpZnRfcmlnaHQgPSBmdW5jdGlvbiAocykge1xuICBzID0gcyAmIDYzO1xuICBpZiAocyA9PSAwKSByZXR1cm4gdGhpcztcbiAgdmFyIGggPSAodGhpcy5oaSA8PCAxNikgPj4gMTY7XG4gIGlmIChzIDwgMjQpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLmxvID4+IHMpIHwgKHRoaXMubWkgPDwgKDI0IC0gcykpLFxuICAgICAgKHRoaXMubWkgPj4gcykgfCAoaCA8PCAoMjQgLSBzKSksXG4gICAgICAoKHRoaXMuaGkgPDwgMTYpID4+IHMpID4+PiAxNik7XG4gIHZhciBzaWduID0gKHRoaXMuaGkgPDwgMTYpID4+IDMxO1xuICBpZiAocyA8IDQ4KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgICAodGhpcy5taSA+PiAocyAtIDI0KSkgfCAodGhpcy5oaSA8PCAoNDggLSBzKSksXG4gICAgICAodGhpcy5oaSA8PCAxNikgPj4gKHMgLSAyNCkgPj4gMTYsXG4gICAgICBzaWduICYgMHhmZmZmKTtcbiAgcmV0dXJuIG5ldyBNbEludDY0ICgodGhpcy5oaSA8PCAxNikgPj4gKHMgLSAzMiksIHNpZ24sIHNpZ24pO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubHNsMSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5oaSA9ICh0aGlzLmhpIDw8IDEpIHwgKHRoaXMubWkgPj4gMjMpO1xuICB0aGlzLm1pID0gKCh0aGlzLm1pIDw8IDEpIHwgKHRoaXMubG8gPj4gMjMpKSAmIDB4ZmZmZmZmO1xuICB0aGlzLmxvID0gKHRoaXMubG8gPDwgMSkgJiAweGZmZmZmZjtcbn1cbk1sSW50NjQucHJvdG90eXBlLmxzcjEgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMubG8gPSAoKHRoaXMubG8gPj4+IDEpIHwgKHRoaXMubWkgPDwgMjMpKSAmIDB4ZmZmZmZmO1xuICB0aGlzLm1pID0gKCh0aGlzLm1pID4+PiAxKSB8ICh0aGlzLmhpIDw8IDIzKSkgJiAweGZmZmZmZjtcbiAgdGhpcy5oaSA9IHRoaXMuaGkgPj4+IDE7XG59XG5NbEludDY0LnByb3RvdHlwZS51ZGl2bW9kID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIG9mZnNldCA9IDA7XG4gIHZhciBtb2R1bHVzID0gdGhpcy5jb3B5KCk7XG4gIHZhciBkaXZpc29yID0geC5jb3B5KCk7XG4gIHZhciBxdW90aWVudCA9IG5ldyBNbEludDY0KDAsMCwwKTtcbiAgd2hpbGUgKG1vZHVsdXMudWNvbXBhcmUoZGl2aXNvcikgPiAwKSB7XG4gICAgb2Zmc2V0Kys7XG4gICAgZGl2aXNvci5sc2wxKCk7XG4gIH1cbiAgd2hpbGUgKG9mZnNldCA+PSAwKSB7XG4gICAgb2Zmc2V0IC0tO1xuICAgIHF1b3RpZW50LmxzbDEoKTtcbiAgICBpZiAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+PSAwKSB7XG4gICAgICBxdW90aWVudC5sbyArKztcbiAgICAgIG1vZHVsdXMgPSBtb2R1bHVzLnN1YihkaXZpc29yKTtcbiAgICB9XG4gICAgZGl2aXNvci5sc3IxKCk7XG4gIH1cbiAgcmV0dXJuIHsgcXVvdGllbnQgOiBxdW90aWVudCwgbW9kdWx1cyA6IG1vZHVsdXMgfTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmRpdiA9IGZ1bmN0aW9uICh5KVxue1xuICB2YXIgeCA9IHRoaXM7XG4gIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICB2YXIgc2lnbiA9IHguaGkgXiB5LmhpO1xuICBpZiAoeC5oaSAmIDB4ODAwMCkgeCA9IHgubmVnKCk7XG4gIGlmICh5LmhpICYgMHg4MDAwKSB5ID0geS5uZWcoKTtcbiAgdmFyIHEgPSB4LnVkaXZtb2QoeSkucXVvdGllbnQ7XG4gIGlmIChzaWduICYgMHg4MDAwKSBxID0gcS5uZWcoKTtcbiAgcmV0dXJuIHE7XG59XG5NbEludDY0LnByb3RvdHlwZS5tb2QgPSBmdW5jdGlvbiAoeSlcbntcbiAgdmFyIHggPSB0aGlzO1xuICBpZiAoeS5pc1plcm8oKSkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKTtcbiAgdmFyIHNpZ24gPSB4LmhpO1xuICBpZiAoeC5oaSAmIDB4ODAwMCkgeCA9IHgubmVnKCk7XG4gIGlmICh5LmhpICYgMHg4MDAwKSB5ID0geS5uZWcoKTtcbiAgdmFyIHIgPSB4LnVkaXZtb2QoeSkubW9kdWx1cztcbiAgaWYgKHNpZ24gJiAweDgwMDApIHIgPSByLm5lZygpO1xuICByZXR1cm4gcjtcbn1cbk1sSW50NjQucHJvdG90eXBlLnRvSW50ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sbyB8ICh0aGlzLm1pIDw8IDI0KTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnRvRmxvYXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoKHRoaXMuaGkgPDwgMTYpICogTWF0aC5wb3coMiwgMzIpICsgdGhpcy5taSAqIE1hdGgucG93KDIsIDI0KSkgKyB0aGlzLmxvO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFt0aGlzLmhpID4+IDgsXG4gICAgICAgICAgdGhpcy5oaSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5taSA+PiAxNixcbiAgICAgICAgICAodGhpcy5taSA+PiA4KSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5taSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5sbyA+PiAxNixcbiAgICAgICAgICAodGhpcy5sbyA+PiA4KSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5sbyAmIDB4ZmZdO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubG8zMiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubG8gfCAoKHRoaXMubWkgJiAweGZmKSA8PCAyNCk7XG59XG5NbEludDY0LnByb3RvdHlwZS5oaTMyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKCh0aGlzLm1pID4+PiA4KSAmIDB4ZmZmZikgfCAodGhpcy5oaSA8PCAxNik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdWx0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3VsdCh4LHkpIHsgcmV0dXJuIHgudWNvbXBhcmUoeSkgPCAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY29tcGFyZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9jb21wYXJlKHgseSwgdG90YWwpIHsgcmV0dXJuIHguY29tcGFyZSh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbmVnIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X25lZyAoeCkgeyByZXR1cm4geC5uZWcoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYWRkIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2FkZCAoeCwgeSkgeyByZXR1cm4geC5hZGQoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3N1YiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zdWIgKHgsIHkpIHsgcmV0dXJuIHguc3ViKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9tdWwgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0XG5mdW5jdGlvbiBjYW1sX2ludDY0X211bCh4LHkpIHsgcmV0dXJuIHgubXVsKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9pc196ZXJvIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2lzX3plcm8oeCkgeyByZXR1cm4gK3guaXNaZXJvKCk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSh4KSB7IHJldHVybiAreC5pc05lZygpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYW5kIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2FuZCAoeCwgeSkgeyByZXR1cm4geC5hbmQoeSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vciBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vciAoeCwgeSkgeyByZXR1cm4geC5vcih5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3hvciBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF94b3IgKHgsIHkpIHsgcmV0dXJuIHgueG9yKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3NoaWZ0X2xlZnQgKHgsIHMpIHsgcmV0dXJuIHguc2hpZnRfbGVmdChzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQgKHgsIHMpIHsgcmV0dXJuIHguc2hpZnRfcmlnaHRfdW5zaWduZWQocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0ICh4LCBzKSB7IHJldHVybiB4LnNoaWZ0X3JpZ2h0KHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9kaXYgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZGl2ICh4LCB5KSB7IHJldHVybiB4LmRpdih5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbW9kIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X21vZCAoeCwgeSkgeyByZXR1cm4geC5tb2QoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX2ludDMyIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2ludDMyICh4KSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh4ICYgMHhmZmZmZmYsICh4ID4+IDI0KSAmIDB4ZmZmZmZmLCAoeCA+PiAzMSkgJiAweGZmZmYpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9faW50MzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9faW50MzIgKHgpIHsgcmV0dXJuIHgudG9JbnQoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9fZmxvYXQgKHgpIHsgcmV0dXJuIHgudG9GbG9hdCAoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0LCBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2Zsb2F0ICh4KSB7XG4gIGlmICh4IDwgMCkgeCA9IE1hdGguY2VpbCh4KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KFxuICAgIHggJiAweGZmZmZmZixcbiAgICBNYXRoLmZsb29yKHggKiBjYW1sX2ludDY0X29mZnNldCkgJiAweGZmZmZmZixcbiAgICBNYXRoLmZsb29yKHggKiBjYW1sX2ludDY0X29mZnNldCAqIGNhbWxfaW50NjRfb2Zmc2V0KSAmIDB4ZmZmZik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfZm9ybWF0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZ1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSwgY2FtbF9pbnQ2NF9uZWdcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfaW50MzIsIGNhbWxfaW50NjRfdG9faW50MzJcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfaXNfemVybywgY2FtbF9zdHJfcmVwZWF0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2Zvcm1hdCAoZm10LCB4KSB7XG4gIHZhciBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgaWYgKGYuc2lnbmVkY29udiAmJiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlKHgpKSB7XG4gICAgZi5zaWduID0gLTE7IHggPSBjYW1sX2ludDY0X25lZyh4KTtcbiAgfVxuICB2YXIgYnVmZmVyID0gXCJcIjtcbiAgdmFyIHdiYXNlID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihmLmJhc2UpO1xuICB2YXIgY3Z0YmwgPSBcIjAxMjM0NTY3ODlhYmNkZWZcIjtcbiAgZG8ge1xuICAgIHZhciBwID0geC51ZGl2bW9kKHdiYXNlKTtcbiAgICB4ID0gcC5xdW90aWVudDtcbiAgICBidWZmZXIgPSBjdnRibC5jaGFyQXQoY2FtbF9pbnQ2NF90b19pbnQzMihwLm1vZHVsdXMpKSArIGJ1ZmZlcjtcbiAgfSB3aGlsZSAoISBjYW1sX2ludDY0X2lzX3plcm8oeCkpO1xuICBpZiAoZi5wcmVjID49IDApIHtcbiAgICBmLmZpbGxlciA9ICcgJztcbiAgICB2YXIgbiA9IGYucHJlYyAtIGJ1ZmZlci5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBidWZmZXIgPSBjYW1sX3N0cl9yZXBlYXQgKG4sICcwJykgKyBidWZmZXI7XG4gIH1cbiAgcmV0dXJuIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgYnVmZmVyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSwgY2FtbF9mYWlsd2l0aCwgY2FtbF9wYXJzZV9kaWdpdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9pbnQzMiwgY2FtbF9pbnQ2NF91bHRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYWRkLCBjYW1sX2ludDY0X211bCwgY2FtbF9pbnQ2NF9uZWdcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCxjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX3N0cmluZyhzKSB7XG4gIHZhciByID0gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIChzKTtcbiAgdmFyIGkgPSByWzBdLCBzaWduID0gclsxXSwgYmFzZSA9IHJbMl07XG4gIHZhciBiYXNlNjQgPSBjYW1sX2ludDY0X29mX2ludDMyKGJhc2UpO1xuICB2YXIgdGhyZXNob2xkID1cbiAgICAgIG5ldyBNbEludDY0KDB4ZmZmZmZmLCAweGZmZmZmZmYsIDB4ZmZmZikudWRpdm1vZChiYXNlNjQpLnF1b3RpZW50O1xuICB2YXIgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gIHZhciBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICBmb3IgKDs7KSB7XG4gICAgaSsrO1xuICAgIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICAgIGlmIChjID09IDk1KSBjb250aW51ZTtcbiAgICBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBicmVhaztcbiAgICAvKiBEZXRlY3Qgb3ZlcmZsb3cgaW4gbXVsdGlwbGljYXRpb24gYmFzZSAqIHJlcyAqL1xuICAgIGlmIChjYW1sX2ludDY0X3VsdCh0aHJlc2hvbGQsIHJlcykpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICAgIGQgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICAgIHJlcyA9IGNhbWxfaW50NjRfYWRkKGNhbWxfaW50NjRfbXVsKGJhc2U2NCwgcmVzKSwgZCk7XG4gICAgLyogRGV0ZWN0IG92ZXJmbG93IGluIGFkZGl0aW9uIChiYXNlICogcmVzKSArIGQgKi9cbiAgICBpZiAoY2FtbF9pbnQ2NF91bHQocmVzLCBkKSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIH1cbiAgaWYgKGkgIT0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgaWYgKGJhc2UgPT0gMTAgJiYgY2FtbF9pbnQ2NF91bHQobmV3IE1sSW50NjQoMCwgMCwgMHg4MDAwKSwgcmVzKSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgaWYgKHNpZ24gPCAwKSByZXMgPSBjYW1sX2ludDY0X25lZyhyZXMpO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkobG8sIG1pLCBoaSl7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKVxufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkgY29uc3Rcbi8vUmVxdWlyZXM6IE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpKGxvLCBoaSl7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgbG8gJiAweGZmZmZmZixcbiAgICAoKGxvID4+PiAyNCkgJiAweGZmKSB8ICgoaGkgJiAweGZmZmYpIDw8IDgpLFxuICAgIChoaSA+Pj4gMTYpICYgMHhmZmZmKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbG8zMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9sbzMyKHYpeyByZXR1cm4gdi5sbzMyKCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2hpMzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaGkzMih2KXsgcmV0dXJuIHYuaGkzMigpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9ieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChhWzddIDw8IDAgfCAoYVs2XSA8PCA4KSB8IChhWzVdIDw8IDE2KSxcbiAgICAgICAgICAgICAgICAgICAgIGFbNF0gPDwgMCB8IChhWzNdIDw8IDgpIHwgKGFbMl0gPDwgMTYpLFxuICAgICAgICAgICAgICAgICAgICAgYVsxXSA8PCAwIHwgKGFbMF0gPDwgOCkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF90b19ieXRlcyBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19ieXRlcyh4KSB7IHJldHVybiB4LnRvQXJyYXkoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaGFzaCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9oYXNoKHYpe1xuICByZXR1cm4gKHYubG8zMigpKSBeICh2LmhpMzIoKSlcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkLCBBbmR5IFJheVxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuLy9cbi8vIEJpZ2FycmF5LlxuLy9cbi8vIC0gYWxsIGJpZ2FycmF5IHR5cGVzIGluY2x1ZGluZyBJbnQ2NCBhbmQgQ29tcGxleC5cbi8vIC0gZm9ydHJhbiArIGMgbGF5b3V0c1xuLy8gLSBzdWIvc2xpY2UvcmVzaGFwZVxuLy8gLSByZXRhaW4gZmFzdCBwYXRoIGZvciAxZCBhcnJheSBhY2Nlc3NcblxuLy9Qcm92aWRlczogY2FtbF9iYV9pbml0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2JhX2luaXQoKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0X3NpemUoZGltcykge1xuICB2YXIgbl9kaW1zID0gZGltcy5sZW5ndGg7XG4gIHZhciBzaXplID0gMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuX2RpbXM7IGkrKykge1xuICAgIGlmIChkaW1zW2ldIDwgMClcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmNyZWF0ZTogbmVnYXRpdmUgZGltZW5zaW9uXCIpO1xuICAgIHNpemUgPSBzaXplICogZGltc1tpXTtcbiAgfVxuICByZXR1cm4gc2l6ZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKXtcbiAgc3dpdGNoKGtpbmQpe1xuICBjYXNlIDc6IGNhc2UgMTA6IGNhc2UgMTE6IHJldHVybiAyO1xuICBkZWZhdWx0OiByZXR1cm4gMTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfYnVmZmVyKGtpbmQsIHNpemUpe1xuICB2YXIgdmlldztcbiAgc3dpdGNoKGtpbmQpe1xuICBjYXNlIDA6ICB2aWV3ID0gRmxvYXQzMkFycmF5OyBicmVhaztcbiAgY2FzZSAxOiAgdmlldyA9IEZsb2F0NjRBcnJheTsgYnJlYWs7XG4gIGNhc2UgMjogIHZpZXcgPSBJbnQ4QXJyYXk7IGJyZWFrO1xuICBjYXNlIDM6ICB2aWV3ID0gVWludDhBcnJheTsgYnJlYWs7XG4gIGNhc2UgNDogIHZpZXcgPSBJbnQxNkFycmF5OyBicmVhaztcbiAgY2FzZSA1OiAgdmlldyA9IFVpbnQxNkFycmF5OyBicmVhaztcbiAgY2FzZSA2OiAgdmlldyA9IEludDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDc6ICB2aWV3ID0gSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgODogIHZpZXcgPSBJbnQzMkFycmF5OyBicmVhaztcbiAgY2FzZSA5OiAgdmlldyA9IEludDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDEwOiB2aWV3ID0gRmxvYXQzMkFycmF5OyBicmVhaztcbiAgY2FzZSAxMTogdmlldyA9IEZsb2F0NjRBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTI6IHZpZXcgPSBVaW50OEFycmF5OyBicmVhaztcbiAgfVxuICBpZiAoIXZpZXcpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmNyZWF0ZTogdW5zdXBwb3J0ZWQga2luZFwiKTtcbiAgdmFyIGRhdGEgPSBuZXcgdmlldyhzaXplICogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKSk7XG4gIHJldHVybiBkYXRhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2N1c3RvbV9uYW1lXG4vL1ZlcnNpb246IDwgNC4xMVxudmFyIGNhbWxfYmFfY3VzdG9tX25hbWUgPSBcIl9iaWdhcnJheVwiXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3VzdG9tX25hbWVcbi8vVmVyc2lvbjogPj0gNC4xMVxudmFyIGNhbWxfYmFfY3VzdG9tX25hbWUgPSBcIl9iaWdhcnIwMlwiXG5cbi8vUHJvdmlkZXM6IE1sX0JpZ2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfY3VzdG9tX25hbWVcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpLCBjYW1sX2ludDY0X2hpMzIsIGNhbWxfaW50NjRfbG8zMlxuZnVuY3Rpb24gTWxfQmlnYXJyYXkgKGtpbmQsIGxheW91dCwgZGltcywgYnVmZmVyKSB7XG5cbiAgdGhpcy5raW5kICAgPSBraW5kIDtcbiAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gIHRoaXMuZGltcyAgID0gZGltcztcbiAgdGhpcy5kYXRhID0gYnVmZmVyO1xufVxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuY2FtbF9jdXN0b20gPSBjYW1sX2JhX2N1c3RvbV9uYW1lO1xuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUub2Zmc2V0ID0gZnVuY3Rpb24gKGFyZykge1xuICB2YXIgb2ZzID0gMDtcbiAgaWYodHlwZW9mIGFyZyA9PT0gXCJudW1iZXJcIikgYXJnID0gW2FyZ107XG4gIGlmICghIChhcmcgaW5zdGFuY2VvZiBBcnJheSkpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImJpZ2FycmF5LmpzOiBpbnZhbGlkIG9mZnNldFwiKTtcbiAgaWYgKHRoaXMuZGltcy5sZW5ndGggIT0gYXJnLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5nZXQvc2V0OiBiYWQgbnVtYmVyIG9mIGRpbWVuc2lvbnNcIik7XG4gIGlmKHRoaXMubGF5b3V0ID09IDAgLyogY19sYXlvdXQgKi8pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFyZ1tpXSA8IDAgfHwgYXJnW2ldID49IHRoaXMuZGltc1tpXSlcbiAgICAgICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICAgICAgb2ZzID0gKG9mcyAqIHRoaXMuZGltc1tpXSkgKyBhcmdbaV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmRpbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChhcmdbaV0gPCAxIHx8IGFyZ1tpXSA+IHRoaXMuZGltc1tpXSl7XG4gICAgICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICAgIH1cbiAgICAgIG9mcyA9IChvZnMgKiB0aGlzLmRpbXNbaV0pICsgKGFyZ1tpXSAtIDEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2ZzO1xufVxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG9mcykge1xuICBzd2l0Y2godGhpcy5raW5kKXtcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgdmFyIGwgPSB0aGlzLmRhdGFbb2ZzICogMiArIDBdO1xuICAgIHZhciBoID0gdGhpcy5kYXRhW29mcyAqIDIgKyAxXTtcbiAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkobCxoKTtcbiAgY2FzZSAxMDogY2FzZSAxMTpcbiAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgIHZhciByID0gdGhpcy5kYXRhW29mcyAqIDIgKyAwXTtcbiAgICB2YXIgaSA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMV07XG4gICAgcmV0dXJuIFsyNTQsIHIsIGldO1xuICBkZWZhdWx0OlxuICAgIHJldHVybiB0aGlzLmRhdGFbb2ZzXVxuICB9XG59XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAob2ZzLHYpIHtcbiAgc3dpdGNoKHRoaXMua2luZCl7XG4gIGNhc2UgNzpcbiAgICAvLyBJbnQ2NFxuICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMF0gPSBjYW1sX2ludDY0X2xvMzIodik7XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAxXSA9IGNhbWxfaW50NjRfaGkzMih2KTtcbiAgICBicmVhaztcbiAgY2FzZSAxMDogY2FzZSAxMTpcbiAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMF0gPSB2WzFdO1xuICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMV0gPSB2WzJdO1xuICAgIGJyZWFrO1xuICBkZWZhdWx0OlxuICAgIHRoaXMuZGF0YVtvZnNdID0gdjtcbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4gMFxufVxuXG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gKHYpIHtcbiAgc3dpdGNoKHRoaXMua2luZCl7XG4gIGNhc2UgNzpcbiAgICAvLyBJbnQ2NFxuICAgIHZhciBhID0gY2FtbF9pbnQ2NF9sbzMyKHYpO1xuICAgIHZhciBiID0gY2FtbF9pbnQ2NF9oaTMyKHYpO1xuICAgIGlmKGEgPT0gYil7XG4gICAgICB0aGlzLmRhdGEuZmlsbChhKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpPHRoaXMuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHRoaXMuZGF0YVtpXSA9IChpJTIgPT0gMCkgPyBhIDogYjtcbiAgICAgIH1cbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IGNhc2UgMTE6XG4gICAgLy8gQ29tcGxleDMyLCBDb21wbGV4NjRcbiAgICB2YXIgaW0gPSB2WzFdO1xuICAgIHZhciByZSA9IHZbMl07XG4gICAgaWYoaW0gPT0gcmUpe1xuICAgICAgdGhpcy5kYXRhLmZpbGwoaW0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGk8dGhpcy5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdGhpcy5kYXRhW2ldID0gKGklMiA9PSAwKSA/IGltIDogcmU7XG4gICAgICB9XG4gICAgfVxuICAgIGJyZWFrO1xuICBkZWZhdWx0OlxuICAgIHRoaXMuZGF0YS5maWxsKHYpO1xuICAgIGJyZWFrO1xuICB9XG59XG5cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiAoYiwgdG90YWwpIHtcbiAgaWYgKHRoaXMubGF5b3V0ICE9IGIubGF5b3V0IHx8IHRoaXMua2luZCAhPSBiLmtpbmQpIHtcbiAgICB2YXIgazEgPSB0aGlzLmtpbmQgfCAodGhpcy5sYXlvdXQgPDwgOCk7XG4gICAgdmFyIGsyID0gICAgYi5raW5kIHwgKGIubGF5b3V0IDw8IDgpO1xuICAgIHJldHVybiBrMiAtIGsxO1xuICB9XG4gIGlmICh0aGlzLmRpbXMubGVuZ3RoICE9IGIuZGltcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gYi5kaW1zLmxlbmd0aCAtIHRoaXMuZGltcy5sZW5ndGg7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgaWYgKHRoaXMuZGltc1tpXSAhPSBiLmRpbXNbaV0pXG4gICAgICByZXR1cm4gKHRoaXMuZGltc1tpXSA8IGIuZGltc1tpXSkgPyAtMSA6IDE7XG4gIHN3aXRjaCAodGhpcy5raW5kKSB7XG4gIGNhc2UgMDpcbiAgY2FzZSAxOlxuICBjYXNlIDEwOlxuICBjYXNlIDExOlxuICAgIC8vIEZsb2F0c1xuICAgIHZhciB4LCB5O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICB4ID0gdGhpcy5kYXRhW2ldO1xuICAgICAgeSA9IGIuZGF0YVtpXTtcbiAgICAgIGlmICh4IDwgeSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKHggPiB5KVxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGlmICh4ICE9IHkpIHtcbiAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgaWYgKHggPT0geCkgcmV0dXJuIDE7XG4gICAgICAgIGlmICh5ID09IHkpIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNzpcbiAgICAvLyBJbnQ2NFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSs9Mikge1xuICAgICAgLy8gQ2hlY2sgaGlnaGVzdCBiaXRzIGZpcnN0XG4gICAgICBpZiAodGhpcy5kYXRhW2krMV0gPCBiLmRhdGFbaSsxXSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKHRoaXMuZGF0YVtpKzFdID4gYi5kYXRhW2krMV0pXG4gICAgICAgIHJldHVybiAxO1xuICAgICAgaWYgKCh0aGlzLmRhdGFbaV0gPj4+IDApIDwgKGIuZGF0YVtpXSA+Pj4gMCkpXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIGlmICgodGhpcy5kYXRhW2ldID4+PiAwKSA+IChiLmRhdGFbaV0gPj4+IDApKVxuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMjpcbiAgY2FzZSAzOlxuICBjYXNlIDQ6XG4gIGNhc2UgNTpcbiAgY2FzZSA2OlxuICBjYXNlIDg6XG4gIGNhc2UgOTpcbiAgY2FzZSAxMjpcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZGF0YVtpXSA8IGIuZGF0YVtpXSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKHRoaXMuZGF0YVtpXSA+IGIuZGF0YVtpXSlcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBNbF9CaWdhcnJheV9jXzFfMVxuLy9SZXF1aXJlczogTWxfQmlnYXJyYXksIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gTWxfQmlnYXJyYXlfY18xXzEoa2luZCwgbGF5b3V0LCBkaW1zLCBidWZmZXIpIHtcbiAgdGhpcy5raW5kICAgPSBraW5kIDtcbiAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gIHRoaXMuZGltcyAgID0gZGltcztcbiAgdGhpcy5kYXRhICAgPSBidWZmZXI7XG59XG5cbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZSA9IG5ldyBNbF9CaWdhcnJheSgpXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUub2Zmc2V0ID0gZnVuY3Rpb24gKGFyZykge1xuICBpZih0eXBlb2YgYXJnICE9PSBcIm51bWJlclwiKXtcbiAgICBpZigoYXJnIGluc3RhbmNlb2YgQXJyYXkpICYmIGFyZy5sZW5ndGggPT0gMSlcbiAgICAgIGFyZyA9IGFyZ1swXTtcbiAgICBlbHNlIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIk1sX0JpZ2FycmF5X2NfMV8xLm9mZnNldFwiKTtcbiAgfVxuICBpZiAoYXJnIDwgMCB8fCBhcmcgPj0gdGhpcy5kaW1zWzBdKVxuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFyZztcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChvZnMpIHtcbiAgcmV0dXJuIHRoaXMuZGF0YVtvZnNdO1xufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG9mcyx2KSB7XG4gIHRoaXMuZGF0YVtvZnNdID0gdjtcbiAgcmV0dXJuIDBcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiAodikge1xuICB0aGlzLmRhdGEuZmlsbCh2KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jb21wYXJlXG5mdW5jdGlvbiBjYW1sX2JhX2NvbXBhcmUoYSxiLHRvdGFsKXtcbiAgcmV0dXJuIGEuY29tcGFyZShiLHRvdGFsKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbi8vUmVxdWlyZXM6IE1sX0JpZ2FycmF5LCBNbF9CaWdhcnJheV9jXzFfMSwgY2FtbF9iYV9nZXRfc2l6ZSwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKXtcbiAgdmFyIHNpemVfcGVyX2VsZW1lbnQgPSBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpO1xuICBpZihjYW1sX2JhX2dldF9zaXplKGRpbXMpICogc2l6ZV9wZXJfZWxlbWVudCAhPSBkYXRhLmxlbmd0aCkge1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImxlbmd0aCBkb2Vzbid0IG1hdGNoIGRpbXNcIik7XG4gIH1cbiAgaWYobGF5b3V0ID09IDAgJiYgLy8gY19sYXlvdXRcbiAgICAgZGltcy5sZW5ndGggPT0gMSAmJiAvLyBBcnJheTFcbiAgICAgc2l6ZV9wZXJfZWxlbWVudCA9PSAxKSAvLyAxLXRvLTEgbWFwcGluZ1xuICAgIHJldHVybiBuZXcgTWxfQmlnYXJyYXlfY18xXzEoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbiAgcmV0dXJuIG5ldyBNbF9CaWdhcnJheShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xuXG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZSwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlKGtpbmQsIGxheW91dCwgZGltc19tbCkge1xuICB2YXIgZGltcyA9IGNhbWxfanNfZnJvbV9hcnJheShkaW1zX21sKTtcbiAgdmFyIGRhdGEgPSBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgY2FtbF9iYV9nZXRfc2l6ZShkaW1zKSk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGNhbWxfYmFfY2hhbmdlX2xheW91dChiYSwgbGF5b3V0KSB7XG4gIGlmKGJhLmxheW91dCA9PSBsYXlvdXQpIHJldHVybiBiYTtcbiAgdmFyIG5ld19kaW1zID0gW11cbiAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspIG5ld19kaW1zW2ldID0gYmEuZGltc1tiYS5kaW1zLmxlbmd0aCAtIGkgLSAxXTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBsYXlvdXQsIG5ld19kaW1zLCBiYS5kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9raW5kXG5mdW5jdGlvbiBjYW1sX2JhX2tpbmQoYmEpIHtcbiAgcmV0dXJuIGJhLmtpbmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbGF5b3V0XG5mdW5jdGlvbiBjYW1sX2JhX2xheW91dChiYSkge1xuICByZXR1cm4gYmEubGF5b3V0O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX251bV9kaW1zXG5mdW5jdGlvbiBjYW1sX2JhX251bV9kaW1zKGJhKSB7XG4gIHJldHVybiBiYS5kaW1zLmxlbmd0aDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1cbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9kaW0oYmEsIGkpIHtcbiAgaWYgKGkgPCAwIHx8IGkgPj0gYmEuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuZGltXCIpO1xuICByZXR1cm4gYmEuZGltc1tpXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1fMVxuLy9SZXF1aXJlczogY2FtbF9iYV9kaW1cbmZ1bmN0aW9uIGNhbWxfYmFfZGltXzEoYmEpIHtcbiAgcmV0dXJuIGNhbWxfYmFfZGltKGJhLCAwKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1fMlxuLy9SZXF1aXJlczogY2FtbF9iYV9kaW1cbmZ1bmN0aW9uIGNhbWxfYmFfZGltXzIoYmEpIHtcbiAgcmV0dXJuIGNhbWxfYmFfZGltKGJhLCAxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1fM1xuLy9SZXF1aXJlczogY2FtbF9iYV9kaW1cbmZ1bmN0aW9uIGNhbWxfYmFfZGltXzMoYmEpIHtcbiAgcmV0dXJuIGNhbWxfYmFfZGltKGJhLCAyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfZ2VuZXJpY1xuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9nZW5lcmljKGJhLCBpKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoY2FtbF9qc19mcm9tX2FycmF5KGkpKTtcbiAgcmV0dXJuIGJhLmdldChvZnMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDE2KGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMSA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBiYS5nZXQob2ZzKTtcbiAgdmFyIGIyID0gYmEuZ2V0KG9mcyArIDEpO1xuICByZXR1cm4gKGIxIHwgKGIyIDw8IDgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQzMlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQzMihiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDMgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gYmEuZ2V0KG9mcyswKTtcbiAgdmFyIGIyID0gYmEuZ2V0KG9mcysxKTtcbiAgdmFyIGIzID0gYmEuZ2V0KG9mcysyKTtcbiAgdmFyIGI0ID0gYmEuZ2V0KG9mcyszKTtcbiAgcmV0dXJuICggKGIxIDw8IDApICB8XG4gICAgICAgICAgIChiMiA8PCA4KSAgfFxuICAgICAgICAgICAoYjMgPDwgMTYpIHxcbiAgICAgICAgICAgKGI0IDw8IDI0KSApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDY0KGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgNyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBiYS5nZXQob2ZzKzApO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzKzEpO1xuICB2YXIgYjMgPSBiYS5nZXQob2ZzKzIpO1xuICB2YXIgYjQgPSBiYS5nZXQob2ZzKzMpO1xuICB2YXIgYjUgPSBiYS5nZXQob2ZzKzQpO1xuICB2YXIgYjYgPSBiYS5nZXQob2ZzKzUpO1xuICB2YXIgYjcgPSBiYS5nZXQob2ZzKzYpO1xuICB2YXIgYjggPSBiYS5nZXQob2ZzKzcpO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhbYjgsYjcsYjYsYjUsYjQsYjMsYjIsYjFdKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfMVxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMShiYSwgaTApIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoaTApKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfMlxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMihiYSwgaTAsIGkxKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KFtpMCxpMV0pKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfM1xuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMyhiYSwgaTAsIGkxLCBpMikge1xuICByZXR1cm4gYmEuZ2V0KGJhLm9mZnNldChbaTAsaTEsaTJdKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0X2dlbmVyaWNcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9iYV9zZXRfZ2VuZXJpYyhiYSwgaSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KGNhbWxfanNfZnJvbV9hcnJheShpKSksIHYpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDE2KGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMSA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBiYS5zZXQob2ZzKzAsICB2ICAgICAgICAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzEsICh2ID4+PiA4KSAmIDB4ZmYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9zZXQzMihiYSwgaTAsIHYpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDMgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgYmEuc2V0KG9mcyswLCAgdiAgICAgICAgICYgMHhmZik7XG4gIGJhLnNldChvZnMrMSwgKHYgPj4+IDgpICAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzIsICh2ID4+PiAxNikgJiAweGZmKTtcbiAgYmEuc2V0KG9mcyszLCAodiA+Pj4gMjQpICYgMHhmZik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDY0KGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgNyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgdiA9IGNhbWxfaW50NjRfdG9fYnl0ZXModik7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCA4OyBpKyspIGJhLnNldChvZnMraSwgdls3LWldKVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXRfMVxuZnVuY3Rpb24gY2FtbF9iYV9zZXRfMShiYSwgaTAsIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChpMCksIHYpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8yXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8yKGJhLCBpMCwgaTEsIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChbaTAsaTFdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8zXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8zKGJhLCBpMCwgaTEsIGkyLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoW2kwLGkxLGkyXSksIHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9maWxsXG5mdW5jdGlvbiBjYW1sX2JhX2ZpbGwoYmEsIHYpIHtcbiAgYmEuZmlsbCh2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfYmxpdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2JsaXQoc3JjLCBkc3QpIHtcbiAgaWYgKGRzdC5kaW1zLmxlbmd0aCAhPSBzcmMuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuYmxpdDogZGltZW5zaW9uIG1pc21hdGNoXCIpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRzdC5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIGlmIChkc3QuZGltc1tpXSAhPSBzcmMuZGltc1tpXSlcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmJsaXQ6IGRpbWVuc2lvbiBtaXNtYXRjaFwiKTtcbiAgZHN0LmRhdGEuc2V0KHNyYy5kYXRhKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc3ViXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9zdWIoYmEsIG9mcywgbGVuKSB7XG4gIHZhciBjaGFuZ2VkX2RpbTtcbiAgdmFyIG11bCA9IDE7XG4gIGlmIChiYS5sYXlvdXQgPT0gMCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKylcbiAgICAgIG11bCA9IG11bCAqIGJhLmRpbXNbaV07XG4gICAgY2hhbmdlZF9kaW0gPSAwO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKGJhLmRpbXMubGVuZ3RoIC0gMSk7IGkrKylcbiAgICAgIG11bCA9IG11bCAqIGJhLmRpbXNbaV07XG4gICAgY2hhbmdlZF9kaW0gPSBiYS5kaW1zLmxlbmd0aCAtIDE7XG4gICAgb2ZzID0gb2ZzIC0gMTtcbiAgfVxuICBpZiAob2ZzIDwgMCB8fCBsZW4gPCAwIHx8IChvZnMgKyBsZW4pID4gYmEuZGltc1tjaGFuZ2VkX2RpbV0pe1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnN1YjogYmFkIHN1Yi1hcnJheVwiKTtcbiAgfVxuICB2YXIgbmV3X2RpbXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIG5ld19kaW1zW2ldID0gYmEuZGltc1tpXTtcbiAgbmV3X2RpbXNbY2hhbmdlZF9kaW1dID0gbGVuO1xuICBtdWwgKj0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChiYS5raW5kKTtcbiAgdmFyIG5ld19kYXRhID0gYmEuZGF0YS5zdWJhcnJheShvZnMgKiBtdWwsIChvZnMgKyBsZW4pICogbXVsKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBiYS5sYXlvdXQsIG5ld19kaW1zLCBuZXdfZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2xpY2Vcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheSwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfc2xpY2UoYmEsIHZpbmQpIHtcbiAgdmluZCA9IGNhbWxfanNfZnJvbV9hcnJheSh2aW5kKTtcbiAgdmFyIG51bV9pbmRzID0gdmluZC5sZW5ndGg7XG4gIHZhciBpbmRleCA9IFtdO1xuICB2YXIgc3ViX2RpbXMgPSBbXTtcbiAgdmFyIG9mcztcblxuICBpZiAobnVtX2luZHMgPiBiYS5kaW1zLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5zbGljZTogdG9vIG1hbnkgaW5kaWNlc1wiKTtcblxuICAvLyBDb21wdXRlIG9mZnNldCBhbmQgY2hlY2sgYm91bmRzXG4gIGlmIChiYS5sYXlvdXQgPT0gMCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2luZHM7IGkrKylcbiAgICAgIGluZGV4W2ldID0gdmluZFtpXTtcbiAgICBmb3IgKDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgICBpbmRleFtpXSA9IDA7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKG51bV9pbmRzKTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzICsgaV0gPSB2aW5kW2ldO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGggLSBudW1faW5kczsgaSsrKVxuICAgICAgaW5kZXhbaV0gPSAxO1xuICAgIHN1Yl9kaW1zID0gYmEuZGltcy5zbGljZSgwLCBiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzKTtcbiAgfVxuICBvZnMgPSBiYS5vZmZzZXQoaW5kZXgpO1xuICB2YXIgc2l6ZSA9IGNhbWxfYmFfZ2V0X3NpemUoc3ViX2RpbXMpO1xuICB2YXIgc2l6ZV9wZXJfZWxlbWVudCA9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoYmEua2luZCk7XG4gIHZhciBuZXdfZGF0YSA9IGJhLmRhdGEuc3ViYXJyYXkob2ZzICogc2l6ZV9wZXJfZWxlbWVudCwgKG9mcyArIHNpemUpICogc2l6ZV9wZXJfZWxlbWVudCk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBzdWJfZGltcywgbmV3X2RhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3Jlc2hhcGVcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfYmFfZ2V0X3NpemVcbmZ1bmN0aW9uIGNhbWxfYmFfcmVzaGFwZShiYSwgdmluZCkge1xuICB2aW5kID0gY2FtbF9qc19mcm9tX2FycmF5KHZpbmQpO1xuICB2YXIgbmV3X2RpbSA9IFtdO1xuICB2YXIgbnVtX2RpbXMgPSB2aW5kLmxlbmd0aDtcblxuICBpZiAobnVtX2RpbXMgPCAwIHx8IG51bV9kaW1zID4gMTYpe1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnJlc2hhcGU6IGJhZCBudW1iZXIgb2YgZGltZW5zaW9uc1wiKTtcbiAgfVxuICB2YXIgbnVtX2VsdHMgPSAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9kaW1zOyBpKyspIHtcbiAgICBuZXdfZGltW2ldID0gdmluZFtpXTtcbiAgICBpZiAobmV3X2RpbVtpXSA8IDApXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBuZWdhdGl2ZSBkaW1lbnNpb25cIik7XG4gICAgbnVtX2VsdHMgPSBudW1fZWx0cyAqIG5ld19kaW1baV07XG4gIH1cblxuICB2YXIgc2l6ZSA9IGNhbWxfYmFfZ2V0X3NpemUoYmEuZGltcyk7XG4gIC8vIENoZWNrIHRoYXQgc2l6ZXMgYWdyZWVcbiAgaWYgKG51bV9lbHRzICE9IHNpemUpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogc2l6ZSBtaXNtYXRjaFwiKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBiYS5sYXlvdXQsIG5ld19kaW0sIGJhLmRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NlcmlhbGl6ZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2ludDY0X3RvX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfYmFfc2VyaWFsaXplKHdyaXRlciwgYmEsIHN6KSB7XG4gIHdyaXRlci53cml0ZSgzMiwgYmEuZGltcy5sZW5ndGgpO1xuICB3cml0ZXIud3JpdGUoMzIsIChiYS5raW5kIHwgKGJhLmxheW91dCA8PCA4KSkpO1xuICBpZihiYS5jYW1sX2N1c3RvbSA9PSBcIl9iaWdhcnIwMlwiKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZihiYS5kaW1zW2ldIDwgMHhmZmZmKVxuICAgICAgICB3cml0ZXIud3JpdGUoMTYsIGJhLmRpbXNbaV0pO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHdyaXRlci53cml0ZSgxNiwgMHhmZmZmKTtcbiAgICAgICAgd3JpdGVyLndyaXRlKDMyLCAwKTtcbiAgICAgICAgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIGVsc2VcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykgd3JpdGVyLndyaXRlKDMyLGJhLmRpbXNbaV0pXG4gIHN3aXRjaChiYS5raW5kKXtcbiAgY2FzZSAyOiAgLy9JbnQ4QXJyYXlcbiAgY2FzZSAzOiAgLy9VaW50OEFycmF5XG4gIGNhc2UgMTI6IC8vVWludDhBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHdyaXRlci53cml0ZSg4LCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNDogIC8vIEludDE2QXJyYXlcbiAgY2FzZSA1OiAgLy8gVWludDE2QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoMTYsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA2OiAgLy8gSW50MzJBcnJheSAoaW50MzIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgODogIC8vIEludDMyQXJyYXkgKGludClcbiAgY2FzZSA5OiAgLy8gSW50MzJBcnJheSAobmF0aXZlaW50KVxuICAgIHdyaXRlci53cml0ZSg4LDApO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDc6ICAvLyBJbnQzMkFycmF5IChpbnQ2NClcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspe1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGJhLmdldChpKSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlICg4LCBiW2pdKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTogIC8vIEZsb2F0NjRBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoYmEuZ2V0KGkpKSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlICg4LCBiW2pdKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMDogIC8vIEZsb2F0MzJBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KGJhLmdldChpKSk7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGIpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMDogLy8gRmxvYXQzMkFycmF5IChjb21wbGV4MzIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoIC8gMjsgaSsrKXtcbiAgICAgIHZhciBqID0gYmEuZ2V0KGkpO1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQoalsxXSkpO1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQoalsyXSkpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMTogLy8gRmxvYXQ2NEFycmF5IChjb21wbGV4NjQpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoIC8gMjsgaSsrKXtcbiAgICAgIHZhciBjb21wbGV4ID0gYmEuZ2V0KGkpO1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChjb21wbGV4WzFdKSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlICg4LCBiW2pdKTtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoY29tcGxleFsyXSkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHdyaXRlci53cml0ZSAoOCwgYltqXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICB9XG4gIHN6WzBdID0gKDQgKyBiYS5kaW1zLmxlbmd0aCkgKiA0O1xuICBzelsxXSA9ICg0ICsgYmEuZGltcy5sZW5ndGgpICogODtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kZXNlcmlhbGl6ZVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2ZhaWx3aXRoXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzLCBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0c1xuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfYnVmZmVyXG5mdW5jdGlvbiBjYW1sX2JhX2Rlc2VyaWFsaXplKHJlYWRlciwgc3osIG5hbWUpe1xuICB2YXIgbnVtX2RpbXMgPSByZWFkZXIucmVhZDMycygpO1xuICBpZiAobnVtX2RpbXMgPCAwIHx8IG51bV9kaW1zID4gMTYpXG4gICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiB3cm9uZyBudW1iZXIgb2YgYmlnYXJyYXkgZGltZW5zaW9uc1wiKTtcbiAgdmFyIHRhZyA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIHZhciBraW5kID0gdGFnICYgMHhmZlxuICB2YXIgbGF5b3V0ID0gKHRhZyA+PiA4KSAmIDE7XG4gIHZhciBkaW1zID0gW11cbiAgaWYobmFtZSA9PSBcIl9iaWdhcnIwMlwiKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykge1xuICAgICAgdmFyIHNpemVfZGltID0gcmVhZGVyLnJlYWQxNnUoKTtcbiAgICAgIGlmKHNpemVfZGltID09IDB4ZmZmZil7XG4gICAgICAgIHZhciBzaXplX2RpbV9oaSA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgIHZhciBzaXplX2RpbV9sbyA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgIGlmKHNpemVfZGltX2hpICE9IDApXG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBiaWdhcnJheSBkaW1lbnNpb24gb3ZlcmZsb3cgaW4gMzJiaXRcIik7XG4gICAgICAgIHNpemVfZGltID0gc2l6ZV9kaW1fbG87XG4gICAgICB9XG4gICAgICBkaW1zLnB1c2goc2l6ZV9kaW0pO1xuICAgIH1cbiAgZWxzZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykgZGltcy5wdXNoKHJlYWRlci5yZWFkMzJ1KCkpO1xuICB2YXIgc2l6ZSA9IGNhbWxfYmFfZ2V0X3NpemUoZGltcyk7XG4gIHZhciBkYXRhID0gY2FtbF9iYV9jcmVhdGVfYnVmZmVyKGtpbmQsIHNpemUpO1xuICB2YXIgYmEgPSBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbiAgc3dpdGNoKGtpbmQpe1xuICBjYXNlIDI6ICAvL0ludDhBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkOHMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMzogIC8vVWludDhBcnJheVxuICBjYXNlIDEyOiAvL1VpbnQ4QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDQ6ICAvLyBJbnQxNkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQxNnMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNTogIC8vIFVpbnQxNkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQxNnUoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNjogIC8vIEludDMyQXJyYXkgKGludDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDg6ICAvLyBJbnQzMkFycmF5IChpbnQpXG4gIGNhc2UgOTogIC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICB2YXIgc2l4dHkgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgaWYoc2l4dHkpIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogY2Fubm90IHJlYWQgYmlnYXJyYXkgd2l0aCA2NC1iaXQgT0NhbWwgaW50c1wiKTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDMycygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA3OiAvLyAoaW50NjQpXG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIGludDY0ID0gY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KTtcbiAgICAgIGJhLnNldChpLGludDY0KTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTogIC8vIEZsb2F0NjRBcnJheVxuICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciBmID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgYmEuc2V0KGksZik7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDA6ICAvLyBGbG9hdDMyQXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIHZhciBmID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgYmEuc2V0KGksZik7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiAvLyBGbG9hdDMyQXJyYXkgKGNvbXBsZXgzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIHZhciByZSA9IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyhyZWFkZXIucmVhZDMycygpKTtcbiAgICAgIHZhciBpbSA9IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyhyZWFkZXIucmVhZDMycygpKTtcbiAgICAgIGJhLnNldChpLFsyNTQscmUsaW1dKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciByZSA9IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhjYW1sX2ludDY0X29mX2J5dGVzKHQpKTtcbiAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciBpbSA9IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhjYW1sX2ludDY0X29mX2J5dGVzKHQpKTtcbiAgICAgIGJhLnNldChpLFsyNTQscmUsaW1dKTtcbiAgICB9XG4gICAgYnJlYWtcbiAgfVxuICBzelswXSA9ICg0ICsgbnVtX2RpbXMpICogNDtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xufVxuXG4vL0RlcHJlY2F0ZWRcbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlX2Zyb21cbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2NyZWF0ZV9mcm9tKGRhdGExLCBkYXRhMiwganN0eXAsIGtpbmQsIGxheW91dCwgZGltcyl7XG4gIGlmKGRhdGEyIHx8IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCkgPT0gMil7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iYV9jcmVhdGVfZnJvbTogdXNlIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcIik7XG4gIH1cbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGExKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9oYXNoIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2hhc2hfbWl4X2ludCwgY2FtbF9oYXNoX21peF9mbG9hdFxuZnVuY3Rpb24gY2FtbF9iYV9oYXNoKGJhKXtcbiAgdmFyIG51bV9lbHRzID0gY2FtbF9iYV9nZXRfc2l6ZShiYS5kaW1zKTtcbiAgdmFyIGggPSAwO1xuICBzd2l0Y2goYmEua2luZCl7XG4gIGNhc2UgMjogIC8vSW50OEFycmF5XG4gIGNhc2UgMzogIC8vVWludDhBcnJheVxuICBjYXNlIDEyOiAvL1VpbnQ4QXJyYXlcbiAgICBpZihudW1fZWx0cyA+IDI1NikgbnVtX2VsdHMgPSAyNTY7XG4gICAgdmFyIHcgPSAwLCBpID0wO1xuICAgIGZvcihpID0gMDsgaSArIDQgPD0gYmEuZGF0YS5sZW5ndGg7IGkrPTQpe1xuICAgICAgdyA9IGJhLmRhdGFbaSswXSB8IChiYS5kYXRhW2krMV0gPDwgOCkgfCAoYmEuZGF0YVtpKzJdIDw8IDE2KSB8IChiYS5kYXRhW2krM10gPDwgMjQpO1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsdyk7XG4gICAgfVxuICAgIHcgPSAwO1xuICAgIHN3aXRjaCAobnVtX2VsdHMgJiAzKSB7XG4gICAgY2FzZSAzOiB3ICA9IGJhLmRhdGFbaSsyXSA8PCAxNjsgICAgLyogZmFsbHRocm91Z2ggKi9cbiAgICBjYXNlIDI6IHcgfD0gYmEuZGF0YVtpKzFdIDw8IDg7ICAgICAvKiBmYWxsdGhyb3VnaCAqL1xuICAgIGNhc2UgMTogdyB8PSBiYS5kYXRhW2krMF07XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDQ6ICAvLyBJbnQxNkFycmF5XG4gIGNhc2UgNTogIC8vIFVpbnQxNkFycmF5XG4gICAgaWYobnVtX2VsdHMgPiAxMjgpIG51bV9lbHRzID0gMTI4O1xuICAgIHZhciB3ID0gMCwgaSA9MDtcbiAgICBmb3IoaSA9IDA7IGkgKyAyIDw9IGJhLmRhdGEubGVuZ3RoOyBpKz0yKXtcbiAgICAgIHcgPSBiYS5kYXRhW2krMF0gfCAoYmEuZGF0YVtpKzFdIDw8IDE2KTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLHcpO1xuICAgIH1cbiAgICBpZiAoKG51bV9lbHRzICYgMSkgIT0gMClcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSA2OiAgLy8gSW50MzJBcnJheSAoaW50MzIpXG4gICAgaWYgKG51bV9lbHRzID4gNjQpIG51bV9lbHRzID0gNjQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgODogIC8vIEludDMyQXJyYXkgKGludClcbiAgY2FzZSA5OiAgLy8gSW50MzJBcnJheSAobmF0aXZlaW50KVxuICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICBjYXNlIDc6ICAvLyBJbnQzMkFycmF5IChpbnQ2NClcbiAgICBpZiAobnVtX2VsdHMgPiAzMikgbnVtX2VsdHMgPSAzMjtcbiAgICBudW1fZWx0cyAqPSAyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiAvLyBGbG9hdDMyQXJyYXkgKGNvbXBsZXgzMilcbiAgICBudW1fZWx0cyAqPTI7IC8qIGZhbGx0aHJvdWdoICovXG4gIGNhc2UgMDogIC8vIEZsb2F0MzJBcnJheVxuICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgIG51bV9lbHRzICo9MjsgLyogZmFsbHRocm91Z2ggKi9cbiAgY2FzZSAxOiAgLy8gRmxvYXQ2NEFycmF5XG4gICAgaWYgKG51bV9lbHRzID4gMzIpIG51bV9lbHRzID0gMzI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV90b190eXBlZF9hcnJheSBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJhKXtcbiAgcmV0dXJuIGJhLmRhdGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheSh0YSl7XG4gIHZhciBraW5kO1xuICBpZiAgICAgICh0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkga2luZCA9IDA7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSBraW5kID0gMTtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQ4QXJyYXkpIGtpbmQgPSAyO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIGtpbmQgPSAzO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSBraW5kID0gMztcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQxNkFycmF5KSBraW5kID0gNDtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkga2luZCA9IDU7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgSW50MzJBcnJheSkga2luZCA9IDY7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDMyQXJyYXkpIGtpbmQgPSA2O1xuICBlbHNlIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheTogdW5zdXBwb3J0ZWQga2luZFwiKTtcbiAgcmV0dXJuIGtpbmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZnJvbV90eXBlZF9hcnJheSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5KHRhKXtcbiAgdmFyIGtpbmQgPSBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkodGEpO1xuICB2YXIgdGEgPVxuICAgICAgLyogTmVlZGVkIHRvIGF2b2lkIHVuc2lnbmVkIHNldHRlcnMgb3ZlcmZsb3dpbmdcbiAgICAgICAgIHRoZSByYW5nZSBvZiBPQ2FtbCBbaW50MzJdIHZhbHVlcy4gKi9cbiAgICAgIHRhIGluc3RhbmNlb2YgVWludDMyQXJyYXkgP1xuICAgICAgbmV3IEludDMyQXJyYXkodGEuYnVmZmVyICx0YS5ieXRlT2Zmc2V0LCB0YS5sZW5ndGgpIDogdGE7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgMCwgW3RhLmxlbmd0aF0sIHRhKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2ludCBjb25zdCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcsIGNhbWxfc3RyX3JlcGVhdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9mb3JtYXRfaW50KGZtdCwgaSkge1xuICBpZiAoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhmbXQpID09IFwiJWRcIikgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIitpKTtcbiAgdmFyIGYgPSBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpO1xuICBpZiAoaSA8IDApIHsgaWYgKGYuc2lnbmVkY29udikgeyBmLnNpZ24gPSAtMTsgaSA9IC1pOyB9IGVsc2UgaSA+Pj49IDA7IH1cbiAgdmFyIHMgPSBpLnRvU3RyaW5nKGYuYmFzZSk7XG4gIGlmIChmLnByZWMgPj0gMCkge1xuICAgIGYuZmlsbGVyID0gJyAnO1xuICAgIHZhciBuID0gZi5wcmVjIC0gcy5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBzID0gY2FtbF9zdHJfcmVwZWF0IChuLCAnMCcpICsgcztcbiAgfVxuICByZXR1cm4gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCBzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSAocykge1xuICB2YXIgaSA9IDAsIGxlbiA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSwgYmFzZSA9IDEwLCBzaWduID0gMTtcbiAgaWYgKGxlbiA+IDApIHtcbiAgICBzd2l0Y2ggKGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocyxpKSkge1xuICAgIGNhc2UgNDU6IGkrKzsgc2lnbiA9IC0xOyBicmVhaztcbiAgICBjYXNlIDQzOiBpKys7IHNpZ24gPSAxOyBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGkgKyAxIDwgbGVuICYmIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSkgPT0gNDgpXG4gICAgc3dpdGNoIChjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAxKSkge1xuICAgIGNhc2UgMTIwOiBjYXNlIDg4OiBiYXNlID0gMTY7IGkgKz0gMjsgYnJlYWs7XG4gICAgY2FzZSAxMTE6IGNhc2UgNzk6IGJhc2UgPSAgODsgaSArPSAyOyBicmVhaztcbiAgICBjYXNlICA5ODogY2FzZSA2NjogYmFzZSA9ICAyOyBpICs9IDI7IGJyZWFrO1xuICAgIGNhc2UgMTE3OiBjYXNlIDg1OiBpICs9IDI7IGJyZWFrO1xuICAgIH1cbiAgcmV0dXJuIFtpLCBzaWduLCBiYXNlXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9kaWdpdFxuZnVuY3Rpb24gY2FtbF9wYXJzZV9kaWdpdChjKSB7XG4gIGlmIChjID49IDQ4ICYmIGMgPD0gNTcpICByZXR1cm4gYyAtIDQ4O1xuICBpZiAoYyA+PSA2NSAmJiBjIDw9IDkwKSAgcmV0dXJuIGMgLSA1NTtcbiAgaWYgKGMgPj0gOTcgJiYgYyA8PSAxMjIpIHJldHVybiBjIC0gODc7XG4gIHJldHVybiAtMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnRfb2Zfc3RyaW5nIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlLCBjYW1sX3BhcnNlX2RpZ2l0LCBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2ludF9vZl9zdHJpbmcgKHMpIHtcbiAgdmFyIHIgPSBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UgKHMpO1xuICB2YXIgaSA9IHJbMF0sIHNpZ24gPSByWzFdLCBiYXNlID0gclsyXTtcbiAgdmFyIGxlbiA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKTtcbiAgdmFyIHRocmVzaG9sZCA9IC0xID4+PiAwO1xuICB2YXIgYyA9IChpIDwgbGVuKT9jYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpOjA7XG4gIHZhciBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBkO1xuICBmb3IgKGkrKztpPGxlbjtpKyspIHtcbiAgICBjID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKTtcbiAgICBpZiAoYyA9PSA5NSkgY29udGludWU7XG4gICAgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gICAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgYnJlYWs7XG4gICAgcmVzID0gYmFzZSAqIHJlcyArIGQ7XG4gICAgaWYgKHJlcyA+IHRocmVzaG9sZCkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIH1cbiAgaWYgKGkgIT0gbGVuKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgLy8gRm9yIGJhc2UgZGlmZmVyZW50IGZyb20gMTAsIHdlIGV4cGVjdCBhbiB1bnNpZ25lZCByZXByZXNlbnRhdGlvbixcbiAgLy8gaGVuY2UgYW55IHZhbHVlIG9mICdyZXMnIChsZXNzIHRoYW4gJ3RocmVzaG9sZCcpIGlzIGFjY2VwdGFibGUuXG4gIC8vIEJ1dCB3ZSBoYXZlIHRvIGNvbnZlcnQgdGhlIHJlc3VsdCBiYWNrIHRvIGEgc2lnbmVkIGludGVnZXIuXG4gIHJlcyA9IHNpZ24gKiByZXM7XG4gIGlmICgoYmFzZSA9PSAxMCkgJiYgKChyZXMgfCAwKSAhPSByZXMpKVxuICAgIC8qIFNpZ25lZCByZXByZXNlbnRhdGlvbiBleHBlY3RlZCwgYWxsb3cgLTJeKG5iaXRzLTEpIHRvIDJeKG5iaXRzLTEpIC0gMSAqL1xuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICByZXR1cm4gcmVzIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tdWwgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbXVsKGEsYil7XG4gIHJldHVybiBNYXRoLmltdWwoYSxiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kaXZcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfemVyb19kaXZpZGVcbmZ1bmN0aW9uIGNhbWxfZGl2KHgseSkge1xuICBpZiAoeSA9PSAwKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICByZXR1cm4gKHgveSl8MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tb2Rcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfemVyb19kaXZpZGVcbmZ1bmN0aW9uIGNhbWxfbW9kKHgseSkge1xuICBpZiAoeSA9PSAwKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICByZXR1cm4geCV5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Jzd2FwMTZcbmZ1bmN0aW9uIGNhbWxfYnN3YXAxNih4KSB7XG4gIHJldHVybiAoKCgoeCAmIDB4MDBGRikgPDwgOCkgfFxuICAgICAgICAgICAoKHggJiAweEZGMDApID4+IDgpKSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2Jzd2FwXG5mdW5jdGlvbiBjYW1sX2ludDMyX2Jzd2FwKHgpIHtcbiAgcmV0dXJuICgoKHggJiAweDAwMDAwMEZGKSA8PCAyNCkgfFxuICAgICAgICAgICgoeCAmIDB4MDAwMEZGMDApIDw8IDgpIHxcbiAgICAgICAgICAoKHggJiAweDAwRkYwMDAwKSA+Pj4gOCkgfFxuICAgICAgICAgICgoeCAmIDB4RkYwMDAwMDApID4+PiAyNCkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9ic3dhcFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF9ic3dhcCh4KSB7XG4gIHZhciB5ID0gY2FtbF9pbnQ2NF90b19ieXRlcyh4KTtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoW3lbN10sIHlbNl0sIHlbNV0sIHlbNF0sIHlbM10sIHlbMl0sIHlbMV0sIHlbMF1dKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSGFzaHRibFxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF91bml2X3BhcmFtIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfc3RyaW5nLCBjYW1sX2lzX21sX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMsIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCwgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9WZXJzaW9uOiA8IDQuMTJcbmZ1bmN0aW9uIGNhbWxfaGFzaF91bml2X3BhcmFtIChjb3VudCwgbGltaXQsIG9iaikge1xuICB2YXIgaGFzaF9hY2N1ID0gMDtcbiAgZnVuY3Rpb24gaGFzaF9hdXggKG9iaikge1xuICAgIGxpbWl0IC0tO1xuICAgIGlmIChjb3VudCA8IDAgfHwgbGltaXQgPCAwKSByZXR1cm47XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5ICYmIG9ialswXSA9PT0gKG9ialswXXwwKSkge1xuICAgICAgc3dpdGNoIChvYmpbMF0pIHtcbiAgICAgIGNhc2UgMjQ4OlxuICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgY291bnQgLS07XG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiA2NTU5OSArIG9ialsyXSkgfCAwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUwOlxuICAgICAgICAvLyBGb3J3YXJkXG4gICAgICAgIGxpbWl0Kys7IGhhc2hfYXV4KG9iaik7IGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY291bnQgLS07XG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIG9ialswXSkgfCAwO1xuICAgICAgICBmb3IgKHZhciBpID0gb2JqLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIGhhc2hfYXV4IChvYmpbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyhvYmopKSB7XG4gICAgICBjb3VudCAtLTtcbiAgICAgIHZhciBjb250ZW50ID0gY2FtbF9tbF9ieXRlc19jb250ZW50KG9iaik7XG4gICAgICBpZih0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBmb3IgKHZhciBiID0gY29udGVudCwgbCA9IGIubGVuZ3RoLCBpID0gMDsgaSA8IGw7IGkrKylcbiAgICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBiLmNoYXJDb2RlQXQoaSkpIHwgMDtcbiAgICAgIH0gZWxzZSB7IC8qIEFSUkFZICovXG4gICAgICAgIGZvciAodmFyIGEgPSBjb250ZW50LCBsID0gYS5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGFbaV0pIHwgMDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKG9iaikpIHtcbiAgICAgIHZhciBqc2J5dGVzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhvYmopO1xuICAgICAgZm9yICh2YXIgYiA9IGpzYnl0ZXMsIGwgPSBqc2J5dGVzLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGIuY2hhckNvZGVBdChpKSkgfCAwO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZm9yICh2YXIgYiA9IG9iaiwgbCA9IG9iai5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBiLmNoYXJDb2RlQXQoaSkpIHwgMDtcbiAgICB9IGVsc2UgaWYgKG9iaiA9PT0gKG9ianwwKSkge1xuICAgICAgLy8gSW50ZWdlclxuICAgICAgY291bnQgLS07XG4gICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogNjU1OTkgKyBvYmopIHwgMDtcbiAgICB9IGVsc2UgaWYgKG9iaiA9PT0gK29iaikge1xuICAgICAgLy8gRmxvYXRcbiAgICAgIGNvdW50LS07XG4gICAgICB2YXIgcCA9IGNhbWxfaW50NjRfdG9fYnl0ZXMgKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCAob2JqKSk7XG4gICAgICBmb3IgKHZhciBpID0gNzsgaSA+PSAwOyBpLS0pIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIHBbaV0pIHwgMDtcbiAgICB9IGVsc2UgaWYob2JqICYmIG9iai5jYW1sX2N1c3RvbSkge1xuICAgICAgaWYoY2FtbF9jdXN0b21fb3BzW29iai5jYW1sX2N1c3RvbV0gJiYgY2FtbF9jdXN0b21fb3BzW29iai5jYW1sX2N1c3RvbV0uaGFzaCkge1xuICAgICAgICB2YXIgaCA9IGNhbWxfY3VzdG9tX29wc1tvYmouY2FtbF9jdXN0b21dLmhhc2gob2JqKSB8IDA7XG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiA2NTU5OSArIGgpIHwgMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaGFzaF9hdXggKG9iaik7XG4gIHJldHVybiBoYXNoX2FjY3UgJiAweDNGRkZGRkZGO1xufVxuXG4vL2Z1bmN0aW9uIFJPVEwzMih4LG4pIHsgcmV0dXJuICgoeCA8PCBuKSB8ICh4ID4+PiAoMzItbikpKTsgfVxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfbXVsXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ludChoLGQpIHtcbiAgZCA9IGNhbWxfbXVsKGQsIDB4Y2M5ZTJkNTF8MCk7XG4gIGQgPSAoKGQgPDwgMTUpIHwgKGQgPj4+ICgzMi0xNSkpKTsgLy8gUk9UTDMyKGQsIDE1KTtcbiAgZCA9IGNhbWxfbXVsKGQsIDB4MWI4NzM1OTMpO1xuICBoIF49IGQ7XG4gIGggPSAoKGggPDwgMTMpIHwgKGggPj4+ICgzMi0xMykpKTsgICAvL1JPVEwzMihoLCAxMyk7XG4gIHJldHVybiAoKChoICsgKGggPDwgMikpfDApICsgKDB4ZTY1NDZiNjR8MCkpfDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfbXVsXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpIHtcbiAgaCBePSBoID4+PiAxNjtcbiAgaCA9IGNhbWxfbXVsIChoLCAweDg1ZWJjYTZifDApO1xuICBoIF49IGggPj4+IDEzO1xuICBoID0gY2FtbF9tdWwgKGgsIDB4YzJiMmFlMzV8MCk7XG4gIGggXj0gaCA+Pj4gMTY7XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaGFzaF9taXhfaW50NjRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmxvYXQgKGgsIHYwKSB7XG4gIHJldHVybiBjYW1sX2hhc2hfbWl4X2ludDY0KGgsIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCAodjApKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfaW50NjRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2xvMzIsIGNhbWxfaW50NjRfaGkzMlxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9pbnQ2NCAoaCwgdikge1xuICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgY2FtbF9pbnQ2NF9sbzMyKHYpKTtcbiAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGNhbWxfaW50NjRfaGkzMih2KSk7XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCwgcykge1xuICB2YXIgbGVuID0gcy5sZW5ndGgsIGksIHc7XG4gIGZvciAoaSA9IDA7IGkgKyA0IDw9IGxlbjsgaSArPSA0KSB7XG4gICAgdyA9IHMuY2hhckNvZGVBdChpKVxuICAgICAgfCAocy5jaGFyQ29kZUF0KGkrMSkgPDwgOClcbiAgICAgIHwgKHMuY2hhckNvZGVBdChpKzIpIDw8IDE2KVxuICAgICAgfCAocy5jaGFyQ29kZUF0KGkrMykgPDwgMjQpO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgfVxuICB3ID0gMDtcbiAgc3dpdGNoIChsZW4gJiAzKSB7XG4gIGNhc2UgMzogdyAgPSBzLmNoYXJDb2RlQXQoaSsyKSA8PCAxNjtcbiAgY2FzZSAyOiB3IHw9IHMuY2hhckNvZGVBdChpKzEpIDw8IDg7XG4gIGNhc2UgMTpcbiAgICB3IHw9IHMuY2hhckNvZGVBdChpKTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIGRlZmF1bHQ6XG4gIH1cbiAgaCBePSBsZW47XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FyclxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyKGgsIHMpIHtcbiAgdmFyIGxlbiA9IHMubGVuZ3RoLCBpLCB3O1xuICBmb3IgKGkgPSAwOyBpICsgNCA8PSBsZW47IGkgKz0gNCkge1xuICAgIHcgPSBzW2ldXG4gICAgICB8IChzW2krMV0gPDwgOClcbiAgICAgIHwgKHNbaSsyXSA8PCAxNilcbiAgICAgIHwgKHNbaSszXSA8PCAyNCk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICB9XG4gIHcgPSAwO1xuICBzd2l0Y2ggKGxlbiAmIDMpIHtcbiAgY2FzZSAzOiB3ICA9IHNbaSsyXSA8PCAxNjtcbiAgY2FzZSAyOiB3IHw9IHNbaSsxXSA8PCA4O1xuICBjYXNlIDE6IHcgfD0gc1tpXTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIGRlZmF1bHQ6XG4gIH1cbiAgaCBePSBsZW47XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9ieXRlc19hcnJcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfYnl0ZXMoaCwgdikge1xuICB2YXIgY29udGVudCA9IGNhbWxfbWxfYnl0ZXNfY29udGVudCh2KTtcbiAgaWYodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpXG4gICAgcmV0dXJuIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBjb250ZW50KVxuICBlbHNlIC8qIEFSUkFZICovXG4gICAgcmV0dXJuIGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyKGgsIGNvbnRlbnQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X3N0cmluZyhoLCB2KSB7XG4gIHJldHVybiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCwgY2FtbF9qc2J5dGVzX29mX3N0cmluZyh2KSk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfc3RyaW5nLCBjYW1sX2lzX21sX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludCwgY2FtbF9oYXNoX21peF9maW5hbFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9mbG9hdCwgY2FtbF9oYXNoX21peF9zdHJpbmcsIGNhbWxfaGFzaF9taXhfYnl0ZXMsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbmZ1bmN0aW9uIGNhbWxfaGFzaCAoY291bnQsIGxpbWl0LCBzZWVkLCBvYmopIHtcbiAgdmFyIHF1ZXVlLCByZCwgd3IsIHN6LCBudW0sIGgsIHYsIGksIGxlbjtcbiAgc3ogPSBsaW1pdDtcbiAgaWYgKHN6IDwgMCB8fCBzeiA+IDI1Nikgc3ogPSAyNTY7XG4gIG51bSA9IGNvdW50O1xuICBoID0gc2VlZDtcbiAgcXVldWUgPSBbb2JqXTsgcmQgPSAwOyB3ciA9IDE7XG4gIHdoaWxlIChyZCA8IHdyICYmIG51bSA+IDApIHtcbiAgICB2ID0gcXVldWVbcmQrK107XG4gICAgaWYgKHYgJiYgdi5jYW1sX2N1c3RvbSl7XG4gICAgICBpZihjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0gJiYgY2FtbF9jdXN0b21fb3BzW3YuY2FtbF9jdXN0b21dLmhhc2gpIHtcbiAgICAgICAgdmFyIGhoID0gY2FtbF9jdXN0b21fb3BzW3YuY2FtbF9jdXN0b21dLmhhc2godik7XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludCAoaCwgaGgpO1xuICAgICAgICBudW0gLS07XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2WzBdID09PSAodlswXXwwKSkge1xuICAgICAgc3dpdGNoICh2WzBdKSB7XG4gICAgICBjYXNlIDI0ODpcbiAgICAgICAgLy8gT2JqZWN0XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB2WzJdKTtcbiAgICAgICAgbnVtLS07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTA6XG4gICAgICAgIC8vIEZvcndhcmRcbiAgICAgICAgcXVldWVbLS1yZF0gPSB2WzFdO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmKGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh2WzBdKSkge1xuICAgICAgICAgIC8qIEFsbCBjb250aW51YXRpb25zIGhhc2ggdG8gdGhlIHNhbWUgdmFsdWUsXG4gICAgICAgICAgICAgc2luY2Ugd2UgaGF2ZSBubyBpZGVhIGhvdyB0byBkaXN0aW5ndWlzaCB0aGVtLiAqL1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0YWcgPSAoKHYubGVuZ3RoIC0gMSkgPDwgMTApIHwgdlswXTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHRhZyk7XG4gICAgICAgIGZvciAoaSA9IDEsIGxlbiA9IHYubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBpZiAod3IgPj0gc3opIGJyZWFrO1xuICAgICAgICAgIHF1ZXVlW3dyKytdID0gdltpXTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXModikpIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2J5dGVzKGgsdilcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcodikpIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X3N0cmluZyhoLHYpXG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsdilcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodiA9PT0gKHZ8MCkpIHtcbiAgICAgIC8vIEludGVnZXJcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB2K3YrMSk7XG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAvLyBGbG9hdFxuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQoaCx2KTtcbiAgICAgIG51bS0tO1xuICAgIH1cbiAgfVxuICBoID0gY2FtbF9oYXNoX21peF9maW5hbChoKTtcbiAgcmV0dXJuIGggJiAweDNGRkZGRkZGO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19oYXNoXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ZpbmFsLCBjYW1sX2hhc2hfbWl4X3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfaGFzaChoLCB2KXtcbiAgdmFyIGggPSBjYW1sX2hhc2hfbWl4X3N0cmluZyhoLHYpO1xuICB2YXIgaCA9IGNhbWxfaGFzaF9taXhfZmluYWwoaCk7XG4gIHJldHVybiBoICYgMHgzRkZGRkZGRjtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfY29uc3RhbnRzXG52YXIgY2FtbF9tYXJzaGFsX2NvbnN0YW50cyA9IHtcbiAgUFJFRklYX1NNQUxMX0JMT0NLOiAgICAgICAgIDB4ODAsXG4gIFBSRUZJWF9TTUFMTF9JTlQ6ICAgICAgICAgICAweDQwLFxuICBQUkVGSVhfU01BTExfU1RSSU5HOiAgICAgICAgMHgyMCxcbiAgQ09ERV9JTlQ4OiAgICAgICAgICAgICAgICAgIDB4MDAsXG4gIENPREVfSU5UMTY6ICAgICAgICAgICAgICAgICAweDAxLFxuICBDT0RFX0lOVDMyOiAgICAgICAgICAgICAgICAgMHgwMixcbiAgQ09ERV9JTlQ2NDogICAgICAgICAgICAgICAgIDB4MDMsXG4gIENPREVfU0hBUkVEODogICAgICAgICAgICAgICAweDA0LFxuICBDT0RFX1NIQVJFRDE2OiAgICAgICAgICAgICAgMHgwNSxcbiAgQ09ERV9TSEFSRUQzMjogICAgICAgICAgICAgIDB4MDYsXG4gIENPREVfQkxPQ0szMjogICAgICAgICAgICAgICAweDA4LFxuICBDT0RFX0JMT0NLNjQ6ICAgICAgICAgICAgICAgMHgxMyxcbiAgQ09ERV9TVFJJTkc4OiAgICAgICAgICAgICAgIDB4MDksXG4gIENPREVfU1RSSU5HMzI6ICAgICAgICAgICAgICAweDBBLFxuICBDT0RFX0RPVUJMRV9CSUc6ICAgICAgICAgICAgMHgwQixcbiAgQ09ERV9ET1VCTEVfTElUVExFOiAgICAgICAgIDB4MEMsXG4gIENPREVfRE9VQkxFX0FSUkFZOF9CSUc6ICAgICAweDBELFxuICBDT0RFX0RPVUJMRV9BUlJBWThfTElUVExFOiAgMHgwRSxcbiAgQ09ERV9ET1VCTEVfQVJSQVkzMl9CSUc6ICAgIDB4MEYsXG4gIENPREVfRE9VQkxFX0FSUkFZMzJfTElUVExFOiAweDA3LFxuICBDT0RFX0NPREVQT0lOVEVSOiAgICAgICAgICAgMHgxMCxcbiAgQ09ERV9JTkZJWFBPSU5URVI6ICAgICAgICAgIDB4MTEsXG4gIENPREVfQ1VTVE9NOiAgICAgICAgICAgICAgICAweDEyLFxuICBDT0RFX0NVU1RPTV9MRU46ICAgICAgICAgICAgMHgxOCxcbiAgQ09ERV9DVVNUT01fRklYRUQ6ICAgICAgICAgIDB4MTlcbn1cblxuXG4vL1Byb3ZpZGVzOiBVSW50OEFycmF5UmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9hcnJheSwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gVUludDhBcnJheVJlYWRlciAocywgaSkgeyB0aGlzLnMgPSBzOyB0aGlzLmkgPSBpOyB9XG5VSW50OEFycmF5UmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgcmVhZDh1OmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuc1t0aGlzLmkrK107IH0sXG4gIHJlYWQ4czpmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnNbdGhpcy5pKytdIDw8IDI0ID4+IDI0OyB9LFxuICByZWFkMTZ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKHNbaV0gPDwgOCkgfCBzW2kgKyAxXVxuICB9LFxuICByZWFkMTZzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKHNbaV0gPDwgMjQgPj4gMTYpIHwgc1tpICsgMV07XG4gIH0sXG4gIHJlYWQzMnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKHNbaV0gPDwgMjQpIHwgKHNbaSsxXSA8PCAxNikgfFxuICAgICAgICAgICAgKHNbaSsyXSA8PCA4KSB8IHNbaSszXSkgPj4+IDA7XG4gIH0sXG4gIHJlYWQzMnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoc1tpXSA8PCAyNCkgfCAoc1tpKzFdIDw8IDE2KSB8XG4gICAgICAoc1tpKzJdIDw8IDgpIHwgc1tpKzNdO1xuICB9LFxuICByZWFkc3RyOmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheSh0aGlzLnMuc3ViYXJyYXkoaSwgaSArIGxlbikpO1xuICB9LFxuICByZWFkdWludDhhcnJheTpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gdGhpcy5zLnN1YmFycmF5KGksIGkgKyBsZW4pO1xuICB9XG59XG5cblxuLy9Qcm92aWRlczogTWxTdHJpbmdSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIE1sU3RyaW5nUmVhZGVyIChzLCBpKSB7IHRoaXMucyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocyk7IHRoaXMuaSA9IGk7IH1cbk1sU3RyaW5nUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgcmVhZDh1OmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucy5jaGFyQ29kZUF0KHRoaXMuaSsrKTsgfSxcbiAgcmVhZDhzOmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucy5jaGFyQ29kZUF0KHRoaXMuaSsrKSA8PCAyNCA+PiAyNDsgfSxcbiAgcmVhZDE2dTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzLmNoYXJDb2RlQXQoaSkgPDwgOCkgfCBzLmNoYXJDb2RlQXQoaSArIDEpXG4gIH0sXG4gIHJlYWQxNnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAocy5jaGFyQ29kZUF0KGkpIDw8IDI0ID4+IDE2KSB8IHMuY2hhckNvZGVBdChpICsgMSk7XG4gIH0sXG4gIHJlYWQzMnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfCAocy5jaGFyQ29kZUF0KGkrMSkgPDwgMTYpIHxcbiAgICAgICAgICAgIChzLmNoYXJDb2RlQXQoaSsyKSA8PCA4KSB8IHMuY2hhckNvZGVBdChpKzMpKSA+Pj4gMDtcbiAgfSxcbiAgcmVhZDMyczpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuIChzLmNoYXJDb2RlQXQoaSkgPDwgMjQpIHwgKHMuY2hhckNvZGVBdChpKzEpIDw8IDE2KSB8XG4gICAgICAocy5jaGFyQ29kZUF0KGkrMikgPDwgOCkgfCBzLmNoYXJDb2RlQXQoaSszKTtcbiAgfSxcbiAgcmVhZHN0cjpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh0aGlzLnMuc3Vic3RyaW5nKGksIGkgKyBsZW4pKTtcbiAgfSxcbiAgcmVhZHVpbnQ4YXJyYXk6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICB2YXIgcyA9IHRoaXMucztcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICBmb3IodmFyIGogPSAwOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGJbal0gPSBzLmNoYXJDb2RlQXQoaSArIGopO1xuICAgIH1cbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBiO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IEJpZ1N0cmluZ1JlYWRlclxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXksIGNhbWxfYmFfZ2V0XzFcbmZ1bmN0aW9uIEJpZ1N0cmluZ1JlYWRlciAoYnMsIGkpIHsgdGhpcy5zID0gYnM7IHRoaXMuaSA9IGk7IH1cbkJpZ1N0cmluZ1JlYWRlci5wcm90b3R5cGUgPSB7XG4gIHJlYWQ4dTpmdW5jdGlvbiAoKSB7IHJldHVybiBjYW1sX2JhX2dldF8xKHRoaXMucyx0aGlzLmkrKyk7IH0sXG4gIHJlYWQ4czpmdW5jdGlvbiAoKSB7IHJldHVybiBjYW1sX2JhX2dldF8xKHRoaXMucyx0aGlzLmkrKykgPDwgMjQgPj4gMjQ7IH0sXG4gIHJlYWQxNnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoY2FtbF9iYV9nZXRfMShzLGkpIDw8IDgpIHwgY2FtbF9iYV9nZXRfMShzLGkgKyAxKVxuICB9LFxuICByZWFkMTZzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKGNhbWxfYmFfZ2V0XzEocyxpKSA8PCAyNCA+PiAxNikgfCBjYW1sX2JhX2dldF8xKHMsaSArIDEpO1xuICB9LFxuICByZWFkMzJ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKChjYW1sX2JhX2dldF8xKHMsaSkgICA8PCAyNCkgfCAoY2FtbF9iYV9nZXRfMShzLGkrMSkgPDwgMTYpIHxcbiAgICAgICAgICAgIChjYW1sX2JhX2dldF8xKHMsaSsyKSA8PCA4KSAgfCBjYW1sX2JhX2dldF8xKHMsaSszKSAgICAgICAgICkgPj4+IDA7XG4gIH0sXG4gIHJlYWQzMnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoY2FtbF9iYV9nZXRfMShzLGkpICAgPDwgMjQpIHwgKGNhbWxfYmFfZ2V0XzEocyxpKzEpIDw8IDE2KSB8XG4gICAgICAoY2FtbF9iYV9nZXRfMShzLGkrMikgPDwgOCkgIHwgY2FtbF9iYV9nZXRfMShzLGkrMyk7XG4gIH0sXG4gIHJlYWRzdHI6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHZhciBhcnIgPSBuZXcgQXJyYXkobGVuKVxuICAgIGZvcih2YXIgaiA9IDA7IGogPCBsZW47IGorKyl7XG4gICAgICBhcnJbal0gPSBjYW1sX2JhX2dldF8xKHRoaXMucywgaStqKTtcbiAgICB9XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoYXJyKTtcbiAgfSxcbiAgcmVhZHVpbnQ4YXJyYXk6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHZhciBvZmZzZXQgPSB0aGlzLm9mZnNldChpKTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiB0aGlzLnMuZGF0YS5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbik7XG4gIH1cbn1cblxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cywgY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9mbG9hdF9vZl9ieXRlcyAoYSkge1xuICByZXR1cm4gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzIChjYW1sX2ludDY0X29mX2J5dGVzIChhKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9zdHJpbmcgbXV0YWJsZVxuLy9SZXF1aXJlczogTWxTdHJpbmdSZWFkZXIsIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXJcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9zdHJpbmcocyxvZnMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBNbFN0cmluZ1JlYWRlciAocywgdHlwZW9mIG9mcz09XCJudW1iZXJcIj9vZnM6b2ZzWzBdKTtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIocmVhZGVyLCBvZnMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBNbFN0cmluZ1JlYWRlciwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlciwgY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyhzLG9mcykge1xuICB2YXIgcmVhZGVyID0gbmV3IE1sU3RyaW5nUmVhZGVyIChjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSwgdHlwZW9mIG9mcz09XCJudW1iZXJcIj9vZnM6b2ZzWzBdKTtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIocmVhZGVyLCBvZnMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgc2l6ZVswXSA9IDg7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzICh0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X21hcnNoYWwod3JpdGVyLCB2LCBzaXplcykge1xuICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMgKHYpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgd3JpdGVyLndyaXRlICg4LCBiW2ldKTtcbiAgc2l6ZXNbMF0gPSA4OyBzaXplc1sxXSA9IDg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfdW5tYXJzaGFsXG5mdW5jdGlvbiBjYW1sX2ludDMyX3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICBzaXplWzBdID0gNDtcbiAgcmV0dXJuIHJlYWRlci5yZWFkMzJzICgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICBzd2l0Y2ggKHJlYWRlci5yZWFkOHUgKCkpIHtcbiAgY2FzZSAxOlxuICAgIHNpemVbMF0gPSA0O1xuICAgIHJldHVybiByZWFkZXIucmVhZDMycyAoKTtcbiAgY2FzZSAyOlxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogbmF0aXZlIGludGVnZXIgdmFsdWUgdG9vIGxhcmdlXCIpO1xuICBkZWZhdWx0OiBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGlsbC1mb3JtZWQgbmF0aXZlIGludGVnZXJcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3VubWFyc2hhbCwgY2FtbF9pbnQ2NF9tYXJzaGFsLCBjYW1sX2ludDY0X2NvbXBhcmUsIGNhbWxfaW50NjRfaGFzaFxuLy9SZXF1aXJlczogY2FtbF9pbnQzMl91bm1hcnNoYWwsIGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9iYV9zZXJpYWxpemUsIGNhbWxfYmFfZGVzZXJpYWxpemUsIGNhbWxfYmFfY29tcGFyZSwgY2FtbF9iYV9oYXNoXG52YXIgY2FtbF9jdXN0b21fb3BzID1cbiAgICB7XCJfalwiOiB7XG4gICAgICBkZXNlcmlhbGl6ZSA6IGNhbWxfaW50NjRfdW5tYXJzaGFsLFxuICAgICAgc2VyaWFsaXplICA6IGNhbWxfaW50NjRfbWFyc2hhbCxcbiAgICAgIGZpeGVkX2xlbmd0aCA6IDgsXG4gICAgICBjb21wYXJlIDogY2FtbF9pbnQ2NF9jb21wYXJlLFxuICAgICAgaGFzaCA6IGNhbWxfaW50NjRfaGFzaFxuICAgIH0sXG4gICAgIFwiX2lcIjoge1xuICAgICAgIGRlc2VyaWFsaXplIDogY2FtbF9pbnQzMl91bm1hcnNoYWwsXG4gICAgICAgZml4ZWRfbGVuZ3RoIDogNCxcbiAgICAgfSxcbiAgICAgXCJfblwiOiB7XG4gICAgICAgZGVzZXJpYWxpemUgOiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWwsXG4gICAgICAgZml4ZWRfbGVuZ3RoIDogNCxcbiAgICAgfSxcbiAgICAgXCJfYmlnYXJyYXlcIjp7XG4gICAgICAgZGVzZXJpYWxpemUgOiAoZnVuY3Rpb24gKHJlYWRlciwgc3opIHtyZXR1cm4gY2FtbF9iYV9kZXNlcmlhbGl6ZSAocmVhZGVyLHN6LFwiX2JpZ2FycmF5XCIpfSksXG4gICAgICAgc2VyaWFsaXplIDogY2FtbF9iYV9zZXJpYWxpemUsXG4gICAgICAgY29tcGFyZSA6IGNhbWxfYmFfY29tcGFyZSxcbiAgICAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gICAgIH0sXG4gICAgIFwiX2JpZ2FycjAyXCI6e1xuICAgICAgIGRlc2VyaWFsaXplIDogKGZ1bmN0aW9uIChyZWFkZXIsIHN6KSB7cmV0dXJuIGNhbWxfYmFfZGVzZXJpYWxpemUgKHJlYWRlcixzeixcIl9iaWdhcnIwMlwiKX0pLFxuICAgICAgIHNlcmlhbGl6ZSA6IGNhbWxfYmFfc2VyaWFsaXplLFxuICAgICAgIGNvbXBhcmUgOiBjYW1sX2JhX2NvbXBhcmUsXG4gICAgICAgaGFzaDogY2FtbF9iYV9oYXNoLFxuICAgICB9XG4gICAgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfZmxvYXRfb2ZfYnl0ZXMsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogVUludDhBcnJheVJlYWRlclxuLy9SZXF1aXJlczogY2FtbF9kZWNvbXByZXNzX2lucHV0XG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyKHJlYWRlciwgb2ZzKSB7XG4gIGZ1bmN0aW9uIHJlYWR2bHEob3ZlcmZsb3cpIHtcbiAgICB2YXIgYyA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICB2YXIgbiA9IGMgJiAweDdGO1xuICAgIHdoaWxlICgoYyAmIDB4ODApICE9IDApIHtcbiAgICAgIGMgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgbjcgPSBuIDw8IDc7XG4gICAgICBpZiAobiAhPSBuNyA+PiA3KSBvdmVyZmxvd1swXSA9IHRydWU7XG4gICAgICBuID0gbjcgfCAoYyAmIDB4N0YpO1xuICAgIH1cbiAgICByZXR1cm4gbjtcbiAgfVxuICB2YXIgbWFnaWMgPSByZWFkZXIucmVhZDMydSAoKVxuICBzd2l0Y2gobWFnaWMpe1xuICBjYXNlIDB4ODQ5NUE2QkU6IC8qIEludGV4dF9tYWdpY19udW1iZXJfc21hbGwgKi9cbiAgICB2YXIgaGVhZGVyX2xlbiA9IDIwO1xuICAgIHZhciBjb21wcmVzc2VkID0gMDtcbiAgICB2YXIgZGF0YV9sZW4gPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICB2YXIgdW5jb21wcmVzc2VkX2RhdGFfbGVuID0gZGF0YV9sZW47XG4gICAgdmFyIG51bV9vYmplY3RzID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgdmFyIF9zaXplXzMyID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgdmFyIF9zaXplXzY0ID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgYnJlYWtcbiAgY2FzZSAweDg0OTVBNkJEOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX2NvbXByZXNzZWQgKi9cbiAgICB2YXIgaGVhZGVyX2xlbiA9IHJlYWRlci5yZWFkOHUoKSAmIDB4M0Y7XG4gICAgdmFyIGNvbXByZXNzZWQgPSAxO1xuICAgIHZhciBvdmVyZmxvdyA9IFtmYWxzZV07XG4gICAgdmFyIGRhdGFfbGVuID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgdmFyIHVuY29tcHJlc3NlZF9kYXRhX2xlbiA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgIHZhciBudW1fb2JqZWN0cyA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgIHZhciBfc2l6ZV8zMiA9IHJlYWR2bHEgKG92ZXJmbG93KTtcbiAgICB2YXIgX3NpemVfNjQgPSByZWFkdmxxIChvdmVyZmxvdyk7XG4gICAgaWYob3ZlcmZsb3dbMF0pe1xuICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcjogb2JqZWN0IHRvbyBsYXJnZSB0byBiZSByZWFkIGJhY2sgb24gdGhpcyBwbGF0Zm9ybVwiKTtcbiAgICB9XG4gICAgYnJlYWtcbiAgY2FzZSAweDg0OTVBNkJGOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX2JpZyAqL1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiBhIDMyLWJpdCBwbGF0Zm9ybVwiKTtcbiAgICBicmVha1xuICBkZWZhdWx0OlxuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBiYWQgb2JqZWN0XCIpO1xuICAgIGJyZWFrO1xuICB9XG4gIHZhciBzdGFjayA9IFtdO1xuICB2YXIgaW50ZXJuX29ial90YWJsZSA9IChudW1fb2JqZWN0cyA+IDApP1tdOm51bGw7XG4gIHZhciBvYmpfY291bnRlciA9IDA7XG4gIGZ1bmN0aW9uIGludGVybl9yZWMgKHJlYWRlcikge1xuICAgIHZhciBjb2RlID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICBpZiAoY29kZSA+PSAweDQwIC8qY3N0LlBSRUZJWF9TTUFMTF9JTlQqLykge1xuICAgICAgaWYgKGNvZGUgPj0gMHg4MCAvKmNzdC5QUkVGSVhfU01BTExfQkxPQ0sqLykge1xuICAgICAgICB2YXIgdGFnID0gY29kZSAmIDB4RjtcbiAgICAgICAgdmFyIHNpemUgPSAoY29kZSA+PiA0KSAmIDB4NztcbiAgICAgICAgdmFyIHYgPSBbdGFnXTtcbiAgICAgICAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIHY7XG4gICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2VcbiAgICAgICAgcmV0dXJuIChjb2RlICYgMHgzRik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjb2RlID49IDB4MjAvKmNzdC5QUkVGSVhfU01BTExfU1RSSU5HICovKSB7XG4gICAgICAgIHZhciBsZW4gPSBjb2RlICYgMHgxRjtcbiAgICAgICAgdmFyIHYgPSByZWFkZXIucmVhZHN0ciAobGVuKTtcbiAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICByZXR1cm4gdjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXRjaChjb2RlKSB7XG4gICAgICAgIGNhc2UgMHgwMDogLy9jc3QuQ09ERV9JTlQ4OlxuICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDhzICgpO1xuICAgICAgICBjYXNlIDB4MDE6IC8vY3N0LkNPREVfSU5UMTY6XG4gICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkMTZzICgpO1xuICAgICAgICBjYXNlIDB4MDI6IC8vY3N0LkNPREVfSU5UMzI6XG4gICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkMzJzICgpO1xuICAgICAgICBjYXNlIDB4MDM6IC8vY3N0LkNPREVfSU5UNjQ6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBpbnRlZ2VyIHRvbyBsYXJnZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAweDA0OiAvL2NzdC5DT0RFX1NIQVJFRDg6XG4gICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgICAgICAgaWYoY29tcHJlc3NlZCA9PSAwKSBvZmZzZXQgPSBvYmpfY291bnRlciAtIG9mZnNldDtcbiAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvZmZzZXRdO1xuICAgICAgICBjYXNlIDB4MDU6IC8vY3N0LkNPREVfU0hBUkVEMTY6XG4gICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkMTZ1ICgpO1xuICAgICAgICAgIGlmKGNvbXByZXNzZWQgPT0gMCkgb2Zmc2V0ID0gb2JqX2NvdW50ZXIgLSBvZmZzZXQ7XG4gICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2Zmc2V0XTtcbiAgICAgICAgY2FzZSAweDA2OiAvL2NzdC5DT0RFX1NIQVJFRDMyOlxuICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICAgICAgICBpZihjb21wcmVzc2VkID09IDApIG9mZnNldCA9IG9ial9jb3VudGVyIC0gb2Zmc2V0O1xuICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29mZnNldF07XG4gICAgICAgIGNhc2UgMHgwODogLy9jc3QuQ09ERV9CTE9DSzMyOlxuICAgICAgICAgIHZhciBoZWFkZXIgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICAgICAgICB2YXIgdGFnID0gaGVhZGVyICYgMHhGRjtcbiAgICAgICAgICB2YXIgc2l6ZSA9IGhlYWRlciA+PiAxMDtcbiAgICAgICAgICB2YXIgdiA9IFt0YWddO1xuICAgICAgICAgIGlmIChzaXplID09IDApIHJldHVybiB2O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MTM6IC8vY3N0LkNPREVfQkxPQ0s2NDpcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoIChcImlucHV0X3ZhbHVlOiBkYXRhIGJsb2NrIHRvbyBsYXJnZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAweDA5OiAvL2NzdC5DT0RFX1NUUklORzg6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyIChsZW4pO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBBOiAvL2NzdC5DT0RFX1NUUklORzMyOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIgKGxlbik7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEM6IC8vY3N0LkNPREVfRE9VQkxFX0xJVFRMRTpcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IDg7aSsrKSB0WzcgLSBpXSA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgICAgICAgdmFyIHYgPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwQjogLy9jc3QuQ09ERV9ET1VCTEVfQklHOlxuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgODtpKyspIHRbaV0gPSByZWFkZXIucmVhZDh1ICgpO1xuICAgICAgICAgIHZhciB2ID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEU6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZOF9MSVRUTEU6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0WzcgLSBqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwRDogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVk4X0JJRzpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7aSA8PSBsZW47aSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2IFtpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDA3OiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWTMyX0xJVFRMRTpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0WzcgLSBqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwRjogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVkzMl9CSUc6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdiBbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgxMDogLy9jc3QuQ09ERV9DT0RFUE9JTlRFUjpcbiAgICAgICAgY2FzZSAweDExOiAvL2NzdC5DT0RFX0lORklYUE9JTlRFUjpcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoIChcImlucHV0X3ZhbHVlOiBjb2RlIHBvaW50ZXJcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMHgxMjogLy9jc3QuQ09ERV9DVVNUT006XG4gICAgICAgIGNhc2UgMHgxODogLy9jc3QuQ09ERV9DVVNUT01fTEVOOlxuICAgICAgICBjYXNlIDB4MTk6IC8vY3N0LkNPREVfQ1VTVE9NX0ZJWEVEOlxuICAgICAgICAgIHZhciBjLCBzID0gXCJcIjtcbiAgICAgICAgICB3aGlsZSAoKGMgPSByZWFkZXIucmVhZDh1ICgpKSAhPSAwKSBzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUgKGMpO1xuICAgICAgICAgIHZhciBvcHMgPSBjYW1sX2N1c3RvbV9vcHNbc107XG4gICAgICAgICAgdmFyIGV4cGVjdGVkX3NpemU7XG4gICAgICAgICAgaWYoIW9wcylcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdW5rbm93biBjdXN0b20gYmxvY2sgaWRlbnRpZmllclwiKTtcbiAgICAgICAgICBzd2l0Y2goY29kZSl7XG4gICAgICAgICAgY2FzZSAweDEyOiAvLyBjc3QuQ09ERV9DVVNUT00gKGRlcHJlY2F0ZWQpXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDB4MTk6IC8vIGNzdC5DT0RFX0NVU1RPTV9GSVhFRFxuICAgICAgICAgICAgaWYoIW9wcy5maXhlZF9sZW5ndGgpXG4gICAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogZXhwZWN0ZWQgYSBmaXhlZC1zaXplIGN1c3RvbSBibG9ja1wiKTtcbiAgICAgICAgICAgIGV4cGVjdGVkX3NpemUgPSBvcHMuZml4ZWRfbGVuZ3RoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAweDE4OiAvLyBjc3QuQ09ERV9DVVNUT01fTEVOXG4gICAgICAgICAgICBleHBlY3RlZF9zaXplID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgICAgICAgICAvLyBTa2lwIHNpemU2NFxuICAgICAgICAgICAgcmVhZGVyLnJlYWQzMnMoKTsgcmVhZGVyLnJlYWQzMnMoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgb2xkX3BvcyA9IHJlYWRlci5pO1xuICAgICAgICAgIHZhciBzaXplID0gWzBdO1xuICAgICAgICAgIHZhciB2ID0gb3BzLmRlc2VyaWFsaXplKHJlYWRlciwgc2l6ZSk7XG4gICAgICAgICAgaWYoZXhwZWN0ZWRfc2l6ZSAhPSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgaWYoZXhwZWN0ZWRfc2l6ZSAhPSBzaXplWzBdKVxuICAgICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGluY29ycmVjdCBsZW5ndGggb2Ygc2VyaWFsaXplZCBjdXN0b20gYmxvY2tcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoIChcImlucHV0X3ZhbHVlOiBpbGwtZm9ybWVkIG1lc3NhZ2VcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYoY29tcHJlc3NlZCkge1xuICAgIGlmKGNhbWxfZGVjb21wcmVzc19pbnB1dCkge1xuICAgICAgdmFyIGRhdGEgPSByZWFkZXIucmVhZHVpbnQ4YXJyYXkoZGF0YV9sZW4pO1xuICAgICAgdmFyIHJlcyA9IG5ldyBVaW50OEFycmF5KHVuY29tcHJlc3NlZF9kYXRhX2xlbik7XG4gICAgICB2YXIgcmVzID0gY2FtbF9kZWNvbXByZXNzX2lucHV0KGRhdGEsIHJlcyk7XG4gICAgICB2YXIgcmVhZGVyID0gbmV3IFVJbnQ4QXJyYXlSZWFkZXIocmVzLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBjb21wcmVzc2VkIG9iamVjdCwgY2Fubm90IGRlY29tcHJlc3NcIik7XG4gICAgfVxuICB9XG4gIHZhciByZXMgPSBpbnRlcm5fcmVjIChyZWFkZXIpO1xuICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgIHZhciBzaXplID0gc3RhY2sucG9wKCk7XG4gICAgdmFyIHYgPSBzdGFjay5wb3AoKTtcbiAgICB2YXIgZCA9IHYubGVuZ3RoO1xuICAgIGlmIChkIDwgc2l6ZSkgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICB2W2RdID0gaW50ZXJuX3JlYyAocmVhZGVyKTtcbiAgfVxuICBpZiAodHlwZW9mIG9mcyE9XCJudW1iZXJcIikgb2ZzWzBdID0gcmVhZGVyLmk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuLy9WZXJzaW9uOiA8IDUuMS4wXG52YXIgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplID0gMjBcblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplXG4vL1ZlcnNpb246ID49IDUuMS4wXG52YXIgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplID0gMTZcblxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBVSW50OEFycmF5UmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbmZ1bmN0aW9uIGNhbWxfbWFyc2hhbF9kYXRhX3NpemUgKHMsIG9mcykge1xuICB2YXIgciA9IG5ldyBVSW50OEFycmF5UmVhZGVyKGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMocyksIG9mcyk7XG4gIGZ1bmN0aW9uIHJlYWR2bHEob3ZlcmZsb3cpIHtcbiAgICB2YXIgYyA9IHIucmVhZDh1KCk7XG4gICAgdmFyIG4gPSBjICYgMHg3RjtcbiAgICB3aGlsZSAoKGMgJiAweDgwKSAhPSAwKSB7XG4gICAgICBjID0gci5yZWFkOHUoKTtcbiAgICAgIHZhciBuNyA9IG4gPDwgNztcbiAgICAgIGlmIChuICE9IG43ID4+IDcpIG92ZXJmbG93WzBdID0gdHJ1ZTtcbiAgICAgIG4gPSBuNyB8IChjICYgMHg3Rik7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9XG5cbiAgc3dpdGNoKHIucmVhZDMydSgpKXtcbiAgY2FzZSAweDg0OTVBNkJFOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX3NtYWxsICovXG4gICAgdmFyIGhlYWRlcl9sZW4gPSAyMDtcbiAgICB2YXIgZGF0YV9sZW4gPSByLnJlYWQzMnUoKTtcbiAgICBicmVhaztcbiAgY2FzZSAweDg0OTVBNkJEOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX2NvbXByZXNzZWQgKi9cbiAgICB2YXIgaGVhZGVyX2xlbiA9IHIucmVhZDh1KCkgJiAweDNGO1xuICAgIHZhciBvdmVyZmxvdyA9IFtmYWxzZV07XG4gICAgdmFyIGRhdGFfbGVuID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgaWYob3ZlcmZsb3dbMF0pe1xuICAgICAgY2FtbF9mYWlsd2l0aChcIk1hcnNoYWwuZGF0YV9zaXplOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiB0aGlzIHBsYXRmb3JtXCIpO1xuICAgIH1cbiAgICBicmVha1xuICBjYXNlIDB4ODQ5NUE2QkY6IC8qIEludGV4dF9tYWdpY19udW1iZXJfYmlnICovXG4gIGRlZmF1bHQ6XG4gICAgY2FtbF9mYWlsd2l0aChcIk1hcnNoYWwuZGF0YV9zaXplOiBiYWQgb2JqZWN0XCIpO1xuICAgIGJyZWFrXG4gIH1cbiAgcmV0dXJuIGhlYWRlcl9sZW4gLSBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUgKyBkYXRhX2xlbjtcbn1cblxuLy9Qcm92aWRlczogTWxPYmplY3RUYWJsZVxudmFyIE1sT2JqZWN0VGFibGU7XG5pZiAodHlwZW9mIGdsb2JhbFRoaXMuTWFwID09PSAndW5kZWZpbmVkJykge1xuICBNbE9iamVjdFRhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgLyogcG9seWZpbGwgKHVzaW5nIGxpbmVhciBzZWFyY2gpICovXG4gICAgZnVuY3Rpb24gTmFpdmVMb29rdXAob2JqcykgeyB0aGlzLm9ianMgPSBvYmpzOyB9XG4gICAgTmFpdmVMb29rdXAucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vYmpzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLm9ianNbaV0gPT09IHYpIHJldHVybiBpO1xuICAgICAgfVxuICAgIH07XG4gICAgTmFpdmVMb29rdXAucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgLy8gRG8gbm90aGluZyBoZXJlLiBbTWxPYmplY3RUYWJsZS5zdG9yZV0gd2lsbCBwdXNoIHRvIFt0aGlzLm9ianNdIGRpcmVjdGx5LlxuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gTWxPYmplY3RUYWJsZSgpIHtcbiAgICAgIHRoaXMub2JqcyA9IFtdOyB0aGlzLmxvb2t1cCA9IG5ldyBOYWl2ZUxvb2t1cCh0aGlzLm9ianMpO1xuICAgIH07XG4gIH0oKTtcbn1cbmVsc2Uge1xuICBNbE9iamVjdFRhYmxlID0gZnVuY3Rpb24gTWxPYmplY3RUYWJsZSgpIHtcbiAgICB0aGlzLm9ianMgPSBbXTsgdGhpcy5sb29rdXAgPSBuZXcgZ2xvYmFsVGhpcy5NYXAoKTtcbiAgfTtcbn1cblxuTWxPYmplY3RUYWJsZS5wcm90b3R5cGUuc3RvcmUgPSBmdW5jdGlvbih2KSB7XG4gIHRoaXMubG9va3VwLnNldCh2LCB0aGlzLm9ianMubGVuZ3RoKTtcbiAgdGhpcy5vYmpzLnB1c2godik7XG59XG5cbk1sT2JqZWN0VGFibGUucHJvdG90eXBlLnJlY2FsbCA9IGZ1bmN0aW9uKHYpIHtcbiAgdmFyIGkgPSB0aGlzLmxvb2t1cC5nZXQodik7XG4gIHJldHVybiAoaSA9PT0gdW5kZWZpbmVkKVxuICAgID8gdW5kZWZpbmVkIDogdGhpcy5vYmpzLmxlbmd0aCAtIGk7ICAgLyogaW5kZXggaXMgcmVsYXRpdmUgKi9cbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ZhaWx3aXRoXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXRcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXMsIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfc3RyaW5nLCBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IE1sT2JqZWN0VGFibGUsIGNhbWxfbGlzdF90b19qc19hcnJheSwgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9pc19jb250aW51YXRpb25fdGFnXG52YXIgY2FtbF9vdXRwdXRfdmFsID0gZnVuY3Rpb24gKCl7XG4gIGZ1bmN0aW9uIFdyaXRlciAoKSB7IHRoaXMuY2h1bmsgPSBbXTsgfVxuICBXcml0ZXIucHJvdG90eXBlID0ge1xuICAgIGNodW5rX2lkeDoyMCwgYmxvY2tfbGVuOjAsIG9ial9jb3VudGVyOjAsIHNpemVfMzI6MCwgc2l6ZV82NDowLFxuICAgIHdyaXRlOmZ1bmN0aW9uIChzaXplLCB2YWx1ZSkge1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4O2kgPj0gMDtpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSAodmFsdWUgPj4gaSkgJiAweEZGO1xuICAgIH0sXG4gICAgd3JpdGVfYXQ6ZnVuY3Rpb24gKHBvcywgc2l6ZSwgdmFsdWUpIHtcbiAgICAgIHZhciBwb3MgPSBwb3M7XG4gICAgICBmb3IgKHZhciBpID0gc2l6ZSAtIDg7aSA+PSAwO2kgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1twb3MrK10gPSAodmFsdWUgPj4gaSkgJiAweEZGO1xuICAgIH0sXG4gICAgd3JpdGVfY29kZTpmdW5jdGlvbiAoc2l6ZSwgY29kZSwgdmFsdWUpIHtcbiAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSBjb2RlO1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4O2kgPj0gMDtpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSAodmFsdWUgPj4gaSkgJiAweEZGO1xuICAgIH0sXG4gICAgd3JpdGVfc2hhcmVkOmZ1bmN0aW9uIChvZmZzZXQpIHtcbiAgICAgIGlmIChvZmZzZXQgPCAoMSA8PCA4KSkgdGhpcy53cml0ZV9jb2RlKDgsIDB4MDQgLypjc3QuQ09ERV9TSEFSRUQ4Ki8sIG9mZnNldCk7XG4gICAgICBlbHNlIGlmIChvZmZzZXQgPCAoMSA8PCAxNikpIHRoaXMud3JpdGVfY29kZSgxNiwgMHgwNSAvKmNzdC5DT0RFX1NIQVJFRDE2Ki8sIG9mZnNldCk7XG4gICAgICBlbHNlIHRoaXMud3JpdGVfY29kZSgzMiwgMHgwNiAvKmNzdC5DT0RFX1NIQVJFRDMyKi8sIG9mZnNldCk7XG4gICAgfSxcbiAgICBwb3M6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5jaHVua19pZHggfSxcbiAgICBmaW5hbGl6ZTpmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmJsb2NrX2xlbiA9IHRoaXMuY2h1bmtfaWR4IC0gMjA7XG4gICAgICB0aGlzLmNodW5rX2lkeCA9IDA7XG4gICAgICB0aGlzLndyaXRlICgzMiwgMHg4NDk1QTZCRSk7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5ibG9ja19sZW4pO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIHRoaXMub2JqX2NvdW50ZXIpO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIHRoaXMuc2l6ZV8zMik7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5zaXplXzY0KTtcbiAgICAgIHJldHVybiB0aGlzLmNodW5rO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKHYsIGZsYWdzKSB7XG4gICAgZmxhZ3MgPSBjYW1sX2xpc3RfdG9fanNfYXJyYXkoZmxhZ3MpO1xuXG4gICAgdmFyIG5vX3NoYXJpbmcgPSAoZmxhZ3MuaW5kZXhPZigwIC8qTWFyc2hhbC5Ob19zaGFyaW5nKi8pICE9PSAtMSksXG4gICAgICAgIGNsb3N1cmVzID0gIChmbGFncy5pbmRleE9mKDEgLypNYXJzaGFsLkNsb3N1cmVzKi8pICE9PSAtMSk7XG4gICAgLyogTWFyc2hhbC5Db21wYXRfMzIgaXMgcmVkdW5kYW50IHNpbmNlIGludGVnZXJzIGFyZSAzMi1iaXQgYW55d2F5ICovXG5cbiAgICBpZiAoY2xvc3VyZXMpXG4gICAgICBjb25zb2xlLndhcm4oXCJpbiBjYW1sX291dHB1dF92YWw6IGZsYWcgTWFyc2hhbC5DbG9zdXJlcyBpcyBub3Qgc3VwcG9ydGVkLlwiKTtcblxuICAgIHZhciB3cml0ZXIgPSBuZXcgV3JpdGVyICgpO1xuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBpbnRlcm5fb2JqX3RhYmxlID0gbm9fc2hhcmluZyA/IG51bGwgOiBuZXcgTWxPYmplY3RUYWJsZSgpO1xuXG4gICAgZnVuY3Rpb24gbWVtbyh2KSB7XG4gICAgICBpZiAobm9fc2hhcmluZykgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIGV4aXN0aW5nX29mZnNldCA9IGludGVybl9vYmpfdGFibGUucmVjYWxsKHYpO1xuICAgICAgaWYgKGV4aXN0aW5nX29mZnNldCkgeyB3cml0ZXIud3JpdGVfc2hhcmVkKGV4aXN0aW5nX29mZnNldCk7IHJldHVybiB0cnVlOyB9XG4gICAgICBlbHNlIHsgaW50ZXJuX29ial90YWJsZS5zdG9yZSh2KTsgcmV0dXJuIGZhbHNlOyB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0ZXJuX3JlYyAodikge1xuICAgICAgaWYgKHYuY2FtbF9jdXN0b20pIHtcbiAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgdmFyIG5hbWUgPSB2LmNhbWxfY3VzdG9tO1xuICAgICAgICB2YXIgb3BzID0gY2FtbF9jdXN0b21fb3BzW25hbWVdO1xuICAgICAgICB2YXIgc3pfMzJfNjQgPSBbMCwwXTtcbiAgICAgICAgaWYoIW9wcy5zZXJpYWxpemUpXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwib3V0cHV0X3ZhbHVlOiBhYnN0cmFjdCB2YWx1ZSAoQ3VzdG9tKVwiKTtcbiAgICAgICAgaWYob3BzLmZpeGVkX2xlbmd0aCA9PSB1bmRlZmluZWQpe1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgxOCAvKmNzdC5DT0RFX0NVU1RPTV9MRU4qLyk7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlICg4LCBuYW1lLmNoYXJDb2RlQXQoaSkpO1xuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB2YXIgaGVhZGVyX3BvcyA9IHdyaXRlci5wb3MgKCk7XG4gICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3BzLnNlcmlhbGl6ZSh3cml0ZXIsIHYsIHN6XzMyXzY0KTtcbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcywgMzIsIHN6XzMyXzY0WzBdKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcyArIDQsIDMyLCAwKTsgLy8gemVyb1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zICsgOCwgMzIsIHN6XzMyXzY0WzFdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MTkgLypjc3QuQ09ERV9DVVNUT01fRklYRUQqLyk7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlICg4LCBuYW1lLmNoYXJDb2RlQXQoaSkpO1xuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB2YXIgb2xkX3BvcyA9IHdyaXRlci5wb3MoKTtcbiAgICAgICAgICBvcHMuc2VyaWFsaXplKHdyaXRlciwgdiwgc3pfMzJfNjQpO1xuICAgICAgICAgIGlmIChvcHMuZml4ZWRfbGVuZ3RoICE9IHdyaXRlci5wb3MoKSAtIG9sZF9wb3MpXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwib3V0cHV0X3ZhbHVlOiBpbmNvcnJlY3QgZml4ZWQgc2l6ZXMgc3BlY2lmaWVkIGJ5IFwiICsgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gMiArICgoc3pfMzJfNjRbMF0gKyAzKSA+PiAyKTtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gMiArICgoc3pfMzJfNjRbMV0gKyA3KSA+PiAzKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2WzBdID09PSAodlswXXwwKSkge1xuICAgICAgICBpZiAodlswXSA9PSAyNTEpIHtcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwib3V0cHV0X3ZhbHVlOiBhYnN0cmFjdCB2YWx1ZSAoQWJzdHJhY3QpXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodlswXSkpXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwib3V0cHV0X3ZhbHVlOiBjb250aW51YXRpb24gdmFsdWVcIik7XG4gICAgICAgIGlmICh2Lmxlbmd0aCA+IDEgJiYgbWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICBpZiAodlswXSA8IDE2ICYmIHYubGVuZ3RoIC0gMSA8IDgpXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDgwIC8qY3N0LlBSRUZJWF9TTUFMTF9CTE9DSyovICsgdlswXSArICgodi5sZW5ndGggLSAxKTw8NCkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoMzIsIDB4MDggLypjc3QuQ09ERV9CTE9DSzMyKi8sICgodi5sZW5ndGgtMSkgPDwgMTApIHwgdlswXSk7XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IHYubGVuZ3RoO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSB2Lmxlbmd0aDtcbiAgICAgICAgaWYgKHYubGVuZ3RoID4gMSkgc3RhY2sucHVzaCAodiwgMSk7XG4gICAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXModikpIHtcbiAgICAgICAgaWYoIShjYW1sX2lzX21sX2J5dGVzKGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIikpKSkge1xuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IFtCeXRlcy50XSBjYW5ub3Qgc2FmZWx5IGJlIG1hcnNoYWxlZCB3aXRoIFstLWVuYWJsZSB1c2UtanMtc3RyaW5nXVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbGVuID0gY2FtbF9tbF9ieXRlc19sZW5ndGgodik7XG4gICAgICAgIGlmIChsZW4gPCAweDIwKVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgyMCAvKmNzdC5QUkVGSVhfU01BTExfU1RSSU5HKi8gKyBsZW4pO1xuICAgICAgICBlbHNlIGlmIChsZW4gPCAweDEwMClcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoOCwgMHgwOS8qY3N0LkNPREVfU1RSSU5HOCovLCBsZW4pO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUgKDMyLCAweDBBIC8qY3N0LkNPREVfU1RSSU5HMzIqLywgbGVuKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IGxlbjtpKyspXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQodixpKSk7XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IDEgKyAoKChsZW4gKyA0KSAvIDQpfDApO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAxICsgKCgobGVuICsgOCkgLyA4KXwwKTtcbiAgICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcodikpIHtcbiAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgdmFyIGxlbiA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCh2KTtcbiAgICAgICAgaWYgKGxlbiA8IDB4MjApXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcqLyArIGxlbik7XG4gICAgICAgIGVsc2UgaWYgKGxlbiA8IDB4MTAwKVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICg4LCAweDA5Lypjc3QuQ09ERV9TVFJJTkc4Ki8sIGxlbik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoMzIsIDB4MEEgLypjc3QuQ09ERV9TVFJJTkczMiovLCBsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgbGVuO2krKylcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQodixpKSk7XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IDEgKyAoKChsZW4gKyA0KSAvIDQpfDApO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAxICsgKCgobGVuICsgOCkgLyA4KXwwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2ICE9ICh2fDApKXtcbiAgICAgICAgICB2YXIgdHlwZV9vZl92ID0gdHlwZW9mIHY7XG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBJZiBhIGZsb2F0IGhhcHBlbnMgdG8gYmUgYW4gaW50ZWdlciBpdCBpcyBzZXJpYWxpemVkIGFzIGFuIGludGVnZXJcbiAgICAgICAgICAvLyAoSnNfb2Zfb2NhbWwgY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdHlwZSBvZiBhbiBpbnRlZ2VyIG51bWJlciBpc1xuICAgICAgICAgIC8vIGZsb2F0IG9yIGludGVnZXIuKSBUaGlzIGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBjcmFzaGVzIHdoZW5cbiAgICAgICAgICAvLyB1bm1hcnNoYWxsaW5nIHVzaW5nIHRoZSBzdGFuZGFyZCBydW50aW1lLiBJdCBzZWVtcyBiZXR0ZXIgdG9cbiAgICAgICAgICAvLyBzeXN0ZW1hdGljYWxseSBmYWlsIG9uIG1hcnNoYWxsaW5nLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gICAgICAgICAgaWYodHlwZV9vZl92ICE9IFwibnVtYmVyXCIpXG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogYWJzdHJhY3QgdmFsdWUgKFwiK3R5cGVfb2ZfditcIilcIik7XG4gICAgICAgICAgLy8gICAgICAgICAgdmFyIHQgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCh2KSk7XG4gICAgICAgICAgLy8gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDBCIC8qY3N0LkNPREVfRE9VQkxFX0JJRyovKTtcbiAgICAgICAgICAvLyAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpPDg7IGkrKyl7d3JpdGVyLndyaXRlKDgsdFtpXSl9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodiA+PSAwICYmIHYgPCAweDQwKSB7XG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAwWDQwIC8qY3N0LlBSRUZJWF9TTUFMTF9JTlQqLyArIHYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh2ID49IC0oMSA8PCA3KSAmJiB2IDwgKDEgPDwgNykpXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSg4LCAweDAwIC8qY3N0LkNPREVfSU5UOCovLCB2KTtcbiAgICAgICAgICBlbHNlIGlmICh2ID49IC0oMSA8PCAxNSkgJiYgdiA8ICgxIDw8IDE1KSlcbiAgICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDE2LCAweDAxIC8qY3N0LkNPREVfSU5UMTYqLywgdik7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoMzIsIDB4MDIgLypjc3QuQ09ERV9JTlQzMiovLCB2KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBleHRlcm5fcmVjICh2KTtcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgdmFyIGkgPSBzdGFjay5wb3AgKCk7XG4gICAgICB2YXIgdiA9IHN0YWNrLnBvcCAoKTtcbiAgICAgIGlmIChpICsgMSA8IHYubGVuZ3RoKSBzdGFjay5wdXNoICh2LCBpICsgMSk7XG4gICAgICBleHRlcm5fcmVjICh2W2ldKTtcbiAgICB9XG4gICAgaWYgKGludGVybl9vYmpfdGFibGUpIHdyaXRlci5vYmpfY291bnRlciA9IGludGVybl9vYmpfdGFibGUub2Jqcy5sZW5ndGg7XG4gICAgd3JpdGVyLmZpbmFsaXplKCk7XG4gICAgcmV0dXJuIHdyaXRlci5jaHVuaztcbiAgfVxufSAoKTtcblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyAodiwgZmxhZ3MpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5IChjYW1sX291dHB1dF92YWwgKHYsIGZsYWdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9ieXRlc19vZl9hcnJheVxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnl0ZXMgKHYsIGZsYWdzKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX29mX2FycmF5IChjYW1sX291dHB1dF92YWwgKHYsIGZsYWdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlclxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX2JsaXRfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlciAocywgb2ZzLCBsZW4sIHYsIGZsYWdzKSB7XG4gIHZhciB0ID0gY2FtbF9vdXRwdXRfdmFsICh2LCBmbGFncyk7XG4gIGlmICh0Lmxlbmd0aCA+IGxlbikgY2FtbF9mYWlsd2l0aCAoXCJNYXJzaGFsLnRvX2J1ZmZlcjogYnVmZmVyIG92ZXJmbG93XCIpO1xuICBjYW1sX2JsaXRfYnl0ZXModCwgMCwgcywgb2ZzLCB0Lmxlbmd0aCk7XG4gIHJldHVybiAwO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbF90YWdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfc3RyaW5nLCBjYW1sX2lzX21sX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmVfdmFsX3RhZyhhKXtcbiAgaWYgKHR5cGVvZiBhID09PSBcIm51bWJlclwiKSByZXR1cm4gMTAwMDsgLy8gaW50X3RhZyAod2UgdXNlIGl0IGZvciBhbGwgbnVtYmVycylcbiAgZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyhhKSkgcmV0dXJuIDI1MjsgLy8gc3RyaW5nX3RhZ1xuICBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyhhKSkgcmV0dXJuIDEyNTI7IC8vIG9jYW1sIHN0cmluZyAoaWYgZGlmZmVyZW50IGZyb20gYnl0ZXMpXG4gIGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBBcnJheSAmJiBhWzBdID09PSAoYVswXT4+PjApICYmIGFbMF0gPD0gMjU1KSB7XG4gICAgLy8gTG9vayBsaWtlIGFuIG9jYW1sIGJsb2NrXG4gICAgdmFyIHRhZyA9IGFbMF0gfCAwO1xuICAgIC8vIGlnbm9yZSBkb3VibGVfYXJyYXlfdGFnIGJlY2F1c2Ugd2UgY2Fubm90IGFjY3VyYXRlbHkgc2V0XG4gICAgLy8gdGhpcyB0YWcgd2hlbiB3ZSBjcmVhdGUgYW4gYXJyYXkgb2YgZmxvYXQuXG4gICAgcmV0dXJuICh0YWcgPT0gMjU0KT8wOnRhZ1xuICB9XG4gIGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBTdHJpbmcpIHJldHVybiAxMjUyMDsgLy8gamF2YXNjcmlwdCBzdHJpbmcsIGxpa2Ugc3RyaW5nX3RhZyAoMjUyKVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PSBcInN0cmluZ1wiKSByZXR1cm4gMTI1MjA7IC8vIGphdmFzY3JpcHQgc3RyaW5nLCBsaWtlIHN0cmluZ190YWcgKDI1MilcbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIE51bWJlcikgcmV0dXJuIDEwMDA7IC8vIGludF90YWcgKHdlIHVzZSBpdCBmb3IgYWxsIG51bWJlcnMpXG4gIGVsc2UgaWYgKGEgJiYgYS5jYW1sX2N1c3RvbSkgcmV0dXJuIDEyNTU7IC8vIGxpa2UgY3VzdG9tX3RhZyAoMjU1KVxuICBlbHNlIGlmIChhICYmIGEuY29tcGFyZSkgcmV0dXJuIDEyNTY7IC8vIGxpa2UgY3VzdG9tX3RhZyAoMjU1KVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PSBcImZ1bmN0aW9uXCIpIHJldHVybiAxMjQ3OyAvLyBsaWtlIGNsb3N1cmVfdGFnICgyNDcpXG4gIGVsc2UgaWYgKHR5cGVvZiBhID09IFwic3ltYm9sXCIpIHJldHVybiAxMjUxO1xuICByZXR1cm4gMTAwMTsgLy9vdXRfb2ZfaGVhcF90YWdcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2N1c3RvbV9vcHNcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShhKXtcbiAgcmV0dXJuIGNhbWxfY3VzdG9tX29wc1thLmNhbWxfY3VzdG9tXSAmJiBjYW1sX2N1c3RvbV9vcHNbYS5jYW1sX2N1c3RvbV0uY29tcGFyZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShudW0sIGN1c3RvbSwgc3dhcCwgdG90YWwpIHtcbiAgdmFyIGNvbXAgPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oY3VzdG9tKTtcbiAgaWYoY29tcCkge1xuICAgIHZhciB4ID0gKHN3YXAgPiAwKT9jb21wKGN1c3RvbSxudW0sdG90YWwpOmNvbXAobnVtLGN1c3RvbSx0b3RhbCk7XG4gICAgaWYodG90YWwgJiYgeCAhPSB4KSByZXR1cm4gc3dhcDsgLy8gdG90YWwgJiYgbmFuXG4gICAgaWYoK3ggIT0gK3gpIHJldHVybiAreDsgLy8gbmFuXG4gICAgaWYoKHggfCAwKSAhPSAwKSByZXR1cm4gKHggfCAwKTsgLy8gIW5hblxuICB9XG4gIHJldHVybiBzd2FwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWwgKGNvbnN0LCBjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ludF9jb21wYXJlLCBjYW1sX3N0cmluZ19jb21wYXJlLCBjYW1sX2J5dGVzX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tLCBjYW1sX2NvbXBhcmVfdmFsX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWwgKGEsIGIsIHRvdGFsKSB7XG4gIHZhciBzdGFjayA9IFtdO1xuICBmb3IoOzspIHtcbiAgICBpZiAoISh0b3RhbCAmJiBhID09PSBiKSkge1xuICAgICAgdmFyIHRhZ19hID0gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSk7XG4gICAgICAvLyBmb3J3YXJkX3RhZyA/XG4gICAgICBpZih0YWdfYSA9PSAyNTApIHsgYSA9IGFbMV07IGNvbnRpbnVlIH1cblxuICAgICAgdmFyIHRhZ19iID0gY2FtbF9jb21wYXJlX3ZhbF90YWcoYik7XG4gICAgICAvLyBmb3J3YXJkX3RhZyA/XG4gICAgICBpZih0YWdfYiA9PSAyNTApIHsgYiA9IGJbMV07IGNvbnRpbnVlIH1cblxuICAgICAgLy8gdGFncyBhcmUgZGlmZmVyZW50XG4gICAgICBpZih0YWdfYSAhPT0gdGFnX2IpIHtcbiAgICAgICAgaWYodGFnX2EgPT0gMTAwMCkge1xuICAgICAgICAgIGlmKHRhZ19iID09IDEyNTUpIHsgLy9pbW1lZGlhdGUgY2FuIGNvbXBhcmUgYWdhaW5zdCBjdXN0b21cbiAgICAgICAgICAgIHJldHVybiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20oYSwgYiwgLTEsIHRvdGFsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgIH1cbiAgICAgICAgaWYodGFnX2IgPT0gMTAwMCkge1xuICAgICAgICAgIGlmKHRhZ19hID09IDEyNTUpIHsgLy9pbW1lZGlhdGUgY2FuIGNvbXBhcmUgYWdhaW5zdCBjdXN0b21cbiAgICAgICAgICAgIHJldHVybiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20oYiwgYSwgMSwgdG90YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gMVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAodGFnX2EgPCB0YWdfYik/LTE6MTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCh0YWdfYSl7XG4gICAgICAgIC8vIDI0NjogTGF6eV90YWcgaGFuZGxlZCBiZWxsb3dcbiAgICAgIGNhc2UgMjQ3OiAvLyBDbG9zdXJlX3RhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGZ1bmN0aW9uYWwgdmFsdWVcIik7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI0ODogLy8gT2JqZWN0XG4gICAgICAgIHZhciB4ID0gY2FtbF9pbnRfY29tcGFyZShhWzJdLCBiWzJdKTtcbiAgICAgICAgaWYgKHggIT0gMCkgcmV0dXJuICh4IHwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNDk6IC8vIEluZml4XG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMjUwOiAvLyBGb3J3YXJkIHRhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGFib3ZlXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgRm9yd2FyZF90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUxOiAvL0Fic3RyYWN0XG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBhYnN0cmFjdCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MjogLy8gT0NhbWwgYnl0ZXNcbiAgICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgICB2YXIgeCA9IGNhbWxfYnl0ZXNfY29tcGFyZShhLCBiKTtcbiAgICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MzogLy8gRG91YmxlX3RhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgRG91YmxlX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTQ6IC8vIERvdWJsZV9hcnJheV90YWdcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlbiwgaGFuZGxlZCBhYm92ZVxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IERvdWJsZV9hcnJheV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyNTU6IC8vIEN1c3RvbV90YWdcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBDdXN0b21fdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNDc6IC8vIEZ1bmN0aW9uXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGZ1bmN0aW9uYWwgdmFsdWVcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjU1OiAvLyBDdXN0b21cbiAgICAgICAgdmFyIGNvbXAgPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oYSk7XG4gICAgICAgIGlmKGNvbXAgIT0gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGIpKXtcbiAgICAgICAgICByZXR1cm4gKGEuY2FtbF9jdXN0b208Yi5jYW1sX2N1c3RvbSk/LTE6MTtcbiAgICAgICAgfVxuICAgICAgICBpZighY29tcClcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBhYnN0cmFjdCB2YWx1ZVwiKTtcbiAgICAgICAgdmFyIHggPSBjb21wKGEsYix0b3RhbCk7XG4gICAgICAgIGlmKHggIT0geCl7IC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIFVOT1JERVJFRFxuICAgICAgICAgIHJldHVybiB0b3RhbD8tMTp4O1xuICAgICAgICB9XG4gICAgICAgIGlmKHggIT09ICh4fDApKXsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHggIT0gMCkgcmV0dXJuICh4IHwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjU2OiAvLyBjb21wYXJlIGZ1bmN0aW9uXG4gICAgICAgIHZhciB4ID0gYS5jb21wYXJlKGIsdG90YWwpO1xuICAgICAgICBpZih4ICE9IHgpIHsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgVU5PUkRFUkVEXG4gICAgICAgICAgcmV0dXJuIHRvdGFsPy0xOng7XG4gICAgICAgIH1cbiAgICAgICAgaWYoeCAhPT0gKHh8MCkpeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCByZXR1cm4gdmFsdWVcbiAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEwMDA6IC8vIE51bWJlclxuICAgICAgICBhID0gK2E7XG4gICAgICAgIGIgPSArYjtcbiAgICAgICAgaWYgKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhICE9IGIpIHtcbiAgICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICAgIGlmIChhID09IGEpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChiID09IGIpIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTAwMTogLy8gVGhlIHJlc3RcbiAgICAgICAgLy8gSGVyZSB3ZSBjYW4gYmUgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcbiAgICAgICAgLy8gMS4gSmF2YVNjcmlwdCBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgLy8gMi4gSmF2YVNjcmlwdCBvYmplY3QgdGhhdCBjYW4gYmUgY29lcmNlZCB0byBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgLy8gMy4gSmF2YVNjcmlwdCBvYmplY3QgdGhhbiBjYW5ub3QgYmUgY29lcmNlZCB0byBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gKDMpIHdpbGwgcmFpc2UgYSBbVHlwZUVycm9yXVxuICAgICAgICAvLyAoMikgd2lsbCBjb2VyY2UgdG8gcHJpbWl0aXZlIHR5cGVzIHVzaW5nIFt2YWx1ZU9mXSBvciBbdG9TdHJpbmddXG4gICAgICAgIC8vICgyKSBhbmQgKDMpLCBhZnRlciBldmVudHVhbCBjb2VyY2lvblxuICAgICAgICAvLyAtIGlmIGEgYW5kIGIgYXJlIHN0cmluZ3MsIGFwcGx5IGxleGljb2dyYXBoaWMgY29tcGFyaXNvblxuICAgICAgICAvLyAtIGlmIGEgb3IgYiBhcmUgbm90IHN0cmluZ3MsIGNvbnZlcnQgYSBhbmQgYiB0byBudW1iZXJcbiAgICAgICAgLy8gICBhbmQgYXBwbHkgc3RhbmRhcmQgY29tcGFyaXNvblxuICAgICAgICAvL1xuICAgICAgICAvLyBFeGNlcHRpb246IGAhPWAgd2lsbCBub3QgY29lcmNlL2NvbnZlcnQgaWYgYm90aCBhIGFuZCBiIGFyZSBvYmplY3RzXG4gICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICBpZiAoYSAhPSBiKSB7XG4gICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgICBpZiAoYSA9PSBhKSByZXR1cm4gMTtcbiAgICAgICAgICBpZiAoYiA9PSBiKSByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTE6IC8vIEphdmFTY3JpcHQgU3ltYm9sLCBubyBvcmRlcmluZy5cbiAgICAgICAgaWYoYSAhPT0gYikge1xuICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOYU47XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTI6IC8vIG9jYW1sIHN0cmluZ3NcbiAgICAgICAgdmFyIGEgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGEpO1xuICAgICAgICB2YXIgYiA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoYik7XG4gICAgICAgIGlmKGEgIT09IGIpIHtcbiAgICAgICAgICBpZihhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1MjA6IC8vIGphdmFzY3JpcHQgc3RyaW5nc1xuICAgICAgICB2YXIgYSA9IGEudG9TdHJpbmcoKTtcbiAgICAgICAgdmFyIGIgPSBiLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmKGEgIT09IGIpIHtcbiAgICAgICAgICBpZihhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjQ2OiAvLyBMYXp5X3RhZ1xuICAgICAgY2FzZSAyNTQ6IC8vIERvdWJsZV9hcnJheVxuICAgICAgZGVmYXVsdDogLy8gQmxvY2sgd2l0aCBvdGhlciB0YWdcbiAgICAgICAgaWYoY2FtbF9pc19jb250aW51YXRpb25fdGFnKHRhZ19hKSkge1xuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGNvbnRpbnVhdGlvbiB2YWx1ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpIHJldHVybiAoYS5sZW5ndGggPCBiLmxlbmd0aCk/LTE6MTtcbiAgICAgICAgaWYgKGEubGVuZ3RoID4gMSkgc3RhY2sucHVzaChhLCBiLCAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgcmV0dXJuIDA7XG4gICAgdmFyIGkgPSBzdGFjay5wb3AoKTtcbiAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgIGlmIChpICsgMSA8IGEubGVuZ3RoKSBzdGFjay5wdXNoKGEsIGIsIGkgKyAxKTtcbiAgICBhID0gYVtpXTtcbiAgICBiID0gYltpXTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmUgKGEsIGIpIHsgcmV0dXJuIGNhbWxfY29tcGFyZV92YWwgKGEsIGIsIHRydWUpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2ludF9jb21wYXJlIG11dGFibGUgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfaW50X2NvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKGEgPCBiKSByZXR1cm4gKC0xKTsgaWYgKGEgPT0gYikgcmV0dXJuIDA7IHJldHVybiAxO1xufVxuLy9Qcm92aWRlczogY2FtbF9lcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2VxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA9PSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX25vdGVxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSAhPSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9ncmVhdGVyZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ncmVhdGVyZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpID49IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJ0aGFuIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZ3JlYXRlcnRoYW4gKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpID4gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbGVzc2VxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfbGVzc2VxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA8PSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9sZXNzdGhhbiBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2xlc3N0aGFuICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA8IDApOyB9XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEZvcm1hdFxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX2Zvcm1hdFxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3BhcnNlX2Zvcm1hdCAoZm10KSB7XG4gIGZtdCA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoZm10KTtcbiAgdmFyIGxlbiA9IGZtdC5sZW5ndGg7XG4gIGlmIChsZW4gPiAzMSkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZm9ybWF0X2ludDogZm9ybWF0IHRvbyBsb25nXCIpO1xuICB2YXIgZiA9XG4gICAgICB7IGp1c3RpZnk6JysnLCBzaWduc3R5bGU6Jy0nLCBmaWxsZXI6JyAnLCBhbHRlcm5hdGU6ZmFsc2UsXG4gICAgICAgIGJhc2U6MCwgc2lnbmVkY29udjpmYWxzZSwgd2lkdGg6MCwgdXBwZXJjYXNlOmZhbHNlLFxuICAgICAgICBzaWduOjEsIHByZWM6LTEsIGNvbnY6J2YnIH07XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgYyA9IGZtdC5jaGFyQXQoaSk7XG4gICAgc3dpdGNoIChjKSB7XG4gICAgY2FzZSAnLSc6XG4gICAgICBmLmp1c3RpZnkgPSAnLSc7IGJyZWFrO1xuICAgIGNhc2UgJysnOiBjYXNlICcgJzpcbiAgICAgIGYuc2lnbnN0eWxlID0gYzsgYnJlYWs7XG4gICAgY2FzZSAnMCc6XG4gICAgICBmLmZpbGxlciA9ICcwJzsgYnJlYWs7XG4gICAgY2FzZSAnIyc6XG4gICAgICBmLmFsdGVybmF0ZSA9IHRydWU7IGJyZWFrO1xuICAgIGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOiBjYXNlICc1JzpcbiAgICBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzpcbiAgICAgIGYud2lkdGggPSAwO1xuICAgICAgd2hpbGUgKGM9Zm10LmNoYXJDb2RlQXQoaSkgLSA0OCwgYyA+PSAwICYmIGMgPD0gOSkge1xuICAgICAgICBmLndpZHRoID0gZi53aWR0aCAqIDEwICsgYzsgaSsrXG4gICAgICB9XG4gICAgICBpLS07XG4gICAgICBicmVhaztcbiAgICBjYXNlICcuJzpcbiAgICAgIGYucHJlYyA9IDA7XG4gICAgICBpKys7XG4gICAgICB3aGlsZSAoYz1mbXQuY2hhckNvZGVBdChpKSAtIDQ4LCBjID49IDAgJiYgYyA8PSA5KSB7XG4gICAgICAgIGYucHJlYyA9IGYucHJlYyAqIDEwICsgYzsgaSsrXG4gICAgICB9XG4gICAgICBpLS07XG4gICAgY2FzZSAnZCc6IGNhc2UgJ2knOlxuICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTsgLyogZmFsbHRocm91Z2ggKi9cbiAgICBjYXNlICd1JzpcbiAgICAgIGYuYmFzZSA9IDEwOyBicmVhaztcbiAgICBjYXNlICd4JzpcbiAgICAgIGYuYmFzZSA9IDE2OyBicmVhaztcbiAgICBjYXNlICdYJzpcbiAgICAgIGYuYmFzZSA9IDE2OyBmLnVwcGVyY2FzZSA9IHRydWU7IGJyZWFrO1xuICAgIGNhc2UgJ28nOlxuICAgICAgZi5iYXNlID0gODsgYnJlYWs7XG4gICAgY2FzZSAnZSc6IGNhc2UgJ2YnOiBjYXNlICdnJzpcbiAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7IGYuY29udiA9IGM7IGJyZWFrO1xuICAgIGNhc2UgJ0UnOiBjYXNlICdGJzogY2FzZSAnRyc6XG4gICAgICBmLnNpZ25lZGNvbnYgPSB0cnVlOyBmLnVwcGVyY2FzZSA9IHRydWU7XG4gICAgICBmLmNvbnYgPSBjLnRvTG93ZXJDYXNlICgpOyBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcmF3YnVmZmVyKSB7XG4gIGlmIChmLnVwcGVyY2FzZSkgcmF3YnVmZmVyID0gcmF3YnVmZmVyLnRvVXBwZXJDYXNlKCk7XG4gIHZhciBsZW4gPSByYXdidWZmZXIubGVuZ3RoO1xuICAvKiBBZGp1c3QgbGVuIHRvIHJlZmxlY3QgYWRkaXRpb25hbCBjaGFycyAoc2lnbiwgZXRjKSAqL1xuICBpZiAoZi5zaWduZWRjb252ICYmIChmLnNpZ24gPCAwIHx8IGYuc2lnbnN0eWxlICE9ICctJykpIGxlbisrO1xuICBpZiAoZi5hbHRlcm5hdGUpIHtcbiAgICBpZiAoZi5iYXNlID09IDgpIGxlbiArPSAxO1xuICAgIGlmIChmLmJhc2UgPT0gMTYpIGxlbiArPSAyO1xuICB9XG4gIC8qIERvIHRoZSBmb3JtYXR0aW5nICovXG4gIHZhciBidWZmZXIgPSBcIlwiO1xuICBpZiAoZi5qdXN0aWZ5ID09ICcrJyAmJiBmLmZpbGxlciA9PSAnICcpXG4gICAgZm9yICh2YXIgaSA9IGxlbjsgaSA8IGYud2lkdGg7IGkrKykgYnVmZmVyICs9ICcgJztcbiAgaWYgKGYuc2lnbmVkY29udikge1xuICAgIGlmIChmLnNpZ24gPCAwKSBidWZmZXIgKz0gJy0nO1xuICAgIGVsc2UgaWYgKGYuc2lnbnN0eWxlICE9ICctJykgYnVmZmVyICs9IGYuc2lnbnN0eWxlO1xuICB9XG4gIGlmIChmLmFsdGVybmF0ZSAmJiBmLmJhc2UgPT0gOCkgYnVmZmVyICs9ICcwJztcbiAgaWYgKGYuYWx0ZXJuYXRlICYmIGYuYmFzZSA9PSAxNikgYnVmZmVyICs9IGYudXBwZXJjYXNlP1wiMFhcIjpcIjB4XCI7XG4gIGlmIChmLmp1c3RpZnkgPT0gJysnICYmIGYuZmlsbGVyID09ICcwJylcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gJzAnO1xuICBidWZmZXIgKz0gcmF3YnVmZmVyO1xuICBpZiAoZi5qdXN0aWZ5ID09ICctJylcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gJyAnO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhidWZmZXIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIGZzX25vZGVfc3VwcG9ydGVkICgpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzICE9PSAndW5kZWZpbmVkJ1xuICAgICAgJiYgdHlwZW9mIGdsb2JhbFRoaXMucHJvY2Vzcy52ZXJzaW9ucyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICYmIHR5cGVvZiBnbG9iYWxUaGlzLnByb2Nlc3MudmVyc2lvbnMubm9kZSAhPT0gJ3VuZGVmaW5lZCcpXG59XG4vL1Byb3ZpZGVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gZnNfbm9kZV9zdXBwb3J0ZWQgKCkge1xuICByZXR1cm4gZmFsc2Vcbn1cblxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVEZXZpY2Vcbi8vUmVxdWlyZXM6IE1sTm9kZUZkLCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9yYWlzZV93aXRoX2FyZ3Ncbi8vUmVxdWlyZXM6IG1ha2VfdW5peF9lcnJfYXJncywgY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIE1sTm9kZURldmljZShyb290KSB7XG4gIHRoaXMuZnMgPSByZXF1aXJlKCdmcycpO1xuICB0aGlzLnJvb3QgPSByb290O1xufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5ubSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuICh0aGlzLnJvb3QgKyBuYW1lKTtcbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuZXhpc3RzID0gZnVuY3Rpb24obmFtZSkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSk/MTowO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5pc0ZpbGUgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuc3RhdFN5bmModGhpcy5ubShuYW1lKSkuaXNGaWxlKCk/MTowO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUubWtkaXIgPSBmdW5jdGlvbihuYW1lLCBtb2RlLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5ta2RpclN5bmModGhpcy5ubShuYW1lKSx7bW9kZTptb2RlfSk7XG4gICAgcmV0dXJuIDBcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5ybWRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLnJtZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICByZXR1cm4gMFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJlYWRkaXIgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMucmVhZGRpclN5bmModGhpcy5ubShuYW1lKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuaXNfZGlyID0gZnVuY3Rpb24obmFtZSkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpLmlzRGlyZWN0b3J5KCk/MTowO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUudW5saW5rID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHZhciBiID0gdGhpcy5mcy5leGlzdHNTeW5jKHRoaXMubm0obmFtZSkpPzE6MDtcbiAgICB0aGlzLmZzLnVubGlua1N5bmModGhpcy5ubShuYW1lKSk7XG4gICAgcmV0dXJuIGI7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKG5hbWUsIGYsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIGNvbnN0cyA9IHJlcXVpcmUoJ2NvbnN0YW50cycpO1xuICB2YXIgcmVzID0gMDtcbiAgZm9yKHZhciBrZXkgaW4gZil7XG4gICAgc3dpdGNoKGtleSl7XG4gICAgY2FzZSBcInJkb25seVwiICA6IHJlcyB8PSBjb25zdHMuT19SRE9OTFk7IGJyZWFrO1xuICAgIGNhc2UgXCJ3cm9ubHlcIiAgOiByZXMgfD0gY29uc3RzLk9fV1JPTkxZOyBicmVhaztcbiAgICBjYXNlIFwiYXBwZW5kXCIgIDpcbiAgICAgIHJlcyB8PSBjb25zdHMuT19XUk9OTFkgfCBjb25zdHMuT19BUFBFTkQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiY3JlYXRlXCIgICA6IHJlcyB8PSBjb25zdHMuT19DUkVBVDsgICAgYnJlYWs7XG4gICAgY2FzZSBcInRydW5jYXRlXCIgOiByZXMgfD0gY29uc3RzLk9fVFJVTkM7ICAgIGJyZWFrO1xuICAgIGNhc2UgXCJleGNsXCIgICAgIDogcmVzIHw9IGNvbnN0cy5PX0VYQ0w7ICAgICBicmVhaztcbiAgICBjYXNlIFwiYmluYXJ5XCIgICA6IHJlcyB8PSBjb25zdHMuT19CSU5BUlk7ICAgYnJlYWs7XG4gICAgY2FzZSBcInRleHRcIiAgICAgOiByZXMgfD0gY29uc3RzLk9fVEVYVDsgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJub25ibG9ja1wiIDogcmVzIHw9IGNvbnN0cy5PX05PTkJMT0NLOyBicmVhaztcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIgZmQgPSB0aGlzLmZzLm9wZW5TeW5jKHRoaXMubm0obmFtZSksIHJlcyk7XG4gICAgdmFyIGlzQ2hhcmFjdGVyRGV2aWNlID0gdGhpcy5mcy5sc3RhdFN5bmModGhpcy5ubShuYW1lKSkuaXNDaGFyYWN0ZXJEZXZpY2UoKTtcbiAgICBmLmlzQ2hhcmFjdGVyRGV2aWNlID0gaXNDaGFyYWN0ZXJEZXZpY2U7XG4gICAgcmV0dXJuIG5ldyBNbE5vZGVGZChmZCwgZik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cblxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5yZW5hbWUgPSBmdW5jdGlvbihvLCBuLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5yZW5hbWVTeW5jKHRoaXMubm0obyksIHRoaXMubm0obikpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnN0YXQgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGpzX3N0YXRzID0gdGhpcy5mcy5zdGF0U3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICByZXR1cm4gdGhpcy5zdGF0c19mcm9tX2pzKGpzX3N0YXRzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5sc3RhdCA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB2YXIganNfc3RhdHMgPSB0aGlzLmZzLmxzdGF0U3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICByZXR1cm4gdGhpcy5zdGF0c19mcm9tX2pzKGpzX3N0YXRzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5zeW1saW5rID0gZnVuY3Rpb24odG9fZGlyLCB0YXJnZXQsIHBhdGgsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLnN5bWxpbmtTeW5jKHRoaXMubm0odGFyZ2V0KSwgdGhpcy5ubShwYXRoKSwgdG9fZGlyID8gJ2RpcicgOiAnZmlsZScpO1xuICAgIHJldHVybiAwO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJlYWRsaW5rID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHZhciBsaW5rID0gdGhpcy5mcy5yZWFkbGlua1N5bmModGhpcy5ubShuYW1lKSwgJ3V0ZjgnKTtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobGluayk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUub3BlbmRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5vcGVuZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5yYWlzZV9ub2RlanNfZXJyb3IgPSBmdW5jdGlvbihlcnIsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSBjYW1sX25hbWVkX3ZhbHVlKFwiVW5peC5Vbml4X2Vycm9yXCIpO1xuICBpZiAocmFpc2VfdW5peCAmJiB1bml4X2Vycm9yKSB7XG4gICAgdmFyIGFyZ3MgPSBtYWtlX3VuaXhfZXJyX2FyZ3MoZXJyLmNvZGUsIGVyci5zeXNjYWxsLCBlcnIucGF0aCwgZXJyLmVycm5vKTtcbiAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuc3RhdHNfZnJvbV9qcyA9IGZ1bmN0aW9uKGpzX3N0YXRzKSB7XG4gIC8qID09PVVuaXguZmlsZV9raW5kPT09XG4gICAqIHR5cGUgZmlsZV9raW5kID1cbiAgICogICAgIFNfUkVHICAgICAgICAgICAgICAgICAgICAgICAoKiogUmVndWxhciBmaWxlICopXG4gICAqICAgfCBTX0RJUiAgICAgICAgICAgICAgICAgICAgICAgKCoqIERpcmVjdG9yeSAqKVxuICAgKiAgIHwgU19DSFIgICAgICAgICAgICAgICAgICAgICAgICgqKiBDaGFyYWN0ZXIgZGV2aWNlICopXG4gICAqICAgfCBTX0JMSyAgICAgICAgICAgICAgICAgICAgICAgKCoqIEJsb2NrIGRldmljZSAqKVxuICAgKiAgIHwgU19MTksgICAgICAgICAgICAgICAgICAgICAgICgqKiBTeW1ib2xpYyBsaW5rICopXG4gICAqICAgfCBTX0ZJRk8gICAgICAgICAgICAgICAgICAgICAgKCoqIE5hbWVkIHBpcGUgKilcbiAgICogICB8IFNfU09DSyAgICAgICAgICAgICAgICAgICAgICAoKiogU29ja2V0ICopXG4gICAqL1xuICB2YXIgZmlsZV9raW5kO1xuICBpZiAoanNfc3RhdHMuaXNGaWxlKCkpIHtcbiAgICBmaWxlX2tpbmQgPSAwO1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICBmaWxlX2tpbmQgPSAxO1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzQ2hhcmFjdGVyRGV2aWNlKCkpIHtcbiAgICBmaWxlX2tpbmQgPSAyO1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzQmxvY2tEZXZpY2UoKSkge1xuICAgIGZpbGVfa2luZCA9IDM7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgIGZpbGVfa2luZCA9IDQ7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNGSUZPKCkpIHtcbiAgICBmaWxlX2tpbmQgPSA1O1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzU29ja2V0KCkpIHtcbiAgICBmaWxlX2tpbmQgPSA2O1xuICB9XG4gIC8qID09PVVuaXguc3RhdHM9PT1cbiAgICogdHlwZSBzdGF0cyA9XG4gICAqICB7IHN0X2RldiA6IGludDsgICAgICAgICAgICAgICAoKiogRGV2aWNlIG51bWJlciAqKVxuICAgKiAgICBzdF9pbm8gOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIElub2RlIG51bWJlciAqKVxuICAgKiAgICBzdF9raW5kIDogZmlsZV9raW5kOyAgICAgICAgKCoqIEtpbmQgb2YgdGhlIGZpbGUgKilcbiAgICogICAgc3RfcGVybSA6IGZpbGVfcGVybTsgICAgICAgICgqKiBBY2Nlc3MgcmlnaHRzICopXG4gICAqICAgIHN0X25saW5rIDogaW50OyAgICAgICAgICAgICAoKiogTnVtYmVyIG9mIGxpbmtzICopXG4gICAqICAgIHN0X3VpZCA6IGludDsgICAgICAgICAgICAgICAoKiogVXNlciBpZCBvZiB0aGUgb3duZXIgKilcbiAgICogICAgc3RfZ2lkIDogaW50OyAgICAgICAgICAgICAgICgqKiBHcm91cCBJRCBvZiB0aGUgZmlsZSdzIGdyb3VwICopXG4gICAqICAgIHN0X3JkZXYgOiBpbnQ7ICAgICAgICAgICAgICAoKiogRGV2aWNlIElEIChpZiBzcGVjaWFsIGZpbGUpICopXG4gICAqICAgIHN0X3NpemUgOiBpbnQ7ICAgICAgICAgICAgICAoKiogU2l6ZSBpbiBieXRlcyAqKVxuICAgKiAgICBzdF9hdGltZSA6IGZsb2F0OyAgICAgICAgICAgKCoqIExhc3QgYWNjZXNzIHRpbWUgKilcbiAgICogICAgc3RfbXRpbWUgOiBmbG9hdDsgICAgICAgICAgICgqKiBMYXN0IG1vZGlmaWNhdGlvbiB0aW1lICopXG4gICAqICAgIHN0X2N0aW1lIDogZmxvYXQ7ICAgICAgICAgICAoKiogTGFzdCBzdGF0dXMgY2hhbmdlIHRpbWUgKilcbiAgICogIH1cbiAgICovXG4gIHJldHVybiBCTE9DSyhcbiAgICAwLFxuICAgIGpzX3N0YXRzLmRldixcbiAgICBqc19zdGF0cy5pbm8sXG4gICAgZmlsZV9raW5kLFxuICAgIGpzX3N0YXRzLm1vZGUsXG4gICAganNfc3RhdHMubmxpbmssXG4gICAganNfc3RhdHMudWlkLFxuICAgIGpzX3N0YXRzLmdpZCxcbiAgICBqc19zdGF0cy5yZGV2LFxuICAgIGpzX3N0YXRzLnNpemUsXG4gICAganNfc3RhdHMuYXRpbWVNcyxcbiAgICBqc19zdGF0cy5tdGltZU1zLFxuICAgIGpzX3N0YXRzLmN0aW1lTXNcbiAgKTtcbn1cblxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sTm9kZURldmljZVxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVEZXZpY2Vcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIE1sTm9kZURldmljZSgpIHtcbn1cblxuLy9Qcm92aWRlczogTWxOb2RlRmRcbi8vUmVxdWlyZXM6IE1sRmlsZSwgY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcsIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfYnl0ZXNfc2V0LCBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gTWxOb2RlRmQoZmQsIGZsYWdzKXtcbiAgdGhpcy5mcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gIHRoaXMuZmQgPSBmZDtcbiAgdGhpcy5mbGFncyA9IGZsYWdzO1xufVxuTWxOb2RlRmQucHJvdG90eXBlID0gbmV3IE1sRmlsZSAoKTtcbk1sTm9kZUZkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sTm9kZUZkO1xuXG5NbE5vZGVGZC5wcm90b3R5cGUudHJ1bmNhdGUgPSBmdW5jdGlvbihsZW4pe1xuICB0cnkge1xuICAgIHRoaXMuZnMuZnRydW5jYXRlU3luYyh0aGlzLmZkLGxlbnwwKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVGZC5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLmZzdGF0U3luYyh0aGlzLmZkKS5zaXplO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZUZkLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKG9mZnNldCxidWYsYnVmX29mZnNldCxsZW4pe1xuICB0cnkge1xuICAgIGlmKHRoaXMuZmxhZ3MuaXNDaGFyYWN0ZXJEZXZpY2UpXG4gICAgICB0aGlzLmZzLndyaXRlU3luYyh0aGlzLmZkLCBidWYsIGJ1Zl9vZmZzZXQsIGxlbik7XG4gICAgZWxzZVxuICAgICAgdGhpcy5mcy53cml0ZVN5bmModGhpcy5mZCwgYnVmLCBidWZfb2Zmc2V0LCBsZW4sIG9mZnNldCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbk1sTm9kZUZkLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24ob2Zmc2V0LGEsYnVmX29mZnNldCxsZW4pe1xuICB0cnkge1xuICAgIGlmKHRoaXMuZmxhZ3MuaXNDaGFyYWN0ZXJEZXZpY2UpXG4gICAgICB2YXIgcmVhZCA9IHRoaXMuZnMucmVhZFN5bmModGhpcy5mZCwgYSwgYnVmX29mZnNldCwgbGVuKTtcbiAgICBlbHNlXG4gICAgICB2YXIgcmVhZCA9IHRoaXMuZnMucmVhZFN5bmModGhpcy5mZCwgYSwgYnVmX29mZnNldCwgbGVuLCBvZmZzZXQpO1xuICAgIHJldHVybiByZWFkO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZUZkLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCl7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5jbG9zZVN5bmModGhpcy5mZCk7XG4gICAgcmV0dXJuIDBcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5cblxuLy9Qcm92aWRlczogTWxOb2RlRmRcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIE1sTm9kZUZkKCl7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZVxuLy9SZXF1aXJlczogTWxOb2RlRmRcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5fZm9yX25vZGUoZmQsIGZsYWdzKXtcbiAgaWYoZmxhZ3MubmFtZSkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgZnMgPSByZXF1aXJlKFwiZnNcIik7XG4gICAgICB2YXIgZmQyID0gZnMub3BlblN5bmMoZmxhZ3MubmFtZSwgXCJyc1wiKTtcbiAgICAgIHJldHVybiBuZXcgTWxOb2RlRmQoZmQyLCBmbGFncyk7XG4gICAgfSBjYXRjaChlKSB7ICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBNbE5vZGVGZChmZCwgZmxhZ3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlKGZkLCBmbGFncyl7XG4gIHJldHVybiBudWxsO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBEdW1teSBmaWxlc3lzdGVtXG5cbi8vUHJvdmlkZXM6IGNhbWxfdHJhaWxpbmdfc2xhc2hcbmZ1bmN0aW9uIGNhbWxfdHJhaWxpbmdfc2xhc2gobmFtZSl7XG4gIHJldHVybiAobmFtZS5zbGljZSgtMSkgIT09IFwiL1wiKSA/IChuYW1lICsgXCIvXCIpIDogbmFtZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jdXJyZW50X2RpclxuLy9SZXF1aXJlczogY2FtbF90cmFpbGluZ19zbGFzaCwgZnNfbm9kZV9zdXBwb3J0ZWRcbmlmKGZzX25vZGVfc3VwcG9ydGVkICgpICYmIGdsb2JhbFRoaXMucHJvY2VzcyAmJiBnbG9iYWxUaGlzLnByb2Nlc3MuY3dkKVxuICB2YXIgY2FtbF9jdXJyZW50X2RpciA9IGdsb2JhbFRoaXMucHJvY2Vzcy5jd2QoKS5yZXBsYWNlKC9cXFxcL2csJy8nKTtcbmVsc2VcbiAgdmFyIGNhbWxfY3VycmVudF9kaXIgPSAgXCIvc3RhdGljXCI7XG5jYW1sX2N1cnJlbnRfZGlyID0gY2FtbF90cmFpbGluZ19zbGFzaChjYW1sX2N1cnJlbnRfZGlyKTtcblxuLy9Qcm92aWRlczogY2FtbF9nZXRfcm9vdFxuLy9SZXF1aXJlczogcGF0aF9pc19hYnNvbHV0ZVxuZnVuY3Rpb24gY2FtbF9nZXRfcm9vdChwYXRoKXtcbiAgdmFyIHggPSBwYXRoX2lzX2Fic29sdXRlKHBhdGgpO1xuICBpZiAoIXgpIHJldHVybjtcbiAgcmV0dXJuIHhbMF0gKyBcIi9cIn1cblxuLy9Qcm92aWRlczogY2FtbF9yb290XG4vL1JlcXVpcmVzOiBjYW1sX2dldF9yb290LCBjYW1sX2N1cnJlbnRfZGlyLCBjYW1sX2ZhaWx3aXRoXG52YXIgY2FtbF9yb290ID0gY2FtbF9nZXRfcm9vdChjYW1sX2N1cnJlbnRfZGlyKSB8fCBjYW1sX2ZhaWx3aXRoKFwidW5hYmxlIHRvIGNvbXB1dGUgY2FtbF9yb290XCIpO1xuXG5cbi8vUHJvdmlkZXM6IE1sRmlsZVxuZnVuY3Rpb24gTWxGaWxlKCl7ICB9XG5cbi8vUHJvdmlkZXM6IHBhdGhfaXNfYWJzb2x1dGVcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiBtYWtlX3BhdGhfaXNfYWJzb2x1dGUoKSB7XG4gIGZ1bmN0aW9uIHBvc2l4KHBhdGgpIHtcbiAgICBpZiAocGF0aC5jaGFyQXQoMCkgPT09ICcvJykgcmV0dXJuIFtcIlwiLCBwYXRoLnN1YnN0cmluZygxKV07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZnVuY3Rpb24gd2luMzIocGF0aCkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2IzZmNjMjQ1ZmIyNTUzOTkwOWVmMWQ1ZWFhMDFkYmY5MmUxNjg2MzMvbGliL3BhdGguanMjTDU2XG4gICAgdmFyIHNwbGl0RGV2aWNlUmUgPSAvXihbYS16QS1aXTp8W1xcXFwvXXsyfVteXFxcXC9dK1tcXFxcL10rW15cXFxcL10rKT8oW1xcXFwvXSk/KFtcXHNcXFNdKj8pJC87XG4gICAgdmFyIHJlc3VsdCA9IHNwbGl0RGV2aWNlUmUuZXhlYyhwYXRoKTtcbiAgICB2YXIgZGV2aWNlID0gcmVzdWx0WzFdIHx8ICcnO1xuICAgIHZhciBpc1VuYyA9IEJvb2xlYW4oZGV2aWNlICYmIGRldmljZS5jaGFyQXQoMSkgIT09ICc6Jyk7XG5cbiAgICAvLyBVTkMgcGF0aHMgYXJlIGFsd2F5cyBhYnNvbHV0ZVxuICAgIGlmIChCb29sZWFuKHJlc3VsdFsyXSB8fCBpc1VuYykpIHtcbiAgICAgIHZhciByb290ID0gKHJlc3VsdFsxXSB8fCAnJyk7XG4gICAgICB2YXIgc2VwID0gKHJlc3VsdFsyXSB8fCAnJyk7XG4gICAgICByZXR1cm4gW3Jvb3QsIHBhdGguc3Vic3RyaW5nKHJvb3QubGVuZ3RoICsgc2VwLmxlbmd0aCldXG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBpZihmc19ub2RlX3N1cHBvcnRlZCAoKSAmJiBnbG9iYWxUaGlzLnByb2Nlc3MgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IHdpbjMyIDogcG9zaXg7XG4gIH1cbiAgZWxzZSByZXR1cm4gcG9zaXhcbn1cbnZhciBwYXRoX2lzX2Fic29sdXRlID0gbWFrZV9wYXRoX2lzX2Fic29sdXRlKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV9wYXRoXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZywgcGF0aF9pc19hYnNvbHV0ZVxuZnVuY3Rpb24gY2FtbF9tYWtlX3BhdGggKG5hbWUpIHtcbiAgbmFtZT1jYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lKTtcbiAgaWYoICFwYXRoX2lzX2Fic29sdXRlKG5hbWUpIClcbiAgICBuYW1lID0gY2FtbF9jdXJyZW50X2RpciArIG5hbWU7XG4gIHZhciBjb21wMCA9IHBhdGhfaXNfYWJzb2x1dGUobmFtZSk7XG4gIHZhciBjb21wID0gY29tcDBbMV0uc3BsaXQoXCIvXCIpO1xuICB2YXIgbmNvbXAgPSBbXVxuICBmb3IodmFyIGkgPSAwOyBpPGNvbXAubGVuZ3RoOyBpKyspe1xuICAgIHN3aXRjaChjb21wW2ldKXtcbiAgICBjYXNlIFwiLi5cIjogaWYobmNvbXAubGVuZ3RoPjEpIG5jb21wLnBvcCgpOyBicmVhaztcbiAgICBjYXNlIFwiLlwiOiBicmVhaztcbiAgICBjYXNlIFwiXCI6IGJyZWFrO1xuICAgIGRlZmF1bHQ6IG5jb21wLnB1c2goY29tcFtpXSk7YnJlYWtcbiAgICB9XG4gIH1cbiAgbmNvbXAudW5zaGlmdChjb21wMFswXSk7XG4gIG5jb21wLm9yaWcgPSBuYW1lO1xuICByZXR1cm4gbmNvbXA7XG59XG5cbi8vUHJvdmlkZXM6anNvb19tb3VudF9wb2ludFxuLy9SZXF1aXJlczogTWxGYWtlRGV2aWNlLCBNbE5vZGVEZXZpY2UsIGNhbWxfcm9vdCwgZnNfbm9kZV9zdXBwb3J0ZWRcbnZhciBqc29vX21vdW50X3BvaW50ID0gW11cbmlmIChmc19ub2RlX3N1cHBvcnRlZCgpKSB7XG4gIGpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpjYW1sX3Jvb3QsZGV2aWNlOm5ldyBNbE5vZGVEZXZpY2UoY2FtbF9yb290KX0pO1xufSBlbHNlIHtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOmNhbWxfcm9vdCxkZXZpY2U6bmV3IE1sRmFrZURldmljZShjYW1sX3Jvb3QpfSk7XG59XG5qc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6XCIvc3RhdGljL1wiLCBkZXZpY2U6bmV3IE1sRmFrZURldmljZShcIi9zdGF0aWMvXCIpfSk7XG5cbi8vUHJvdmlkZXM6Y2FtbF9saXN0X21vdW50X3BvaW50XG4vL1JlcXVpcmVzOiBqc29vX21vdW50X3BvaW50LCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2xpc3RfbW91bnRfcG9pbnQoKXtcbiAgdmFyIHByZXYgPSAwXG4gIGZvcih2YXIgaSA9IDA7IGkgPCBqc29vX21vdW50X3BvaW50Lmxlbmd0aDsgaSsrKXtcbiAgICB2YXIgb2xkID0gcHJldjtcbiAgICBwcmV2ID0gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoanNvb19tb3VudF9wb2ludFtpXS5wYXRoKSwgb2xkXVxuICB9XG4gIHJldHVybiBwcmV2O1xufVxuXG4vL1Byb3ZpZGVzOiByZXNvbHZlX2ZzX2RldmljZVxuLy9SZXF1aXJlczogY2FtbF9tYWtlX3BhdGgsIGpzb29fbW91bnRfcG9pbnQsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX2dldF9yb290LCBNbE5vZGVEZXZpY2UsIGNhbWxfdHJhaWxpbmdfc2xhc2gsIGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiByZXNvbHZlX2ZzX2RldmljZShuYW1lKXtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBwYXRoLmpvaW4oXCIvXCIpO1xuICB2YXIgbmFtZV9zbGFzaCA9IGNhbWxfdHJhaWxpbmdfc2xhc2gobmFtZSk7XG4gIHZhciByZXM7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBqc29vX21vdW50X3BvaW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG0gPSBqc29vX21vdW50X3BvaW50W2ldO1xuICAgIGlmKG5hbWVfc2xhc2guc2VhcmNoKG0ucGF0aCkgPT0gMFxuICAgICAgICYmICghcmVzIHx8IHJlcy5wYXRoLmxlbmd0aCA8IG0ucGF0aC5sZW5ndGgpKVxuICAgICAgcmVzID0ge3BhdGg6bS5wYXRoLGRldmljZTptLmRldmljZSxyZXN0Om5hbWUuc3Vic3RyaW5nKG0ucGF0aC5sZW5ndGgsbmFtZS5sZW5ndGgpfTtcbiAgfVxuICBpZiggIXJlcyAmJiBmc19ub2RlX3N1cHBvcnRlZCgpKSB7XG4gICAgdmFyIHJvb3QgPSBjYW1sX2dldF9yb290KG5hbWUpO1xuICAgIGlmIChyb290ICYmIHJvb3QubWF0Y2goL15bYS16QS1aXTpcXC8kLykpe1xuICAgICAgdmFyIG0gPSB7cGF0aDpyb290LGRldmljZTpuZXcgTWxOb2RlRGV2aWNlKHJvb3QpfTtcbiAgICAgIGpzb29fbW91bnRfcG9pbnQucHVzaChtKTtcbiAgICAgIHJlcyA9IHtwYXRoOm0ucGF0aCxkZXZpY2U6bS5kZXZpY2UscmVzdDpuYW1lLnN1YnN0cmluZyhtLnBhdGgubGVuZ3RoLG5hbWUubGVuZ3RoKX07XG4gICAgfVxuICB9XG4gIGlmKCByZXMgKSByZXR1cm4gcmVzO1xuICBjYW1sX3JhaXNlX3N5c19lcnJvcihcIm5vIGRldmljZSBmb3VuZCBmb3IgXCIgKyBuYW1lX3NsYXNoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tb3VudF9hdXRvbG9hZFxuLy9SZXF1aXJlczogTWxGYWtlRGV2aWNlLCBjYW1sX21ha2VfcGF0aCwganNvb19tb3VudF9wb2ludCwgY2FtbF90cmFpbGluZ19zbGFzaFxuZnVuY3Rpb24gY2FtbF9tb3VudF9hdXRvbG9hZChuYW1lLGYpe1xuICB2YXIgcGF0aCA9IGNhbWxfbWFrZV9wYXRoKG5hbWUpO1xuICB2YXIgbmFtZSA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocGF0aC5qb2luKFwiL1wiKSk7XG4gIGpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpuYW1lLGRldmljZTpuZXcgTWxGYWtlRGV2aWNlKG5hbWUsZil9KVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bm1vdW50XG4vL1JlcXVpcmVzOiBqc29vX21vdW50X3BvaW50LCBjYW1sX21ha2VfcGF0aCwgY2FtbF90cmFpbGluZ19zbGFzaFxuZnVuY3Rpb24gY2FtbF91bm1vdW50KG5hbWUpe1xuICB2YXIgcGF0aCA9IGNhbWxfbWFrZV9wYXRoKG5hbWUpO1xuICB2YXIgbmFtZSA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocGF0aC5qb2luKFwiL1wiKSk7XG4gIHZhciBpZHggPSAtMTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGpzb29fbW91bnRfcG9pbnQubGVuZ3RoOyBpKyspXG4gICAgaWYoanNvb19tb3VudF9wb2ludFtpXS5wYXRoID09IG5hbWUpIGlkeCA9IGk7XG4gIGlmKGlkeCA+IC0xKSBqc29vX21vdW50X3BvaW50LnNwbGljZShpZHgsMSk7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldGN3ZFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpciwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0Y3dkKCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhjYW1sX2N1cnJlbnRfZGlyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY2hkaXJcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9kaXIsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF90cmFpbGluZ19zbGFzaCwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfY2hkaXIoZGlyKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UoZGlyKTtcbiAgaWYocm9vdC5kZXZpY2UuZXhpc3RzKHJvb3QucmVzdCkpIHtcbiAgICBpZihyb290LnJlc3QpIGNhbWxfY3VycmVudF9kaXIgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHJvb3QucGF0aCArIHJvb3QucmVzdCk7XG4gICAgZWxzZSBjYW1sX2N1cnJlbnRfZGlyID0gcm9vdC5wYXRoO1xuICAgIHJldHVybiAwO1xuICB9XG4gIGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlKGNhbWxfanNieXRlc19vZl9zdHJpbmcoZGlyKSk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShuYW1lKXtcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IgKG5hbWUgKyBcIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9ub3RfYV9kaXJcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vdF9hX2RpcihuYW1lKXtcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IgKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19maWxlX2V4aXN0c1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX2ZpbGVfZXhpc3RzIChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJldHVybiByb290LmRldmljZS5leGlzdHMocm9vdC5yZXN0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVhZF9kaXJlY3Rvcnlcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm90X2FfZGlyLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfcmVhZF9kaXJlY3RvcnkobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBhID0gcm9vdC5kZXZpY2UucmVhZGRpcihyb290LnJlc3QpO1xuICB2YXIgbCA9IG5ldyBBcnJheShhLmxlbmd0aCArIDEpO1xuICBsWzBdID0gMDtcbiAgZm9yKHZhciBpPTA7aTxhLmxlbmd0aDtpKyspXG4gICAgbFtpKzFdID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhhW2ldKTtcbiAgcmV0dXJuIGw7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JlbW92ZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUsIHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N5c19yZW1vdmUobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBvayA9IHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QpO1xuICBpZihvayA9PSAwKSBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lzX2RpcmVjdG9yeVxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX2lzX2RpcmVjdG9yeShuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGEgPSByb290LmRldmljZS5pc19kaXIocm9vdC5yZXN0KTtcbiAgcmV0dXJuIGE/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZW5hbWVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZW5hbWUobyxuKXtcbiAgdmFyIG9fcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG8pO1xuICB2YXIgbl9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobik7XG4gIGlmKG9fcm9vdC5kZXZpY2UgIT0gbl9yb290LmRldmljZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zeXNfcmVuYW1lOiBjYW5ub3QgbW92ZSBmaWxlIGJldHdlZW4gdHdvIGZpbGVzeXN0ZW1cIik7XG4gIGlmKCFvX3Jvb3QuZGV2aWNlLnJlbmFtZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zeXNfcmVuYW1lOiBubyBpbXBsZW1lbnRlZFwiKTtcbiAgb19yb290LmRldmljZS5yZW5hbWUob19yb290LnJlc3QsIG5fcm9vdC5yZXN0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfbWtkaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9zeXNfbWtkaXIobmFtZSwgcGVybSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJvb3QuZGV2aWNlLm1rZGlyKHJvb3QucmVzdCxwZXJtKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JtZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfcmFpc2Vfbm90X2FfZGlyXG5mdW5jdGlvbiBjYW1sX3N5c19ybWRpcihuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcm9vdC5kZXZpY2Uucm1kaXIocm9vdC5yZXN0KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbWFwX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfYmFfbWFwX2ZpbGUodmZkLCBraW5kLCBsYXlvdXQsIHNoYXJlZCwgZGltcywgcG9zKSB7XG4gIC8vIHZhciBkYXRhID0gY2FtbF9zeXNfZmRzW3ZmZF07XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2JhX21hcF9maWxlIG5vdCBpbXBsZW1lbnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9tYXBfZmlsZV9ieXRlY29kZVxuLy9SZXF1aXJlczogY2FtbF9iYV9tYXBfZmlsZVxuZnVuY3Rpb24gY2FtbF9iYV9tYXBfZmlsZV9ieXRlY29kZShhcmd2LGFyZ24pe1xuICByZXR1cm4gY2FtbF9iYV9tYXBfZmlsZShhcmd2WzBdLGFyZ3ZbMV0sYXJndlsyXSxhcmd2WzNdLGFyZ3ZbNF0sYXJndls1XSk7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29fY3JlYXRlX2ZpbGVfZXh0ZXJuXG5mdW5jdGlvbiBqc29vX2NyZWF0ZV9maWxlX2V4dGVybihuYW1lLGNvbnRlbnQpe1xuICBpZihnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUpXG4gICAgZ2xvYmFsVGhpcy5qc29vX2NyZWF0ZV9maWxlKG5hbWUsY29udGVudCk7XG4gIGVsc2Uge1xuICAgIGlmKCFnbG9iYWxUaGlzLmNhbWxfZnNfdG1wKSBnbG9iYWxUaGlzLmNhbWxfZnNfdG1wID0gW107XG4gICAgZ2xvYmFsVGhpcy5jYW1sX2ZzX3RtcC5wdXNoKHtuYW1lOm5hbWUsY29udGVudDpjb250ZW50fSk7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZnNfaW5pdFxuLy9SZXF1aXJlczoganNvb19jcmVhdGVfZmlsZVxuZnVuY3Rpb24gY2FtbF9mc19pbml0ICgpe1xuICB2YXIgdG1wPWdsb2JhbFRoaXMuY2FtbF9mc190bXBcbiAgaWYodG1wKXtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgdG1wLmxlbmd0aDsgaSsrKXtcbiAgICAgIGpzb29fY3JlYXRlX2ZpbGUodG1wW2ldLm5hbWUsdG1wW2ldLmNvbnRlbnQpO1xuICAgIH1cbiAgfVxuICBnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUgPSBqc29vX2NyZWF0ZV9maWxlO1xuICBnbG9iYWxUaGlzLmNhbWxfZnNfdG1wID0gW107XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9jcmVhdGVfZmlsZShuYW1lLGNvbnRlbnQpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYoISByb290LmRldmljZS5yZWdpc3RlcikgY2FtbF9mYWlsd2l0aChcImNhbm5vdCByZWdpc3RlciBmaWxlXCIpO1xuICByb290LmRldmljZS5yZWdpc3Rlcihyb290LnJlc3QsY29udGVudCk7XG4gIHJldHVybiAwO1xufVxuXG5cbi8vUHJvdmlkZXM6IGpzb29fY3JlYXRlX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2ZpbGUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGpzb29fY3JlYXRlX2ZpbGUobmFtZSxjb250ZW50KSB7XG4gIHZhciBuYW1lID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhuYW1lKTtcbiAgdmFyIGNvbnRlbnQgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNvbnRlbnQpO1xuICByZXR1cm4gY2FtbF9jcmVhdGVfZmlsZShuYW1lLCBjb250ZW50KTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlYWRfZmlsZV9jb250ZW50XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUsIGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlYWRfZmlsZV9jb250ZW50IChuYW1lKSB7XG4gIHZhciBuYW1lID0gKHR5cGVvZiBuYW1lID09IFwic3RyaW5nXCIpP2NhbWxfc3RyaW5nX29mX2pzYnl0ZXMobmFtZSk6bmFtZTtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYocm9vdC5kZXZpY2UuZXhpc3RzKHJvb3QucmVzdCkpIHtcbiAgICB2YXIgZmlsZSA9IHJvb3QuZGV2aWNlLm9wZW4ocm9vdC5yZXN0LHtyZG9ubHk6MX0pO1xuICAgIHZhciBsZW4gID0gZmlsZS5sZW5ndGgoKTtcbiAgICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICBmaWxlLnJlYWQoMCxidWYsMCxsZW4pO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheShidWYpXG4gIH1cbiAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKSk7XG59XG4iLCIvL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ2V0dGltZW9mZGF5XG4vL0FsaWFzOiB1bml4X2dldHRpbWVvZmRheVxuZnVuY3Rpb24gY2FtbF91bml4X2dldHRpbWVvZmRheSAoKSB7XG4gIHJldHVybiAobmV3IERhdGUoKSkuZ2V0VGltZSgpIC8gMTAwMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3RpbWVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9nZXR0aW1lb2ZkYXlcbi8vQWxpYXM6IHVuaXhfdGltZVxuZnVuY3Rpb24gY2FtbF91bml4X3RpbWUgKCkge1xuICByZXR1cm4gTWF0aC5mbG9vcihjYW1sX3VuaXhfZ2V0dGltZW9mZGF5ICgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dtdGltZVxuLy9BbGlhczogdW5peF9nbXRpbWVcbmZ1bmN0aW9uIGNhbWxfdW5peF9nbXRpbWUgKHQpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSAodCAqIDEwMDApO1xuICB2YXIgZF9udW0gPSBkLmdldFRpbWUoKTtcbiAgdmFyIGphbnVhcnlmaXJzdCA9IChuZXcgRGF0ZShEYXRlLlVUQyhkLmdldFVUQ0Z1bGxZZWFyKCksIDAsIDEpKSkuZ2V0VGltZSgpO1xuICB2YXIgZG95ID0gTWF0aC5mbG9vcigoZF9udW0gLSBqYW51YXJ5Zmlyc3QpIC8gODY0MDAwMDApO1xuICByZXR1cm4gQkxPQ0soMCwgZC5nZXRVVENTZWNvbmRzKCksIGQuZ2V0VVRDTWludXRlcygpLCBkLmdldFVUQ0hvdXJzKCksXG4gICAgICAgICAgICAgICBkLmdldFVUQ0RhdGUoKSwgZC5nZXRVVENNb250aCgpLCBkLmdldFVUQ0Z1bGxZZWFyKCkgLSAxOTAwLFxuICAgICAgICAgICAgICAgZC5nZXRVVENEYXkoKSwgZG95LFxuICAgICAgICAgICAgICAgZmFsc2UgfCAwIC8qIGZvciBVVEMgZGF5bGlnaHQgc2F2aW5ncyB0aW1lIGlzIGZhbHNlICovKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbG9jYWx0aW1lXG4vL0FsaWFzOiB1bml4X2xvY2FsdGltZVxuZnVuY3Rpb24gY2FtbF91bml4X2xvY2FsdGltZSAodCkge1xuICB2YXIgZCA9IG5ldyBEYXRlICh0ICogMTAwMCk7XG4gIHZhciBkX251bSA9IGQuZ2V0VGltZSgpO1xuICB2YXIgamFudWFyeWZpcnN0ID0gKG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwgMCwgMSkpLmdldFRpbWUoKTtcbiAgdmFyIGRveSA9IE1hdGguZmxvb3IoKGRfbnVtIC0gamFudWFyeWZpcnN0KSAvIDg2NDAwMDAwKTtcbiAgdmFyIGphbiA9IG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwgMCwgMSk7XG4gIHZhciBqdWwgPSBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDYsIDEpO1xuICB2YXIgc3RkVGltZXpvbmVPZmZzZXQgPSBNYXRoLm1heChqYW4uZ2V0VGltZXpvbmVPZmZzZXQoKSwganVsLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICByZXR1cm4gQkxPQ0soMCwgZC5nZXRTZWNvbmRzKCksIGQuZ2V0TWludXRlcygpLCBkLmdldEhvdXJzKCksXG4gICAgICAgICAgICAgICBkLmdldERhdGUoKSwgZC5nZXRNb250aCgpLCBkLmdldEZ1bGxZZWFyKCkgLSAxOTAwLFxuICAgICAgICAgICAgICAgZC5nZXREYXkoKSwgZG95LFxuICAgICAgICAgICAgICAgKGQuZ2V0VGltZXpvbmVPZmZzZXQoKSA8IHN0ZFRpbWV6b25lT2Zmc2V0KSB8IDAgLyogZGF5bGlnaHQgc2F2aW5ncyB0aW1lICBmaWVsZC4gKi8pXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ta3RpbWVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb2NhbHRpbWVcbi8vQWxpYXM6IHVuaXhfbWt0aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfbWt0aW1lKHRtKXtcbiAgdmFyIGQgPSAobmV3IERhdGUodG1bNl0rMTkwMCx0bVs1XSx0bVs0XSx0bVszXSx0bVsyXSx0bVsxXSkpLmdldFRpbWUoKTtcbiAgdmFyIHQgPSBNYXRoLmZsb29yKGQgLyAxMDAwKTtcbiAgdmFyIHRtMiA9IGNhbWxfdW5peF9sb2NhbHRpbWUodCk7XG4gIHJldHVybiBCTE9DSygwLHQsdG0yKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9zdGFydHVwIGNvbnN0XG4vL0FsaWFzOiB3aW5fc3RhcnR1cFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXJ0dXAoKSB7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfY2xlYW51cCBjb25zdFxuLy9BbGlhczogd2luX2NsZWFudXBcbmZ1bmN0aW9uIGNhbWxfdW5peF9jbGVhbnVwKCkge31cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbGVkZXNjcl9vZl9mZCBjb25zdFxuLy9BbGlhczogd2luX2hhbmRsZV9mZFxuZnVuY3Rpb24gY2FtbF91bml4X2ZpbGVkZXNjcl9vZl9mZCh4KSB7cmV0dXJuIHg7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaXNhdHR5XG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9BbGlhczogdW5peF9pc2F0dHlcbmZ1bmN0aW9uIGNhbWxfdW5peF9pc2F0dHkoZmlsZURlc2NyaXB0b3IpIHtcbiAgaWYoZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICAgIHZhciB0dHkgPSByZXF1aXJlKCd0dHknKTtcbiAgICByZXR1cm4gdHR5LmlzYXR0eShmaWxlRGVzY3JpcHRvcik/MTowO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2lzYXR0eVxuLy9BbGlhczogdW5peF9pc2F0dHlcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9pc2F0dHkoZmlsZURlc2NyaXB0b3IpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IG1ha2VfdW5peF9lcnJfYXJnc1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbnZhciB1bml4X2Vycm9yID0gW1xuICAvKiA9PT1Vbml4LmVycm9yPT09XG4gICAqXG4gICAqIFRoaXMgYXJyYXkgaXMgaW4gb3JkZXIgb2YgdGhlIHZhcmlhbnQgaW4gT0NhbWxcbiAgICovXG4gIFwiRTJCSUdcIiwgXCJFQUNDRVNcIiwgXCJFQUdBSU5cIiwgXCJFQkFERlwiLCBcIkVCVVNZXCIsIFwiRUNISUxEXCIsIFwiRURFQURMS1wiLCBcIkVET01cIixcbiAgXCJFRVhJU1RcIiwgXCJFRkFVTFRcIiwgXCJFRkJJR1wiLCBcIkVJTlRSXCIsIFwiRUlOVkFMXCIsIFwiRUlPXCIsIFwiRUlTRElSXCIsIFwiRU1GSUxFXCIsXG4gIFwiRU1MSU5LXCIsIFwiRU5BTUVUT09MT05HXCIsIFwiRU5GSUxFXCIsIFwiRU5PREVWXCIsIFwiRU5PRU5UXCIsIFwiRU5PRVhFQ1wiLCBcIkVOT0xDS1wiLFxuICBcIkVOT01FTVwiLCBcIkVOT1NQQ1wiLCBcIkVOT1NZU1wiLCBcIkVOT1RESVJcIiwgXCJFTk9URU1QVFlcIiwgXCJFTk9UVFlcIiwgXCJFTlhJT1wiLFxuICBcIkVQRVJNXCIsIFwiRVBJUEVcIiwgXCJFUkFOR0VcIiwgXCJFUk9GU1wiLCBcIkVTUElQRVwiLCBcIkVTUkNIXCIsIFwiRVhERVZcIiwgXCJFV09VTERCTE9DS1wiLFxuICBcIkVJTlBST0dSRVNTXCIsIFwiRUFMUkVBRFlcIiwgXCJFTk9UU09DS1wiLCBcIkVERVNUQUREUlJFUVwiLCBcIkVNU0dTSVpFXCIsXG4gIFwiRVBST1RPVFlQRVwiLCBcIkVOT1BST1RPT1BUXCIsIFwiRVBST1RPTk9TVVBQT1JUXCIsIFwiRVNPQ0tUTk9TVVBQT1JUXCIsXG4gIFwiRU9QTk9UU1VQUFwiLCBcIkVQRk5PU1VQUE9SVFwiLCBcIkVBRk5PU1VQUE9SVFwiLCBcIkVBRERSSU5VU0VcIiwgXCJFQUREUk5PVEFWQUlMXCIsXG4gIFwiRU5FVERPV05cIiwgXCJFTkVUVU5SRUFDSFwiLCBcIkVORVRSRVNFVFwiLCBcIkVDT05OQUJPUlRFRFwiLCBcIkVDT05OUkVTRVRcIiwgXCJFTk9CVUZTXCIsXG4gIFwiRUlTQ09OTlwiLCBcIkVOT1RDT05OXCIsIFwiRVNIVVRET1dOXCIsIFwiRVRPT01BTllSRUZTXCIsIFwiRVRJTUVET1VUXCIsIFwiRUNPTk5SRUZVU0VEXCIsXG4gIFwiRUhPU1RET1dOXCIsIFwiRUhPU1RVTlJFQUNIXCIsIFwiRUxPT1BcIiwgXCJFT1ZFUkZMT1dcIlxuXTtcbmZ1bmN0aW9uIG1ha2VfdW5peF9lcnJfYXJncyhjb2RlLCBzeXNjYWxsLCBwYXRoLCBlcnJubykge1xuICB2YXIgdmFyaWFudCA9IHVuaXhfZXJyb3IuaW5kZXhPZihjb2RlKTtcbiAgaWYgKHZhcmlhbnQgPCAwKSB7XG4gICAgLy8gRGVmYXVsdCBpZiB1bmRlZmluZWRcbiAgICBpZiAoZXJybm8gPT0gbnVsbCkge1xuICAgICAgZXJybm8gPSAtOTk5OVxuICAgIH1cbiAgICAvLyBJZiBub25lIG9mIHRoZSBhYm92ZSB2YXJpYW50cywgZmFsbGJhY2sgdG8gRVVOS05PV05FUlIoaW50KVxuICAgIHZhcmlhbnQgPSBCTE9DSygwLCBlcnJubyk7XG4gIH1cbiAgdmFyIGFyZ3MgPSBbXG4gICAgdmFyaWFudCxcbiAgICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhzeXNjYWxsIHx8IFwiXCIpLFxuICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHBhdGggfHwgXCJcIilcbiAgXTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9zdGF0XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9zdGF0XG5mdW5jdGlvbiBjYW1sX3VuaXhfc3RhdChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2Uuc3RhdCkge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfc3RhdDogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5zdGF0KHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3N0YXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9zdGF0LCBjYW1sX2ludDY0X29mX2ludDMyXG4vL0FsaWFzOiB1bml4X3N0YXRfNjRcbmZ1bmN0aW9uIGNhbWxfdW5peF9zdGF0XzY0KG5hbWUpIHtcbiAgdmFyIHIgPSBjYW1sX3VuaXhfc3RhdChuYW1lKTtcbiAgcls5XSA9IGNhbWxfaW50NjRfb2ZfaW50MzIocls5XSk7XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbHN0YXRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X2xzdGF0XG5mdW5jdGlvbiBjYW1sX3VuaXhfbHN0YXQobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLmxzdGF0KSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9sc3RhdDogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5sc3RhdChyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc3RhdF82NFxuLy9SZXF1aXJlczogY2FtbF91bml4X2xzdGF0LCBjYW1sX2ludDY0X29mX2ludDMyXG4vL0FsaWFzOiB1bml4X2xzdGF0XzY0XG5mdW5jdGlvbiBjYW1sX3VuaXhfbHN0YXRfNjQobmFtZSkge1xuICB2YXIgciA9IGNhbWxfdW5peF9sc3RhdChuYW1lKTtcbiAgcls5XSA9IGNhbWxfaW50NjRfb2ZfaW50MzIocls5XSk7XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbWtkaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X21rZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfbWtkaXIobmFtZSwgcGVybSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLm1rZGlyKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9ta2Rpcjogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5ta2Rpcihyb290LnJlc3QsIHBlcm0sIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ybWRpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfcm1kaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9ybWRpcihuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2Uucm1kaXIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3JtZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnJtZGlyKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3N5bWxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3N5bWxpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9zeW1saW5rKHRvX2Rpciwgc3JjLCBkc3QpIHtcbiAgdmFyIHNyY19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uoc3JjKTtcbiAgdmFyIGRzdF9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2UoZHN0KTtcbiAgaWYoc3JjX3Jvb3QuZGV2aWNlICE9IGRzdF9yb290LmRldmljZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N5bWxpbms6IGNhbm5vdCBzeW1saW5rIGJldHdlZW4gdHdvIGZpbGVzeXN0ZW1zXCIpO1xuICBpZiAoIXNyY19yb290LmRldmljZS5zeW1saW5rKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9zeW1saW5rOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHNyY19yb290LmRldmljZS5zeW1saW5rKHRvX2Rpciwgc3JjX3Jvb3QucmVzdCwgZHN0X3Jvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JlYWRsaW5rXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9yZWFkbGlua1xuZnVuY3Rpb24gY2FtbF91bml4X3JlYWRsaW5rKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5yZWFkbGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfcmVhZGxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2UucmVhZGxpbmsocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdW5saW5rXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF91bmxpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF91bmxpbmsobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnVubGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfdW5saW5rOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXR1aWRcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL0FsaWFzOiB1bml4X2dldHVpZFxuZnVuY3Rpb24gY2FtbF91bml4X2dldHVpZCh1bml0KSB7XG4gIGlmKGdsb2JhbFRoaXMucHJvY2VzcyAmJiBnbG9iYWxUaGlzLnByb2Nlc3MuZ2V0dWlkKXtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5wcm9jZXNzLmdldHVpZCgpO1xuICB9XG4gIGNhbWxfcmFpc2Vfbm90X2ZvdW5kKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXRwd3VpZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vQWxpYXM6IHVuaXhfZ2V0cHd1aWRcbmZ1bmN0aW9uIGNhbWxfdW5peF9nZXRwd3VpZCh1bml0KSB7XG4gIGNhbWxfcmFpc2Vfbm90X2ZvdW5kKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9oYXNfc3ltbGlua1xuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vQWxpYXM6IHVuaXhfaGFzX3N5bWxpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9oYXNfc3ltbGluayh1bml0KSB7XG4gIHJldHVybiBmc19ub2RlX3N1cHBvcnRlZCgpPzE6MFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfb3BlbmRpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfb3BlbmRpclxuZnVuY3Rpb24gY2FtbF91bml4X29wZW5kaXIocGF0aCkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKHBhdGgpO1xuICBpZiAoIXJvb3QuZGV2aWNlLm9wZW5kaXIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X29wZW5kaXI6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICB2YXIgZGlyX2hhbmRsZSA9IHJvb3QuZGV2aWNlLm9wZW5kaXIocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xuICByZXR1cm4geyBwb2ludGVyIDogZGlyX2hhbmRsZSwgcGF0aDogcGF0aCB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9yZWFkZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogbWFrZV91bml4X2Vycl9hcmdzLCBjYW1sX3JhaXNlX3dpdGhfYXJncywgY2FtbF9uYW1lZF92YWx1ZVxuLy9BbGlhczogdW5peF9yZWFkZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmVhZGRpcihkaXJfaGFuZGxlKSB7XG4gIHZhciBlbnRyeTtcbiAgdHJ5IHtcbiAgICAgIGVudHJ5ID0gZGlyX2hhbmRsZS5wb2ludGVyLnJlYWRTeW5jKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHZhciB1bml4X2Vycm9yID0gY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFQkFERlwiLCBcInJlYWRkaXJcIiwgZGlyX2hhbmRsZS5wYXRoKSk7XG4gIH1cbiAgaWYgKGVudHJ5ID09PSBudWxsKSB7XG4gICAgICBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoZW50cnkubmFtZSk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2Nsb3NlZGlyXG4vL1JlcXVpcmVzOiBtYWtlX3VuaXhfZXJyX2FyZ3MsIGNhbWxfcmFpc2Vfd2l0aF9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlXG4vL0FsaWFzOiB1bml4X2Nsb3NlZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfY2xvc2VkaXIoZGlyX2hhbmRsZSkge1xuICB0cnkge1xuICAgICAgZGlyX2hhbmRsZS5wb2ludGVyLmNsb3NlU3luYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgICB2YXIgdW5peF9lcnJvciA9IGNhbWxfbmFtZWRfdmFsdWUoJ1VuaXguVW5peF9lcnJvcicpO1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRUJBREZcIiwgXCJjbG9zZWRpclwiLCBkaXJfaGFuZGxlLnBhdGgpKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmV3aW5kZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfY2xvc2VkaXIsIGNhbWxfdW5peF9vcGVuZGlyXG4vL0FsaWFzOiB1bml4X3Jld2luZGRpclxuZnVuY3Rpb24gY2FtbF91bml4X3Jld2luZGRpcihkaXJfaGFuZGxlKSB7XG4gIGNhbWxfdW5peF9jbG9zZWRpcihkaXJfaGFuZGxlKTtcbiAgdmFyIG5ld19kaXJfaGFuZGxlID0gY2FtbF91bml4X29wZW5kaXIoZGlyX2hhbmRsZS5wYXRoKTtcbiAgZGlyX2hhbmRsZS5wb2ludGVyID0gbmV3X2Rpcl9oYW5kbGUucG9pbnRlcjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kZmlyc3Rcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF91bml4X29wZW5kaXIsIGNhbWxfdW5peF9yZWFkZGlyXG4vL0FsaWFzOiB3aW5fZmluZGZpcnN0XG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZGZpcnN0KHBhdGgpIHtcbiAgLy8gVGhlIFdpbmRvd3MgY29kZSBhZGRzIHRoaXMgZ2xvYiB0byB0aGUgcGF0aCwgc28gd2UgbmVlZCB0byByZW1vdmUgaXRcbiAgdmFyIHBhdGhfanMgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhwYXRoKTtcbiAgcGF0aF9qcyA9IHBhdGhfanMucmVwbGFjZSgvKF58W1xcXFxcXC9dKVxcKlxcLlxcKiQvLCBcIlwiKTtcbiAgcGF0aCA9IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHBhdGhfanMpO1xuICAvLyAqLiogaXMgbm93IHN0cmlwcGVkXG4gIHZhciBkaXJfaGFuZGxlID0gY2FtbF91bml4X29wZW5kaXIocGF0aCk7XG4gIHZhciBmaXJzdF9lbnRyeSA9IGNhbWxfdW5peF9yZWFkZGlyKGRpcl9oYW5kbGUpO1xuICAvLyBUaGUgV2luZG93cyBiaW5kaW5ncyB0eXBlIGRpcl9oYW5kbGUgYXMgYW4gYGludGAgYnV0IGl0J3Mgbm90IGluIEpTXG4gIHJldHVybiBbMCwgZmlyc3RfZW50cnksIGRpcl9oYW5kbGVdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmluZG5leHRcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9yZWFkZGlyXG4vL0FsaWFzOiB3aW5fZmluZG5leHRcbmZ1bmN0aW9uIGNhbWxfdW5peF9maW5kbmV4dChkaXJfaGFuZGxlKSB7XG4gIHJldHVybiBjYW1sX3VuaXhfcmVhZGRpcihkaXJfaGFuZGxlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbmRjbG9zZVxuLy9SZXF1aXJlczogY2FtbF91bml4X2Nsb3NlZGlyXG4vL0FsaWFzOiB3aW5fZmluZGNsb3NlXG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZGNsb3NlKGRpcl9oYW5kbGUpIHtcbiAgcmV0dXJuIGNhbWxfdW5peF9jbG9zZWRpcihkaXJfaGFuZGxlKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaW5ldF9hZGRyX29mX3N0cmluZyBjb25zdFxuLy9BbGlhczogdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3VuaXhfaW5ldF9hZGRyX29mX3N0cmluZyAoKSB7cmV0dXJuIDA7fVxuXG5cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IE1sRmFrZURldmljZVxuLy9SZXF1aXJlczogTWxGYWtlRmlsZSwgTWxGYWtlRmQsIGNhbWxfY3JlYXRlX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2FycmF5LCBjYW1sX2J5dGVzX29mX3N0cmluZywgY2FtbF9ieXRlc19vZl9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX2lzX21sX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9yYWlzZV93aXRoX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWVzXG4vL1JlcXVpcmVzOiBtYWtlX3VuaXhfZXJyX2FyZ3NcbmZ1bmN0aW9uIE1sRmFrZURldmljZSAocm9vdCwgZikge1xuICB0aGlzLmNvbnRlbnQ9e307XG4gIHRoaXMucm9vdCA9IHJvb3Q7XG4gIHRoaXMubG9va3VwRnVuID0gZjtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUubm0gPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiAodGhpcy5yb290ICsgbmFtZSk7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmNyZWF0ZV9kaXJfaWZfbmVlZGVkID0gZnVuY3Rpb24obmFtZSkge1xuICB2YXIgY29tcCA9IG5hbWUuc3BsaXQoXCIvXCIpO1xuICB2YXIgcmVzID0gXCJcIjtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGNvbXAubGVuZ3RoIC0gMTsgaSsrKXtcbiAgICByZXMgKz0gY29tcFtpXSArIFwiL1wiO1xuICAgIGlmKHRoaXMuY29udGVudFtyZXNdKSBjb250aW51ZTtcbiAgICB0aGlzLmNvbnRlbnRbcmVzXSA9IFN5bWJvbChcImRpcmVjdG9yeVwiKTtcbiAgfVxufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5zbGFzaCA9IGZ1bmN0aW9uKG5hbWUpe1xuICByZXR1cm4gL1xcLyQvLnRlc3QobmFtZSk/bmFtZToobmFtZSArIFwiL1wiKTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUubG9va3VwID0gZnVuY3Rpb24obmFtZSkge1xuICBpZighdGhpcy5jb250ZW50W25hbWVdICYmIHRoaXMubG9va3VwRnVuKSB7XG4gICAgdmFyIHJlcyA9IHRoaXMubG9va3VwRnVuKGNhbWxfc3RyaW5nX29mX2pzYnl0ZXModGhpcy5yb290KSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhuYW1lKSk7XG4gICAgaWYocmVzICE9PSAwKSB7XG4gICAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgICAgdGhpcy5jb250ZW50W25hbWVdPW5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHJlc1sxXSkpO1xuICAgIH1cbiAgfVxufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5leGlzdHMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIC8vIFRoZSByb290IG9mIHRoZSBkZXZpY2UgZXhpc3RzXG4gIGlmKG5hbWUgPT0gXCJcIikgcmV0dXJuIDE7XG4gIC8vIENoZWNrIGlmIGEgZGlyZWN0b3J5IGV4aXN0c1xuICB2YXIgbmFtZV9zbGFzaCA9IHRoaXMuc2xhc2gobmFtZSk7XG4gIGlmKHRoaXMuY29udGVudFtuYW1lX3NsYXNoXSkgcmV0dXJuIDE7XG4gIC8vIENoZWNrIGlmIGEgZmlsZSBleGlzdHNcbiAgdGhpcy5sb29rdXAobmFtZSk7XG4gIHJldHVybiB0aGlzLmNvbnRlbnRbbmFtZV0/MTowO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5pc0ZpbGUgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmKHRoaXMuZXhpc3RzKG5hbWUpICYmICF0aGlzLmlzX2RpcihuYW1lKSkge1xuICAgIHJldHVybiAxXG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuIDBcbiAgfVxufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5ta2RpciA9IGZ1bmN0aW9uKG5hbWUsbW9kZSwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IHJhaXNlX3VuaXggJiYgY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG4gIGlmKHRoaXMuZXhpc3RzKG5hbWUpKSB7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVFWElTVFwiLCBcIm1rZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IEZpbGUgZXhpc3RzXCIpO1xuICAgIH1cbiAgfVxuICB2YXIgcGFyZW50ID0gL14oLiopXFwvW14vXSsvLmV4ZWMobmFtZSk7XG4gIHBhcmVudCA9IChwYXJlbnQgJiYgcGFyZW50WzFdKSB8fCAnJztcbiAgaWYoIXRoaXMuZXhpc3RzKHBhcmVudCkpe1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9FTlRcIiwgXCJta2RpclwiLCB0aGlzLm5tKHBhcmVudCkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihwYXJlbnQgKyBcIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cbiAgaWYoIXRoaXMuaXNfZGlyKHBhcmVudCkpe1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9URElSXCIsIFwibWtkaXJcIiwgdGhpcy5ubShwYXJlbnQpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IocGFyZW50ICsgXCI6IE5vdCBhIGRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cbiAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZCh0aGlzLnNsYXNoKG5hbWUpKTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUucm1kaXIgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHZhciB1bml4X2Vycm9yID0gcmFpc2VfdW5peCAmJiBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcbiAgdmFyIG5hbWVfc2xhc2ggPSAobmFtZSA9PSBcIlwiKT9cIlwiOih0aGlzLnNsYXNoKG5hbWUpKTtcbiAgdmFyIHIgPSBuZXcgUmVnRXhwKFwiXlwiICsgbmFtZV9zbGFzaCArIFwiKFteL10rKVwiKTtcbiAgaWYoIXRoaXMuZXhpc3RzKG5hbWUpKSB7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT0VOVFwiLCBcInJtZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG4gICAgfVxuICB9XG4gIGlmKCF0aGlzLmlzX2RpcihuYW1lKSkge1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9URElSXCIsIFwicm1kaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgfVxuICBmb3IodmFyIG4gaW4gdGhpcy5jb250ZW50KSB7XG4gICAgaWYobi5tYXRjaChyKSkge1xuICAgICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PVEVNUFRZXCIsIFwicm1kaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiOiBEaXJlY3Rvcnkgbm90IGVtcHR5XCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBkZWxldGUgdGhpcy5jb250ZW50W25hbWVfc2xhc2hdO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5yZWFkZGlyID0gZnVuY3Rpb24obmFtZSkge1xuICB2YXIgbmFtZV9zbGFzaCA9IChuYW1lID09IFwiXCIpP1wiXCI6KHRoaXMuc2xhc2gobmFtZSkpO1xuICBpZighdGhpcy5leGlzdHMobmFtZSkpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG4gIH1cbiAgaWYoIXRoaXMuaXNfZGlyKG5hbWUpKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBOb3QgYSBkaXJlY3RvcnlcIik7XG4gIH1cbiAgdmFyIHIgPSBuZXcgUmVnRXhwKFwiXlwiICsgbmFtZV9zbGFzaCArIFwiKFteL10rKVwiKTtcbiAgdmFyIHNlZW4gPSB7fVxuICB2YXIgYSA9IFtdO1xuICBmb3IodmFyIG4gaW4gdGhpcy5jb250ZW50KSB7XG4gICAgdmFyIG0gPSBuLm1hdGNoKHIpO1xuICAgIGlmKG0gJiYgIXNlZW5bbVsxXV0pIHtzZWVuW21bMV1dID0gdHJ1ZTsgYS5wdXNoKG1bMV0pfVxuICB9XG4gIHJldHVybiBhO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5vcGVuZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IHJhaXNlX3VuaXggJiYgY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG5cbiAgdmFyIGEgPSB0aGlzLnJlYWRkaXIobmFtZSk7XG4gIHZhciBjID0gZmFsc2U7XG4gIHZhciBpID0gMDtcbiAgcmV0dXJuIHsgcmVhZFN5bmMgOiAoZnVuY3Rpb24gKCkge1xuICAgIGlmIChjKSB7XG4gICAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFQkFERlwiLCBcImNsb3NlZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IGNsb3NlZGlyIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYoaSA9PSBhLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGVudHJ5ID0gYVtpXTtcbiAgICBpKys7XG4gICAgcmV0dXJuIHsgbmFtZTogZW50cnkgfVxuICB9KVxuICAgICwgY2xvc2VTeW5jOiAoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGMpIHtcbiAgICAgICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFQkFERlwiLCBcImNsb3NlZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IGNsb3NlZGlyIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYyA9IHRydWU7XG4gICAgICBhID0gW107XG4gICAgfSlcbiAgfVxufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5pc19kaXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmKG5hbWUgPT0gXCJcIikgIHJldHVybiB0cnVlO1xuICB2YXIgbmFtZV9zbGFzaCA9IHRoaXMuc2xhc2gobmFtZSk7XG4gIHJldHVybiB0aGlzLmNvbnRlbnRbbmFtZV9zbGFzaF0/MTowO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS51bmxpbmsgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBvayA9IHRoaXMuY29udGVudFtuYW1lXT90cnVlOmZhbHNlO1xuICBkZWxldGUgdGhpcy5jb250ZW50W25hbWVdO1xuICByZXR1cm4gb2s7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihuYW1lLCBmKSB7XG4gIHZhciBmaWxlO1xuICBpZihmLnJkb25seSAmJiBmLndyb25seSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3Jkb25seSBhbmQgT3Blbl93cm9ubHkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICBpZihmLnRleHQgJiYgZi5iaW5hcnkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl90ZXh0IGFuZCBPcGVuX2JpbmFyeSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIHRoaXMubG9va3VwKG5hbWUpO1xuICBpZiAodGhpcy5jb250ZW50W25hbWVdKSB7XG4gICAgaWYgKHRoaXMuaXNfZGlyKG5hbWUpKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBpcyBhIGRpcmVjdG9yeVwiKTtcbiAgICBpZiAoZi5jcmVhdGUgJiYgZi5leGNsKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICAgIGZpbGUgPSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gICAgaWYoZi50cnVuY2F0ZSkgZmlsZS50cnVuY2F0ZSgpO1xuICB9IGVsc2UgaWYgKGYuY3JlYXRlKSB7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgfSBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSAodGhpcy5ubShuYW1lKSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBNbEZha2VGZCh0aGlzLm5tKG5hbWUpLCBmaWxlLCBmKTtcbn1cblxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24obmFtZSwgZikge1xuICB2YXIgZmlsZTtcbiAgaWYoZi5yZG9ubHkgJiYgZi53cm9ubHkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl9yZG9ubHkgYW5kIE9wZW5fd3Jvbmx5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgaWYoZi50ZXh0ICYmIGYuYmluYXJ5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fdGV4dCBhbmQgT3Blbl9iaW5hcnkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICB0aGlzLmxvb2t1cChuYW1lKTtcbiAgaWYgKHRoaXMuY29udGVudFtuYW1lXSkge1xuICAgIGlmICh0aGlzLmlzX2RpcihuYW1lKSkgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogaXMgYSBkaXJlY3RvcnlcIik7XG4gICAgaWYgKGYuY3JlYXRlICYmIGYuZXhjbCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmlsZSBhbHJlYWR5IGV4aXN0c1wiKTtcbiAgICBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICAgIGlmKGYudHJ1bmNhdGUpIGZpbGUudHJ1bmNhdGUoKTtcbiAgfSBlbHNlIGlmIChmLmNyZWF0ZSkge1xuICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgdGhpcy5jb250ZW50W25hbWVdID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9jcmVhdGVfYnl0ZXMoMCkpO1xuICAgIGZpbGUgPSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUgKHRoaXMubm0obmFtZSkpO1xuICB9XG4gIHJldHVybiBuZXcgTWxGYWtlRmQodGhpcy5ubShuYW1lKSwgZmlsZSwgZik7XG59XG5cbk1sRmFrZURldmljZS5wcm90b3R5cGUucmVnaXN0ZXI9IGZ1bmN0aW9uIChuYW1lLGNvbnRlbnQpe1xuICB2YXIgZmlsZTtcbiAgaWYodGhpcy5jb250ZW50W25hbWVdKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICBpZihjYW1sX2lzX21sX2J5dGVzKGNvbnRlbnQpKVxuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShjb250ZW50KTtcbiAgaWYoY2FtbF9pc19tbF9zdHJpbmcoY29udGVudCkpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGNvbnRlbnQpKTtcbiAgZWxzZSBpZihjb250ZW50IGluc3RhbmNlb2YgQXJyYXkpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoY29udGVudCkpO1xuICBlbHNlIGlmKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKVxuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX2pzYnl0ZXMoY29udGVudCkpO1xuICBlbHNlIGlmKGNvbnRlbnQudG9TdHJpbmcpIHtcbiAgICB2YXIgYnl0ZXMgPSBjYW1sX2J5dGVzX29mX3N0cmluZyhjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhjb250ZW50LnRvU3RyaW5nKCkpKTtcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoYnl0ZXMpO1xuICB9XG4gIGlmKGZpbGUpe1xuICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgdGhpcy5jb250ZW50W25hbWVdID0gZmlsZTtcbiAgfVxuICBlbHNlIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IHJlZ2lzdGVyaW5nIGZpbGUgd2l0aCBpbnZhbGlkIGNvbnRlbnQgdHlwZVwiKTtcbn1cblxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sRmFrZURldmljZVxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBNbEZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ibGl0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX2J5dGVzX29mX2FycmF5XG5mdW5jdGlvbiBNbEZha2VGaWxlKGNvbnRlbnQpe1xuICB0aGlzLmRhdGEgPSBjb250ZW50O1xufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUgPSBuZXcgTWxGaWxlICgpO1xuTWxGYWtlRmlsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNbEZha2VGaWxlXG5NbEZha2VGaWxlLnByb3RvdHlwZS50cnVuY2F0ZSA9IGZ1bmN0aW9uKGxlbil7XG4gIHZhciBvbGQgPSB0aGlzLmRhdGE7XG4gIHRoaXMuZGF0YSA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbnwwKTtcbiAgY2FtbF9ibGl0X2J5dGVzKG9sZCwgMCwgdGhpcy5kYXRhLCAwLCBsZW4pO1xufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FtbF9tbF9ieXRlc19sZW5ndGgodGhpcy5kYXRhKTtcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24ob2Zmc2V0LGJ1Zixwb3MsbGVuKXtcbiAgdmFyIGNsZW4gPSB0aGlzLmxlbmd0aCgpO1xuICBpZihvZmZzZXQgKyBsZW4gPj0gY2xlbikge1xuICAgIHZhciBuZXdfc3RyID0gY2FtbF9jcmVhdGVfYnl0ZXMob2Zmc2V0ICsgbGVuKTtcbiAgICB2YXIgb2xkX2RhdGEgPSB0aGlzLmRhdGE7XG4gICAgdGhpcy5kYXRhID0gbmV3X3N0cjtcbiAgICBjYW1sX2JsaXRfYnl0ZXMob2xkX2RhdGEsIDAsIHRoaXMuZGF0YSwgMCwgY2xlbik7XG4gIH1cbiAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoYnVmKSwgcG9zLCB0aGlzLmRhdGEsIG9mZnNldCwgbGVuKTtcbiAgcmV0dXJuIDBcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihvZmZzZXQsYnVmLHBvcyxsZW4pe1xuICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gIGlmKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgbGVuID0gY2xlbiAtIG9mZnNldDtcbiAgfVxuICBpZihsZW4pIHtcbiAgICB2YXIgZGF0YSA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbnwwKTtcbiAgICBjYW1sX2JsaXRfYnl0ZXModGhpcy5kYXRhLCBvZmZzZXQsIGRhdGEsIDAsIGxlbik7XG4gICAgYnVmLnNldChjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGRhdGEpLCBwb3MpO1xuICB9XG4gIHJldHVybiBsZW5cbn1cblxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGZF9vdXRcbi8vUmVxdWlyZXM6IE1sRmFrZUZpbGUsIGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX2JsaXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBNbEZha2VGZF9vdXQoZmQsZmxhZ3MpIHtcbiAgTWxGYWtlRmlsZS5jYWxsKHRoaXMsIGNhbWxfY3JlYXRlX2J5dGVzKDApKTtcbiAgdGhpcy5sb2cgPSAoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIDAgfSk7XG4gIGlmKGZkID09IDEgJiYgdHlwZW9mIGNvbnNvbGUubG9nID09IFwiZnVuY3Rpb25cIilcbiAgICB0aGlzLmxvZyA9IGNvbnNvbGUubG9nO1xuICBlbHNlIGlmKGZkID09IDIgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT0gXCJmdW5jdGlvblwiKVxuICAgIHRoaXMubG9nID0gY29uc29sZS5lcnJvcjtcbiAgZWxzZSBpZih0eXBlb2YgY29uc29sZS5sb2cgPT0gXCJmdW5jdGlvblwiKVxuICAgIHRoaXMubG9nID0gY29uc29sZS5sb2dcbiAgdGhpcy5mbGFncyA9IGZsYWdzO1xufVxuTWxGYWtlRmRfb3V0LnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbigpIHsgcmV0dXJuIDAgfVxuTWxGYWtlRmRfb3V0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChvZmZzZXQsYnVmLHBvcyxsZW4pIHtcbiAgaWYodGhpcy5sb2cpIHtcbiAgICBpZihsZW4gPiAwXG4gICAgICAgJiYgcG9zID49IDBcbiAgICAgICAmJiBwb3MrbGVuIDw9IGJ1Zi5sZW5ndGhcbiAgICAgICAmJiBidWZbcG9zK2xlbi0xXSA9PSAxMClcbiAgICAgIGxlbiAtLTtcbiAgICAvLyBEbyBub3Qgb3V0cHV0IHRoZSBsYXN0IFxcbiBpZiBwcmVzZW50XG4gICAgLy8gYXMgY29uc29sZSBsb2dnaW5nIGRpc3BsYXkgYSBuZXdsaW5lIGF0IHRoZSBlbmRcbiAgICB2YXIgc3JjID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVuKTtcbiAgICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl9hcnJheShidWYpLCBwb3MsIHNyYywgMCwgbGVuKTtcbiAgICB0aGlzLmxvZyhzcmMudG9VdGYxNigpKTtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLmZkICArIFwiOiBmaWxlIGRlc2NyaXB0b3IgYWxyZWFkeSBjbG9zZWRcIik7XG59XG5NbEZha2VGZF9vdXQucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAob2Zmc2V0LCBidWYsIHBvcywgbGVuKSB7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMuZmQgICsgXCI6IGZpbGUgZGVzY3JpcHRvciBpcyB3cml0ZSBvbmx5XCIpO1xufVxuTWxGYWtlRmRfb3V0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5sb2cgPSB1bmRlZmluZWQ7XG59XG5cblxuLy9Qcm92aWRlczogTWxGYWtlRmRcbi8vUmVxdWlyZXM6IE1sRmFrZUZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBNbEZha2VGZChuYW1lLCBmaWxlLGZsYWdzKSB7XG4gIHRoaXMuZmlsZSA9IGZpbGU7XG4gIHRoaXMubmFtZSA9IG5hbWU7XG4gIHRoaXMuZmxhZ3MgPSBmbGFncztcbn1cblxuTWxGYWtlRmQucHJvdG90eXBlLmVycl9jbG9zZWQgPSBmdW5jdGlvbiAoKSB7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubmFtZSAgKyBcIjogZmlsZSBkZXNjcmlwdG9yIGFscmVhZHkgY2xvc2VkXCIpO1xufVxuTWxGYWtlRmQucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uKCkge1xuICBpZih0aGlzLmZpbGUpIHJldHVybiB0aGlzLmZpbGUubGVuZ3RoICgpXG4gIHRoaXMuZXJyX2Nsb3NlZCgpO1xufVxuTWxGYWtlRmQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKG9mZnNldCxidWYscG9zLGxlbikge1xuICBpZih0aGlzLmZpbGUpIHJldHVybiB0aGlzLmZpbGUud3JpdGUob2Zmc2V0LGJ1Zixwb3MsbGVuKVxuICB0aGlzLmVycl9jbG9zZWQoKTtcbn1cbk1sRmFrZUZkLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKG9mZnNldCwgYnVmLCBwb3MsIGxlbikge1xuICBpZih0aGlzLmZpbGUpIHJldHVybiB0aGlzLmZpbGUucmVhZChvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pXG4gIHRoaXMuZXJyX2Nsb3NlZCgpO1xufVxuTWxGYWtlRmQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmZpbGUgPSB1bmRlZmluZWQ7XG59XG4iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdGl2ZSBDYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICovXG4vKiAgZW4gQXV0b21hdGlxdWUuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkICAgICovXG4vKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdpdGggICAgICovXG4vKiAgdGhlIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZpbGUgLi4vTElDRU5TRS4gICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qICRJZDogbGV4aW5nLmMgNjA0NSAyMDA0LTAxLTAxIDE2OjQyOjQzWiBkb2xpZ2V6ICQgKi9cblxuLyogVGhlIHRhYmxlLWRyaXZlbiBhdXRvbWF0b24gZm9yIGxleGVycyBnZW5lcmF0ZWQgYnkgY2FtbGxleC4gKi9cblxuLy9Qcm92aWRlczogY2FtbF9sZXhfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbGV4X2FycmF5KHMpIHtcbiAgcyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocyk7XG4gIHZhciBsID0gcy5sZW5ndGggLyAyO1xuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgYVtpXSA9IChzLmNoYXJDb2RlQXQoMiAqIGkpIHwgKHMuY2hhckNvZGVBdCgyICogaSArIDEpIDw8IDgpKSA8PCAxNiA+PiAxNjtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGV4X2VuZ2luZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9sZXhfYXJyYXksIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbGV4X2VuZ2luZSh0YmwsIHN0YXJ0X3N0YXRlLCBsZXhidWYpIHtcbiAgdmFyIGxleF9idWZmZXIgPSAyO1xuICB2YXIgbGV4X2J1ZmZlcl9sZW4gPSAzO1xuICB2YXIgbGV4X3N0YXJ0X3BvcyA9IDU7XG4gIHZhciBsZXhfY3Vycl9wb3MgPSA2O1xuICB2YXIgbGV4X2xhc3RfcG9zID0gNztcbiAgdmFyIGxleF9sYXN0X2FjdGlvbiA9IDg7XG4gIHZhciBsZXhfZW9mX3JlYWNoZWQgPSA5O1xuICB2YXIgbGV4X2Jhc2UgPSAxO1xuICB2YXIgbGV4X2JhY2t0cmsgPSAyO1xuICB2YXIgbGV4X2RlZmF1bHQgPSAzO1xuICB2YXIgbGV4X3RyYW5zID0gNDtcbiAgdmFyIGxleF9jaGVjayA9IDU7XG5cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHQpIHtcbiAgICB0YmwubGV4X2Jhc2UgPSAgICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYXNlXSk7XG4gICAgdGJsLmxleF9iYWNrdHJrID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFja3Rya10pO1xuICAgIHRibC5sZXhfY2hlY2sgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2NoZWNrXSk7XG4gICAgdGJsLmxleF90cmFucyA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfdHJhbnNdKTtcbiAgICB0YmwubGV4X2RlZmF1bHQgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9kZWZhdWx0XSk7XG4gIH1cblxuICB2YXIgYywgc3RhdGUgPSBzdGFydF9zdGF0ZTtcblxuICB2YXIgYnVmZmVyID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhsZXhidWZbbGV4X2J1ZmZlcl0pO1xuXG4gIGlmIChzdGF0ZSA+PSAwKSB7XG4gICAgLyogRmlyc3QgZW50cnkgKi9cbiAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfc3RhcnRfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gLTE7XG4gIH0gZWxzZSB7XG4gICAgLyogUmVlbnRyeSBhZnRlciByZWZpbGwgKi9cbiAgICBzdGF0ZSA9IC1zdGF0ZSAtIDE7XG4gIH1cbiAgZm9yKDs7KSB7XG4gICAgLyogTG9va3VwIGJhc2UgYWRkcmVzcyBvciBhY3Rpb24gbnVtYmVyIGZvciBjdXJyZW50IHN0YXRlICovXG4gICAgdmFyIGJhc2UgPSB0YmwubGV4X2Jhc2Vbc3RhdGVdO1xuICAgIGlmIChiYXNlIDwgMCkgcmV0dXJuIC1iYXNlLTE7XG4gICAgLyogU2VlIGlmIGl0J3MgYSBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICB2YXIgYmFja3RyayA9IHRibC5sZXhfYmFja3Rya1tzdGF0ZV07XG4gICAgaWYgKGJhY2t0cmsgPj0gMCkge1xuICAgICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gYmFja3RyaztcbiAgICB9XG4gICAgLyogU2VlIGlmIHdlIG5lZWQgYSByZWZpbGwgKi9cbiAgICBpZiAobGV4YnVmW2xleF9jdXJyX3Bvc10gPj0gbGV4YnVmW2xleF9idWZmZXJfbGVuXSl7XG4gICAgICBpZiAobGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPT0gMClcbiAgICAgICAgcmV0dXJuIC1zdGF0ZSAtIDE7XG4gICAgICBlbHNlXG4gICAgICAgIGMgPSAyNTY7XG4gICAgfWVsc2V7XG4gICAgICAvKiBSZWFkIG5leHQgaW5wdXQgY2hhciAqL1xuICAgICAgYyA9IGJ1ZmZlcltsZXhidWZbbGV4X2N1cnJfcG9zXV07XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSArKztcbiAgICB9XG4gICAgLyogRGV0ZXJtaW5lIG5leHQgc3RhdGUgKi9cbiAgICBpZiAodGJsLmxleF9jaGVja1tiYXNlICsgY10gPT0gc3RhdGUpXG4gICAgICBzdGF0ZSA9IHRibC5sZXhfdHJhbnNbYmFzZSArIGNdO1xuICAgIGVsc2VcbiAgICAgIHN0YXRlID0gdGJsLmxleF9kZWZhdWx0W3N0YXRlXTtcbiAgICAvKiBJZiBubyB0cmFuc2l0aW9uIG9uIHRoaXMgY2hhciwgcmV0dXJuIHRvIGxhc3QgYmFja3RyYWNrIHBvaW50ICovXG4gICAgaWYgKHN0YXRlIDwgMCkge1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gPSBsZXhidWZbbGV4X2xhc3RfcG9zXTtcbiAgICAgIGlmIChsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9PSAtMSlcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcImxleGluZzogZW1wdHkgdG9rZW5cIik7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXTtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09IDI1NikgbGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPSAwO1xuICAgIH1cbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiBOZXcgbGV4ZXIgZW5naW5lLCB3aXRoIG1lbW9yeSBvZiBwb3NpdGlvbnMgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8vUHJvdmlkZXM6IGNhbWxfbmV3X2xleF9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfbGV4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2xleF9ydW5fbWVtKHMsIGksIG1lbSwgY3Vycl9wb3MpIHtcbiAgZm9yICg7Oykge1xuICAgIHZhciBkc3QgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoZHN0ID09IDB4ZmYpIHJldHVybjtcbiAgICB2YXIgc3JjID0gcy5jaGFyQ29kZUF0KGkpOyBpKys7XG4gICAgaWYgKHNyYyA9PSAweGZmKVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IGN1cnJfcG9zO1xuICAgIGVsc2VcbiAgICAgIG1lbSBbZHN0ICsgMV0gPSBtZW0gW3NyYyArIDFdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbWxfbGV4X3J1bl90YWcocywgaSwgbWVtKSB7XG4gIGZvciAoOzspIHtcbiAgICB2YXIgZHN0ID0gcy5jaGFyQ29kZUF0KGkpOyBpKys7XG4gICAgaWYgKGRzdCA9PSAweGZmKSByZXR1cm4gO1xuICAgIHZhciBzcmMgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoc3JjID09IDB4ZmYpXG4gICAgICBtZW0gW2RzdCArIDFdID0gLTE7XG4gICAgZWxzZVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IG1lbSBbc3JjICsgMV07XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FtbF9uZXdfbGV4X2VuZ2luZSh0YmwsIHN0YXJ0X3N0YXRlLCBsZXhidWYpIHtcbiAgdmFyIGxleF9idWZmZXIgPSAyO1xuICB2YXIgbGV4X2J1ZmZlcl9sZW4gPSAzO1xuICB2YXIgbGV4X3N0YXJ0X3BvcyA9IDU7XG4gIHZhciBsZXhfY3Vycl9wb3MgPSA2O1xuICB2YXIgbGV4X2xhc3RfcG9zID0gNztcbiAgdmFyIGxleF9sYXN0X2FjdGlvbiA9IDg7XG4gIHZhciBsZXhfZW9mX3JlYWNoZWQgPSA5O1xuICB2YXIgbGV4X21lbSA9IDEwO1xuICB2YXIgbGV4X2Jhc2UgPSAxO1xuICB2YXIgbGV4X2JhY2t0cmsgPSAyO1xuICB2YXIgbGV4X2RlZmF1bHQgPSAzO1xuICB2YXIgbGV4X3RyYW5zID0gNDtcbiAgdmFyIGxleF9jaGVjayA9IDU7XG4gIHZhciBsZXhfYmFzZV9jb2RlID0gNjtcbiAgdmFyIGxleF9iYWNrdHJrX2NvZGUgPSA3O1xuICB2YXIgbGV4X2RlZmF1bHRfY29kZSA9IDg7XG4gIHZhciBsZXhfdHJhbnNfY29kZSA9IDk7XG4gIHZhciBsZXhfY2hlY2tfY29kZSA9IDEwO1xuICB2YXIgbGV4X2NvZGUgPSAxMTtcblxuICBpZiAoIXRibC5sZXhfZGVmYXVsdCkge1xuICAgIHRibC5sZXhfYmFzZSA9ICAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYWNrdHJrXSk7XG4gICAgdGJsLmxleF9jaGVjayA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfY2hlY2tdKTtcbiAgICB0YmwubGV4X3RyYW5zID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF90cmFuc10pO1xuICAgIHRibC5sZXhfZGVmYXVsdCA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2RlZmF1bHRdKTtcbiAgfVxuICBpZiAoIXRibC5sZXhfZGVmYXVsdF9jb2RlKSB7XG4gICAgdGJsLmxleF9iYXNlX2NvZGUgPSAgICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYXNlX2NvZGVdKTtcbiAgICB0YmwubGV4X2JhY2t0cmtfY29kZSA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2JhY2t0cmtfY29kZV0pO1xuICAgIHRibC5sZXhfY2hlY2tfY29kZSA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfY2hlY2tfY29kZV0pO1xuICAgIHRibC5sZXhfdHJhbnNfY29kZSA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfdHJhbnNfY29kZV0pO1xuICAgIHRibC5sZXhfZGVmYXVsdF9jb2RlID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfZGVmYXVsdF9jb2RlXSk7XG4gIH1cbiAgaWYgKHRibC5sZXhfY29kZSA9PSBudWxsKSB0YmwubGV4X2NvZGUgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHRibFtsZXhfY29kZV0pO1xuXG4gIHZhciBjLCBzdGF0ZSA9IHN0YXJ0X3N0YXRlO1xuXG4gIHZhciBidWZmZXIgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGxleGJ1ZltsZXhfYnVmZmVyXSk7XG5cbiAgaWYgKHN0YXRlID49IDApIHtcbiAgICAvKiBGaXJzdCBlbnRyeSAqL1xuICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9zdGFydF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICAvKiBSZWVudHJ5IGFmdGVyIHJlZmlsbCAqL1xuICAgIHN0YXRlID0gLXN0YXRlIC0gMTtcbiAgfVxuICBmb3IoOzspIHtcbiAgICAvKiBMb29rdXAgYmFzZSBhZGRyZXNzIG9yIGFjdGlvbiBudW1iZXIgZm9yIGN1cnJlbnQgc3RhdGUgKi9cbiAgICB2YXIgYmFzZSA9IHRibC5sZXhfYmFzZVtzdGF0ZV07XG4gICAgaWYgKGJhc2UgPCAwKSB7XG4gICAgICB2YXIgcGNfb2ZmID0gdGJsLmxleF9iYXNlX2NvZGVbc3RhdGVdO1xuICAgICAgY2FtbF9sZXhfcnVuX3RhZyh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dKTtcbiAgICAgIHJldHVybiAtYmFzZS0xO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgaXQncyBhIGJhY2t0cmFjayBwb2ludCAqL1xuICAgIHZhciBiYWNrdHJrID0gdGJsLmxleF9iYWNrdHJrW3N0YXRlXTtcbiAgICBpZiAoYmFja3RyayA+PSAwKSB7XG4gICAgICB2YXIgcGNfb2ZmID0gdGJsLmxleF9iYWNrdHJrX2NvZGVbc3RhdGVdO1xuICAgICAgY2FtbF9sZXhfcnVuX3RhZyh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dKTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IGJhY2t0cms7XG4gICAgfVxuICAgIC8qIFNlZSBpZiB3ZSBuZWVkIGEgcmVmaWxsICovXG4gICAgaWYgKGxleGJ1ZltsZXhfY3Vycl9wb3NdID49IGxleGJ1ZltsZXhfYnVmZmVyX2xlbl0pe1xuICAgICAgaWYgKGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID09IDApXG4gICAgICAgIHJldHVybiAtc3RhdGUgLSAxO1xuICAgICAgZWxzZVxuICAgICAgICBjID0gMjU2O1xuICAgIH1lbHNle1xuICAgICAgLyogUmVhZCBuZXh0IGlucHV0IGNoYXIgKi9cbiAgICAgIGMgPSBidWZmZXJbbGV4YnVmW2xleF9jdXJyX3Bvc11dO1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gKys7XG4gICAgfVxuICAgIC8qIERldGVybWluZSBuZXh0IHN0YXRlICovXG4gICAgdmFyIHBzdGF0ZSA9IHN0YXRlIDtcbiAgICBpZiAodGJsLmxleF9jaGVja1tiYXNlICsgY10gPT0gc3RhdGUpXG4gICAgICBzdGF0ZSA9IHRibC5sZXhfdHJhbnNbYmFzZSArIGNdO1xuICAgIGVsc2VcbiAgICAgIHN0YXRlID0gdGJsLmxleF9kZWZhdWx0W3N0YXRlXTtcbiAgICAvKiBJZiBubyB0cmFuc2l0aW9uIG9uIHRoaXMgY2hhciwgcmV0dXJuIHRvIGxhc3QgYmFja3RyYWNrIHBvaW50ICovXG4gICAgaWYgKHN0YXRlIDwgMCkge1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gPSBsZXhidWZbbGV4X2xhc3RfcG9zXTtcbiAgICAgIGlmIChsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9PSAtMSlcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcImxleGluZzogZW1wdHkgdG9rZW5cIik7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXTtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIElmIHNvbWUgdHJhbnNpdGlvbiwgZ2V0IGFuZCBwZXJmb3JtIG1lbW9yeSBtb3ZlcyAqL1xuICAgICAgdmFyIGJhc2VfY29kZSA9IHRibC5sZXhfYmFzZV9jb2RlW3BzdGF0ZV0sIHBjX29mZjtcbiAgICAgIGlmICh0YmwubGV4X2NoZWNrX2NvZGVbYmFzZV9jb2RlICsgY10gPT0gcHN0YXRlKVxuICAgICAgICBwY19vZmYgPSB0YmwubGV4X3RyYW5zX2NvZGVbYmFzZV9jb2RlICsgY107XG4gICAgICBlbHNlXG4gICAgICAgIHBjX29mZiA9IHRibC5sZXhfZGVmYXVsdF9jb2RlW3BzdGF0ZV07XG4gICAgICBpZiAocGNfb2ZmID4gMClcbiAgICAgICAgY2FtbF9sZXhfcnVuX21lbVxuICAgICAgKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0sIGxleGJ1ZltsZXhfY3Vycl9wb3NdKTtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09IDI1NikgbGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPSAwO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWQ1X2NoYW5cbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlLCBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX01ENUluaXQsIGNhbWxfTUQ1VXBkYXRlLCBjYW1sX01ENUZpbmFsXG5mdW5jdGlvbiBjYW1sX21kNV9jaGFuKGNoYW5pZCx0b3JlYWQpe1xuICB2YXIgY3R4ID0gY2FtbF9NRDVJbml0KCk7XG4gIHZhciBidWZmZXIgPSBuZXcgVWludDhBcnJheSg0MDk2KTtcbiAgaWYodG9yZWFkIDwgMCl7XG4gICAgd2hpbGUodHJ1ZSl7XG4gICAgICB2YXIgcmVhZCA9IGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLGJ1ZmZlciwwLGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgaWYocmVhZCA9PSAwKSBicmVhaztcbiAgICAgIGNhbWxfTUQ1VXBkYXRlKGN0eCxidWZmZXIuc3ViYXJyYXkoMCwgcmVhZCksIHJlYWQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSh0b3JlYWQgPiAwKSB7XG4gICAgICB2YXIgcmVhZCA9IGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLGJ1ZmZlciwwLCAodG9yZWFkID4gYnVmZmVyLmxlbmd0aCA/IGJ1ZmZlci5sZW5ndGggOiB0b3JlYWQpKTtcbiAgICAgIGlmKHJlYWQgPT0gMCkgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSgpO1xuICAgICAgY2FtbF9NRDVVcGRhdGUoY3R4LGJ1ZmZlci5zdWJhcnJheSgwLCByZWFkKSwgcmVhZCk7XG4gICAgICB0b3JlYWQgLT0gcmVhZFxuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoY2FtbF9NRDVGaW5hbChjdHgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX3N0cmluZywgY2FtbF9tZDVfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWQ1X3N0cmluZyhzLCBvZnMsIGxlbikge1xuICByZXR1cm4gY2FtbF9tZDVfYnl0ZXMoY2FtbF9ieXRlc19vZl9zdHJpbmcocyksb2ZzLGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfTUQ1VHJhbnNmb3JtXG52YXIgY2FtbF9NRDVUcmFuc2Zvcm0gPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBhZGQgKHgsIHkpIHsgcmV0dXJuICh4ICsgeSkgfCAwOyB9XG4gIGZ1bmN0aW9uIHh4KHEsYSxiLHgscyx0KSB7XG4gICAgYSA9IGFkZChhZGQoYSwgcSksIGFkZCh4LCB0KSk7XG4gICAgcmV0dXJuIGFkZCgoYSA8PCBzKSB8IChhID4+PiAoMzIgLSBzKSksIGIpO1xuICB9XG4gIGZ1bmN0aW9uIGZmKGEsYixjLGQseCxzLHQpIHtcbiAgICByZXR1cm4geHgoKGIgJiBjKSB8ICgofmIpICYgZCksIGEsIGIsIHgsIHMsIHQpO1xuICB9XG4gIGZ1bmN0aW9uIGdnKGEsYixjLGQseCxzLHQpIHtcbiAgICByZXR1cm4geHgoKGIgJiBkKSB8IChjICYgKH5kKSksIGEsIGIsIHgsIHMsIHQpO1xuICB9XG4gIGZ1bmN0aW9uIGhoKGEsYixjLGQseCxzLHQpIHsgcmV0dXJuIHh4KGIgXiBjIF4gZCwgYSwgYiwgeCwgcywgdCk7IH1cbiAgZnVuY3Rpb24gaWkoYSxiLGMsZCx4LHMsdCkgeyByZXR1cm4geHgoYyBeIChiIHwgKH5kKSksIGEsIGIsIHgsIHMsIHQpOyB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICh3LCBidWZmZXIpIHtcbiAgICB2YXIgYSA9IHdbMF0sIGIgPSB3WzFdLCBjID0gd1syXSwgZCA9IHdbM107XG5cbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWyAwXSwgNywgMHhENzZBQTQ3OCk7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsgMV0sIDEyLCAweEU4QzdCNzU2KTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWyAyXSwgMTcsIDB4MjQyMDcwREIpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbIDNdLCAyMiwgMHhDMUJEQ0VFRSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlclsgNF0sIDcsIDB4RjU3QzBGQUYpO1xuICAgIGQgPSBmZihkLCBhLCBiLCBjLCBidWZmZXJbIDVdLCAxMiwgMHg0Nzg3QzYyQSk7XG4gICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlclsgNl0sIDE3LCAweEE4MzA0NjEzKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWyA3XSwgMjIsIDB4RkQ0Njk1MDEpO1xuICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbIDhdLCA3LCAweDY5ODA5OEQ4KTtcbiAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyWyA5XSwgMTIsIDB4OEI0NEY3QUYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbMTBdLCAxNywgMHhGRkZGNUJCMSk7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsxMV0sIDIyLCAweDg5NUNEN0JFKTtcbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWzEyXSwgNywgMHg2QjkwMTEyMik7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsxM10sIDEyLCAweEZEOTg3MTkzKTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWzE0XSwgMTcsIDB4QTY3OTQzOEUpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbMTVdLCAyMiwgMHg0OUI0MDgyMSk7XG5cbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWyAxXSwgNSwgMHhGNjFFMjU2Mik7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsgNl0sIDksIDB4QzA0MEIzNDApO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbMTFdLCAxNCwgMHgyNjVFNUE1MSk7XG4gICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlclsgMF0sIDIwLCAweEU5QjZDN0FBKTtcbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWyA1XSwgNSwgMHhENjJGMTA1RCk7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsxMF0sIDksIDB4MDI0NDE0NTMpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbMTVdLCAxNCwgMHhEOEExRTY4MSk7XG4gICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlclsgNF0sIDIwLCAweEU3RDNGQkM4KTtcbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWyA5XSwgNSwgMHgyMUUxQ0RFNik7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsxNF0sIDksIDB4QzMzNzA3RDYpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbIDNdLCAxNCwgMHhGNEQ1MEQ4Nyk7XG4gICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlclsgOF0sIDIwLCAweDQ1NUExNEVEKTtcbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWzEzXSwgNSwgMHhBOUUzRTkwNSk7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsgMl0sIDksIDB4RkNFRkEzRjgpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbIDddLCAxNCwgMHg2NzZGMDJEOSk7XG4gICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlclsxMl0sIDIwLCAweDhEMkE0QzhBKTtcblxuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbIDVdLCA0LCAweEZGRkEzOTQyKTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWyA4XSwgMTEsIDB4ODc3MUY2ODEpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbMTFdLCAxNiwgMHg2RDlENjEyMik7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsxNF0sIDIzLCAweEZERTUzODBDKTtcbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyWyAxXSwgNCwgMHhBNEJFRUE0NCk7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlclsgNF0sIDExLCAweDRCREVDRkE5KTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyWyA3XSwgMTYsIDB4RjZCQjRCNjApO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbMTBdLCAyMywgMHhCRUJGQkM3MCk7XG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsxM10sIDQsIDB4Mjg5QjdFQzYpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbIDBdLCAxMSwgMHhFQUExMjdGQSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsgM10sIDE2LCAweEQ0RUYzMDg1KTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWyA2XSwgMjMsIDB4MDQ4ODFEMDUpO1xuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbIDldLCA0LCAweEQ5RDREMDM5KTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWzEyXSwgMTEsIDB4RTZEQjk5RTUpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbMTVdLCAxNiwgMHgxRkEyN0NGOCk7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsgMl0sIDIzLCAweEM0QUM1NjY1KTtcblxuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbIDBdLCA2LCAweEY0MjkyMjQ0KTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWyA3XSwgMTAsIDB4NDMyQUZGOTcpO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbMTRdLCAxNSwgMHhBQjk0MjNBNyk7XG4gICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlclsgNV0sIDIxLCAweEZDOTNBMDM5KTtcbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWzEyXSwgNiwgMHg2NTVCNTlDMyk7XG4gICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlclsgM10sIDEwLCAweDhGMENDQzkyKTtcbiAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyWzEwXSwgMTUsIDB4RkZFRkY0N0QpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbIDFdLCAyMSwgMHg4NTg0NUREMSk7XG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsgOF0sIDYsIDB4NkZBODdFNEYpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbMTVdLCAxMCwgMHhGRTJDRTZFMCk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsgNl0sIDE1LCAweEEzMDE0MzE0KTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWzEzXSwgMjEsIDB4NEUwODExQTEpO1xuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbIDRdLCA2LCAweEY3NTM3RTgyKTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWzExXSwgMTAsIDB4QkQzQUYyMzUpO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbIDJdLCAxNSwgMHgyQUQ3RDJCQik7XG4gICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlclsgOV0sIDIxLCAweEVCODZEMzkxKTtcblxuICAgIHdbMF0gPSBhZGQoYSwgd1swXSk7XG4gICAgd1sxXSA9IGFkZChiLCB3WzFdKTtcbiAgICB3WzJdID0gYWRkKGMsIHdbMl0pO1xuICAgIHdbM10gPSBhZGQoZCwgd1szXSk7XG4gIH19KSgpXG5cbi8vUHJvdmlkZXM6IGNhbWxfTUQ1SW5pdFxuZnVuY3Rpb24gY2FtbF9NRDVJbml0KCkge1xuICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDY0KTtcbiAgdmFyIGIzMiA9IG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xuICB2YXIgYjggPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICByZXR1cm4ge2xlbjowLFxuICAgICAgICAgIHc6bmV3IFVpbnQzMkFycmF5KFsweDY3NDUyMzAxLCAweEVGQ0RBQjg5LCAweDk4QkFEQ0ZFLCAweDEwMzI1NDc2XSksXG4gICAgICAgICAgYjMyOmIzMixcbiAgICAgICAgICBiODpiOH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9NRDVVcGRhdGVcbi8vUmVxdWlyZXM6IGNhbWxfTUQ1VHJhbnNmb3JtXG5mdW5jdGlvbiBjYW1sX01ENVVwZGF0ZShjdHgsIGlucHV0LCBpbnB1dF9sZW4pe1xuICB2YXIgaW5fYnVmID0gY3R4LmxlbiAmIDB4M2Y7XG4gIHZhciBpbnB1dF9wb3MgPSAwO1xuICBjdHgubGVuICs9IGlucHV0X2xlbjtcbiAgaWYoaW5fYnVmKXtcbiAgICB2YXIgbWlzc2luZyA9IDY0IC0gaW5fYnVmO1xuICAgIGlmKGlucHV0X2xlbiA8IG1pc3NpbmcpIHtcbiAgICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoMCxpbnB1dF9sZW4pLGluX2J1Zik7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheSgwLG1pc3NpbmcpLGluX2J1Zik7XG4gICAgY2FtbF9NRDVUcmFuc2Zvcm0oY3R4LncsIGN0eC5iMzIpO1xuICAgIGlucHV0X2xlbiAtPSBtaXNzaW5nO1xuICAgIGlucHV0X3BvcyArPSBtaXNzaW5nO1xuICB9XG4gIHdoaWxlKGlucHV0X2xlbiA+PSA2NCl7XG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheShpbnB1dF9wb3MsaW5wdXRfcG9zICsgNjQpLCAwKTtcbiAgICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gICAgaW5wdXRfbGVuIC09IDY0O1xuICAgIGlucHV0X3BvcyArPSA2NDtcbiAgfVxuICBpZihpbnB1dF9sZW4pXG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheShpbnB1dF9wb3MsaW5wdXRfcG9zICsgaW5wdXRfbGVuKSwgMCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfTUQ1RmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfTUQ1VHJhbnNmb3JtXG5mdW5jdGlvbiBjYW1sX01ENUZpbmFsKGN0eCl7XG4gIHZhciBpbl9idWYgPSBjdHgubGVuICYgMHgzZjtcbiAgY3R4LmI4W2luX2J1Zl0gPSAweDgwO1xuICBpbl9idWYgKys7XG4gIGlmKGluX2J1ZiA+IDU2KSB7XG4gICAgZm9yKHZhciBqID0gaW5fYnVmOyBqIDwgNjQ7IGorKyl7XG4gICAgICBjdHguYjhbal0gPSAwO1xuICAgIH1cbiAgICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gICAgZm9yKHZhciBqID0gMDsgaiA8IDU2OyBqKyspe1xuICAgICAgY3R4LmI4W2pdID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yKHZhciBqID0gaW5fYnVmOyBqIDwgNTY7IGorKyl7XG4gICAgICBjdHguYjhbal0gPSAwO1xuICAgIH1cbiAgfVxuICBjdHguYjMyWzE0XSA9IGN0eC5sZW4gPDwgMztcbiAgY3R4LmIzMlsxNV0gPSAoY3R4LmxlbiA+PiAyOSkgJiAweDFGRkZGRkZGO1xuICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gIHZhciB0ID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKylcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IDQ7IGorKylcbiAgICAgIHRbaSAqIDQgKyBqXSA9IChjdHgud1tpXSA+PiAoOCAqIGopKSAmIDB4RkY7XG4gIHJldHVybiB0O1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWQ1X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX3N0cmluZ19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9NRDVJbml0LCBjYW1sX01ENVVwZGF0ZSwgY2FtbF9NRDVGaW5hbFxuZnVuY3Rpb24gY2FtbF9tZDVfYnl0ZXMocywgb2ZzLCBsZW4pIHtcbiAgdmFyIGN0eCA9IGNhbWxfTUQ1SW5pdCgpO1xuICB2YXIgYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMocyk7XG4gIGNhbWxfTUQ1VXBkYXRlKGN0eCxhLnN1YmFycmF5KG9mcywgb2ZzICsgbGVuKSwgbGVuKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGNhbWxfTUQ1RmluYWwoY3R4KSk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIElvXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2Zkc1xudmFyIGNhbWxfc3lzX2ZkcyA9IG5ldyBBcnJheSgzKTtcblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2Zkc1xuZnVuY3Rpb24gY2FtbF9zeXNfY2xvc2UoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3N5c19mZHNbZmRdO1xuICBpZihmaWxlKSBmaWxlLmNsb3NlKCk7XG4gIGRlbGV0ZSBjYW1sX3N5c19mZHNbZmRdO1xuICByZXR1cm4gMDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogTWxGYWtlRmRfb3V0XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2Zkc1xuLy9SZXF1aXJlczogY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZVxuZnVuY3Rpb24gY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlLGlkeCkge1xuICBpZihpZHggPT0gdW5kZWZpbmVkKXtcbiAgICBpZHggPSBjYW1sX3N5c19mZHMubGVuZ3RoO1xuICB9XG4gIGNhbWxfc3lzX2Zkc1tpZHhdID0gZmlsZTtcbiAgcmV0dXJuIGlkeCB8IDA7XG59XG5mdW5jdGlvbiBjYW1sX3N5c19vcGVuIChuYW1lLCBmbGFncywgX3Blcm1zKSB7XG4gIHZhciBmID0ge307XG4gIHdoaWxlKGZsYWdzKXtcbiAgICBzd2l0Y2goZmxhZ3NbMV0pe1xuICAgIGNhc2UgMDogZi5yZG9ubHkgPSAxO2JyZWFrO1xuICAgIGNhc2UgMTogZi53cm9ubHkgPSAxO2JyZWFrO1xuICAgIGNhc2UgMjogZi5hcHBlbmQgPSAxO2JyZWFrO1xuICAgIGNhc2UgMzogZi5jcmVhdGUgPSAxO2JyZWFrO1xuICAgIGNhc2UgNDogZi50cnVuY2F0ZSA9IDE7YnJlYWs7XG4gICAgY2FzZSA1OiBmLmV4Y2wgPSAxOyBicmVhaztcbiAgICBjYXNlIDY6IGYuYmluYXJ5ID0gMTticmVhaztcbiAgICBjYXNlIDc6IGYudGV4dCA9IDE7YnJlYWs7XG4gICAgY2FzZSA4OiBmLm5vbmJsb2NrID0gMTticmVhaztcbiAgICB9XG4gICAgZmxhZ3M9ZmxhZ3NbMl07XG4gIH1cbiAgaWYoZi5yZG9ubHkgJiYgZi53cm9ubHkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl9yZG9ubHkgYW5kIE9wZW5fd3Jvbmx5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgaWYoZi50ZXh0ICYmIGYuYmluYXJ5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGNhbWxfanNieXRlc19vZl9zdHJpbmcobmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fdGV4dCBhbmQgT3Blbl9iaW5hcnkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgZmlsZSA9IHJvb3QuZGV2aWNlLm9wZW4ocm9vdC5yZXN0LGYpO1xuICByZXR1cm4gY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCAoZmlsZSwgdW5kZWZpbmVkKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGZpbGUoZmQsIGZsYWdzKSB7XG4gICAgaWYoZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICAgICAgcmV0dXJuIGNhbWxfc3lzX29wZW5fZm9yX25vZGUoZmQsIGZsYWdzKTtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIG5ldyBNbEZha2VGZF9vdXQoZmQsIGZsYWdzKVxuICB9XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoZmlsZSgwLHtyZG9ubHk6MSxhbHRuYW1lOlwiL2Rldi9zdGRpblwiLGlzQ2hhcmFjdGVyRGV2aWNlOnRydWV9KSwgMCk7XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoZmlsZSgxLHtidWZmZXJlZDoyLHdyb25seToxLGlzQ2hhcmFjdGVyRGV2aWNlOnRydWV9KSwgMSk7XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoZmlsZSgyLHtidWZmZXJlZDoyLHdyb25seToxLGlzQ2hhcmFjdGVyRGV2aWNlOnRydWV9KSwgMik7XG59KSgpXG5cblxuLy8gb2NhbWwgQ2hhbm5lbHNcblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX25hbWUoY2hhbmlkLCBuYW1lKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBjaGFuLm5hbWUgPSBuYW1lO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsc1xudmFyIGNhbWxfbWxfY2hhbm5lbHMgPSBuZXcgQXJyYXkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdCAoKSB7XG4gIHZhciBsID0gMDtcbiAgZm9yKHZhciBjID0gMDsgYyA8IGNhbWxfbWxfY2hhbm5lbHMubGVuZ3RoOyBjKyspe1xuICAgIGlmKGNhbWxfbWxfY2hhbm5lbHNbY10gJiYgY2FtbF9tbF9jaGFubmVsc1tjXS5vcGVuZWQgJiYgY2FtbF9tbF9jaGFubmVsc1tjXS5vdXQpXG4gICAgICBsPVswLGNhbWxfbWxfY2hhbm5lbHNbY10uZmQsbF07XG4gIH1cbiAgcmV0dXJuIGw7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX3N5c19mZHNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19vcGVuXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQgKGZkKSB7XG4gIHZhciBmaWxlID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYoZmlsZS5mbGFncy5yZG9ubHkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiZmQgXCIrIGZkICsgXCIgaXMgcmVhZG9ubHlcIik7XG4gIHZhciBidWZmZXJlZCA9IChmaWxlLmZsYWdzLmJ1ZmZlcmVkICE9PSB1bmRlZmluZWQpID8gZmlsZS5mbGFncy5idWZmZXJlZCA6IDE7XG4gIHZhciBjaGFubmVsID0ge1xuICAgIGZpbGU6ZmlsZSxcbiAgICBvZmZzZXQ6ZmlsZS5mbGFncy5hcHBlbmQ/ZmlsZS5sZW5ndGgoKTowLFxuICAgIGZkOmZkLFxuICAgIG9wZW5lZDp0cnVlLFxuICAgIG91dDp0cnVlLFxuICAgIGJ1ZmZlcl9jdXJyOjAsXG4gICAgYnVmZmVyOm5ldyBVaW50OEFycmF5KDY1NTM2KSxcbiAgICBidWZmZXJlZDpidWZmZXJlZFxuICB9O1xuICBjYW1sX21sX2NoYW5uZWxzW2NoYW5uZWwuZmRdPWNoYW5uZWw7XG4gIHJldHVybiBjaGFubmVsLmZkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9zeXNfZmRzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogY2FtbF9zeXNfb3BlblxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW4gKGZkKSAge1xuICB2YXIgZmlsZSA9IGNhbWxfc3lzX2Zkc1tmZF07XG4gIGlmKGZpbGUuZmxhZ3Mud3Jvbmx5KSBjYW1sX3JhaXNlX3N5c19lcnJvcihcImZkIFwiKyBmZCArIFwiIGlzIHdyaXRlb25seVwiKTtcbiAgdmFyIHJlZmlsbCA9IG51bGw7XG4gIHZhciBjaGFubmVsID0ge1xuICAgIGZpbGU6ZmlsZSxcbiAgICBvZmZzZXQ6ZmlsZS5mbGFncy5hcHBlbmQ/ZmlsZS5sZW5ndGgoKTowLFxuICAgIGZkOmZkLFxuICAgIG9wZW5lZDp0cnVlLFxuICAgIG91dDogZmFsc2UsXG4gICAgYnVmZmVyX2N1cnI6MCxcbiAgICBidWZmZXJfbWF4OjAsXG4gICAgYnVmZmVyOm5ldyBVaW50OEFycmF5KDY1NTM2KSxcbiAgICByZWZpbGw6cmVmaWxsXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2hhbm5lbC5mZF09Y2hhbm5lbDtcbiAgcmV0dXJuIGNoYW5uZWwuZmQ7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5fd2l0aF9mbGFnc1xuLy9SZXF1aXJlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5cbi8vVmVyc2lvbjogPj0gNS4xXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbl93aXRoX2ZsYWdzKGZkLCBmbGFncyl7XG4gIHJldHVybiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbihmZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dF93aXRoX2ZsYWdzXG4vL1JlcXVpcmVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcbi8vVmVyc2lvbjogPj0gNS4xXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRfd2l0aF9mbGFncyhmZCwgZmxhZ3Mpe1xuICByZXR1cm4gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0KGZkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jaGFubmVsX2Rlc2NyaXB0b3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbi8vQWxpYXM6IHdpbl9maWxlZGVzY3Jfb2ZfY2hhbm5lbFxuZnVuY3Rpb24gY2FtbF9jaGFubmVsX2Rlc2NyaXB0b3IoY2hhbmlkKXtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHJldHVybiBjaGFuLmZkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9iaW5hcnlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9zZXRfYmluYXJ5X21vZGUoY2hhbmlkLG1vZGUpe1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgY2hhbi5maWxlLmZsYWdzLnRleHQgPSAhbW9kZVxuICBjaGFuLmZpbGUuZmxhZ3MuYmluYXJ5ID0gbW9kZVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pc19iaW5hcnlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfbWxfaXNfYmluYXJ5X21vZGUoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICByZXR1cm4gY2hhbi5maWxlLmZsYWdzLmJpbmFyeVxufVxuXG4vL0lucHV0IGZyb20gaW5fY2hhbm5lbFxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2Nsb3NlX2NoYW5uZWxcbi8vUmVxdWlyZXM6IGNhbWxfbWxfZmx1c2gsIGNhbWxfbWxfY2hhbm5lbHNcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2Nsb3NlXG5mdW5jdGlvbiBjYW1sX21sX2Nsb3NlX2NoYW5uZWwgKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgaWYoY2hhbi5vcGVuZWQpIHtcbiAgICBjaGFuLm9wZW5lZCA9IGZhbHNlO1xuICAgIGNhbWxfc3lzX2Nsb3NlKGNoYW4uZmQpO1xuICAgIGNoYW4uZmQgPSAtMTtcbiAgICBjaGFuLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDApO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfc2l6ZShjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHJldHVybiBjaGFuLmZpbGUubGVuZ3RoKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9zaXplXzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2Zsb2F0LGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9zaXplXzY0KGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQoY2hhbi5maWxlLmxlbmd0aCAoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX291dHB1dChjaGFuaWQsZikge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgY2hhbi5vdXRwdXQgPSAoZnVuY3Rpb24gKHMpIHtmKHMpfSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGwoY2hhbmlkLGYpIHtcbiAgY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdLnJlZmlsbCA9IGY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZmlsbFxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9yZWZpbGwgKGNoYW4pIHtcbiAgaWYoY2hhbi5yZWZpbGwgIT0gbnVsbCl7XG4gICAgdmFyIHN0ciA9IGNoYW4ucmVmaWxsKCk7XG4gICAgdmFyIHN0cl9hID0gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcoc3RyKTtcbiAgICBpZiAoc3RyX2EubGVuZ3RoID09IDApIHtcbiAgICAgIGNoYW4ucmVmaWxsID0gbnVsbFxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmKGNoYW4uYnVmZmVyLmxlbmd0aCA8IGNoYW4uYnVmZmVyX21heCArIHN0cl9hLmxlbmd0aCl7XG4gICAgICAgIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkoY2hhbi5idWZmZXJfbWF4ICsgc3RyX2EubGVuZ3RoKTtcbiAgICAgICAgYi5zZXQoY2hhbi5idWZmZXIpO1xuICAgICAgICBjaGFuLmJ1ZmZlciA9IGI7XG4gICAgICB9XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoc3RyX2EsY2hhbi5idWZmZXJfbWF4KTtcbiAgICAgIGNoYW4ub2Zmc2V0ICs9IHN0cl9hLmxlbmd0aDtcbiAgICAgIGNoYW4uYnVmZmVyX21heCArPSBzdHJfYS5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBucmVhZCA9IGNoYW4uZmlsZS5yZWFkKGNoYW4ub2Zmc2V0LCBjaGFuLmJ1ZmZlciwgY2hhbi5idWZmZXJfbWF4LCBjaGFuLmJ1ZmZlci5sZW5ndGggLSBjaGFuLmJ1ZmZlcl9tYXgpO1xuICAgIGNoYW4ub2Zmc2V0ICs9IG5yZWFkO1xuICAgIGNoYW4uYnVmZmVyX21heCArPSBucmVhZDtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0IChjaGFuaWQsIGIsIGksIGwpIHtcbiAgdmFyIGJhID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhiKTtcbiAgcmV0dXJuIGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLCBiYSwgaSwgbClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9iaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9tbF9pbnB1dF9ibG9ja1xuLy9SZXF1aXJlczogY2FtbF9iYV90b190eXBlZF9hcnJheVxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9iaWdhcnJheSAoY2hhbmlkLCBiLCBpLCBsKSB7XG4gIHZhciBiYSA9IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYik7XG4gIHJldHVybiBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYmEsIGksIGwpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfcmVmaWxsLCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2Jsb2NrIChjaGFuaWQsIGJhLCBpLCBsKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICB2YXIgbiA9IGw7XG4gIHZhciBhdmFpbCA9IGNoYW4uYnVmZmVyX21heCAtIGNoYW4uYnVmZmVyX2N1cnI7XG4gIGlmKGwgPD0gYXZhaWwpIHtcbiAgICBiYS5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VycixjaGFuLmJ1ZmZlcl9jdXJyICsgbCksIGkpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gbDtcbiAgfVxuICBlbHNlIGlmKGF2YWlsID4gMCkge1xuICAgIGJhLnNldChjaGFuLmJ1ZmZlci5zdWJhcnJheShjaGFuLmJ1ZmZlcl9jdXJyLGNoYW4uYnVmZmVyX2N1cnIgKyBhdmFpbCksIGkpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYXZhaWw7XG4gICAgbiA9IGF2YWlsO1xuICB9IGVsc2Uge1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gICAgdmFyIGF2YWlsID0gY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycjtcbiAgICBpZihuID4gYXZhaWwpIG4gPSBhdmFpbDtcbiAgICBiYS5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VycixjaGFuLmJ1ZmZlcl9jdXJyICsgbiksIGkpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gbjtcbiAgfVxuICByZXR1cm4gbiB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUsIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcywgY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfcmVmaWxsLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWUgKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgdmFyIGhlYWRlciA9IG5ldyBVaW50OEFycmF5KGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSk7XG4gIGZ1bmN0aW9uIGJsb2NrKGJ1ZmZlciwgb2Zmc2V0LCBuKSB7XG4gICAgdmFyIHIgPSAwO1xuICAgIHdoaWxlKHIgPCBuKXtcbiAgICAgIGlmKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KXtcbiAgICAgICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgICAgIGNhbWxfcmVmaWxsKGNoYW4pO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KVxuICAgICAgICBicmVhaztcbiAgICAgIGJ1ZmZlcltvZmZzZXQrcl0gPSBjaGFuLmJ1ZmZlcltjaGFuLmJ1ZmZlcl9jdXJyXTtcbiAgICAgIGNoYW4uYnVmZmVyX2N1cnIrKztcbiAgICAgIHIrKztcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cbiAgdmFyIHIgPSBibG9jayhoZWFkZXIsIDAsIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSk7XG4gIGlmKHIgPT0gMClcbiAgICBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIGVsc2UgaWYgKHIgPCBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpXG4gICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiB0cnVuY2F0ZWQgb2JqZWN0XCIpO1xuICB2YXIgbGVuID0gY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSAoY2FtbF9ieXRlc19vZl9hcnJheShoZWFkZXIpLCAwKTtcbiAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbiArIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSk7XG4gIGJ1Zi5zZXQoaGVhZGVyLDApO1xuICB2YXIgciA9IGJsb2NrKGJ1ZiwgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplLCBsZW4pXG4gIGlmKHIgPCBsZW4pXG4gICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiB0cnVuY2F0ZWQgb2JqZWN0IFwiICsgciArIFwiICBcIiArIGxlbik7XG4gIHZhciBvZmZzZXQgPSBbMF07XG4gIHZhciByZXMgPSBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fYnl0ZXMoY2FtbF9ieXRlc19vZl9hcnJheShidWYpLCBvZmZzZXQpO1xuICBjaGFuLm9mZnNldCA9IGNoYW4ub2Zmc2V0ICsgb2Zmc2V0WzBdO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX3RvX291dHNpZGVfaGVhcFxuLy9SZXF1aXJlczogY2FtbF9pbnB1dF92YWx1ZVxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV90b19vdXRzaWRlX2hlYXAoYykge1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZShjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9jaGFyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlLCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX3JlZmlsbFxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9jaGFyIChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIGlmKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KXtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICBjaGFuLmJ1ZmZlcl9tYXggPSAwO1xuICAgIGNhbWxfcmVmaWxsKGNoYW4pO1xuICB9XG4gIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heClcbiAgICBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIHZhciByZXMgPSBjaGFuLmJ1ZmZlcltjaGFuLmJ1ZmZlcl9jdXJyXTtcbiAgY2hhbi5idWZmZXJfY3VycisrO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2ludFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9tbF9pbnB1dF9jaGFyLCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2ludCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICB2YXIgcmVzID0gMDtcbiAgZm9yKHZhciBpID0gMDsgaSA8IDQ7IGkrKyl7XG4gICAgcmVzID0gKHJlcyA8PCA4KSArIGNhbWxfbWxfaW5wdXRfY2hhcihjaGFuaWQpIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zZWVrX2luXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9zZWVrX2luKGNoYW5pZCwgcG9zKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBpZiAoY2hhbi5yZWZpbGwgIT0gbnVsbCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJJbGxlZ2FsIHNlZWtcIik7XG4gIGlmKHBvcyA+PSBjaGFuLm9mZnNldCAtIGNoYW4uYnVmZmVyX21heFxuICAgICAmJiBwb3MgPD0gY2hhbi5vZmZzZXRcbiAgICAgJiYgY2hhbi5maWxlLmZsYWdzLmJpbmFyeSkge1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSBjaGFuLmJ1ZmZlcl9tYXggLSAoY2hhbi5vZmZzZXQgLSBwb3MpO1xuICB9IGVsc2Uge1xuICAgIGNoYW4ub2Zmc2V0ID0gcG9zO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19pblxuLy9SZXF1aXJlczogY2FtbF9zZWVrX2luXG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfaW4oY2hhbmlkLHBvcyl7XG4gIHJldHVybiBjYW1sX3NlZWtfaW4oY2hhbmlkLHBvcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19pbl82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19mbG9hdCwgY2FtbF9zZWVrX2luXG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfaW5fNjQoY2hhbmlkLHBvcyl7XG4gIHZhciBwb3MgPSBjYW1sX2ludDY0X3RvX2Zsb2F0KHBvcyk7XG4gIHJldHVybiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Bvc19pblxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9wb3NfaW4oY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICByZXR1cm4gY2hhbi5vZmZzZXQgLSAoY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycikgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3Bvc19pblxuLy9SZXF1aXJlczogY2FtbF9wb3NfaW5cbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX2luKGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9wb3NfaW4oY2hhbmlkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3NfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsIGNhbWxfcG9zX2luXG5mdW5jdGlvbiBjYW1sX21sX3Bvc19pbl82NChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQoY2FtbF9wb3NfaW4oY2hhbmlkKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX3JlZmlsbFxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmUoY2hhbmlkKXtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHZhciBwID0gY2hhbi5idWZmZXJfY3VycjtcbiAgZG8ge1xuICAgIGlmKHAgPj0gY2hhbi5idWZmZXJfbWF4KSB7XG4gICAgICBpZihjaGFuLmJ1ZmZlcl9jdXJyID4gMCkge1xuICAgICAgICBjaGFuLmJ1ZmZlci5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VyciksMCk7XG4gICAgICAgIHAgLT0gY2hhbi5idWZmZXJfY3VycjtcbiAgICAgICAgY2hhbi5idWZmZXJfbWF4IC09IGNoYW4uYnVmZmVyX2N1cnI7XG4gICAgICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgICAgfVxuICAgICAgaWYoY2hhbi5idWZmZXJfbWF4ID49IGNoYW4uYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gLShjaGFuLmJ1ZmZlcl9tYXgpIHwgMDtcbiAgICAgIH1cbiAgICAgIHZhciBwcmV2X21heCA9IGNoYW4uYnVmZmVyX21heDtcbiAgICAgIGNhbWxfcmVmaWxsIChjaGFuKTtcbiAgICAgIGlmKHByZXZfbWF4ID09IGNoYW4uYnVmZmVyX21heCkge1xuICAgICAgICByZXR1cm4gLShjaGFuLmJ1ZmZlcl9tYXgpIHwgMDtcbiAgICAgIH1cbiAgICB9XG4gIH0gd2hpbGUgKGNoYW4uYnVmZmVyW3ArK10gIT0gMTApO1xuICByZXR1cm4gKHAgLSBjaGFuLmJ1ZmZlcl9jdXJyKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZmx1c2hcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxzXG4vL1JlcXVpcmVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgaWYoISBjaGFuLm9wZW5lZCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJDYW5ub3QgZmx1c2ggYSBjbG9zZWQgY2hhbm5lbFwiKTtcbiAgaWYoIWNoYW4uYnVmZmVyIHx8IGNoYW4uYnVmZmVyX2N1cnIgPT0gMCkgcmV0dXJuIDA7XG4gIGlmKGNoYW4ub3V0cHV0KSB7XG4gICAgY2hhbi5vdXRwdXQoY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGNoYW4uYnVmZmVyLCAwLCBjaGFuLmJ1ZmZlcl9jdXJyKSk7XG4gIH0gZWxzZSB7XG4gICAgY2hhbi5maWxlLndyaXRlKGNoYW4ub2Zmc2V0LCBjaGFuLmJ1ZmZlciwgMCwgY2hhbi5idWZmZXJfY3Vycik7XG4gIH1cbiAgY2hhbi5vZmZzZXQgKz0gY2hhbi5idWZmZXJfY3VycjtcbiAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gIHJldHVybiAwO1xufVxuXG4vL291dHB1dCB0byBvdXRfY2hhbm5lbFxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF90YVxuLy9SZXF1aXJlczogY2FtbF9tbF9mbHVzaCxjYW1sX21sX2J5dGVzX2xlbmd0aFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X3RhKGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbikge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgaWYoISBjaGFuLm9wZW5lZCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJDYW5ub3Qgb3V0cHV0IHRvIGEgY2xvc2VkIGNoYW5uZWxcIik7XG4gIGJ1ZmZlciA9IGJ1ZmZlci5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbik7XG4gIGlmKGNoYW4uYnVmZmVyX2N1cnIgKyBidWZmZXIubGVuZ3RoID4gY2hhbi5idWZmZXIubGVuZ3RoKSB7XG4gICAgdmFyIGIgPSBuZXcgVWludDhBcnJheShjaGFuLmJ1ZmZlcl9jdXJyICsgYnVmZmVyLmxlbmd0aCk7XG4gICAgYi5zZXQoY2hhbi5idWZmZXIpO1xuICAgIGNoYW4uYnVmZmVyID0gYlxuICB9XG4gIHN3aXRjaChjaGFuLmJ1ZmZlcmVkKXtcbiAgY2FzZSAwOiAvLyBVbmJ1ZmZlcmVkXG4gICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlciwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoO1xuICAgIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCk7XG4gICAgYnJlYWtcbiAgY2FzZSAxOiAvLyBCdWZmZXJlZCAodGhlIGRlZmF1bHQpXG4gICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlciwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoO1xuICAgIGlmKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXIubGVuZ3RoKVxuICAgICAgY2FtbF9tbF9mbHVzaCAoY2hhbmlkKTtcbiAgICBicmVhaztcbiAgY2FzZSAyOiAvLyBCdWZmZXJlZCAob25seSBmb3Igc3Rkb3V0IGFuZCBzdGRlcnIpXG4gICAgdmFyIGlkID0gYnVmZmVyLmxhc3RJbmRleE9mKDEwKVxuICAgIGlmKGlkIDwgMCkge1xuICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlciwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICBpZihjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyLmxlbmd0aClcbiAgICAgICAgY2FtbF9tbF9mbHVzaCAoY2hhbmlkKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLnN1YmFycmF5KDAsIGlkICsgMSksIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBpZCArIDE7XG4gICAgICBjYW1sX21sX2ZsdXNoIChjaGFuaWQpO1xuICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlci5zdWJhcnJheShpZCArIDEpLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYnVmZmVyLmxlbmd0aCAtIGlkIC0gMTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX21sX291dHB1dF90YVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKSB7XG4gIHZhciBidWZmZXIgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGJ1ZmZlcik7XG4gIHJldHVybiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2JpZ2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5LCBjYW1sX21sX291dHB1dF90YVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfYmlnYXJyYXkoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKSB7XG4gIHZhciBidWZmZXIgPSBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJ1ZmZlcik7XG4gIHJldHVybiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pO1xufVxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXQoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKXtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X2J5dGVzKGNoYW5pZCxjYW1sX2J5dGVzX29mX3N0cmluZyhidWZmZXIpLG9mZnNldCxsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9jaGFyXG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfY2hhciAoY2hhbmlkLGMpIHtcbiAgdmFyIHMgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLDEpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZywgY2FtbF9tbF9vdXRwdXQsY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZSAoY2hhbmlkLHYsZmxhZ3MpIHtcbiAgdmFyIHMgPSBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcodiwgZmxhZ3MpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSk7XG4gIHJldHVybiAwO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc2Vla19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3Mpe1xuICBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBjaGFuLm9mZnNldCA9IHBvcztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfc2Vla19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19vdXQoY2hhbmlkLHBvcyl7XG4gIHJldHVybiBjYW1sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19vdXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfc2Vla19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19vdXRfNjQoY2hhbmlkLHBvcyl7XG4gIHZhciBwb3MgPSBjYW1sX2ludDY0X3RvX2Zsb2F0KHBvcyk7XG4gIHJldHVybiBjYW1sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wb3Nfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX21sX2ZsdXNoXG5mdW5jdGlvbiBjYW1sX3Bvc19vdXQoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICByZXR1cm4gY2hhbi5vZmZzZXQgKyBjaGFuLmJ1ZmZlcl9jdXJyXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dFxuLy9SZXF1aXJlczogY2FtbF9wb3Nfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX3Bvc19vdXQoY2hhbmlkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3Nfb3V0XzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2Zsb2F0LCBjYW1sX3Bvc19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX291dF82NChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQgKGNhbWxfcG9zX291dChjaGFuaWQpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfaW50XG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X2ludCAoY2hhbmlkLGkpIHtcbiAgdmFyIGFyciA9IFsoaT4+MjQpICYgMHhGRiwoaT4+MTYpICYgMHhGRiwoaT4+OCkgJiAweEZGLGkgJiAweEZGIF07XG4gIHZhciBzID0gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoYXJyKTtcbiAgY2FtbF9tbF9vdXRwdXQoY2hhbmlkLHMsMCw0KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pc19idWZmZXJlZFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9pc19idWZmZXJlZChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXS5idWZmZXJlZCA/IDEgOiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2J1ZmZlcmVkXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX21sX2ZsdXNoXG5mdW5jdGlvbiBjYW1sX21sX3NldF9idWZmZXJlZChjaGFuaWQsdikge1xuICBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF0uYnVmZmVyZWQgPSB2O1xuICBpZighdikgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICByZXR1cm4gMFxufVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBUaGUgcnVuLXRpbWUgbGlicmFyeSBmb3IgbGV4ZXJzIGdlbmVyYXRlZCBieSBjYW1sbGV4ICopXG5cbnR5cGUgcG9zaXRpb24gPSB7XG4gIHBvc19mbmFtZSA6IHN0cmluZztcbiAgcG9zX2xudW0gOiBpbnQ7XG4gIHBvc19ib2wgOiBpbnQ7XG4gIHBvc19jbnVtIDogaW50O1xufVxuXG5sZXQgZHVtbXlfcG9zID0ge1xuICBwb3NfZm5hbWUgPSBcIlwiO1xuICBwb3NfbG51bSA9IDA7XG4gIHBvc19ib2wgPSAwO1xuICBwb3NfY251bSA9IC0xO1xufVxuXG50eXBlIGxleGJ1ZiA9XG4gIHsgcmVmaWxsX2J1ZmYgOiBsZXhidWYgLT4gdW5pdDtcbiAgICBtdXRhYmxlIGxleF9idWZmZXIgOiBieXRlcztcbiAgICBtdXRhYmxlIGxleF9idWZmZXJfbGVuIDogaW50O1xuICAgIG11dGFibGUgbGV4X2Fic19wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfc3RhcnRfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2N1cnJfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2xhc3RfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2xhc3RfYWN0aW9uIDogaW50O1xuICAgIG11dGFibGUgbGV4X2VvZl9yZWFjaGVkIDogYm9vbDtcbiAgICBtdXRhYmxlIGxleF9tZW0gOiBpbnQgYXJyYXk7XG4gICAgbXV0YWJsZSBsZXhfc3RhcnRfcCA6IHBvc2l0aW9uO1xuICAgIG11dGFibGUgbGV4X2N1cnJfcCA6IHBvc2l0aW9uO1xuICB9XG5cbnR5cGUgbGV4X3RhYmxlcyA9XG4gIHsgbGV4X2Jhc2U6IHN0cmluZztcbiAgICBsZXhfYmFja3Ryazogc3RyaW5nO1xuICAgIGxleF9kZWZhdWx0OiBzdHJpbmc7XG4gICAgbGV4X3RyYW5zOiBzdHJpbmc7XG4gICAgbGV4X2NoZWNrOiBzdHJpbmc7XG4gICAgbGV4X2Jhc2VfY29kZSA6IHN0cmluZztcbiAgICBsZXhfYmFja3Rya19jb2RlIDogc3RyaW5nO1xuICAgIGxleF9kZWZhdWx0X2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X3RyYW5zX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2NoZWNrX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2NvZGU6IHN0cmluZzt9XG5cbmV4dGVybmFsIGNfZW5naW5lIDogbGV4X3RhYmxlcyAtPiBpbnQgLT4gbGV4YnVmIC0+IGludCA9IFwiY2FtbF9sZXhfZW5naW5lXCJcbmV4dGVybmFsIGNfbmV3X2VuZ2luZSA6IGxleF90YWJsZXMgLT4gaW50IC0+IGxleGJ1ZiAtPiBpbnRcbiAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9uZXdfbGV4X2VuZ2luZVwiXG5cbmxldCBlbmdpbmUgdGJsIHN0YXRlIGJ1ZiA9XG4gIGxldCByZXN1bHQgPSBjX2VuZ2luZSB0Ymwgc3RhdGUgYnVmIGluXG4gIGlmIHJlc3VsdCA+PSAwICYmIGJ1Zi5sZXhfY3Vycl9wICE9IGR1bW15X3BvcyB0aGVuIGJlZ2luXG4gICAgYnVmLmxleF9zdGFydF9wIDwtIGJ1Zi5sZXhfY3Vycl9wO1xuICAgIGJ1Zi5sZXhfY3Vycl9wIDwtIHtidWYubGV4X2N1cnJfcFxuICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHBvc19jbnVtID0gYnVmLmxleF9hYnNfcG9zICsgYnVmLmxleF9jdXJyX3Bvc307XG4gIGVuZDtcbiAgcmVzdWx0XG5cblxubGV0IG5ld19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiA9XG4gIGxldCByZXN1bHQgPSBjX25ld19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiBpblxuICBpZiByZXN1bHQgPj0gMCAmJiBidWYubGV4X2N1cnJfcCAhPSBkdW1teV9wb3MgdGhlbiBiZWdpblxuICAgIGJ1Zi5sZXhfc3RhcnRfcCA8LSBidWYubGV4X2N1cnJfcDtcbiAgICBidWYubGV4X2N1cnJfcCA8LSB7YnVmLmxleF9jdXJyX3BcbiAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBwb3NfY251bSA9IGJ1Zi5sZXhfYWJzX3BvcyArIGJ1Zi5sZXhfY3Vycl9wb3N9O1xuICBlbmQ7XG4gIHJlc3VsdFxuXG5sZXQgbGV4X3JlZmlsbCByZWFkX2Z1biBhdXhfYnVmZmVyIGxleGJ1ZiA9XG4gIGxldCByZWFkID1cbiAgICByZWFkX2Z1biBhdXhfYnVmZmVyIChCeXRlcy5sZW5ndGggYXV4X2J1ZmZlcikgaW5cbiAgbGV0IG4gPVxuICAgIGlmIHJlYWQgPiAwXG4gICAgdGhlbiByZWFkXG4gICAgZWxzZSAobGV4YnVmLmxleF9lb2ZfcmVhY2hlZCA8LSB0cnVlOyAwKSBpblxuICAoKiBDdXJyZW50IHN0YXRlIG9mIHRoZSBidWZmZXI6XG4gICAgICAgIDwtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLT5cbiAgICAgICAgfCAganVuayB8ICAgICAgdmFsaWQgZGF0YSAgICAgfCAgIGp1bmsgICAgfFxuICAgICAgICBeICAgICAgIF4gICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICBeXG4gICAgICAgIDAgICAgc3RhcnRfcG9zICAgICAgICAgICAgIGJ1ZmZlcl9lbmQgICAgQnl0ZXMubGVuZ3RoIGJ1ZmZlclxuICAqKVxuICBpZiBsZXhidWYubGV4X2J1ZmZlcl9sZW4gKyBuID4gQnl0ZXMubGVuZ3RoIGxleGJ1Zi5sZXhfYnVmZmVyIHRoZW4gYmVnaW5cbiAgICAoKiBUaGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqKVxuICAgIGlmIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zICsgblxuICAgICAgIDw9IEJ5dGVzLmxlbmd0aCBsZXhidWYubGV4X2J1ZmZlclxuICAgIHRoZW4gYmVnaW5cbiAgICAgICgqIEJ1dCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgaWYgd2UgcmVjbGFpbSB0aGUganVuayBhdCB0aGUgYmVnaW5uaW5nXG4gICAgICAgICBvZiB0aGUgYnVmZmVyICopXG4gICAgICBCeXRlcy5ibGl0IGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zXG4gICAgICAgICAgICAgICAgICBsZXhidWYubGV4X2J1ZmZlciAwXG4gICAgICAgICAgICAgICAgICAobGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MpXG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICgqIFdlIG11c3QgZ3JvdyB0aGUgYnVmZmVyLiAgRG91YmxpbmcgaXRzIHNpemUgd2lsbCBwcm92aWRlIGVub3VnaFxuICAgICAgICAgc3BhY2Ugc2luY2UgbiA8PSBTdHJpbmcubGVuZ3RoIGF1eF9idWZmZXIgPD0gU3RyaW5nLmxlbmd0aCBidWZmZXIuXG4gICAgICAgICBXYXRjaCBvdXQgZm9yIHN0cmluZyBsZW5ndGggb3ZlcmZsb3csIHRob3VnaC4gKilcbiAgICAgIGxldCBuZXdsZW4gPVxuICAgICAgICBJbnQubWluICgyICogQnl0ZXMubGVuZ3RoIGxleGJ1Zi5sZXhfYnVmZmVyKSBTeXMubWF4X3N0cmluZ19sZW5ndGggaW5cbiAgICAgIGlmIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zICsgbiA+IG5ld2xlblxuICAgICAgdGhlbiBmYWlsd2l0aCBcIkxleGluZy5sZXhfcmVmaWxsOiBjYW5ub3QgZ3JvdyBidWZmZXJcIjtcbiAgICAgIGxldCBuZXdidWYgPSBCeXRlcy5jcmVhdGUgbmV3bGVuIGluXG4gICAgICAoKiBDb3B5IHRoZSB2YWxpZCBkYXRhIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5ldyBidWZmZXIgKilcbiAgICAgIEJ5dGVzLmJsaXQgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9zdGFydF9wb3NcbiAgICAgICAgICAgICAgICAgIG5ld2J1ZiAwXG4gICAgICAgICAgICAgICAgICAobGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MpO1xuICAgICAgbGV4YnVmLmxleF9idWZmZXIgPC0gbmV3YnVmXG4gICAgZW5kO1xuICAgICgqIFJlYWxsb2NhdGlvbiBvciBub3QsIHdlIGhhdmUgc2hpZnRlZCB0aGUgZGF0YSBsZWZ0IGJ5XG4gICAgICAgc3RhcnRfcG9zIGNoYXJhY3RlcnM7IHVwZGF0ZSB0aGUgcG9zaXRpb25zICopXG4gICAgbGV0IHMgPSBsZXhidWYubGV4X3N0YXJ0X3BvcyBpblxuICAgIGxleGJ1Zi5sZXhfYWJzX3BvcyA8LSBsZXhidWYubGV4X2Fic19wb3MgKyBzO1xuICAgIGxleGJ1Zi5sZXhfY3Vycl9wb3MgPC0gbGV4YnVmLmxleF9jdXJyX3BvcyAtIHM7XG4gICAgbGV4YnVmLmxleF9zdGFydF9wb3MgPC0gMDtcbiAgICBsZXhidWYubGV4X2xhc3RfcG9zIDwtIGxleGJ1Zi5sZXhfbGFzdF9wb3MgLSBzO1xuICAgIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiA8LSBsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBzIDtcbiAgICBsZXQgdCA9IGxleGJ1Zi5sZXhfbWVtIGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCB0LTEgZG9cbiAgICAgIGxldCB2ID0gdC4oaSkgaW5cbiAgICAgIGlmIHYgPj0gMCB0aGVuXG4gICAgICAgIHQuKGkpIDwtIHYtc1xuICAgIGRvbmVcbiAgZW5kO1xuICAoKiBUaGVyZSBpcyBub3cgZW5vdWdoIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqKVxuICBCeXRlcy5ibGl0IGF1eF9idWZmZXIgMCBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X2J1ZmZlcl9sZW4gbjtcbiAgbGV4YnVmLmxleF9idWZmZXJfbGVuIDwtIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiArIG5cblxubGV0IHplcm9fcG9zID0ge1xuICBwb3NfZm5hbWUgPSBcIlwiO1xuICBwb3NfbG51bSA9IDE7XG4gIHBvc19ib2wgPSAwO1xuICBwb3NfY251bSA9IDA7XG59XG5cbmxldCBmcm9tX2Z1bmN0aW9uID8od2l0aF9wb3NpdGlvbnMgPSB0cnVlKSBmID1cbiAgeyByZWZpbGxfYnVmZiA9IGxleF9yZWZpbGwgZiAoQnl0ZXMuY3JlYXRlIDUxMik7XG4gICAgbGV4X2J1ZmZlciA9IEJ5dGVzLmNyZWF0ZSAxMDI0O1xuICAgIGxleF9idWZmZXJfbGVuID0gMDtcbiAgICBsZXhfYWJzX3BvcyA9IDA7XG4gICAgbGV4X3N0YXJ0X3BvcyA9IDA7XG4gICAgbGV4X2N1cnJfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9wb3MgPSAwO1xuICAgIGxleF9sYXN0X2FjdGlvbiA9IDA7XG4gICAgbGV4X21lbSA9IFt8fF07XG4gICAgbGV4X2VvZl9yZWFjaGVkID0gZmFsc2U7XG4gICAgbGV4X3N0YXJ0X3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICAgIGxleF9jdXJyX3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICB9XG5cbmxldCBmcm9tX2NoYW5uZWwgP3dpdGhfcG9zaXRpb25zIGljID1cbiAgZnJvbV9mdW5jdGlvbiA/d2l0aF9wb3NpdGlvbnMgKGZ1biBidWYgbiAtPiBpbnB1dCBpYyBidWYgMCBuKVxuXG5sZXQgZnJvbV9zdHJpbmcgPyh3aXRoX3Bvc2l0aW9ucyA9IHRydWUpIHMgPVxuICB7IHJlZmlsbF9idWZmID0gKGZ1biBsZXhidWYgLT4gbGV4YnVmLmxleF9lb2ZfcmVhY2hlZCA8LSB0cnVlKTtcbiAgICBsZXhfYnVmZmVyID0gQnl0ZXMub2Zfc3RyaW5nIHM7ICgqIGhhdmUgdG8gbWFrZSBhIGNvcHkgZm9yIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdW5zYWZlLXN0cmluZyBtb2RlICopXG4gICAgbGV4X2J1ZmZlcl9sZW4gPSBTdHJpbmcubGVuZ3RoIHM7XG4gICAgbGV4X2Fic19wb3MgPSAwO1xuICAgIGxleF9zdGFydF9wb3MgPSAwO1xuICAgIGxleF9jdXJyX3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9hY3Rpb24gPSAwO1xuICAgIGxleF9tZW0gPSBbfHxdO1xuICAgIGxleF9lb2ZfcmVhY2hlZCA9IHRydWU7XG4gICAgbGV4X3N0YXJ0X3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICAgIGxleF9jdXJyX3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICB9XG5cbmxldCBzZXRfcG9zaXRpb24gbGV4YnVmIHBvc2l0aW9uID1cbiAgbGV4YnVmLmxleF9jdXJyX3AgIDwtIHtwb3NpdGlvbiB3aXRoIHBvc19mbmFtZSA9IGxleGJ1Zi5sZXhfY3Vycl9wLnBvc19mbmFtZX07XG4gIGxleGJ1Zi5sZXhfYWJzX3BvcyA8LSBwb3NpdGlvbi5wb3NfY251bVxuXG5sZXQgc2V0X2ZpbGVuYW1lIGxleGJ1ZiBmbmFtZSA9XG4gIGxleGJ1Zi5sZXhfY3Vycl9wIDwtIHtsZXhidWYubGV4X2N1cnJfcCB3aXRoIHBvc19mbmFtZSA9IGZuYW1lfVxuXG5sZXQgd2l0aF9wb3NpdGlvbnMgbGV4YnVmID0gbGV4YnVmLmxleF9jdXJyX3AgIT0gZHVtbXlfcG9zXG5cbmxldCBsZXhlbWUgbGV4YnVmID1cbiAgbGV0IGxlbiA9IGxleGJ1Zi5sZXhfY3Vycl9wb3MgLSBsZXhidWYubGV4X3N0YXJ0X3BvcyBpblxuICBCeXRlcy5zdWJfc3RyaW5nIGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGxlblxuXG5sZXQgc3ViX2xleGVtZSBsZXhidWYgaTEgaTIgPVxuICBsZXQgbGVuID0gaTItaTEgaW5cbiAgQnl0ZXMuc3ViX3N0cmluZyBsZXhidWYubGV4X2J1ZmZlciBpMSBsZW5cblxubGV0IHN1Yl9sZXhlbWVfb3B0IGxleGJ1ZiBpMSBpMiA9XG4gIGlmIGkxID49IDAgdGhlbiBiZWdpblxuICAgIGxldCBsZW4gPSBpMi1pMSBpblxuICAgIFNvbWUgKEJ5dGVzLnN1Yl9zdHJpbmcgbGV4YnVmLmxleF9idWZmZXIgaTEgbGVuKVxuICBlbmQgZWxzZSBiZWdpblxuICAgIE5vbmVcbiAgZW5kXG5cbmxldCBzdWJfbGV4ZW1lX2NoYXIgbGV4YnVmIGkgPSBCeXRlcy5nZXQgbGV4YnVmLmxleF9idWZmZXIgaVxuXG5sZXQgc3ViX2xleGVtZV9jaGFyX29wdCBsZXhidWYgaSA9XG4gIGlmIGkgPj0gMCB0aGVuXG4gICAgU29tZSAoQnl0ZXMuZ2V0IGxleGJ1Zi5sZXhfYnVmZmVyIGkpXG4gIGVsc2VcbiAgICBOb25lXG5cblxubGV0IGxleGVtZV9jaGFyIGxleGJ1ZiBpID1cbiAgQnl0ZXMuZ2V0IGxleGJ1Zi5sZXhfYnVmZmVyIChsZXhidWYubGV4X3N0YXJ0X3BvcyArIGkpXG5cbmxldCBsZXhlbWVfc3RhcnQgbGV4YnVmID0gbGV4YnVmLmxleF9zdGFydF9wLnBvc19jbnVtXG5sZXQgbGV4ZW1lX2VuZCBsZXhidWYgPSBsZXhidWYubGV4X2N1cnJfcC5wb3NfY251bVxuXG5sZXQgbGV4ZW1lX3N0YXJ0X3AgbGV4YnVmID0gbGV4YnVmLmxleF9zdGFydF9wXG5sZXQgbGV4ZW1lX2VuZF9wIGxleGJ1ZiA9IGxleGJ1Zi5sZXhfY3Vycl9wXG5cbmxldCBuZXdfbGluZSBsZXhidWYgPVxuICBsZXQgbGNwID0gbGV4YnVmLmxleF9jdXJyX3AgaW5cbiAgaWYgbGNwICE9IGR1bW15X3BvcyB0aGVuXG4gICAgbGV4YnVmLmxleF9jdXJyX3AgPC1cbiAgICAgIHsgbGNwIHdpdGhcbiAgICAgICAgcG9zX2xudW0gPSBsY3AucG9zX2xudW0gKyAxO1xuICAgICAgICBwb3NfYm9sID0gbGNwLnBvc19jbnVtO1xuICAgICAgfVxuXG5cblxuKCogRGlzY2FyZCBkYXRhIGxlZnQgaW4gbGV4ZXIgYnVmZmVyLiAqKVxuXG5sZXQgZmx1c2hfaW5wdXQgbGIgPVxuICBsYi5sZXhfY3Vycl9wb3MgPC0gMDtcbiAgbGIubGV4X2Fic19wb3MgPC0gMDtcbiAgbGV0IGxjcCA9IGxiLmxleF9jdXJyX3AgaW5cbiAgaWYgbGNwICE9IGR1bW15X3BvcyB0aGVuXG4gICAgbGIubGV4X2N1cnJfcCA8LSB7emVyb19wb3Mgd2l0aCBwb3NfZm5hbWUgPSBsY3AucG9zX2ZuYW1lfTtcbiAgbGIubGV4X2J1ZmZlcl9sZW4gPC0gMDtcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBQcmludGZcblxudHlwZSB0ID0gZXhuID0gLi5cblxubGV0IHByaW50ZXJzID0gQXRvbWljLm1ha2UgW11cblxubGV0IGxvY2ZtdCA9IGZvcm1hdF9vZl9zdHJpbmcgXCJGaWxlIFxcXCIlc1xcXCIsIGxpbmUgJWQsIGNoYXJhY3RlcnMgJWQtJWQ6ICVzXCJcblxubGV0IGZpZWxkIHggaSA9XG4gIGxldCBmID0gT2JqLmZpZWxkIHggaSBpblxuICBpZiBub3QgKE9iai5pc19ibG9jayBmKSB0aGVuXG4gICAgc3ByaW50ZiBcIiVkXCIgKE9iai5tYWdpYyBmIDogaW50KSAgICAgICAgICAgKCogY2FuIGFsc28gYmUgYSBjaGFyICopXG4gIGVsc2UgaWYgT2JqLnRhZyBmID0gT2JqLnN0cmluZ190YWcgdGhlblxuICAgIHNwcmludGYgXCIlU1wiIChPYmoubWFnaWMgZiA6IHN0cmluZylcbiAgZWxzZSBpZiBPYmoudGFnIGYgPSBPYmouZG91YmxlX3RhZyB0aGVuXG4gICAgc3RyaW5nX29mX2Zsb2F0IChPYmoubWFnaWMgZiA6IGZsb2F0KVxuICBlbHNlXG4gICAgXCJfXCJcblxubGV0IHJlYyBvdGhlcl9maWVsZHMgeCBpID1cbiAgaWYgaSA+PSBPYmouc2l6ZSB4IHRoZW4gXCJcIlxuICBlbHNlIHNwcmludGYgXCIsICVzJXNcIiAoZmllbGQgeCBpKSAob3RoZXJfZmllbGRzIHggKGkrMSkpXG5cbmxldCBmaWVsZHMgeCA9XG4gIG1hdGNoIE9iai5zaXplIHggd2l0aFxuICB8IDAgLT4gXCJcIlxuICB8IDEgLT4gXCJcIlxuICB8IDIgLT4gc3ByaW50ZiBcIiglcylcIiAoZmllbGQgeCAxKVxuICB8IF8gLT4gc3ByaW50ZiBcIiglcyVzKVwiIChmaWVsZCB4IDEpIChvdGhlcl9maWVsZHMgeCAyKVxuXG5sZXQgdXNlX3ByaW50ZXJzIHggPVxuICBsZXQgcmVjIGNvbnYgPSBmdW5jdGlvblxuICAgIHwgaGQgOjogdGwgLT5cbiAgICAgICAgKG1hdGNoIGhkIHggd2l0aFxuICAgICAgICAgfCBOb25lIHwgZXhjZXB0aW9uIF8gLT4gY29udiB0bFxuICAgICAgICAgfCBTb21lIHMgLT4gU29tZSBzKVxuICAgIHwgW10gLT4gTm9uZSBpblxuICBjb252IChBdG9taWMuZ2V0IHByaW50ZXJzKVxuXG5sZXQgdG9fc3RyaW5nX2RlZmF1bHQgPSBmdW5jdGlvblxuICB8IE91dF9vZl9tZW1vcnkgLT4gXCJPdXQgb2YgbWVtb3J5XCJcbiAgfCBTdGFja19vdmVyZmxvdyAtPiBcIlN0YWNrIG92ZXJmbG93XCJcbiAgfCBNYXRjaF9mYWlsdXJlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis1KSBcIlBhdHRlcm4gbWF0Y2hpbmcgZmFpbGVkXCJcbiAgfCBBc3NlcnRfZmFpbHVyZShmaWxlLCBsaW5lLCBjaGFyKSAtPlxuICAgICAgc3ByaW50ZiBsb2NmbXQgZmlsZSBsaW5lIGNoYXIgKGNoYXIrNikgXCJBc3NlcnRpb24gZmFpbGVkXCJcbiAgfCBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZShmaWxlLCBsaW5lLCBjaGFyKSAtPlxuICAgICAgc3ByaW50ZiBsb2NmbXQgZmlsZSBsaW5lIGNoYXIgKGNoYXIrNikgXCJVbmRlZmluZWQgcmVjdXJzaXZlIG1vZHVsZVwiXG4gIHwgeCAtPlxuICAgICAgbGV0IHggPSBPYmoucmVwciB4IGluXG4gICAgICBpZiBPYmoudGFnIHggPD4gMCB0aGVuXG4gICAgICAgIChPYmoubWFnaWMgKE9iai5maWVsZCB4IDApIDogc3RyaW5nKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgY29uc3RydWN0b3IgPVxuICAgICAgICAgIChPYmoubWFnaWMgKE9iai5maWVsZCAoT2JqLmZpZWxkIHggMCkgMCkgOiBzdHJpbmcpIGluXG4gICAgICAgIGNvbnN0cnVjdG9yIF4gKGZpZWxkcyB4KVxuXG5sZXQgdG9fc3RyaW5nIGUgPVxuICBtYXRjaCB1c2VfcHJpbnRlcnMgZSB3aXRoXG4gIHwgU29tZSBzIC0+IHNcbiAgfCBOb25lIC0+IHRvX3N0cmluZ19kZWZhdWx0IGVcblxubGV0IHByaW50IGZjdCBhcmcgPVxuICB0cnlcbiAgICBmY3QgYXJnXG4gIHdpdGggeCAtPlxuICAgIGVwcmludGYgXCJVbmNhdWdodCBleGNlcHRpb246ICVzXFxuXCIgKHRvX3N0cmluZyB4KTtcbiAgICBmbHVzaCBzdGRlcnI7XG4gICAgcmFpc2UgeFxuXG5sZXQgY2F0Y2ggZmN0IGFyZyA9XG4gIHRyeVxuICAgIGZjdCBhcmdcbiAgd2l0aCB4IC0+XG4gICAgZmx1c2ggc3Rkb3V0O1xuICAgIGVwcmludGYgXCJVbmNhdWdodCBleGNlcHRpb246ICVzXFxuXCIgKHRvX3N0cmluZyB4KTtcbiAgICBleGl0IDJcblxudHlwZSByYXdfYmFja3RyYWNlX3Nsb3RcbnR5cGUgcmF3X2JhY2t0cmFjZV9lbnRyeSA9IHByaXZhdGUgaW50XG50eXBlIHJhd19iYWNrdHJhY2UgPSByYXdfYmFja3RyYWNlX2VudHJ5IGFycmF5XG5cbmxldCByYXdfYmFja3RyYWNlX2VudHJpZXMgYnQgPSBidFxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZTpcbiAgdW5pdCAtPiByYXdfYmFja3RyYWNlID0gXCJjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZVwiXG5cbmV4dGVybmFsIHJhaXNlX3dpdGhfYmFja3RyYWNlOiBleG4gLT4gcmF3X2JhY2t0cmFjZSAtPiAnYVxuICA9IFwiJXJhaXNlX3dpdGhfYmFja3RyYWNlXCJcblxudHlwZSBiYWNrdHJhY2Vfc2xvdCA9XG4gIHwgS25vd25fbG9jYXRpb24gb2Yge1xuICAgICAgaXNfcmFpc2UgICAgOiBib29sO1xuICAgICAgZmlsZW5hbWUgICAgOiBzdHJpbmc7XG4gICAgICBsaW5lX251bWJlciA6IGludDtcbiAgICAgIHN0YXJ0X2NoYXIgIDogaW50O1xuICAgICAgZW5kX2NoYXIgICAgOiBpbnQ7XG4gICAgICBpc19pbmxpbmUgICA6IGJvb2w7XG4gICAgICBkZWZuYW1lICAgICA6IHN0cmluZztcbiAgICB9XG4gIHwgVW5rbm93bl9sb2NhdGlvbiBvZiB7XG4gICAgICBpc19yYWlzZSA6IGJvb2xcbiAgICB9XG5cbigqIHRvIGF2b2lkIHdhcm5pbmcgKilcbmxldCBfID0gW0tub3duX2xvY2F0aW9uIHsgaXNfcmFpc2UgPSBmYWxzZTsgZmlsZW5hbWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX251bWJlciA9IDA7IHN0YXJ0X2NoYXIgPSAwOyBlbmRfY2hhciA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2lubGluZSA9IGZhbHNlOyBkZWZuYW1lID0gXCJcIiB9O1xuICAgICAgICAgVW5rbm93bl9sb2NhdGlvbiB7IGlzX3JhaXNlID0gZmFsc2UgfV1cblxuZXh0ZXJuYWwgY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3Q6XG4gIHJhd19iYWNrdHJhY2Vfc2xvdCAtPiBiYWNrdHJhY2Vfc2xvdCA9IFwiY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdFwiXG5cbmV4dGVybmFsIGNvbnZlcnRfcmF3X2JhY2t0cmFjZTpcbiAgcmF3X2JhY2t0cmFjZSAtPiBiYWNrdHJhY2Vfc2xvdCBhcnJheSA9IFwiY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2VcIlxuXG5sZXQgY29udmVydF9yYXdfYmFja3RyYWNlIGJ0ID1cbiAgdHJ5IFNvbWUgKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSBidClcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5sZXQgZm9ybWF0X2JhY2t0cmFjZV9zbG90IHBvcyBzbG90ID1cbiAgbGV0IGluZm8gaXNfcmFpc2UgPVxuICAgIGlmIGlzX3JhaXNlIHRoZW5cbiAgICAgIGlmIHBvcyA9IDAgdGhlbiBcIlJhaXNlZCBhdFwiIGVsc2UgXCJSZS1yYWlzZWQgYXRcIlxuICAgIGVsc2VcbiAgICAgIGlmIHBvcyA9IDAgdGhlbiBcIlJhaXNlZCBieSBwcmltaXRpdmUgb3BlcmF0aW9uIGF0XCIgZWxzZSBcIkNhbGxlZCBmcm9tXCJcbiAgaW5cbiAgbWF0Y2ggc2xvdCB3aXRoXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBsIC0+XG4gICAgICBpZiBsLmlzX3JhaXNlIHRoZW5cbiAgICAgICAgKCogY29tcGlsZXItaW5zZXJ0ZWQgcmUtcmFpc2UsIHNraXBwZWQgKikgTm9uZVxuICAgICAgZWxzZVxuICAgICAgICBTb21lIChzcHJpbnRmIFwiJXMgdW5rbm93biBsb2NhdGlvblwiIChpbmZvIGZhbHNlKSlcbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+XG4gICAgICBTb21lIChzcHJpbnRmIFwiJXMgJXMgaW4gZmlsZSBcXFwiJXNcXFwiJXMsIGxpbmUgJWQsIGNoYXJhY3RlcnMgJWQtJWRcIlxuICAgICAgICAgICAgICAoaW5mbyBsLmlzX3JhaXNlKSBsLmRlZm5hbWUgbC5maWxlbmFtZVxuICAgICAgICAgICAgICAoaWYgbC5pc19pbmxpbmUgdGhlbiBcIiAoaW5saW5lZClcIiBlbHNlIFwiXCIpXG4gICAgICAgICAgICAgIGwubGluZV9udW1iZXIgbC5zdGFydF9jaGFyIGwuZW5kX2NoYXIpXG5cbmxldCBwcmludF9leGNlcHRpb25fYmFja3RyYWNlIG91dGNoYW4gYmFja3RyYWNlID1cbiAgbWF0Y2ggYmFja3RyYWNlIHdpdGhcbiAgfCBOb25lIC0+XG4gICAgICBmcHJpbnRmIG91dGNoYW5cbiAgICAgICAgXCIoUHJvZ3JhbSBub3QgbGlua2VkIHdpdGggLWcsIGNhbm5vdCBwcmludCBzdGFjayBiYWNrdHJhY2UpXFxuXCJcbiAgfCBTb21lIGEgLT5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICAgICAgbWF0Y2ggZm9ybWF0X2JhY2t0cmFjZV9zbG90IGkgYS4oaSkgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSBzdHIgLT4gZnByaW50ZiBvdXRjaGFuIFwiJXNcXG5cIiBzdHJcbiAgICAgIGRvbmVcblxubGV0IHByaW50X3Jhd19iYWNrdHJhY2Ugb3V0Y2hhbiByYXdfYmFja3RyYWNlID1cbiAgcHJpbnRfZXhjZXB0aW9uX2JhY2t0cmFjZSBvdXRjaGFuIChjb252ZXJ0X3Jhd19iYWNrdHJhY2UgcmF3X2JhY2t0cmFjZSlcblxuKCogY29uZnVzaW5nbHkgbmFtZWQ6IHByaW50cyB0aGUgZ2xvYmFsIGN1cnJlbnQgYmFja3RyYWNlICopXG5sZXQgcHJpbnRfYmFja3RyYWNlIG91dGNoYW4gPVxuICBwcmludF9yYXdfYmFja3RyYWNlIG91dGNoYW4gKGdldF9yYXdfYmFja3RyYWNlICgpKVxuXG5sZXQgYmFja3RyYWNlX3RvX3N0cmluZyBiYWNrdHJhY2UgPVxuICBtYXRjaCBiYWNrdHJhY2Ugd2l0aFxuICB8IE5vbmUgLT5cbiAgICAgXCIoUHJvZ3JhbSBub3QgbGlua2VkIHdpdGggLWcsIGNhbm5vdCBwcmludCBzdGFjayBiYWNrdHJhY2UpXFxuXCJcbiAgfCBTb21lIGEgLT5cbiAgICAgIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAxMDI0IGluXG4gICAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgICAgIG1hdGNoIGZvcm1hdF9iYWNrdHJhY2Vfc2xvdCBpIGEuKGkpIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICB8IFNvbWUgc3RyIC0+IGJwcmludGYgYiBcIiVzXFxuXCIgc3RyXG4gICAgICBkb25lO1xuICAgICAgQnVmZmVyLmNvbnRlbnRzIGJcblxubGV0IHJhd19iYWNrdHJhY2VfdG9fc3RyaW5nIHJhd19iYWNrdHJhY2UgPVxuICBiYWNrdHJhY2VfdG9fc3RyaW5nIChjb252ZXJ0X3Jhd19iYWNrdHJhY2UgcmF3X2JhY2t0cmFjZSlcblxubGV0IGJhY2t0cmFjZV9zbG90X2lzX3JhaXNlID0gZnVuY3Rpb25cbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+IGwuaXNfcmFpc2VcbiAgfCBVbmtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19yYWlzZVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfaXNfaW5saW5lID0gZnVuY3Rpb25cbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+IGwuaXNfaW5saW5lXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBfIC0+IGZhbHNlXG5cbnR5cGUgbG9jYXRpb24gPSB7XG4gIGZpbGVuYW1lIDogc3RyaW5nO1xuICBsaW5lX251bWJlciA6IGludDtcbiAgc3RhcnRfY2hhciA6IGludDtcbiAgZW5kX2NoYXIgOiBpbnQ7XG59XG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9sb2NhdGlvbiA9IGZ1bmN0aW9uXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBfIC0+IE5vbmVcbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+XG4gICAgU29tZSB7XG4gICAgICBmaWxlbmFtZSAgICA9IGwuZmlsZW5hbWU7XG4gICAgICBsaW5lX251bWJlciA9IGwubGluZV9udW1iZXI7XG4gICAgICBzdGFydF9jaGFyICA9IGwuc3RhcnRfY2hhcjtcbiAgICAgIGVuZF9jaGFyICAgID0gbC5lbmRfY2hhcjtcbiAgICB9XG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9kZWZuYW1lID0gZnVuY3Rpb25cbiAgfCBVbmtub3duX2xvY2F0aW9uIF9cbiAgfCBLbm93bl9sb2NhdGlvbiB7IGRlZm5hbWUgPSBcIlwiIH0gLT4gTm9uZVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gU29tZSBsLmRlZm5hbWVcblxubGV0IGJhY2t0cmFjZV9zbG90cyByYXdfYmFja3RyYWNlID1cbiAgKCogVGhlIGRvY3VtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBndWFyYW50ZWVzIHRoYXQgU29tZSBpc1xuICAgICByZXR1cm5lZCBvbmx5IGlmIGEgcGFydCBvZiB0aGUgdHJhY2UgaXMgdXNhYmxlLiBUaGlzIGdpdmVzIHVzXG4gICAgIGEgYml0IG1vcmUgd29yayB0aGFuIGp1c3QgY29udmVydF9yYXdfYmFja3RyYWNlLCBidXQgaXQgbWFrZXMgdGhlXG4gICAgIEFQSSBtb3JlIHVzZXItZnJpZW5kbHkgLS0gb3RoZXJ3aXNlIG1vc3QgdXNlcnMgd291bGQgaGF2ZSB0b1xuICAgICByZWltcGxlbWVudCB0aGUgXCJQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgc29ycnlcIiBsb2dpY1xuICAgICB0aGVtc2VsdmVzLiAqKVxuICBtYXRjaCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UgcmF3X2JhY2t0cmFjZSB3aXRoXG4gICAgfCBOb25lIC0+IE5vbmVcbiAgICB8IFNvbWUgYmFja3RyYWNlIC0+XG4gICAgICBsZXQgdXNhYmxlX3Nsb3QgPSBmdW5jdGlvblxuICAgICAgICB8IFVua25vd25fbG9jYXRpb24gXyAtPiBmYWxzZVxuICAgICAgICB8IEtub3duX2xvY2F0aW9uIF8gLT4gdHJ1ZSBpblxuICAgICAgbGV0IHJlYyBleGlzdHNfdXNhYmxlID0gZnVuY3Rpb25cbiAgICAgICAgfCAoLTEpIC0+IGZhbHNlXG4gICAgICAgIHwgaSAtPiB1c2FibGVfc2xvdCBiYWNrdHJhY2UuKGkpIHx8IGV4aXN0c191c2FibGUgKGkgLSAxKSBpblxuICAgICAgaWYgZXhpc3RzX3VzYWJsZSAoQXJyYXkubGVuZ3RoIGJhY2t0cmFjZSAtIDEpXG4gICAgICB0aGVuIFNvbWUgYmFja3RyYWNlXG4gICAgICBlbHNlIE5vbmVcblxubGV0IGJhY2t0cmFjZV9zbG90c19vZl9yYXdfZW50cnkgZW50cnkgPVxuICBiYWNrdHJhY2Vfc2xvdHMgW3wgZW50cnkgfF1cblxubW9kdWxlIFNsb3QgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gYmFja3RyYWNlX3Nsb3RcbiAgbGV0IGZvcm1hdCA9IGZvcm1hdF9iYWNrdHJhY2Vfc2xvdFxuICBsZXQgaXNfcmFpc2UgPSBiYWNrdHJhY2Vfc2xvdF9pc19yYWlzZVxuICBsZXQgaXNfaW5saW5lID0gYmFja3RyYWNlX3Nsb3RfaXNfaW5saW5lXG4gIGxldCBsb2NhdGlvbiA9IGJhY2t0cmFjZV9zbG90X2xvY2F0aW9uXG4gIGxldCBuYW1lID0gYmFja3RyYWNlX3Nsb3RfZGVmbmFtZVxuZW5kXG5cbmxldCByYXdfYmFja3RyYWNlX2xlbmd0aCBidCA9IEFycmF5Lmxlbmd0aCBidFxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZV9zbG90IDpcbiAgcmF3X2JhY2t0cmFjZSAtPiBpbnQgLT4gcmF3X2JhY2t0cmFjZV9zbG90ID0gXCJjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdFwiXG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlX25leHRfc2xvdCA6XG4gIHJhd19iYWNrdHJhY2Vfc2xvdCAtPiByYXdfYmFja3RyYWNlX3Nsb3Qgb3B0aW9uXG4gID0gXCJjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90XCJcblxuKCogY29uZnVzaW5nbHkgbmFtZWQ6XG4gICByZXR1cm5zIHRoZSAqc3RyaW5nKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnbG9iYWwgY3VycmVudCBiYWNrdHJhY2UgKilcbmxldCBnZXRfYmFja3RyYWNlICgpID0gcmF3X2JhY2t0cmFjZV90b19zdHJpbmcgKGdldF9yYXdfYmFja3RyYWNlICgpKVxuXG5leHRlcm5hbCByZWNvcmRfYmFja3RyYWNlOiBib29sIC0+IHVuaXQgPSBcImNhbWxfcmVjb3JkX2JhY2t0cmFjZVwiXG5leHRlcm5hbCBiYWNrdHJhY2Vfc3RhdHVzOiB1bml0IC0+IGJvb2wgPSBcImNhbWxfYmFja3RyYWNlX3N0YXR1c1wiXG5cbmxldCByZWMgcmVnaXN0ZXJfcHJpbnRlciBmbiA9XG4gIGxldCBvbGRfcHJpbnRlcnMgPSBBdG9taWMuZ2V0IHByaW50ZXJzIGluXG4gIGxldCBuZXdfcHJpbnRlcnMgPSBmbiA6OiBvbGRfcHJpbnRlcnMgaW5cbiAgbGV0IHN1Y2Nlc3MgPSBBdG9taWMuY29tcGFyZV9hbmRfc2V0IHByaW50ZXJzIG9sZF9wcmludGVycyBuZXdfcHJpbnRlcnMgaW5cbiAgaWYgbm90IHN1Y2Nlc3MgdGhlbiByZWdpc3Rlcl9wcmludGVyIGZuXG5cbmV4dGVybmFsIGdldF9jYWxsc3RhY2s6IGludCAtPiByYXdfYmFja3RyYWNlID0gXCJjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFja1wiXG5cbmxldCBleG5fc2xvdCB4ID1cbiAgbGV0IHggPSBPYmoucmVwciB4IGluXG4gIGlmIE9iai50YWcgeCA9IDAgdGhlbiBPYmouZmllbGQgeCAwIGVsc2UgeFxuXG5sZXQgZXhuX3Nsb3RfaWQgeCA9XG4gIGxldCBzbG90ID0gZXhuX3Nsb3QgeCBpblxuICAoT2JqLm9iaiAoT2JqLmZpZWxkIHNsb3QgMSkgOiBpbnQpXG5cbmxldCBleG5fc2xvdF9uYW1lIHggPVxuICBsZXQgc2xvdCA9IGV4bl9zbG90IHggaW5cbiAgKE9iai5vYmogKE9iai5maWVsZCBzbG90IDApIDogc3RyaW5nKVxuXG5leHRlcm5hbCBnZXRfZGVidWdfaW5mb19zdGF0dXMgOiB1bml0IC0+IGludCA9IFwiY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1c1wiXG5cbigqIERlc2NyaXB0aW9ucyBmb3IgZXJyb3JzIGluIHN0YXJ0dXAuaC4gU2VlIGFsc28gYmFja3RyYWNlLmMgKilcbmxldCBlcnJvcnMgPSBbfCBcIlwiO1xuICAoKiBGSUxFX05PVF9GT1VORCAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgbm90IGZvdW5kKVwiO1xuICAoKiBCQURfQllURUNPREUgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGFwcGVhcnMgdG8gYmUgY29ycnVwdClcIjtcbiAgKCogV1JPTkdfTUFHSUMgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGhhcyB3cm9uZyBtYWdpYyBudW1iZXIpXCI7XG4gICgqIE5PX0ZEUyAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgY2Fubm90IGJlIG9wZW5lZDtcXG4gXFxcbiAgICAgIC0tIHRvbyBtYW55IG9wZW4gZmlsZXMuIFRyeSBydW5uaW5nIHdpdGggT0NBTUxSVU5QQVJBTT1iPTIpXCJcbnxdXG5cbmxldCBkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGV4biByYXdfYmFja3RyYWNlID1cbiAgZXByaW50ZiBcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gJXNcXG5cIiAodG9fc3RyaW5nIGV4bik7XG4gIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2U7XG4gIGxldCBzdGF0dXMgPSBnZXRfZGVidWdfaW5mb19zdGF0dXMgKCkgaW5cbiAgaWYgc3RhdHVzIDwgMCB0aGVuXG4gICAgcHJlcnJfZW5kbGluZSBlcnJvcnMuKGFicyBzdGF0dXMpO1xuICBmbHVzaCBzdGRlcnJcblxubGV0IHVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyID0gcmVmIGRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXJcblxubGV0IHNldF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBmbiA9IHVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIDo9IGZuXG5cbmxldCBlbXB0eV9iYWNrdHJhY2UgOiByYXdfYmFja3RyYWNlID0gW3wgfF1cblxubGV0IHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKSA9XG4gIHRyeVxuICAgIGdldF9yYXdfYmFja3RyYWNlICgpXG4gIHdpdGggXyAoKiBPdXRfb2ZfbWVtb3J5PyAqKSAtPlxuICAgIGVtcHR5X2JhY2t0cmFjZVxuXG5sZXQgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbicgZXhuIGRlYnVnZ2VyX2luX3VzZSA9XG4gIHRyeVxuICAgICgqIEdldCB0aGUgYmFja3RyYWNlIG5vdywgaW4gY2FzZSBvbmUgb2YgdGhlIFthdF9leGl0XSBmdW5jdGlvblxuICAgICAgIGRlc3Ryb3lzIGl0LiAqKVxuICAgIGxldCByYXdfYmFja3RyYWNlID1cbiAgICAgIGlmIGRlYnVnZ2VyX2luX3VzZSAoKiBTYW1lIHRlc3QgYXMgaW4gW3J1bnRpbWUvcHJpbnRleGMuY10gKikgdGhlblxuICAgICAgICBlbXB0eV9iYWNrdHJhY2VcbiAgICAgIGVsc2VcbiAgICAgICAgdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpXG4gICAgaW5cbiAgICAodHJ5IFN0ZGxpYi5kb19hdF9leGl0ICgpIHdpdGggXyAtPiAoKSk7XG4gICAgdHJ5XG4gICAgICAhdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZXhuIHJhd19iYWNrdHJhY2VcbiAgICB3aXRoIGV4bicgLT5cbiAgICAgIGxldCByYXdfYmFja3RyYWNlJyA9IHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgZXByaW50ZiBcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gJXNcXG5cIiAodG9fc3RyaW5nIGV4bik7XG4gICAgICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlO1xuICAgICAgZXByaW50ZiBcIkZhdGFsIGVycm9yIGluIHVuY2F1Z2h0IGV4Y2VwdGlvbiBoYW5kbGVyOiBleGNlcHRpb24gJXNcXG5cIlxuICAgICAgICAodG9fc3RyaW5nIGV4bicpO1xuICAgICAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZSc7XG4gICAgICBmbHVzaCBzdGRlcnJcbiAgd2l0aFxuICAgIHwgT3V0X29mX21lbW9yeSAtPlxuICAgICAgICBwcmVycl9lbmRsaW5lXG4gICAgICAgICAgXCJGYXRhbCBlcnJvcjogb3V0IG9mIG1lbW9yeSBpbiB1bmNhdWdodCBleGNlcHRpb24gaGFuZGxlclwiXG5cbigqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IFtjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbl0gaW5cbiAgIFtydW50aW1lL3ByaW50ZXhjLmNdIHdoaWNoIGV4cGVjdHMgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4gKilcbmxldCBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uIGV4biBkZWJ1Z2dlcl9pbl91c2UgPVxuICB0cnlcbiAgICBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJyBleG4gZGVidWdnZXJfaW5fdXNlXG4gIHdpdGggXyAtPlxuICAgICgqIFRoZXJlIGlzIG5vdCBtdWNoIHdlIGNhbiBkbyBhdCB0aGlzIHBvaW50ICopXG4gICAgKClcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gJ2EgLT4gdW5pdFxuICA9IFwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZVwiXG5cbmxldCAoKSA9XG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIFwiUHJpbnRleGMuaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblwiXG4gICAgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblxuIiwiIyAxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiBcbiAgbW9kdWxlIExleGluZyA9IHN0cnVjdFxuICAgICgqIE92ZXJyaWRlIHRoZSBMZXhpbmcuZW5naW5lIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IHBvc2l0aW9uIHJlY29yZFxuICAgICAgIGVhY2ggdGltZSBhIHJ1bGUgaXMgbWF0Y2hlZC4gUmVkdWNlcyB0b3RhbCBwYXJzZSB0aW1lIGJ5IGFyb3VuZCAzMCUuXG4gICAgICAgSWRlYSBzdG9sZW4gZnJvbSB5b2pzb24gKilcblxuICAgIGluY2x1ZGUgTGV4aW5nXG5cbiAgICBleHRlcm5hbCBjX2VuZ2luZSA6IGxleF90YWJsZXMgLT4gaW50IC0+IGxleGJ1ZiAtPiBpbnQgPSBcImNhbWxfbGV4X2VuZ2luZVwiXG5cbiAgICBsZXQgZW5naW5lIHRibCBzdGF0ZSBidWYgPVxuICAgICAgbGV0IHJlc3VsdCA9IGNfZW5naW5lIHRibCBzdGF0ZSBidWYgaW5cbiAgICAgICgqXG4gICAgICBpZiByZXN1bHQgPj0gMCB0aGVuIGJlZ2luXG4gICAgICAgIGJ1Zi5sZXhfc3RhcnRfcCA8LSBidWYubGV4X2N1cnJfcDtcbiAgICAgICAgYnVmLmxleF9jdXJyX3AgPC0ge2J1Zi5sZXhfY3Vycl9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHBvc19jbnVtID0gYnVmLmxleF9hYnNfcG9zICsgYnVmLmxleF9jdXJyX3Bvc307XG4gICAgICBlbmQ7XG4gICAgICAqKVxuICAgICAgcmVzdWx0XG4gIGVuZFxuICBvcGVuIFRva2Vuc1xuXG5cbiAgbW9kdWxlIHR5cGUgTGV4ID0gc2lnXG4gICAgdmFsIHJlYWQgOiBMZXhpbmcubGV4YnVmIC0+IFRva2Vucy50b2tlblxuICBlbmRcblxuICBtb2R1bGUgTWFrZSAoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgOiBMZXggPSBzdHJ1Y3RcblxuIyAzMyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcbmxldCBfX29jYW1sX2xleF90YWJsZXMgPSB7XG4gIExleGluZy5sZXhfYmFzZSA9XG4gICBcIlxcMDAwXFwwMDBcXDIyOVxcMjU1XFwwMTdcXDAwMFxcMjMyXFwyNTVcXDAwM1xcMDAwXFwyMzRcXDI1NVxcMTI2XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDExM1xcMDAwXFwwMDBcXDAwMFxcMDAxXFwwMDBcXDAwMVxcMDAwXFwwMDJcXDAwMFxcMTIzXFwwMDBcXDI0M1xcMjU1XFwyNDRcXDI1NVxcXG4gICAgXFwyNDVcXDI1NVxcMjQ2XFwyNTVcXDI0N1xcMjU1XFwyNDhcXDI1NVxcMjQ5XFwyNTVcXDI1MFxcMjU1XFwyNTFcXDI1NVxcMjUyXFwyNTVcXFxuICAgIFxcMDAxXFwwMDBcXDAwMlxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMlxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwM1xcMDAwXFwyNTRcXDI1NVxcMDAzXFwwMDBcXDAwMVxcMDAwXFwwMTFcXDAwMFxcMjUzXFwyNTVcXDIzOVxcMjU1XFwwMDNcXDAwMFxcXG4gICAgXFwwMTBcXDAwMFxcMDExXFwwMDBcXDAwNVxcMDAwXFwyNDJcXDI1NVxcMDIwXFwwMDBcXDAxOVxcMDAwXFwwNDhcXDAwMFxcMDc2XFwwMDBcXFxuICAgIFxcMDY3XFwwMDBcXDA2M1xcMDAwXFwwNzVcXDAwMFxcMDg0XFwwMDBcXDI0MVxcMjU1XFwwODVcXDAwMFxcMDgzXFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwwNzVcXDAwMFxcMDcxXFwwMDBcXDA4M1xcMDAwXFwwODRcXDAwMFxcMDkzXFwwMDBcXDI0MFxcMjU1XFwwOTVcXDAwMFxcXG4gICAgXFwwOTNcXDAwMFxcMDg5XFwwMDBcXDA5NVxcMDAwXFwwODVcXDAwMFxcMDgxXFwwMDBcXDAwMVxcMDAwXFwwMzJcXDAwMFxcMTU1XFwwMDBcXFxuICAgIFxcMTg2XFwwMDBcXDIwOVxcMDAwXFwyMTlcXDAwMFxcMjI5XFwwMDBcXDI0MFxcMDAwXFwyNTBcXDAwMFxcMDE4XFwwMDFcXDA2NlxcMDAxXFxcbiAgICBcXDIzNlxcMjU1XFwyMzVcXDI1NVxcMDk0XFwwMDFcXDExN1xcMDAxXFwxNTVcXDAwMVxcMTc4XFwwMDFcXDA1M1xcMDAwXFwyMzFcXDI1NVxcXG4gICAgXFwwODhcXDAwMVxcMjUyXFwyNTVcXDI1M1xcMjU1XFwyNTRcXDI1NVxcMDE0XFwwMDBcXDI1NVxcMjU1XCI7XG4gIExleGluZy5sZXhfYmFja3RyayA9XG4gICBcIlxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMjZcXDAwMFxcMjU1XFwyNTVcXDAyMlxcMDAwXFwyNTVcXDI1NVxcMDI2XFwwMDBcXDAxN1xcMDAwXFxcbiAgICBcXDAxN1xcMDAwXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDE4XFwwMDBcXDI1NVxcMjU1XFwwMThcXDAwMFxcMjU1XFwyNTVcXDAxOFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAyNVxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAzXFwwMDBcXDI1NVxcMjU1XCI7XG4gIExleGluZy5sZXhfZGVmYXVsdCA9XG4gICBcIlxcMDAxXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDc5XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OVxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4NlxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwODlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXCI7XG4gIExleGluZy5sZXhfdHJhbnMgPVxuICAgXCJcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDA0XFwwMDBcXDAwM1xcMDAwXFwwMDBcXDAwMFxcMDA0XFwwMDBcXDAwNFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDA0XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDRcXDAwMFxcMDAwXFwwMDBcXDAwNlxcMDAwXFwwMDRcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDE5XFwwMDBcXDAxOFxcMDAwXFwwMDBcXDAwMFxcMDEwXFwwMDBcXDAxNVxcMDAwXFwwMTNcXDAwMFxcMDcxXFwwMDBcXDAwMlxcMDAwXFxcbiAgICBcXDAwN1xcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcXG4gICAgXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAxNFxcMDAwXFwwODdcXDAwMFxcMDE3XFwwMDBcXDA5M1xcMDAwXFwwMTZcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDg2XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMTFcXDAwMFxcMDU5XFwwMDBcXDA3N1xcMDAwXFwwMDBcXDAwMFxcMDc3XFwwMDBcXDAwOVxcMDAwXFwwMzhcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwMDBcXDAwMFxcMDIxXFwwMDBcXDAwMFxcMDAwXFwwMjBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwNjlcXDAwMFxcMDM0XFwwMDBcXDAzMFxcMDAwXFwwNTBcXDAwMFxcMDcwXFwwMDBcXDAyNVxcMDAwXFwwMjlcXDAwMFxcXG4gICAgXFwwMzNcXDAwMFxcMDEyXFwwMDBcXDA2MFxcMDAwXFwwNDNcXDAwMFxcMDMxXFwwMDBcXDAzNlxcMDAwXFwwMjRcXDAwMFxcMDUzXFwwMDBcXFxuICAgIFxcMDUxXFwwMDBcXDAzOFxcMDAwXFwwMjdcXDAwMFxcMDMyXFwwMDBcXDAyNlxcMDAwXFwwMjhcXDAwMFxcMDM1XFwwMDBcXDAzN1xcMDAwXFxcbiAgICBcXDA0NFxcMDAwXFwwNDJcXDAwMFxcMDQ1XFwwMDBcXDAyM1xcMDAwXFwwNDZcXDAwMFxcMDIyXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNDdcXDAwMFxcMDcxXFwwMDBcXFxuICAgIFxcMDgwXFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFxcbiAgICBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwN1xcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcXG4gICAgXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDA0OFxcMDAwXFwwNzBcXDAwMFxcMDQ5XFwwMDBcXFxuICAgIFxcMDQzXFwwMDBcXDAzOFxcMDAwXFwwNTJcXDAwMFxcMDU0XFwwMDBcXDA1NVxcMDAwXFwwNTZcXDAwMFxcMDU3XFwwMDBcXDA1OFxcMDAwXFxcbiAgICBcXDA1MlxcMDAwXFwwNjNcXDAwMFxcMDYxXFwwMDBcXDA2MlxcMDAwXFwwNDBcXDAwMFxcMDY0XFwwMDBcXDA2NVxcMDAwXFwwNjZcXDAwMFxcXG4gICAgXFwwNjdcXDAwMFxcMDY4XFwwMDBcXDA2MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXFxuICAgIFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwMDBcXDAwMFxcMDcwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc4XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDQxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAzOVxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFxcbiAgICBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc1XFwwMDBcXDAwMFxcMDAwXFwwNzVcXDAwMFxcMDczXFwwMDBcXFxuICAgIFxcMDA1XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFxcbiAgICBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcXG4gICAgXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXFxuICAgIFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3M1xcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3OVxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwOTFcXDAwMFxcMDAwXFwwMDBcXDA4MVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDkyXFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwODJcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OFxcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDAwMFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMDg1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDA5MFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFwiO1xuICBMZXhpbmcubGV4X2NoZWNrID1cbiAgIFwiXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwNFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAwNFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDA0XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwN1xcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAyXFwwMDBcXDAwMFxcMDAwXFwwOTJcXDAwMFxcMDAwXFwwMDBcXDA4NlxcMDAwXFxcbiAgICBcXDAwMlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDA3XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAxMFxcMDAwXFwwNzBcXDAwMFxcMjU1XFwyNTVcXDA3MFxcMDAwXFwwMDBcXDAwMFxcMDY5XFwwMDBcXFxuICAgIFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFxcbiAgICBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDA5XFwwMDBcXDAyNFxcMDAwXFwwMjVcXDAwMFxcMDM5XFwwMDBcXDAwN1xcMDAwXFwwMDBcXDAwMFxcMDI4XFwwMDBcXFxuICAgIFxcMDMyXFwwMDBcXDAwMFxcMDAwXFwwMTBcXDAwMFxcMDQyXFwwMDBcXDAzMFxcMDAwXFwwMzVcXDAwMFxcMDAwXFwwMDBcXDAxMVxcMDAwXFxcbiAgICBcXDAxMlxcMDAwXFwwMzRcXDAwMFxcMDI2XFwwMDBcXDAzMVxcMDAwXFwwMDBcXDAwMFxcMDI3XFwwMDBcXDAyNFxcMDAwXFwwMzZcXDAwMFxcXG4gICAgXFwwNDBcXDAwMFxcMDQxXFwwMDBcXDA0NFxcMDAwXFwwMDBcXDAwMFxcMDQ1XFwwMDBcXDAwMFxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXFxuICAgIFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFxcbiAgICBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcXG4gICAgXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXFxuICAgIFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDQ2XFwwMDBcXDAwOFxcMDAwXFxcbiAgICBcXDAwNlxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcXG4gICAgXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXFxuICAgIFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwNDdcXDAwMFxcMDA4XFwwMDBcXDA0OFxcMDAwXFxcbiAgICBcXDA0OVxcMDAwXFwwNTBcXDAwMFxcMDUxXFwwMDBcXDA1M1xcMDAwXFwwNTRcXDAwMFxcMDU1XFwwMDBcXDA1NlxcMDAwXFwwNTdcXDAwMFxcXG4gICAgXFwwNThcXDAwMFxcMDU5XFwwMDBcXDA2MFxcMDAwXFwwNjFcXDAwMFxcMDEzXFwwMDBcXDA2M1xcMDAwXFwwNjRcXDAwMFxcMDY1XFwwMDBcXFxuICAgIFxcMDY2XFwwMDBcXDA2N1xcMDAwXFwwNjhcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFxcbiAgICBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMjU1XFwyNTVcXDAwOFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwNlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAxM1xcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMTNcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcXG4gICAgXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3M1xcMDAwXFwyNTVcXDI1NVxcMDczXFwwMDBcXDA3MlxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcXG4gICAgXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXFxuICAgIFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFxcbiAgICBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzJcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFxcbiAgICBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzhcXDAwMFxcMDg2XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDA3OFxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDg4XFwwMDBcXDI1NVxcMjU1XFwwNzlcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzhcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDA3OFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwNlxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwwNzhcXDAwMFxcMjU1XFwyNTVcXDA4OFxcMDAwXFwyNTVcXDI1NVxcMDc4XFwwMDBcXDI1NVxcMjU1XFwwNzhcXDAwMFxcMDc4XFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDgyXFwwMDBcXDA4MlxcMDAwXFxcbiAgICBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzlcXDAwMFxcMDgyXFwwMDBcXFxuICAgIFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODNcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4MlxcMDAwXFxcbiAgICBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwyNTVcXDI1NVxcMDgzXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwODhcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcIjtcbiAgTGV4aW5nLmxleF9iYXNlX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9iYWNrdHJrX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9kZWZhdWx0X2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF90cmFuc19jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfY2hlY2tfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X2NvZGUgPVxuICAgXCJcIjtcbn1cblxubGV0IHJlYyByZWFkIGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX3JlYyBsZXhidWYgMFxuYW5kIF9fb2NhbWxfbGV4X3JlYWRfcmVjIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNTcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQk9PTCB0cnVlIClcbiMgMjcxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMSAtPlxuIyA1OSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBCT09MIGZhbHNlIClcbiMgMjc2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMiAtPlxuIyA2MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBOVUxMIClcbiMgMjgxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMyAtPlxuIyA2MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBPUyApXG4jIDI4NiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDQgLT5cbiMgNjUgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggT0UgKVxuIyAyOTEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA1IC0+XG4jIDY3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIEFTIClcbiMgMjk2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgNiAtPlxuIyA2OSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBBRSApXG4jIDMwMSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDcgLT5cbiMgNzEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIGlmIENvbXBsaWFuY2UubGV4X3R1cGxlIFRTIHRoZW4gVFNcbiAgICAgIGVsc2UgTGV4eGVyX3V0aWxzLmxleF9lcnJvciAoXCJ1bmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgXiAoTGV4aW5nLmxleGVtZSBsZXhidWYpIF4gXCInXCIpXG4gICAgKVxuIyAzMDkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA4IC0+XG4jIDc2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBpZiBDb21wbGlhbmNlLmxleF90dXBsZSBURSB0aGVuIFRFXG4gICAgICBlbHNlIExleHhlcl91dGlscy5sZXhfZXJyb3IgKFwidW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiIF4gKExleGluZy5sZXhlbWUgbGV4YnVmKSBeIFwiJ1wiKVxuICAgIClcbiMgMzE3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgOSAtPlxuIyA4MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgaWYgQ29tcGxpYW5jZS5sZXhfdmFyaWFudCBWUyB0aGVuIFZTXG4gICAgICBlbHNlIExleHhlcl91dGlscy5sZXhfZXJyb3IgKFwidW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiIF4gKExleGluZy5sZXhlbWUgbGV4YnVmKSBeIFwiJ1wiKVxuICAgIClcbiMgMzI1IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTAgLT5cbiMgODYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIGlmIENvbXBsaWFuY2UubGV4X3ZhcmlhbnQgVkUgdGhlbiBWRVxuICAgICAgZWxzZSBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIChcInVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiBeIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikgXiBcIidcIilcbiAgICApXG4jIDMzMyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDExIC0+XG4jIDkxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENPTU1BIClcbiMgMzM4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTIgLT5cbiMgOTMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ09MT04gKVxuIyAzNDMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxMyAtPlxuIyA5NSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDb21wbGlhbmNlLmxleF9udW1iZXIgTkVHSU5GSU5JVFkgKVxuIyAzNDggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxNCAtPlxuIyA5NyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDb21wbGlhbmNlLmxleF9udW1iZXIgSU5GSU5JVFkgKVxuIyAzNTMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxNSAtPlxuIyA5OSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDb21wbGlhbmNlLmxleF9udW1iZXIgSU5GSU5JVFkgKVxuIyAzNTggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxNiAtPlxuIyAxMDEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ29tcGxpYW5jZS5sZXhfbnVtYmVyIE5BTiApXG4jIDM2MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE3IC0+XG4jIDEwMyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgbWF0Y2ggTGV4eGVyX3V0aWxzLnN0cmluZzJudW0gKExleGluZy5sZXhlbWUgbGV4YnVmKSB3aXRoXG4gICAgICB8IElOVCBfIGFzIHRvayAtPiBDb21wbGlhbmNlLmxleF9pbnRlZ2VyIHRva1xuICAgICAgfCBMQVJHRUlOVCBfIGFzIHRvayAtPiBDb21wbGlhbmNlLmxleF9sYXJnZWludCB0b2tcbiAgICAgIHwgdG9rIC0+IHRva1xuICAgIClcbiMgMzczIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTggLT5cbiMgMTEwIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENvbXBsaWFuY2UubGV4X251bWJlciAoRkxPQVQgKGZsb2F0X29mX3N0cmluZyAoTGV4aW5nLmxleGVtZSBsZXhidWYpKSkgKVxuIyAzNzggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxOSAtPlxuIyAxMTIgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggU1RSSU5HIFwiXCIgKVxuIyAzODMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyMCAtPlxubGV0XG4jIDExMyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNcbiMgMzg5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuPSBMZXhpbmcuc3ViX2xleGVtZSBsZXhidWYgKGxleGJ1Zi5MZXhpbmcubGV4X3N0YXJ0X3BvcyArIDEpIChsZXhidWYuTGV4aW5nLmxleF9jdXJyX3BvcyArIC0xKSBpblxuIyAxMTQgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggU1RSSU5HIChMZXh4ZXJfdXRpbHMudW5lc2NhcGVfc3RyaW5nIHMpIClcbiMgMzkzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjEgLT5cbiMgMTE2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIEVPRiApXG4jIDM5OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIyIC0+XG4jIDExOCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCByZWFkIGxleGJ1ZiApXG4jIDQwMyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIzIC0+XG4jIDEyMCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBMZXh4ZXJfdXRpbHMudXBkYXRlX3BvcyBsZXhidWY7IHJlYWQgbGV4YnVmOyApXG4jIDQwOCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDI0IC0+XG4jIDEyMiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgbWF0Y2ggQ29tcGxpYW5jZS5jb21tZW50X2NoZWNrICgpIHdpdGhcbiAgICAgIHwgT2sgKCkgLT4gcmVhZF9jb21tZW50IGxleGJ1ZjsgcmVhZCBsZXhidWZcbiAgICAgIHwgRXJyb3IgZXJyIC0+ICBDT01QTElBTkNFX0VSUk9SIGVyclxuICAgIClcbiMgNDE3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjUgLT5cbiMgMTI4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBtYXRjaCBDb21wbGlhbmNlLmNvbW1lbnRfY2hlY2sgKCkgd2l0aFxuICAgICAgfCBPayAoKSAtPiByZWFkIGxleGJ1ZlxuICAgICAgfCBFcnJvciBlcnIgLT4gIENPTVBMSUFOQ0VfRVJST1IgZXJyXG4gICAgKVxuIyA0MjYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyNiAtPlxuIyAxMzQgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggTGV4eGVyX3V0aWxzLmxleF9lcnJvciAoXCJ1bmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgXiAoTGV4aW5nLmxleGVtZSBsZXhidWYpIF4gXCInXCIpIClcbiMgNDMxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX3JlYyBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfY29tbWVudCBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9jb21tZW50X3JlYyBsZXhidWYgODhcbmFuZCBfX29jYW1sX2xleF9yZWFkX2NvbW1lbnRfcmVjIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgMTM5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoICgpIClcbiMgNDQzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMSAtPlxuIyAxNDEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggTGV4eGVyX3V0aWxzLnVwZGF0ZV9wb3MgbGV4YnVmOyByZWFkX2NvbW1lbnQgbGV4YnVmIClcbiMgNDQ4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMiAtPlxuIyAxNDMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggTGV4eGVyX3V0aWxzLmxleF9lcnJvciBcInVuZXhwZWN0ZWQgRU9GIGluIGNvbW1lbnRcIiApXG4jIDQ1MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDMgLT5cbiMgMTQ1IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIHJlYWRfY29tbWVudCBsZXhidWYgKVxuIyA0NTggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfY29tbWVudF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbjs7XG5cbiMgMTQ3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiBcbiAgZW5kXG5cbiMgNDY5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuIiwibW9kdWxlIFlvanNvbiA9IFN0ZC5Zb2pzb25cbm9wZW4gQnJyXG5cbnR5cGUgbWV0aG9kJyA9IEdldCB8IFBvc3RcblxubGV0IGpzdHJfb2ZfbWV0aG9kID0gZnVuY3Rpb24gR2V0IC0+IEpzdHIudiBcIkdFVFwiIHwgUG9zdCAtPiBKc3RyLnYgXCJQT1NUXCJcblxubW9kdWxlIFR5cGVzID0gc3RydWN0XG4gIHR5cGUgb3JkZXIgPSBBc2NlbmRpbmcgfCBEZXNjZW5kaW5nIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHNvcnQgPVxuICAgIHwgQWxidW1cbiAgICB8IEFsYnVtQXJ0aXN0XG4gICAgfCBBcnRpc3RcbiAgICB8IEJ1ZGdldFxuICAgIHwgQ29tbXVuaXR5UmF0aW5nXG4gICAgfCBDcml0aWNSYXRpbmdcbiAgICB8IERhdGVDcmVhdGVkXG4gICAgfCBEYXRlUGxheWVkXG4gICAgfCBQbGF5Q291bnRcbiAgICB8IFByZW1pZXJlRGF0ZVxuICAgIHwgUHJvZHVjdGlvblllYXJcbiAgICB8IFNvcnROYW1lXG4gICAgfCBSYW5kb21cbiAgICB8IFJldmVudWVcbiAgICB8IFJ1bnRpbWVcbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuZW5kXG5cbnR5cGUgdXNlciA9IHtcbiAgbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJOYW1lXCJdXG4gIHNlcnZlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJTZXJ2ZXJJZFwiXVxuICBzZXJ2ZXJfbmFtZSA6IHN0cmluZyBvcHRpb247IFtAZGVmYXVsdCBOb25lXSBbQGtleSBcIlNlcnZlck5hbWVcIl1cbiAgaWQgOiBzdHJpbmc7IFtAa2V5IFwiSWRcIl1cbn1cbltAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxubW9kdWxlIHR5cGUgUXVlcnkgPSBzaWdcbiAgdHlwZSBwYXRoX3BhcmFtc1xuICB0eXBlIHBhcmFtcyBbQEBkZXJpdmluZyB5b2pzb25dXG4gIHR5cGUgcmVzcG9uc2UgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHZhbCBtZXRob2QnIDogbWV0aG9kJ1xuICB2YWwgZW5kcG9pbnQgOiBwYXRoX3BhcmFtcyAtPiBzdHJpbmdcbmVuZFxuXG5tb2R1bGUgQXV0aGVudGljYXRlX2J5X25hbWUgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcblxuICB0eXBlIHBhcmFtcyA9IHsgdXNlcm5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiVXNlcm5hbWVcIl0gcHcgOiBzdHJpbmcgW0BrZXkgXCJQd1wiXSB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHJlc3BvbnNlID0ge1xuICAgIHVzZXIgOiB1c2VyOyBbQGtleSBcIlVzZXJcIl1cbiAgICBhY2Nlc3NfdG9rZW4gOiBzdHJpbmc7IFtAa2V5IFwiQWNjZXNzVG9rZW5cIl1cbiAgICBzZXJ2ZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVySWRcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgbGV0IG1ldGhvZCcgPSBQb3N0XG4gIGxldCBlbmRwb2ludCBfID0gXCIvVXNlcnMvQXV0aGVudGljYXRlQnlOYW1lXCJcbmVuZFxuXG5tb2R1bGUgSXRlbSA9IHN0cnVjdFxuICB0eXBlIGltYWdlX2JsdXJfaGFzaCA9IChzdHJpbmcgKiBzdHJpbmcpIGxpc3RcblxuICBsZXQgaW1hZ2VfYmx1cl9oYXNoX29mX3lvanNvbiB5ID1cbiAgICBsZXQgYXNzb2MgPSBZb2pzb24uU2FmZS5VdGlsLnRvX2Fzc29jIHkgaW5cbiAgICBMaXN0Lm1hcCAoZnVuIChrZXksIHYpIC0+IChrZXksIFlvanNvbi5TYWZlLlV0aWwudG9fc3RyaW5nIHYpKSBhc3NvY1xuXG4gIGxldCB5b2pzb25fb2ZfaW1hZ2VfYmx1cl9oYXNoIGkgOiBZb2pzb24uU2FmZS50ID1cbiAgICBsZXQgYXNzb2MgPSBMaXN0Lm1hcCAoZnVuIChrZXksIHYpIC0+IChrZXksIGBTdHJpbmcgdikpIGkgaW5cbiAgICBgQXNzb2MgYXNzb2NcblxuICB0eXBlIGltYWdlX2JsdXJfaGFzaGVzID0ge1xuICAgIHByaW1hcnkgOiBpbWFnZV9ibHVyX2hhc2ggb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwiUHJpbWFyeVwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICB0eXBlIHR5cGVfID1cbiAgICB8IEFnZ3JlZ2F0ZUZvbGRlclxuICAgIHwgQXVkaW9cbiAgICB8IEF1ZGlvQm9va1xuICAgIHwgQmFzZVBsdWdpbkZvbGRlclxuICAgIHwgQm9va1xuICAgIHwgQm94U2V0XG4gICAgfCBDaGFubmVsXG4gICAgfCBDaGFubmVsRm9sZGVySXRlbVxuICAgIHwgQ29sbGVjdGlvbkZvbGRlclxuICAgIHwgRXBpc29kZVxuICAgIHwgRm9sZGVyXG4gICAgfCBHZW5yZVxuICAgIHwgTGl2ZVR2Q2hhbm5lbFxuICAgIHwgTGl2ZVR2UHJvZ3JhbVxuICAgIHwgTWFudWFsUGxheWxpc3RzRm9sZGVyXG4gICAgfCBNb3ZpZVxuICAgIHwgTXVzaWNBbGJ1bVxuICAgIHwgTXVzaWNBcnRpc3RcbiAgICB8IE11c2ljR2VucmVcbiAgICB8IE11c2ljVmlkZW9cbiAgICB8IFBlcnNvblxuICAgIHwgUGhvdG9cbiAgICB8IFBob3RvQWxidW1cbiAgICB8IFBsYXlsaXN0XG4gICAgfCBQbGF5bGlzdHNGb2xkZXJcbiAgICB8IFByb2dyYW1cbiAgICB8IFJlY29yZGluZ1xuICAgIHwgU2Vhc29uXG4gICAgfCBTZXJpZXNcbiAgICB8IFN0dWRpb1xuICAgIHwgVHJhaWxlclxuICAgIHwgVHZDaGFubmVsXG4gICAgfCBUdlByb2dyYW1cbiAgICB8IFVzZXJSb290Rm9sZGVyXG4gICAgfCBVc2VyVmlld1xuICAgIHwgVmlkZW9cbiAgICB8IFllYXJcbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgZmllbGQgPVxuICAgIHwgQWlyVGltZVxuICAgIHwgQmFzaWNTeW5jSW5mb1xuICAgIHwgQ2FuRGVsZXRlXG4gICAgfCBDYW5Eb3dubG9hZFxuICAgIHwgQ2hhbm5lbEltYWdlXG4gICAgfCBDaGFubmVsSW5mb1xuICAgIHwgQ2hhcHRlcnNcbiAgICB8IENoaWxkQ291bnRcbiAgICB8IEN1bXVsYXRpdmVSdW5UaW1lVGlja3NcbiAgICB8IEN1c3RvbVJhdGluZ1xuICAgIHwgRGF0ZUNyZWF0ZWRcbiAgICB8IERhdGVMYXN0TWVkaWFBZGRlZFxuICAgIHwgRGF0ZUxhc3RSZWZyZXNoZWRcbiAgICB8IERhdGVMYXN0U2F2ZWRcbiAgICB8IERpc3BsYXlQcmVmZXJlbmNlc0lkXG4gICAgfCBFbmFibGVNZWRpYVNvdXJjZURpc3BsYXlcbiAgICB8IEV0YWdcbiAgICB8IEV4dGVybmFsRXRhZ1xuICAgIHwgRXh0ZXJuYWxTZXJpZXNJZFxuICAgIHwgRXh0ZXJuYWxVcmxzXG4gICAgfCBFeHRyYUlkc1xuICAgIHwgR2VucmVzXG4gICAgfCBIZWlnaHRcbiAgICB8IEhvbWVQYWdlVXJsXG4gICAgfCBJbmhlcml0ZWRQYXJlbnRhbFJhdGluZ1ZhbHVlXG4gICAgfCBJc0hEXG4gICAgfCBJdGVtQ291bnRzXG4gICAgfCBMb2NhbFRyYWlsZXJDb3VudFxuICAgIHwgTWVkaWFTb3VyY2VDb3VudFxuICAgIHwgTWVkaWFTb3VyY2VzXG4gICAgfCBNZWRpYVN0cmVhbXNcbiAgICB8IE9yaWdpbmFsVGl0bGVcbiAgICB8IE92ZXJ2aWV3XG4gICAgfCBQYXJlbnRJZFxuICAgIHwgUGF0aFxuICAgIHwgUGVvcGxlXG4gICAgfCBQbGF5QWNjZXNzXG4gICAgfCBQcmVzZW50YXRpb25VbmlxdWVLZXlcbiAgICB8IFByaW1hcnlJbWFnZUFzcGVjdFJhdGlvXG4gICAgfCBQcm9kdWN0aW9uTG9jYXRpb25zXG4gICAgfCBQcm92aWRlcklkc1xuICAgIHwgUmVjdXJzaXZlSXRlbUNvdW50XG4gICAgfCBSZWZyZXNoU3RhdGVcbiAgICB8IFJlbW90ZVRyYWlsZXJzXG4gICAgfCBTY3JlZW5zaG90SW1hZ2VUYWdzXG4gICAgfCBTZWFzb25Vc2VyRGF0YVxuICAgIHwgU2VyaWVzUHJlc2VudGF0aW9uVW5pcXVlS2V5XG4gICAgfCBTZXJpZXNQcmltYXJ5SW1hZ2VcbiAgICB8IFNlcmllc1N0dWRpb1xuICAgIHwgU2VydmljZU5hbWVcbiAgICB8IFNldHRpbmdzXG4gICAgfCBTb3J0TmFtZVxuICAgIHwgU3BlY2lhbEVwaXNvZGVOdW1iZXJzXG4gICAgfCBTcGVjaWFsRmVhdHVyZUNvdW50XG4gICAgfCBTdHVkaW9zXG4gICAgfCBTeW5jSW5mb1xuICAgIHwgVGFnbGluZXNcbiAgICB8IFRhZ3NcbiAgICB8IFRoZW1lU29uZ0lkc1xuICAgIHwgVGhlbWVWaWRlb0lkc1xuICAgIHwgV2lkdGhcbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gICgqIFRoZSBbVHlwZV0gZmllbGQgaXMgYWN0dWFsbHkgYSBqc29uIHN0cmluZyBidXQgd2Ugd2FudCB0byBzZWUgaXQgYXMgYVxuICAgICB2YXJpYW50ICh3aGljaCBpcyBhIGxpc3Qgb2Ygb25lIHN0cmluZykgKilcbiAgdHlwZSB0eXBlX3N0ciA9IHR5cGVfXG5cbiAgbGV0IHR5cGVfc3RyX29mX3lvanNvbiBqID1cbiAgICBsZXQgcyA9IFlvanNvbi5TYWZlLlV0aWwudG9fc3RyaW5nIGogaW5cbiAgICB0eXBlX19vZl95b2pzb24gKGBMaXN0IFsgYFN0cmluZyBzIF0pXG5cbiAgbGV0IHlvanNvbl9vZl90eXBlX3N0ciB0cyA9XG4gICAgbWF0Y2ggeW9qc29uX29mX3R5cGVfIHRzIHdpdGggYExpc3QgWyBqc29uIF0gLT4ganNvbiB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgdHlwZSB0ID0ge1xuICAgIG5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiTmFtZVwiXVxuICAgIHNvcnRfbmFtZSA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJTb3J0TmFtZVwiXVxuICAgIGlkIDogc3RyaW5nOyBbQGtleSBcIklkXCJdXG4gICAgcGF0aCA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJQYXRoXCJdXG4gICAgYWxidW1faWQgOiBzdHJpbmcgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwiQWxidW1JZFwiXVxuICAgIHBhcmVudF9pZCA6IHN0cmluZyBvcHRpb24gb3B0aW9uO1xuICAgICAgICAoKiBbUGFyZW50SWRdIG1pZ2h0IGFic2VudCwgW251bGxdLCBvciBhIHN0cmluZyAqKVxuICAgICAgICBbQHlvanNvbi5vcHRpb25dXG4gICAgICAgIFtAa2V5IFwiUGFyZW50SWRcIl1cbiAgICBzZXJ2ZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVySWRcIl1cbiAgICBpbWFnZV9ibHVyX2hhc2hlcyA6IGltYWdlX2JsdXJfaGFzaGVzOyBbQGtleSBcIkltYWdlQmx1ckhhc2hlc1wiXVxuICAgIHR5cGVfIDogdHlwZV9zdHI7IFtAa2V5IFwiVHlwZVwiXVxuICAgIGNvbGxlY3Rpb25fdHlwZSA6IHN0cmluZyBvcHRpb247XG4gICAgICAgIFtAZGVmYXVsdCBOb25lXSBbQHlvanNvbl9kcm9wX2RlZmF1bHQgKCA9ICldIFtAa2V5IFwiQ29sbGVjdGlvblR5cGVcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5lbmRcblxubW9kdWxlIEl0ZW1zID0gc3RydWN0XG4gIHR5cGUgcGF0aF9wYXJhbXMgPSB1bml0XG5cbiAgdHlwZSBwYXJhbXMgPSB7XG4gICAgaWRzIDogc3RyaW5nIGxpc3Q7IFtAZGVmYXVsdCBbXV0gW0B5b2pzb25fZHJvcF9kZWZhdWx0ICggPSApXSBbQGtleSBcImlkc1wiXVxuICAgIHBhcmVudF9pZCA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJwYXJlbnRJZFwiXVxuICAgIHVzZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwidXNlcklkXCJdXG4gICAgZmllbGRzIDogSXRlbS5maWVsZCBsaXN0O1xuICAgIGluY2x1ZGVfaXRlbV90eXBlcyA6IEl0ZW0udHlwZV8gbGlzdDsgW0BrZXkgXCJpbmNsdWRlSXRlbVR5cGVzXCJdXG4gICAgc3RhcnRfaW5kZXggOiBpbnQgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwic3RhcnRJbmRleFwiXVxuICAgIGxpbWl0IDogaW50IG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXVxuICAgIHNvcnRfb3JkZXIgOiBUeXBlcy5vcmRlciBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJzb3J0T3JkZXJcIl1cbiAgICBzb3J0X2J5IDogVHlwZXMuc29ydCBsaXN0OyBbQGtleSBcInNvcnRCeVwiXVxuICAgIHJlY3Vyc2l2ZSA6IGJvb2w7XG4gICAgZW5hYmxlX3VzZXJfZGF0YSA6IGJvb2w7IFtAa2V5IFwiZW5hYmxlVXNlckRhdGFcIl1cbiAgICBlbmFibGVfaW1hZ2VzIDogYm9vbDsgW0BrZXkgXCJlbmFibGVJbWFnZXNcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSByZXNwb25zZSA9IHtcbiAgICBpdGVtcyA6IEl0ZW0udCBsaXN0OyBbQGtleSBcIkl0ZW1zXCJdXG4gICAgdG90YWxfcmVjb3JkX2NvdW50IDogaW50OyBbQGtleSBcIlRvdGFsUmVjb3JkQ291bnRcIl1cbiAgICBzdGFydF9pbmRleCA6IGludDsgW0BrZXkgXCJTdGFydEluZGV4XCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIGxldCBtZXRob2QnID0gR2V0XG4gIGxldCBlbmRwb2ludCBfID0gXCIvSXRlbXNcIlxuZW5kXG5cbm1vZHVsZSBWaWV3cyA9IHN0cnVjdFxuICB0eXBlIHBhdGhfcGFyYW1zID0geyB1c2VyX2lkIDogc3RyaW5nIH1cblxuICB0eXBlIHBhcmFtcyA9IHtcbiAgICBpbmNsdWRlX2V4dGVybmFsX2NvbnRlbnQgOiBib29sOyBbQGtleSBcImluY2x1ZGVFeHRlcm5hbENvbnRlbnRcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSByZXNwb25zZSA9IHtcbiAgICBpdGVtcyA6IEl0ZW0udCBsaXN0OyBbQGtleSBcIkl0ZW1zXCJdXG4gICAgdG90YWxfcmVjb3JkX2NvdW50IDogaW50OyBbQGtleSBcIlRvdGFsUmVjb3JkQ291bnRcIl1cbiAgICBzdGFydF9pbmRleCA6IGludDsgW0BrZXkgXCJTdGFydEluZGV4XCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIGxldCBtZXRob2QnID0gR2V0XG4gIGxldCBlbmRwb2ludCBwcCA9IFByaW50Zi5zcHJpbnRmIFwiL1VzZXJzLyVzL1ZpZXdzXCIgcHAudXNlcl9pZFxuZW5kXG5cbm1vZHVsZSBWaXJ0dWFsX2ZvbGRlcnMgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcbiAgdHlwZSBwYXJhbXMgPSB1bml0IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHZpcnR1YWxfZm9sZGVyID0ge1xuICAgIG5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiTmFtZVwiXVxuICAgIGxvY2F0aW9ucyA6IHN0cmluZyBsaXN0OyBbQGtleSBcIkxvY2F0aW9uc1wiXVxuICAgIGl0ZW1faWQgOiBzdHJpbmc7IFtAa2V5IFwiSXRlbUlkXCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIHR5cGUgcmVzcG9uc2UgPSB2aXJ0dWFsX2ZvbGRlciBsaXN0IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICBsZXQgbWV0aG9kJyA9IEdldFxuICBsZXQgZW5kcG9pbnQgXyA9IFByaW50Zi5zcHJpbnRmIFwiL0xpYnJhcnkvVmlydHVhbEZvbGRlcnNcIlxuZW5kXG5cbm1vZHVsZSBTeXN0ZW0gPSBzdHJ1Y3RcbiAgbW9kdWxlIEluZm8gPSBzdHJ1Y3RcbiAgICB0eXBlIHBhdGhfcGFyYW1zID0gdW5pdFxuICAgIHR5cGUgcGFyYW1zID0gdW5pdCBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgICB0eXBlIHJlc3BvbnNlID0ge1xuICAgICAgbG9jYWxfYWRkcmVzcyA6IHN0cmluZyBvcHRpb247IFtAZGVmYXVsdCBOb25lXSBbQGtleSBcIkxvY2FsQWRyZXNzXCJdXG4gICAgICBzZXJ2ZXJfbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJTZXJ2ZXJOYW1lXCJdXG4gICAgICBwcm9kdWN0X25hbWUgOiBzdHJpbmcgb3B0aW9uOyBbQGRlZmF1bHQgTm9uZV0gW0BrZXkgXCJQcm9kdWN0TmFtZVwiXVxuICAgICAgb3BlcmF0aW5nX3N5c3RlbSA6IHN0cmluZyBvcHRpb247IFtAZGVmYXVsdCBOb25lXSBbQGtleSBcIk9wZXJhdGluZ1N5c3RlbVwiXVxuICAgICAgaWQgOiBzdHJpbmc7IFtAa2V5IFwiSWRcIl1cbiAgICB9XG4gICAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gICAgbGV0IG1ldGhvZCcgPSBHZXRcbiAgICBsZXQgZW5kcG9pbnQgXyA9IFwiL1N5c3RlbS9JbmZvXCJcbiAgZW5kXG5lbmRcblxubGV0IGF1dGhvcml6YXRpb24gP3Rva2VuICgpID1cbiAgbGV0IHRva2VuID1cbiAgICBtYXRjaCB0b2tlbiB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgdCAtPiBQcmludGYuc3ByaW50ZiBcIiwgVG9rZW49JVNcIiB0XG4gIGluXG4gIFByaW50Zi5zcHJpbnRmXG4gICAgXCJNZWRpYUJyb3dzZXIgQ2xpZW50PVxcXCJPY2FtaXhcXFwiLCBEZXZpY2U9XFxcIkZpcmVmb3hcXFwiLCBEZXZpY2VJZD1cXFwiJXNcXFwiLCBcXFxuICAgICBWZXJzaW9uPVxcXCIwLjFcXFwiJXNcIlxuICAgIFwiYWJjZGVmXCIgdG9rZW5cblxubGV0IHJlcXVlc3QgKHR5cGUgcHAgcCByKSA/YmFzZV91cmwgP3Rva2VuID9oZWFkZXJzXG4gICAgKG1vZHVsZSBRIDogUXVlcnlcbiAgICAgIHdpdGggdHlwZSBwYXRoX3BhcmFtcyA9IHBwXG4gICAgICAgYW5kIHR5cGUgcGFyYW1zID0gcFxuICAgICAgIGFuZCB0eXBlIHJlc3BvbnNlID0gcikgKHBhcmFtcyA6IHApIChwYXRoX3BhcmFtcyA6IHBwKSA6IHIgRnV0Lm9yX2Vycm9yID1cbiAgbGV0IG9wZW4gQnJyX2lvLkZldGNoIGluXG4gIGxldCB1cmkgPVxuICAgIEpzdHIuKFxuICAgICAgVXJpLm9mX2pzdHIgP2Jhc2U6KE9wdGlvbi5tYXAgdiBiYXNlX3VybCkgKHYgKFEuZW5kcG9pbnQgcGF0aF9wYXJhbXMpKSlcbiAgICB8PiBSZXN1bHQuZ2V0X29rXG4gIGluXG4gIGxldCBhdXRob3JpemF0aW9uID0gYXV0aG9yaXphdGlvbiA/dG9rZW4gKCkgaW5cbiAgbGV0IGhlYWRlcnMgPVxuICAgIEhlYWRlcnMub2ZfYXNzb2MgP2luaXQ6aGVhZGVyc1xuICAgICAgSnN0ci5cbiAgICAgICAgW1xuICAgICAgICAgICh2IFwiY29udGVudC10eXBlXCIsIHYgXCJ0ZXh0L2pzb25cIik7XG4gICAgICAgICAgKHYgXCJYLUVtYnktQXV0aG9yaXphdGlvblwiLCB2IGF1dGhvcml6YXRpb24pO1xuICAgICAgICBdXG4gIGluXG4gIGxldCBtZXRob2QnID0ganN0cl9vZl9tZXRob2QgUS5tZXRob2QnIGluXG4gIGxldCBpbml0LCB1cmwgPVxuICAgIG1hdGNoIFEubWV0aG9kJyB3aXRoXG4gICAgfCBHZXQgLT5cbiAgICAgICAgbGV0IHBhcmFtcyA9XG4gICAgICAgICAgcGFyYW1zIHw+IFEueW9qc29uX29mX3BhcmFtcyB8PiBZb2pzb24uU2FmZS50b19zdHJpbmcgfD4gSnN0ci52XG4gICAgICAgICAgfD4gSnNvbi5kZWNvZGUgfD4gUmVzdWx0LmdldF9vayB8PiBVcmkuUGFyYW1zLm9mX29ialxuICAgICAgICBpblxuICAgICAgICBsZXQgdXJpX3dpdGhfcGFyYW1zID0gVXJpLndpdGhfcXVlcnlfcGFyYW1zIHVyaSBwYXJhbXMgaW5cbiAgICAgICAgKFJlcXVlc3QuaW5pdCB+aGVhZGVycyB+bWV0aG9kJyAoKSwgVXJpLnRvX2pzdHIgdXJpX3dpdGhfcGFyYW1zKVxuICAgIHwgUG9zdCAtPlxuICAgICAgICBsZXQgYm9keSA9XG4gICAgICAgICAgcGFyYW1zIHw+IFEueW9qc29uX29mX3BhcmFtcyB8PiBZb2pzb24uU2FmZS50b19zdHJpbmcgfD4gSnN0ci52XG4gICAgICAgICAgfD4gQm9keS5vZl9qc3RyXG4gICAgICAgIGluXG4gICAgICAgIChSZXF1ZXN0LmluaXQgfmhlYWRlcnMgfm1ldGhvZCcgfmJvZHkgKCksIFVyaS50b19qc3RyIHVyaSlcbiAgaW5cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KiByZXMgPSByZXF1ZXN0IEBAIFJlcXVlc3QudiB+aW5pdCB1cmwgaW5cbiAgbGV0KyBqc29uID0gUmVzcG9uc2UuYXNfYm9keSByZXMgfD4gQm9keS50ZXh0IGluXG4gIGxldCB5b2pzb24gPSBZb2pzb24uU2FmZS5mcm9tX3N0cmluZyAoSnN0ci50b19zdHJpbmcganNvbikgaW5cbiAgdHJ5IFEucmVzcG9uc2Vfb2ZfeW9qc29uIHlvanNvblxuICB3aXRoIGUgLT5cbiAgICBDb25zb2xlLmxvZyBbIFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBkZWNvZGluZyByZXNwb25zZTogXCI7IGpzb24gXTtcbiAgICBDb25zb2xlLmxvZyBbIGUgXTtcbiAgICByYWlzZSBlXG4iLCJvcGVuISBTdGRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyX2lvXG5tb2R1bGUgQXBpID0gRGF0YV9zb3VyY2UuSmVsbHlmaW5fYXBpXG5cbigqIFByb3Bvc2l0aW9uOlxuICAgLSBVc2UgcHJpbWFyeSBrZXkgdG8gcHJvdmlkZSBmaWx0ZXJpbmdcbiAgIC0gVXNlIGluZGV4IGtleXMgdG8gcHJvdmlkZSBzb3J0c1xuXG4gICBCaWcgcHJpbWFyeSBrZXlzIGRyaXZlIHRoZSBjb3N0IG9mIFtnZXRfYWxsX2tleXNdIHVwLlxuICAgV2UgY291bGQgZGVsZWdhdGUgc29tZSBmaWx0ZXJpbmcgdG8gdGhlIGluZGV4IGtleXMgaWYgbmVjZXNzYXJ5LlxuXG4gICAgV2UgY291bGQgYWxzbyB0cmllZCB0byBwcmUtcHJvY2VzcyBvciBjb21wcmVzcyB0aGUga2V5cyAqKVxuXG5sZXQgdF90b19qdiBlbmNvZGVyIHQgPVxuICBlbmNvZGVyIHQgfD4gWW9qc29uLlNhZmUudG9fc3RyaW5nIHw+IEpzdHIub2Zfc3RyaW5nIHw+IEJyci5Kc29uLmRlY29kZVxuICB8PiBSZXN1bHQuZ2V0X2V4blxuXG5sZXQganZfdG9fdCBkZWNvZGVyIGogPVxuICBsZXQganNvbiA9IEJyci5Kc29uLmVuY29kZSBqIGluXG4gIE9rIChKc3RyLnRvX3N0cmluZyBqc29uIHw+IFlvanNvbi5TYWZlLmZyb21fc3RyaW5nIHw+IGRlY29kZXIpXG5cbm1vZHVsZSBPcmRlcnJlZF9pdGVtcyA9IHN0cnVjdFxuICB0eXBlIHQgPSB7IGlkIDogaW50OyBpdGVtIDogc3RyaW5nIG9wdGlvbiB9IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICBtb2R1bGUgS2V5ID0gc3RydWN0XG4gICAgdHlwZSB0ID0gaW50XG5cbiAgICBsZXQgdG9fanYgayA9IEp2Lm9mX2ludCBrXG4gICAgbGV0IG9mX2p2IGogPSBKdi50b19pbnQgalxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5JZCBcImlkXCJcbiAgZW5kXG5cbiAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X2RhdGVfYWRkZWRcIlxuICBsZXQgdG9fanYgdCA9IHRfdG9fanYgeW9qc29uX29mX3QgdFxuICBsZXQgb2ZfanYgaiA9IGp2X3RvX3QgdF9vZl95b2pzb24gaiB8PiBSZXN1bHQuZ2V0X2V4blxuICBsZXQgZ2V0X2tleSB0ID0gdC5pZFxuZW5kXG5cbm1vZHVsZSBJdGVtcyA9IHN0cnVjdFxuICBvcGVuIERhdGFfc291cmNlLkplbGx5ZmluLkFwaVxuXG4gIHR5cGUgc29ydHMgPSB7IGRhdGVfYWRkZWQgOiBpbnQ7IHZpZXdzIDogc3RyaW5nIGxpc3Q7IHNvcnRfbmFtZSA6IHN0cmluZyB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHQgPSB7IHNvcnRzIDogc29ydHM7IGl0ZW0gOiBJdGVtLnQgfSBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgbGV0IGNvbXBhcmUgdCB0JyA9IFN0cmluZy5jb21wYXJlIHQuc29ydHMuc29ydF9uYW1lIHQnLnNvcnRzLnNvcnRfbmFtZVxuXG4gIG1vZHVsZSBLZXkgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBzdHJpbmcgKiBzdHJpbmcgKiBzdHJpbmcgbGlzdFxuXG4gICAgbGV0IHRvX2p2IChpZCwgc29ydF9uYW1lLCB2aWV3cykgPVxuICAgICAgbGV0IGlkID0gSnYub2Zfc3RyaW5nIGlkIGluXG4gICAgICBsZXQgc29ydF9uYW1lID0gSnYub2Zfc3RyaW5nIHNvcnRfbmFtZSBpblxuICAgICAgbGV0IHZpZXdzID0gSnYub2ZfbGlzdCBKdi5vZl9zdHJpbmcgdmlld3MgaW5cbiAgICAgIEp2Lm9mX2p2X2FycmF5IFt8IGlkOyBzb3J0X25hbWU7IHZpZXdzIHxdXG5cbiAgICBsZXQgb2ZfanYgaiA9XG4gICAgICBtYXRjaCBKdi50b19qdl9hcnJheSBqIHdpdGhcbiAgICAgIHwgW3wgaWQ7IHNvcnRfbmFtZTsgdmlld3MgfF0gLT5cbiAgICAgICAgICBsZXQgaWQgPSBKdi50b19zdHJpbmcgaWQgaW5cbiAgICAgICAgICBsZXQgc29ydF9uYW1lID0gSnYudG9fc3RyaW5nIHNvcnRfbmFtZSBpblxuICAgICAgICAgIGxldCB2aWV3cyA9IEp2LnRvX2xpc3QgSnYudG9fc3RyaW5nIHZpZXdzIGluXG4gICAgICAgICAgKGlkLCBzb3J0X25hbWUsIHZpZXdzKVxuICAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IHBhdGggPVxuICAgICAgSW5kZXhlZF9kYi5LZXlfcGF0aC4oXG4gICAgICAgIFMgW3wgSWQgXCJpdGVtLklkXCI7IElkIFwiaXRlbS5OYW1lXCI7IElkIFwic29ydHMudmlld3NcIiB8XSlcbiAgICAoKiBcIml0ZW0uSWQsaXRlbS5zb3J0cy5zb3J0X25hbWVcIiAqKVxuICAgICgqIHBjIDExMG1zIFwibGV0IHBhdGggPSBcIml0ZW0uSWRcIiopXG4gICAgICAgKCogcGMgMjE0bXMgXCJsZXQgcGF0aCA9IFwiaXRlbS5JZCwgaXRlbS5OYW1lXCIqKVxuICBlbmRcblxuICBtb2R1bGUgS2V5X2RhdGVfYWRkZWQgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBpbnRcblxuICAgIGxldCB0b19qdiBrID0gSnYub2ZfaW50IGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX2ludCBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwic29ydHMuZGF0ZV9hZGRlZFwiXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfaWQgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBzdHJpbmdcblxuICAgIGxldCB0b19qdiBrID0gSnYub2Zfc3RyaW5nIGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX3N0cmluZyBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwiaXRlbS5JZFwiXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfdmlld19raW5kID0gc3RydWN0XG4gICAgKCogdG9kbzogdXNlIGEgZW51bSBmb3Iga2luZHMgKilcbiAgICB0eXBlIHQgPSB7IHR5cGUnIDogc3RyaW5nOyB2aWV3cyA6IHN0cmluZyBsaXN0IH1cblxuICAgIGxldCB0b19qdiBfayA9IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IG9mX2p2IGogPVxuICAgICAgbWF0Y2ggSnYuKHRvX2p2X2FycmF5IGopIHdpdGhcbiAgICAgIHwgW3wgdHlwZSc7IHZpZXdzIHxdIC0+XG4gICAgICAgICAgeyB0eXBlJyA9IEp2LnRvX3N0cmluZyB0eXBlJzsgdmlld3MgPSBKdi4odG9fbGlzdCB0b19zdHJpbmcgdmlld3MpIH1cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5TIFt8IElkIFwiaXRlbS5UeXBlXCI7IElkIFwic29ydHMudmlld3NcIiB8XVxuICBlbmRcblxuICBtb2R1bGUgS2V5X3R5cGVfbmFtZSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IHsgY29sbGVjdGlvbl90eXBlIDogc3RyaW5nOyBzb3J0X25hbWUgOiBzdHJpbmcgfVxuXG4gICAgbGV0IHRvX2p2IF90ID0gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgb2ZfanYgaiA9XG4gICAgICBtYXRjaCBKdi4odG9fanZfYXJyYXkgaikgd2l0aFxuICAgICAgfCBbfCBjb2xsZWN0aW9uX3R5cGU7IHNvcnRfbmFtZSB8XSAtPlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25fdHlwZSA9IEp2LnRvX3N0cmluZyBjb2xsZWN0aW9uX3R5cGU7XG4gICAgICAgICAgICBzb3J0X25hbWUgPSBKdi50b19zdHJpbmcgc29ydF9uYW1lO1xuICAgICAgICAgIH1cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBwYXRoID1cbiAgICAgIEluZGV4ZWRfZGIuS2V5X3BhdGguUyBbfCBJZCBcIml0ZW0uQ29sbGVjdGlvblR5cGVcIjsgSWQgXCJzb3J0cy5zb3J0X25hbWVcIiB8XVxuICBlbmRcblxuICBsZXQgbmFtZSA9IFwiaXRlbXNcIlxuICBsZXQgdG9fanYgdCA9IHRfdG9fanYgeW9qc29uX29mX3QgdFxuICBsZXQgb2ZfanYgaiA9IGp2X3RvX3QgdF9vZl95b2pzb24gaiB8PiBSZXN1bHQuZ2V0X2V4blxuICBsZXQgZ2V0X2tleSB0ID0gKHQuc29ydHMuc29ydF9uYW1lLCB0Lml0ZW0uSXRlbS5pZCwgdC5zb3J0cy52aWV3cylcbmVuZFxuXG5tb2R1bGUgVmlydHVhbF9mb2xkZXIgPSBzdHJ1Y3RcbiAgb3BlbiBEYXRhX3NvdXJjZS5KZWxseWZpbl9hcGlcblxuICAoKiB0b2RvOiBtdWx0aXNlcnZlcjogd2Ugc2hvdWxkIGFkZCBhIHNlcnZlcl9pZCBrZXkgKilcbiAgdHlwZSB0ID0gVmlydHVhbF9mb2xkZXJzLnZpcnR1YWxfZm9sZGVyIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICBtb2R1bGUgS2V5ID0gc3RydWN0XG4gICAgdHlwZSB0ID0gc3RyaW5nXG5cbiAgICBsZXQgdG9fanYgayA9IEp2Lm9mX3N0cmluZyBrXG4gICAgbGV0IG9mX2p2IGogPSBKdi50b19zdHJpbmcgalxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5JZCBcIkl0ZW1JZFwiXG4gIGVuZFxuXG4gIGxldCBuYW1lID0gXCJ2aXJ0dWFsX2ZvbGRlcnNcIlxuICBsZXQgdG9fanYgdCA9IHRfdG9fanYgeW9qc29uX29mX3QgdFxuICBsZXQgb2ZfanYgaiA9IGp2X3RvX3QgdF9vZl95b2pzb24gaiB8PiBSZXN1bHQuZ2V0X2V4blxuICBsZXQgZ2V0X2tleSB0ID0gdC5WaXJ0dWFsX2ZvbGRlcnMuaXRlbV9pZFxuZW5kXG5cbm1vZHVsZSBPcmRlcnJlZF9pdGVtc19zdG9yZSA9IEluZGV4ZWRfZGIuTWFrZV9vYmplY3Rfc3RvcmUgKE9yZGVycmVkX2l0ZW1zKVxubW9kdWxlIEl0ZW1zX3N0b3JlID0gSW5kZXhlZF9kYi5NYWtlX29iamVjdF9zdG9yZSAoSXRlbXMpXG5tb2R1bGUgVmlydHVhbF9mb2xkZXJfc3RvcmUgPSBJbmRleGVkX2RiLk1ha2Vfb2JqZWN0X3N0b3JlIChWaXJ0dWFsX2ZvbGRlcilcblxubW9kdWxlIEl0ZW1zQnlEYXRlQWRkZWQgPVxuICBJbmRleGVkX2RiLk1ha2VfaW5kZXhcbiAgICAoc3RydWN0XG4gICAgICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfZGF0ZV9hZGRlZFwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X2RhdGVfYWRkZWQpXG5cbm1vZHVsZSBJdGVtc0J5Vmlld0FuZEtpbmQgPVxuICBJbmRleGVkX2RiLk1ha2VfaW5kZXhcbiAgICAoc3RydWN0XG4gICAgICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfdmlld19hbmRfa2luZFwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X3ZpZXdfa2luZClcblxubW9kdWxlIEl0ZW1zQnlJZCA9XG4gIEluZGV4ZWRfZGIuTWFrZV9pbmRleFxuICAgIChzdHJ1Y3RcbiAgICAgIGxldCBuYW1lID0gXCJpdGVtc19ieV9pZFwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X2lkKVxuXG5tb2R1bGUgSXRlbXNCeVR5cGVBbmROYW1lID1cbiAgSW5kZXhlZF9kYi5NYWtlX2luZGV4XG4gICAgKHN0cnVjdFxuICAgICAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X3R5cGVfYW5kX25hbWVcIlxuICAgIGVuZClcbiAgICAoSXRlbXMpXG4gICAgKEl0ZW1zLktleV90eXBlX25hbWUpXG4iLCJvcGVuISBTdGRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyXG5vcGVuIEJycl9pby5JbmRleGVkX2RiXG5tb2R1bGUgU291cmNlID0gRGF0YV9zb3VyY2UuSmVsbHlmaW5cbm1vZHVsZSBPSSA9IFN0b3Jlcy5PcmRlcnJlZF9pdGVtc19zdG9yZVxubW9kdWxlIEkgPSBTdG9yZXMuSXRlbXNfc3RvcmVcbm1vZHVsZSBWRiA9IFN0b3Jlcy5WaXJ0dWFsX2ZvbGRlcl9zdG9yZVxub3BlbiBTb3VyY2UuQXBpXG5cbigqIEl0ZW1zIEhpZXJhcmNoeVxuXG4gICBVc2VyUm9vdEZvbGRlciAoXCJNZWRpYSBGb2xkZXJzXCIgXCJlOWQ1MDc1YTU1NWMxY2JjMzk0ZWVjNGNlZjI5NTI3NFwiKVxuICAgICAgICAgICAgICAgICAgKEdldHMgdGhlIHJvb3QgZm9sZGVyIGZyb20gYSB1c2VyJ3MgbGlicmFyeS4gKVxuICAgXiBDb2xsZWN0aW9uRm9sZGVyIChcIk11c2ljTGliXCIgXCIxNTA4NDhjZDRmNDRiOWFlMzJlYzVhNzkzNGRlMzljZVwiKVxuXG4gICBBZ2dyZWdhdGVGb2xkZXIgKFwicm9vdFwiIFwiZjI3Y2FhMzdlNTE0MjIyNWNjZWRlZDQ4ZjY1NTM1MDJcIilcbiAgIF4gRm9sZGVyIChcIm1lZGlhXCIgXCI5MmZkZTcxZDBlYzU3N2I1MzFlN2IzNDI3YjIyM2JlZFwiKVxuICAgXiBGb2xkZXIrIDwtIE11c2ljQXJ0aXN0IDwtIE11c2ljQWxidW0gPC0gQXVkaW9cblxuICAgSmVsbHlmaW4gY29uc2lkZXJzIHRoYXQgRm9sZGVyIChcIm1lZGlhXCIgXCI5MmZkZTcxZDBlYzU3N2I1MzFlN2IzNDI3YjIyM2JlZFwiKSA9PSBDb2xsZWN0aW9uRm9sZGVyIChcIk11c2ljTGliXCIgXCIxNTA4NDhjZDRmNDRiOWFlMzJlYzVhNzkzNGRlMzljZVwiKVxuXG4gICBUaGlzIGVxdWFsaXR5IGNhbiBiZSByZXRyaXZlZCBieSBxdWVyeWluZyB0aGUgXCJWaXJ0dWFsRm9sZGVyc1wiIGFuZCBsb29rIGF0XG4gICB0aGUgbG9jYXRpb25zJyBwYXRocy4gVW5mb3J0dW5hdGVseSB0aGlzIGlzIG5vdCBhY2Nlc3NpYmxlIHRvIHVucHJpdmlsZWRnZWQgdXNlcnMuLi5cblxuICAgVG8gYWN0dWFsbHkga25vdyB3aGljaCBmb2xkZXJzIGFyZSBwYXJ0IG9mIGEgdXNlciB2aWV3IHdlIG5lZWQgdG8gcXVlcnkgdGhlXG4gICBpdGVtcyB0aGF0IGhhdmUgdGhpcyB2aWV3J3MgaWQgYXMgYSBbcGFyZW50SWRdLiBUaGUgYWN0dWFsIFtwYXJlbnRJZF0gb2ZcbiAgIHRoZXNlIGl0ZW1zIHdpbGwgYmUgZGlmZmVyZW50IGFuZCBhcmUgdGhlIGlkcyBhY3R1YWwgZm9sZGVycyB0aGF0XG4gICBjb25zdGl0dXRlIHRoaXMgdmlldy5cblxuICAgRm9yIHNpbXBsaWNpdHkgKD8pIHdlIGNvbnNpZGVyIHRoYXQgYW4gaXRlbSBpcyBwYXJ0IG9mIGEgdmlldyBpZiBpdHMgcGF0aCBpc1xuICAgcHJlZml4ZWQgYnkgb25lIG9mIHRoZSB2aWV3J3MgdmlydHVhbCBmb2xkZXIgbG9jYXRpb25zLlxuKilcblxubGV0IGNodW5rX3NpemUgPSA1MDBcbmxldCBpbmNsdWRlX2l0ZW1fdHlwZXMgPSBbIFNvdXJjZS5BcGkuSXRlbS5NdXNpY0FydGlzdDsgTXVzaWNBbGJ1bTsgQXVkaW8gXVxuXG5sZXQgZmV0Y2hfdG90YWxfaXRlbV9jb3VudCBzb3VyY2UgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQrIHJlcyA9XG4gICAgU291cmNlLnF1ZXJ5IHNvdXJjZVxuICAgICAgKG1vZHVsZSBTb3VyY2UuQXBpLkl0ZW1zKVxuICAgICAgU291cmNlLkFwaS5JdGVtcy5cbiAgICAgICAge1xuICAgICAgICAgICgqIHRvZG8gbWFrZSBzb3J0IGV4cGxpY2l0IChieSBkYXRlIGFkZGVkIGRhdGUpKilcbiAgICAgICAgICBpZHMgPSBbXTtcbiAgICAgICAgICBwYXJlbnRfaWQgPSBOb25lO1xuICAgICAgICAgIHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkO1xuICAgICAgICAgIGZpZWxkcyA9IFtdO1xuICAgICAgICAgIGluY2x1ZGVfaXRlbV90eXBlcztcbiAgICAgICAgICBzdGFydF9pbmRleCA9IE5vbmU7XG4gICAgICAgICAgbGltaXQgPSBTb21lIDA7XG4gICAgICAgICAgc29ydF9vcmRlciA9IFNvbWUgQXNjZW5kaW5nO1xuICAgICAgICAgIHNvcnRfYnkgPSBbIERhdGVDcmVhdGVkIF07XG4gICAgICAgICAgcmVjdXJzaXZlID0gdHJ1ZTtcbiAgICAgICAgICBlbmFibGVfdXNlcl9kYXRhID0gZmFsc2U7XG4gICAgICAgICAgZW5hYmxlX2ltYWdlcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAoKVxuICBpblxuICByZXMudG90YWxfcmVjb3JkX2NvdW50XG5cbnR5cGUgZGJfaW5mb3MgPSB7XG4gIGxhc3Rfa2V5IDogaW50IG9wdGlvbjtcbiAgbGFzdF92YWx1ZSA6IFN0b3Jlcy5PcmRlcnJlZF9pdGVtcy50IG9wdGlvbjtcbn1cblxubGV0IGdldF9kYl9pbmZvcyBpZGIgPVxuICBsZXQgaW5mb3MsIHNldF9pbmZvcyA9IEZ1dC5jcmVhdGUgKCkgaW5cbiAgbGV0IHRyYW5zYWN0aW9uID0gRGF0YWJhc2UudHJhbnNhY3Rpb24gWyAobW9kdWxlIE9JKSBdIH5tb2RlOlJlYWRvbmx5IGlkYiBpblxuICBsZXQgc3RvcmUgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBPSSkgdHJhbnNhY3Rpb24gaW5cbiAgbGV0IHJlcSA9IE9JLm9wZW5fY3Vyc29yIH5kaXJlY3Rpb246UHJldiBzdG9yZSBpblxuICBsZXQgbGFzdF9rZXkgPSByZWYgTm9uZSBpblxuICBsZXQgXyA9XG4gICAgUmVxdWVzdC5vbl9zdWNjZXNzIHJlcSB+ZjooZnVuIF8gcSAtPlxuICAgICAgICBtYXRjaCBSZXF1ZXN0LnJlc3VsdCBxIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IHNldF9pbmZvcyB7IGxhc3Rfa2V5ID0gIWxhc3Rfa2V5OyBsYXN0X3ZhbHVlID0gTm9uZSB9XG4gICAgICAgIHwgU29tZSBjdXJzb3IgLT4gKFxuICAgICAgICAgICAgaWYgT3B0aW9uLmlzX25vbmUgIWxhc3Rfa2V5IHRoZW5cbiAgICAgICAgICAgICAgbGFzdF9rZXkgOj0gT0kuQ3Vyc29yX3dpdGhfdmFsdWUua2V5IGN1cnNvcjtcbiAgICAgICAgICAgIG1hdGNoIE9JLkN1cnNvcl93aXRoX3ZhbHVlLnZhbHVlIGN1cnNvciB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgKHsgaXRlbSA9IFNvbWUgXzsgXyB9IGFzIGl0ZW0pIC0+XG4gICAgICAgICAgICAgICAgc2V0X2luZm9zIHsgbGFzdF9rZXkgPSAhbGFzdF9rZXk7IGxhc3RfdmFsdWUgPSBTb21lIGl0ZW0gfVxuICAgICAgICAgICAgfCBfIC0+IE9JLkN1cnNvcl93aXRoX3ZhbHVlLmNvbnRpbnVlIGN1cnNvcikpXG4gIGluXG4gIGluZm9zXG5cbmxldCBpc19kYl9jb25zaXN0ZW50IH5zb3VyY2U6XyB+bGFzdF9zb3VyY2VfaXRlbV9rZXkgZGJfc3luY19pbmZvcyA9XG4gIGxldCBsYXN0X2tleSA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDooLTEpIGRiX3N5bmNfaW5mb3MubGFzdF9rZXkgaW5cbiAgaWYgbGFzdF9rZXkgPiBsYXN0X3NvdXJjZV9pdGVtX2tleSB0aGVuXG4gICAgKCogVGhlcmUgYXJlIGZld2VyIGl0ZW1zIGluIHRoZSBzb3VyY2UgdGhhbiBleHBlY3RlZCAqKVxuICAgIGZhbHNlXG4gIGVsc2VcbiAgICAoKiBUb2RvOiBjaGVjayB0aGF0IHRoZSBsYXN0IGtub3duIGl0ZW0gaXMgdGhlIHNhbWUgdGhhbiBpbiB0aGUgc291cmNlICopXG4gICAgdHJ1ZVxuXG50eXBlIHN0YXR1cyA9XG4gIHwgVW5rbm93blxuICB8IEluX3N5bmNcbiAgfCBJbmNvbnNpc3RlbnRcbiAgfCBOZXdfaXRlbXMgb2Yge1xuICAgICAgZmlyc3RfbWlzc2luZ19rZXkgOiBpbnQ7XG4gICAgICBmaXJzdF91bmZldGNoZWRfa2V5IDogaW50O1xuICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXkgOiBpbnQ7XG4gICAgfVxuICB8IFBhcnRpYWxfZmV0Y2ggb2YgeyBmaXJzdF91bmZldGNoZWRfa2V5IDogaW50OyBsYXN0X3NvdXJjZV9pdGVtX2tleSA6IGludCB9XG5cbnR5cGUgcHJvZ3Jlc3MgPSB7IHRvdGFsIDogaW50OyByZW1haW5pbmcgOiBpbnQgfVxudHlwZSByZXBvcnQgPSB7IHN0YXR1cyA6IHN0YXR1czsgc3luY19wcm9ncmVzcyA6IHByb2dyZXNzIG9wdGlvbiB9XG5cbmxldCBpbml0aWFsX3JlcG9ydCA9IHsgc3RhdHVzID0gVW5rbm93bjsgc3luY19wcm9ncmVzcyA9IE5vbmUgfVxuXG5sZXQgbG9nX3N0YXR1cyA9IGZ1bmN0aW9uXG4gIHwgVW5rbm93biAtPiBDb25zb2xlLmluZm8gWyBcIkRhdGFiYXNlIHN0YXR1cyBpcyB1bmtub3duXCIgXVxuICB8IEluX3N5bmMgLT4gQ29uc29sZS5pbmZvIFsgXCJEYXRhYmFzZSBpcyBzeW5jaHJvbml6ZWRcIiBdXG4gIHwgSW5jb25zaXN0ZW50IC0+IENvbnNvbGUud2FybiBbIFwiRGF0YWJhc2UgaXMgb3V0LW9mLXN5bmNcIiBdXG4gIHwgTmV3X2l0ZW1zIHsgZmlyc3RfbWlzc2luZ19rZXk7IGZpcnN0X3VuZmV0Y2hlZF9rZXk7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH1cbiAgICAtPlxuICAgICAgQ29uc29sZS5pbmZvXG4gICAgICAgIFtcbiAgICAgICAgICBcIk5ldyBpdGVtcyB3ZXJlIGFkZGVkIHRvIHRoZSBzb3VyY2UuXCI7XG4gICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXkgLSBmaXJzdF9taXNzaW5nX2tleSArIDE7XG4gICAgICAgICAgXCJuZXcgaXRlbXNcIjtcbiAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSAtIGZpcnN0X3VuZmV0Y2hlZF9rZXkgKyAxO1xuICAgICAgICAgIFwidW5mZXRjaGVkIGl0ZW1zXCI7XG4gICAgICAgIF1cbiAgfCBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfSAtPlxuICAgICAgQ29uc29sZS5pbmZvXG4gICAgICAgIFtcbiAgICAgICAgICBcIlNvbWUgaXRlbXMgaGF2ZSBub3QgYmVlbiBmZXRjaGVkIHlldC5cIjtcbiAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSAtIGZpcnN0X3VuZmV0Y2hlZF9rZXkgKyAxO1xuICAgICAgICAgIFwidW5mZXRjaGVkIGl0ZW1zXCI7XG4gICAgICAgIF1cblxubGV0IGNoZWNrX3N0YXR1cyB+c291cmNlIGlkYiA9XG4gIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgbGV0KiBkYl9pbmZvcyA9IGdldF9kYl9pbmZvcyBpZGIgaW5cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KyB0b3RhbF9pdGVtX2NvdW50ID0gZmV0Y2hfdG90YWxfaXRlbV9jb3VudCBzb3VyY2UgaW5cbiAgKCogS2V5cyBzdGFydCBhdCAwLCBpdCdzIG5hdHVyYWwgdG8gY291bnQgaXRlbSBieSBzdGFydGluZyB3aXRoIDAgKilcbiAgbGV0IGxhc3Rfc291cmNlX2l0ZW1fa2V5ID0gdG90YWxfaXRlbV9jb3VudCAtIDEgaW5cbiAgaWYgbm90IChpc19kYl9jb25zaXN0ZW50IH5zb3VyY2Ugfmxhc3Rfc291cmNlX2l0ZW1fa2V5IGRiX2luZm9zKSB0aGVuXG4gICAgSW5jb25zaXN0ZW50XG4gIGVsc2VcbiAgICBtYXRjaCBkYl9pbmZvcyB3aXRoXG4gICAgfCB7IGxhc3Rfa2V5ID0gTm9uZTsgbGFzdF92YWx1ZSA9IE5vbmUgfSAtPlxuICAgICAgICAoKiBUaGUgZGIgaGFzIG5vdCB5ZXQgYmVlbiBwb3B1bGF0ZWQgd2l0aCBwbGFjZWhvbGRlcnMgKilcbiAgICAgICAgTmV3X2l0ZW1zXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlyc3RfbWlzc2luZ19rZXkgPSAwO1xuICAgICAgICAgICAgZmlyc3RfdW5mZXRjaGVkX2tleSA9IDA7XG4gICAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleTtcbiAgICAgICAgICB9XG4gICAgfCB7IGxhc3Rfa2V5ID0gU29tZSBrZXk7IGxhc3RfdmFsdWUgPSBpdGVtIH0gd2hlbiBrZXkgPCBsYXN0X3NvdXJjZV9pdGVtX2tleVxuICAgICAgLT5cbiAgICAgICAgKCogTmV3IGl0ZW1zIHdlcmUgYWRkZWQgdG8gdGhlIHNvdXJjZSBzaW5jZSB0aGUgbGFzdCBzeW5jICopXG4gICAgICAgIGxldCBmaXJzdF91bmZldGNoZWRfa2V5ID1cbiAgICAgICAgICBtYXRjaCBpdGVtIHdpdGggTm9uZSAtPiAwIHwgU29tZSB7IGlkOyBfIH0gLT4gaWQgKyAxXG4gICAgICAgIGluXG4gICAgICAgIE5ld19pdGVtc1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpcnN0X21pc3Npbmdfa2V5ID0ga2V5ICsgMTtcbiAgICAgICAgICAgIGZpcnN0X3VuZmV0Y2hlZF9rZXk7XG4gICAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleTtcbiAgICAgICAgICB9XG4gICAgfCB7IGxhc3Rfa2V5ID0gU29tZSBrZXk7IGxhc3RfdmFsdWUgPSBpdGVtIH0gd2hlbiBrZXkgPSBsYXN0X3NvdXJjZV9pdGVtX2tleVxuICAgICAgLT4gKFxuICAgICAgICBtYXRjaCBpdGVtIHdpdGhcbiAgICAgICAgfCBTb21lIHsgaWQ7IF8gfSB3aGVuIGlkID0ga2V5IC0+IEluX3N5bmNcbiAgICAgICAgfCBTb21lIHsgaWQ7IF8gfSAtPlxuICAgICAgICAgICAgUGFydGlhbF9mZXRjaCB7IGZpcnN0X3VuZmV0Y2hlZF9rZXkgPSBpZCArIDE7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH1cbiAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleSA9IDA7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH0pXG4gICAgfCBfIC0+IEluY29uc2lzdGVudFxuXG5sZXQgdXBkYXRlX3ZpZXdzIHNvdXJjZSBpZGIgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQrIHZpZXdzID1cbiAgICBTb3VyY2UucXVlcnkgc291cmNlXG4gICAgICAobW9kdWxlIFNvdXJjZS5BcGkuVmlld3MpXG4gICAgICB7IGluY2x1ZGVfZXh0ZXJuYWxfY29udGVudCA9IGZhbHNlIH1cbiAgICAgIHsgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQgfVxuICBpblxuICBMaXN0Lml0ZXIgdmlld3MuaXRlbXMgfmY6KGZ1biAoaXRlbSA6IEl0ZW0udCkgLT5cbiAgICAgIGxldCBvcGVuIEJycl9pby5JbmRleGVkX2RiIGluXG4gICAgICBsZXQgdHJhbnNhY3Rpb24gPVxuICAgICAgICBEYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgT0kpOyAobW9kdWxlIEkpIF0gfm1vZGU6UmVhZHdyaXRlIGlkYlxuICAgICAgaW5cbiAgICAgIGxldCBzX2l0ZW1zID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgSSkgdHJhbnNhY3Rpb24gaW5cbiAgICAgIGxldCBzb3J0X25hbWUgPSBPcHRpb24udmFsdWUgaXRlbS5zb3J0X25hbWUgfmRlZmF1bHQ6aXRlbS5uYW1lIGluXG4gICAgICBJLnB1dCB7IHNvcnRzID0geyBkYXRlX2FkZGVkID0gLTE7IHZpZXdzID0gW107IHNvcnRfbmFtZSB9OyBpdGVtIH0gc19pdGVtc1xuICAgICAgfD4gaWdub3JlKTtcbiAgdmlld3NcblxubGV0IGRlZHVjZV92aXJ0dWFsX2ZvbGRlcnNfZnJvbV92aWV3cyBzb3VyY2UgKHZpZXdzIDogVmlld3MucmVzcG9uc2UpID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0IHBhcmVudF9pZHNfb2Zfdmlld19jaGlsZHJlbiB7IEl0ZW0uaWQ7IF8gfSA9XG4gICAgbGV0KyByZXMgPVxuICAgICAgU291cmNlLnF1ZXJ5IHNvdXJjZVxuICAgICAgICAobW9kdWxlIFNvdXJjZS5BcGkuSXRlbXMpXG4gICAgICAgIFNvdXJjZS5BcGkuSXRlbXMuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWRzID0gW107XG4gICAgICAgICAgICBwYXJlbnRfaWQgPSBTb21lIGlkO1xuICAgICAgICAgICAgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQ7XG4gICAgICAgICAgICBmaWVsZHMgPSBbIFBhcmVudElkIF07XG4gICAgICAgICAgICBpbmNsdWRlX2l0ZW1fdHlwZXMgPSBbXTtcbiAgICAgICAgICAgIHN0YXJ0X2luZGV4ID0gTm9uZTtcbiAgICAgICAgICAgIGxpbWl0ID0gTm9uZTtcbiAgICAgICAgICAgIHNvcnRfb3JkZXIgPSBOb25lO1xuICAgICAgICAgICAgc29ydF9ieSA9IFtdO1xuICAgICAgICAgICAgcmVjdXJzaXZlID0gZmFsc2U7XG4gICAgICAgICAgICBlbmFibGVfdXNlcl9kYXRhID0gZmFsc2U7XG4gICAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAoKVxuICAgIGluXG4gICAgTGlzdC5mb2xkX2xlZnQgfmluaXQ6U3RyaW5nLlNldC5lbXB0eSByZXMuaXRlbXNcbiAgICAgIH5mOihmdW4gc2V0IHsgSXRlbS5wYXJlbnRfaWQ7IF8gfSAtPlxuICAgICAgICBtYXRjaCBwYXJlbnRfaWQgd2l0aFxuICAgICAgICB8IE5vbmUgfCBTb21lIE5vbmUgLT4gc2V0XG4gICAgICAgIHwgU29tZSAoU29tZSBwaWQpIC0+IFN0cmluZy5TZXQuYWRkIHBpZCBzZXQpXG4gIGluXG4gIGxldCBwYXRoc19vZl9wYXJlbnRzIHBhcmVudHMgPVxuICAgIGxldCsgcmVzID1cbiAgICAgIFNvdXJjZS5xdWVyeSBzb3VyY2VcbiAgICAgICAgKG1vZHVsZSBTb3VyY2UuQXBpLkl0ZW1zKVxuICAgICAgICBTb3VyY2UuQXBpLkl0ZW1zLlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkcyA9IFN0cmluZy5TZXQudG9fbGlzdCBwYXJlbnRzO1xuICAgICAgICAgICAgcGFyZW50X2lkID0gTm9uZTtcbiAgICAgICAgICAgIHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkO1xuICAgICAgICAgICAgZmllbGRzID0gWyBQYXRoIF07XG4gICAgICAgICAgICBpbmNsdWRlX2l0ZW1fdHlwZXMgPSBbXTtcbiAgICAgICAgICAgIHN0YXJ0X2luZGV4ID0gTm9uZTtcbiAgICAgICAgICAgIGxpbWl0ID0gTm9uZTtcbiAgICAgICAgICAgIHNvcnRfb3JkZXIgPSBOb25lO1xuICAgICAgICAgICAgc29ydF9ieSA9IFtdO1xuICAgICAgICAgICAgcmVjdXJzaXZlID0gZmFsc2U7XG4gICAgICAgICAgICBlbmFibGVfdXNlcl9kYXRhID0gZmFsc2U7XG4gICAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAoKVxuICAgIGluXG4gICAgTGlzdC5maWx0ZXJfbWFwIHJlcy5pdGVtcyB+ZjooZnVuIHsgSXRlbS5pZDsgcGF0aDsgXyB9IC0+XG4gICAgICAgIE9wdGlvbi5tYXAgKGZ1biBwYXRoIC0+IChpZCwgcGF0aCkpIHBhdGgpXG4gIGluXG4gIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgbGV0KyByZXN1bHQgPVxuICAgIExpc3QubWFwIHZpZXdzLml0ZW1zIH5mOihmdW4gKHsgSXRlbS5pZDsgXyB9IGFzIHZpZXcpIC0+XG4gICAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgIGxldCogcGFyZW50cyA9IHBhcmVudF9pZHNfb2Zfdmlld19jaGlsZHJlbiB2aWV3IGluXG4gICAgICAgIGxldCsgcGF0aHMgPSBwYXRoc19vZl9wYXJlbnRzIHBhcmVudHMgaW5cbiAgICAgICAgKGlkLCBwYXRocykpXG4gICAgfD4gRnV0Lm9mX2xpc3RcbiAgaW5cbiAgUmVzdWx0LmZsYXR0ZW5fbCByZXN1bHRcblxubGV0IHZpZXdzX29mX3BhdGggKHZmb2xkZXJzIDogKHN0cmluZyAqIChzdHJpbmcgKiBzdHJpbmcpIGxpc3QpIGxpc3QpIHBhdGggPVxuICAoKiBXZSBsb29rIGF0IHRoZSBwcmVmaXggb2YgYSBwYXRoIHRvIGRldGVybWluZSB3aGljaCB2aXJ0dWFsX2ZvbGRlciAoYW5kIHRodXNcbiAgICAgdmlldykgaXQncyBhIHBhcnQgb2YuICopXG4gIExpc3QuZmlsdGVyX21hcCB2Zm9sZGVycyB+ZjooZnVuICh2aWV3X2lkLCBsb2NhdGlvbnMpIC0+XG4gICAgICBpZiBMaXN0LmV4aXN0cyBsb2NhdGlvbnMgfmY6KGZ1biAoXywgcHJlKSAtPiBTdHJpbmcucHJlZml4IH5wcmUgcGF0aCkgdGhlblxuICAgICAgICBTb21lIHZpZXdfaWRcbiAgICAgIGVsc2UgTm9uZSlcblxubGV0IHN5bmMgPyhyZXBvcnQgPSBmdW4gXyAtPiAoKSkgfihzb3VyY2UgOiBTb3VyY2UuY29ubmV4aW9uKSBpZGIgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQgbWFrZV9wbGFjZWhvbGRlcnMgZmlyc3QgbGFzdCA9XG4gICAgKCogdG9kbzogZXJyb3IgaGFuZGxpbmcgKilcbiAgICBsZXQgdHJhbnNhY3Rpb24gPVxuICAgICAgRGF0YWJhc2UudHJhbnNhY3Rpb24gWyAobW9kdWxlIE9JKSBdIH5tb2RlOlJlYWR3cml0ZSBpZGJcbiAgICBpblxuICAgIGxldCBzdG9yZSA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB0cmFuc2FjdGlvbiBpblxuICAgIGZvciBpID0gZmlyc3QgdG8gbGFzdCBkb1xuICAgICAgaWdub3JlIEBAIE9JLnB1dCB7IGlkID0gaTsgaXRlbSA9IE5vbmUgfSBzdG9yZVxuICAgIGRvbmVcbiAgaW5cbiAgbGV0IGZldGNoX21pc3NpbmdfaXRlbXMgZmlyc3QgbGFzdCA9XG4gICAgbGV0IG9wZW4gU291cmNlIGluXG4gICAgbGV0KiB2aWV3cyA9IHVwZGF0ZV92aWV3cyBzb3VyY2UgaWRiIGluXG4gICAgbGV0KiB2Zm9sZGVycyA9IGRlZHVjZV92aXJ0dWFsX2ZvbGRlcnNfZnJvbV92aWV3cyBzb3VyY2Ugdmlld3MgaW5cbiAgICBsZXQgKCkgPSBDb25zb2xlLmluZm8gWyBcIkZldGNoaW5nIGl0ZW1zXCI7IGZpcnN0OyBcInRvXCI7IGxhc3Q7IFwiOlwiIF0gaW5cbiAgICBsZXQgZmV0Y2hfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgICBsZXQgdG90YWwgPSBsYXN0IC0gZmlyc3QgKyAxIGluXG4gICAgbGV0IHJlYyBlbnF1ZXVlIH5zdGFydF9pbmRleCB0b2RvID1cbiAgICAgIGlmIHRvZG8gPiAwIHRoZW4gKFxuICAgICAgICBsZXQgbGltaXQgPSBtaW4gdG9kbyBjaHVua19zaXplIGluXG4gICAgICAgIGxldCByZXEgPVxuICAgICAgICAgIEFwaS5JdGVtcy5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgKCogdG9kbyBtYWtlIHNvcnQgZXhwbGljaXQgKGJ5IGRhdGUgYWRkZWQgZGF0ZSkgKilcbiAgICAgICAgICAgICAgaWRzID0gW107XG4gICAgICAgICAgICAgIHBhcmVudF9pZCA9IE5vbmU7XG4gICAgICAgICAgICAgIHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkO1xuICAgICAgICAgICAgICBmaWVsZHMgPSBbIFBhcmVudElkOyBQYXRoIF07XG4gICAgICAgICAgICAgIGluY2x1ZGVfaXRlbV90eXBlcztcbiAgICAgICAgICAgICAgc3RhcnRfaW5kZXggPSBTb21lIHN0YXJ0X2luZGV4O1xuICAgICAgICAgICAgICBsaW1pdCA9IFNvbWUgbGltaXQ7XG4gICAgICAgICAgICAgIHNvcnRfb3JkZXIgPSBTb21lIEFzY2VuZGluZztcbiAgICAgICAgICAgICAgc29ydF9ieSA9IFsgRGF0ZUNyZWF0ZWQgXTtcbiAgICAgICAgICAgICAgcmVjdXJzaXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgZW5hYmxlX3VzZXJfZGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgaW5cbiAgICAgICAgUXVldWUuYWRkIHJlcSBmZXRjaF9xdWV1ZTtcbiAgICAgICAgZW5xdWV1ZSB+c3RhcnRfaW5kZXg6KHN0YXJ0X2luZGV4ICsgbGltaXQpICh0b2RvIC0gbGltaXQpKVxuICAgIGluXG4gICAgZW5xdWV1ZSB+c3RhcnRfaW5kZXg6Zmlyc3QgdG90YWw7XG4gICAgbGV0IHRvdGFsX3F1ZXJpZXMgPSBRdWV1ZS5sZW5ndGggZmV0Y2hfcXVldWUgaW5cbiAgICBsZXQgcmVjIHJ1bl9xdWV1ZSA/KHRocmVhZHMgPSAxKSBxID1cbiAgICAgIGFzc2VydCAodGhyZWFkcyA+IDApO1xuICAgICAgbGV0IHJlYyB0YWtlX24gYWNjIG4gPVxuICAgICAgICBpZiBuID0gMCB0aGVuIExpc3QucmV2IGFjY1xuICAgICAgICBlbHNlXG4gICAgICAgICAgbWF0Y2ggUXVldWUudGFrZV9vcHQgcSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+IExpc3QucmV2IGFjY1xuICAgICAgICAgIHwgU29tZSBlbHQgLT4gdGFrZV9uIChlbHQgOjogYWNjKSAobiAtIDEpXG4gICAgICBpblxuICAgICAgbGV0IGYgcmVxID1cbiAgICAgICAgbGV0KyB7IEFwaS5JdGVtcy5zdGFydF9pbmRleDsgaXRlbXM7IF8gfSA9XG4gICAgICAgICAgcXVlcnkgc291cmNlIChtb2R1bGUgQXBpLkl0ZW1zKSByZXEgKClcbiAgICAgICAgaW5cbiAgICAgICAgbGV0ICgpID1cbiAgICAgICAgICByZXBvcnRcbiAgICAgICAgICBAQCBTb21lXG4gICAgICAgICAgICAgICB7IHRvdGFsID0gdG90YWxfcXVlcmllczsgcmVtYWluaW5nID0gUXVldWUubGVuZ3RoIGZldGNoX3F1ZXVlIH1cbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGlkYl9wdXQgfnN0YXJ0X2luZGV4IGl0ZW1zID1cbiAgICAgICAgICBsZXQgb3BlbiBCcnJfaW8uSW5kZXhlZF9kYiBpblxuICAgICAgICAgIGxldCB0cmFuc2FjdGlvbiA9XG4gICAgICAgICAgICBEYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgT0kpOyAobW9kdWxlIEkpIF0gfm1vZGU6UmVhZHdyaXRlIGlkYlxuICAgICAgICAgIGluXG4gICAgICAgICAgbGV0IHNfbGlzdCA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB0cmFuc2FjdGlvbiBpblxuICAgICAgICAgIGxldCBzX2l0ZW1zID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgSSkgdHJhbnNhY3Rpb24gaW5cbiAgICAgICAgICBMaXN0Lml0ZXJpIGl0ZW1zIH5mOihmdW4gaW5kZXggKHsgQXBpLkl0ZW0uaWQ7IHBhdGg7IF8gfSBhcyBpdGVtKSAtPlxuICAgICAgICAgICAgICBsZXQgaW5kZXggPSBzdGFydF9pbmRleCArIGluZGV4IGluXG4gICAgICAgICAgICAgIGxldCBwYXRoID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OlwiXCIgcGF0aCBpblxuICAgICAgICAgICAgICBsZXQgdmlld3MgPSB2aWV3c19vZl9wYXRoIHZmb2xkZXJzIHBhdGggaW5cbiAgICAgICAgICAgICAgbGV0IHNvcnRfbmFtZSA9IE9wdGlvbi52YWx1ZSBpdGVtLnNvcnRfbmFtZSB+ZGVmYXVsdDppdGVtLm5hbWUgaW5cbiAgICAgICAgICAgICAgaWdub3JlIChPSS5wdXQgeyBpZCA9IGluZGV4OyBpdGVtID0gU29tZSBpZCB9IHNfbGlzdCk7XG4gICAgICAgICAgICAgIGlnbm9yZVxuICAgICAgICAgICAgICAgIChJLnB1dFxuICAgICAgICAgICAgICAgICAgIHsgc29ydHMgPSB7IGRhdGVfYWRkZWQgPSBpbmRleDsgdmlld3M7IHNvcnRfbmFtZSB9OyBpdGVtIH1cbiAgICAgICAgICAgICAgICAgICBzX2l0ZW1zKSlcbiAgICAgICAgaW5cbiAgICAgICAgaWRiX3B1dCB+c3RhcnRfaW5kZXggaXRlbXNcbiAgICAgIGluXG4gICAgICBsZXQgcmVxcyA9IHRha2VfbiBbXSB0aHJlYWRzIGluXG4gICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICBsZXQqIHJlcXMgPSBGdXQub2ZfbGlzdCAoTGlzdC5tYXAgfmYgcmVxcykgaW5cbiAgICAgIGlmIExpc3QuaXNfZW1wdHkgcmVxcyB0aGVuIEZ1dC5vayAoKSBlbHNlIHJ1bl9xdWV1ZSBxXG4gICAgaW5cbiAgICBydW5fcXVldWUgZmV0Y2hfcXVldWVcbiAgaW5cbiAgZnVuY3Rpb25cbiAgfCBOZXdfaXRlbXMgeyBmaXJzdF9taXNzaW5nX2tleTsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfVxuICAgIC0+XG4gICAgICBtYWtlX3BsYWNlaG9sZGVycyBmaXJzdF9taXNzaW5nX2tleSBsYXN0X3NvdXJjZV9pdGVtX2tleTtcbiAgICAgIGZldGNoX21pc3NpbmdfaXRlbXMgZmlyc3RfdW5mZXRjaGVkX2tleSBsYXN0X3NvdXJjZV9pdGVtX2tleVxuICB8IFBhcnRpYWxfZmV0Y2ggeyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9IC0+XG4gICAgICBmZXRjaF9taXNzaW5nX2l0ZW1zIGZpcnN0X3VuZmV0Y2hlZF9rZXkgbGFzdF9zb3VyY2VfaXRlbV9rZXlcbiAgfCBJbmNvbnNpc3RlbnQgLT4gRnV0Lm9rICgpXG4gIHwgXyAtPiBGdXQub2sgKClcblxubGV0IGNoZWNrX2FuZF9zeW5jID9yZXBvcnQgfnNvdXJjZSBpZGIgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQqIHN0YXR1cyA9IGNoZWNrX3N0YXR1cyB+c291cmNlIGlkYiBpblxuICBsZXQgaW5pdGlhbCA9IHsgaW5pdGlhbF9yZXBvcnQgd2l0aCBzdGF0dXMgfSBpblxuICBsZXQgcmVwb3J0JyA9XG4gICAgT3B0aW9uLm1hcFxuICAgICAgKGZ1biByZXBvcnQgLT5cbiAgICAgICAgbGV0ICgpID0gKCogU2VuZCBhIGZpcnN0IHJlcG9ydCAqKSByZXBvcnQgaW5pdGlhbCBpblxuICAgICAgICBmdW4gc3luY19wcm9ncmVzcyAtPiByZXBvcnQgeyBpbml0aWFsIHdpdGggc3luY19wcm9ncmVzcyB9KVxuICAgICAgcmVwb3J0XG4gIGluXG4gIGxldCsgKCkgPSBzeW5jID9yZXBvcnQ6cmVwb3J0JyB+c291cmNlIGlkYiBzdGF0dXMgaW5cbiAgT3B0aW9uLml0ZXJcbiAgICAoZnVuIHJlcG9ydCAtPiByZXBvcnQgeyBzdGF0dXMgPSBJbl9zeW5jOyBzeW5jX3Byb2dyZXNzID0gTm9uZSB9KVxuICAgIHJlcG9ydFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgIEJlbm9pdCBWYXVnb24sIEVOU1RBICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBQYWRkaW5nIHBvc2l0aW9uLiAqKVxudHlwZSBwYWR0eSA9XG4gIHwgTGVmdCAgICgqIFRleHQgaXMgbGVmdCBqdXN0aWZpZWQgKCctJyBvcHRpb24pLiAgICAgICAgICAgICAgICopXG4gIHwgUmlnaHQgICgqIFRleHQgaXMgcmlnaHQganVzdGlmaWVkIChubyAnLScgb3B0aW9uKS4gICAgICAgICAgICopXG4gIHwgWmVyb3MgICgqIFRleHQgaXMgcmlnaHQganVzdGlmaWVkIGJ5IHplcm9zIChzZWUgJzAnIG9wdGlvbikuICopXG5cbigqKiopXG5cbigqIEludGVnZXIgY29udmVyc2lvbi4gKilcbnR5cGUgaW50X2NvbnYgPVxuICB8IEludF9kIHwgSW50X3BkIHwgSW50X3NkICAgICAgICAoKiAgJWQgfCAlK2QgfCAlIGQgICopXG4gIHwgSW50X2kgfCBJbnRfcGkgfCBJbnRfc2kgICAgICAgICgqICAlaSB8ICUraSB8ICUgaSAgKilcbiAgfCBJbnRfeCB8IEludF9DeCAgICAgICAgICAgICAgICAgKCogICV4IHwgJSN4ICAgICAgICAqKVxuICB8IEludF9YIHwgSW50X0NYICAgICAgICAgICAgICAgICAoKiAgJVggfCAlI1ggICAgICAgICopXG4gIHwgSW50X28gfCBJbnRfQ28gICAgICAgICAgICAgICAgICgqICAlbyB8ICUjbyAgICAgICAgKilcbiAgfCBJbnRfdSAgICAgICAgICAgICAgICAgICAgICAgICAgKCogICV1ICAgICAgICAgICAgICAqKVxuICB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAgICAgICAoKiAgJSNkIHwgJSNpIHwgJSN1ICopXG5cbigqIEZsb2F0IGNvbnZlcnNpb24uICopXG50eXBlIGZsb2F0X2ZsYWdfY29udiA9XG4gIHwgRmxvYXRfZmxhZ18gICAgICAgICAgICAgICAgICAgICgqICVbZmVFZ0dGaEhdICopXG4gIHwgRmxvYXRfZmxhZ19wICAgICAgICAgICAgICAgICAgICgqICUrW2ZlRWdHRmhIXSAqKVxuICB8IEZsb2F0X2ZsYWdfcyAgICAgICAgICAgICAgICAgICAoKiAlIFtmZUVnR0ZoSF0gKilcbnR5cGUgZmxvYXRfa2luZF9jb252ID1cbiAgfCBGbG9hdF9mICAgICAgICAgICAgICAgICAgICAgICAgKCogICVmIHwgJStmIHwgJSBmICAqKVxuICB8IEZsb2F0X2UgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWUgfCAlK2UgfCAlIGUgICopXG4gIHwgRmxvYXRfRSAgICAgICAgICAgICAgICAgICAgICAgICgqICAlRSB8ICUrRSB8ICUgRSAgKilcbiAgfCBGbG9hdF9nICAgICAgICAgICAgICAgICAgICAgICAgKCogICVnIHwgJStnIHwgJSBnICAqKVxuICB8IEZsb2F0X0cgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUcgfCAlK0cgfCAlIEcgICopXG4gIHwgRmxvYXRfRiAgICAgICAgICAgICAgICAgICAgICAgICgqICAlRiB8ICUrRiB8ICUgRiAgKilcbiAgfCBGbG9hdF9oICAgICAgICAgICAgICAgICAgICAgICAgKCogICVoIHwgJStoIHwgJSBoICAqKVxuICB8IEZsb2F0X0ggICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUggfCAlK0ggfCAlIEggICopXG4gIHwgRmxvYXRfQ0YgICAgICAgICAgICAgICAgICAgICAgICgqICAlI0Z8ICUrI0Z8ICUgI0YgKilcbnR5cGUgZmxvYXRfY29udiA9IGZsb2F0X2ZsYWdfY29udiAqIGZsb2F0X2tpbmRfY29udlxuXG4oKioqKVxuXG4oKiBDaGFyIHNldHMgKHNlZSAlWy4uLl0pIGFyZSBiaXRtYXBzIGltcGxlbWVudGVkIGFzIDMyLWNoYXIgc3RyaW5ncy4gKilcbnR5cGUgY2hhcl9zZXQgPSBzdHJpbmdcblxuKCoqKilcblxuKCogQ291bnRlciB1c2VkIGluIFNjYW5mLiAqKVxudHlwZSBjb3VudGVyID1cbiAgfCBMaW5lX2NvdW50ZXIgICAgICgqICAlbCAgICAgICopXG4gIHwgQ2hhcl9jb3VudGVyICAgICAoKiAgJW4gICAgICAqKVxuICB8IFRva2VuX2NvdW50ZXIgICAgKCogICVOLCAlTCAgKilcblxuKCoqKilcblxuKCogUGFkZGluZyBvZiBzdHJpbmdzIGFuZCBudW1iZXJzLiAqKVxudHlwZSAoJ2EsICdiKSBwYWRkaW5nID1cbiAgKCogTm8gcGFkZGluZyAoZXg6IFwiJWRcIikgKilcbiAgfCBOb19wYWRkaW5nICA6ICgnYSwgJ2EpIHBhZGRpbmdcbiAgKCogTGl0ZXJhbCBwYWRkaW5nIChleDogXCIlOGRcIikgKilcbiAgfCBMaXRfcGFkZGluZyA6IHBhZHR5ICogaW50IC0+ICgnYSwgJ2EpIHBhZGRpbmdcbiAgKCogUGFkZGluZyBhcyBleHRyYSBhcmd1bWVudCAoZXg6IFwiJSpkXCIpICopXG4gIHwgQXJnX3BhZGRpbmcgOiBwYWR0eSAtPiAoaW50IC0+ICdhLCAnYSkgcGFkZGluZ1xuXG4oKiBTb21lIGZvcm1hdHMsIHN1Y2ggYXMgJV9kLFxuICAgb25seSBhY2NlcHQgYW4gb3B0aW9uYWwgbnVtYmVyIGFzIHBhZGRpbmcgb3B0aW9uIChubyBleHRyYSBhcmd1bWVudCkgKilcbnR5cGUgcGFkX29wdGlvbiA9IGludCBvcHRpb25cblxuKCogUHJlY2lzaW9uIG9mIGZsb2F0cyBhbmQgJzAnLXBhZGRpbmcgb2YgaW50ZWdlcnMuICopXG50eXBlICgnYSwgJ2IpIHByZWNpc2lvbiA9XG4gICgqIE5vIHByZWNpc2lvbiAoZXg6IFwiJWZcIikgKilcbiAgfCBOb19wcmVjaXNpb24gOiAoJ2EsICdhKSBwcmVjaXNpb25cbiAgKCogTGl0ZXJhbCBwcmVjaXNpb24gKGV4OiBcIiUuM2ZcIikgKilcbiAgfCBMaXRfcHJlY2lzaW9uIDogaW50IC0+ICgnYSwgJ2EpIHByZWNpc2lvblxuICAoKiBQcmVjaXNpb24gYXMgZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUuKmZcIikgKilcbiAgfCBBcmdfcHJlY2lzaW9uIDogKGludCAtPiAnYSwgJ2EpIHByZWNpc2lvblxuXG4oKiBTb21lIGZvcm1hdHMsIHN1Y2ggYXMgJV9mLFxuICAgb25seSBhY2NlcHQgYW4gb3B0aW9uYWwgbnVtYmVyIGFzIHByZWNpc2lvbiBvcHRpb24gKG5vIGV4dHJhIGFyZ3VtZW50KSAqKVxudHlwZSBwcmVjX29wdGlvbiA9IGludCBvcHRpb25cblxuKCogc2VlIHRoZSBDdXN0b20gZm9ybWF0IGNvbWJpbmF0b3IgKilcbnR5cGUgKCdhLCAnYiwgJ2MpIGN1c3RvbV9hcml0eSA9XG4gIHwgQ3VzdG9tX3plcm8gOiAoJ2EsIHN0cmluZywgJ2EpIGN1c3RvbV9hcml0eVxuICB8IEN1c3RvbV9zdWNjIDogKCdhLCAnYiwgJ2MpIGN1c3RvbV9hcml0eSAtPlxuICAgICgnYSwgJ3ggLT4gJ2IsICd4IC0+ICdjKSBjdXN0b21fYXJpdHlcblxuKCoqKilcblxuKCogICAgICAgIFJlbGF0aW9uYWwgZm9ybWF0IHR5cGVzXG5cbkluIHRoZSBmaXJzdCBmb3JtYXQrZ2FkdHMgaW1wbGVtZW50YXRpb24sIHRoZSB0eXBlIGZvciAlKC4uJSkgaW4gdGhlXG5mbXQgR0FEVCB3YXMgYXMgZm9sbG93czpcblxufCBGb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgcGFkX29wdGlvbiAqICgnZDEsICdxMSwgJ2QyLCAncTIpIHJlYWRlcl9uYl91bmlmaWVyICpcbiAgICAoJ3gsICdiLCAnYywgJ2QxLCAncTEsICd1KSBmbXR0eSAqXG4gICAgKCd1LCAnYiwgJ2MsICdxMSwgJ2UxLCAnZikgZm10IC0+XG4gICAgICAoKCd4LCAnYiwgJ2MsICdkMiwgJ3EyLCAndSkgZm9ybWF0NiAtPiAneCwgJ2IsICdjLCAnZDEsICdlMSwgJ2YpIGZtdFxuXG5Ob3RpY2UgdGhhdCB0aGUgJ3UgcGFyYW1ldGVyIGluICdmIHBvc2l0aW9uIGluIHRoZSBmb3JtYXQgYXJndW1lbnRcbigoJ3gsIC4uLCAndSkgZm9ybWF0NiAtPiAuLikgaXMgZXF1YWwgdG8gdGhlICd1IHBhcmFtZXRlciBpbiAnYVxucG9zaXRpb24gaW4gdGhlIGZvcm1hdCB0YWlsICgoJ3UsIC4uLCAnZikgZm10KS4gVGhpcyBtZWFucyB0aGF0IHRoZVxudHlwZSBvZiB0aGUgZXhwZWN0ZWQgZm9ybWF0IHBhcmFtZXRlciBkZXBlbmRzIG9mIHdoZXJlIHRoZSAlKC4uLiUpXG5hcmUgaW4gdGhlIGZvcm1hdCBzdHJpbmc6XG5cbiAgIyBQcmludGYucHJpbnRmIFwiJSglKVwiXG4gIC0gOiAodW5pdCwgb3V0X2NoYW5uZWwsIHVuaXQsICdfYSwgJ19hLCB1bml0KVxuICAgICAgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDYgLT4gdW5pdFxuICA9IDxmdW4+XG4gICMgUHJpbnRmLnByaW50ZiBcIiUoJSklZFwiXG4gIC0gOiAoaW50IC0+IHVuaXQsIG91dF9jaGFubmVsLCB1bml0LCAnX2EsICdfYSwgaW50IC0+IHVuaXQpXG4gICAgICBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NiAtPiBpbnQgLT4gdW5pdFxuICA9IDxmdW4+XG5cbk9uIHRoZSBjb250cmFyeSwgdGhlIGxlZ2FjeSB0eXBlciBnaXZlcyBhIGNsZXZlciB0eXBlIHRoYXQgZG9lcyBub3RcbmRlcGVuZCBvbiB0aGUgcG9zaXRpb24gb2YgJSguLiUpIGluIHRoZSBmb3JtYXQgc3RyaW5nLiBGb3IgZXhhbXBsZSxcbiUoJSkgd2lsbCBoYXZlIHRoZSBwb2x5bW9ycGhpYyB0eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKTogaXQgY2FuXG5iZSBjb25jYXRlbmF0ZWQgdG8gYW55IGZvcm1hdCB0eXBlLCBhbmQgb25seSBlbmZvcmNlcyB0aGUgY29uc3RyYWludFxudGhhdCBpdHMgJ2EgYW5kICdmIHBhcmFtZXRlcnMgYXJlIGVxdWFsIChubyBmb3JtYXQgYXJndW1lbnRzKSBhbmQgJ2RcbmFuZCAnZSBhcmUgZXF1YWwgKG5vIHJlYWRlciBhcmd1bWVudCkuXG5cblRoZSB3ZWFrZW5pbmcgb2YgdGhpcyBwYXJhbWV0ZXIgdHlwZSBpbiB0aGUgR0FEVCB2ZXJzaW9uIGJyb2tlIHVzZXJcbmNvZGUgKGluIGZhY3QgaXQgZXNzZW50aWFsbHkgbWFkZSAlKC4uLiUpIHVudXNhYmxlIGV4Y2VwdCBhdCB0aGUgbGFzdFxucG9zaXRpb24gb2YgYSBmb3JtYXQpLiBJbiBwYXJ0aWN1bGFyLCB0aGUgZm9sbG93aW5nIHdvdWxkIG5vdCB3b3JrXG5hbnltb3JlOlxuXG4gIGZ1biBzZXAgLT5cbiAgICBGb3JtYXQucHJpbnRmIFwiZm9vJSglKWJhciUoJSliYXpcIiBzZXAgc2VwXG5cbkFzIHRoZSB0eXBlLWNoZWNrZXIgd291bGQgcmVxdWlyZSB0d28gKmluY29tcGF0aWJsZSogdHlwZXMgZm9yIHRoZSAlKCUpXG5pbiBkaWZmZXJlbnQgcG9zaXRpb25zLlxuXG5UaGUgc29sdXRpb24gdG8gcmVnYWluIGEgZ2VuZXJhbCB0eXBlIGZvciAlKC4uJSkgaXMgdG8gZ2VuZXJhbGl6ZSB0aGlzXG50ZWNobmlxdWUsIG5vdCBvbmx5IG9uIHRoZSAnZCwgJ2UgcGFyYW1ldGVycywgYnV0IG9uIGFsbCBzaXhcbnBhcmFtZXRlcnMgb2YgYSBmb3JtYXQ6IHdlIGludHJvZHVjZSBhIFwicmVsYXRpb25hbFwiIHR5cGVcbiAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbndob3NlIHZhbHVlcyBhcmUgcHJvb2ZzIHRoYXQgKCdhMSwgLi4sICdmMSkgYW5kICgnYTIsIC4uLCAnZjIpIG1vcmFsbHlcbmNvcnJlc3BvbmQgdG8gdGhlIHNhbWUgZm9ybWF0IHR5cGU6ICdhMSBpcyBvYnRhaW5lZCBmcm9tICdmMSwnYjEsJ2MxXG5pbiB0aGUgZXhhY3Qgc2FtZSB3YXkgdGhhdCAnYTIgaXMgb2J0YWluZWQgZnJvbSAnZjIsJ2IyLCdjMiwgZXRjLlxuXG5Gb3IgZXhhbXBsZSwgdGhlIHJlbGF0aW9uIGJldHdlZW4gdHdvIGZvcm1hdCB0eXBlcyBiZWdpbm5pbmcgd2l0aCBhIENoYXJcbnBhcmFtZXRlciBpcyBhcyBmb2xsb3dzOlxuXG58IENoYXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAgKilcbiAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgKGNoYXIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgY2hhciAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuSW4gdGhlIGdlbmVyYWwgY2FzZSwgdGhlIHRlcm0gc3RydWN0dXJlIG9mIGZtdHR5X3JlbCBpcyAoYWxtb3N0WzFdKVxuaXNvbW9ycGhpYyB0byB0aGUgZm10dHkgb2YgdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uOiBldmVyeVxuY29uc3RydWN0b3IgaXMgcmUtcmVhZCB3aXRoIGEgYmluYXJ5LCByZWxhdGlvbmFsIHR5cGUsIGluc3RlYWQgb2YgdGhlXG5wcmV2aW91cyB1bmFyeSB0eXBpbmcuIGZtdHR5IGNhbiB0aGVuIGJlIHJlLWRlZmluZWQgYXMgdGhlIGRpYWdvbmFsIG9mXG5mbXR0eV9yZWw6XG5cbiAgdHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgPVxuICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmLFxuICAgICAgICAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9yZWxcblxuT25jZSB3ZSBoYXZlIHRoaXMgZm10dHlfcmVsIHR5cGUgaW4gcGxhY2UsIHdlIGNhbiBnaXZlIHRoZSBtb3JlXG5nZW5lcmFsIHR5cGUgdG8gJSguLi4lKTpcblxufCBGb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgcGFkX29wdGlvbiAqXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMiwgJ2IsICdjLCAnajIsICdkLCAnYSkgZm10dHlfcmVsICpcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IsICdjLCAnajIsICdlLCAnZikgZm10XG5cbldlIGFjY2VwdCBhbnkgZm9ybWF0ICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NikgKHRoaXMgaXNcbmNvbXBsZXRlbHkgdW5yZWxhdGVkIHRvIHRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IGZvcm1hdCksIGJ1dCBhbHNvXG5yZXF1aXJlIGEgcHJvb2YgdGhhdCB0aGlzIGZvcm1hdCBpcyBpbiByZWxhdGlvbiB0byBhbm90aGVyIGZvcm1hdCB0aGF0XG5pcyBjb25jYXRlbmFibGUgdG8gdGhlIGZvcm1hdCB0YWlsLiBXaGVuIGV4ZWN1dGluZyBhICUoLi4uJSkgZm9ybWF0XG4oaW4gY2FtbGludGVybmFsRm9ybWF0Lm1sOm1ha2VfcHJpbnRmIG9yIHNjYW5mLm1sOm1ha2Vfc2NhbmYpLCB3ZVxudHJhbnN0eXBlIHRoZSBmb3JtYXQgYWxvbmcgdGhpcyByZWxhdGlvbiB1c2luZyB0aGUgJ3JlY2FzdCcgZnVuY3Rpb25cbnRvIHRyYW5zcG9zZSBiZXR3ZWVuIHJlbGF0ZWQgZm9ybWF0IHR5cGVzLlxuXG4gIHZhbCByZWNhc3QgOlxuICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSkgZm10XG4gIC0+ICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIC0+ICgnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXRcblxuTk9URSBbMV06IHRoZSB0eXBpbmcgb2YgRm9ybWF0X3N1YnN0X3R5IHJlcXVpcmVzIG5vdCBvbmUgZm9ybWF0IHR5cGUsIGJ1dFxudHdvLCBvbmUgdG8gZXN0YWJsaXNoIHRoZSBsaW5rIGJldHdlZW4gdGhlIGZvcm1hdCBhcmd1bWVudCBhbmQgdGhlXG5maXJzdCBzaXggcGFyYW1ldGVycywgYW5kIHRoZSBvdGhlciBmb3IgdGhlIGxpbmsgYmV0d2VlbiB0aGUgZm9ybWF0XG5hcmd1bWVudCBhbmQgdGhlIGxhc3Qgc2l4IHBhcmFtZXRlcnMuXG5cbnwgRm9ybWF0X3N1YnN0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZDEsICdhMSkgZm10dHlfcmVsICpcbiAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZDIsICdhMikgZm10dHlfcmVsICpcbiAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2UxLCAnZjEsXG4gICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG5XaGVuIHdlIGdlbmVyYXRlIGEgZm9ybWF0IEFTVCwgd2UgZ2VuZXJhdGUgZXhhY3RseSB0aGUgc2FtZSB3aXRuZXNzXG5mb3IgYm90aCByZWxhdGlvbnMsIGFuZCB0aGUgd2l0bmVzcy1jb252ZXJzaW9uIGZ1bmN0aW9ucyBpblxuY2FtbGludGVybmFsRm9ybWF0IGRvIHJlbHkgb24gdGhpcyBpbnZhcmlhbnQuIEZvciBleGFtcGxlLCB0aGVcbmZ1bmN0aW9uIHRoYXQgcHJvdmVzIHRoYXQgdGhlIHJlbGF0aW9uIGlzIHRyYW5zaXRpdmVcblxuICB2YWwgdHJhbnMgOlxuICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICAtPiAoJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMixcbiAgICAgICdhMywgJ2IzLCAnYzMsICdkMywgJ2UzLCAnZjMpIGZtdHR5X3JlbFxuICAtPiAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMywgJ2IzLCAnYzMsICdkMywgJ2UzLCAnZjMpIGZtdHR5X3JlbFxuXG5kb2VzIGFzc3VtZSB0aGF0IHRoZSB0d28gaW5wdXRzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSB0ZXJtIHN0cnVjdHVyZVxuKGFuZCBpcyBvbmx5IGV2ZXJ5IHVzZWQgZm9yIGFyZ3VtZW50IHdpdG5lc3NlcyBvZiB0aGVcbkZvcm1hdF9zdWJzdF90eSBjb25zdHJ1Y3RvcikuXG4qKVxuXG4oKiBUeXBlIG9mIGEgYmxvY2sgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSBibG9ja190eXBlID1cbiAgfCBQcF9oYm94ICAgKCogSG9yaXpvbnRhbCBibG9jayBubyBsaW5lIGJyZWFraW5nICopXG4gIHwgUHBfdmJveCAgICgqIFZlcnRpY2FsIGJsb2NrIGVhY2ggYnJlYWsgbGVhZHMgdG8gYSBuZXcgbGluZSAqKVxuICB8IFBwX2h2Ym94ICAoKiBIb3Jpem9udGFsLXZlcnRpY2FsIGJsb2NrOiBzYW1lIGFzIHZib3gsIGV4Y2VwdCBpZiB0aGlzIGJsb2NrXG4gICAgICAgICAgICAgICAgIGlzIHNtYWxsIGVub3VnaCB0byBmaXQgb24gYSBzaW5nbGUgbGluZSAqKVxuICB8IFBwX2hvdmJveCAoKiBIb3Jpem9udGFsIG9yIFZlcnRpY2FsIGJsb2NrOiBicmVha3MgbGVhZCB0byBuZXcgbGluZVxuICAgICAgICAgICAgICAgICBvbmx5IHdoZW4gbmVjZXNzYXJ5IHRvIHByaW50IHRoZSBjb250ZW50IG9mIHRoZSBibG9jayAqKVxuICB8IFBwX2JveCAgICAoKiBIb3Jpem9udGFsIG9yIEluZGVudCBibG9jazogYnJlYWtzIGxlYWQgdG8gbmV3IGxpbmVcbiAgICAgICAgICAgICAgICAgb25seSB3aGVuIG5lY2Vzc2FyeSB0byBwcmludCB0aGUgY29udGVudCBvZiB0aGUgYmxvY2ssIG9yXG4gICAgICAgICAgICAgICAgIHdoZW4gaXQgbGVhZHMgdG8gYSBuZXcgaW5kZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgbGluZSAqKVxuICB8IFBwX2ZpdHMgICAoKiBJbnRlcm5hbCB1c2FnZTogd2hlbiBhIGJsb2NrIGZpdHMgb24gYSBzaW5nbGUgbGluZSAqKVxuXG4oKiBGb3JtYXR0aW5nIGVsZW1lbnQgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSBmb3JtYXR0aW5nX2xpdCA9XG4gIHwgQ2xvc2VfYm94ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBdICAgKilcbiAgfCBDbG9zZV90YWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQH0gICAqKVxuICB8IEJyZWFrIG9mIHN0cmluZyAqIGludCAqIGludCAgICAgICAgICAoKiBALCB8IEAgIHwgQDsgfCBAOzw+ICopXG4gIHwgRkZsdXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEA/ICAgKilcbiAgfCBGb3JjZV9uZXdsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQFxcbiAgKilcbiAgfCBGbHVzaF9uZXdsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQC4gICAqKVxuICB8IE1hZ2ljX3NpemUgb2Ygc3RyaW5nICogaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAPG4+ICopXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBAICAgKilcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQCUlICAqKVxuICB8IFNjYW5faW5kaWMgb2YgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAWCAgICopXG5cbigqIEZvcm1hdHRpbmcgZWxlbWVudCB1c2VkIGJ5IHRoZSBGb3JtYXQgcHJldHR5LXByaW50ZXIuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXR0aW5nX2dlbiA9XG4gIHwgT3Blbl90YWcgOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPiAgICAgICgqIEB7ICAgKilcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW5cbiAgfCBPcGVuX2JveCA6ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+ICAgICAgKCogQFsgICAqKVxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXR0aW5nX2dlblxuXG4oKioqKVxuXG4oKiBMaXN0IG9mIGZvcm1hdCB0eXBlIGVsZW1lbnRzLiAqKVxuKCogSW4gcGFydGljdWxhciB1c2VkIHRvIHJlcHJlc2VudCAlKC4uLiUpIGFuZCAley4uLiV9IGNvbnRlbnRzLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSA9XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmLFxuICAgICAgJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfcmVsXG5hbmQgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCA9XG4gIHwgQ2hhcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVjICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoY2hhciAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGNoYXIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgU3RyaW5nX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVzICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoc3RyaW5nIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgc3RyaW5nIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEludF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlZCAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGludCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnQzMl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWxkICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQzMiAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludDMyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IE5hdGl2ZWludF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbmQgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKG5hdGl2ZWludCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIG5hdGl2ZWludCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnQ2NF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUxkICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQ2NCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludDY0IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEZsb2F0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlZiAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGZsb2F0IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgZmxvYXQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgQm9vbF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVCICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoYm9vbCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGJvb2wgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbiAgfCBGb3JtYXRfYXJnX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXsuLi4lfSAqKVxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5ICpcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMilcbiAgICAgICAgICAgZm10dHlfcmVsXG4gIHwgRm9ybWF0X3N1YnN0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAgICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2QxLCAnYTEpIGZtdHR5X3JlbCAqXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzIsICdiMiwgJ2MyLCAnajIsICdkMiwgJ2EyKSBmbXR0eV9yZWwgKlxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZTEsICdmMSxcbiAgICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiMiwgJ2MyLCAnajIsICdlMiwgJ2YyKVxuICAgICAgICAgICBmbXR0eV9yZWxcblxuICAoKiBQcmludGYgYW5kIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcnMuICopXG4gIHwgQWxwaGFfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVhICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdiMSAtPiAneCAtPiAnYzEpIC0+ICd4IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdiMiAtPiAneCAtPiAnYzIpIC0+ICd4IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IFRoZXRhX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAldCAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnYjEgLT4gJ2MxKSAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnYjIgLT4gJ2MyKSAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBBbnlfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFVzZWQgZm9yIGN1c3RvbSBmb3JtYXRzICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgneCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICd4IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gICgqIFNjYW5mIHNwZWNpZmljIGNvbnN0cnVjdG9yLiAqKVxuICB8IFJlYWRlcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlciAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCd4IC0+ICdhMSwgJ2IxLCAnYzEsICgnYjEgLT4gJ3gpIC0+ICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ3ggLT4gJ2EyLCAnYjIsICdjMiwgKCdiMiAtPiAneCkgLT4gJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfciAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICgnYjEgLT4gJ3gpIC0+ICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgKCdiMiAtPiAneCkgLT4gJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbiAgfCBFbmRfb2ZfZm10dHkgOlxuICAgICAgKCdmMSwgJ2IxLCAnYzEsICdkMSwgJ2QxLCAnZjEsXG4gICAgICAgJ2YyLCAnYjIsICdjMiwgJ2QyLCAnZDIsICdmMikgZm10dHlfcmVsXG5cbigqKiopXG5cbigqIExpc3Qgb2YgZm9ybWF0IGVsZW1lbnRzLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgPVxuICB8IENoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChjaGFyIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENhbWxfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVDICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChjaGFyIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFN0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVzICopXG4gICAgICAoJ3gsIHN0cmluZyAtPiAnYSkgcGFkZGluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENhbWxfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVTICopXG4gICAgICAoJ3gsIHN0cmluZyAtPiAnYSkgcGFkZGluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQzMiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbFtkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGludDMyIC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgTmF0aXZlaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJW5bZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBuYXRpdmVpbnQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQ2NCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlTFtkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGludDY0IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRmxvYXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtmZUVnR0ZoSF0gKilcbiAgICAgIGZsb2F0X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBmbG9hdCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEJvb2wgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbYkJdICopXG4gICAgICAoJ3gsIGJvb2wgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGbHVzaCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlISAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBhYmMgKilcbiAgICAgIHN0cmluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENoYXJfbGl0ZXJhbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIHggKilcbiAgICAgIGNoYXIgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICB8IEZvcm1hdF9hcmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV7Li4uJX0gKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgICAgcGFkX29wdGlvbiAqXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzIsICdiLCAnYywgJ2oyLCAnZCwgJ2EpIGZtdHR5X3JlbCAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYiwgJ2MsICdqMiwgJ2UsICdmKSBmbXRcblxuICAoKiBQcmludGYgYW5kIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3Rvci4gKilcbiAgfCBBbHBoYSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYSAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdiIC0+ICd4IC0+ICdjKSAtPiAneCAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBUaGV0YSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAldCAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdiIC0+ICdjKSAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICAoKiBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3I6ICopXG4gIHwgRm9ybWF0dGluZ19saXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQF8gKilcbiAgICAgIGZvcm1hdHRpbmdfbGl0ICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRm9ybWF0dGluZ19nZW4gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBfICopXG4gICAgICAoJ2ExLCAnYiwgJ2MsICdkMSwgJ2UxLCAnZjEpIGZvcm1hdHRpbmdfZ2VuICpcbiAgICAgICgnZjEsICdiLCAnYywgJ2UxLCAnZTIsICdmMikgZm10IC0+ICgnYTEsICdiLCAnYywgJ2QxLCAnZTIsICdmMikgZm10XG5cbiAgKCogU2NhbmYgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IFJlYWRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVyICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCAtPiAnYSwgJ2IsICdjLCAoJ2IgLT4gJ3gpIC0+ICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fY2hhcl9zZXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbLi4uXSAqKVxuICAgICAgcGFkX29wdGlvbiAqIGNoYXJfc2V0ICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoc3RyaW5nIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbbmxOTF0gKilcbiAgICAgIGNvdW50ZXIgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChpbnQgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgU2Nhbl9uZXh0X2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJTBjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJZ25vcmVkX3BhcmFtIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGlnbm9yZWQgKiAoJ3gsICdiLCAnYywgJ3ksICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICAoKiBDdXN0b20gcHJpbnRpbmcgZm9ybWF0IChQUiM2NDUyLCBHUFIjMTQwKVxuXG4gICAgIFdlIGluY2x1ZGUgYSB0eXBlIEN1c3RvbSBvZiBcImN1c3RvbSBjb252ZXJ0ZXJzXCIsIHdoZXJlIGFuXG4gICAgIGFyYml0cmFyeSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IG9uZSBvciBtb3JlXG4gICAgIGFyZ3VtZW50cy4gVGhlcmUgaXMgbm8gc3ludGF4IGZvciBjdXN0b20gY29udmVydGVycywgaXQgaXMgb25seVxuICAgICBpbnRlbmRlZCBmb3IgY3VzdG9tIHByb2Nlc3NvcnMgdGhhdCB3aXNoIHRvIHJlbHkgb24gdGhlXG4gICAgIHN0ZGxpYi1kZWZpbmVkIGZvcm1hdCBHQURUcy5cblxuICAgICBGb3IgaW5zdGFuY2UgYSBwcmUtcHJvY2Vzc29yIGNvdWxkIGNob29zZSB0byBpbnRlcnByZXQgc3RyaW5nc1xuICAgICBwcmVmaXhlZCB3aXRoIFtcIiFcIl0gYXMgZm9ybWF0IHN0cmluZ3Mgd2hlcmUgWyV7eyAuLi4gfX1dIGlzXG4gICAgIGEgc3BlY2lhbCBmb3JtIHRvIHBhc3MgYSB0b19zdHJpbmcgZnVuY3Rpb24sIHNvIHRoYXQgb25lIGNvdWxkXG4gICAgIHdyaXRlOlxuXG4gICAgIHtbXG4gICAgICAgdHlwZSB0ID0geyB4IDogaW50OyB5IDogaW50IH1cblxuICAgICAgIGxldCBzdHJpbmdfb2ZfdCB0ID0gUHJpbnRmLnNwcmludGYgXCJ7IHggPSAlZDsgeSA9ICVkIH1cIiB0LnggdC55XG5cbiAgICAgICBQcmludGYucHJpbnRmICFcInQgPSAle3tzdHJpbmdfb2ZfdH19XCIgeyB4ID0gNDI7IHkgPSA0MiB9XG4gICAgIF19XG4gICopXG4gIHwgQ3VzdG9tIDpcbiAgICAgICgnYSwgJ3gsICd5KSBjdXN0b21fYXJpdHkgKiAodW5pdCAtPiAneCkgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoJ3ksICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogZW5kIG9mIGEgZm9ybWF0IHNwZWNpZmljYXRpb24gKilcbiAgfCBFbmRfb2ZfZm9ybWF0IDpcbiAgICAgICAgKCdmLCAnYiwgJ2MsICdlLCAnZSwgJ2YpIGZtdFxuXG4oKioqKVxuXG4oKiBUeXBlIGZvciBpZ25vcmVkIHBhcmFtZXRlcnMgKHNlZSBcIiVfXCIpLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBpZ25vcmVkID1cbiAgfCBJZ25vcmVkX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2MgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9DICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfcyAqKVxuICAgICAgcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfUyAqKVxuICAgICAgcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9pbnQzMiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9sZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9uZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9pbnQ2NCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9MZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mbG9hdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9mICopXG4gICAgICBwYWRfb3B0aW9uICogcHJlY19vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Jvb2wgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX0IgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3suLi4lfSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfKC4uLiUpICopXG4gICAgICBwYWRfb3B0aW9uICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9yZWFkZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9yICopXG4gICAgICAoJ2EsICdiLCAnYywgKCdiIC0+ICd4KSAtPiAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9bLi4uXSAqKVxuICAgICAgcGFkX29wdGlvbiAqIGNoYXJfc2V0IC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9bbmxOTF0gKilcbiAgICAgIGNvdW50ZXIgLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXzBjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgPVxuICBGb3JtYXQgb2YgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAqIHN0cmluZ1xuXG5sZXQgcmVjIGVyYXNlX3JlbCA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgLlxuICAoYSwgYiwgYywgZCwgZSwgZixcbiAgIGcsIGgsIGksIGosIGssIGwpIGZtdHR5X3JlbCAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHlcbj0gZnVuY3Rpb25cbiAgfCBDaGFyX3R5IHJlc3QgLT5cbiAgICBDaGFyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIFN0cmluZ190eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBJbnRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludDMyX3R5IHJlc3QgLT5cbiAgICBJbnQzMl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSW50NjRfdHkgcmVzdCAtPlxuICAgIEludDY0X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPlxuICAgIE5hdGl2ZWludF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIEZsb2F0X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBCb29sX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgZXJhc2VfcmVsIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIF90eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MSwgZXJhc2VfcmVsIHJlc3QpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPlxuICAgIEFscGhhX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgVGhldGFfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEFueV90eSByZXN0IC0+XG4gICAgQW55X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPlxuICAgIFJlYWRlcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBFbmRfb2ZfZm10dHkgLT4gRW5kX29mX2ZtdHR5XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHR5cGUgY29uY2F0ZW5hdGlvbiAqKVxuXG4oKiBDb25jYXRlbmF0ZSB0d28gZm9ybWF0IHR5cGVzLiAqKVxuKCogVXNlZCBieTpcbiAgICogcmVhZGVyX25iX3VuaWZpZXJfb2ZfZm10dHkgdG8gY291bnQgcmVhZGVycyBpbiBhbiBmbXR0eSxcbiAgICogU2NhbmYudGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyB0byBleHRyYWN0IHJlYWRlcnMgaW5zaWRlICUoLi4uJSksXG4gICAqIENhbWxpbnRlcm5hbEZvcm1hdC5mbXR0eV9vZl9pZ25vcmVkX2Zvcm1hdCB0byBleHRyYWN0IGZvcm1hdCB0eXBlLiAqKVxuXG4oKlxubGV0IHJlYyBjb25jYXRfZm10dHkgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCAuXG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGYsIGIsIGMsIGUsIGcsIGgpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGcsIGgpIGZtdHR5ID1cbiopXG5sZXQgcmVjIGNvbmNhdF9mbXR0eSA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMlxuICAgICAgIGcxIGoxIGcyIGoyXG4gIC5cbiAgICAoZzEsIGIxLCBjMSwgajEsIGQxLCBhMSxcbiAgICAgZzIsIGIyLCBjMiwgajIsIGQyLCBhMikgZm10dHlfcmVsIC0+XG4gICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbCAtPlxuICAgIChnMSwgYjEsIGMxLCBqMSwgZTEsIGYxLFxuICAgICBnMiwgYjIsIGMyLCBqMiwgZTIsIGYyKSBmbXR0eV9yZWwgPVxuZnVuIGZtdHR5MSBmbXR0eTIgLT4gbWF0Y2ggZm10dHkxIHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgLT5cbiAgICBDaGFyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBTdHJpbmdfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIEludF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludDMyX3R5IHJlc3QgLT5cbiAgICBJbnQzMl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+XG4gICAgTmF0aXZlaW50X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50NjRfdHkgcmVzdCAtPlxuICAgIEludDY0X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIEZsb2F0X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgQm9vbF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBBbHBoYV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFRoZXRhX3R5IHJlc3QgLT5cbiAgICBUaGV0YV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEFueV90eSByZXN0IC0+XG4gICAgQW55X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBSZWFkZXJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEVuZF9vZl9mbXR0eSAtPiBmbXR0eTJcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCBjb25jYXRlbmF0aW9uICopXG5cbigqIENvbmNhdGVuYXRlIHR3byBmb3JtYXRzLiAqKVxubGV0IHJlYyBjb25jYXRfZm10IDogdHlwZSBhIGIgYyBkIGUgZiBnIGggLlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoZiwgYiwgYywgZSwgZywgaCkgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGcsIGgpIGZtdCA9XG5mdW4gZm10MSBmbXQyIC0+IG1hdGNoIGZtdDEgd2l0aFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIFN0cmluZyAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIENhbWxfc3RyaW5nIChwYWQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgSW50MzIgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludDY0IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBDaGFyIChyZXN0KSAtPlxuICAgIENoYXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgQ2FtbF9jaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgQm9vbCAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBBbHBoYSByZXN0IC0+XG4gICAgQWxwaGEgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFRoZXRhIHJlc3QgLT5cbiAgICBUaGV0YSAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ3VzdG9tIChhcml0eSwgZiwgcmVzdCkgLT5cbiAgICBDdXN0b20gKGFyaXR5LCBmLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBSZWFkZXIgcmVzdCAtPlxuICAgIFJlYWRlciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRmx1c2ggcmVzdCAtPlxuICAgIEZsdXNoIChjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgU3RyaW5nX2xpdGVyYWwgKHN0ciwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgQ2hhcl9saXRlcmFsICAgKGNociwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBGb3JtYXRfYXJnIChwYWQsIGZtdHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmcgICAocGFkLCBmbXR0eSwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRm9ybWF0X3N1YnN0IChwYWQsIGZtdHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdCAocGFkLCBmbXR0eSwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCByZXN0KSAtPlxuICAgIFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIHJlc3QpIC0+XG4gICAgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgU2Nhbl9uZXh0X2NoYXIgKHJlc3QpIC0+XG4gICAgU2Nhbl9uZXh0X2NoYXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICBJZ25vcmVkX3BhcmFtIChpZ24sIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIHJlc3QpIC0+XG4gICAgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCByZXN0KSAtPlxuICAgIEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICBmbXQyXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBHYWJyaWVsIFNjaGVyZXIsIHByb2pldCBQYXJ0b3V0LCBJTlJJQSBQYXJpcy1TYWNsYXkgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDIwIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIENhbWxpbnRlcm5hbEF0b21pYyBpcyBhIGRlcGVuZGVuY3kgb2YgU3RkbGliLCBzbyBpdCBpcyBjb21waWxlZCB3aXRoXG4gICAtbm9wZXJ2YXNpdmVzLiAqKVxuZXh0ZXJuYWwgKCA9PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxXCJcbmV4dGVybmFsICggKyApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgaWdub3JlIDogJ2EgLT4gdW5pdCA9IFwiJWlnbm9yZVwiXG5cbigqIFdlIGFyZSBub3QgcmV1c2luZyAoJ2EgcmVmKSBkaXJlY3RseSB0byBtYWtlIGl0IGVhc2llciB0byByZWFzb25cbiAgIGFib3V0IGF0b21pY2l0eSBpZiB3ZSB3aXNoIHRvOiBldmVuIGluIGEgc2VxdWVudGlhbCBpbXBsZW1lbnRhdGlvbixcbiAgIHNpZ25hbHMgYW5kIG90aGVyIGFzeW5jaHJvbm91cyBjYWxsYmFja3MgbWlnaHQgYnJlYWsgYXRvbWljaXR5LiAqKVxudHlwZSAnYSB0ID0ge211dGFibGUgdjogJ2F9XG5cbmxldCBtYWtlIHYgPSB7dn1cbmxldCBnZXQgciA9IHIudlxubGV0IHNldCByIHYgPSByLnYgPC0gdlxuXG4oKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgc2V0IHRvIG5ldmVyIGJlIGlubGluZWQ6IEZsYW1iZGEgaXNcbiAgIGFsbG93ZWQgdG8gbW92ZSBzdXJyb3VuZGluZyBjb2RlIGluc2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbixcbiAgIGluY2x1ZGluZyBhbGxvY2F0aW9ucy4gKilcblxubGV0W0BpbmxpbmUgbmV2ZXJdIGV4Y2hhbmdlIHIgdiA9XG4gICgqIEJFR0lOIEFUT01JQyAqKVxuICBsZXQgY3VyID0gci52IGluXG4gIHIudiA8LSB2O1xuICAoKiBFTkQgQVRPTUlDICopXG4gIGN1clxuXG5sZXRbQGlubGluZSBuZXZlcl0gY29tcGFyZV9hbmRfc2V0IHIgc2VlbiB2ID1cbiAgKCogQkVHSU4gQVRPTUlDICopXG4gIGxldCBjdXIgPSByLnYgaW5cbiAgaWYgY3VyID09IHNlZW4gdGhlbiAoXG4gICAgci52IDwtIHY7XG4gICAgKCogRU5EIEFUT01JQyAqKVxuICAgIHRydWVcbiAgKSBlbHNlXG4gICAgZmFsc2VcblxubGV0W0BpbmxpbmUgbmV2ZXJdIGZldGNoX2FuZF9hZGQgciBuID1cbiAgKCogQkVHSU4gQVRPTUlDICopXG4gIGxldCBjdXIgPSByLnYgaW5cbiAgci52IDwtIChjdXIgKyBuKTtcbiAgKCogRU5EIEFUT01JQyAqKVxuICBjdXJcblxubGV0IGluY3IgciA9IGlnbm9yZSAoZmV0Y2hfYW5kX2FkZCByIDEpXG5sZXQgZGVjciByID0gaWdub3JlIChmZXRjaF9hbmRfYWRkIHIgKC0xKSlcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRXhjZXB0aW9ucyAqKVxuXG5leHRlcm5hbCByZWdpc3Rlcl9uYW1lZF92YWx1ZSA6IHN0cmluZyAtPiAnYSAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZVwiXG5cbmxldCAoKSA9XG4gICgqIGZvciBydW50aW1lL2ZhaWxfbmF0LmMgKilcbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQZXJ2YXNpdmVzLmFycmF5X2JvdW5kX2Vycm9yXCJcbiAgICAoSW52YWxpZF9hcmd1bWVudCBcImluZGV4IG91dCBvZiBib3VuZHNcIilcblxuZXh0ZXJuYWwgcmFpc2UgOiBleG4gLT4gJ2EgPSBcIiVyYWlzZVwiXG5leHRlcm5hbCByYWlzZV9ub3RyYWNlIDogZXhuIC0+ICdhID0gXCIlcmFpc2Vfbm90cmFjZVwiXG5cbmxldCBmYWlsd2l0aCBzID0gcmFpc2UoRmFpbHVyZSBzKVxubGV0IGludmFsaWRfYXJnIHMgPSByYWlzZShJbnZhbGlkX2FyZ3VtZW50IHMpXG5cbmV4Y2VwdGlvbiBFeGl0XG5leGNlcHRpb24gTWF0Y2hfZmFpbHVyZSA9IE1hdGNoX2ZhaWx1cmVcbmV4Y2VwdGlvbiBBc3NlcnRfZmFpbHVyZSA9IEFzc2VydF9mYWlsdXJlXG5leGNlcHRpb24gSW52YWxpZF9hcmd1bWVudCA9IEludmFsaWRfYXJndW1lbnRcbmV4Y2VwdGlvbiBGYWlsdXJlID0gRmFpbHVyZVxuZXhjZXB0aW9uIE5vdF9mb3VuZCA9IE5vdF9mb3VuZFxuZXhjZXB0aW9uIE91dF9vZl9tZW1vcnkgPSBPdXRfb2ZfbWVtb3J5XG5leGNlcHRpb24gU3RhY2tfb3ZlcmZsb3cgPSBTdGFja19vdmVyZmxvd1xuZXhjZXB0aW9uIFN5c19lcnJvciA9IFN5c19lcnJvclxuZXhjZXB0aW9uIEVuZF9vZl9maWxlID0gRW5kX29mX2ZpbGVcbmV4Y2VwdGlvbiBEaXZpc2lvbl9ieV96ZXJvID0gRGl2aXNpb25fYnlfemVyb1xuZXhjZXB0aW9uIFN5c19ibG9ja2VkX2lvID0gU3lzX2Jsb2NrZWRfaW9cbmV4Y2VwdGlvbiBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZSA9IFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlXG5cbigqIENvbXBvc2l0aW9uIG9wZXJhdG9ycyAqKVxuXG5leHRlcm5hbCAoIHw+ICkgOiAnYSAtPiAoJ2EgLT4gJ2IpIC0+ICdiID0gXCIlcmV2YXBwbHlcIlxuZXh0ZXJuYWwgKCBAQCApIDogKCdhIC0+ICdiKSAtPiAnYSAtPiAnYiA9IFwiJWFwcGx5XCJcblxuKCogRGVidWdnaW5nICopXG5cbmV4dGVybmFsIF9fTE9DX18gOiBzdHJpbmcgPSBcIiVsb2NfTE9DXCJcbmV4dGVybmFsIF9fRklMRV9fIDogc3RyaW5nID0gXCIlbG9jX0ZJTEVcIlxuZXh0ZXJuYWwgX19MSU5FX18gOiBpbnQgPSBcIiVsb2NfTElORVwiXG5leHRlcm5hbCBfX01PRFVMRV9fIDogc3RyaW5nID0gXCIlbG9jX01PRFVMRVwiXG5leHRlcm5hbCBfX1BPU19fIDogc3RyaW5nICogaW50ICogaW50ICogaW50ID0gXCIlbG9jX1BPU1wiXG5leHRlcm5hbCBfX0ZVTkNUSU9OX18gOiBzdHJpbmcgPSBcIiVsb2NfRlVOQ1RJT05cIlxuXG5leHRlcm5hbCBfX0xPQ19PRl9fIDogJ2EgLT4gc3RyaW5nICogJ2EgPSBcIiVsb2NfTE9DXCJcbmV4dGVybmFsIF9fTElORV9PRl9fIDogJ2EgLT4gaW50ICogJ2EgPSBcIiVsb2NfTElORVwiXG5leHRlcm5hbCBfX1BPU19PRl9fIDogJ2EgLT4gKHN0cmluZyAqIGludCAqIGludCAqIGludCkgKiAnYSA9IFwiJWxvY19QT1NcIlxuXG4oKiBDb21wYXJpc29ucyAqKVxuXG5leHRlcm5hbCAoID0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcXVhbFwiXG5leHRlcm5hbCAoIDw+ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXF1YWxcIlxuZXh0ZXJuYWwgKCA8ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc3RoYW5cIlxuZXh0ZXJuYWwgKCA+ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZ3JlYXRlcnRoYW5cIlxuZXh0ZXJuYWwgKCA8PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWxlc3NlcXVhbFwiXG5leHRlcm5hbCAoID49ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZ3JlYXRlcmVxdWFsXCJcbmV4dGVybmFsIGNvbXBhcmUgOiAnYSAtPiAnYSAtPiBpbnQgPSBcIiVjb21wYXJlXCJcblxubGV0IG1pbiB4IHkgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgeVxuXG5leHRlcm5hbCAoID09ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXFcIlxuZXh0ZXJuYWwgKCAhPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJW5vdGVxXCJcblxuKCogQm9vbGVhbiBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIG5vdCA6IGJvb2wgLT4gYm9vbCA9IFwiJWJvb2xub3RcIlxuZXh0ZXJuYWwgKCAmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuZXh0ZXJuYWwgKCAmJiApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1YW5kXCJcbmV4dGVybmFsICggb3IgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdW9yXCJcbmV4dGVybmFsICggfHwgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdW9yXCJcblxuKCogSW50ZWdlciBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsICggfi0gKSA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgKCB+KyApIDogaW50IC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHN1Y2MgOiBpbnQgLT4gaW50ID0gXCIlc3VjY2ludFwiXG5leHRlcm5hbCBwcmVkIDogaW50IC0+IGludCA9IFwiJXByZWRpbnRcIlxuZXh0ZXJuYWwgKCArICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFkZGludFwiXG5leHRlcm5hbCAoIC0gKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlc3ViaW50XCJcbmV4dGVybmFsICggKiApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgKCAvICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWRpdmludFwiXG5leHRlcm5hbCAoIG1vZCApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxuXG5sZXQgYWJzIHggPSBpZiB4ID49IDAgdGhlbiB4IGVsc2UgLXhcblxuZXh0ZXJuYWwgKCBsYW5kICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFuZGludFwiXG5leHRlcm5hbCAoIGxvciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVvcmludFwiXG5leHRlcm5hbCAoIGx4b3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIleG9yaW50XCJcblxubGV0IGxub3QgeCA9IHggbHhvciAoLTEpXG5cbmV4dGVybmFsICggbHNsICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCAoIGxzciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc3JpbnRcIlxuZXh0ZXJuYWwgKCBhc3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcblxubGV0IG1heF9pbnQgPSAoLTEpIGxzciAxXG5sZXQgbWluX2ludCA9IG1heF9pbnQgKyAxXG5cbigqIEZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgKCB+LS4gKSA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlbmVnZmxvYXRcIlxuZXh0ZXJuYWwgKCB+Ky4gKSA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgKCArLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVhZGRmbG9hdFwiXG5leHRlcm5hbCAoIC0uICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJXN1YmZsb2F0XCJcbmV4dGVybmFsICggKi4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlbXVsZmxvYXRcIlxuZXh0ZXJuYWwgKCAvLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVkaXZmbG9hdFwiXG5leHRlcm5hbCAoICoqICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9wb3dlcl9mbG9hdFwiIFwicG93XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cF9mbG9hdFwiIFwiZXhwXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cG0xIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwbTFfZmxvYXRcIiBcImNhbWxfZXhwbTFcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvcyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NfZmxvYXRcIiBcImFjb3NcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5fZmxvYXRcIiBcImFzaW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5fZmxvYXRcIiBcImF0YW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbjIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuMl9mbG9hdFwiIFwiYXRhbjJcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgaHlwb3QgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgPSBcImNhbWxfaHlwb3RfZmxvYXRcIiBcImNhbWxfaHlwb3RcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zX2Zsb2F0XCIgXCJjb3NcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Nvc2hfZmxvYXRcIiBcImNvc2hcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvc2ggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hY29zaF9mbG9hdFwiIFwiY2FtbF9hY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2dfZmxvYXRcIiBcImxvZ1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cxMCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzEwX2Zsb2F0XCIgXCJsb2cxMFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cxcCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzFwX2Zsb2F0XCIgXCJjYW1sX2xvZzFwXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Npbl9mbG9hdFwiIFwic2luXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zaW5oX2Zsb2F0XCIgXCJzaW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFzaW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbmhfZmxvYXRcIiBcImNhbWxfYXNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc3FydCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NxcnRfZmxvYXRcIiBcInNxcnRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuX2Zsb2F0XCIgXCJ0YW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3RhbmhfZmxvYXRcIiBcInRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuaF9mbG9hdFwiIFwiY2FtbF9hdGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjZWlsIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY2VpbF9mbG9hdFwiIFwiY2VpbFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBmbG9vciA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb29yX2Zsb2F0XCIgXCJmbG9vclwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhYnNfZmxvYXQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFic2Zsb2F0XCJcbmV4dGVybmFsIGNvcHlzaWduIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXRcbiAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2NvcHlzaWduX2Zsb2F0XCIgXCJjYW1sX2NvcHlzaWduXCJcbiAgICAgICAgICAgICAgICAgIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RfZmxvYXQgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbW9kX2Zsb2F0XCIgXCJmbW9kXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZyZXhwIDogZmxvYXQgLT4gZmxvYXQgKiBpbnQgPSBcImNhbWxfZnJleHBfZmxvYXRcIlxuZXh0ZXJuYWwgbGRleHAgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gKGludCBbQHVudGFnZ2VkXSkgLT4gKGZsb2F0IFtAdW5ib3hlZF0pID1cbiAgXCJjYW1sX2xkZXhwX2Zsb2F0XCIgXCJjYW1sX2xkZXhwX2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbW9kZiA6IGZsb2F0IC0+IGZsb2F0ICogZmxvYXQgPSBcImNhbWxfbW9kZl9mbG9hdFwiXG5leHRlcm5hbCBmbG9hdCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgZmxvYXRfb2ZfaW50IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCB0cnVuY2F0ZSA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuZXh0ZXJuYWwgaW50X29mX2Zsb2F0IDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBmbG9hdF9vZl9iaXRzIDogaW50NjQgLT4gZmxvYXRcbiAgPSBcImNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c1wiIFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzX3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxubGV0IGluZmluaXR5ID1cbiAgZmxvYXRfb2ZfYml0cyAweDdGX0YwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IG5lZ19pbmZpbml0eSA9XG4gIGZsb2F0X29mX2JpdHMgMHhGRl9GMF8wMF8wMF8wMF8wMF8wMF8wMExcbmxldCBuYW4gPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRjBfMDBfMDBfMDBfMDBfMDBfMDFMXG5sZXQgbWF4X2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDdGX0VGX0ZGX0ZGX0ZGX0ZGX0ZGX0ZGTFxubGV0IG1pbl9mbG9hdCA9XG4gIGZsb2F0X29mX2JpdHMgMHgwMF8xMF8wMF8wMF8wMF8wMF8wMF8wMExcbmxldCBlcHNpbG9uX2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDNDX0IwXzAwXzAwXzAwXzAwXzAwXzAwTFxuXG50eXBlIGZwY2xhc3MgPVxuICAgIEZQX25vcm1hbFxuICB8IEZQX3N1Ym5vcm1hbFxuICB8IEZQX3plcm9cbiAgfCBGUF9pbmZpbml0ZVxuICB8IEZQX25hblxuZXh0ZXJuYWwgY2xhc3NpZnlfZmxvYXQgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gZnBjbGFzcyA9XG4gIFwiY2FtbF9jbGFzc2lmeV9mbG9hdFwiIFwiY2FtbF9jbGFzc2lmeV9mbG9hdF91bmJveGVkXCIgW0BAbm9hbGxvY11cblxuKCogU3RyaW5nIGFuZCBieXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgLS0gbW9yZSBpbiBtb2R1bGVzIFN0cmluZyBhbmQgQnl0ZXMgKilcblxuZXh0ZXJuYWwgc3RyaW5nX2xlbmd0aCA6IHN0cmluZyAtPiBpbnQgPSBcIiVzdHJpbmdfbGVuZ3RoXCJcbmV4dGVybmFsIGJ5dGVzX2xlbmd0aCA6IGJ5dGVzIC0+IGludCA9IFwiJWJ5dGVzX2xlbmd0aFwiXG5leHRlcm5hbCBieXRlc19jcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX2J5dGVzXCJcbmV4dGVybmFsIHN0cmluZ19ibGl0IDogc3RyaW5nIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfc3RyaW5nXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIGJ5dGVzX2JsaXQgOiBieXRlcyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuXG5sZXQgKCBeICkgczEgczIgPVxuICBsZXQgbDEgPSBzdHJpbmdfbGVuZ3RoIHMxIGFuZCBsMiA9IHN0cmluZ19sZW5ndGggczIgaW5cbiAgbGV0IHMgPSBieXRlc19jcmVhdGUgKGwxICsgbDIpIGluXG4gIHN0cmluZ19ibGl0IHMxIDAgcyAwIGwxO1xuICBzdHJpbmdfYmxpdCBzMiAwIHMgbDEgbDI7XG4gIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgc1xuXG4oKiBDaGFyYWN0ZXIgb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZSBDaGFyICopXG5cbmV4dGVybmFsIGludF9vZl9jaGFyIDogY2hhciAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCB1bnNhZmVfY2hhcl9vZl9pbnQgOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcbmxldCBjaGFyX29mX2ludCBuID1cbiAgaWYgbiA8IDAgfHwgbiA+IDI1NSB0aGVuIGludmFsaWRfYXJnIFwiY2hhcl9vZl9pbnRcIiBlbHNlIHVuc2FmZV9jaGFyX29mX2ludCBuXG5cbigqIFVuaXQgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBpZ25vcmUgOiAnYSAtPiB1bml0ID0gXCIlaWdub3JlXCJcblxuKCogUGFpciBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGZzdCA6ICdhICogJ2IgLT4gJ2EgPSBcIiVmaWVsZDBcIlxuZXh0ZXJuYWwgc25kIDogJ2EgKiAnYiAtPiAnYiA9IFwiJWZpZWxkMVwiXG5cbigqIFJlZmVyZW5jZXMgKilcblxudHlwZSAnYSByZWYgPSB7IG11dGFibGUgY29udGVudHMgOiAnYSB9XG5leHRlcm5hbCByZWYgOiAnYSAtPiAnYSByZWYgPSBcIiVtYWtlbXV0YWJsZVwiXG5leHRlcm5hbCAoICEgKSA6ICdhIHJlZiAtPiAnYSA9IFwiJWZpZWxkMFwiXG5leHRlcm5hbCAoIDo9ICkgOiAnYSByZWYgLT4gJ2EgLT4gdW5pdCA9IFwiJXNldGZpZWxkMFwiXG5leHRlcm5hbCBpbmNyIDogaW50IHJlZiAtPiB1bml0ID0gXCIlaW5jclwiXG5leHRlcm5hbCBkZWNyIDogaW50IHJlZiAtPiB1bml0ID0gXCIlZGVjclwiXG5cbigqIFJlc3VsdCB0eXBlICopXG5cbnR5cGUgKCdhLCdiKSByZXN1bHQgPSBPayBvZiAnYSB8IEVycm9yIG9mICdiXG5cbigqIFN0cmluZyBjb252ZXJzaW9uIGZ1bmN0aW9ucyAqKVxuXG5leHRlcm5hbCBmb3JtYXRfaW50IDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5leHRlcm5hbCBmb3JtYXRfZmxvYXQgOiBzdHJpbmcgLT4gZmxvYXQgLT4gc3RyaW5nID0gXCJjYW1sX2Zvcm1hdF9mbG9hdFwiXG5cbmxldCBzdHJpbmdfb2ZfYm9vbCBiID1cbiAgaWYgYiB0aGVuIFwidHJ1ZVwiIGVsc2UgXCJmYWxzZVwiXG5sZXQgYm9vbF9vZl9zdHJpbmcgPSBmdW5jdGlvblxuICB8IFwidHJ1ZVwiIC0+IHRydWVcbiAgfCBcImZhbHNlXCIgLT4gZmFsc2VcbiAgfCBfIC0+IGludmFsaWRfYXJnIFwiYm9vbF9vZl9zdHJpbmdcIlxuXG5sZXQgYm9vbF9vZl9zdHJpbmdfb3B0ID0gZnVuY3Rpb25cbiAgfCBcInRydWVcIiAtPiBTb21lIHRydWVcbiAgfCBcImZhbHNlXCIgLT4gU29tZSBmYWxzZVxuICB8IF8gLT4gTm9uZVxuXG5sZXQgc3RyaW5nX29mX2ludCBuID1cbiAgZm9ybWF0X2ludCBcIiVkXCIgblxuXG5leHRlcm5hbCBpbnRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludCA9IFwiY2FtbF9pbnRfb2Zfc3RyaW5nXCJcblxubGV0IGludF9vZl9zdHJpbmdfb3B0IHMgPVxuICAoKiBUT0RPOiBwcm92aWRlIHRoaXMgZGlyZWN0bHkgYXMgYSBub24tcmFpc2luZyBwcmltaXRpdmUuICopXG4gIHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxuZXh0ZXJuYWwgc3RyaW5nX2dldCA6IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9IFwiJXN0cmluZ19zYWZlX2dldFwiXG5cbmxldCB2YWxpZF9mbG9hdF9sZXhlbSBzID1cbiAgbGV0IGwgPSBzdHJpbmdfbGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPj0gbCB0aGVuIHMgXiBcIi5cIiBlbHNlXG4gICAgbWF0Y2ggc3RyaW5nX2dldCBzIGkgd2l0aFxuICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPiBsb29wIChpICsgMSlcbiAgICB8IF8gLT4gc1xuICBpblxuICBsb29wIDBcblxubGV0IHN0cmluZ19vZl9mbG9hdCBmID0gdmFsaWRfZmxvYXRfbGV4ZW0gKGZvcm1hdF9mbG9hdCBcIiUuMTJnXCIgZilcblxuZXh0ZXJuYWwgZmxvYXRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGZsb2F0ID0gXCJjYW1sX2Zsb2F0X29mX3N0cmluZ1wiXG5cbmxldCBmbG9hdF9vZl9zdHJpbmdfb3B0IHMgPVxuICAoKiBUT0RPOiBwcm92aWRlIHRoaXMgZGlyZWN0bHkgYXMgYSBub24tcmFpc2luZyBwcmltaXRpdmUuICopXG4gIHRyeSBTb21lIChmbG9hdF9vZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG4oKiBMaXN0IG9wZXJhdGlvbnMgLS0gbW9yZSBpbiBtb2R1bGUgTGlzdCAqKVxuXG5sZXQgcmVjICggQCApIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICAgIFtdIC0+IGwyXG4gIHwgaGQgOjogdGwgLT4gaGQgOjogKHRsIEAgbDIpXG5cbigqIEkvTyBvcGVyYXRpb25zICopXG5cbnR5cGUgaW5fY2hhbm5lbFxudHlwZSBvdXRfY2hhbm5lbFxuXG5leHRlcm5hbCBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDogaW50IC0+IG91dF9jaGFubmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcIlxuZXh0ZXJuYWwgb3Blbl9kZXNjcmlwdG9yX2luIDogaW50IC0+IGluX2NoYW5uZWwgPSBcImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXCJcblxubGV0IHN0ZGluID0gb3Blbl9kZXNjcmlwdG9yX2luIDBcbmxldCBzdGRvdXQgPSBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDFcbmxldCBzdGRlcnIgPSBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDJcblxuKCogR2VuZXJhbCBvdXRwdXQgZnVuY3Rpb25zICopXG5cbnR5cGUgb3Blbl9mbGFnID1cbiAgICBPcGVuX3Jkb25seSB8IE9wZW5fd3Jvbmx5IHwgT3Blbl9hcHBlbmRcbiAgfCBPcGVuX2NyZWF0IHwgT3Blbl90cnVuYyB8IE9wZW5fZXhjbFxuICB8IE9wZW5fYmluYXJ5IHwgT3Blbl90ZXh0IHwgT3Blbl9ub25ibG9ja1xuXG5leHRlcm5hbCBvcGVuX2Rlc2MgOiBzdHJpbmcgLT4gb3Blbl9mbGFnIGxpc3QgLT4gaW50IC0+IGludCA9IFwiY2FtbF9zeXNfb3BlblwiXG5cbmV4dGVybmFsIHNldF9vdXRfY2hhbm5lbF9uYW1lOiBvdXRfY2hhbm5lbCAtPiBzdHJpbmcgLT4gdW5pdCA9XG4gIFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXCJcblxubGV0IG9wZW5fb3V0X2dlbiBtb2RlIHBlcm0gbmFtZSA9XG4gIGxldCBjID0gb3Blbl9kZXNjcmlwdG9yX291dChvcGVuX2Rlc2MgbmFtZSBtb2RlIHBlcm0pIGluXG4gIHNldF9vdXRfY2hhbm5lbF9uYW1lIGMgbmFtZTtcbiAgY1xuXG5sZXQgb3Blbl9vdXQgbmFtZSA9XG4gIG9wZW5fb3V0X2dlbiBbT3Blbl93cm9ubHk7IE9wZW5fY3JlYXQ7IE9wZW5fdHJ1bmM7IE9wZW5fdGV4dF0gMG82NjYgbmFtZVxuXG5sZXQgb3Blbl9vdXRfYmluIG5hbWUgPVxuICBvcGVuX291dF9nZW4gW09wZW5fd3Jvbmx5OyBPcGVuX2NyZWF0OyBPcGVuX3RydW5jOyBPcGVuX2JpbmFyeV0gMG82NjYgbmFtZVxuXG5leHRlcm5hbCBmbHVzaCA6IG91dF9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfZmx1c2hcIlxuXG5leHRlcm5hbCBvdXRfY2hhbm5lbHNfbGlzdCA6IHVuaXQgLT4gb3V0X2NoYW5uZWwgbGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3RcIlxuXG5sZXQgZmx1c2hfYWxsICgpID1cbiAgbGV0IHJlYyBpdGVyID0gZnVuY3Rpb25cbiAgICAgIFtdIC0+ICgpXG4gICAgfCBhOjpsIC0+XG4gICAgICAgIGJlZ2luIHRyeVxuICAgICAgICAgICAgZmx1c2ggYVxuICAgICAgICB3aXRoIFN5c19lcnJvciBfIC0+XG4gICAgICAgICAgKCkgKCogaWdub3JlIGNoYW5uZWxzIGNsb3NlZCBkdXJpbmcgYSBwcmVjZWRpbmcgZmx1c2guICopXG4gICAgICAgIGVuZDtcbiAgICAgICAgaXRlciBsXG4gIGluIGl0ZXIgKG91dF9jaGFubmVsc19saXN0ICgpKVxuXG5leHRlcm5hbCB1bnNhZmVfb3V0cHV0IDogb3V0X2NoYW5uZWwgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dHB1dF9ieXRlc1wiXG5leHRlcm5hbCB1bnNhZmVfb3V0cHV0X3N0cmluZyA6IG91dF9jaGFubmVsIC0+IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dHB1dFwiXG5cbmV4dGVybmFsIG91dHB1dF9jaGFyIDogb3V0X2NoYW5uZWwgLT4gY2hhciAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9jaGFyXCJcblxubGV0IG91dHB1dF9ieXRlcyBvYyBzID1cbiAgdW5zYWZlX291dHB1dCBvYyBzIDAgKGJ5dGVzX2xlbmd0aCBzKVxuXG5sZXQgb3V0cHV0X3N0cmluZyBvYyBzID1cbiAgdW5zYWZlX291dHB1dF9zdHJpbmcgb2MgcyAwIChzdHJpbmdfbGVuZ3RoIHMpXG5cbmxldCBvdXRwdXQgb2MgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJvdXRwdXRcIlxuICBlbHNlIHVuc2FmZV9vdXRwdXQgb2MgcyBvZnMgbGVuXG5cbmxldCBvdXRwdXRfc3Vic3RyaW5nIG9jIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBzdHJpbmdfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIm91dHB1dF9zdWJzdHJpbmdcIlxuICBlbHNlIHVuc2FmZV9vdXRwdXRfc3RyaW5nIG9jIHMgb2ZzIGxlblxuXG5leHRlcm5hbCBvdXRwdXRfYnl0ZSA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9jaGFyXCJcbmV4dGVybmFsIG91dHB1dF9iaW5hcnlfaW50IDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfb3V0cHV0X2ludFwiXG5cbmV4dGVybmFsIG1hcnNoYWxfdG9fY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+ICdhIC0+IHVuaXQgbGlzdCAtPiB1bml0XG4gICAgID0gXCJjYW1sX291dHB1dF92YWx1ZVwiXG5sZXQgb3V0cHV0X3ZhbHVlIGNoYW4gdiA9IG1hcnNoYWxfdG9fY2hhbm5lbCBjaGFuIHYgW11cblxuZXh0ZXJuYWwgc2Vla19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX291dFwiXG5leHRlcm5hbCBwb3Nfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX3Bvc19vdXRcIlxuZXh0ZXJuYWwgb3V0X2NoYW5uZWxfbGVuZ3RoIDogb3V0X2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZVwiXG5leHRlcm5hbCBjbG9zZV9vdXRfY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfY2xvc2VfY2hhbm5lbFwiXG5sZXQgY2xvc2Vfb3V0IG9jID0gZmx1c2ggb2M7IGNsb3NlX291dF9jaGFubmVsIG9jXG5sZXQgY2xvc2Vfb3V0X25vZXJyIG9jID1cbiAgKHRyeSBmbHVzaCBvYyB3aXRoIF8gLT4gKCkpO1xuICAodHJ5IGNsb3NlX291dF9jaGFubmVsIG9jIHdpdGggXyAtPiAoKSlcbmV4dGVybmFsIHNldF9iaW5hcnlfbW9kZV9vdXQgOiBvdXRfY2hhbm5lbCAtPiBib29sIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXCJcblxuKCogR2VuZXJhbCBpbnB1dCBmdW5jdGlvbnMgKilcblxuZXh0ZXJuYWwgc2V0X2luX2NoYW5uZWxfbmFtZTogaW5fY2hhbm5lbCAtPiBzdHJpbmcgLT4gdW5pdCA9XG4gIFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXCJcblxubGV0IG9wZW5faW5fZ2VuIG1vZGUgcGVybSBuYW1lID1cbiAgbGV0IGMgPSBvcGVuX2Rlc2NyaXB0b3JfaW4ob3Blbl9kZXNjIG5hbWUgbW9kZSBwZXJtKSBpblxuICBzZXRfaW5fY2hhbm5lbF9uYW1lIGMgbmFtZTtcbiAgY1xuXG5sZXQgb3Blbl9pbiBuYW1lID1cbiAgb3Blbl9pbl9nZW4gW09wZW5fcmRvbmx5OyBPcGVuX3RleHRdIDAgbmFtZVxuXG5sZXQgb3Blbl9pbl9iaW4gbmFtZSA9XG4gIG9wZW5faW5fZ2VuIFtPcGVuX3Jkb25seTsgT3Blbl9iaW5hcnldIDAgbmFtZVxuXG5leHRlcm5hbCBpbnB1dF9jaGFyIDogaW5fY2hhbm5lbCAtPiBjaGFyID0gXCJjYW1sX21sX2lucHV0X2NoYXJcIlxuXG5leHRlcm5hbCB1bnNhZmVfaW5wdXQgOiBpbl9jaGFubmVsIC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gaW50XG4gICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfaW5wdXRcIlxuXG5sZXQgaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJpbnB1dFwiXG4gIGVsc2UgdW5zYWZlX2lucHV0IGljIHMgb2ZzIGxlblxuXG5sZXQgcmVjIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgbGVuIDw9IDAgdGhlbiAoKSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSB1bnNhZmVfaW5wdXQgaWMgcyBvZnMgbGVuIGluXG4gICAgaWYgciA9IDBcbiAgICB0aGVuIHJhaXNlIEVuZF9vZl9maWxlXG4gICAgZWxzZSB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgKG9mcyArIHIpIChsZW4gLSByKVxuICBlbmRcblxubGV0IHJlYWxseV9pbnB1dCBpYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYnl0ZXNfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcInJlYWxseV9pbnB1dFwiXG4gIGVsc2UgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIG9mcyBsZW5cblxubGV0IHJlYWxseV9pbnB1dF9zdHJpbmcgaWMgbGVuID1cbiAgbGV0IHMgPSBieXRlc19jcmVhdGUgbGVuIGluXG4gIHJlYWxseV9pbnB1dCBpYyBzIDAgbGVuO1xuICBieXRlc191bnNhZmVfdG9fc3RyaW5nIHNcblxuZXh0ZXJuYWwgaW5wdXRfc2Nhbl9saW5lIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lXCJcblxubGV0IGlucHV0X2xpbmUgY2hhbiA9XG4gIGxldCByZWMgYnVpbGRfcmVzdWx0IGJ1ZiBwb3MgPSBmdW5jdGlvblxuICAgIFtdIC0+IGJ1ZlxuICB8IGhkIDo6IHRsIC0+XG4gICAgICBsZXQgbGVuID0gYnl0ZXNfbGVuZ3RoIGhkIGluXG4gICAgICBieXRlc19ibGl0IGhkIDAgYnVmIChwb3MgLSBsZW4pIGxlbjtcbiAgICAgIGJ1aWxkX3Jlc3VsdCBidWYgKHBvcyAtIGxlbikgdGwgaW5cbiAgbGV0IHJlYyBzY2FuIGFjY3UgbGVuID1cbiAgICBsZXQgbiA9IGlucHV0X3NjYW5fbGluZSBjaGFuIGluXG4gICAgaWYgbiA9IDAgdGhlbiBiZWdpbiAgICAgICAgICAgICAgICAgICAoKiBuID0gMDogd2UgYXJlIGF0IEVPRiAqKVxuICAgICAgbWF0Y2ggYWNjdSB3aXRoXG4gICAgICAgIFtdIC0+IHJhaXNlIEVuZF9vZl9maWxlXG4gICAgICB8IF8gIC0+IGJ1aWxkX3Jlc3VsdCAoYnl0ZXNfY3JlYXRlIGxlbikgbGVuIGFjY3VcbiAgICBlbmQgZWxzZSBpZiBuID4gMCB0aGVuIGJlZ2luICAgICAgICAgICgqIG4gPiAwOiBuZXdsaW5lIGZvdW5kIGluIGJ1ZmZlciAqKVxuICAgICAgbGV0IHJlcyA9IGJ5dGVzX2NyZWF0ZSAobiAtIDEpIGluXG4gICAgICBpZ25vcmUgKHVuc2FmZV9pbnB1dCBjaGFuIHJlcyAwIChuIC0gMSkpO1xuICAgICAgaWdub3JlIChpbnB1dF9jaGFyIGNoYW4pOyAgICAgICAgICAgKCogc2tpcCB0aGUgbmV3bGluZSAqKVxuICAgICAgbWF0Y2ggYWNjdSB3aXRoXG4gICAgICAgIFtdIC0+IHJlc1xuICAgICAgfCAgXyAtPiBsZXQgbGVuID0gbGVuICsgbiAtIDEgaW5cbiAgICAgICAgICAgICAgYnVpbGRfcmVzdWx0IChieXRlc19jcmVhdGUgbGVuKSBsZW4gKHJlcyA6OiBhY2N1KVxuICAgIGVuZCBlbHNlIGJlZ2luICAgICAgICAgICAgICAgICAgICAgICAgKCogbiA8IDA6IG5ld2xpbmUgbm90IGZvdW5kICopXG4gICAgICBsZXQgYmVnID0gYnl0ZXNfY3JlYXRlICgtbikgaW5cbiAgICAgIGlnbm9yZSh1bnNhZmVfaW5wdXQgY2hhbiBiZWcgMCAoLW4pKTtcbiAgICAgIHNjYW4gKGJlZyA6OiBhY2N1KSAobGVuIC0gbilcbiAgICBlbmRcbiAgaW4gYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyAoc2NhbiBbXSAwKVxuXG5leHRlcm5hbCBpbnB1dF9ieXRlIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfY2hhclwiXG5leHRlcm5hbCBpbnB1dF9iaW5hcnlfaW50IDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfaW50XCJcbmV4dGVybmFsIGlucHV0X3ZhbHVlIDogaW5fY2hhbm5lbCAtPiAnYSA9IFwiY2FtbF9pbnB1dF92YWx1ZVwiXG5leHRlcm5hbCBzZWVrX2luIDogaW5fY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX2luXCJcbmV4dGVybmFsIHBvc19pbiA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX3Bvc19pblwiXG5leHRlcm5hbCBpbl9jaGFubmVsX2xlbmd0aCA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZVwiXG5leHRlcm5hbCBjbG9zZV9pbiA6IGluX2NoYW5uZWwgLT4gdW5pdCA9IFwiY2FtbF9tbF9jbG9zZV9jaGFubmVsXCJcbmxldCBjbG9zZV9pbl9ub2VyciBpYyA9ICh0cnkgY2xvc2VfaW4gaWMgd2l0aCBfIC0+ICgpKVxuZXh0ZXJuYWwgc2V0X2JpbmFyeV9tb2RlX2luIDogaW5fY2hhbm5lbCAtPiBib29sIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGVcIlxuXG4oKiBPdXRwdXQgZnVuY3Rpb25zIG9uIHN0YW5kYXJkIG91dHB1dCAqKVxuXG5sZXQgcHJpbnRfY2hhciBjID0gb3V0cHV0X2NoYXIgc3Rkb3V0IGNcbmxldCBwcmludF9zdHJpbmcgcyA9IG91dHB1dF9zdHJpbmcgc3Rkb3V0IHNcbmxldCBwcmludF9ieXRlcyBzID0gb3V0cHV0X2J5dGVzIHN0ZG91dCBzXG5sZXQgcHJpbnRfaW50IGkgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCAoc3RyaW5nX29mX2ludCBpKVxubGV0IHByaW50X2Zsb2F0IGYgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCAoc3RyaW5nX29mX2Zsb2F0IGYpXG5sZXQgcHJpbnRfZW5kbGluZSBzID1cbiAgb3V0cHV0X3N0cmluZyBzdGRvdXQgczsgb3V0cHV0X2NoYXIgc3Rkb3V0ICdcXG4nOyBmbHVzaCBzdGRvdXRcbmxldCBwcmludF9uZXdsaW5lICgpID0gb3V0cHV0X2NoYXIgc3Rkb3V0ICdcXG4nOyBmbHVzaCBzdGRvdXRcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBlcnJvciAqKVxuXG5sZXQgcHJlcnJfY2hhciBjID0gb3V0cHV0X2NoYXIgc3RkZXJyIGNcbmxldCBwcmVycl9zdHJpbmcgcyA9IG91dHB1dF9zdHJpbmcgc3RkZXJyIHNcbmxldCBwcmVycl9ieXRlcyBzID0gb3V0cHV0X2J5dGVzIHN0ZGVyciBzXG5sZXQgcHJlcnJfaW50IGkgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciAoc3RyaW5nX29mX2ludCBpKVxubGV0IHByZXJyX2Zsb2F0IGYgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciAoc3RyaW5nX29mX2Zsb2F0IGYpXG5sZXQgcHJlcnJfZW5kbGluZSBzID1cbiAgb3V0cHV0X3N0cmluZyBzdGRlcnIgczsgb3V0cHV0X2NoYXIgc3RkZXJyICdcXG4nOyBmbHVzaCBzdGRlcnJcbmxldCBwcmVycl9uZXdsaW5lICgpID0gb3V0cHV0X2NoYXIgc3RkZXJyICdcXG4nOyBmbHVzaCBzdGRlcnJcblxuKCogSW5wdXQgZnVuY3Rpb25zIG9uIHN0YW5kYXJkIGlucHV0ICopXG5cbmxldCByZWFkX2xpbmUgKCkgPSBmbHVzaCBzdGRvdXQ7IGlucHV0X2xpbmUgc3RkaW5cbmxldCByZWFkX2ludCAoKSA9IGludF9vZl9zdHJpbmcocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9pbnRfb3B0ICgpID0gaW50X29mX3N0cmluZ19vcHQocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9mbG9hdCAoKSA9IGZsb2F0X29mX3N0cmluZyhyZWFkX2xpbmUoKSlcbmxldCByZWFkX2Zsb2F0X29wdCAoKSA9IGZsb2F0X29mX3N0cmluZ19vcHQocmVhZF9saW5lKCkpXG5cbigqIE9wZXJhdGlvbnMgb24gbGFyZ2UgZmlsZXMgKilcblxubW9kdWxlIExhcmdlRmlsZSA9XG4gIHN0cnVjdFxuICAgIGV4dGVybmFsIHNlZWtfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50NjQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX291dF82NFwiXG4gICAgZXh0ZXJuYWwgcG9zX291dCA6IG91dF9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX3Bvc19vdXRfNjRcIlxuICAgIGV4dGVybmFsIG91dF9jaGFubmVsX2xlbmd0aCA6IG91dF9jaGFubmVsIC0+IGludDY0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFwiXG4gICAgZXh0ZXJuYWwgc2Vla19pbiA6IGluX2NoYW5uZWwgLT4gaW50NjQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX2luXzY0XCJcbiAgICBleHRlcm5hbCBwb3NfaW4gOiBpbl9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX3Bvc19pbl82NFwiXG4gICAgZXh0ZXJuYWwgaW5fY2hhbm5lbF9sZW5ndGggOiBpbl9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFwiXG4gIGVuZFxuXG4oKiBGb3JtYXRzICopXG5cbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDZcbiAgID0gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2XG4gICA9IEZvcm1hdCBvZiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZtdFxuICAgICAgICAgICAgICAgKiBzdHJpbmdcblxudHlwZSAoJ2EsICdiLCAnYywgJ2QpIGZvcm1hdDQgPSAoJ2EsICdiLCAnYywgJ2MsICdjLCAnZCkgZm9ybWF0NlxuXG50eXBlICgnYSwgJ2IsICdjKSBmb3JtYXQgPSAoJ2EsICdiLCAnYywgJ2MpIGZvcm1hdDRcblxubGV0IHN0cmluZ19vZl9mb3JtYXQgKEZvcm1hdCAoX2ZtdCwgc3RyKSkgPSBzdHJcblxuZXh0ZXJuYWwgZm9ybWF0X29mX3N0cmluZyA6XG4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT5cbiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiA9IFwiJWlkZW50aXR5XCJcblxubGV0ICggXl4gKSAoRm9ybWF0IChmbXQxLCBzdHIxKSkgKEZvcm1hdCAoZm10Miwgc3RyMikpID1cbiAgRm9ybWF0IChDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuY29uY2F0X2ZtdCBmbXQxIGZtdDIsXG4gICAgICAgICAgc3RyMSBeIFwiJSxcIiBeIHN0cjIpXG5cbigqIE1pc2NlbGxhbmVvdXMgKilcblxuZXh0ZXJuYWwgc3lzX2V4aXQgOiBpbnQgLT4gJ2EgPSBcImNhbWxfc3lzX2V4aXRcIlxuXG5sZXQgZXhpdF9mdW5jdGlvbiA9IENhbWxpbnRlcm5hbEF0b21pYy5tYWtlIGZsdXNoX2FsbFxuXG5sZXQgcmVjIGF0X2V4aXQgZiA9XG4gIGxldCBtb2R1bGUgQXRvbWljID0gQ2FtbGludGVybmFsQXRvbWljIGluXG4gICgqIE1QUiM3MjUzLCBNUFIjNzc5NjogbWFrZSBzdXJlIFwiZlwiIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSAqKVxuICBsZXQgZl95ZXRfdG9fcnVuID0gQXRvbWljLm1ha2UgdHJ1ZSBpblxuICBsZXQgb2xkX2V4aXQgPSBBdG9taWMuZ2V0IGV4aXRfZnVuY3Rpb24gaW5cbiAgbGV0IG5ld19leGl0ICgpID1cbiAgICBpZiBBdG9taWMuY29tcGFyZV9hbmRfc2V0IGZfeWV0X3RvX3J1biB0cnVlIGZhbHNlIHRoZW4gZiAoKSA7XG4gICAgb2xkX2V4aXQgKClcbiAgaW5cbiAgbGV0IHN1Y2Nlc3MgPSBBdG9taWMuY29tcGFyZV9hbmRfc2V0IGV4aXRfZnVuY3Rpb24gb2xkX2V4aXQgbmV3X2V4aXQgaW5cbiAgaWYgbm90IHN1Y2Nlc3MgdGhlbiBhdF9leGl0IGZcblxubGV0IGRvX2F0X2V4aXQgKCkgPSAoQ2FtbGludGVybmFsQXRvbWljLmdldCBleGl0X2Z1bmN0aW9uKSAoKVxuXG5sZXQgZXhpdCByZXRjb2RlID1cbiAgZG9fYXRfZXhpdCAoKTtcbiAgc3lzX2V4aXQgcmV0Y29kZVxuXG5sZXQgXyA9IHJlZ2lzdGVyX25hbWVkX3ZhbHVlIFwiUGVydmFzaXZlcy5kb19hdF9leGl0XCIgZG9fYXRfZXhpdFxuXG5leHRlcm5hbCBtYWpvciA6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9nY19tYWpvclwiXG5leHRlcm5hbCBuYWtlZF9wb2ludGVyc19jaGVja2VkIDogdW5pdCAtPiBib29sXG4gID0gXCJjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkXCJcbmxldCAoKSA9IGlmIG5ha2VkX3BvaW50ZXJzX2NoZWNrZWQgKCkgdGhlbiBhdF9leGl0IG1ham9yXG5cbigqTU9EVUxFX0FMSUFTRVMqKVxubW9kdWxlIEFyZyAgICAgICAgICA9IEFyZ1xubW9kdWxlIEFycmF5ICAgICAgICA9IEFycmF5XG5tb2R1bGUgQXJyYXlMYWJlbHMgID0gQXJyYXlMYWJlbHNcbm1vZHVsZSBBdG9taWMgICAgICAgPSBBdG9taWNcbm1vZHVsZSBCaWdhcnJheSAgICAgPSBCaWdhcnJheVxubW9kdWxlIEJvb2wgICAgICAgICA9IEJvb2xcbm1vZHVsZSBCdWZmZXIgICAgICAgPSBCdWZmZXJcbm1vZHVsZSBCeXRlcyAgICAgICAgPSBCeXRlc1xubW9kdWxlIEJ5dGVzTGFiZWxzICA9IEJ5dGVzTGFiZWxzXG5tb2R1bGUgQ2FsbGJhY2sgICAgID0gQ2FsbGJhY2tcbm1vZHVsZSBDaGFyICAgICAgICAgPSBDaGFyXG5tb2R1bGUgQ29tcGxleCAgICAgID0gQ29tcGxleFxubW9kdWxlIERpZ2VzdCAgICAgICA9IERpZ2VzdFxubW9kdWxlIEVpdGhlciAgICAgICA9IEVpdGhlclxubW9kdWxlIEVwaGVtZXJvbiAgICA9IEVwaGVtZXJvblxubW9kdWxlIEZpbGVuYW1lICAgICA9IEZpbGVuYW1lXG5tb2R1bGUgRmxvYXQgICAgICAgID0gRmxvYXRcbm1vZHVsZSBGb3JtYXQgICAgICAgPSBGb3JtYXRcbm1vZHVsZSBGdW4gICAgICAgICAgPSBGdW5cbm1vZHVsZSBHYyAgICAgICAgICAgPSBHY1xubW9kdWxlIEdlbmxleCAgICAgICA9IEdlbmxleFxubW9kdWxlIEhhc2h0YmwgICAgICA9IEhhc2h0Ymxcbm1vZHVsZSBJbl9jaGFubmVsICAgPSBJbl9jaGFubmVsXG5tb2R1bGUgSW50ICAgICAgICAgID0gSW50XG5tb2R1bGUgSW50MzIgICAgICAgID0gSW50MzJcbm1vZHVsZSBJbnQ2NCAgICAgICAgPSBJbnQ2NFxubW9kdWxlIExhenkgICAgICAgICA9IExhenlcbm1vZHVsZSBMZXhpbmcgICAgICAgPSBMZXhpbmdcbm1vZHVsZSBMaXN0ICAgICAgICAgPSBMaXN0XG5tb2R1bGUgTGlzdExhYmVscyAgID0gTGlzdExhYmVsc1xubW9kdWxlIE1hcCAgICAgICAgICA9IE1hcFxubW9kdWxlIE1hcnNoYWwgICAgICA9IE1hcnNoYWxcbm1vZHVsZSBNb3JlTGFiZWxzICAgPSBNb3JlTGFiZWxzXG5tb2R1bGUgTmF0aXZlaW50ICAgID0gTmF0aXZlaW50XG5tb2R1bGUgT2JqICAgICAgICAgID0gT2JqXG5tb2R1bGUgT28gICAgICAgICAgID0gT29cbm1vZHVsZSBPcHRpb24gICAgICAgPSBPcHRpb25cbm1vZHVsZSBPdXRfY2hhbm5lbCAgPSBPdXRfY2hhbm5lbFxubW9kdWxlIFBhcnNpbmcgICAgICA9IFBhcnNpbmdcbm1vZHVsZSBQZXJ2YXNpdmVzICAgPSBQZXJ2YXNpdmVzXG5tb2R1bGUgUHJpbnRleGMgICAgID0gUHJpbnRleGNcbm1vZHVsZSBQcmludGYgICAgICAgPSBQcmludGZcbm1vZHVsZSBRdWV1ZSAgICAgICAgPSBRdWV1ZVxubW9kdWxlIFJhbmRvbSAgICAgICA9IFJhbmRvbVxubW9kdWxlIFJlc3VsdCAgICAgICA9IFJlc3VsdFxubW9kdWxlIFNjYW5mICAgICAgICA9IFNjYW5mXG5tb2R1bGUgU2VxICAgICAgICAgID0gU2VxXG5tb2R1bGUgU2V0ICAgICAgICAgID0gU2V0XG5tb2R1bGUgU3RhY2sgICAgICAgID0gU3RhY2tcbm1vZHVsZSBTdGRMYWJlbHMgICAgPSBTdGRMYWJlbHNcbm1vZHVsZSBTdHJlYW0gICAgICAgPSBTdHJlYW1cbm1vZHVsZSBTdHJpbmcgICAgICAgPSBTdHJpbmdcbm1vZHVsZSBTdHJpbmdMYWJlbHMgPSBTdHJpbmdMYWJlbHNcbm1vZHVsZSBTeXMgICAgICAgICAgPSBTeXNcbm1vZHVsZSBVY2hhciAgICAgICAgPSBVY2hhclxubW9kdWxlIFVuaXQgICAgICAgICA9IFVuaXRcbm1vZHVsZSBXZWFrICAgICAgICAgPSBXZWFrXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvclxuICAgVGhpcyBpcyBhIGxhZ2dlZC1GaWJvbmFjY2kgRig1NSwgMjQsICspIHdpdGggYSBtb2RpZmllZCBhZGRpdGlvblxuICAgZnVuY3Rpb24gdG8gZW5oYW5jZSB0aGUgbWl4aW5nIG9mIGJpdHMuXG4gICBJZiB3ZSB1c2Ugbm9ybWFsIGFkZGl0aW9uLCB0aGUgbG93LW9yZGVyIGJpdCBmYWlscyB0ZXN0cyAxIGFuZCA3XG4gICBvZiB0aGUgRGllaGFyZCB0ZXN0IHN1aXRlLCBhbmQgYml0cyAxIGFuZCAyIGFsc28gZmFpbCB0ZXN0IDcuXG4gICBJZiB3ZSB1c2UgbXVsdGlwbGljYXRpb24gYXMgc3VnZ2VzdGVkIGJ5IE1hcnNhZ2xpYSwgaXQgZG9lc24ndCBmYXJlXG4gICBtdWNoIGJldHRlci5cbiAgIEJ5IG1peGluZyB0aGUgYml0cyBvZiBvbmUgb2YgdGhlIG51bWJlcnMgYmVmb3JlIGFkZGl0aW9uIChYT1IgdGhlXG4gICA1IGhpZ2gtb3JkZXIgYml0cyBpbnRvIHRoZSBsb3ctb3JkZXIgYml0cyksIHdlIGdldCBhIGdlbmVyYXRvciB0aGF0XG4gICBwYXNzZXMgYWxsIHRoZSBEaWVoYXJkIHRlc3RzLlxuKilcblxuZXh0ZXJuYWwgcmFuZG9tX3NlZWQ6IHVuaXQgLT4gaW50IGFycmF5ID0gXCJjYW1sX3N5c19yYW5kb21fc2VlZFwiXG5cbm1vZHVsZSBTdGF0ZSA9IHN0cnVjdFxuXG4gIHR5cGUgdCA9IHsgc3QgOiBpbnQgYXJyYXk7IG11dGFibGUgaWR4IDogaW50IH1cblxuICBsZXQgbmV3X3N0YXRlICgpID0geyBzdCA9IEFycmF5Lm1ha2UgNTUgMDsgaWR4ID0gMCB9XG4gIGxldCBhc3NpZ24gc3QxIHN0MiA9XG4gICAgQXJyYXkuYmxpdCBzdDIuc3QgMCBzdDEuc3QgMCA1NTtcbiAgICBzdDEuaWR4IDwtIHN0Mi5pZHhcblxuXG4gIGxldCBmdWxsX2luaXQgcyBzZWVkID1cbiAgICBsZXQgY29tYmluZSBhY2N1IHggPSBEaWdlc3Quc3RyaW5nIChhY2N1IF4gSW50LnRvX3N0cmluZyB4KSBpblxuICAgIGxldCBleHRyYWN0IGQgPVxuICAgICAgQ2hhci5jb2RlIGQuWzBdICsgKENoYXIuY29kZSBkLlsxXSBsc2wgOCkgKyAoQ2hhci5jb2RlIGQuWzJdIGxzbCAxNilcbiAgICAgICsgKENoYXIuY29kZSBkLlszXSBsc2wgMjQpXG4gICAgaW5cbiAgICBsZXQgc2VlZCA9IGlmIEFycmF5Lmxlbmd0aCBzZWVkID0gMCB0aGVuIFt8IDAgfF0gZWxzZSBzZWVkIGluXG4gICAgbGV0IGwgPSBBcnJheS5sZW5ndGggc2VlZCBpblxuICAgIGZvciBpID0gMCB0byA1NCBkb1xuICAgICAgcy5zdC4oaSkgPC0gaTtcbiAgICBkb25lO1xuICAgIGxldCBhY2N1ID0gcmVmIFwieFwiIGluXG4gICAgZm9yIGkgPSAwIHRvIDU0ICsgSW50Lm1heCA1NSBsIGRvXG4gICAgICBsZXQgaiA9IGkgbW9kIDU1IGluXG4gICAgICBsZXQgayA9IGkgbW9kIGwgaW5cbiAgICAgIGFjY3UgOj0gY29tYmluZSAhYWNjdSBzZWVkLihrKTtcbiAgICAgIHMuc3QuKGopIDwtIChzLnN0LihqKSBseG9yIGV4dHJhY3QgIWFjY3UpIGxhbmQgMHgzRkZGRkZGRjsgICgqIFBSIzU1NzUgKilcbiAgICBkb25lO1xuICAgIHMuaWR4IDwtIDBcblxuXG4gIGxldCBtYWtlIHNlZWQgPVxuICAgIGxldCByZXN1bHQgPSBuZXdfc3RhdGUgKCkgaW5cbiAgICBmdWxsX2luaXQgcmVzdWx0IHNlZWQ7XG4gICAgcmVzdWx0XG5cblxuICBsZXQgbWFrZV9zZWxmX2luaXQgKCkgPSBtYWtlIChyYW5kb21fc2VlZCAoKSlcblxuICBsZXQgY29weSBzID1cbiAgICBsZXQgcmVzdWx0ID0gbmV3X3N0YXRlICgpIGluXG4gICAgYXNzaWduIHJlc3VsdCBzO1xuICAgIHJlc3VsdFxuXG5cbiAgKCogUmV0dXJucyAzMCByYW5kb20gYml0cyBhcyBhbiBpbnRlZ2VyIDAgPD0geCA8IDEwNzM3NDE4MjQgKilcbiAgbGV0IGJpdHMgcyA9XG4gICAgcy5pZHggPC0gKHMuaWR4ICsgMSkgbW9kIDU1O1xuICAgIGxldCBjdXJ2YWwgPSBzLnN0LihzLmlkeCkgaW5cbiAgICBsZXQgbmV3dmFsID0gcy5zdC4oKHMuaWR4ICsgMjQpIG1vZCA1NSlcbiAgICAgICAgICAgICAgICAgKyAoY3VydmFsIGx4b3IgKChjdXJ2YWwgbHNyIDI1KSBsYW5kIDB4MUYpKSBpblxuICAgIGxldCBuZXd2YWwzMCA9IG5ld3ZhbCBsYW5kIDB4M0ZGRkZGRkYgaW4gICgqIFBSIzU1NzUgKilcbiAgICBzLnN0LihzLmlkeCkgPC0gbmV3dmFsMzA7XG4gICAgbmV3dmFsMzBcblxuXG4gIGxldCByZWMgaW50YXV4IHMgbiA9XG4gICAgbGV0IHIgPSBiaXRzIHMgaW5cbiAgICBsZXQgdiA9IHIgbW9kIG4gaW5cbiAgICBpZiByIC0gdiA+IDB4M0ZGRkZGRkYgLSBuICsgMSB0aGVuIGludGF1eCBzIG4gZWxzZSB2XG5cbiAgbGV0IGludCBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA+IDB4M0ZGRkZGRkYgfHwgYm91bmQgPD0gMFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50XCJcbiAgICBlbHNlIGludGF1eCBzIGJvdW5kXG5cbiAgbGV0IHJlYyBpbnQ2M2F1eCBzIG4gPVxuICAgIGxldCBtYXhfaW50XzMyID0gKDEgbHNsIDMwKSArIDB4M0ZGRkZGRkYgaW4gKCogMHg3RkZGRkZGRiAqKVxuICAgIGxldCBiMSA9IGJpdHMgcyBpblxuICAgIGxldCBiMiA9IGJpdHMgcyBpblxuICAgIGxldCAociwgbWF4X2ludCkgPVxuICAgICAgaWYgbiA8PSBtYXhfaW50XzMyIHRoZW5cbiAgICAgICAgKCogMzEgcmFuZG9tIGJpdHMgb24gYm90aCA2NC1iaXQgT0NhbWwgYW5kIEphdmFTY3JpcHQuXG4gICAgICAgICAgIFVzZSB1cHBlciAxNSBiaXRzIG9mIGIxIGFuZCAxNiBiaXRzIG9mIGIyLiAqKVxuICAgICAgICBsZXQgYnBvcyA9XG4gICAgICAgICAgKCgoYjIgbGFuZCAweDNGRkZDMDAwKSBsc2wgMSkgbG9yIChiMSBsc3IgMTUpKVxuICAgICAgICBpblxuICAgICAgICAgIChicG9zLCBtYXhfaW50XzMyKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgYjMgPSBiaXRzIHMgaW5cbiAgICAgICAgKCogNjIgcmFuZG9tIGJpdHMgb24gNjQtYml0IE9DYW1sOyB1bnJlYWNoYWJsZSBvbiBKYXZhU2NyaXB0LlxuICAgICAgICAgICBVc2UgdXBwZXIgMjAgYml0cyBvZiBiMSBhbmQgMjEgYml0cyBvZiBiMiBhbmQgYjMuICopXG4gICAgICAgIGxldCBicG9zID1cbiAgICAgICAgICAoKCgoYjMgbGFuZCAweDNGRkZGRTAwKSBsc2wgMTIpIGxvciAoYjIgbHNyIDkpKSBsc2wgMjApXG4gICAgICAgICAgICBsb3IgKGIxIGxzciAxMClcbiAgICAgICAgaW5cbiAgICAgICAgICAoYnBvcywgbWF4X2ludClcbiAgICBpblxuICAgIGxldCB2ID0gciBtb2QgbiBpblxuICAgIGlmIHIgLSB2ID4gbWF4X2ludCAtIG4gKyAxIHRoZW4gaW50NjNhdXggcyBuIGVsc2UgdlxuXG4gIGxldCBmdWxsX2ludCBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiUmFuZG9tLmZ1bGxfaW50XCJcbiAgICBlbHNlIGlmIGJvdW5kID4gMHgzRkZGRkZGRiB0aGVuXG4gICAgICBpbnQ2M2F1eCBzIGJvdW5kXG4gICAgZWxzZVxuICAgICAgaW50YXV4IHMgYm91bmRcblxuXG4gIGxldCByZWMgaW50MzJhdXggcyBuID1cbiAgICBsZXQgYjEgPSBJbnQzMi5vZl9pbnQgKGJpdHMgcykgaW5cbiAgICBsZXQgYjIgPSBJbnQzMi5zaGlmdF9sZWZ0IChJbnQzMi5vZl9pbnQgKGJpdHMgcyBsYW5kIDEpKSAzMCBpblxuICAgIGxldCByID0gSW50MzIubG9nb3IgYjEgYjIgaW5cbiAgICBsZXQgdiA9IEludDMyLnJlbSByIG4gaW5cbiAgICBpZiBJbnQzMi5zdWIgciB2ID4gSW50MzIuYWRkIChJbnQzMi5zdWIgSW50MzIubWF4X2ludCBuKSAxbFxuICAgIHRoZW4gaW50MzJhdXggcyBuXG4gICAgZWxzZSB2XG5cbiAgbGV0IGludDMyIHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDBsXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQzMlwiXG4gICAgZWxzZSBpbnQzMmF1eCBzIGJvdW5kXG5cblxuICBsZXQgcmVjIGludDY0YXV4IHMgbiA9XG4gICAgbGV0IGIxID0gSW50NjQub2ZfaW50IChiaXRzIHMpIGluXG4gICAgbGV0IGIyID0gSW50NjQuc2hpZnRfbGVmdCAoSW50NjQub2ZfaW50IChiaXRzIHMpKSAzMCBpblxuICAgIGxldCBiMyA9IEludDY0LnNoaWZ0X2xlZnQgKEludDY0Lm9mX2ludCAoYml0cyBzIGxhbmQgNykpIDYwIGluXG4gICAgbGV0IHIgPSBJbnQ2NC5sb2dvciBiMSAoSW50NjQubG9nb3IgYjIgYjMpIGluXG4gICAgbGV0IHYgPSBJbnQ2NC5yZW0gciBuIGluXG4gICAgaWYgSW50NjQuc3ViIHIgdiA+IEludDY0LmFkZCAoSW50NjQuc3ViIEludDY0Lm1heF9pbnQgbikgMUxcbiAgICB0aGVuIGludDY0YXV4IHMgblxuICAgIGVsc2UgdlxuXG4gIGxldCBpbnQ2NCBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwTFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50NjRcIlxuICAgIGVsc2UgaW50NjRhdXggcyBib3VuZFxuXG5cbiAgbGV0IG5hdGl2ZWludCA9XG4gICAgaWYgTmF0aXZlaW50LnNpemUgPSAzMlxuICAgIHRoZW4gZnVuIHMgYm91bmQgLT4gTmF0aXZlaW50Lm9mX2ludDMyIChpbnQzMiBzIChOYXRpdmVpbnQudG9faW50MzIgYm91bmQpKVxuICAgIGVsc2UgZnVuIHMgYm91bmQgLT4gSW50NjQudG9fbmF0aXZlaW50IChpbnQ2NCBzIChJbnQ2NC5vZl9uYXRpdmVpbnQgYm91bmQpKVxuXG5cbiAgKCogUmV0dXJucyBhIGZsb2F0IDAgPD0geCA8PSAxIHdpdGggYXQgbW9zdCA2MCBiaXRzIG9mIHByZWNpc2lvbi4gKilcbiAgbGV0IHJhd2Zsb2F0IHMgPVxuICAgIGxldCBzY2FsZSA9IDEwNzM3NDE4MjQuMCAgKCogMl4zMCAqKVxuICAgIGFuZCByMSA9IFN0ZGxpYi5mbG9hdCAoYml0cyBzKVxuICAgIGFuZCByMiA9IFN0ZGxpYi5mbG9hdCAoYml0cyBzKVxuICAgIGluIChyMSAvLiBzY2FsZSArLiByMikgLy4gc2NhbGVcblxuXG4gIGxldCBmbG9hdCBzIGJvdW5kID0gcmF3ZmxvYXQgcyAqLiBib3VuZFxuXG4gIGxldCBib29sIHMgPSAoYml0cyBzIGxhbmQgMSA9IDApXG5cbiAgbGV0IGJpdHMzMiBzID1cbiAgICBsZXQgYjEgPSBJbnQzMi4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSAxNCkgaW4gICgqIDE2IGJpdHMgKilcbiAgICBsZXQgYjIgPSBJbnQzMi4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSAxNCkgaW4gICgqIDE2IGJpdHMgKilcbiAgICBJbnQzMi4obG9nb3IgYjEgKHNoaWZ0X2xlZnQgYjIgMTYpKVxuXG4gIGxldCBiaXRzNjQgcyA9XG4gICAgbGV0IGIxID0gSW50NjQuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgOSkgaW4gICgqIDIxIGJpdHMgKilcbiAgICBsZXQgYjIgPSBJbnQ2NC4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSA5KSBpbiAgKCogMjEgYml0cyAqKVxuICAgIGxldCBiMyA9IEludDY0LihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDgpIGluICAoKiAyMiBiaXRzICopXG4gICAgSW50NjQuKGxvZ29yIGIxIChsb2dvciAoc2hpZnRfbGVmdCBiMiAyMSkgKHNoaWZ0X2xlZnQgYjMgNDIpKSlcblxuICBsZXQgbmF0aXZlYml0cyA9XG4gICAgaWYgTmF0aXZlaW50LnNpemUgPSAzMlxuICAgIHRoZW4gZnVuIHMgLT4gTmF0aXZlaW50Lm9mX2ludDMyIChiaXRzMzIgcylcbiAgICBlbHNlIGZ1biBzIC0+IEludDY0LnRvX25hdGl2ZWludCAoYml0czY0IHMpXG5cbmVuZFxuXG4oKiBUaGlzIGlzIHRoZSBzdGF0ZSB5b3UgZ2V0IHdpdGggW2luaXQgMjcxODI4MThdIGFuZCB0aGVuIGFwcGx5aW5nXG4gICB0aGUgXCJsYW5kIDB4M0ZGRkZGRkZcIiBmaWx0ZXIgdG8gdGhlbS4gIFNlZSAjNTU3NSwgIzU3OTMsICM1OTc3LiAqKVxubGV0IGRlZmF1bHQgPSB7XG4gIFN0YXRlLnN0ID0gW3xcbiAgICAgIDB4M2FlMjUyMmI7IDB4MWQ4ZDQ2MzQ7IDB4MTViNGZhZDA7IDB4MThiMTRhY2U7IDB4MTJmOGEzYzQ7IDB4M2IwODZjNDc7XG4gICAgICAweDE2ZDQ2N2Q2OyAweDEwMWQ5MWM3OyAweDMyMWRmMTc3OyAweDAxNzZjMTkzOyAweDFmZjcyYmYxOyAweDFlODg5MTA5O1xuICAgICAgMHgwYjQ2NGIxODsgMHgyYjg2Yjk3YzsgMHgwODkxZGE0ODsgMHgwMzEzNzQ2MzsgMHgwODVhYzVhMTsgMHgxNWQ2MWYyZjtcbiAgICAgIDB4M2JjZWQzNTk7IDB4MjljMWMxMzI7IDB4M2E4Njc2NmU7IDB4MzY2ZDhjODY7IDB4MWY1YjYyMjI7IDB4M2NlMWI1OWY7XG4gICAgICAweDJlYmY3OGUxOyAweDI3Y2QxYjg2OyAweDI1OGYzZGMzOyAweDM4OWE4MTk0OyAweDAyZTRjNDRjOyAweDE4YzQzZjdkO1xuICAgICAgMHgwZjZlNTM0ZjsgMHgxZTdkZjM1OTsgMHgwNTVkMGI3ZTsgMHgxMGU4NGU3ZTsgMHgxMjYxOThlNDsgMHgwZTc3MjJjYjtcbiAgICAgIDB4MWNiZWRlMjg7IDB4MzM5MWI5NjQ7IDB4M2Q0MGU5MmE7IDB4MGM1OTkzM2Q7IDB4MGI4Y2QwYjc7IDB4MjRlZmZmMWM7XG4gICAgICAweDI4MDNmZGFhOyAweDA4ZWJjNzJlOyAweDBmNTIyZTMyOyAweDA1Mzk4ZWRjOyAweDIxNDRhMDRjOyAweDBhZWYzY2JkO1xuICAgICAgMHgwMWFkNDcxOTsgMHgzNWI5M2NkNjsgMHgyYTU1OWQ0ZjsgMHgxZTZmZDc2ODsgMHgyNmUyN2YzNjsgMHgxODZmMThjMztcbiAgICAgIDB4MmZiZjk2N2E7XG4gICAgfF07XG4gIFN0YXRlLmlkeCA9IDA7XG59XG5cbmxldCBiaXRzICgpID0gU3RhdGUuYml0cyBkZWZhdWx0XG5sZXQgaW50IGJvdW5kID0gU3RhdGUuaW50IGRlZmF1bHQgYm91bmRcbmxldCBmdWxsX2ludCBib3VuZCA9IFN0YXRlLmZ1bGxfaW50IGRlZmF1bHQgYm91bmRcbmxldCBpbnQzMiBib3VuZCA9IFN0YXRlLmludDMyIGRlZmF1bHQgYm91bmRcbmxldCBuYXRpdmVpbnQgYm91bmQgPSBTdGF0ZS5uYXRpdmVpbnQgZGVmYXVsdCBib3VuZFxubGV0IGludDY0IGJvdW5kID0gU3RhdGUuaW50NjQgZGVmYXVsdCBib3VuZFxubGV0IGZsb2F0IHNjYWxlID0gU3RhdGUuZmxvYXQgZGVmYXVsdCBzY2FsZVxubGV0IGJvb2wgKCkgPSBTdGF0ZS5ib29sIGRlZmF1bHRcbmxldCBiaXRzMzIgKCkgPSBTdGF0ZS5iaXRzMzIgZGVmYXVsdFxubGV0IGJpdHM2NCAoKSA9IFN0YXRlLmJpdHM2NCBkZWZhdWx0XG5sZXQgbmF0aXZlYml0cyAoKSA9IFN0YXRlLm5hdGl2ZWJpdHMgZGVmYXVsdFxuXG5sZXQgZnVsbF9pbml0IHNlZWQgPSBTdGF0ZS5mdWxsX2luaXQgZGVmYXVsdCBzZWVkXG5sZXQgaW5pdCBzZWVkID0gU3RhdGUuZnVsbF9pbml0IGRlZmF1bHQgW3wgc2VlZCB8XVxubGV0IHNlbGZfaW5pdCAoKSA9IGZ1bGxfaW5pdCAocmFuZG9tX3NlZWQoKSlcblxuKCogTWFuaXB1bGF0aW5nIHRoZSBjdXJyZW50IHN0YXRlLiAqKVxuXG5sZXQgZ2V0X3N0YXRlICgpID0gU3RhdGUuY29weSBkZWZhdWx0XG5sZXQgc2V0X3N0YXRlIHMgPSBTdGF0ZS5hc3NpZ24gZGVmYXVsdCBzXG5cbigqKioqKioqKioqKioqKioqKioqKlxuXG4oKiBUZXN0IGZ1bmN0aW9ucy4gIE5vdCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeS5cbiAgIFRoZSBbY2hpc3F1YXJlXSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggbiA+IDEwci5cbiAgIEl0IHJldHVybnMgYSB0cmlwbGUgKGxvdywgYWN0dWFsLCBoaWdoKS5cbiAgIElmIGxvdyA8PSBhY3R1YWwgPD0gaGlnaCwgdGhlIFtnXSBmdW5jdGlvbiBwYXNzZWQgdGhlIHRlc3QsXG4gICBvdGhlcndpc2UgaXQgZmFpbGVkLlxuXG4gIFNvbWUgcmVzdWx0czpcblxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAwMFxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCA1MDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMDAgMTAwMFxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAyOTk3OTI2NDM7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMjRcbmluaXQgMTQxNDIxMzY7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMjRcbmluaXQgMjcxODI4MTg7IGluaXRfZGlmZiAxMDI0OyBjaGlzcXVhcmUgZGlmZiAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmIDEwMDsgY2hpc3F1YXJlIGRpZmYgMTAwMDAwIDEwMFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmMiAxMDI0OyBjaGlzcXVhcmUgZGlmZjIgMTAwMDAwIDEwMjRcbmluaXQgMjcxODI4MTg7IGluaXRfZGlmZjIgMTAwOyBjaGlzcXVhcmUgZGlmZjIgMTAwMDAwIDEwMFxuaW5pdCAxNDE0MjEzNjsgaW5pdF9kaWZmMiAxMDA7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAwXG5pbml0IDI5OTc5MjY0MzsgaW5pdF9kaWZmMiAxMDA7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAwXG4tIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDkzNi43NTQ0NDY3OTY2MzI0NjUsIDk5Ny41LCAxMDYzLjI0NTU1MzIwMzM2NzU0KVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODkuNzQwMDAwMDAwMDA1MjM4NywgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg0ODU4LjU3ODY0Mzc2MjY5LCA1MDQ1LjUsIDUxNDEuNDIxMzU2MjM3MzEpXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPVxuKDkzNi43NTQ0NDY3OTY2MzI0NjUsIDk0NC44MDU5OTk5OTk5ODIzMDUsIDEwNjMuMjQ1NTUzMjAzMzY3NTQpXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTAxOS4xOTc0NDAwMDAwMDM1NSwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTA1OS4zMTc3NjAwMDAwMDUzNiwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTAzOS45ODQ2Mzk5OTk5OTUxMiwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTA1NC4zODIwNzk5OTk5OTU3NywgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA5MC4wOTYwMDAwMDAwMDUsIDEyMC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTA3Ni43ODcyMDAwMDAwMDYxMiwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4NS4xNzYwMDAwMDAwMDY3NTIxLCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODUuMjE2MDAwMDAwMDAwMzQ5MiwgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDgwLjYyMjAwMDAwMDAwMzAyNjgsIDEyMC4pXG5cbiopXG5cbigqIFJldHVybiB0aGUgc3VtIG9mIHRoZSBzcXVhcmVzIG9mIHZbaTAsaTFbICopXG5sZXQgcmVjIHN1bXNxIHYgaTAgaTEgPVxuICBpZiBpMCA+PSBpMSB0aGVuIDAuMFxuICBlbHNlIGlmIGkxID0gaTAgKyAxIHRoZW4gU3RkbGliLmZsb2F0IHYuKGkwKSAqLiBTdGRsaWIuZmxvYXQgdi4oaTApXG4gIGVsc2Ugc3Vtc3EgdiBpMCAoKGkwK2kxKS8yKSArLiBzdW1zcSB2ICgoaTAraTEpLzIpIGkxXG5cblxubGV0IGNoaXNxdWFyZSBnIG4gciA9XG4gIGlmIG4gPD0gMTAgKiByIHRoZW4gaW52YWxpZF9hcmcgXCJjaGlzcXVhcmVcIjtcbiAgbGV0IGYgPSBBcnJheS5tYWtlIHIgMCBpblxuICBmb3IgaSA9IDEgdG8gbiBkb1xuICAgIGxldCB0ID0gZyByIGluXG4gICAgZi4odCkgPC0gZi4odCkgKyAxXG4gIGRvbmU7XG4gIGxldCB0ID0gc3Vtc3EgZiAwIHJcbiAgYW5kIHIgPSBTdGRsaWIuZmxvYXQgclxuICBhbmQgbiA9IFN0ZGxpYi5mbG9hdCBuIGluXG4gIGxldCBzciA9IDIuMCAqLiBzcXJ0IHIgaW5cbiAgKHIgLS4gc3IsICAgKHIgKi4gdCAvLiBuKSAtLiBuLCAgIHIgKy4gc3IpXG5cblxuKCogVGhpcyBpcyB0byB0ZXN0IGZvciBsaW5lYXIgZGVwZW5kZW5jaWVzIGJldHdlZW4gc3VjY2Vzc2l2ZSByYW5kb20gbnVtYmVycy5cbiopXG5sZXQgc3QgPSByZWYgMFxubGV0IGluaXRfZGlmZiByID0gc3QgOj0gaW50IHJcbmxldCBkaWZmIHIgPVxuICBsZXQgeDEgPSAhc3RcbiAgYW5kIHgyID0gaW50IHJcbiAgaW5cbiAgc3QgOj0geDI7XG4gIGlmIHgxID49IHgyIHRoZW5cbiAgICB4MSAtIHgyXG4gIGVsc2VcbiAgICByICsgeDEgLSB4MlxuXG5cbmxldCBzdDEgPSByZWYgMFxuYW5kIHN0MiA9IHJlZiAwXG5cblxuKCogVGhpcyBpcyB0byB0ZXN0IGZvciBxdWFkcmF0aWMgZGVwZW5kZW5jaWVzIGJldHdlZW4gc3VjY2Vzc2l2ZSByYW5kb21cbiAgIG51bWJlcnMuXG4qKVxubGV0IGluaXRfZGlmZjIgciA9IHN0MSA6PSBpbnQgcjsgc3QyIDo9IGludCByXG5sZXQgZGlmZjIgciA9XG4gIGxldCB4MSA9ICFzdDFcbiAgYW5kIHgyID0gIXN0MlxuICBhbmQgeDMgPSBpbnQgclxuICBpblxuICBzdDEgOj0geDI7XG4gIHN0MiA6PSB4MztcbiAgKHgzIC0geDIgLSB4MiArIHgxICsgMipyKSBtb2QgclxuXG5cbioqKioqKioqKioqKioqKioqKioqKVxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuaW5jbHVkZSBJbnRcblxudHlwZSB0ID0gaW50XG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxuXG5sZXQgemVybyA9IDBcbmxldCBvbmUgPSAxXG5sZXQgbWludXNfb25lID0gLTFcbmxldCBhZGQgPSAoICsgKVxubGV0IHN1YiA9ICggLSApXG5sZXQgbXVsID0gKCAqIClcbmxldCBkaXYgPSAoIC8gKVxubGV0IHN1Y2MgPSBzdWNjXG5sZXQgcHJlZCA9IHByZWRcbmxldCBhYnMgPSBhYnNcbmxldCBtYXhfaW50ID0gbWF4X2ludFxubGV0IG1pbl9pbnQgPSBtaW5faW50XG5sZXQgZXF1YWwgKGEgOiBpbnQpIGIgPSBTdGRsaWIuKCA9ICkgYSBiXG5sZXQgY29tcGFyZSAoYSA6IGludCkgYiA9IGNvbXBhcmUgYSBiXG5cbigqIHVzZSBGTlY6XG4gICBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Gb3dsZXIlRTIlODAlOTNOb2xsJUUyJTgwJTkzVm9faGFzaF9mdW5jdGlvbiAqKVxubGV0IGhhc2ggKG4gOiBpbnQpIDogaW50ID1cbiAgbGV0IG9mZnNldF9iYXNpcyA9IDB4Y2JmMjljZTQ4NDIyMjMyNUwgaW5cbiAgbGV0IHByaW1lID0gMHgxMDAwMDAwMDFiM0wgaW5cblxuICBsZXQgaCA9IHJlZiBvZmZzZXRfYmFzaXMgaW5cbiAgZm9yIGsgPSAwIHRvIDcgZG9cbiAgICAoaCA6PSBJbnQ2NC4obXVsICFoIHByaW1lKSk7XG4gICAgKCogaCA6PSBoIHhvciAoay10aCBieXRlIG9mIG4pICopXG4gICAgaCA6PSBJbnQ2NC4obG9neG9yICFoIChvZl9pbnQgKChuIGxzciAoayAqIDgpKSBsYW5kIDB4ZmYpKSlcbiAgZG9uZTtcbiAgKCogdHJ1bmNhdGUgYmFjayB0byBpbnQgYW5kIHJlbW92ZSBzaWduICopXG4gIEludDY0LnRvX2ludCAhaCBsYW5kIG1heF9pbnRcblxubGV0IHJhbmdlIGkgaiB5aWVsZCA9XG4gIGxldCByZWMgdXAgaSBqIHlpZWxkID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICB5aWVsZCBpXG4gICAgZWxzZSAoXG4gICAgICB5aWVsZCBpO1xuICAgICAgdXAgKGkgKyAxKSBqIHlpZWxkXG4gICAgKVxuICBhbmQgZG93biBpIGogeWllbGQgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIHlpZWxkIGlcbiAgICBlbHNlIChcbiAgICAgIHlpZWxkIGk7XG4gICAgICBkb3duIChpIC0gMSkgaiB5aWVsZFxuICAgIClcbiAgaW5cbiAgaWYgaSA8PSBqIHRoZW5cbiAgICB1cCBpIGogeWllbGRcbiAgZWxzZVxuICAgIGRvd24gaSBqIHlpZWxkXG5cbmxldCByYW5nZScgaSBqIHlpZWxkID1cbiAgaWYgaSA8IGogdGhlblxuICAgIHJhbmdlIGkgKGogLSAxKSB5aWVsZFxuICBlbHNlIGlmIGkgPSBqIHRoZW5cbiAgICAoKVxuICBlbHNlXG4gICAgcmFuZ2UgaSAoaiArIDEpIHlpZWxkXG5cbmxldCBzaWduIGkgPSBjb21wYXJlIGkgMFxubGV0IG5lZyBpID0gLWlcblxubGV0IHBvdyBhIGIgPVxuICBsZXQgcmVjIGF1eCBhY2MgPSBmdW5jdGlvblxuICAgIHwgMSAtPiBhY2NcbiAgICB8IG4gLT5cbiAgICAgIGlmIG4gbW9kIDIgPSAwIHRoZW5cbiAgICAgICAgYXV4IChhY2MgKiBhY2MpIChuIC8gMilcbiAgICAgIGVsc2VcbiAgICAgICAgYWNjICogYXV4IChhY2MgKiBhY2MpIChuIC8gMilcbiAgaW5cbiAgbWF0Y2ggYiB3aXRoXG4gIHwgMCAtPlxuICAgIGlmIGEgPSAwIHRoZW5cbiAgICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwicG93OiB1bmRlZmluZWQgdmFsdWUgMF4wXCIpXG4gICAgZWxzZVxuICAgICAgMVxuICB8IGIgd2hlbiBiIDwgMCAtPlxuICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwicG93OiBjYW4ndCByYWlzZSBpbnQgdG8gbmVnYXRpdmUgcG93ZXJcIilcbiAgfCBiIC0+IGF1eCBhIGJcblxubW9kdWxlIEluZml4IDogc2lnXG4gIHZhbCAoID0gKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoIDw+ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCA8ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCA+ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCA8PSApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPj0gKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoIC0tICkgOiB0IC0+IHQgLT4gdCBpdGVyXG4gIHZhbCAoIC0tXiApIDogdCAtPiB0IC0+IHQgaXRlclxuICB2YWwgKCArICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCAtICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCB+LSApIDogdCAtPiB0XG4gIHZhbCAoICogKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIC8gKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoICoqICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCBtb2QgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIGxhbmQgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIGxvciApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggbHhvciApIDogdCAtPiB0IC0+IHRcbiAgdmFsIGxub3QgOiB0IC0+IHRcbiAgdmFsICggbHNsICkgOiB0IC0+IGludCAtPiB0XG4gIHZhbCAoIGxzciApIDogdCAtPiBpbnQgLT4gdFxuICB2YWwgKCBhc3IgKSA6IHQgLT4gaW50IC0+IHRcbmVuZCA9IHN0cnVjdFxuICBpbmNsdWRlIFN0ZGxpYlxuXG4gIGxldCAoIC0tICkgPSByYW5nZVxuICBsZXQgKCAtLV4gKSA9IHJhbmdlJ1xuICBsZXQgKCAqKiApID0gcG93XG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuXG5sZXQgbWluIDogdCAtPiB0IC0+IHQgPSBTdGRsaWIubWluXG5sZXQgbWF4IDogdCAtPiB0IC0+IHQgPSBTdGRsaWIubWF4XG5cbmxldCBmbG9vcl9kaXYgYSBuID1cbiAgaWYgYSA8IDAgJiYgbiA+PSAwIHRoZW5cbiAgICAoKGEgKyAxKSAvIG4pIC0gMVxuICBlbHNlIGlmIGEgPiAwICYmIG4gPCAwIHRoZW5cbiAgICAoKGEgLSAxKSAvIG4pIC0gMVxuICBlbHNlXG4gICAgYSAvIG5cblxubGV0IGJvb2xfbmVxIChhIDogYm9vbCkgYiA9IFN0ZGxpYi4oIDw+ICkgYSBiXG5cbmxldCByZW0gYSBuID1cbiAgbGV0IHkgPSBhIG1vZCBuIGluXG4gIGlmIGJvb2xfbmVxICh5IDwgMCkgKG4gPCAwKSAmJiB5IDw+IDAgdGhlblxuICAgIHkgKyBuXG4gIGVsc2VcbiAgICB5XG5cbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxudHlwZSAnYSByYW5kb21fZ2VuID0gUmFuZG9tLlN0YXRlLnQgLT4gJ2FcblxubGV0IHJhbmRvbSBuIHN0ID0gUmFuZG9tLlN0YXRlLmludCBzdCBuXG5sZXQgcmFuZG9tX3NtYWxsID0gcmFuZG9tIDEwMFxubGV0IHJhbmRvbV9yYW5nZSBpIGogc3QgPSBpICsgcmFuZG9tIChqIC0gaSkgc3RcbmxldCBwcCBmbXQgPSBGb3JtYXQucHBfcHJpbnRfaW50IGZtdFxubGV0IG1vc3Rfc2lnbmlmaWNhbnRfYml0ID0gLTEgbHhvciAoLTEgbHNyIDEpXG5sZXQgdG9fc3RyaW5nID0gc3RyaW5nX29mX2ludFxubGV0IG9mX3N0cmluZyBzID0gdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcykgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxubGV0IG9mX3N0cmluZ19leG4gPSBTdGRsaWIuaW50X29mX3N0cmluZ1xubGV0IHRvX2Zsb2F0ID0gZmxvYXRfb2ZfaW50XG5sZXQgb2ZfZmxvYXQgPSBpbnRfb2ZfZmxvYXRcblxudHlwZSBvdXRwdXQgPSBjaGFyIC0+IHVuaXRcblxuKCogYWJzdHJhY3QgcHJpbnRlciAqKVxubGV0IHRvX2JpbmFyeV9nZW4gKG91dCA6IG91dHB1dCkgbiA9XG4gIGxldCBuID1cbiAgICBpZiBuIDwgMCB0aGVuIChcbiAgICAgIG91dCAnLSc7XG4gICAgICAtblxuICAgICkgZWxzZVxuICAgICAgblxuICBpblxuICBvdXQgJzAnO1xuICBvdXQgJ2InO1xuICBsZXQgcmVjIGxvb3Agc3RhcnRlZCBiaXQgbiA9XG4gICAgaWYgYml0ID0gMCB0aGVuIChcbiAgICAgIGlmIG5vdCBzdGFydGVkIHRoZW4gb3V0ICcwJ1xuICAgICkgZWxzZSAoXG4gICAgICBsZXQgYiA9IG4gbGFuZCBiaXQgaW5cbiAgICAgIGlmIGIgPSAwIHRoZW4gKFxuICAgICAgICBpZiBzdGFydGVkIHRoZW4gb3V0ICcwJztcbiAgICAgICAgbG9vcCBzdGFydGVkIChiaXQgbHNyIDEpIG5cbiAgICAgICkgZWxzZSAoXG4gICAgICAgIG91dCAnMSc7XG4gICAgICAgIGxvb3AgdHJ1ZSAoYml0IGxzciAxKSBuXG4gICAgICApXG4gICAgKVxuICBpblxuICBsb29wIGZhbHNlIG1vc3Rfc2lnbmlmaWNhbnRfYml0IG5cblxubGV0IHBwX2JpbmFyeSBvdXQgbiA9IHRvX2JpbmFyeV9nZW4gKEZvcm1hdC5wcF9wcmludF9jaGFyIG91dCkgblxuXG5sZXQgdG9fc3RyaW5nX2JpbmFyeSBuID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTYgaW5cbiAgdG9fYmluYXJ5X2dlbiAoQnVmZmVyLmFkZF9jaGFyIGJ1ZikgbjtcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgcmFuZ2VfYnkgfnN0ZXAgaSBqIHlpZWxkID1cbiAgbGV0IHJlYyByYW5nZSBpIGogeWllbGQgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIHlpZWxkIGlcbiAgICBlbHNlIChcbiAgICAgIHlpZWxkIGk7XG4gICAgICByYW5nZSAoaSArIHN0ZXApIGogeWllbGRcbiAgICApXG4gIGluXG4gIGlmIHN0ZXAgPSAwIHRoZW5cbiAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkNDSW50LnJhbmdlX2J5XCIpXG4gIGVsc2UgaWZcbiAgICBpZiBzdGVwID4gMCB0aGVuXG4gICAgICBpID4galxuICAgIGVsc2VcbiAgICAgIGkgPCBqXG4gIHRoZW5cbiAgICAoKVxuICBlbHNlXG4gICAgcmFuZ2UgaSAoKChqIC0gaSkgLyBzdGVwICogc3RlcCkgKyBpKSB5aWVsZFxuXG4oKlxuICBmcm9tIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hhbW1pbmdfd2VpZ2h0XG5cbiAgLy9UaGlzIHVzZXMgZmV3ZXIgYXJpdGhtZXRpYyBvcGVyYXRpb25zIHRoYW4gYW55IG90aGVyIGtub3duXG4gIC8vaW1wbGVtZW50YXRpb24gb24gbWFjaGluZXMgd2l0aCBzbG93IG11bHRpcGxpY2F0aW9uLlxuICAvL0l0IHVzZXMgMTcgYXJpdGhtZXRpYyBvcGVyYXRpb25zLlxuICBpbnQgcG9wY291bnRfMih1aW50NjRfdCB4KSB7XG4gICAgeCAtPSAoeCA+PiAxKSAmIG0xOyAgICAgICAgICAgICAvL3B1dCBjb3VudCBvZiBlYWNoIDIgYml0cyBpbnRvIHRob3NlIDIgYml0c1xuICAgIHggPSAoeCAmIG0yKSArICgoeCA+PiAyKSAmIG0yKTsgLy9wdXQgY291bnQgb2YgZWFjaCA0IGJpdHMgaW50byB0aG9zZSA0IGJpdHNcbiAgICB4ID0gKHggKyAoeCA+PiA0KSkgJiBtNDsgICAgICAgIC8vcHV0IGNvdW50IG9mIGVhY2ggOCBiaXRzIGludG8gdGhvc2UgOCBiaXRzXG4gICAgeCArPSB4ID4+ICA4OyAgLy9wdXQgY291bnQgb2YgZWFjaCAxNiBiaXRzIGludG8gdGhlaXIgbG93ZXN0IDggYml0c1xuICAgIHggKz0geCA+PiAxNjsgIC8vcHV0IGNvdW50IG9mIGVhY2ggMzIgYml0cyBpbnRvIHRoZWlyIGxvd2VzdCA4IGJpdHNcbiAgICB4ICs9IHggPj4gMzI7ICAvL3B1dCBjb3VudCBvZiBlYWNoIDY0IGJpdHMgaW50byB0aGVpciBsb3dlc3QgOCBiaXRzXG4gICAgcmV0dXJuIHggJiAweDdmO1xuICB9XG5cbiAgIG0xID0gMHg1NTU1NTU1NTU1NTU1NTU1XG4gICBtMiA9IDB4MzMzMzMzMzMzMzMzMzMzM1xuICAgbTQgPSAweDBmMGYwZjBmMGYwZjBmMGZcbiopXG5sZXQgcG9wY291bnQgKGIgOiBpbnQpIDogaW50ID1cbiAgbGV0IG0xID0gMHg1NTU1NTU1NTU1NTU1NTU1TCBpblxuICBsZXQgbTIgPSAweDMzMzMzMzMzMzMzMzMzMzNMIGluXG4gIGxldCBtNCA9IDB4MGYwZjBmMGYwZjBmMGYwZkwgaW5cbiAgbGV0IG9wZW4gSW50NjQgaW5cbiAgbGV0IGIgPSBvZl9pbnQgYiBpblxuICAoKiBpbnQtPmludDY0ICopXG4gIGxldCBiID0gbG9nYW5kIGIgMHg3ZmZmZmZmZmZmZmZmZmZmTCBpblxuXG4gICgqIHJlbW92ZSBzaWduIGJpdCwgd2UgZGVhbCB3aXRoIHVpbnQ2NCBoZXJlICopXG4gIGxldCBiID0gc3ViIGIgKGxvZ2FuZCAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDEpIG0xKSBpblxuICBsZXQgYiA9IGFkZCAobG9nYW5kIGIgbTIpIChsb2dhbmQgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAyKSBtMikgaW5cbiAgbGV0IGIgPSBsb2dhbmQgKGFkZCBiIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgNCkpIG00IGluXG4gIGxldCBiID0gYWRkIGIgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiA4KSBpblxuICBsZXQgYiA9IGFkZCBiIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgMTYpIGluXG4gIGxldCBiID0gYWRkIGIgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAzMikgaW5cbiAgbGV0IGIgPSBsb2dhbmQgYiAweDdmTCBpblxuICB0b19pbnQgYlxuXG5sZXQgbG9nYW5kID0gKCBsYW5kIClcbmxldCBsb2dvciA9ICggbG9yIClcbmxldCBsb2d4b3IgPSAoIGx4b3IgKVxubGV0IGxvZ25vdCA9IGxub3RcbmxldCBzaGlmdF9sZWZ0ID0gKCBsc2wgKVxubGV0IHNoaWZ0X3JpZ2h0ID0gKCBhc3IgKVxubGV0IHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgPSAoIGxzciApXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE9wZXJhdGlvbnMgb24gaW50ZXJuYWwgcmVwcmVzZW50YXRpb25zIG9mIHZhbHVlcyAqKVxuXG50eXBlIHRcblxudHlwZSByYXdfZGF0YSA9IG5hdGl2ZWludFxuXG5leHRlcm5hbCByZXByIDogJ2EgLT4gdCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIG9iaiA6IHQgLT4gJ2EgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBtYWdpYyA6ICdhIC0+ICdiID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgaXNfaW50IDogdCAtPiBib29sID0gXCIlb2JqX2lzX2ludFwiXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBpc19ibG9jayBhID0gbm90IChpc19pbnQgYSlcbmV4dGVybmFsIHRhZyA6IHQgLT4gaW50ID0gXCJjYW1sX29ial90YWdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2V0X3RhZyA6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfb2JqX3NldF90YWdcIlxuZXh0ZXJuYWwgc2l6ZSA6IHQgLT4gaW50ID0gXCIlb2JqX3NpemVcIlxuZXh0ZXJuYWwgcmVhY2hhYmxlX3dvcmRzIDogdCAtPiBpbnQgPSBcImNhbWxfb2JqX3JlYWNoYWJsZV93b3Jkc1wiXG5leHRlcm5hbCBmaWVsZCA6IHQgLT4gaW50IC0+IHQgPSBcIiVvYmpfZmllbGRcIlxuZXh0ZXJuYWwgc2V0X2ZpZWxkIDogdCAtPiBpbnQgLT4gdCAtPiB1bml0ID0gXCIlb2JqX3NldF9maWVsZFwiXG5leHRlcm5hbCBmbG9hdGFycmF5X2dldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb2F0YXJyYXlfZ2V0XCJcbmV4dGVybmFsIGZsb2F0YXJyYXlfc2V0IDpcbiAgICBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCAtPiB1bml0ID0gXCJjYW1sX2Zsb2F0YXJyYXlfc2V0XCJcbmxldCBbQGlubGluZSBhbHdheXNdIGRvdWJsZV9maWVsZCB4IGkgPSBmbG9hdGFycmF5X2dldCAob2JqIHggOiBmbG9hdGFycmF5KSBpXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBzZXRfZG91YmxlX2ZpZWxkIHggaSB2ID1cbiAgZmxvYXRhcnJheV9zZXQgKG9iaiB4IDogZmxvYXRhcnJheSkgaSB2XG5leHRlcm5hbCByYXdfZmllbGQgOiB0IC0+IGludCAtPiByYXdfZGF0YSA9IFwiY2FtbF9vYmpfcmF3X2ZpZWxkXCJcbmV4dGVybmFsIHNldF9yYXdfZmllbGQgOiB0IC0+IGludCAtPiByYXdfZGF0YSAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9vYmpfc2V0X3Jhd19maWVsZFwiXG5cbmV4dGVybmFsIG5ld19ibG9jayA6IGludCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9vYmpfYmxvY2tcIlxuZXh0ZXJuYWwgZHVwIDogdCAtPiB0ID0gXCJjYW1sX29ial9kdXBcIlxuZXh0ZXJuYWwgdHJ1bmNhdGUgOiB0IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX29ial90cnVuY2F0ZVwiXG5leHRlcm5hbCBhZGRfb2Zmc2V0IDogdCAtPiBJbnQzMi50IC0+IHQgPSBcImNhbWxfb2JqX2FkZF9vZmZzZXRcIlxuZXh0ZXJuYWwgd2l0aF90YWcgOiBpbnQgLT4gdCAtPiB0ID0gXCJjYW1sX29ial93aXRoX3RhZ1wiXG5cbmxldCBmaXJzdF9ub25fY29uc3RhbnRfY29uc3RydWN0b3JfdGFnID0gMFxubGV0IGxhc3Rfbm9uX2NvbnN0YW50X2NvbnN0cnVjdG9yX3RhZyA9IDI0NVxuXG5sZXQgbGF6eV90YWcgPSAyNDZcbmxldCBjbG9zdXJlX3RhZyA9IDI0N1xubGV0IG9iamVjdF90YWcgPSAyNDhcbmxldCBpbmZpeF90YWcgPSAyNDlcbmxldCBmb3J3YXJkX3RhZyA9IDI1MFxuXG5sZXQgbm9fc2Nhbl90YWcgPSAyNTFcblxubGV0IGFic3RyYWN0X3RhZyA9IDI1MVxubGV0IHN0cmluZ190YWcgPSAyNTJcbmxldCBkb3VibGVfdGFnID0gMjUzXG5sZXQgZG91YmxlX2FycmF5X3RhZyA9IDI1NFxubGV0IGN1c3RvbV90YWcgPSAyNTVcbmxldCBmaW5hbF90YWcgPSBjdXN0b21fdGFnXG5cblxubGV0IGludF90YWcgPSAxMDAwXG5sZXQgb3V0X29mX2hlYXBfdGFnID0gMTAwMVxubGV0IHVuYWxpZ25lZF90YWcgPSAxMDAyXG5cbm1vZHVsZSBDbG9zdXJlID0gc3RydWN0XG4gIHR5cGUgaW5mbyA9IHtcbiAgICBhcml0eTogaW50O1xuICAgIHN0YXJ0X2VudjogaW50O1xuICB9XG5cbiAgbGV0IGluZm9fb2ZfcmF3IChpbmZvIDogbmF0aXZlaW50KSA9XG4gICAgbGV0IG9wZW4gTmF0aXZlaW50IGluXG4gICAgbGV0IGFyaXR5ID1cbiAgICAgICgqIHNpZ25lZDogbmVnYXRpdmUgZm9yIHR1cGxlZCBmdW5jdGlvbnMgKilcbiAgICAgIGlmIFN5cy53b3JkX3NpemUgPSA2NCB0aGVuXG4gICAgICAgIHRvX2ludCAoc2hpZnRfcmlnaHQgaW5mbyA1NilcbiAgICAgIGVsc2VcbiAgICAgICAgdG9faW50IChzaGlmdF9yaWdodCBpbmZvIDI0KVxuICAgIGluXG4gICAgbGV0IHN0YXJ0X2VudiA9XG4gICAgICAoKiBzdGFydF9lbnYgaXMgdW5zaWduZWQsIGJ1dCB3ZSBrbm93IGl0IGNhbiBhbHdheXMgZml0IGFuIE9DYW1sXG4gICAgICAgICBpbnRlZ2VyIHNvIHdlIHVzZSBbdG9faW50XSBpbnN0ZWFkIG9mIFt1bnNpZ25lZF90b19pbnRdLiAqKVxuICAgICAgdG9faW50IChzaGlmdF9yaWdodF9sb2dpY2FsIChzaGlmdF9sZWZ0IGluZm8gOCkgOSkgaW5cbiAgICB7IGFyaXR5OyBzdGFydF9lbnYgfVxuXG4gICgqIG5vdGU6IHdlIGV4cGVjdCBhIGNsb3N1cmUsIG5vdCBhbiBpbmZpeCBwb2ludGVyICopXG4gIGxldCBpbmZvIChvYmogOiB0KSA9XG4gICAgYXNzZXJ0ICh0YWcgb2JqID0gY2xvc3VyZV90YWcpO1xuICAgIGluZm9fb2ZfcmF3IChyYXdfZmllbGQgb2JqIDEpXG5lbmRcblxubW9kdWxlIEV4dGVuc2lvbl9jb25zdHJ1Y3RvciA9XG5zdHJ1Y3RcbiAgdHlwZSB0ID0gZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXG4gIGxldCBvZl92YWwgeCA9XG4gICAgbGV0IHggPSByZXByIHggaW5cbiAgICBsZXQgc2xvdCA9XG4gICAgICBpZiAoaXNfYmxvY2sgeCkgJiYgKHRhZyB4KSA8PiBvYmplY3RfdGFnICYmIChzaXplIHgpID49IDEgdGhlbiBmaWVsZCB4IDBcbiAgICAgIGVsc2UgeFxuICAgIGluXG4gICAgbGV0IG5hbWUgPVxuICAgICAgaWYgKGlzX2Jsb2NrIHNsb3QpICYmICh0YWcgc2xvdCkgPSBvYmplY3RfdGFnIHRoZW4gZmllbGQgc2xvdCAwXG4gICAgICBlbHNlIGludmFsaWRfYXJnIFwiT2JqLmV4dGVuc2lvbl9jb25zdHJ1Y3RvclwiXG4gICAgaW5cbiAgICAgIGlmICh0YWcgbmFtZSkgPSBzdHJpbmdfdGFnIHRoZW4gKG9iaiBzbG90IDogdClcbiAgICAgIGVsc2UgaW52YWxpZF9hcmcgXCJPYmouZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXCJcblxuICBsZXQgW0BpbmxpbmUgYWx3YXlzXSBuYW1lIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDApIDogc3RyaW5nKVxuXG4gIGxldCBbQGlubGluZSBhbHdheXNdIGlkIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDEpIDogaW50KVxuZW5kXG5cbmxldCBleHRlbnNpb25fY29uc3RydWN0b3IgPSBFeHRlbnNpb25fY29uc3RydWN0b3Iub2ZfdmFsXG5sZXQgZXh0ZW5zaW9uX25hbWUgPSBFeHRlbnNpb25fY29uc3RydWN0b3IubmFtZVxubGV0IGV4dGVuc2lvbl9pZCA9IEV4dGVuc2lvbl9jb25zdHJ1Y3Rvci5pZFxuXG5tb2R1bGUgRXBoZW1lcm9uID0gc3RydWN0XG4gIHR5cGUgb2JqX3QgPSB0XG5cbiAgdHlwZSB0ICgqKiBlcGhlbWVyb24gKilcblxuICAgKCoqIFRvIGNoYW5nZSBpbiBzeW5jIHdpdGggd2Vhay5oICopXG4gIGxldCBhZGRpdGlvbmFsX3ZhbHVlcyA9IDJcbiAgbGV0IG1heF9lcGhlX2xlbmd0aCA9IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBleHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gdCA9IFwiY2FtbF9lcGhlX2NyZWF0ZVwiOztcbiAgbGV0IGNyZWF0ZSBsID1cbiAgICBpZiBub3QgKDAgPD0gbCAmJiBsIDw9IG1heF9lcGhlX2xlbmd0aCkgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJPYmouRXBoZW1lcm9uLmNyZWF0ZVwiO1xuICAgIGNyZWF0ZSBsXG5cbiAgbGV0IGxlbmd0aCB4ID0gc2l6ZShyZXByIHgpIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBsZXQgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIG1zZyA9XG4gICAgaWYgbm90ICgwIDw9IG8gJiYgbyA8IGxlbmd0aCBlKSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBtc2dcblxuICBleHRlcm5hbCBnZXRfa2V5OiB0IC0+IGludCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfa2V5XCJcbiAgbGV0IGdldF9rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLmdldF9rZXlcIjtcbiAgICBnZXRfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGdldF9rZXlfY29weTogdCAtPiBpbnQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2tleV9jb3B5XCJcbiAgbGV0IGdldF9rZXlfY29weSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uZ2V0X2tleV9jb3B5XCI7XG4gICAgZ2V0X2tleV9jb3B5IGUgb1xuXG4gIGV4dGVybmFsIHNldF9rZXk6IHQgLT4gaW50IC0+IG9ial90IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfa2V5XCJcbiAgbGV0IHNldF9rZXkgZSBvIHggPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uc2V0X2tleVwiO1xuICAgIHNldF9rZXkgZSBvIHhcblxuICBleHRlcm5hbCB1bnNldF9rZXk6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9rZXlcIlxuICBsZXQgdW5zZXRfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi51bnNldF9rZXlcIjtcbiAgICB1bnNldF9rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgY2hlY2tfa2V5OiB0IC0+IGludCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfa2V5XCJcbiAgbGV0IGNoZWNrX2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uY2hlY2tfa2V5XCI7XG4gICAgY2hlY2tfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGJsaXRfa2V5IDogdCAtPiBpbnQgLT4gdCAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICA9IFwiY2FtbF9lcGhlX2JsaXRfa2V5XCJcblxuICBsZXQgYmxpdF9rZXkgZTEgbzEgZTIgbzIgbCA9XG4gICAgaWYgbCA8IDAgfHwgbzEgPCAwIHx8IG8xID4gbGVuZ3RoIGUxIC0gbFxuICAgICAgIHx8IG8yIDwgMCB8fCBvMiA+IGxlbmd0aCBlMiAtIGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiT2JqLkVwaGVtZXJvbi5ibGl0X2tleVwiXG4gICAgZWxzZSBpZiBsIDw+IDAgdGhlbiBibGl0X2tleSBlMSBvMSBlMiBvMiBsXG5cbiAgZXh0ZXJuYWwgZ2V0X2RhdGE6IHQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2RhdGFcIlxuICBleHRlcm5hbCBnZXRfZGF0YV9jb3B5OiB0IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9kYXRhX2NvcHlcIlxuICBleHRlcm5hbCBzZXRfZGF0YTogdCAtPiBvYmpfdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfc2V0X2RhdGFcIlxuICBleHRlcm5hbCB1bnNldF9kYXRhOiB0IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9kYXRhXCJcbiAgZXh0ZXJuYWwgY2hlY2tfZGF0YTogdCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfZGF0YVwiXG4gIGV4dGVybmFsIGJsaXRfZGF0YSA6IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfYmxpdF9kYXRhXCJcblxuZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEludGVybmFscyBvZiBmb3JjaW5nIGxhenkgdmFsdWVzLiAqKVxuXG50eXBlICdhIHQgPSAnYSBsYXp5X3RcblxuZXhjZXB0aW9uIFVuZGVmaW5lZFxuXG5sZXQgcmFpc2VfdW5kZWZpbmVkID0gT2JqLnJlcHIgKGZ1biAoKSAtPiByYWlzZSBVbmRlZmluZWQpXG5cbmV4dGVybmFsIG1ha2VfZm9yd2FyZCA6IE9iai50IC0+IE9iai50IC0+IHVuaXQgPSBcImNhbWxfb2JqX21ha2VfZm9yd2FyZFwiXG5cbigqIEFzc3VtZSBbYmxrXSBpcyBhIGJsb2NrIHdpdGggdGFnIGxhenkgKilcbmxldCBmb3JjZV9sYXp5X2Jsb2NrIChibGsgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgKE9iai5yZXByIGJsaykgMCkgOiB1bml0IC0+ICdhcmcpIGluXG4gIE9iai5zZXRfZmllbGQgKE9iai5yZXByIGJsaykgMCByYWlzZV91bmRlZmluZWQ7XG4gIHRyeVxuICAgIGxldCByZXN1bHQgPSBjbG9zdXJlICgpIGluXG4gICAgbWFrZV9mb3J3YXJkIChPYmoucmVwciBibGspIChPYmoucmVwciByZXN1bHQpO1xuICAgIHJlc3VsdFxuICB3aXRoIGUgLT5cbiAgICBPYmouc2V0X2ZpZWxkIChPYmoucmVwciBibGspIDAgKE9iai5yZXByIChmdW4gKCkgLT4gcmFpc2UgZSkpO1xuICAgIHJhaXNlIGVcblxuXG4oKiBBc3N1bWUgW2Jsa10gaXMgYSBibG9jayB3aXRoIHRhZyBsYXp5ICopXG5sZXQgZm9yY2VfdmFsX2xhenlfYmxvY2sgKGJsayA6ICdhcmcgbGF6eV90KSA9XG4gIGxldCBjbG9zdXJlID0gKE9iai5vYmogKE9iai5maWVsZCAoT2JqLnJlcHIgYmxrKSAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCAoT2JqLnJlcHIgYmxrKSAwIHJhaXNlX3VuZGVmaW5lZDtcbiAgbGV0IHJlc3VsdCA9IGNsb3N1cmUgKCkgaW5cbiAgbWFrZV9mb3J3YXJkIChPYmoucmVwciBibGspIChPYmoucmVwciByZXN1bHQpO1xuICByZXN1bHRcblxuXG4oKiBbZm9yY2VdIGlzIG5vdCB1c2VkLCBzaW5jZSBbTGF6eS5mb3JjZV0gaXMgZGVjbGFyZWQgYXMgYSBwcmltaXRpdmVcbiAgIHdob3NlIGNvZGUgaW5saW5lcyB0aGUgdGFnIHRlc3RzIG9mIGl0cyBhcmd1bWVudCwgZXhjZXB0IHdoZW4gYWZsXG4gICBpbnN0cnVtZW50YXRpb24gaXMgdHVybmVkIG9uLiAqKVxuXG5sZXQgZm9yY2UgKGx6diA6ICdhcmcgbGF6eV90KSA9XG4gICgqIFVzaW5nIFtTeXMub3BhcXVlX2lkZW50aXR5XSBwcmV2ZW50cyB0d28gcG90ZW50aWFsIHByb2JsZW1zOlxuICAgICAtIElmIHRoZSB2YWx1ZSBpcyBrbm93biB0byBoYXZlIEZvcndhcmRfdGFnLCB0aGVuIGl0cyB0YWcgY291bGQgaGF2ZVxuICAgICAgIGNoYW5nZWQgZHVyaW5nIEdDLCBzbyB0aGF0IGluZm9ybWF0aW9uIG11c3QgYmUgZm9yZ290dGVuIChzZWUgR1BSIzcxM1xuICAgICAgIGFuZCBpc3N1ZSAjNzMwMSlcbiAgICAgLSBJZiB0aGUgdmFsdWUgaXMga25vd24gdG8gYmUgaW1tdXRhYmxlLCB0aGVuIGlmIHRoZSBjb21waWxlclxuICAgICAgIGNhbm5vdCBwcm92ZSB0aGF0IHRoZSBsYXN0IGJyYW5jaCBpcyBub3QgdGFrZW4gaXQgd2lsbCBpc3N1ZSBhXG4gICAgICAgd2FybmluZyA1OSAobW9kaWZpY2F0aW9uIG9mIGFuIGltbXV0YWJsZSB2YWx1ZSkgKilcbiAgbGV0IGx6diA9IFN5cy5vcGFxdWVfaWRlbnRpdHkgbHp2IGluXG4gIGxldCB4ID0gT2JqLnJlcHIgbHp2IGluXG4gIGxldCB0ID0gT2JqLnRhZyB4IGluXG4gIGlmIHQgPSBPYmouZm9yd2FyZF90YWcgdGhlbiAoT2JqLm9iaiAoT2JqLmZpZWxkIHggMCkgOiAnYXJnKSBlbHNlXG4gIGlmIHQgPD4gT2JqLmxhenlfdGFnIHRoZW4gKE9iai5vYmogeCA6ICdhcmcpXG4gIGVsc2UgZm9yY2VfbGF6eV9ibG9jayBsenZcblxuXG5sZXQgZm9yY2VfdmFsIChsenYgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgeCA9IE9iai5yZXByIGx6diBpblxuICBsZXQgdCA9IE9iai50YWcgeCBpblxuICBpZiB0ID0gT2JqLmZvcndhcmRfdGFnIHRoZW4gKE9iai5vYmogKE9iai5maWVsZCB4IDApIDogJ2FyZykgZWxzZVxuICBpZiB0IDw+IE9iai5sYXp5X3RhZyB0aGVuIChPYmoub2JqIHggOiAnYXJnKVxuICBlbHNlIGZvcmNlX3ZhbF9sYXp5X2Jsb2NrIGx6dlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb24gPSBOb25lIHwgU29tZSBvZiAnYVxuXG5sZXQgbm9uZSA9IE5vbmVcbmxldCBzb21lIHYgPSBTb21lIHZcbmxldCB2YWx1ZSBvIH5kZWZhdWx0ID0gbWF0Y2ggbyB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBkZWZhdWx0XG5sZXQgZ2V0ID0gZnVuY3Rpb24gU29tZSB2IC0+IHYgfCBOb25lIC0+IGludmFsaWRfYXJnIFwib3B0aW9uIGlzIE5vbmVcIlxubGV0IGJpbmQgbyBmID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBmIHZcbmxldCBqb2luID0gZnVuY3Rpb24gU29tZSBvIC0+IG8gfCBOb25lIC0+IE5vbmVcbmxldCBtYXAgZiBvID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBTb21lIChmIHYpXG5sZXQgZm9sZCB+bm9uZSB+c29tZSA9IGZ1bmN0aW9uIFNvbWUgdiAtPiBzb21lIHYgfCBOb25lIC0+IG5vbmVcbmxldCBpdGVyIGYgPSBmdW5jdGlvbiBTb21lIHYgLT4gZiB2IHwgTm9uZSAtPiAoKVxubGV0IGlzX25vbmUgPSBmdW5jdGlvbiBOb25lIC0+IHRydWUgfCBTb21lIF8gLT4gZmFsc2VcbmxldCBpc19zb21lID0gZnVuY3Rpb24gTm9uZSAtPiBmYWxzZSB8IFNvbWUgXyAtPiB0cnVlXG5cbmxldCBlcXVhbCBlcSBvMCBvMSA9IG1hdGNoIG8wLCBvMSB3aXRoXG58IFNvbWUgdjAsIFNvbWUgdjEgLT4gZXEgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiB0cnVlXG58IF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgY21wIG8wIG8xID0gbWF0Y2ggbzAsIG8xIHdpdGhcbnwgU29tZSB2MCwgU29tZSB2MSAtPiBjbXAgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiAwXG58IE5vbmUsIFNvbWUgXyAtPiAtMVxufCBTb21lIF8sIE5vbmUgLT4gMVxuXG5sZXQgdG9fcmVzdWx0IH5ub25lID0gZnVuY3Rpb24gTm9uZSAtPiBFcnJvciBub25lIHwgU29tZSB2IC0+IE9rIHZcbmxldCB0b19saXN0ID0gZnVuY3Rpb24gTm9uZSAtPiBbXSB8IFNvbWUgdiAtPiBbdl1cbmxldCB0b19zZXEgPSBmdW5jdGlvbiBOb25lIC0+IFNlcS5lbXB0eSB8IFNvbWUgdiAtPiBTZXEucmV0dXJuIHZcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAoJ2EsICdlKSB0ID0gKCdhLCAnZSkgcmVzdWx0ID0gT2sgb2YgJ2EgfCBFcnJvciBvZiAnZVxuXG5sZXQgb2sgdiA9IE9rIHZcbmxldCBlcnJvciBlID0gRXJyb3IgZVxubGV0IHZhbHVlIHIgfmRlZmF1bHQgPSBtYXRjaCByIHdpdGggT2sgdiAtPiB2IHwgRXJyb3IgXyAtPiBkZWZhdWx0XG5sZXQgZ2V0X29rID0gZnVuY3Rpb24gT2sgdiAtPiB2IHwgRXJyb3IgXyAtPiBpbnZhbGlkX2FyZyBcInJlc3VsdCBpcyBFcnJvciBfXCJcbmxldCBnZXRfZXJyb3IgPSBmdW5jdGlvbiBFcnJvciBlIC0+IGUgfCBPayBfIC0+IGludmFsaWRfYXJnIFwicmVzdWx0IGlzIE9rIF9cIlxubGV0IGJpbmQgciBmID0gbWF0Y2ggciB3aXRoIE9rIHYgLT4gZiB2IHwgRXJyb3IgXyBhcyBlIC0+IGVcbmxldCBqb2luID0gZnVuY3Rpb24gT2sgciAtPiByIHwgRXJyb3IgXyBhcyBlIC0+IGVcbmxldCBtYXAgZiA9IGZ1bmN0aW9uIE9rIHYgLT4gT2sgKGYgdikgfCBFcnJvciBfIGFzIGUgLT4gZVxubGV0IG1hcF9lcnJvciBmID0gZnVuY3Rpb24gRXJyb3IgZSAtPiBFcnJvciAoZiBlKSB8IE9rIF8gYXMgdiAtPiB2XG5sZXQgZm9sZCB+b2sgfmVycm9yID0gZnVuY3Rpb24gT2sgdiAtPiBvayB2IHwgRXJyb3IgZSAtPiBlcnJvciBlXG5sZXQgaXRlciBmID0gZnVuY3Rpb24gT2sgdiAtPiBmIHYgfCBFcnJvciBfIC0+ICgpXG5sZXQgaXRlcl9lcnJvciBmID0gZnVuY3Rpb24gRXJyb3IgZSAtPiBmIGUgfCBPayBfIC0+ICgpXG5sZXQgaXNfb2sgPSBmdW5jdGlvbiBPayBfIC0+IHRydWUgfCBFcnJvciBfIC0+IGZhbHNlXG5sZXQgaXNfZXJyb3IgPSBmdW5jdGlvbiBFcnJvciBfIC0+IHRydWUgfCBPayBfIC0+IGZhbHNlXG5cbmxldCBlcXVhbCB+b2sgfmVycm9yIHIwIHIxID0gbWF0Y2ggcjAsIHIxIHdpdGhcbnwgT2sgdjAsIE9rIHYxIC0+IG9rIHYwIHYxXG58IEVycm9yIGUwLCBFcnJvciBlMSAtPiBlcnJvciBlMCBlMVxufCBfLCBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIH5vayB+ZXJyb3IgcjAgcjEgPSBtYXRjaCByMCwgcjEgd2l0aFxufCBPayB2MCwgT2sgdjEgLT4gb2sgdjAgdjFcbnwgRXJyb3IgZTAsIEVycm9yIGUxIC0+IGVycm9yIGUwIGUxXG58IE9rIF8sIEVycm9yIF8gLT4gLTFcbnwgRXJyb3IgXywgT2sgXyAtPiAxXG5cbmxldCB0b19vcHRpb24gPSBmdW5jdGlvbiBPayB2IC0+IFNvbWUgdiB8IEVycm9yIF8gLT4gTm9uZVxubGV0IHRvX2xpc3QgPSBmdW5jdGlvbiBPayB2IC0+IFt2XSB8IEVycm9yIF8gLT4gW11cbmxldCB0b19zZXEgPSBmdW5jdGlvbiBPayB2IC0+IFNlcS5yZXR1cm4gdiB8IEVycm9yIF8gLT4gU2VxLmVtcHR5XG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgVXRpbHMgYXJvdW5kIGNoYXJ9XG5cbiAgICBAc2luY2UgMC4xNCAqKVxuXG5pbmNsdWRlIENoYXJcblxubGV0IHBwX2J1ZiA9IEJ1ZmZlci5hZGRfY2hhclxubGV0IHBwID0gRm9ybWF0LnBwX3ByaW50X2NoYXJcbmxldCBvZl9pbnRfZXhuID0gQ2hhci5jaHJcbmxldCBvZl9pbnQgYyA9IHRyeSBTb21lIChvZl9pbnRfZXhuIGMpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcbmxldCB0b19pbnQgPSBDaGFyLmNvZGVcbmxldCB0b19zdHJpbmcgYyA9IFN0cmluZy5tYWtlIDEgY1xuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA9IClcbiAgbGV0ICggPD4gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPD4gKVxuICBsZXQgKCA8ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDwgKVxuICBsZXQgKCA+ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID4gKVxuICBsZXQgKCA8PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8PSApXG4gIGxldCAoID49ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID49IClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIENoYXJhY3RlciBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGNvZGU6IGNoYXIgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgdW5zYWZlX2NocjogaW50IC0+IGNoYXIgPSBcIiVpZGVudGl0eVwiXG5cbmxldCBjaHIgbiA9XG4gIGlmIG4gPCAwIHx8IG4gPiAyNTUgdGhlbiBpbnZhbGlkX2FyZyBcIkNoYXIuY2hyXCIgZWxzZSB1bnNhZmVfY2hyIG5cblxuZXh0ZXJuYWwgYnl0ZXNfY3JlYXRlOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX2J5dGVzXCJcbmV4dGVybmFsIGJ5dGVzX3Vuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiJWJ5dGVzX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5cbmxldCBlc2NhcGVkID0gZnVuY3Rpb25cbiAgfCAnXFwnJyAtPiBcIlxcXFwnXCJcbiAgfCAnXFxcXCcgLT4gXCJcXFxcXFxcXFwiXG4gIHwgJ1xcbicgLT4gXCJcXFxcblwiXG4gIHwgJ1xcdCcgLT4gXCJcXFxcdFwiXG4gIHwgJ1xccicgLT4gXCJcXFxcclwiXG4gIHwgJ1xcYicgLT4gXCJcXFxcYlwiXG4gIHwgJyAnIC4uICd+JyBhcyBjIC0+XG4gICAgICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSAxIGluXG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMCBjO1xuICAgICAgdW5zYWZlX3RvX3N0cmluZyBzXG4gIHwgYyAtPlxuICAgICAgbGV0IG4gPSBjb2RlIGMgaW5cbiAgICAgIGxldCBzID0gYnl0ZXNfY3JlYXRlIDQgaW5cbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAwICdcXFxcJztcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAxICh1bnNhZmVfY2hyICg0OCArIG4gLyAxMDApKTtcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAyICh1bnNhZmVfY2hyICg0OCArIChuIC8gMTApIG1vZCAxMCkpO1xuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDMgKHVuc2FmZV9jaHIgKDQ4ICsgbiBtb2QgMTApKTtcbiAgICAgIHVuc2FmZV90b19zdHJpbmcgc1xuXG5sZXQgbG93ZXJjYXNlID0gZnVuY3Rpb25cbiAgfCAnQScgLi4gJ1onXG4gIHwgJ1xcMTkyJyAuLiAnXFwyMTQnXG4gIHwgJ1xcMjE2JyAuLiAnXFwyMjInIGFzIGMgLT5cbiAgICB1bnNhZmVfY2hyKGNvZGUgYyArIDMyKVxuICB8IGMgLT4gY1xuXG5sZXQgdXBwZXJjYXNlID0gZnVuY3Rpb25cbiAgfCAnYScgLi4gJ3onXG4gIHwgJ1xcMjI0JyAuLiAnXFwyNDYnXG4gIHwgJ1xcMjQ4JyAuLiAnXFwyNTQnIGFzIGMgLT5cbiAgICB1bnNhZmVfY2hyKGNvZGUgYyAtIDMyKVxuICB8IGMgLT4gY1xuXG5sZXQgbG93ZXJjYXNlX2FzY2lpID0gZnVuY3Rpb25cbiAgfCAnQScgLi4gJ1onIGFzIGMgLT4gdW5zYWZlX2Nocihjb2RlIGMgKyAzMilcbiAgfCBjIC0+IGNcblxubGV0IHVwcGVyY2FzZV9hc2NpaSA9IGZ1bmN0aW9uXG4gIHwgJ2EnIC4uICd6JyBhcyBjIC0+IHVuc2FmZV9jaHIoY29kZSBjIC0gMzIpXG4gIHwgYyAtPiBjXG5cbnR5cGUgdCA9IGNoYXJcblxubGV0IGNvbXBhcmUgYzEgYzIgPSBjb2RlIGMxIC0gY29kZSBjMlxubGV0IGVxdWFsIChjMTogdCkgKGMyOiB0KSA9IGNvbXBhcmUgYzEgYzIgPSAwXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEFuIGFsaWFzIGZvciB0aGUgdHlwZSBvZiBsaXN0cy4gKilcbnR5cGUgJ2EgdCA9ICdhIGxpc3QgPSBbXSB8ICg6Oikgb2YgJ2EgKiAnYSBsaXN0XG5cbigqIExpc3Qgb3BlcmF0aW9ucyAqKVxuXG5sZXQgcmVjIGxlbmd0aF9hdXggbGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBsZW5cbiAgfCBfOjpsIC0+IGxlbmd0aF9hdXggKGxlbiArIDEpIGxcblxubGV0IGxlbmd0aCBsID0gbGVuZ3RoX2F1eCAwIGxcblxubGV0IGNvbnMgYSBsID0gYTo6bFxuXG5sZXQgaGQgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhaWx3aXRoIFwiaGRcIlxuICB8IGE6Ol8gLT4gYVxuXG5sZXQgdGwgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhaWx3aXRoIFwidGxcIlxuICB8IF86OmwgLT4gbFxuXG5sZXQgbnRoIGwgbiA9XG4gIGlmIG4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0Lm50aFwiIGVsc2VcbiAgbGV0IHJlYyBudGhfYXV4IGwgbiA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBmYWlsd2l0aCBcIm50aFwiXG4gICAgfCBhOjpsIC0+IGlmIG4gPSAwIHRoZW4gYSBlbHNlIG50aF9hdXggbCAobi0xKVxuICBpbiBudGhfYXV4IGwgblxuXG5sZXQgbnRoX29wdCBsIG4gPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5udGhcIiBlbHNlXG4gIGxldCByZWMgbnRoX2F1eCBsIG4gPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgYTo6bCAtPiBpZiBuID0gMCB0aGVuIFNvbWUgYSBlbHNlIG50aF9hdXggbCAobi0xKVxuICBpbiBudGhfYXV4IGwgblxuXG5sZXQgYXBwZW5kID0gKEApXG5cbmxldCByZWMgcmV2X2FwcGVuZCBsMSBsMiA9XG4gIG1hdGNoIGwxIHdpdGhcbiAgICBbXSAtPiBsMlxuICB8IGEgOjogbCAtPiByZXZfYXBwZW5kIGwgKGEgOjogbDIpXG5cbmxldCByZXYgbCA9IHJldl9hcHBlbmQgbCBbXVxuXG5sZXQgcmVjIGluaXRfdGFpbHJlY19hdXggYWNjIGkgbiBmID1cbiAgaWYgaSA+PSBuIHRoZW4gYWNjXG4gIGVsc2UgaW5pdF90YWlscmVjX2F1eCAoZiBpIDo6IGFjYykgKGkrMSkgbiBmXG5cbmxldCByZWMgaW5pdF9hdXggaSBuIGYgPVxuICBpZiBpID49IG4gdGhlbiBbXVxuICBlbHNlXG4gICAgbGV0IHIgPSBmIGkgaW5cbiAgICByIDo6IGluaXRfYXV4IChpKzEpIG4gZlxuXG5sZXQgcmV2X2luaXRfdGhyZXNob2xkID1cbiAgbWF0Y2ggU3lzLmJhY2tlbmRfdHlwZSB3aXRoXG4gIHwgU3lzLk5hdGl2ZSB8IFN5cy5CeXRlY29kZSAtPiAxMF8wMDBcbiAgKCogV2UgZG9uJ3Qga25vdyB0aGUgc2l6ZSBvZiB0aGUgc3RhY2ssIGJldHRlciBiZSBzYWZlIGFuZCBhc3N1bWUgaXQnc1xuICAgICBzbWFsbC4gKilcbiAgfCBTeXMuT3RoZXIgXyAtPiA1MFxuXG5sZXQgaW5pdCBsZW4gZiA9XG4gIGlmIGxlbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QuaW5pdFwiIGVsc2VcbiAgaWYgbGVuID4gcmV2X2luaXRfdGhyZXNob2xkIHRoZW4gcmV2IChpbml0X3RhaWxyZWNfYXV4IFtdIDAgbGVuIGYpXG4gIGVsc2UgaW5pdF9hdXggMCBsZW4gZlxuXG5sZXQgcmVjIGZsYXR0ZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgbDo6ciAtPiBsIEAgZmxhdHRlbiByXG5cbmxldCBjb25jYXQgPSBmbGF0dGVuXG5cbmxldCByZWMgbWFwIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgYTo6bCAtPiBsZXQgciA9IGYgYSBpbiByIDo6IG1hcCBmIGxcblxubGV0IHJlYyBtYXBpIGkgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW11cbiAgfCBhOjpsIC0+IGxldCByID0gZiBpIGEgaW4gciA6OiBtYXBpIChpICsgMSkgZiBsXG5cbmxldCBtYXBpIGYgbCA9IG1hcGkgMCBmIGxcblxubGV0IHJldl9tYXAgZiBsID1cbiAgbGV0IHJlYyBybWFwX2YgYWNjdSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2N1XG4gICAgfCBhOjpsIC0+IHJtYXBfZiAoZiBhIDo6IGFjY3UpIGxcbiAgaW5cbiAgcm1hcF9mIFtdIGxcblxuXG5sZXQgcmVjIGl0ZXIgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gKClcbiAgfCBhOjpsIC0+IGYgYTsgaXRlciBmIGxcblxubGV0IHJlYyBpdGVyaSBpIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+ICgpXG4gIHwgYTo6bCAtPiBmIGkgYTsgaXRlcmkgKGkgKyAxKSBmIGxcblxubGV0IGl0ZXJpIGYgbCA9IGl0ZXJpIDAgZiBsXG5cbmxldCByZWMgZm9sZF9sZWZ0IGYgYWNjdSBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gICAgW10gLT4gYWNjdVxuICB8IGE6OmwgLT4gZm9sZF9sZWZ0IGYgKGYgYWNjdSBhKSBsXG5cbmxldCByZWMgZm9sZF9yaWdodCBmIGwgYWNjdSA9XG4gIG1hdGNoIGwgd2l0aFxuICAgIFtdIC0+IGFjY3VcbiAgfCBhOjpsIC0+IGYgYSAoZm9sZF9yaWdodCBmIGwgYWNjdSlcblxubGV0IHJlYyBtYXAyIGYgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gW11cbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IGxldCByID0gZiBhMSBhMiBpbiByIDo6IG1hcDIgZiBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QubWFwMlwiXG5cbmxldCByZXZfbWFwMiBmIGwxIGwyID1cbiAgbGV0IHJlYyBybWFwMl9mIGFjY3UgbDEgbDIgPVxuICAgIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICB8IChbXSwgW10pIC0+IGFjY3VcbiAgICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcm1hcDJfZiAoZiBhMSBhMiA6OiBhY2N1KSBsMSBsMlxuICAgIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5yZXZfbWFwMlwiXG4gIGluXG4gIHJtYXAyX2YgW10gbDEgbDJcblxuXG5sZXQgcmVjIGl0ZXIyIGYgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gKClcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IGYgYTEgYTI7IGl0ZXIyIGYgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0Lml0ZXIyXCJcblxubGV0IHJlYyBmb2xkX2xlZnQyIGYgYWNjdSBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBhY2N1XG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmb2xkX2xlZnQyIGYgKGYgYWNjdSBhMSBhMikgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmZvbGRfbGVmdDJcIlxuXG5sZXQgcmVjIGZvbGRfcmlnaHQyIGYgbDEgbDIgYWNjdSA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBhY2N1XG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmIGExIGEyIChmb2xkX3JpZ2h0MiBmIGwxIGwyIGFjY3UpXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb2xkX3JpZ2h0MlwiXG5cbmxldCByZWMgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgICBbXSAtPiB0cnVlXG4gIHwgYTo6bCAtPiBwIGEgJiYgZm9yX2FsbCBwIGxcblxubGV0IHJlYyBleGlzdHMgcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IHAgYSB8fCBleGlzdHMgcCBsXG5cbmxldCByZWMgZm9yX2FsbDIgcCBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiB0cnVlXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBwIGExIGEyICYmIGZvcl9hbGwyIHAgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmZvcl9hbGwyXCJcblxubGV0IHJlYyBleGlzdHMyIHAgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gZmFsc2VcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHAgYTEgYTIgfHwgZXhpc3RzMiBwIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5leGlzdHMyXCJcblxubGV0IHJlYyBtZW0geCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IGNvbXBhcmUgYSB4ID0gMCB8fCBtZW0geCBsXG5cbmxldCByZWMgbWVtcSB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWxzZVxuICB8IGE6OmwgLT4gYSA9PSB4IHx8IG1lbXEgeCBsXG5cbmxldCByZWMgYXNzb2MgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgKGEsYik6OmwgLT4gaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gYiBlbHNlIGFzc29jIHggbFxuXG5sZXQgcmVjIGFzc29jX29wdCB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBOb25lXG4gIHwgKGEsYik6OmwgLT4gaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gU29tZSBiIGVsc2UgYXNzb2Nfb3B0IHggbFxuXG5sZXQgcmVjIGFzc3EgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgKGEsYik6OmwgLT4gaWYgYSA9PSB4IHRoZW4gYiBlbHNlIGFzc3EgeCBsXG5cbmxldCByZWMgYXNzcV9vcHQgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gTm9uZVxuICB8IChhLGIpOjpsIC0+IGlmIGEgPT0geCB0aGVuIFNvbWUgYiBlbHNlIGFzc3Ffb3B0IHggbFxuXG5sZXQgcmVjIG1lbV9hc3NvYyB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBmYWxzZVxuICB8IChhLCBfKSA6OiBsIC0+IGNvbXBhcmUgYSB4ID0gMCB8fCBtZW1fYXNzb2MgeCBsXG5cbmxldCByZWMgbWVtX2Fzc3EgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gZmFsc2VcbiAgfCAoYSwgXykgOjogbCAtPiBhID09IHggfHwgbWVtX2Fzc3EgeCBsXG5cbmxldCByZWMgcmVtb3ZlX2Fzc29jIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgKGEsIF8gYXMgcGFpcikgOjogbCAtPlxuICAgICAgaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gbCBlbHNlIHBhaXIgOjogcmVtb3ZlX2Fzc29jIHggbFxuXG5sZXQgcmVjIHJlbW92ZV9hc3NxIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgKGEsIF8gYXMgcGFpcikgOjogbCAtPiBpZiBhID09IHggdGhlbiBsIGVsc2UgcGFpciA6OiByZW1vdmVfYXNzcSB4IGxcblxubGV0IHJlYyBmaW5kIHAgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiB4IGVsc2UgZmluZCBwIGxcblxubGV0IHJlYyBmaW5kX29wdCBwID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIFNvbWUgeCBlbHNlIGZpbmRfb3B0IHAgbFxuXG5sZXQgcmVjIGZpbmRfbWFwIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZiB4IHdpdGhcbiAgICAgICB8IFNvbWUgXyBhcyByZXN1bHQgLT4gcmVzdWx0XG4gICAgICAgfCBOb25lIC0+IGZpbmRfbWFwIGYgbFxuICAgICBlbmRcblxubGV0IGZpbmRfYWxsIHAgPVxuICBsZXQgcmVjIGZpbmQgYWNjdSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gcmV2IGFjY3VcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4gZmluZCAoeCA6OiBhY2N1KSBsIGVsc2UgZmluZCBhY2N1IGwgaW5cbiAgZmluZCBbXVxuXG5sZXQgZmlsdGVyID0gZmluZF9hbGxcblxubGV0IGZpbHRlcmkgcCBsID1cbiAgbGV0IHJlYyBhdXggaSBhY2MgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJldiBhY2NcbiAgfCB4OjpsIC0+IGF1eCAoaSArIDEpIChpZiBwIGkgeCB0aGVuIHg6OmFjYyBlbHNlIGFjYykgbFxuICBpblxuICBhdXggMCBbXSBsXG5cbmxldCBmaWx0ZXJfbWFwIGYgPVxuICBsZXQgcmVjIGF1eCBhY2N1ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHJldiBhY2N1XG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGF1eCBhY2N1IGxcbiAgICAgICAgfCBTb21lIHYgLT4gYXV4ICh2IDo6IGFjY3UpIGxcbiAgaW5cbiAgYXV4IFtdXG5cbmxldCBjb25jYXRfbWFwIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHJldiBhY2NcbiAgICB8IHggOjogbCAtPlxuICAgICAgIGxldCB4cyA9IGYgeCBpblxuICAgICAgIGF1eCBmIChyZXZfYXBwZW5kIHhzIGFjYykgbFxuICBpbiBhdXggZiBbXSBsXG5cbmxldCBmb2xkX2xlZnRfbWFwIGYgYWNjdSBsID1cbiAgbGV0IHJlYyBhdXggYWNjdSBsX2FjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gYWNjdSwgcmV2IGxfYWNjdVxuICAgIHwgeCA6OiBsIC0+XG4gICAgICAgIGxldCBhY2N1LCB4ID0gZiBhY2N1IHggaW5cbiAgICAgICAgYXV4IGFjY3UgKHggOjogbF9hY2N1KSBsIGluXG4gIGF1eCBhY2N1IFtdIGxcblxubGV0IHBhcnRpdGlvbiBwIGwgPVxuICBsZXQgcmVjIHBhcnQgeWVzIG5vID0gZnVuY3Rpb25cbiAgfCBbXSAtPiAocmV2IHllcywgcmV2IG5vKVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBwYXJ0ICh4IDo6IHllcykgbm8gbCBlbHNlIHBhcnQgeWVzICh4IDo6IG5vKSBsIGluXG4gIHBhcnQgW10gW10gbFxuXG5sZXQgcGFydGl0aW9uX21hcCBwIGwgPVxuICBsZXQgcmVjIHBhcnQgbGVmdCByaWdodCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gKHJldiBsZWZ0LCByZXYgcmlnaHQpXG4gIHwgeCA6OiBsIC0+XG4gICAgIGJlZ2luIG1hdGNoIHAgeCB3aXRoXG4gICAgICAgfCBFaXRoZXIuTGVmdCB2IC0+IHBhcnQgKHYgOjogbGVmdCkgcmlnaHQgbFxuICAgICAgIHwgRWl0aGVyLlJpZ2h0IHYgLT4gcGFydCBsZWZ0ICh2IDo6IHJpZ2h0KSBsXG4gICAgIGVuZFxuICBpblxuICBwYXJ0IFtdIFtdIGxcblxubGV0IHJlYyBzcGxpdCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gKFtdLCBbXSlcbiAgfCAoeCx5KTo6bCAtPlxuICAgICAgbGV0IChyeCwgcnkpID0gc3BsaXQgbCBpbiAoeDo6cngsIHk6OnJ5KVxuXG5sZXQgcmVjIGNvbWJpbmUgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gW11cbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IChhMSwgYTIpIDo6IGNvbWJpbmUgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmNvbWJpbmVcIlxuXG4oKiogc29ydGluZyAqKVxuXG5sZXQgcmVjIG1lcmdlIGNtcCBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIGwyIC0+IGwyXG4gIHwgbDEsIFtdIC0+IGwxXG4gIHwgaDEgOjogdDEsIGgyIDo6IHQyIC0+XG4gICAgICBpZiBjbXAgaDEgaDIgPD0gMFxuICAgICAgdGhlbiBoMSA6OiBtZXJnZSBjbXAgdDEgbDJcbiAgICAgIGVsc2UgaDIgOjogbWVyZ2UgY21wIGwxIHQyXG5cblxubGV0IHN0YWJsZV9zb3J0IGNtcCBsID1cbiAgbGV0IHJlYyByZXZfbWVyZ2UgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGlmIGNtcCBoMSBoMiA8PSAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlIHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2UgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHJldl9tZXJnZV9yZXYgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGlmIGNtcCBoMSBoMiA+IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2VfcmV2IGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyBzb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9IGlmIGNtcCB4MSB4MiA8PSAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXSBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgaWYgY21wIHgxIHgyIDw9IDAgdGhlblxuICAgICAgICAgICAgaWYgY21wIHgyIHgzIDw9IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzIDw9IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPD0gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgyIHgzIDw9IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSByZXZfc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSByZXZfc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlX3JldiBzMSBzMiBbXSwgdGwpXG4gIGFuZCByZXZfc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPSBpZiBjbXAgeDEgeDIgPiAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXSBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgaWYgY21wIHgxIHgyID4gMCB0aGVuXG4gICAgICAgICAgICBpZiBjbXAgeDIgeDMgPiAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA+IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPiAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDIgeDMgPiAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSBzb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2UgczEgczIgW10sIHRsKVxuICBpblxuICBsZXQgbGVuID0gbGVuZ3RoIGwgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIGwgZWxzZSBmc3QgKHNvcnQgbGVuIGwpXG5cblxubGV0IHNvcnQgPSBzdGFibGVfc29ydFxubGV0IGZhc3Rfc29ydCA9IHN0YWJsZV9zb3J0XG5cbigqIE5vdGU6IG9uIGEgbGlzdCBvZiBsZW5ndGggYmV0d2VlbiBhYm91dCAxMDAwMDAgKGRlcGVuZGluZyBvbiB0aGUgbWlub3JcbiAgIGhlYXAgc2l6ZSBhbmQgdGhlIHR5cGUgb2YgdGhlIGxpc3QpIGFuZCBTeXMubWF4X2FycmF5X3NpemUsIGl0IGlzXG4gICBhY3R1YWxseSBmYXN0ZXIgdG8gdXNlIHRoZSBmb2xsb3dpbmcsIGJ1dCBpdCBtaWdodCBhbHNvIHVzZSBtb3JlIG1lbW9yeVxuICAgYmVjYXVzZSB0aGUgYXJndW1lbnQgbGlzdCBjYW5ub3QgYmUgZGVhbGxvY2F0ZWQgaW5jcmVtZW50YWxseS5cblxuICAgQWxzbywgdGhlcmUgc2VlbXMgdG8gYmUgYSBidWcgaW4gdGhpcyBjb2RlIG9yIGluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2Ygb2JqX3RydW5jYXRlLlxuXG5leHRlcm5hbCBvYmpfdHJ1bmNhdGUgOiAnYSBhcnJheSAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfdHJ1bmNhdGVcIlxuXG5sZXQgYXJyYXlfdG9fbGlzdF9pbl9wbGFjZSBhID1cbiAgbGV0IGwgPSBBcnJheS5sZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgYWNjdSBuIHAgPVxuICAgIGlmIHAgPD0gMCB0aGVuIGFjY3UgZWxzZSBiZWdpblxuICAgICAgaWYgcCA9IG4gdGhlbiBiZWdpblxuICAgICAgICBvYmpfdHJ1bmNhdGUgYSBwO1xuICAgICAgICBsb29wIChhLihwLTEpIDo6IGFjY3UpIChuLTEwMDApIChwLTEpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBsb29wIChhLihwLTEpIDo6IGFjY3UpIG4gKHAtMSlcbiAgICAgIGVuZFxuICAgIGVuZFxuICBpblxuICBsb29wIFtdIChsLTEwMDApIGxcblxuXG5sZXQgc3RhYmxlX3NvcnQgY21wIGwgPVxuICBsZXQgYSA9IEFycmF5Lm9mX2xpc3QgbCBpblxuICBBcnJheS5zdGFibGVfc29ydCBjbXAgYTtcbiAgYXJyYXlfdG9fbGlzdF9pbl9wbGFjZSBhXG5cbiopXG5cblxuKCoqIHNvcnRpbmcgKyByZW1vdmluZyBkdXBsaWNhdGVzICopXG5cbmxldCBzb3J0X3VuaXEgY21wIGwgPVxuICBsZXQgcmVjIHJldl9tZXJnZSBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgbGV0IGMgPSBjbXAgaDEgaDIgaW5cbiAgICAgICAgaWYgYyA9IDAgdGhlbiByZXZfbWVyZ2UgdDEgdDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIGlmIGMgPCAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlIHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2UgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHJldl9tZXJnZV9yZXYgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGxldCBjID0gY21wIGgxIGgyIGluXG4gICAgICAgIGlmIGMgPSAwIHRoZW4gcmV2X21lcmdlX3JldiB0MSB0MiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgaWYgYyA+IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2VfcmV2IGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyBzb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MV0gZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyXSBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4M10gZWxzZSBbeDM7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHJldl9zb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHJldl9zb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2VfcmV2IHMxIHMyIFtdLCB0bClcbiAgYW5kIHJldl9zb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MV0gZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyXSBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4M10gZWxzZSBbeDM7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHNvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlIHMxIHMyIFtdLCB0bClcbiAgaW5cbiAgbGV0IGxlbiA9IGxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IDIgdGhlbiBsIGVsc2UgZnN0IChzb3J0IGxlbiBsKVxuXG5cbmxldCByZWMgY29tcGFyZV9sZW5ndGhzIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IFtdLCBfIC0+IC0xXG4gIHwgXywgW10gLT4gMVxuICB8IF8gOjogbDEsIF8gOjogbDIgLT4gY29tcGFyZV9sZW5ndGhzIGwxIGwyXG47O1xuXG5sZXQgcmVjIGNvbXBhcmVfbGVuZ3RoX3dpdGggbCBuID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT5cbiAgICBpZiBuID0gMCB0aGVuIDAgZWxzZVxuICAgICAgaWYgbiA+IDAgdGhlbiAtMSBlbHNlIDFcbiAgfCBfIDo6IGwgLT5cbiAgICBpZiBuIDw9IDAgdGhlbiAxIGVsc2VcbiAgICAgIGNvbXBhcmVfbGVuZ3RoX3dpdGggbCAobi0xKVxuOztcblxuKCoqIHsxIENvbXBhcmlzb259ICopXG5cbigqIE5vdGU6IHdlIGFyZSAqbm90KiBzaG9ydGN1dHRpbmcgdGhlIGxpc3QgYnkgdXNpbmdcbiAgIFtMaXN0LmNvbXBhcmVfbGVuZ3Roc10gZmlyc3Q7IHRoaXMgbWF5IGJlIHNsb3dlciBvbiBsb25nIGxpc3RzXG4gICBpbW1lZGlhdGVseSBzdGFydCB3aXRoIGRpc3RpbmN0IGVsZW1lbnRzLiBJdCBpcyBhbHNvIGluY29ycmVjdCBmb3JcbiAgIFtjb21wYXJlXSBiZWxvdywgYW5kIGl0IGlzIGJldHRlciAocHJpbmNpcGxlIG9mIGxlYXN0IHN1cnByaXNlKSB0b1xuICAgdXNlIHRoZSBzYW1lIGFwcHJvYWNoIGZvciBib3RoIGZ1bmN0aW9ucy4gKilcbmxldCByZWMgZXF1YWwgZXEgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiB0cnVlXG4gIHwgW10sIF86Ol8gfCBfOjpfLCBbXSAtPiBmYWxzZVxuICB8IGExOjpsMSwgYTI6OmwyIC0+IGVxIGExIGEyICYmIGVxdWFsIGVxIGwxIGwyXG5cbmxldCByZWMgY29tcGFyZSBjbXAgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF86Ol8gLT4gLTFcbiAgfCBfOjpfLCBbXSAtPiAxXG4gIHwgYTE6OmwxLCBhMjo6bDIgLT5cbiAgICBsZXQgYyA9IGNtcCBhMSBhMiBpblxuICAgIGlmIGMgPD4gMCB0aGVuIGNcbiAgICBlbHNlIGNvbXBhcmUgY21wIGwxIGwyXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgbCA9XG4gIGxldCByZWMgYXV4IGwgKCkgPSBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFNlcS5OaWxcbiAgICB8IHggOjogdGFpbCAtPiBTZXEuQ29ucyAoeCwgYXV4IHRhaWwpXG4gIGluXG4gIGF1eCBsXG5cbmxldCBvZl9zZXEgc2VxID1cbiAgbGV0IHJlYyBkaXJlY3QgZGVwdGggc2VxIDogXyBsaXN0ID1cbiAgICBpZiBkZXB0aD0wXG4gICAgdGhlblxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+IHg6OmFjYykgW10gc2VxXG4gICAgICB8PiByZXYgKCogdGFpbHJlYyAqKVxuICAgIGVsc2UgbWF0Y2ggc2VxKCkgd2l0aFxuICAgICAgfCBTZXEuTmlsIC0+IFtdXG4gICAgICB8IFNlcS5Db25zICh4LCBuZXh0KSAtPiB4IDo6IGRpcmVjdCAoZGVwdGgtMSkgbmV4dFxuICBpblxuICBkaXJlY3QgNTAwIHNlcVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHQgPSBpbnRcblxubGV0IHplcm8gPSAwXG5sZXQgb25lID0gMVxubGV0IG1pbnVzX29uZSA9IC0xXG5leHRlcm5hbCBuZWcgOiBpbnQgLT4gaW50ID0gXCIlbmVnaW50XCJcbmV4dGVybmFsIGFkZCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYWRkaW50XCJcbmV4dGVybmFsIHN1YiA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlc3ViaW50XCJcbmV4dGVybmFsIG11bCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbXVsaW50XCJcbmV4dGVybmFsIGRpdiA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlZGl2aW50XCJcbmV4dGVybmFsIHJlbSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbW9kaW50XCJcbmV4dGVybmFsIHN1Y2MgOiBpbnQgLT4gaW50ID0gXCIlc3VjY2ludFwiXG5leHRlcm5hbCBwcmVkIDogaW50IC0+IGludCA9IFwiJXByZWRpbnRcIlxubGV0IGFicyB4ID0gaWYgeCA+PSAwIHRoZW4geCBlbHNlIC14XG5sZXQgbWF4X2ludCA9ICgtMSkgbHNyIDFcbmxldCBtaW5faW50ID0gbWF4X2ludCArIDFcbmV4dGVybmFsIGxvZ2FuZCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYW5kaW50XCJcbmV4dGVybmFsIGxvZ29yIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVvcmludFwiXG5leHRlcm5hbCBsb2d4b3IgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJXhvcmludFwiXG5sZXQgbG9nbm90IHggPSBsb2d4b3IgeCAoLTEpXG5leHRlcm5hbCBzaGlmdF9sZWZ0IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc2xpbnRcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFzcmludFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodF9sb2dpY2FsIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc3JpbnRcIlxubGV0IGVxdWFsIDogaW50IC0+IGludCAtPiBib29sID0gKCA9IClcbmxldCBjb21wYXJlIDogaW50IC0+IGludCAtPiBpbnQgPSBTdGRsaWIuY29tcGFyZVxubGV0IG1pbiB4IHkgOiB0ID0gaWYgeCA8PSB5IHRoZW4geCBlbHNlIHlcbmxldCBtYXggeCB5IDogdCA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5leHRlcm5hbCB0b19mbG9hdCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcblxuKCpcbmV4dGVybmFsIGludF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX2ludF9vZl9zdHJpbmdcIlxubGV0IG9mX3N0cmluZyBzID0gdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcykgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuKilcblxuZXh0ZXJuYWwgZm9ybWF0X2ludCA6IHN0cmluZyAtPiBpbnQgLT4gc3RyaW5nID0gXCJjYW1sX2Zvcm1hdF9pbnRcIlxubGV0IHRvX3N0cmluZyB4ID0gZm9ybWF0X2ludCBcIiVkXCIgeFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBCeXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBzdHJpbmcubWwuXG4gICBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIFwiZHVwbGljYXRlZFwiIGNvbW1lbnQgYWJvdmUgdGhlaXIgZGVmaW5pdGlvbi5cbiopXG5cbmV4dGVybmFsIGxlbmd0aCA6IGJ5dGVzIC0+IGludCA9IFwiJWJ5dGVzX2xlbmd0aFwiXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc19zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCB1bnNhZmVfZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9maWxsX2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuZXh0ZXJuYWwgdW5zYWZlX29mX3N0cmluZyA6IHN0cmluZyAtPiBieXRlcyA9IFwiJWJ5dGVzX29mX3N0cmluZ1wiXG5cbmV4dGVybmFsIHVuc2FmZV9ibGl0IDogYnl0ZXMgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9ieXRlc1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB1bnNhZmVfYmxpdF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5sZXQgbWFrZSBuIGMgPVxuICBsZXQgcyA9IGNyZWF0ZSBuIGluXG4gIHVuc2FmZV9maWxsIHMgMCBuIGM7XG4gIHNcblxubGV0IGluaXQgbiBmID1cbiAgbGV0IHMgPSBjcmVhdGUgbiBpblxuICBmb3IgaSA9IDAgdG8gbiAtIDEgZG9cbiAgICB1bnNhZmVfc2V0IHMgaSAoZiBpKVxuICBkb25lO1xuICBzXG5cbmxldCBlbXB0eSA9IGNyZWF0ZSAwXG5cbmxldCBjb3B5IHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gIHVuc2FmZV9ibGl0IHMgMCByIDAgbGVuO1xuICByXG5cbmxldCB0b19zdHJpbmcgYiA9IHVuc2FmZV90b19zdHJpbmcgKGNvcHkgYilcbmxldCBvZl9zdHJpbmcgcyA9IGNvcHkgKHVuc2FmZV9vZl9zdHJpbmcgcylcblxubGV0IHN1YiBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5zdWIgLyBCeXRlcy5zdWJcIlxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gICAgdW5zYWZlX2JsaXQgcyBvZnMgciAwIGxlbjtcbiAgICByXG4gIGVuZFxuXG5sZXQgc3ViX3N0cmluZyBiIG9mcyBsZW4gPSB1bnNhZmVfdG9fc3RyaW5nIChzdWIgYiBvZnMgbGVuKVxuXG4oKiBhZGRpdGlvbiB3aXRoIGFuIG92ZXJmbG93IGNoZWNrICopXG5sZXQgKCsrKSBhIGIgPVxuICBsZXQgYyA9IGEgKyBiIGluXG4gIG1hdGNoIGEgPCAwLCBiIDwgMCwgYyA8IDAgd2l0aFxuICB8IHRydWUgLCB0cnVlICwgZmFsc2VcbiAgfCBmYWxzZSwgZmFsc2UsIHRydWUgIC0+IGludmFsaWRfYXJnIFwiQnl0ZXMuZXh0ZW5kXCIgKCogb3ZlcmZsb3cgKilcbiAgfCBfIC0+IGNcblxubGV0IGV4dGVuZCBzIGxlZnQgcmlnaHQgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgKysgbGVmdCArKyByaWdodCBpblxuICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgbGV0IChzcmNvZmYsIGRzdG9mZikgPSBpZiBsZWZ0IDwgMCB0aGVuIC1sZWZ0LCAwIGVsc2UgMCwgbGVmdCBpblxuICBsZXQgY3B5bGVuID0gSW50Lm1pbiAobGVuZ3RoIHMgLSBzcmNvZmYpIChsZW4gLSBkc3RvZmYpIGluXG4gIGlmIGNweWxlbiA+IDAgdGhlbiB1bnNhZmVfYmxpdCBzIHNyY29mZiByIGRzdG9mZiBjcHlsZW47XG4gIHJcblxubGV0IGZpbGwgcyBvZnMgbGVuIGMgPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5maWxsIC8gQnl0ZXMuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgcyBvZnMgbGVuIGNcblxubGV0IGJsaXQgczEgb2ZzMSBzMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBzMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggczIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ5dGVzLmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IHMxIG9mczEgczIgb2ZzMiBsZW5cblxubGV0IGJsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IG9mczEgPCAwIHx8IG9mczEgPiBzdHJpbmdfbGVuZ3RoIHMxIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBzMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmJsaXQgLyBCeXRlcy5ibGl0X3N0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX2JsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW5cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpdGVyIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZih1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGl0ZXJpIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgZW5zdXJlX2dlICh4OmludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIkJ5dGVzLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZW1wdHlcbiAgfCBsIC0+IGxldCBzZXBsZW4gPSBsZW5ndGggc2VwIGluXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoY3JlYXRlIChzdW1fbGVuZ3RocyAwIHNlcGxlbiBsKSlcbiAgICAgICAgICAgIDAgc2VwIHNlcGxlbiBsXG5cbmxldCBjYXQgczEgczIgPVxuICBsZXQgbDEgPSBsZW5ndGggczEgaW5cbiAgbGV0IGwyID0gbGVuZ3RoIHMyIGluXG4gIGxldCByID0gY3JlYXRlIChsMSArIGwyKSBpblxuICB1bnNhZmVfYmxpdCBzMSAwIHIgMCBsMTtcbiAgdW5zYWZlX2JsaXQgczIgMCByIGwxIGwyO1xuICByXG5cblxuZXh0ZXJuYWwgY2hhcl9jb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGNoYXJfY2hyOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IGkgPSByZWYgMCBpblxuICB3aGlsZSAhaSA8IGxlbiAmJiBpc19zcGFjZSAodW5zYWZlX2dldCBzICFpKSBkb1xuICAgIGluY3IgaVxuICBkb25lO1xuICBsZXQgaiA9IHJlZiAobGVuIC0gMSkgaW5cbiAgd2hpbGUgIWogPj0gIWkgJiYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAhaikgZG9cbiAgICBkZWNyIGpcbiAgZG9uZTtcbiAgaWYgIWogPj0gIWkgdGhlblxuICAgIHN1YiBzICFpICghaiAtICFpICsgMSlcbiAgZWxzZVxuICAgIGVtcHR5XG5cbmxldCBlc2NhcGVkIHMgPVxuICBsZXQgbiA9IHJlZiAwIGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICBuIDo9ICFuICtcbiAgICAgIChtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFxuJyB8ICdcXHQnIHwgJ1xccicgfCAnXFxiJyAtPiAyXG4gICAgICAgfCAnICcgLi4gJ34nIC0+IDFcbiAgICAgICB8IF8gLT4gNClcbiAgZG9uZTtcbiAgaWYgIW4gPSBsZW5ndGggcyB0aGVuIGNvcHkgcyBlbHNlIGJlZ2luXG4gICAgbGV0IHMnID0gY3JlYXRlICFuIGluXG4gICAgbiA6PSAwO1xuICAgIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICAgIGJlZ2luIG1hdGNoIHVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgIHwgKCdcXFwiJyB8ICdcXFxcJykgYXMgYyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gY1xuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ24nXG4gICAgICB8ICdcXHQnIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAndCdcbiAgICAgIHwgJ1xccicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICdyJ1xuICAgICAgfCAnXFxiJyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ2InXG4gICAgICB8ICgnICcgLi4gJ34nKSBhcyBjIC0+IHVuc2FmZV9zZXQgcycgIW4gY1xuICAgICAgfCBjIC0+XG4gICAgICAgICAgbGV0IGEgPSBjaGFyX2NvZGUgYyBpblxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyBhIC8gMTAwKSk7XG4gICAgICAgICAgaW5jciBuO1xuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gKGNoYXJfY2hyICg0OCArIChhIC8gMTApIG1vZCAxMCkpO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyBhIG1vZCAxMCkpO1xuICAgICAgZW5kO1xuICAgICAgaW5jciBuXG4gICAgZG9uZTtcbiAgICBzJ1xuICBlbmRcblxubGV0IG1hcCBmIHMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGwgPSAwIHRoZW4gcyBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkbyB1bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBzIGkpKSBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBtYXBpIGYgcyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgbCA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgcyBpKSkgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgZm9sZF9sZWZ0IGYgeCBhID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgciA6PSBmICFyICh1bnNhZmVfZ2V0IGEgaSlcbiAgZG9uZTtcbiAgIXJcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IHMgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgcyBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPSBtYXAgQ2hhci51cHBlcmNhc2VfYXNjaWkgc1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID0gbWFwIENoYXIubG93ZXJjYXNlX2FzY2lpIHNcblxubGV0IGFwcGx5MSBmIHMgPVxuICBpZiBsZW5ndGggcyA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNvcHkgcyBpblxuICAgIHVuc2FmZV9zZXQgciAwIChmKHVuc2FmZV9nZXQgcyAwKSk7XG4gICAgclxuICBlbmRcblxubGV0IGNhcGl0YWxpemVfYXNjaWkgcyA9IGFwcGx5MSBDaGFyLnVwcGVyY2FzZV9hc2NpaSBzXG5sZXQgdW5jYXBpdGFsaXplX2FzY2lpIHMgPSBhcHBseTEgQ2hhci5sb3dlcmNhc2VfYXNjaWkgc1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHN0YXJ0c193aXRoIH5wcmVmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fcHJlID0gbGVuZ3RoIHByZWZpeCBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3ByZSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyBpIDw+IHVuc2FmZV9nZXQgcHJlZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gbGVuX3MgPj0gbGVuX3ByZSAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGVuZHNfd2l0aCB+c3VmZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3N1ZiA9IGxlbmd0aCBzdWZmaXggaW5cbiAgbGV0IGRpZmYgPSBsZW5fcyAtIGxlbl9zdWYgaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9zdWYgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgKGRpZmYgKyBpKSA8PiB1bnNhZmVfZ2V0IHN1ZmZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGRpZmYgPj0gMCAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4IHMgYyA9IGluZGV4X3JlYyBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIGluZGV4X3JlY19vcHQgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgaW5kZXhfcmVjX29wdCBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tIC8gQnl0ZXMuaW5kZXhfZnJvbVwiIGVsc2VcbiAgaW5kZXhfcmVjIHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWMgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSByaW5kZXhfcmVjIHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4IHMgYyA9IHJpbmRleF9yZWMgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfb3B0IHMgYyA9IHJpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG50eXBlIHQgPSBieXRlc1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2J5dGVzX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG4oKiBEZXByZWNhdGVkIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCB2aWEgb3RoZXIgZGVwcmVjYXRlZCBmdW5jdGlvbnMgKilcbltAQEBvY2FtbC53YXJuaW5nIFwiLTNcIl1cbmxldCB1cHBlcmNhc2UgcyA9IG1hcCBDaGFyLnVwcGVyY2FzZSBzXG5sZXQgbG93ZXJjYXNlIHMgPSBtYXAgQ2hhci5sb3dlcmNhc2Ugc1xuXG5sZXQgY2FwaXRhbGl6ZSBzID0gYXBwbHkxIENoYXIudXBwZXJjYXNlIHNcbmxldCB1bmNhcGl0YWxpemUgcyA9IGFwcGx5MSBDaGFyLmxvd2VyY2FzZSBzXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcyA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPSBsZW5ndGggcyB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IGdldCBzIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIHMgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID0gbGVuZ3RoIHMgdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBnZXQgcyBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IG4gPSByZWYgMCBpblxuICBsZXQgYnVmID0gcmVmIChtYWtlIDI1NiAnXFwwMDAnKSBpblxuICBsZXQgcmVzaXplICgpID1cbiAgICAoKiByZXNpemUgKilcbiAgICBsZXQgbmV3X2xlbiA9IEludC5taW4gKDIgKiBsZW5ndGggIWJ1ZikgU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGluXG4gICAgaWYgbGVuZ3RoICFidWYgPSBuZXdfbGVuIHRoZW4gZmFpbHdpdGggXCJCeXRlcy5vZl9zZXE6IGNhbm5vdCBncm93IGJ5dGVzXCI7XG4gICAgbGV0IG5ld19idWYgPSBtYWtlIG5ld19sZW4gJ1xcMDAwJyBpblxuICAgIGJsaXQgIWJ1ZiAwIG5ld19idWYgMCAhbjtcbiAgICBidWYgOj0gbmV3X2J1ZlxuICBpblxuICBTZXEuaXRlclxuICAgIChmdW4gYyAtPlxuICAgICAgIGlmICFuID0gbGVuZ3RoICFidWYgdGhlbiByZXNpemUoKTtcbiAgICAgICBzZXQgIWJ1ZiAhbiBjO1xuICAgICAgIGluY3IgbilcbiAgICBpO1xuICBzdWIgIWJ1ZiAwICFuXG5cbigqKiB7NiBCaW5hcnkgZW5jb2RpbmcvZGVjb2Rpbmcgb2YgaW50ZWdlcnN9ICopXG5cbigqIFRoZSBnZXRfIGZ1bmN0aW9ucyBhcmUgYWxsIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5cbmV4dGVybmFsIHVuc2FmZV9nZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlYnl0ZXNfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfZ2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX2J5dGVzX2dldDE2dVwiXG5leHRlcm5hbCBnZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlYnl0ZXNfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX2J5dGVzX2dldDE2XCJcbmV4dGVybmFsIGdldF9pbnQzMl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiA9IFwiJWNhbWxfYnl0ZXNfZ2V0MzJcIlxuZXh0ZXJuYWwgZ2V0X2ludDY0X25lIDogYnl0ZXMgLT4gaW50IC0+IGludDY0ID0gXCIlY2FtbF9ieXRlc19nZXQ2NFwiXG5cbmV4dGVybmFsIHVuc2FmZV9zZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfdWludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZ1XCJcbmV4dGVybmFsIHNldF9pbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgc2V0X2ludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQxNlwiXG5leHRlcm5hbCBzZXRfaW50MzJfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50MzIgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MzJcIlxuZXh0ZXJuYWwgc2V0X2ludDY0X25lIDogYnl0ZXMgLT4gaW50IC0+IGludDY0IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDY0XCJcbmV4dGVybmFsIHN3YXAxNiA6IGludCAtPiBpbnQgPSBcIiVic3dhcDE2XCJcbmV4dGVybmFsIHN3YXAzMiA6IGludDMyIC0+IGludDMyID0gXCIlYnN3YXBfaW50MzJcIlxuZXh0ZXJuYWwgc3dhcDY0IDogaW50NjQgLT4gaW50NjQgPSBcIiVic3dhcF9pbnQ2NFwiXG5cbmxldCB1bnNhZmVfZ2V0X3VpbnQxNl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHN3YXAxNiAodW5zYWZlX2dldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIHVuc2FmZV9nZXRfdWludDE2X25lIGIgaVxuXG5sZXQgdW5zYWZlX2dldF91aW50MTZfYmUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGlcbiAgZWxzZSBzd2FwMTYgKHVuc2FmZV9nZXRfdWludDE2X25lIGIgaSlcblxubGV0IGdldF9pbnQ4IGIgaSA9XG4gICgoZ2V0X3VpbnQ4IGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSA4KSkgYXNyIChTeXMuaW50X3NpemUgLSA4KVxuXG5sZXQgZ2V0X3VpbnQxNl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAxNiAoZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IGdldF91aW50MTZfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDE2IChnZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSBnZXRfdWludDE2X25lIGIgaVxuXG5sZXQgZ2V0X2ludDE2X25lIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9uZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDE2X2xlIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9sZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDE2X2JlIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9iZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDMyX2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDMyIChnZXRfaW50MzJfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQzMl9uZSBiIGlcblxubGV0IGdldF9pbnQzMl9iZSBiIGkgPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMzIgKGdldF9pbnQzMl9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDMyX25lIGIgaVxuXG5sZXQgZ2V0X2ludDY0X2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IChnZXRfaW50NjRfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQ2NF9uZSBiIGlcblxubGV0IGdldF9pbnQ2NF9iZSBiIGkgPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwNjQgKGdldF9pbnQ2NF9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDY0X25lIGIgaVxuXG5sZXQgdW5zYWZlX3NldF91aW50MTZfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2UgdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIHhcblxubGV0IHVuc2FmZV9zZXRfdWludDE2X2JlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgeCBlbHNlXG4gIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSAoc3dhcDE2IHgpXG5cbmxldCBzZXRfaW50MTZfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHNldF9pbnQxNl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDE2X2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2Ugc2V0X2ludDE2X25lIGIgaSB4XG5cbmxldCBzZXRfaW50MzJfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQzMl9uZSBiIGkgKHN3YXAzMiB4KVxuICBlbHNlIHNldF9pbnQzMl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDMyX2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDMyX25lIGIgaSAoc3dhcDMyIHgpXG4gIGVsc2Ugc2V0X2ludDMyX25lIGIgaSB4XG5cbmxldCBzZXRfaW50NjRfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQ2NF9uZSBiIGkgKHN3YXA2NCB4KVxuICBlbHNlIHNldF9pbnQ2NF9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDY0X2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDY0X25lIGIgaSAoc3dhcDY0IHgpXG4gIGVsc2Ugc2V0X2ludDY0X25lIGIgaSB4XG5cbmxldCBzZXRfdWludDggPSBzZXRfaW50OFxubGV0IHNldF91aW50MTZfbmUgPSBzZXRfaW50MTZfbmVcbmxldCBzZXRfdWludDE2X2JlID0gc2V0X2ludDE2X2JlXG5sZXQgc2V0X3VpbnQxNl9sZSA9IHNldF9pbnQxNl9sZVxuXG4oKiBVVEYgY29kZWNzIGFuZCB2YWxpZGF0aW9ucyAqKVxuXG5sZXQgZGVjX2ludmFsaWQgPSBVY2hhci51dGZfZGVjb2RlX2ludmFsaWRcbmxldFtAaW5saW5lXSBkZWNfcmV0IG4gdSA9IFVjaGFyLnV0Zl9kZWNvZGUgbiAoVWNoYXIudW5zYWZlX29mX2ludCB1KVxuXG4oKiBJbiBjYXNlIG9mIGRlY29kaW5nIGVycm9yLCBpZiB3ZSBlcnJvciBvbiB0aGUgZmlyc3QgYnl0ZSwgd2VcbiAgIGNvbnN1bWUgdGhlIGJ5dGUsIG90aGVyd2lzZSB3ZSBjb25zdW1lIHRoZSBbbl0gYnl0ZXMgcHJlY2VlZGluZ1xuICAgdGhlIGVycm9yaW5nIGJ5dGUuXG5cbiAgIFRoaXMgbWVhbnMgdGhhdCBpZiBhIGNsaWVudCB1c2VzIGRlY29kZXMgd2l0aG91dCBjYXJpbmcgYWJvdXRcbiAgIHZhbGlkaXR5IGl0IG5hdHVyYWxseSByZXBsYWNlIGJvZ3VzIGRhdGEgd2l0aCBVY2hhci5yZXAgYWNjb3JkaW5nXG4gICB0byB0aGUgV0hBVFdHIEVuY29kaW5nIHN0YW5kYXJkLiBPdGhlciBzY2hlbWVzIGFyZSBwb3NzaWJsZSBieVxuICAgY29uc3VsdGluZyB0aGUgbnVtYmVyIG9mIHVzZWQgYnl0ZXMgb24gaW52YWxpZCBkZWNvZGVzLiBGb3IgbW9yZVxuICAgZGV0YWlscyBzZWUgaHR0cHM6Ly9oc2l2b25lbi5maS9icm9rZW4tdXRmLTgvXG5cbiAgIEZvciB0aGlzIHJlYXNvbiBpbiBbZ2V0X3V0Zl84X3VjaGFyXSB3ZSBncmFkdWFsbHkgY2hlY2sgdGhlIG5leHRcbiAgIGJ5dGUgaXMgYXZhaWxhYmxlIHJhdGhlciB0aGFuIGRvaW5nIGl0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZVxuICAgZmlyc3QgYnl0ZS4gQ29udHJhc3Qgd2l0aCBbaXNfdmFsaWRfdXRmXzhdLiAqKVxuXG4oKiBVVEYtOCAqKVxuXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194QkYgYiA9IGIgbHNyIDYgPD4gMGIxMFxubGV0W0BpbmxpbmVdIG5vdF9pbl94QTBfdG9feEJGIGIgPSBiIGxzciA1IDw+IDBiMTAxXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194OUYgYiA9IGIgbHNyIDUgPD4gMGIxMDBcbmxldFtAaW5saW5lXSBub3RfaW5feDkwX3RvX3hCRiBiID0gYiA8IDB4OTAgfHwgMHhCRiA8IGJcbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3g4RiBiID0gYiBsc3IgNCA8PiAweDhcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzIgYjAgYjEgPVxuICAoKGIwIGxhbmQgMHgxRikgbHNsIDYpIGxvclxuICAoKGIxIGxhbmQgMHgzRikpXG5cbmxldFtAaW5saW5lXSB1dGZfOF91Y2hhcl8zIGIwIGIxIGIyID1cbiAgKChiMCBsYW5kIDB4MEYpIGxzbCAxMikgbG9yXG4gICgoYjEgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSlcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMgPVxuICAoKGIwIGxhbmQgMHgwNykgbHNsIDE4KSBsb3JcbiAgKChiMSBsYW5kIDB4M0YpIGxzbCAxMikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjMgbGFuZCAweDNGKSlcblxubGV0IGdldF91dGZfOF91Y2hhciBiIGkgPVxuICBsZXQgYjAgPSBnZXRfdWludDggYiBpIGluICgqIHJhaXNlcyBpZiBbaV0gaXMgbm90IGEgdmFsaWQgaW5kZXguICopXG4gIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQ4IGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgbWF0Y2ggQ2hhci51bnNhZmVfY2hyIGIwIHdpdGggKCogU2VlIFRoZSBVbmljb2RlIFN0YW5kYXJkLCBUYWJsZSAzLjcgKilcbiAgfCAnXFx4MDAnIC4uICdcXHg3RicgLT4gZGVjX3JldCAxIGIwXG4gIHwgJ1xceEMyJyAuLiAnXFx4REYnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGRlY19yZXQgMiAodXRmXzhfdWNoYXJfMiBiMCBiMSlcbiAgfCAnXFx4RTAnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3hBMF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhFMScgLi4gJ1xceEVDJyB8ICdcXHhFRScgLi4gJ1xceEVGJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGRlY19yZXQgMyAodXRmXzhfdWNoYXJfMyBiMCBiMSBiMilcbiAgfCAnXFx4RUQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OUYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhGMCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDkwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjEnIC4uICdcXHhGMycgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OEYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBsZXQgYjMgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIzIHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBkZWNfcmV0IDQgKHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMpXG4gIHwgXyAtPiBkZWNfaW52YWxpZCAxXG5cbmxldCBzZXRfdXRmXzhfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50OCBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHgwMDdGIC0+XG4gICAgICBzZXRfdWludDggYiBpIHU7XG4gICAgICAxXG4gIHwgdSB3aGVuIHUgPD0gMHgwN0ZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhDMCBsb3IgKHUgbHNyIDYpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICAyKVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RTAgbG9yICh1IGxzciAxMikpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgMylcbiAgfCB1IHdoZW4gdSA8PSAweDEwRkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RjAgbG9yICh1IGxzciAxOCkpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgMTIpIGxhbmQgMHgzRikpO1xuICAgICAgIHNldCBiIChpICsgMikgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgNClcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzggYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDggaW5cbiAgICBtYXRjaCBDaGFyLnVuc2FmZV9jaHIgKGdldCBiIGkpIHdpdGhcbiAgICB8ICdcXHgwMCcgLi4gJ1xceDdGJyAtPiBsb29wIG1heCBiIChpICsgMSlcbiAgICB8ICdcXHhDMicgLi4gJ1xceERGJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFMCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94QTBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEUxJyAuLiAnXFx4RUMnIHwgJ1xceEVFJyAuLiAnXFx4RUYnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDIgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFRCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feDlGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYwJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g5MF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDIpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYxJyAuLiAnXFx4RjMnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjQnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3g4RiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCBfIC0+IGZhbHNlXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkJFICopXG5cbmxldCBnZXRfdXRmXzE2YmVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2YmVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfYmUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmJlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkxFICopXG5cbmxldCBnZXRfdXRmXzE2bGVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2bGVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfbGUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmxlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBHYWxsaXVtLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFN0cmluZyBvcGVyYXRpb25zLCBiYXNlZCBvbiBieXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zLiBXaGVuIHlvdSBtb2RpZnkgdGhlIG9uZSBpbiB0aGlzIGZpbGUgeW91IG5lZWQgdG9cbiAgIG1vZGlmeSBpdHMgZHVwbGljYXRlIGluIGJ5dGVzLm1sLlxuICAgVGhlc2UgZnVuY3Rpb25zIGhhdmUgYSBcImR1cGxpY2F0ZWRcIiBjb21tZW50IGFib3ZlIHRoZWlyIGRlZmluaXRpb24uXG4qKVxuXG5leHRlcm5hbCBsZW5ndGggOiBzdHJpbmcgLT4gaW50ID0gXCIlc3RyaW5nX2xlbmd0aFwiXG5leHRlcm5hbCBnZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9IFwiJXN0cmluZ19zYWZlX3NldFwiXG5leHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX3N0cmluZ1wiXG5leHRlcm5hbCB1bnNhZmVfZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVzdHJpbmdfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfYmxpdCA6IHN0cmluZyAtPiBpbnQgLT4gIGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdW5zYWZlX2ZpbGwgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfZmlsbF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5tb2R1bGUgQiA9IEJ5dGVzXG5cbmxldCBidHMgPSBCLnVuc2FmZV90b19zdHJpbmdcbmxldCBib3MgPSBCLnVuc2FmZV9vZl9zdHJpbmdcblxubGV0IG1ha2UgbiBjID1cbiAgQi5tYWtlIG4gYyB8PiBidHNcbmxldCBpbml0IG4gZiA9XG4gIEIuaW5pdCBuIGYgfD4gYnRzXG5sZXQgZW1wdHkgPSBcIlwiXG5sZXQgY29weSBzID1cbiAgQi5jb3B5IChib3MgcykgfD4gYnRzXG5sZXQgb2ZfYnl0ZXMgPSBCLnRvX3N0cmluZ1xubGV0IHRvX2J5dGVzID0gQi5vZl9zdHJpbmdcbmxldCBzdWIgcyBvZnMgbGVuID1cbiAgQi5zdWIgKGJvcyBzKSBvZnMgbGVuIHw+IGJ0c1xubGV0IGZpbGwgPVxuICBCLmZpbGxcbmxldCBibGl0ID1cbiAgQi5ibGl0X3N0cmluZ1xuXG5sZXQgZW5zdXJlX2dlICh4OmludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb25jYXRcIlxuXG5sZXQgcmVjIHN1bV9sZW5ndGhzIGFjYyBzZXBsZW4gPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY1xuICB8IGhkIDo6IFtdIC0+IGxlbmd0aCBoZCArIGFjY1xuICB8IGhkIDo6IHRsIC0+IHN1bV9sZW5ndGhzIChlbnN1cmVfZ2UgKGxlbmd0aCBoZCArIHNlcGxlbiArIGFjYykgYWNjKSBzZXBsZW4gdGxcblxubGV0IHJlYyB1bnNhZmVfYmxpdHMgZHN0IHBvcyBzZXAgc2VwbGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBkc3RcbiAgfCBoZCA6OiBbXSAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTsgZHN0XG4gIHwgaGQgOjogdGwgLT5cbiAgICB1bnNhZmVfYmxpdCBoZCAwIGRzdCBwb3MgKGxlbmd0aCBoZCk7XG4gICAgdW5zYWZlX2JsaXQgc2VwIDAgZHN0IChwb3MgKyBsZW5ndGggaGQpIHNlcGxlbjtcbiAgICB1bnNhZmVfYmxpdHMgZHN0IChwb3MgKyBsZW5ndGggaGQgKyBzZXBsZW4pIHNlcCBzZXBsZW4gdGxcblxubGV0IGNvbmNhdCBzZXAgPSBmdW5jdGlvblxuICAgIFtdIC0+IFwiXCJcbiAgfCBsIC0+IGxldCBzZXBsZW4gPSBsZW5ndGggc2VwIGluIGJ0cyBAQFxuICAgICAgICAgIHVuc2FmZV9ibGl0c1xuICAgICAgICAgICAgKEIuY3JlYXRlIChzdW1fbGVuZ3RocyAwIHNlcGxlbiBsKSlcbiAgICAgICAgICAgIDAgc2VwIHNlcGxlbiBsXG5cbmxldCBjYXQgPSAoIF4gKVxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaXRlciBmIHMgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvIGYgKHVuc2FmZV9nZXQgcyBpKSBkb25lXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpdGVyaSBmIHMgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvIGYgaSAodW5zYWZlX2dldCBzIGkpIGRvbmVcblxubGV0IG1hcCBmIHMgPVxuICBCLm1hcCBmIChib3MgcykgfD4gYnRzXG5sZXQgbWFwaSBmIHMgPVxuICBCLm1hcGkgZiAoYm9zIHMpIHw+IGJ0c1xubGV0IGZvbGRfcmlnaHQgZiB4IGEgPVxuICBCLmZvbGRfcmlnaHQgZiAoYm9zIHgpIGFcbmxldCBmb2xkX2xlZnQgZiBhIHggPVxuICBCLmZvbGRfbGVmdCBmIGEgKGJvcyB4KVxubGV0IGV4aXN0cyBmIHMgPVxuICBCLmV4aXN0cyBmIChib3MgcylcbmxldCBmb3JfYWxsIGYgcyA9XG4gIEIuZm9yX2FsbCBmIChib3MgcylcblxuKCogQmV3YXJlOiB3ZSBjYW5ub3QgdXNlIEIudHJpbSBvciBCLmVzY2FwZSBiZWNhdXNlIHRoZXkgYWx3YXlzIG1ha2UgYVxuICAgY29weSwgYnV0IFN0cmluZy5tbGkgc3BlbGxzIG91dCBzb21lIGNhc2VzIHdoZXJlIHdlIGFyZSBub3QgYWxsb3dlZFxuICAgdG8gbWFrZSBhIGNvcHkuICopXG5cbmxldCBpc19zcGFjZSA9IGZ1bmN0aW9uXG4gIHwgJyAnIHwgJ1xcMDEyJyB8ICdcXG4nIHwgJ1xccicgfCAnXFx0JyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgdHJpbSBzID1cbiAgaWYgcyA9IFwiXCIgdGhlbiBzXG4gIGVsc2UgaWYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAwKSB8fCBpc19zcGFjZSAodW5zYWZlX2dldCBzIChsZW5ndGggcyAtIDEpKVxuICAgIHRoZW4gYnRzIChCLnRyaW0gKGJvcyBzKSlcbiAgZWxzZSBzXG5cbmxldCBlc2NhcGVkIHMgPVxuICBsZXQgcmVjIGVzY2FwZV9pZl9uZWVkZWQgcyBuIGkgPVxuICAgIGlmIGkgPj0gbiB0aGVuIHMgZWxzZVxuICAgICAgbWF0Y2ggdW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFwwMDAnLi4nXFwwMzEnIHwgJ1xcMTI3Jy4uICdcXDI1NScgLT5cbiAgICAgICAgICBidHMgKEIuZXNjYXBlZCAoYm9zIHMpKVxuICAgICAgfCBfIC0+IGVzY2FwZV9pZl9uZWVkZWQgcyBuIChpKzEpXG4gIGluXG4gIGVzY2FwZV9pZl9uZWVkZWQgcyAobGVuZ3RoIHMpIDBcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXggcyBjID0gaW5kZXhfcmVjIHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWNfb3B0IHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIGluZGV4X3JlY19vcHQgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb20gLyBCeXRlcy5pbmRleF9mcm9tXCIgZWxzZVxuICAgIGluZGV4X3JlYyBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgcmluZGV4X3JlYyBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIHJpbmRleF9yZWMgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleCBzIGMgPSByaW5kZXhfcmVjIHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgcmluZGV4X3JlY19vcHQgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSByaW5kZXhfcmVjX29wdCBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X29wdCBzIGMgPSByaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJjb250YWluc19mcm9tIHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5yY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChyaW5kZXhfcmVjIHMgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPVxuICBCLnVwcGVyY2FzZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID1cbiAgQi5sb3dlcmNhc2VfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCBjYXBpdGFsaXplX2FzY2lpIHMgPVxuICBCLmNhcGl0YWxpemVfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCB1bmNhcGl0YWxpemVfYXNjaWkgcyA9XG4gIEIudW5jYXBpdGFsaXplX2FzY2lpIChib3MgcykgfD4gYnRzXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBzdGFydHNfd2l0aCB+cHJlZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3ByZSA9IGxlbmd0aCBwcmVmaXggaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9wcmUgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgaSA8PiB1bnNhZmVfZ2V0IHByZWZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGxlbl9zID49IGxlbl9wcmUgJiYgYXV4IDBcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGVuZHNfd2l0aCB+c3VmZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3N1ZiA9IGxlbmd0aCBzdWZmaXggaW5cbiAgbGV0IGRpZmYgPSBsZW5fcyAtIGxlbl9zdWYgaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9zdWYgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgKGRpZmYgKyBpKSA8PiB1bnNhZmVfZ2V0IHN1ZmZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGRpZmYgPj0gMCAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgc3BsaXRfb25fY2hhciBzZXAgcyA9XG4gIGxldCByID0gcmVmIFtdIGluXG4gIGxldCBqID0gcmVmIChsZW5ndGggcykgaW5cbiAgZm9yIGkgPSBsZW5ndGggcyAtIDEgZG93bnRvIDAgZG9cbiAgICBpZiB1bnNhZmVfZ2V0IHMgaSA9IHNlcCB0aGVuIGJlZ2luXG4gICAgICByIDo9IHN1YiBzIChpICsgMSkgKCFqIC0gaSAtIDEpIDo6ICFyO1xuICAgICAgaiA6PSBpXG4gICAgZW5kXG4gIGRvbmU7XG4gIHN1YiBzIDAgIWogOjogIXJcblxuKCogRGVwcmVjYXRlZCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgdmlhIG90aGVyIGRlcHJlY2F0ZWQgZnVuY3Rpb25zICopXG5bQEBAb2NhbWwud2FybmluZyBcIi0zXCJdXG5sZXQgdXBwZXJjYXNlIHMgPVxuICBCLnVwcGVyY2FzZSAoYm9zIHMpIHw+IGJ0c1xubGV0IGxvd2VyY2FzZSBzID1cbiAgQi5sb3dlcmNhc2UgKGJvcyBzKSB8PiBidHNcbmxldCBjYXBpdGFsaXplIHMgPVxuICBCLmNhcGl0YWxpemUgKGJvcyBzKSB8PiBidHNcbmxldCB1bmNhcGl0YWxpemUgcyA9XG4gIEIudW5jYXBpdGFsaXplIChib3MgcykgfD4gYnRzXG5cbnR5cGUgdCA9IHN0cmluZ1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHN0cmluZyAtPiBzdHJpbmcgLT4gYm9vbCA9IFwiY2FtbF9zdHJpbmdfZXF1YWxcIiBbQEBub2FsbG9jXVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPSBib3MgcyB8PiBCLnRvX3NlcVxuXG5sZXQgdG9fc2VxaSBzID0gYm9zIHMgfD4gQi50b19zZXFpXG5cbmxldCBvZl9zZXEgZyA9IEIub2Zfc2VxIGcgfD4gYnRzXG5cbigqIFVURiBkZWNvZGVycyBhbmQgdmFsaWRhdG9ycyAqKVxuXG5sZXQgZ2V0X3V0Zl84X3VjaGFyIHMgaSA9IEIuZ2V0X3V0Zl84X3VjaGFyIChib3MgcykgaVxubGV0IGlzX3ZhbGlkX3V0Zl84IHMgPSBCLmlzX3ZhbGlkX3V0Zl84IChib3MgcylcblxubGV0IGdldF91dGZfMTZiZV91Y2hhciBzIGkgPSBCLmdldF91dGZfMTZiZV91Y2hhciAoYm9zIHMpIGlcbmxldCBpc192YWxpZF91dGZfMTZiZSBzID0gQi5pc192YWxpZF91dGZfMTZiZSAoYm9zIHMpXG5cbmxldCBnZXRfdXRmXzE2bGVfdWNoYXIgcyBpID0gQi5nZXRfdXRmXzE2bGVfdWNoYXIgKGJvcyBzKSBpXG5sZXQgaXNfdmFsaWRfdXRmXzE2bGUgcyA9IEIuaXNfdmFsaWRfdXRmXzE2bGUgKGJvcyBzKVxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nL2RlY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG5leHRlcm5hbCBnZXRfdWludDggOiBzdHJpbmcgLT4gaW50IC0+IGludCA9IFwiJXN0cmluZ19zYWZlX2dldFwiXG5leHRlcm5hbCBnZXRfdWludDE2X25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX3N0cmluZ19nZXQxNlwiXG5leHRlcm5hbCBnZXRfaW50MzJfbmUgOiBzdHJpbmcgLT4gaW50IC0+IGludDMyID0gXCIlY2FtbF9zdHJpbmdfZ2V0MzJcIlxuZXh0ZXJuYWwgZ2V0X2ludDY0X25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQ2NCA9IFwiJWNhbWxfc3RyaW5nX2dldDY0XCJcblxubGV0IGdldF9pbnQ4IHMgaSA9IEIuZ2V0X2ludDggKGJvcyBzKSBpXG5sZXQgZ2V0X3VpbnQxNl9sZSBzIGkgPSBCLmdldF91aW50MTZfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X3VpbnQxNl9iZSBzIGkgPSBCLmdldF91aW50MTZfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X25lIHMgaSA9IEIuZ2V0X2ludDE2X25lIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9sZSBzIGkgPSBCLmdldF9pbnQxNl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfYmUgcyBpID0gQi5nZXRfaW50MTZfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDMyX2xlIHMgaSA9IEIuZ2V0X2ludDMyX2xlIChib3MgcykgaVxubGV0IGdldF9pbnQzMl9iZSBzIGkgPSBCLmdldF9pbnQzMl9iZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50NjRfbGUgcyBpID0gQi5nZXRfaW50NjRfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDY0X2JlIHMgaSA9IEIuZ2V0X2ludDY0X2JlIChib3MgcykgaVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgYXJyYXlzLiAqKVxudHlwZSAnYSB0ID0gJ2EgYXJyYXlcblxuKCogQXJyYXkgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBsZW5ndGggOiAnYSBhcnJheSAtPiBpbnQgPSBcIiVhcnJheV9sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgPSBcIiVhcnJheV9zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlYXJyYXlfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhID0gXCIlYXJyYXlfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiJWFycmF5X3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgbWFrZTogaW50IC0+ICdhIC0+ICdhIGFycmF5ID0gXCJjYW1sX21ha2VfdmVjdFwiXG5leHRlcm5hbCBjcmVhdGU6IGludCAtPiAnYSAtPiAnYSBhcnJheSA9IFwiY2FtbF9tYWtlX3ZlY3RcIlxuZXh0ZXJuYWwgdW5zYWZlX3N1YiA6ICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfc3ViXCJcbmV4dGVybmFsIGFwcGVuZF9wcmltIDogJ2EgYXJyYXkgLT4gJ2EgYXJyYXkgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfYXBwZW5kXCJcbmV4dGVybmFsIGNvbmNhdCA6ICdhIGFycmF5IGxpc3QgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfY29uY2F0XCJcbmV4dGVybmFsIHVuc2FmZV9ibGl0IDpcbiAgJ2EgYXJyYXkgLT4gaW50IC0+ICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9hcnJheV9ibGl0XCJcbmV4dGVybmFsIHVuc2FmZV9maWxsIDpcbiAgJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2FycmF5X2ZpbGxcIlxuZXh0ZXJuYWwgY3JlYXRlX2Zsb2F0OiBpbnQgLT4gZmxvYXQgYXJyYXkgPSBcImNhbWxfbWFrZV9mbG9hdF92ZWN0XCJcbmxldCBtYWtlX2Zsb2F0ID0gY3JlYXRlX2Zsb2F0XG5cbm1vZHVsZSBGbG9hdGFycmF5ID0gc3RydWN0XG4gIGV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiBmbG9hdGFycmF5ID0gXCJjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlXCJcbiAgZXh0ZXJuYWwgbGVuZ3RoIDogZmxvYXRhcnJheSAtPiBpbnQgPSBcIiVmbG9hdGFycmF5X2xlbmd0aFwiXG4gIGV4dGVybmFsIGdldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRhcnJheV9zYWZlX2dldFwiXG4gIGV4dGVybmFsIHNldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0IC0+IHVuaXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfc2V0XCJcbiAgZXh0ZXJuYWwgdW5zYWZlX2dldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRhcnJheV91bnNhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgdW5zYWZlX3NldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0IC0+IHVuaXRcbiAgICAgID0gXCIlZmxvYXRhcnJheV91bnNhZmVfc2V0XCJcbmVuZFxuXG5sZXQgaW5pdCBsIGYgPVxuICBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZVxuICBpZiBsIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuaW5pdFwiXG4gICgqIFNlZSAjNjU3NS4gV2UgY291bGQgYWxzbyBjaGVjayBmb3IgbWF4aW11bSBhcnJheSBzaXplLCBidXQgdGhpcyBkZXBlbmRzXG4gICAgIG9uIHdoZXRoZXIgd2UgY3JlYXRlIGEgZmxvYXQgYXJyYXkgb3IgYSByZWd1bGFyIG9uZS4uLiAqKVxuICBlbHNlXG4gICBsZXQgcmVzID0gY3JlYXRlIGwgKGYgMCkgaW5cbiAgIGZvciBpID0gMSB0byBwcmVkIGwgZG9cbiAgICAgdW5zYWZlX3NldCByZXMgaSAoZiBpKVxuICAgZG9uZTtcbiAgIHJlc1xuXG5sZXQgbWFrZV9tYXRyaXggc3ggc3kgaW5pdCA9XG4gIGxldCByZXMgPSBjcmVhdGUgc3ggW3x8XSBpblxuICBmb3IgeCA9IDAgdG8gcHJlZCBzeCBkb1xuICAgIHVuc2FmZV9zZXQgcmVzIHggKGNyZWF0ZSBzeSBpbml0KVxuICBkb25lO1xuICByZXNcblxubGV0IGNyZWF0ZV9tYXRyaXggPSBtYWtlX21hdHJpeFxuXG5sZXQgY29weSBhID1cbiAgbGV0IGwgPSBsZW5ndGggYSBpbiBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZSB1bnNhZmVfc3ViIGEgMCBsXG5cbmxldCBhcHBlbmQgYTEgYTIgPVxuICBsZXQgbDEgPSBsZW5ndGggYTEgaW5cbiAgaWYgbDEgPSAwIHRoZW4gY29weSBhMlxuICBlbHNlIGlmIGxlbmd0aCBhMiA9IDAgdGhlbiB1bnNhZmVfc3ViIGExIDAgbDFcbiAgZWxzZSBhcHBlbmRfcHJpbSBhMSBhMlxuXG5sZXQgc3ViIGEgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuc3ViXCJcbiAgZWxzZSB1bnNhZmVfc3ViIGEgb2ZzIGxlblxuXG5sZXQgZmlsbCBhIG9mcyBsZW4gdiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgYSBvZnMgbGVuIHZcblxubGV0IGJsaXQgYTEgb2ZzMSBhMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBhMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggYTIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IGExIG9mczEgYTIgb2ZzMiBsZW5cblxubGV0IGl0ZXIgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBpdGVyMiBmIGEgYiA9XG4gIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIkFycmF5Lml0ZXIyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gIGVsc2VcbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpIGRvbmVcblxubGV0IG1hcCBmIGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCAoZih1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgZm9yIGkgPSAxIHRvIGwgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHIgaSAoZih1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgbWFwMiBmIGEgYiA9XG4gIGxldCBsYSA9IGxlbmd0aCBhIGluXG4gIGxldCBsYiA9IGxlbmd0aCBiIGluXG4gIGlmIGxhIDw+IGxiIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIkFycmF5Lm1hcDI6IGFycmF5cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCJcbiAgZWxzZSBiZWdpblxuICAgIGlmIGxhID0gMCB0aGVuIFt8fF0gZWxzZSBiZWdpblxuICAgICAgbGV0IHIgPSBjcmVhdGUgbGEgKGYgKHVuc2FmZV9nZXQgYSAwKSAodW5zYWZlX2dldCBiIDApKSBpblxuICAgICAgZm9yIGkgPSAxIHRvIGxhIC0gMSBkb1xuICAgICAgICB1bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBhIGkpICh1bnNhZmVfZ2V0IGIgaSkpXG4gICAgICBkb25lO1xuICAgICAgclxuICAgIGVuZFxuICBlbmRcblxubGV0IGl0ZXJpIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgbWFwaSBmIGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCAoZiAwICh1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgZm9yIGkgPSAxIHRvIGwgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHIgaSAoZiBpICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgdG9fbGlzdCBhID1cbiAgbGV0IHJlYyB0b2xpc3QgaSByZXMgPVxuICAgIGlmIGkgPCAwIHRoZW4gcmVzIGVsc2UgdG9saXN0IChpIC0gMSkgKHVuc2FmZV9nZXQgYSBpIDo6IHJlcykgaW5cbiAgdG9saXN0IChsZW5ndGggYSAtIDEpIFtdXG5cbigqIENhbm5vdCB1c2UgTGlzdC5sZW5ndGggaGVyZSBiZWNhdXNlIHRoZSBMaXN0IG1vZHVsZSBkZXBlbmRzIG9uIEFycmF5LiAqKVxubGV0IHJlYyBsaXN0X2xlbmd0aCBhY2N1ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBhY2N1XG4gIHwgXzo6dCAtPiBsaXN0X2xlbmd0aCAoc3VjYyBhY2N1KSB0XG5cbmxldCBvZl9saXN0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbfHxdXG4gIHwgaGQ6OnRsIGFzIGwgLT5cbiAgICAgIGxldCBhID0gY3JlYXRlIChsaXN0X2xlbmd0aCAwIGwpIGhkIGluXG4gICAgICBsZXQgcmVjIGZpbGwgaSA9IGZ1bmN0aW9uXG4gICAgICAgICAgW10gLT4gYVxuICAgICAgICB8IGhkOjp0bCAtPiB1bnNhZmVfc2V0IGEgaSBoZDsgZmlsbCAoaSsxKSB0bCBpblxuICAgICAgZmlsbCAxIHRsXG5cbmxldCBmb2xkX2xlZnQgZiB4IGEgPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICByIDo9IGYgIXIgKHVuc2FmZV9nZXQgYSBpKVxuICBkb25lO1xuICAhclxuXG5sZXQgZm9sZF9sZWZ0X21hcCBmIGFjYyBpbnB1dF9hcnJheSA9XG4gIGxldCBsZW4gPSBsZW5ndGggaW5wdXRfYXJyYXkgaW5cbiAgaWYgbGVuID0gMCB0aGVuIChhY2MsIFt8fF0pIGVsc2UgYmVnaW5cbiAgICBsZXQgYWNjLCBlbHQgPSBmIGFjYyAodW5zYWZlX2dldCBpbnB1dF9hcnJheSAwKSBpblxuICAgIGxldCBvdXRwdXRfYXJyYXkgPSBjcmVhdGUgbGVuIGVsdCBpblxuICAgIGxldCBhY2MgPSByZWYgYWNjIGluXG4gICAgZm9yIGkgPSAxIHRvIGxlbiAtIDEgZG9cbiAgICAgIGxldCBhY2MnLCBlbHQgPSBmICFhY2MgKHVuc2FmZV9nZXQgaW5wdXRfYXJyYXkgaSkgaW5cbiAgICAgIGFjYyA6PSBhY2MnO1xuICAgICAgdW5zYWZlX3NldCBvdXRwdXRfYXJyYXkgaSBlbHQ7XG4gICAgZG9uZTtcbiAgICAhYWNjLCBvdXRwdXRfYXJyYXlcbiAgZW5kXG5cbmxldCBmb2xkX3JpZ2h0IGYgYSB4ID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IGxlbmd0aCBhIC0gMSBkb3dudG8gMCBkb1xuICAgIHIgOj0gZiAodW5zYWZlX2dldCBhIGkpICFyXG4gIGRvbmU7XG4gICFyXG5cbmxldCBleGlzdHMgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBhIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IGZvcl9hbGwgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiB0cnVlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiBsb29wIChzdWNjIGkpXG4gICAgZWxzZSBmYWxzZSBpblxuICBsb29wIDBcblxubGV0IGZvcl9hbGwyIHAgbDEgbDIgPVxuICBsZXQgbjEgPSBsZW5ndGggbDFcbiAgYW5kIG4yID0gbGVuZ3RoIGwyIGluXG4gIGlmIG4xIDw+IG4yIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5mb3JfYWxsMlwiXG4gIGVsc2UgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuMSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgbDEgaSkgKHVuc2FmZV9nZXQgbDIgaSkgdGhlbiBsb29wIChzdWNjIGkpXG4gICAgZWxzZSBmYWxzZSBpblxuICBsb29wIDBcblxubGV0IGV4aXN0czIgcCBsMSBsMiA9XG4gIGxldCBuMSA9IGxlbmd0aCBsMVxuICBhbmQgbjIgPSBsZW5ndGggbDIgaW5cbiAgaWYgbjEgPD4gbjIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmV4aXN0czJcIlxuICBlbHNlIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbjEgdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBsMSBpKSAodW5zYWZlX2dldCBsMiBpKSB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmxldCBtZW0geCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgY29tcGFyZSAodW5zYWZlX2dldCBhIGkpIHggPSAwIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IG1lbXEgeCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgeCA9PSAodW5zYWZlX2dldCBhIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IGZpbmRfb3B0IHAgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gTm9uZVxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgIGlmIHAgeCB0aGVuIFNvbWUgeFxuICAgICAgZWxzZSBsb29wIChzdWNjIGkpXG4gIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9tYXAgZiBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggZiAodW5zYWZlX2dldCBhIGkpIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBsb29wIChzdWNjIGkpXG4gICAgICB8IFNvbWUgXyBhcyByIC0+IHJcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBzcGxpdCB4ID1cbiAgaWYgeCA9IFt8fF0gdGhlbiBbfHxdLCBbfHxdXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgYTAsIGIwID0gdW5zYWZlX2dldCB4IDAgaW5cbiAgICBsZXQgbiA9IGxlbmd0aCB4IGluXG4gICAgbGV0IGEgPSBjcmVhdGUgbiBhMCBpblxuICAgIGxldCBiID0gY3JlYXRlIG4gYjAgaW5cbiAgICBmb3IgaSA9IDEgdG8gbiAtIDEgZG9cbiAgICAgIGxldCBhaSwgYmkgPSB1bnNhZmVfZ2V0IHggaSBpblxuICAgICAgdW5zYWZlX3NldCBhIGkgYWk7XG4gICAgICB1bnNhZmVfc2V0IGIgaSBiaVxuICAgIGRvbmU7XG4gICAgYSwgYlxuICBlbmRcblxubGV0IGNvbWJpbmUgYSBiID1cbiAgbGV0IG5hID0gbGVuZ3RoIGEgaW5cbiAgbGV0IG5iID0gbGVuZ3RoIGIgaW5cbiAgaWYgbmEgPD4gbmIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmNvbWJpbmVcIjtcbiAgaWYgbmEgPSAwIHRoZW4gW3x8XVxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHggPSBjcmVhdGUgbmEgKHVuc2FmZV9nZXQgYSAwLCB1bnNhZmVfZ2V0IGIgMCkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbmEgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHggaSAodW5zYWZlX2dldCBhIGksIHVuc2FmZV9nZXQgYiBpKVxuICAgIGRvbmU7XG4gICAgeFxuICBlbmRcblxuZXhjZXB0aW9uIEJvdHRvbSBvZiBpbnRcbmxldCBzb3J0IGNtcCBhID1cbiAgbGV0IG1heHNvbiBsIGkgPVxuICAgIGxldCBpMzEgPSBpK2kraSsxIGluXG4gICAgbGV0IHggPSByZWYgaTMxIGluXG4gICAgaWYgaTMxKzIgPCBsIHRoZW4gYmVnaW5cbiAgICAgIGlmIGNtcCAoZ2V0IGEgaTMxKSAoZ2V0IGEgKGkzMSsxKSkgPCAwIHRoZW4geCA6PSBpMzErMTtcbiAgICAgIGlmIGNtcCAoZ2V0IGEgIXgpIChnZXQgYSAoaTMxKzIpKSA8IDAgdGhlbiB4IDo9IGkzMSsyO1xuICAgICAgIXhcbiAgICBlbmQgZWxzZVxuICAgICAgaWYgaTMxKzEgPCBsICYmIGNtcCAoZ2V0IGEgaTMxKSAoZ2V0IGEgKGkzMSsxKSkgPCAwXG4gICAgICB0aGVuIGkzMSsxXG4gICAgICBlbHNlIGlmIGkzMSA8IGwgdGhlbiBpMzEgZWxzZSByYWlzZSAoQm90dG9tIGkpXG4gIGluXG4gIGxldCByZWMgdHJpY2tsZWRvd24gbCBpIGUgPVxuICAgIGxldCBqID0gbWF4c29uIGwgaSBpblxuICAgIGlmIGNtcCAoZ2V0IGEgaikgZSA+IDAgdGhlbiBiZWdpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICB0cmlja2xlZG93biBsIGogZTtcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgc2V0IGEgaSBlO1xuICAgIGVuZDtcbiAgaW5cbiAgbGV0IHRyaWNrbGUgbCBpIGUgPSB0cnkgdHJpY2tsZWRvd24gbCBpIGUgd2l0aCBCb3R0b20gaSAtPiBzZXQgYSBpIGUgaW5cbiAgbGV0IHJlYyBidWJibGVkb3duIGwgaSA9XG4gICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgYnViYmxlZG93biBsIGpcbiAgaW5cbiAgbGV0IGJ1YmJsZSBsIGkgPSB0cnkgYnViYmxlZG93biBsIGkgd2l0aCBCb3R0b20gaSAtPiBpIGluXG4gIGxldCByZWMgdHJpY2tsZXVwIGkgZSA9XG4gICAgbGV0IGZhdGhlciA9IChpIC0gMSkgLyAzIGluXG4gICAgYXNzZXJ0IChpIDw+IGZhdGhlcik7XG4gICAgaWYgY21wIChnZXQgYSBmYXRoZXIpIGUgPCAwIHRoZW4gYmVnaW5cbiAgICAgIHNldCBhIGkgKGdldCBhIGZhdGhlcik7XG4gICAgICBpZiBmYXRoZXIgPiAwIHRoZW4gdHJpY2tsZXVwIGZhdGhlciBlIGVsc2Ugc2V0IGEgMCBlO1xuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBzZXQgYSBpIGU7XG4gICAgZW5kO1xuICBpblxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGZvciBpID0gKGwgKyAxKSAvIDMgLSAxIGRvd250byAwIGRvIHRyaWNrbGUgbCBpIChnZXQgYSBpKTsgZG9uZTtcbiAgZm9yIGkgPSBsIC0gMSBkb3dudG8gMiBkb1xuICAgIGxldCBlID0gKGdldCBhIGkpIGluXG4gICAgc2V0IGEgaSAoZ2V0IGEgMCk7XG4gICAgdHJpY2tsZXVwIChidWJibGUgaSAwKSBlO1xuICBkb25lO1xuICBpZiBsID4gMSB0aGVuIChsZXQgZSA9IChnZXQgYSAxKSBpbiBzZXQgYSAxIChnZXQgYSAwKTsgc2V0IGEgMCBlKVxuXG5cbmxldCBjdXRvZmYgPSA1XG5sZXQgc3RhYmxlX3NvcnQgY21wIGEgPVxuICBsZXQgbWVyZ2Ugc3JjMW9mcyBzcmMxbGVuIHNyYzIgc3JjMm9mcyBzcmMybGVuIGRzdCBkc3RvZnMgPVxuICAgIGxldCBzcmMxciA9IHNyYzFvZnMgKyBzcmMxbGVuIGFuZCBzcmMyciA9IHNyYzJvZnMgKyBzcmMybGVuIGluXG4gICAgbGV0IHJlYyBsb29wIGkxIHMxIGkyIHMyIGQgPVxuICAgICAgaWYgY21wIHMxIHMyIDw9IDAgdGhlbiBiZWdpblxuICAgICAgICBzZXQgZHN0IGQgczE7XG4gICAgICAgIGxldCBpMSA9IGkxICsgMSBpblxuICAgICAgICBpZiBpMSA8IHNyYzFyIHRoZW5cbiAgICAgICAgICBsb29wIGkxIChnZXQgYSBpMSkgaTIgczIgKGQgKyAxKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYmxpdCBzcmMyIGkyIGRzdCAoZCArIDEpIChzcmMyciAtIGkyKVxuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgc2V0IGRzdCBkIHMyO1xuICAgICAgICBsZXQgaTIgPSBpMiArIDEgaW5cbiAgICAgICAgaWYgaTIgPCBzcmMyciB0aGVuXG4gICAgICAgICAgbG9vcCBpMSBzMSBpMiAoZ2V0IHNyYzIgaTIpIChkICsgMSlcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGJsaXQgYSBpMSBkc3QgKGQgKyAxKSAoc3JjMXIgLSBpMSlcbiAgICAgIGVuZFxuICAgIGluIGxvb3Agc3JjMW9mcyAoZ2V0IGEgc3JjMW9mcykgc3JjMm9mcyAoZ2V0IHNyYzIgc3JjMm9mcykgZHN0b2ZzO1xuICBpblxuICBsZXQgaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgIGZvciBpID0gMCB0byBsZW4gLSAxIGRvXG4gICAgICBsZXQgZSA9IChnZXQgYSAoc3Jjb2ZzICsgaSkpIGluXG4gICAgICBsZXQgaiA9IHJlZiAoZHN0b2ZzICsgaSAtIDEpIGluXG4gICAgICB3aGlsZSAoIWogPj0gZHN0b2ZzICYmIGNtcCAoZ2V0IGRzdCAhaikgZSA+IDApIGRvXG4gICAgICAgIHNldCBkc3QgKCFqICsgMSkgKGdldCBkc3QgIWopO1xuICAgICAgICBkZWNyIGo7XG4gICAgICBkb25lO1xuICAgICAgc2V0IGRzdCAoIWogKyAxKSBlO1xuICAgIGRvbmU7XG4gIGluXG4gIGxldCByZWMgc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiA9XG4gICAgaWYgbGVuIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuIGVsc2UgYmVnaW5cbiAgICAgIGxldCBsMSA9IGxlbiAvIDIgaW5cbiAgICAgIGxldCBsMiA9IGxlbiAtIGwxIGluXG4gICAgICBzb3J0dG8gKHNyY29mcyArIGwxKSBkc3QgKGRzdG9mcyArIGwxKSBsMjtcbiAgICAgIHNvcnR0byBzcmNvZnMgYSAoc3Jjb2ZzICsgbDIpIGwxO1xuICAgICAgbWVyZ2UgKHNyY29mcyArIGwyKSBsMSBkc3QgKGRzdG9mcyArIGwxKSBsMiBkc3QgZHN0b2ZzO1xuICAgIGVuZDtcbiAgaW5cbiAgbGV0IGwgPSBsZW5ndGggYSBpblxuICBpZiBsIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gMCBhIDAgbCBlbHNlIGJlZ2luXG4gICAgbGV0IGwxID0gbCAvIDIgaW5cbiAgICBsZXQgbDIgPSBsIC0gbDEgaW5cbiAgICBsZXQgdCA9IG1ha2UgbDIgKGdldCBhIDApIGluXG4gICAgc29ydHRvIGwxIHQgMCBsMjtcbiAgICBzb3J0dG8gMCBhIGwyIGwxO1xuICAgIG1lcmdlIGwyIGwxIHQgMCBsMiBhIDA7XG4gIGVuZFxuXG5cbmxldCBmYXN0X3NvcnQgPSBzdGFibGVfc29ydFxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICB0aGVuXG4gICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICBTZXEuQ29ucyAoeCwgYXV4IChpKzEpKVxuICAgIGVsc2UgU2VxLk5pbFxuICBpblxuICBhdXggMFxuXG5sZXQgdG9fc2VxaSBhID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA8IGxlbmd0aCBhXG4gICAgdGhlblxuICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gICAgZWxzZSBTZXEuTmlsXG4gIGluXG4gIGF1eCAwXG5cbmxldCBvZl9yZXZfbGlzdCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW3x8XVxuICB8IGhkOjp0bCBhcyBsIC0+XG4gICAgICBsZXQgbGVuID0gbGlzdF9sZW5ndGggMCBsIGluXG4gICAgICBsZXQgYSA9IGNyZWF0ZSBsZW4gaGQgaW5cbiAgICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgICBbXSAtPiBhXG4gICAgICAgIHwgaGQ6OnRsIC0+IHVuc2FmZV9zZXQgYSBpIGhkOyBmaWxsIChpLTEpIHRsXG4gICAgICBpblxuICAgICAgZmlsbCAobGVuLTIpIHRsXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCBsID0gU2VxLmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+IHg6OmFjYykgW10gaSBpblxuICBvZl9yZXZfbGlzdCBsXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFNldHMgb3ZlciBvcmRlcmVkIHR5cGVzICopXG5cbm1vZHVsZSB0eXBlIE9yZGVyZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGNvbXBhcmU6IHQgLT4gdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFMgPVxuICBzaWdcbiAgICB0eXBlIGVsdFxuICAgIHR5cGUgdFxuICAgIHZhbCBlbXB0eTogdFxuICAgIHZhbCBpc19lbXB0eTogdCAtPiBib29sXG4gICAgdmFsIG1lbTogZWx0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBhZGQ6IGVsdCAtPiB0IC0+IHRcbiAgICB2YWwgc2luZ2xldG9uOiBlbHQgLT4gdFxuICAgIHZhbCByZW1vdmU6IGVsdCAtPiB0IC0+IHRcbiAgICB2YWwgdW5pb246IHQgLT4gdCAtPiB0XG4gICAgdmFsIGludGVyOiB0IC0+IHQgLT4gdFxuICAgIHZhbCBkaXNqb2ludDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZGlmZjogdCAtPiB0IC0+IHRcbiAgICB2YWwgY29tcGFyZTogdCAtPiB0IC0+IGludFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgc3Vic2V0OiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBpdGVyOiAoZWx0IC0+IHVuaXQpIC0+IHQgLT4gdW5pdFxuICAgIHZhbCBtYXA6IChlbHQgLT4gZWx0KSAtPiB0IC0+IHRcbiAgICB2YWwgZm9sZDogKGVsdCAtPiAnYSAtPiAnYSkgLT4gdCAtPiAnYSAtPiAnYVxuICAgIHZhbCBmb3JfYWxsOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gYm9vbFxuICAgIHZhbCBleGlzdHM6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBib29sXG4gICAgdmFsIGZpbHRlcjogKGVsdCAtPiBib29sKSAtPiB0IC0+IHRcbiAgICB2YWwgZmlsdGVyX21hcDogKGVsdCAtPiBlbHQgb3B0aW9uKSAtPiB0IC0+IHRcbiAgICB2YWwgcGFydGl0aW9uOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gdCAqIHRcbiAgICB2YWwgY2FyZGluYWw6IHQgLT4gaW50XG4gICAgdmFsIGVsZW1lbnRzOiB0IC0+IGVsdCBsaXN0XG4gICAgdmFsIG1pbl9lbHQ6IHQgLT4gZWx0XG4gICAgdmFsIG1pbl9lbHRfb3B0OiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgbWF4X2VsdDogdCAtPiBlbHRcbiAgICB2YWwgbWF4X2VsdF9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBjaG9vc2U6IHQgLT4gZWx0XG4gICAgdmFsIGNob29zZV9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBzcGxpdDogZWx0IC0+IHQgLT4gdCAqIGJvb2wgKiB0XG4gICAgdmFsIGZpbmQ6IGVsdCAtPiB0IC0+IGVsdFxuICAgIHZhbCBmaW5kX29wdDogZWx0IC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2ZpcnN0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0XG4gICAgdmFsIGZpbmRfZmlyc3Rfb3B0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2xhc3Q6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgICB2YWwgZmluZF9sYXN0X29wdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgb2ZfbGlzdDogZWx0IGxpc3QgLT4gdFxuICAgIHZhbCB0b19zZXFfZnJvbSA6IGVsdCAtPiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCB0b19zZXEgOiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCB0b19yZXZfc2VxIDogdCAtPiBlbHQgU2VxLnRcbiAgICB2YWwgYWRkX3NlcSA6IGVsdCBTZXEudCAtPiB0IC0+IHRcbiAgICB2YWwgb2Zfc2VxIDogZWx0IFNlcS50IC0+IHRcbiAgZW5kXG5cbm1vZHVsZSBNYWtlKE9yZDogT3JkZXJlZFR5cGUpID1cbiAgc3RydWN0XG4gICAgdHlwZSBlbHQgPSBPcmQudFxuICAgIHR5cGUgdCA9IEVtcHR5IHwgTm9kZSBvZiB7bDp0OyB2OmVsdDsgcjp0OyBoOmludH1cblxuICAgICgqIFNldHMgYXJlIHJlcHJlc2VudGVkIGJ5IGJhbGFuY2VkIGJpbmFyeSB0cmVlcyAodGhlIGhlaWdodHMgb2YgdGhlXG4gICAgICAgY2hpbGRyZW4gZGlmZmVyIGJ5IGF0IG1vc3QgMiAqKVxuXG4gICAgbGV0IGhlaWdodCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZSB7aH0gLT4gaFxuXG4gICAgKCogQ3JlYXRlcyBhIG5ldyBub2RlIHdpdGggbGVmdCBzb24gbCwgdmFsdWUgdiBhbmQgcmlnaHQgc29uIHIuXG4gICAgICAgV2UgbXVzdCBoYXZlIGFsbCBlbGVtZW50cyBvZiBsIDwgdiA8IGFsbCBlbGVtZW50cyBvZiByLlxuICAgICAgIGwgYW5kIHIgbXVzdCBiZSBiYWxhbmNlZCBhbmQgfCBoZWlnaHQgbCAtIGhlaWdodCByIHwgPD0gMi5cbiAgICAgICBJbmxpbmUgZXhwYW5zaW9uIG9mIGhlaWdodCBmb3IgYmV0dGVyIHNwZWVkLiAqKVxuXG4gICAgbGV0IGNyZWF0ZSBsIHYgciA9XG4gICAgICBsZXQgaGwgPSBtYXRjaCBsIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGxldCBociA9IG1hdGNoIHIgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgTm9kZXtsOyB2OyByOyBoPShpZiBobCA+PSBociB0aGVuIGhsICsgMSBlbHNlIGhyICsgMSl9XG5cbiAgICAoKiBTYW1lIGFzIGNyZWF0ZSwgYnV0IHBlcmZvcm1zIG9uZSBzdGVwIG9mIHJlYmFsYW5jaW5nIGlmIG5lY2Vzc2FyeS5cbiAgICAgICBBc3N1bWVzIGwgYW5kIHIgYmFsYW5jZWQgYW5kIHwgaGVpZ2h0IGwgLSBoZWlnaHQgciB8IDw9IDMuXG4gICAgICAgSW5saW5lIGV4cGFuc2lvbiBvZiBjcmVhdGUgZm9yIGJldHRlciBzcGVlZCBpbiB0aGUgbW9zdCBmcmVxdWVudCBjYXNlXG4gICAgICAgd2hlcmUgbm8gcmViYWxhbmNpbmcgaXMgcmVxdWlyZWQuICopXG5cbiAgICBsZXQgYmFsIGwgdiByID1cbiAgICAgIGxldCBobCA9IG1hdGNoIGwgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgbGV0IGhyID0gbWF0Y2ggciB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBpZiBobCA+IGhyICsgMiB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LmJhbFwiXG4gICAgICAgIHwgTm9kZXtsPWxsOyB2PWx2OyByPWxyfSAtPlxuICAgICAgICAgICAgaWYgaGVpZ2h0IGxsID49IGhlaWdodCBsciB0aGVuXG4gICAgICAgICAgICAgIGNyZWF0ZSBsbCBsdiAoY3JlYXRlIGxyIHYgcilcbiAgICAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbWF0Y2ggbHIgd2l0aFxuICAgICAgICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LmJhbFwiXG4gICAgICAgICAgICAgIHwgTm9kZXtsPWxybDsgdj1scnY7IHI9bHJyfS0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsbCBsdiBscmwpIGxydiAoY3JlYXRlIGxyciB2IHIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlIGlmIGhyID4gaGwgKyAyIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggciB3aXRoXG4gICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgfCBOb2Rle2w9cmw7IHY9cnY7IHI9cnJ9IC0+XG4gICAgICAgICAgICBpZiBoZWlnaHQgcnIgPj0gaGVpZ2h0IHJsIHRoZW5cbiAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbCB2IHJsKSBydiByclxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBybCB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9cmxsOyB2PXJsdjsgcj1ybHJ9IC0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsIHYgcmxsKSBybHYgKGNyZWF0ZSBybHIgcnYgcnIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlXG4gICAgICAgIE5vZGV7bDsgdjsgcjsgaD0oaWYgaGwgPj0gaHIgdGhlbiBobCArIDEgZWxzZSBociArIDEpfVxuXG4gICAgKCogSW5zZXJ0aW9uIG9mIG9uZSBlbGVtZW50ICopXG5cbiAgICBsZXQgcmVjIGFkZCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9kZXtsPUVtcHR5OyB2PXg7IHI9RW1wdHk7IGg9MX1cbiAgICAgIHwgTm9kZXtsOyB2OyByfSBhcyB0IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIHQgZWxzZVxuICAgICAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBsbCA9IGFkZCB4IGwgaW5cbiAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiB0IGVsc2UgYmFsIGxsIHYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCByciA9IGFkZCB4IHIgaW5cbiAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiB0IGVsc2UgYmFsIGwgdiByclxuXG4gICAgbGV0IHNpbmdsZXRvbiB4ID0gTm9kZXtsPUVtcHR5OyB2PXg7IHI9RW1wdHk7IGg9MX1cblxuICAgICgqIEJld2FyZTogdGhvc2UgdHdvIGZ1bmN0aW9ucyBhc3N1bWUgdGhhdCB0aGUgYWRkZWQgdiBpcyAqc3RyaWN0bHkqXG4gICAgICAgc21hbGxlciAob3IgYmlnZ2VyKSB0aGFuIGFsbCB0aGUgcHJlc2VudCBlbGVtZW50cyBpbiB0aGUgdHJlZTsgaXRcbiAgICAgICBkb2VzIG5vdCB0ZXN0IGZvciBlcXVhbGl0eSB3aXRoIHRoZSBjdXJyZW50IG1pbiAob3IgbWF4KSBlbGVtZW50LlxuICAgICAgIEluZGVlZCwgdGhleSBhcmUgb25seSB1c2VkIGR1cmluZyB0aGUgXCJqb2luXCIgb3BlcmF0aW9uIHdoaWNoXG4gICAgICAgcmVzcGVjdHMgdGhpcyBwcmVjb25kaXRpb24uXG4gICAgKilcblxuICAgIGxldCByZWMgYWRkX21pbl9lbGVtZW50IHggPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBzaW5nbGV0b24geFxuICAgICAgfCBOb2RlIHtsOyB2OyByfSAtPlxuICAgICAgICBiYWwgKGFkZF9taW5fZWxlbWVudCB4IGwpIHYgclxuXG4gICAgbGV0IHJlYyBhZGRfbWF4X2VsZW1lbnQgeCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IHNpbmdsZXRvbiB4XG4gICAgICB8IE5vZGUge2w7IHY7IHJ9IC0+XG4gICAgICAgIGJhbCBsIHYgKGFkZF9tYXhfZWxlbWVudCB4IHIpXG5cbiAgICAoKiBTYW1lIGFzIGNyZWF0ZSBhbmQgYmFsLCBidXQgbm8gYXNzdW1wdGlvbnMgYXJlIG1hZGUgb24gdGhlXG4gICAgICAgcmVsYXRpdmUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IHJlYyBqb2luIGwgdiByID1cbiAgICAgIG1hdGNoIChsLCByKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgLT4gYWRkX21pbl9lbGVtZW50IHYgclxuICAgICAgfCAoXywgRW1wdHkpIC0+IGFkZF9tYXhfZWxlbWVudCB2IGxcbiAgICAgIHwgKE5vZGV7bD1sbDsgdj1sdjsgcj1scjsgaD1saH0sIE5vZGV7bD1ybDsgdj1ydjsgcj1ycjsgaD1yaH0pIC0+XG4gICAgICAgICAgaWYgbGggPiByaCArIDIgdGhlbiBiYWwgbGwgbHYgKGpvaW4gbHIgdiByKSBlbHNlXG4gICAgICAgICAgaWYgcmggPiBsaCArIDIgdGhlbiBiYWwgKGpvaW4gbCB2IHJsKSBydiByciBlbHNlXG4gICAgICAgICAgY3JlYXRlIGwgdiByXG5cbiAgICAoKiBTbWFsbGVzdCBhbmQgZ3JlYXRlc3QgZWxlbWVudCBvZiBhIHNldCAqKVxuXG4gICAgbGV0IHJlYyBtaW5fZWx0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bD1FbXB0eTsgdn0gLT4gdlxuICAgICAgfCBOb2Rle2x9IC0+IG1pbl9lbHQgbFxuXG4gICAgbGV0IHJlYyBtaW5fZWx0X29wdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZXtsPUVtcHR5OyB2fSAtPiBTb21lIHZcbiAgICAgIHwgTm9kZXtsfSAtPiBtaW5fZWx0X29wdCBsXG5cbiAgICBsZXQgcmVjIG1heF9lbHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXt2OyByPUVtcHR5fSAtPiB2XG4gICAgICB8IE5vZGV7cn0gLT4gbWF4X2VsdCByXG5cbiAgICBsZXQgcmVjIG1heF9lbHRfb3B0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2Rle3Y7IHI9RW1wdHl9IC0+IFNvbWUgdlxuICAgICAgfCBOb2Rle3J9IC0+IG1heF9lbHRfb3B0IHJcblxuICAgICgqIFJlbW92ZSB0aGUgc21hbGxlc3QgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2V0ICopXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9taW5fZWx0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQucmVtb3ZlX21pbl9lbHRcIlxuICAgICAgfCBOb2Rle2w9RW1wdHk7IHJ9IC0+IHJcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBiYWwgKHJlbW92ZV9taW5fZWx0IGwpIHYgclxuXG4gICAgKCogTWVyZ2UgdHdvIHRyZWVzIGwgYW5kIHIgaW50byBvbmUuXG4gICAgICAgQWxsIGVsZW1lbnRzIG9mIGwgbXVzdCBwcmVjZWRlIHRoZSBlbGVtZW50cyBvZiByLlxuICAgICAgIEFzc3VtZSB8IGhlaWdodCBsIC0gaGVpZ2h0IHIgfCA8PSAyLiAqKVxuXG4gICAgbGV0IG1lcmdlIHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT4gYmFsIHQxIChtaW5fZWx0IHQyKSAocmVtb3ZlX21pbl9lbHQgdDIpXG5cbiAgICAoKiBNZXJnZSB0d28gdHJlZXMgbCBhbmQgciBpbnRvIG9uZS5cbiAgICAgICBBbGwgZWxlbWVudHMgb2YgbCBtdXN0IHByZWNlZGUgdGhlIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgTm8gYXNzdW1wdGlvbiBvbiB0aGUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IGNvbmNhdCB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+IGpvaW4gdDEgKG1pbl9lbHQgdDIpIChyZW1vdmVfbWluX2VsdCB0MilcblxuICAgICgqIFNwbGl0dGluZy4gIHNwbGl0IHggcyByZXR1cm5zIGEgdHJpcGxlIChsLCBwcmVzZW50LCByKSB3aGVyZVxuICAgICAgICAtIGwgaXMgdGhlIHNldCBvZiBlbGVtZW50cyBvZiBzIHRoYXQgYXJlIDwgeFxuICAgICAgICAtIHIgaXMgdGhlIHNldCBvZiBlbGVtZW50cyBvZiBzIHRoYXQgYXJlID4geFxuICAgICAgICAtIHByZXNlbnQgaXMgZmFsc2UgaWYgcyBjb250YWlucyBubyBlbGVtZW50IGVxdWFsIHRvIHgsXG4gICAgICAgICAgb3IgdHJ1ZSBpZiBzIGNvbnRhaW5zIGFuIGVsZW1lbnQgZXF1YWwgdG8geC4gKilcblxuICAgIGxldCByZWMgc3BsaXQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKEVtcHR5LCBmYWxzZSwgRW1wdHkpXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gKGwsIHRydWUsIHIpXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgKGxsLCBwcmVzLCBybCkgPSBzcGxpdCB4IGwgaW4gKGxsLCBwcmVzLCBqb2luIHJsIHYgcilcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgKGxyLCBwcmVzLCBycikgPSBzcGxpdCB4IHIgaW4gKGpvaW4gbCB2IGxyLCBwcmVzLCBycilcblxuICAgICgqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBzZXQgb3BlcmF0aW9ucyAqKVxuXG4gICAgbGV0IGVtcHR5ID0gRW1wdHlcblxuICAgIGxldCBpc19lbXB0eSA9IGZ1bmN0aW9uIEVtcHR5IC0+IHRydWUgfCBfIC0+IGZhbHNlXG5cbiAgICBsZXQgcmVjIG1lbSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gZmFsc2VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgYyA9IDAgfHwgbWVtIHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIHJlbW92ZSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGV7bDsgdjsgcn0gYXMgdCkgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gbWVyZ2UgbCByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgICBsZXQgbGwgPSByZW1vdmUgeCBsIGluXG4gICAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiB0XG4gICAgICAgICAgICAgIGVsc2UgYmFsIGxsIHYgclxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgcnIgPSByZW1vdmUgeCByIGluXG4gICAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiB0XG4gICAgICAgICAgICAgIGVsc2UgYmFsIGwgdiByclxuXG4gICAgbGV0IHJlYyB1bmlvbiBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdDIpIC0+IHQyXG4gICAgICB8ICh0MSwgRW1wdHkpIC0+IHQxXG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjE7IGg9aDF9LCBOb2Rle2w9bDI7IHY9djI7IHI9cjI7IGg9aDJ9KSAtPlxuICAgICAgICAgIGlmIGgxID49IGgyIHRoZW5cbiAgICAgICAgICAgIGlmIGgyID0gMSB0aGVuIGFkZCB2MiBzMSBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIGxldCAobDIsIF8sIHIyKSA9IHNwbGl0IHYxIHMyIGluXG4gICAgICAgICAgICAgIGpvaW4gKHVuaW9uIGwxIGwyKSB2MSAodW5pb24gcjEgcjIpXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBpZiBoMSA9IDEgdGhlbiBhZGQgdjEgczIgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBsZXQgKGwxLCBfLCByMSkgPSBzcGxpdCB2MiBzMSBpblxuICAgICAgICAgICAgICBqb2luICh1bmlvbiBsMSBsMikgdjIgKHVuaW9uIHIxIHIyKVxuICAgICAgICAgICAgZW5kXG5cbiAgICBsZXQgcmVjIGludGVyIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBFbXB0eVxuICAgICAgfCAoXywgRW1wdHkpIC0+IEVtcHR5XG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjF9LCB0MikgLT5cbiAgICAgICAgICBtYXRjaCBzcGxpdCB2MSB0MiB3aXRoXG4gICAgICAgICAgICAobDIsIGZhbHNlLCByMikgLT5cbiAgICAgICAgICAgICAgY29uY2F0IChpbnRlciBsMSBsMikgKGludGVyIHIxIHIyKVxuICAgICAgICAgIHwgKGwyLCB0cnVlLCByMikgLT5cbiAgICAgICAgICAgICAgam9pbiAoaW50ZXIgbDEgbDIpIHYxIChpbnRlciByMSByMilcblxuICAgICgqIFNhbWUgYXMgc3BsaXQsIGJ1dCBjb21wdXRlIHRoZSBsZWZ0IGFuZCByaWdodCBzdWJ0cmVlc1xuICAgICAgIG9ubHkgaWYgdGhlIHBpdm90IGVsZW1lbnQgaXMgbm90IGluIHRoZSBzZXQuICBUaGUgcmlnaHQgc3VidHJlZVxuICAgICAgIGlzIGNvbXB1dGVkIG9uIGRlbWFuZC4gKilcblxuICAgIHR5cGUgc3BsaXRfYmlzID1cbiAgICAgIHwgRm91bmRcbiAgICAgIHwgTm90Rm91bmQgb2YgdCAqICh1bml0IC0+IHQpXG5cbiAgICBsZXQgcmVjIHNwbGl0X2JpcyB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb3RGb3VuZCAoRW1wdHksIChmdW4gKCkgLT4gRW1wdHkpKVxuICAgICAgfCBOb2Rle2w7IHY7IHI7IF99IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIEZvdW5kXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBtYXRjaCBzcGxpdF9iaXMgeCBsIHdpdGhcbiAgICAgICAgICAgIHwgRm91bmQgLT4gRm91bmRcbiAgICAgICAgICAgIHwgTm90Rm91bmQgKGxsLCBybCkgLT4gTm90Rm91bmQgKGxsLCAoZnVuICgpIC0+IGpvaW4gKHJsICgpKSB2IHIpKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIG1hdGNoIHNwbGl0X2JpcyB4IHIgd2l0aFxuICAgICAgICAgICAgfCBGb3VuZCAtPiBGb3VuZFxuICAgICAgICAgICAgfCBOb3RGb3VuZCAobHIsIHJyKSAtPiBOb3RGb3VuZCAoam9pbiBsIHYgbHIsIHJyKVxuXG4gICAgbGV0IHJlYyBkaXNqb2ludCBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgfCAoXywgRW1wdHkpIC0+IHRydWVcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMX0sIHQyKSAtPlxuICAgICAgICAgIGlmIHMxID09IHMyIHRoZW4gZmFsc2VcbiAgICAgICAgICBlbHNlIG1hdGNoIHNwbGl0X2JpcyB2MSB0MiB3aXRoXG4gICAgICAgICAgICAgIE5vdEZvdW5kKGwyLCByMikgLT4gZGlzam9pbnQgbDEgbDIgJiYgZGlzam9pbnQgcjEgKHIyICgpKVxuICAgICAgICAgICAgfCBGb3VuZCAtPiBmYWxzZVxuXG4gICAgbGV0IHJlYyBkaWZmIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBFbXB0eVxuICAgICAgfCAodDEsIEVtcHR5KSAtPiB0MVxuICAgICAgfCAoTm9kZXtsPWwxOyB2PXYxOyByPXIxfSwgdDIpIC0+XG4gICAgICAgICAgbWF0Y2ggc3BsaXQgdjEgdDIgd2l0aFxuICAgICAgICAgICAgKGwyLCBmYWxzZSwgcjIpIC0+XG4gICAgICAgICAgICAgIGpvaW4gKGRpZmYgbDEgbDIpIHYxIChkaWZmIHIxIHIyKVxuICAgICAgICAgIHwgKGwyLCB0cnVlLCByMikgLT5cbiAgICAgICAgICAgICAgY29uY2F0IChkaWZmIGwxIGwyKSAoZGlmZiByMSByMilcblxuICAgIHR5cGUgZW51bWVyYXRpb24gPSBFbmQgfCBNb3JlIG9mIGVsdCAqIHQgKiBlbnVtZXJhdGlvblxuXG4gICAgbGV0IHJlYyBjb25zX2VudW0gcyBlID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gY29uc19lbnVtIGwgKE1vcmUodiwgciwgZSkpXG5cbiAgICBsZXQgcmVjIGNvbXBhcmVfYXV4IGUxIGUyID1cbiAgICAgICAgbWF0Y2ggKGUxLCBlMikgd2l0aFxuICAgICAgICAoRW5kLCBFbmQpIC0+IDBcbiAgICAgIHwgKEVuZCwgXykgIC0+IC0xXG4gICAgICB8IChfLCBFbmQpIC0+IDFcbiAgICAgIHwgKE1vcmUodjEsIHIxLCBlMSksIE1vcmUodjIsIHIyLCBlMikpIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB2MSB2MiBpblxuICAgICAgICAgIGlmIGMgPD4gMFxuICAgICAgICAgIHRoZW4gY1xuICAgICAgICAgIGVsc2UgY29tcGFyZV9hdXggKGNvbnNfZW51bSByMSBlMSkgKGNvbnNfZW51bSByMiBlMilcblxuICAgIGxldCBjb21wYXJlIHMxIHMyID1cbiAgICAgIGNvbXBhcmVfYXV4IChjb25zX2VudW0gczEgRW5kKSAoY29uc19lbnVtIHMyIEVuZClcblxuICAgIGxldCBlcXVhbCBzMSBzMiA9XG4gICAgICBjb21wYXJlIHMxIHMyID0gMFxuXG4gICAgbGV0IHJlYyBzdWJzZXQgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICBFbXB0eSwgXyAtPlxuICAgICAgICAgIHRydWVcbiAgICAgIHwgXywgRW1wdHkgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBOb2RlIHtsPWwxOyB2PXYxOyByPXIxfSwgKE5vZGUge2w9bDI7IHY9djI7IHI9cjJ9IGFzIHQyKSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgdjEgdjIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBzdWJzZXQgbDEgbDIgJiYgc3Vic2V0IHIxIHIyXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBzdWJzZXQgKE5vZGUge2w9bDE7IHY9djE7IHI9RW1wdHk7IGg9MH0pIGwyICYmIHN1YnNldCByMSB0MlxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHN1YnNldCAoTm9kZSB7bD1FbXB0eTsgdj12MTsgcj1yMTsgaD0wfSkgcjIgJiYgc3Vic2V0IGwxIHQyXG5cbiAgICBsZXQgcmVjIGl0ZXIgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+ICgpXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gaXRlciBmIGw7IGYgdjsgaXRlciBmIHJcblxuICAgIGxldCByZWMgZm9sZCBmIHMgYWNjdSA9XG4gICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGZvbGQgZiByIChmIHYgKGZvbGQgZiBsIGFjY3UpKVxuXG4gICAgbGV0IHJlYyBmb3JfYWxsIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiB0cnVlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gcCB2ICYmIGZvcl9hbGwgcCBsICYmIGZvcl9hbGwgcCByXG5cbiAgICBsZXQgcmVjIGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gZmFsc2VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBwIHYgfHwgZXhpc3RzIHAgbCB8fCBleGlzdHMgcCByXG5cbiAgICBsZXQgcmVjIGZpbHRlciBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGV7bDsgdjsgcn0pIGFzIHQgLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCBsJyA9IGZpbHRlciBwIGwgaW5cbiAgICAgICAgICBsZXQgcHYgPSBwIHYgaW5cbiAgICAgICAgICBsZXQgcicgPSBmaWx0ZXIgcCByIGluXG4gICAgICAgICAgaWYgcHYgdGhlblxuICAgICAgICAgICAgaWYgbD09bCcgJiYgcj09cicgdGhlbiB0IGVsc2Ugam9pbiBsJyB2IHInXG4gICAgICAgICAgZWxzZSBjb25jYXQgbCcgcidcblxuICAgIGxldCByZWMgcGFydGl0aW9uIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAoRW1wdHksIEVtcHR5KVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgKCogY2FsbCBbcF0gaW4gdGhlIGV4cGVjdGVkIGxlZnQtdG8tcmlnaHQgb3JkZXIgKilcbiAgICAgICAgICBsZXQgKGx0LCBsZikgPSBwYXJ0aXRpb24gcCBsIGluXG4gICAgICAgICAgbGV0IHB2ID0gcCB2IGluXG4gICAgICAgICAgbGV0IChydCwgcmYpID0gcGFydGl0aW9uIHAgciBpblxuICAgICAgICAgIGlmIHB2XG4gICAgICAgICAgdGhlbiAoam9pbiBsdCB2IHJ0LCBjb25jYXQgbGYgcmYpXG4gICAgICAgICAgZWxzZSAoY29uY2F0IGx0IHJ0LCBqb2luIGxmIHYgcmYpXG5cbiAgICBsZXQgcmVjIGNhcmRpbmFsID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gMFxuICAgICAgfCBOb2Rle2w7IHJ9IC0+IGNhcmRpbmFsIGwgKyAxICsgY2FyZGluYWwgclxuXG4gICAgbGV0IHJlYyBlbGVtZW50c19hdXggYWNjdSA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGFjY3VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBlbGVtZW50c19hdXggKHYgOjogZWxlbWVudHNfYXV4IGFjY3UgcikgbFxuXG4gICAgbGV0IGVsZW1lbnRzIHMgPVxuICAgICAgZWxlbWVudHNfYXV4IFtdIHNcblxuICAgIGxldCBjaG9vc2UgPSBtaW5fZWx0XG5cbiAgICBsZXQgY2hvb3NlX29wdCA9IG1pbl9lbHRfb3B0XG5cbiAgICBsZXQgcmVjIGZpbmQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIHZcbiAgICAgICAgICBlbHNlIGZpbmQgeCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgdjBcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYwIGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9vcHRfYXV4IHYwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIFNvbWUgdjBcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdjAgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3Rfb3B0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9sYXN0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYwIGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3QgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2IGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0X29wdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgU29tZSB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdjAgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9vcHQgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9vcHQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBTb21lIHZcbiAgICAgICAgICBlbHNlIGZpbmRfb3B0IHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgdHJ5X2pvaW4gbCB2IHIgPVxuICAgICAgKCogW2pvaW4gbCB2IHJdIGNhbiBvbmx5IGJlIGNhbGxlZCB3aGVuIChlbGVtZW50cyBvZiBsIDwgdiA8XG4gICAgICAgICBlbGVtZW50cyBvZiByKTsgdXNlIFt0cnlfam9pbiBsIHYgcl0gd2hlbiB0aGlzIHByb3BlcnR5IG1heVxuICAgICAgICAgbm90IGhvbGQsIGJ1dCB5b3UgaG9wZSBpdCBkb2VzIGhvbGQgaW4gdGhlIGNvbW1vbiBjYXNlICopXG4gICAgICBpZiAobCA9IEVtcHR5IHx8IE9yZC5jb21wYXJlIChtYXhfZWx0IGwpIHYgPCAwKVxuICAgICAgJiYgKHIgPSBFbXB0eSB8fCBPcmQuY29tcGFyZSB2IChtaW5fZWx0IHIpIDwgMClcbiAgICAgIHRoZW4gam9pbiBsIHYgclxuICAgICAgZWxzZSB1bmlvbiBsIChhZGQgdiByKVxuXG4gICAgbGV0IHJlYyBtYXAgZiA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gYXMgdCAtPlxuICAgICAgICAgKCogZW5mb3JjZSBsZWZ0LXRvLXJpZ2h0IGV2YWx1YXRpb24gb3JkZXIgKilcbiAgICAgICAgIGxldCBsJyA9IG1hcCBmIGwgaW5cbiAgICAgICAgIGxldCB2JyA9IGYgdiBpblxuICAgICAgICAgbGV0IHInID0gbWFwIGYgciBpblxuICAgICAgICAgaWYgbCA9PSBsJyAmJiB2ID09IHYnICYmIHIgPT0gcicgdGhlbiB0XG4gICAgICAgICBlbHNlIHRyeV9qb2luIGwnIHYnIHInXG5cbiAgICBsZXQgdHJ5X2NvbmNhdCB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+IHRyeV9qb2luIHQxIChtaW5fZWx0IHQyKSAocmVtb3ZlX21pbl9lbHQgdDIpXG5cbiAgICBsZXQgcmVjIGZpbHRlcl9tYXAgZiA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gYXMgdCAtPlxuICAgICAgICAgKCogZW5mb3JjZSBsZWZ0LXRvLXJpZ2h0IGV2YWx1YXRpb24gb3JkZXIgKilcbiAgICAgICAgIGxldCBsJyA9IGZpbHRlcl9tYXAgZiBsIGluXG4gICAgICAgICBsZXQgdicgPSBmIHYgaW5cbiAgICAgICAgIGxldCByJyA9IGZpbHRlcl9tYXAgZiByIGluXG4gICAgICAgICBiZWdpbiBtYXRjaCB2JyB3aXRoXG4gICAgICAgICAgIHwgU29tZSB2JyAtPlxuICAgICAgICAgICAgICBpZiBsID09IGwnICYmIHYgPT0gdicgJiYgciA9PSByJyB0aGVuIHRcbiAgICAgICAgICAgICAgZWxzZSB0cnlfam9pbiBsJyB2JyByJ1xuICAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgdHJ5X2NvbmNhdCBsJyByJ1xuICAgICAgICAgZW5kXG5cbiAgICBsZXQgb2Zfc29ydGVkX2xpc3QgbCA9XG4gICAgICBsZXQgcmVjIHN1YiBuIGwgPVxuICAgICAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICAgICAgfCAwLCBsIC0+IEVtcHR5LCBsXG4gICAgICAgIHwgMSwgeDAgOjogbCAtPiBOb2RlIHtsPUVtcHR5OyB2PXgwOyByPUVtcHR5OyBoPTF9LCBsXG4gICAgICAgIHwgMiwgeDAgOjogeDEgOjogbCAtPlxuICAgICAgICAgICAgTm9kZXtsPU5vZGV7bD1FbXB0eTsgdj14MDsgcj1FbXB0eTsgaD0xfTsgdj14MTsgcj1FbXB0eTsgaD0yfSwgbFxuICAgICAgICB8IDMsIHgwIDo6IHgxIDo6IHgyIDo6IGwgLT5cbiAgICAgICAgICAgIE5vZGV7bD1Ob2Rle2w9RW1wdHk7IHY9eDA7IHI9RW1wdHk7IGg9MX07IHY9eDE7XG4gICAgICAgICAgICAgICAgIHI9Tm9kZXtsPUVtcHR5OyB2PXgyOyByPUVtcHR5OyBoPTF9OyBoPTJ9LCBsXG4gICAgICAgIHwgbiwgbCAtPlxuICAgICAgICAgIGxldCBubCA9IG4gLyAyIGluXG4gICAgICAgICAgbGV0IGxlZnQsIGwgPSBzdWIgbmwgbCBpblxuICAgICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICAgIHwgW10gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgfCBtaWQgOjogbCAtPlxuICAgICAgICAgICAgbGV0IHJpZ2h0LCBsID0gc3ViIChuIC0gbmwgLSAxKSBsIGluXG4gICAgICAgICAgICBjcmVhdGUgbGVmdCBtaWQgcmlnaHQsIGxcbiAgICAgIGluXG4gICAgICBmc3QgKHN1YiAoTGlzdC5sZW5ndGggbCkgbClcblxuICAgIGxldCBvZl9saXN0IGwgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IGVtcHR5XG4gICAgICB8IFt4MF0gLT4gc2luZ2xldG9uIHgwXG4gICAgICB8IFt4MDsgeDFdIC0+IGFkZCB4MSAoc2luZ2xldG9uIHgwKVxuICAgICAgfCBbeDA7IHgxOyB4Ml0gLT4gYWRkIHgyIChhZGQgeDEgKHNpbmdsZXRvbiB4MCkpXG4gICAgICB8IFt4MDsgeDE7IHgyOyB4M10gLT4gYWRkIHgzIChhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSkpXG4gICAgICB8IFt4MDsgeDE7IHgyOyB4MzsgeDRdIC0+IGFkZCB4NCAoYWRkIHgzIChhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSkpKVxuICAgICAgfCBfIC0+IG9mX3NvcnRlZF9saXN0IChMaXN0LnNvcnRfdW5pcSBPcmQuY29tcGFyZSBsKVxuXG4gICAgbGV0IGFkZF9zZXEgaSBtID1cbiAgICAgIFNlcS5mb2xkX2xlZnQgKGZ1biBzIHggLT4gYWRkIHggcykgbSBpXG5cbiAgICBsZXQgb2Zfc2VxIGkgPSBhZGRfc2VxIGkgZW1wdHlcblxuICAgIGxldCByZWMgc2VxX29mX2VudW1fIGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICAgIHwgRW5kIC0+IFNlcS5OaWxcbiAgICAgIHwgTW9yZSAoeCwgdCwgcmVzdCkgLT4gU2VxLkNvbnMgKHgsIHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fc2VxIGMgPSBzZXFfb2ZfZW51bV8gKGNvbnNfZW51bSBjIEVuZClcblxuICAgIGxldCByZWMgc25vY19lbnVtIHMgZSA9XG4gICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IHNub2NfZW51bSByIChNb3JlKHYsIGwsIGUpKVxuXG4gICAgbGV0IHJlYyByZXZfc2VxX29mX2VudW1fIGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICAgIHwgRW5kIC0+IFNlcS5OaWxcbiAgICAgIHwgTW9yZSAoeCwgdCwgcmVzdCkgLT4gU2VxLkNvbnMgKHgsIHJldl9zZXFfb2ZfZW51bV8gKHNub2NfZW51bSB0IHJlc3QpKVxuXG4gICAgbGV0IHRvX3Jldl9zZXEgYyA9IHJldl9zZXFfb2ZfZW51bV8gKHNub2NfZW51bSBjIEVuZClcblxuICAgIGxldCB0b19zZXFfZnJvbSBsb3cgcyA9XG4gICAgICBsZXQgcmVjIGF1eCBsb3cgcyBjID0gbWF0Y2ggcyB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gY1xuICAgICAgICB8IE5vZGUge2w7IHI7IHY7IF99IC0+XG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBPcmQuY29tcGFyZSB2IGxvdyB3aXRoXG4gICAgICAgICAgICAgIHwgMCAtPiBNb3JlICh2LCByLCBjKVxuICAgICAgICAgICAgICB8IG4gd2hlbiBuPDAgLT4gYXV4IGxvdyByIGNcbiAgICAgICAgICAgICAgfCBfIC0+IGF1eCBsb3cgbCAoTW9yZSAodiwgciwgYykpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGluXG4gICAgICBzZXFfb2ZfZW51bV8gKGF1eCBsb3cgcyBFbmQpXG4gIGVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSB7IG11dGFibGUgYyA6ICdhIGxpc3Q7IG11dGFibGUgbGVuIDogaW50OyB9XG5cbmV4Y2VwdGlvbiBFbXB0eVxuXG5sZXQgY3JlYXRlICgpID0geyBjID0gW107IGxlbiA9IDA7IH1cblxubGV0IGNsZWFyIHMgPSBzLmMgPC0gW107IHMubGVuIDwtIDBcblxubGV0IGNvcHkgcyA9IHsgYyA9IHMuYzsgbGVuID0gcy5sZW47IH1cblxubGV0IHB1c2ggeCBzID0gcy5jIDwtIHggOjogcy5jOyBzLmxlbiA8LSBzLmxlbiArIDFcblxubGV0IHBvcCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6dGwgLT4gcy5jIDwtIHRsOyBzLmxlbiA8LSBzLmxlbiAtIDE7IGhkXG4gIHwgW10gICAgIC0+IHJhaXNlIEVtcHR5XG5cbmxldCBwb3Bfb3B0IHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjp0bCAtPiBzLmMgPC0gdGw7IHMubGVuIDwtIHMubGVuIC0gMTsgU29tZSBoZFxuICB8IFtdICAgICAtPiBOb25lXG5cbmxldCB0b3AgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6Ol8gLT4gaGRcbiAgfCBbXSAgICAtPiByYWlzZSBFbXB0eVxuXG5sZXQgdG9wX29wdCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6XyAtPiBTb21lIGhkXG4gIHwgW10gICAgLT4gTm9uZVxuXG5sZXQgaXNfZW1wdHkgcyA9IChzLmMgPSBbXSlcblxubGV0IGxlbmd0aCBzID0gcy5sZW5cblxubGV0IGl0ZXIgZiBzID0gTGlzdC5pdGVyIGYgcy5jXG5cbmxldCBmb2xkIGYgYWNjIHMgPSBMaXN0LmZvbGRfbGVmdCBmIGFjYyBzLmNcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID0gTGlzdC50b19zZXEgcy5jXG5cbmxldCBhZGRfc2VxIHEgaSA9IFNlcS5pdGVyIChmdW4geCAtPiBwdXNoIHggcSkgaVxuXG5sZXQgb2Zfc2VxIGcgPVxuICBsZXQgcyA9IGNyZWF0ZSgpIGluXG4gIGFkZF9zZXEgcyBnO1xuICBzXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgIEZyYW5jb2lzIFBvdHRpZXIsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgIEplcmVtaWUgRGltaW5vLCBKYW5lIFN0cmVldCBFdXJvcGUgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDAyIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4Y2VwdGlvbiBFbXB0eVxuXG50eXBlICdhIGNlbGwgPVxuICB8IE5pbFxuICB8IENvbnMgb2YgeyBjb250ZW50OiAnYTsgbXV0YWJsZSBuZXh0OiAnYSBjZWxsIH1cblxudHlwZSAnYSB0ID0ge1xuICBtdXRhYmxlIGxlbmd0aDogaW50O1xuICBtdXRhYmxlIGZpcnN0OiAnYSBjZWxsO1xuICBtdXRhYmxlIGxhc3Q6ICdhIGNlbGxcbn1cblxubGV0IGNyZWF0ZSAoKSA9IHtcbiAgbGVuZ3RoID0gMDtcbiAgZmlyc3QgPSBOaWw7XG4gIGxhc3QgPSBOaWxcbn1cblxubGV0IGNsZWFyIHEgPVxuICBxLmxlbmd0aCA8LSAwO1xuICBxLmZpcnN0IDwtIE5pbDtcbiAgcS5sYXN0IDwtIE5pbFxuXG5sZXQgYWRkIHggcSA9XG4gIGxldCBjZWxsID0gQ29ucyB7XG4gICAgY29udGVudCA9IHg7XG4gICAgbmV4dCA9IE5pbFxuICB9IGluXG4gIG1hdGNoIHEubGFzdCB3aXRoXG4gIHwgTmlsIC0+XG4gICAgcS5sZW5ndGggPC0gMTtcbiAgICBxLmZpcnN0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcbiAgfCBDb25zIGxhc3QgLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCArIDE7XG4gICAgbGFzdC5uZXh0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcblxubGV0IHB1c2ggPVxuICBhZGRcblxubGV0IHBlZWsgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50IH0gLT4gY29udGVudFxuXG5sZXQgcGVla19vcHQgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiBOb25lXG4gIHwgQ29ucyB7IGNvbnRlbnQgfSAtPiBTb21lIGNvbnRlbnRcblxubGV0IHRvcCA9XG4gIHBlZWtcblxubGV0IHRha2UgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0ID0gTmlsIH0gLT5cbiAgICBjbGVhciBxO1xuICAgIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBjb250ZW50XG5cbmxldCB0YWtlX29wdCBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IE5vbmVcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCA9IE5pbCB9IC0+XG4gICAgY2xlYXIgcTtcbiAgICBTb21lIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBTb21lIGNvbnRlbnRcblxubGV0IHBvcCA9XG4gIHRha2VcblxubGV0IGNvcHkgPVxuICBsZXQgcmVjIGNvcHkgcV9yZXMgcHJldiBjZWxsID1cbiAgICBtYXRjaCBjZWxsIHdpdGhcbiAgICB8IE5pbCAtPiBxX3Jlcy5sYXN0IDwtIHByZXY7IHFfcmVzXG4gICAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgICBsZXQgcmVzID0gQ29ucyB7IGNvbnRlbnQ7IG5leHQgPSBOaWwgfSBpblxuICAgICAgYmVnaW4gbWF0Y2ggcHJldiB3aXRoXG4gICAgICB8IE5pbCAtPiBxX3Jlcy5maXJzdCA8LSByZXNcbiAgICAgIHwgQ29ucyBwIC0+IHAubmV4dCA8LSByZXNcbiAgICAgIGVuZDtcbiAgICAgIGNvcHkgcV9yZXMgcmVzIG5leHRcbiAgaW5cbiAgZnVuIHEgLT4gY29weSB7IGxlbmd0aCA9IHEubGVuZ3RoOyBmaXJzdCA9IE5pbDsgbGFzdCA9IE5pbCB9IE5pbCBxLmZpcnN0XG5cbmxldCBpc19lbXB0eSBxID1cbiAgcS5sZW5ndGggPSAwXG5cbmxldCBsZW5ndGggcSA9XG4gIHEubGVuZ3RoXG5cbmxldCBpdGVyID1cbiAgbGV0IHJlYyBpdGVyIGYgY2VsbCA9XG4gICAgbWF0Y2ggY2VsbCB3aXRoXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGYgY29udGVudDtcbiAgICAgIGl0ZXIgZiBuZXh0XG4gIGluXG4gIGZ1biBmIHEgLT4gaXRlciBmIHEuZmlyc3RcblxubGV0IGZvbGQgPVxuICBsZXQgcmVjIGZvbGQgZiBhY2N1IGNlbGwgPVxuICAgIG1hdGNoIGNlbGwgd2l0aFxuICAgIHwgTmlsIC0+IGFjY3VcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGxldCBhY2N1ID0gZiBhY2N1IGNvbnRlbnQgaW5cbiAgICAgIGZvbGQgZiBhY2N1IG5leHRcbiAgaW5cbiAgZnVuIGYgYWNjdSBxIC0+IGZvbGQgZiBhY2N1IHEuZmlyc3RcblxubGV0IHRyYW5zZmVyIHExIHEyID1cbiAgaWYgcTEubGVuZ3RoID4gMCB0aGVuXG4gICAgbWF0Y2ggcTIubGFzdCB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMS5sZW5ndGg7XG4gICAgICBxMi5maXJzdCA8LSBxMS5maXJzdDtcbiAgICAgIHEyLmxhc3QgPC0gcTEubGFzdDtcbiAgICAgIGNsZWFyIHExXG4gICAgfCBDb25zIGxhc3QgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMi5sZW5ndGggKyBxMS5sZW5ndGg7XG4gICAgICBsYXN0Lm5leHQgPC0gcTEuZmlyc3Q7XG4gICAgICBxMi5sYXN0IDwtIHExLmxhc3Q7XG4gICAgICBjbGVhciBxMVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHEgPVxuICBsZXQgcmVjIGF1eCBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgfCBOaWwgLT4gU2VxLk5pbFxuICAgIHwgQ29ucyB7IGNvbnRlbnQ9eDsgbmV4dDsgfSAtPiBTZXEuQ29ucyAoeCwgYXV4IG5leHQpXG4gIGluXG4gIGF1eCBxLmZpcnN0XG5cbmxldCBhZGRfc2VxIHEgaSA9IFNlcS5pdGVyIChmdW4geCAtPiBwdXNoIHggcSkgaVxuXG5sZXQgb2Zfc2VxIGcgPVxuICBsZXQgcSA9IGNyZWF0ZSgpIGluXG4gIGFkZF9zZXEgcSBnO1xuICBxXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgIERhbmllbCBkZSBSYXVnbGF1ZHJlLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgJ2EgdCA9ICdhIGNlbGwgb3B0aW9uXG5hbmQgJ2EgY2VsbCA9IHsgbXV0YWJsZSBjb3VudCA6IGludDsgbXV0YWJsZSBkYXRhIDogJ2EgZGF0YSB9XG5hbmQgJ2EgZGF0YSA9XG4gICAgU2VtcHR5XG4gIHwgU2NvbnMgb2YgJ2EgKiAnYSBkYXRhXG4gIHwgU2FwcCBvZiAnYSBkYXRhICogJ2EgZGF0YVxuICB8IFNsYXp5IG9mICdhIGRhdGEgTGF6eS50XG4gIHwgU2dlbiBvZiAnYSBnZW5cbiAgfCBTYnVmZmlvIDogYnVmZmlvIC0+IGNoYXIgZGF0YVxuYW5kICdhIGdlbiA9IHsgbXV0YWJsZSBjdXJyIDogJ2Egb3B0aW9uIG9wdGlvbjsgZnVuYyA6IGludCAtPiAnYSBvcHRpb24gfVxuYW5kIGJ1ZmZpbyA9XG4gIHsgaWMgOiBpbl9jaGFubmVsOyBidWZmIDogYnl0ZXM7IG11dGFibGUgbGVuIDogaW50OyBtdXRhYmxlIGluZCA6IGludCB9XG5cbmV4Y2VwdGlvbiBGYWlsdXJlXG5leGNlcHRpb24gRXJyb3Igb2Ygc3RyaW5nXG5cbmxldCBjb3VudCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiAwXG4gIHwgU29tZSB7IGNvdW50IH0gLT4gY291bnRcbmxldCBkYXRhID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IFNlbXB0eVxuICB8IFNvbWUgeyBkYXRhIH0gLT4gZGF0YVxuXG5sZXQgZmlsbF9idWZmIGIgPVxuICBiLmxlbiA8LSBpbnB1dCBiLmljIGIuYnVmZiAwIChCeXRlcy5sZW5ndGggYi5idWZmKTsgYi5pbmQgPC0gMFxuXG5cbmxldCByZWMgZ2V0X2RhdGEgOiB0eXBlIHYuIGludCAtPiB2IGRhdGEgLT4gdiBkYXRhID0gZnVuIGNvdW50IGQgLT4gbWF0Y2ggZCB3aXRoXG4gKCogUmV0dXJucyBlaXRoZXIgU2VtcHR5IG9yIFNjb25zKGEsIF8pIGV2ZW4gd2hlbiBkIGlzIGEgZ2VuZXJhdG9yXG4gICAgb3IgYSBidWZmZXIuIEluIHRob3NlIGNhc2VzLCB0aGUgaXRlbSBhIGlzIHNlZW4gYXMgZXh0cmFjdGVkIGZyb21cbiB0aGUgZ2VuZXJhdG9yL2J1ZmZlci5cbiBUaGUgY291bnQgcGFyYW1ldGVyIGlzIHVzZWQgZm9yIGNhbGxpbmcgYFNnZW4tZnVuY3Rpb25zJy4gICopXG4gICBTZW1wdHkgfCBTY29ucyAoXywgXykgLT4gZFxuIHwgU2FwcCAoZDEsIGQyKSAtPlxuICAgICBiZWdpbiBtYXRjaCBnZXRfZGF0YSBjb3VudCBkMSB3aXRoXG4gICAgICAgU2NvbnMgKGEsIGQxMSkgLT4gU2NvbnMgKGEsIFNhcHAgKGQxMSwgZDIpKVxuICAgICB8IFNlbXB0eSAtPiBnZXRfZGF0YSBjb3VudCBkMlxuICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgIGVuZFxuIHwgU2dlbiB7Y3VyciA9IFNvbWUgTm9uZX0gLT4gU2VtcHR5XG4gfCBTZ2VuICh7Y3VyciA9IFNvbWUoU29tZSBhKX0gYXMgZykgLT5cbiAgICAgZy5jdXJyIDwtIE5vbmU7IFNjb25zKGEsIGQpXG4gfCBTZ2VuIGcgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZy5mdW5jIGNvdW50IHdpdGhcbiAgICAgICBOb25lIC0+IGcuY3VyciA8LSBTb21lKE5vbmUpOyBTZW1wdHlcbiAgICAgfCBTb21lIGEgLT4gU2NvbnMoYSwgZClcbiAgICAgICAgICgqIFdhcm5pbmc6IGFueW9uZSB1c2luZyBnIHRoaW5rcyB0aGF0IGFuIGl0ZW0gaGFzIGJlZW4gcmVhZCAqKVxuICAgICBlbmRcbiB8IFNidWZmaW8gYiAtPlxuICAgICBpZiBiLmluZCA+PSBiLmxlbiB0aGVuIGZpbGxfYnVmZiBiO1xuICAgICBpZiBiLmxlbiA9PSAwIHRoZW4gU2VtcHR5IGVsc2VcbiAgICAgICBsZXQgciA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmIGIuaW5kIGluXG4gICAgICAgKCogV2FybmluZzogYW55b25lIHVzaW5nIGcgdGhpbmtzIHRoYXQgYW4gaXRlbSBoYXMgYmVlbiByZWFkICopXG4gICAgICAgYi5pbmQgPC0gc3VjYyBiLmluZDsgU2NvbnMociwgZClcbiB8IFNsYXp5IGYgLT4gZ2V0X2RhdGEgY291bnQgKExhenkuZm9yY2UgZilcblxuXG5sZXQgcmVjIHBlZWtfZGF0YSA6IHR5cGUgdi4gdiBjZWxsIC0+IHYgb3B0aW9uID0gZnVuIHMgLT5cbiAoKiBjb25zdWx0IHRoZSBmaXJzdCBpdGVtIG9mIHMgKilcbiBtYXRjaCBzLmRhdGEgd2l0aFxuICAgU2VtcHR5IC0+IE5vbmVcbiB8IFNjb25zIChhLCBfKSAtPiBTb21lIGFcbiB8IFNhcHAgKF8sIF8pIC0+XG4gICAgIGJlZ2luIG1hdGNoIGdldF9kYXRhIHMuY291bnQgcy5kYXRhIHdpdGhcbiAgICAgICBTY29ucyhhLCBfKSBhcyBkIC0+IHMuZGF0YSA8LSBkOyBTb21lIGFcbiAgICAgfCBTZW1wdHkgLT4gTm9uZVxuICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgIGVuZFxuIHwgU2xhenkgZiAtPiBzLmRhdGEgPC0gKExhenkuZm9yY2UgZik7IHBlZWtfZGF0YSBzXG4gfCBTZ2VuIHtjdXJyID0gU29tZSBhfSAtPiBhXG4gfCBTZ2VuIGcgLT4gbGV0IHggPSBnLmZ1bmMgcy5jb3VudCBpbiBnLmN1cnIgPC0gU29tZSB4OyB4XG4gfCBTYnVmZmlvIGIgLT5cbiAgICAgaWYgYi5pbmQgPj0gYi5sZW4gdGhlbiBmaWxsX2J1ZmYgYjtcbiAgICAgaWYgYi5sZW4gPT0gMCB0aGVuIGJlZ2luIHMuZGF0YSA8LSBTZW1wdHk7IE5vbmUgZW5kXG4gICAgIGVsc2UgU29tZSAoQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmYgYi5pbmQpXG5cblxubGV0IHBlZWsgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gTm9uZVxuICB8IFNvbWUgcyAtPiBwZWVrX2RhdGEgc1xuXG5cbmxldCByZWMganVua19kYXRhIDogdHlwZSB2LiB2IGNlbGwgLT4gdW5pdCA9IGZ1biBzIC0+XG4gIG1hdGNoIHMuZGF0YSB3aXRoXG4gICAgU2NvbnMgKF8sIGQpIC0+IHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IHMuZGF0YSA8LSBkXG4gIHwgU2dlbiAoe2N1cnIgPSBTb21lIF99IGFzIGcpIC0+IHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IGcuY3VyciA8LSBOb25lXG4gIHwgU2J1ZmZpbyBiIC0+XG4gICAgICBpZiBiLmluZCA+PSBiLmxlbiB0aGVuIGZpbGxfYnVmZiBiO1xuICAgICAgaWYgYi5sZW4gPT0gMCB0aGVuIHMuZGF0YSA8LSBTZW1wdHlcbiAgICAgIGVsc2UgKHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IGIuaW5kIDwtIHN1Y2MgYi5pbmQpXG4gIHwgXyAtPlxuICAgICAgbWF0Y2ggcGVla19kYXRhIHMgd2l0aFxuICAgICAgICBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgXyAtPiBqdW5rX2RhdGEgc1xuXG5cbmxldCBqdW5rID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSBkYXRhIC0+IGp1bmtfZGF0YSBkYXRhXG5cbmxldCByZWMgbmdldF9kYXRhIG4gcyA9XG4gIGlmIG4gPD0gMCB0aGVuIFtdLCBzLmRhdGEsIDBcbiAgZWxzZVxuICAgIG1hdGNoIHBlZWtfZGF0YSBzIHdpdGhcbiAgICAgIFNvbWUgYSAtPlxuICAgICAgICBqdW5rX2RhdGEgcztcbiAgICAgICAgbGV0IChhbCwgZCwgaykgPSBuZ2V0X2RhdGEgKHByZWQgbikgcyBpbiBhIDo6IGFsLCBTY29ucyAoYSwgZCksIHN1Y2Mga1xuICAgIHwgTm9uZSAtPiBbXSwgcy5kYXRhLCAwXG5cblxubGV0IG5wZWVrX2RhdGEgbiBzID1cbiAgbGV0IChhbCwgZCwgbGVuKSA9IG5nZXRfZGF0YSBuIHMgaW5cbiAgcy5jb3VudCA8LSAocy5jb3VudCAtIGxlbik7XG4gIHMuZGF0YSA8LSBkO1xuICBhbFxuXG5cbmxldCBucGVlayBuID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSBkIC0+IG5wZWVrX2RhdGEgbiBkXG5cbmxldCBuZXh0IHMgPVxuICBtYXRjaCBwZWVrIHMgd2l0aFxuICAgIFNvbWUgYSAtPiBqdW5rIHM7IGFcbiAgfCBOb25lIC0+IHJhaXNlIEZhaWx1cmVcblxuXG5sZXQgZW1wdHkgcyA9XG4gIG1hdGNoIHBlZWsgcyB3aXRoXG4gICAgU29tZSBfIC0+IHJhaXNlIEZhaWx1cmVcbiAgfCBOb25lIC0+ICgpXG5cblxubGV0IGl0ZXIgZiBzdHJtID1cbiAgbGV0IHJlYyBkb19yZWMgKCkgPVxuICAgIG1hdGNoIHBlZWsgc3RybSB3aXRoXG4gICAgICBTb21lIGEgLT4ganVuayBzdHJtOyBpZ25vcmUoZiBhKTsgZG9fcmVjICgpXG4gICAgfCBOb25lIC0+ICgpXG4gIGluXG4gIGRvX3JlYyAoKVxuXG5cbigqIFN0cmVhbSBidWlsZGluZyBmdW5jdGlvbnMgKilcblxubGV0IGZyb20gZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNnZW4ge2N1cnIgPSBOb25lOyBmdW5jID0gZn19XG5cbmxldCBvZl9saXN0IGwgPVxuICBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBMaXN0LmZvbGRfcmlnaHQgKGZ1biB4IGwgLT4gU2NvbnMgKHgsIGwpKSBsIFNlbXB0eX1cblxuXG5sZXQgb2Zfc3RyaW5nIHMgPVxuICBsZXQgY291bnQgPSByZWYgMCBpblxuICBmcm9tIChmdW4gXyAtPlxuICAgICgqIFdlIGNhbm5vdCB1c2UgdGhlIGluZGV4IHBhc3NlZCBieSB0aGUgW2Zyb21dIGZ1bmN0aW9uIGRpcmVjdGx5XG4gICAgICAgYmVjYXVzZSBpdCByZXR1cm5zIHRoZSBjdXJyZW50IHN0cmVhbSBjb3VudCwgd2l0aCBhYnNvbHV0ZWx5IG5vXG4gICAgICAgZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCBzdGFydCBmcm9tIDAuIEZvciBleGFtcGxlLCBpbiB0aGUgY2FzZVxuICAgICAgIG9mIFtTdHJlYW0uaWNvbnMgJ2MnIChTdHJlYW0uZnJvbV9zdHJpbmcgXCJhYlwiKV0sIHRoZSBmaXJzdFxuICAgICAgIGFjY2VzcyB0byB0aGUgc3RyaW5nIHdpbGwgYmUgbWFkZSB3aXRoIGNvdW50IFsxXSBhbHJlYWR5LlxuICAgICopXG4gICAgbGV0IGMgPSAhY291bnQgaW5cbiAgICBpZiBjIDwgU3RyaW5nLmxlbmd0aCBzXG4gICAgdGhlbiAoaW5jciBjb3VudDsgU29tZSBzLltjXSlcbiAgICBlbHNlIE5vbmUpXG5cblxubGV0IG9mX2J5dGVzIHMgPVxuICBsZXQgY291bnQgPSByZWYgMCBpblxuICBmcm9tIChmdW4gXyAtPlxuICAgIGxldCBjID0gIWNvdW50IGluXG4gICAgaWYgYyA8IEJ5dGVzLmxlbmd0aCBzXG4gICAgdGhlbiAoaW5jciBjb3VudDsgU29tZSAoQnl0ZXMuZ2V0IHMgYykpXG4gICAgZWxzZSBOb25lKVxuXG5cbmxldCBvZl9jaGFubmVsIGljID1cbiAgU29tZSB7Y291bnQgPSAwO1xuICAgICAgICBkYXRhID0gU2J1ZmZpbyB7aWMgPSBpYzsgYnVmZiA9IEJ5dGVzLmNyZWF0ZSA0MDk2OyBsZW4gPSAwOyBpbmQgPSAwfX1cblxuXG4oKiBTdHJlYW0gZXhwcmVzc2lvbnMgYnVpbGRlcnMgKilcblxubGV0IGlhcHAgaSBzID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2FwcCAoZGF0YSBpLCBkYXRhIHMpfVxubGV0IGljb25zIGkgcyA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNjb25zIChpLCBkYXRhIHMpfVxubGV0IGlzaW5nIGkgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTY29ucyAoaSwgU2VtcHR5KX1cblxubGV0IGxhcHAgZiBzID1cbiAgU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2xhenkgKGxhenkoU2FwcCAoZGF0YSAoZiAoKSksIGRhdGEgcykpKX1cblxubGV0IGxjb25zIGYgcyA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KFNjb25zIChmICgpLCBkYXRhIHMpKSl9XG5sZXQgbHNpbmcgZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KFNjb25zIChmICgpLCBTZW1wdHkpKSl9XG5cbmxldCBzZW1wdHkgPSBOb25lXG5sZXQgc2xhenkgZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KGRhdGEgKGYgKCkpKSl9XG5cbigqIEZvciBkZWJ1Z2dpbmcgdXNlICopXG5cbmxldCByZWMgZHVtcCA6IHR5cGUgdi4gKHYgLT4gdW5pdCkgLT4gdiB0IC0+IHVuaXQgPSBmdW4gZiBzIC0+XG4gIHByaW50X3N0cmluZyBcIntjb3VudCA9IFwiO1xuICBwcmludF9pbnQgKGNvdW50IHMpO1xuICBwcmludF9zdHJpbmcgXCI7IGRhdGEgPSBcIjtcbiAgZHVtcF9kYXRhIGYgKGRhdGEgcyk7XG4gIHByaW50X3N0cmluZyBcIn1cIjtcbiAgcHJpbnRfbmV3bGluZSAoKVxuYW5kIGR1bXBfZGF0YSA6IHR5cGUgdi4gKHYgLT4gdW5pdCkgLT4gdiBkYXRhIC0+IHVuaXQgPSBmdW4gZiAtPlxuICBmdW5jdGlvblxuICAgIFNlbXB0eSAtPiBwcmludF9zdHJpbmcgXCJTZW1wdHlcIlxuICB8IFNjb25zIChhLCBkKSAtPlxuICAgICAgcHJpbnRfc3RyaW5nIFwiU2NvbnMgKFwiO1xuICAgICAgZiBhO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiLCBcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQ7XG4gICAgICBwcmludF9zdHJpbmcgXCIpXCJcbiAgfCBTYXBwIChkMSwgZDIpIC0+XG4gICAgICBwcmludF9zdHJpbmcgXCJTYXBwIChcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQxO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiLCBcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQyO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiKVwiXG4gIHwgU2xhenkgXyAtPiBwcmludF9zdHJpbmcgXCJTbGF6eVwiXG4gIHwgU2dlbiBfIC0+IHByaW50X3N0cmluZyBcIlNnZW5cIlxuICB8IFNidWZmaW8gXyAtPiBwcmludF9zdHJpbmcgXCJTYnVmZmlvXCJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgIFBpZXJyZSBXZWlzIGFuZCBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTkgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRXh0ZW5zaWJsZSBidWZmZXJzICopXG5cbnR5cGUgdCA9XG4ge211dGFibGUgYnVmZmVyIDogYnl0ZXM7XG4gIG11dGFibGUgcG9zaXRpb24gOiBpbnQ7XG4gIG11dGFibGUgbGVuZ3RoIDogaW50O1xuICBpbml0aWFsX2J1ZmZlciA6IGJ5dGVzfVxuKCogSW52YXJpYW50czogYWxsIHBhcnRzIG9mIHRoZSBjb2RlIHByZXNlcnZlIHRoZSBpbnZhcmlhbnRzIHRoYXQ6XG4gICAtIFswIDw9IGIucG9zaXRpb24gPD0gYi5sZW5ndGhdXG4gICAtIFtiLmxlbmd0aCA9IEJ5dGVzLmxlbmd0aCBiLmJ1ZmZlcl1cblxuICAgTm90ZSBpbiBwYXJ0aWN1bGFyIHRoYXQgW2IucG9zaXRpb24gPSBiLmxlbmd0aF0gaXMgbGVnYWwsXG4gICBpdCBtZWFucyB0aGF0IHRoZSBidWZmZXIgaXMgZnVsbCBhbmQgd2lsbCBoYXZlIHRvIGJlIGV4dGVuZGVkXG4gICBiZWZvcmUgYW55IGZ1cnRoZXIgYWRkaXRpb24uICopXG5cbmxldCBjcmVhdGUgbiA9XG4gbGV0IG4gPSBpZiBuIDwgMSB0aGVuIDEgZWxzZSBuIGluXG4gbGV0IG4gPSBpZiBuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGVsc2UgbiBpblxuIGxldCBzID0gQnl0ZXMuY3JlYXRlIG4gaW5cbiB7YnVmZmVyID0gczsgcG9zaXRpb24gPSAwOyBsZW5ndGggPSBuOyBpbml0aWFsX2J1ZmZlciA9IHN9XG5cbmxldCBjb250ZW50cyBiID0gQnl0ZXMuc3ViX3N0cmluZyBiLmJ1ZmZlciAwIGIucG9zaXRpb25cbmxldCB0b19ieXRlcyBiID0gQnl0ZXMuc3ViIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxuXG5sZXQgc3ViIGIgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBiLnBvc2l0aW9uIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuc3ViXCJcbiAgZWxzZSBCeXRlcy5zdWJfc3RyaW5nIGIuYnVmZmVyIG9mcyBsZW5cblxuXG5sZXQgYmxpdCBzcmMgc3Jjb2ZmIGRzdCBkc3RvZmYgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBzcmNvZmYgPCAwIHx8IHNyY29mZiA+IHNyYy5wb3NpdGlvbiAtIGxlblxuICAgICAgICAgICAgIHx8IGRzdG9mZiA8IDAgfHwgZHN0b2ZmID4gKEJ5dGVzLmxlbmd0aCBkc3QpIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYmxpdFwiXG4gIGVsc2VcbiAgICBCeXRlcy51bnNhZmVfYmxpdCBzcmMuYnVmZmVyIHNyY29mZiBkc3QgZHN0b2ZmIGxlblxuXG5cbmxldCBudGggYiBvZnMgPVxuICBpZiBvZnMgPCAwIHx8IG9mcyA+PSBiLnBvc2l0aW9uIHRoZW5cbiAgIGludmFsaWRfYXJnIFwiQnVmZmVyLm50aFwiXG4gIGVsc2UgQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmZlciBvZnNcblxuXG5sZXQgbGVuZ3RoIGIgPSBiLnBvc2l0aW9uXG5cbmxldCBjbGVhciBiID0gYi5wb3NpdGlvbiA8LSAwXG5cbmxldCByZXNldCBiID1cbiAgYi5wb3NpdGlvbiA8LSAwO1xuICBiLmJ1ZmZlciA8LSBiLmluaXRpYWxfYnVmZmVyO1xuICBiLmxlbmd0aCA8LSBCeXRlcy5sZW5ndGggYi5idWZmZXJcblxuKCogW3Jlc2l6ZSBiIG1vcmVdIGVuc3VyZXMgdGhhdCBbYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5sZW5ndGhdIGhvbGRzXG4gICBieSBkeW5hbWljYWxseSBleHRlbmRpbmcgW2IuYnVmZmVyXSBpZiBuZWNlc3NhcnkgLS0gYW5kIHRodXNcbiAgIGluY3JlYXNpbmcgW2IubGVuZ3RoXS5cblxuICAgSW4gcGFydGljdWxhciwgYWZ0ZXIgW3Jlc2l6ZSBiIG1vcmVdIGlzIGNhbGxlZCwgYSBkaXJlY3QgYWNjZXNzIG9mXG4gICBzaXplIFttb3JlXSBhdCBbYi5wb3NpdGlvbl0gd2lsbCBhbHdheXMgYmUgaW4tYm91bmRzLCBzbyB0aGF0XG4gICAodW5zYWZlX3tnZXQsc2V0fSkgbWF5IGJlIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxuKilcbmxldCByZXNpemUgYiBtb3JlID1cbiAgbGV0IG9sZF9wb3MgPSBiLnBvc2l0aW9uIGluXG4gIGxldCBvbGRfbGVuID0gYi5sZW5ndGggaW5cbiAgbGV0IG5ld19sZW4gPSByZWYgb2xkX2xlbiBpblxuICB3aGlsZSBvbGRfcG9zICsgbW9yZSA+ICFuZXdfbGVuIGRvIG5ld19sZW4gOj0gMiAqICFuZXdfbGVuIGRvbmU7XG4gIGlmICFuZXdfbGVuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gYmVnaW5cbiAgICBpZiBvbGRfcG9zICsgbW9yZSA8PSBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICB0aGVuIG5ld19sZW4gOj0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgZWxzZSBmYWlsd2l0aCBcIkJ1ZmZlci5hZGQ6IGNhbm5vdCBncm93IGJ1ZmZlclwiXG4gIGVuZDtcbiAgbGV0IG5ld19idWZmZXIgPSBCeXRlcy5jcmVhdGUgIW5ld19sZW4gaW5cbiAgKCogUFIjNjE0ODogbGV0J3Mga2VlcCB1c2luZyBbYmxpdF0gcmF0aGVyIHRoYW4gW3Vuc2FmZV9ibGl0XSBpblxuICAgICB0aGlzIHRyaWNreSBmdW5jdGlvbiB0aGF0IGlzIHNsb3cgYW55d2F5LiAqKVxuICBCeXRlcy5ibGl0IGIuYnVmZmVyIDAgbmV3X2J1ZmZlciAwIGIucG9zaXRpb247XG4gIGIuYnVmZmVyIDwtIG5ld19idWZmZXI7XG4gIGIubGVuZ3RoIDwtICFuZXdfbGVuO1xuICBhc3NlcnQgKGIucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoKTtcbiAgYXNzZXJ0IChvbGRfcG9zICsgbW9yZSA8PSBiLmxlbmd0aCk7XG4gICgpXG4gICgqIE5vdGU6IHRoZXJlIGFyZSB2YXJpb3VzIHNpdHVhdGlvbnMgKHByZWVtcHRpdmUgdGhyZWFkcywgc2lnbmFscyBhbmRcbiAgICAgZ2MgZmluYWxpemVycykgd2hlcmUgT0NhbWwgY29kZSBtYXkgYmUgcnVuIGFzeW5jaHJvbm91c2x5OyBpblxuICAgICBwYXJ0aWN1bGFyLCB0aGVyZSBtYXkgYmUgYSByYWNlIHdpdGggYW5vdGhlciB1c2VyIG9mIFtiXSwgY2hhbmdpbmdcbiAgICAgaXRzIG11dGFibGUgZmllbGRzIGluIHRoZSBtaWRkbGUgb2YgdGhlIFtyZXNpemVdIGNhbGwuIFRoZSBCdWZmZXJcbiAgICAgbW9kdWxlIGRvZXMgbm90IHByb3ZpZGUgYW55IGNvcnJlY3RuZXNzIGd1YXJhbnRlZSBpZiB0aGF0IGhhcHBlbnMsXG4gICAgIGJ1dCB3ZSBtdXN0IHN0aWxsIGVuc3VyZSB0aGF0IHRoZSBkYXRhc3RydWN0dXJlIGludmFyaWFudHMgaG9sZCBmb3JcbiAgICAgbWVtb3J5LXNhZmV0eSAtLSBhcyB3ZSBwbGFuIHRvIHVzZSBbdW5zYWZlX3tnZXQsc2V0fV0uXG5cbiAgICAgVGhlcmUgYXJlIHR3byBwb3RlbnRpYWwgYWxsb2NhdGlvbiBwb2ludHMgaW4gdGhpcyBmdW5jdGlvbixcbiAgICAgW3JlZl0gYW5kIFtCeXRlcy5jcmVhdGVdLCBidXQgYWxsIHJlYWRzIGFuZCB3cml0ZXMgdG8gdGhlIGZpZWxkc1xuICAgICBvZiBbYl0gaGFwcGVuIGJlZm9yZSBib3RoIG9mIHRoZW0gb3IgYWZ0ZXIgYm90aCBvZiB0aGVtLlxuXG4gICAgIFdlIHRoZXJlZm9yZSBhc3N1bWUgdGhhdCBbYi5wb3NpdGlvbl0gbWF5IGNoYW5nZSBhdCB0aGVzZSBhbGxvY2F0aW9ucyxcbiAgICAgYW5kIGNoZWNrIHRoYXQgdGhlIFtiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aF0gcG9zdGNvbmRpdGlvblxuICAgICBob2xkcyBmb3IgYm90aCB2YWx1ZXMgb2YgW2IucG9zaXRpb25dLCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGZ1bmN0aW9uXG4gICAgIGlzIGNhbGxlZC4gTW9yZSBwcmVjaXNlbHksIHRoZSBmb2xsb3dpbmcgaW52YXJpYW50cyBtdXN0IGhvbGQgaWYgdGhlXG4gICAgIGZ1bmN0aW9uIHJldHVybnMgY29ycmVjdGx5LCBpbiBhZGRpdGlvbiB0byB0aGUgdXN1YWwgYnVmZmVyIGludmFyaWFudHM6XG4gICAgIC0gW29sZChiLnBvc2l0aW9uKSArIG1vcmUgPD0gbmV3KGIubGVuZ3RoKV1cbiAgICAgLSBbbmV3KGIucG9zaXRpb24pICsgbW9yZSA8PSBuZXcoYi5sZW5ndGgpXVxuICAgICAtIFtvbGQoYi5sZW5ndGgpIDw9IG5ldyhiLmxlbmd0aCldXG5cbiAgICAgTm90ZTogW2IucG9zaXRpb24gKyBtb3JlIDw9IG9sZChiLmxlbmd0aCldIGRvZXMgKm5vdCpcbiAgICAgaG9sZCBpbiBnZW5lcmFsLCBhcyBpdCBpcyBwcmVjaXNlbHkgdGhlIGNhc2Ugd2hlcmUgeW91IG5lZWRcbiAgICAgdG8gY2FsbCBbcmVzaXplXSB0byBpbmNyZWFzZSBbYi5sZW5ndGhdLlxuXG4gICAgIE5vdGU6IFthc3NlcnRdIGFib3ZlIGRvZXMgbm90IG1lYW4gdGhhdCB3ZSBrbm93IHRoZSBjb25kaXRpb25zXG4gICAgIGFsd2F5cyBob2xkLCBidXQgdGhhdCB0aGUgZnVuY3Rpb24gbWF5IHJldHVybiBjb3JyZWN0bHlcbiAgICAgb25seSBpZiB0aGV5IGhvbGQuXG5cbiAgICAgTm90ZTogdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBkb2VzIG5vdCBuZWVkXG4gICAgIHRvIGJlIGNoZWNrZWQgd2l0aCB0aGlzIGxldmVsIG9mIHNjcnV0aW55LCBnaXZlbiB0aGF0IHRoZXlcbiAgICAgcmVhZC93cml0ZSB0aGUgYnVmZmVyIGltbWVkaWF0ZWx5IGFmdGVyIGNoZWNraW5nIHRoYXRcbiAgICAgW2IucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoXSBob2xkIG9yIGNhbGxpbmcgW3Jlc2l6ZV0uXG4gICopXG5cbmxldCBhZGRfY2hhciBiIGMgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiAxO1xuICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIHBvcyBjO1xuICBiLnBvc2l0aW9uIDwtIHBvcyArIDFcblxubGV0IHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heCA9IDRcbmxldCB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4ID0gNFxuXG5sZXQgcmVjIGFkZF91dGZfOF91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfOF9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl84X3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heDsgYWRkX3V0Zl84X3VjaGFyIGIgdSlcbiAgZWxzZSAoYi5wb3NpdGlvbiA8LSBwb3MgKyBuKVxuXG5sZXQgcmVjIGFkZF91dGZfMTZiZV91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4O1xuICBsZXQgbiA9IEJ5dGVzLnNldF91dGZfMTZiZV91Y2hhciBiLmJ1ZmZlciBwb3MgdSBpblxuICBpZiBuID0gMFxuICB0aGVuIChyZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4OyBhZGRfdXRmXzE2YmVfdWNoYXIgYiB1KVxuICBlbHNlIChiLnBvc2l0aW9uIDwtIHBvcyArIG4pXG5cbmxldCByZWMgYWRkX3V0Zl8xNmxlX3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl8xNmxlX3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7IGFkZF91dGZfMTZsZV91Y2hhciBiIHUpXG4gIGVsc2UgKGIucG9zaXRpb24gPC0gcG9zICsgbilcblxubGV0IGFkZF9zdWJzdHJpbmcgYiBzIG9mZnNldCBsZW4gPVxuICBpZiBvZmZzZXQgPCAwIHx8IGxlbiA8IDAgfHwgb2Zmc2V0ID4gU3RyaW5nLmxlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYWRkX3N1YnN0cmluZy9hZGRfc3ViYnl0ZXNcIjtcbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIG9mZnNldCBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbjtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9zdWJieXRlcyBiIHMgb2Zmc2V0IGxlbiA9XG4gIGFkZF9zdWJzdHJpbmcgYiAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBzKSBvZmZzZXQgbGVuXG5cbmxldCBhZGRfc3RyaW5nIGIgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIDAgYi5idWZmZXIgYi5wb3NpdGlvbiBsZW47XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfYnl0ZXMgYiBzID0gYWRkX3N0cmluZyBiIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHMpXG5cbmxldCBhZGRfYnVmZmVyIGIgYnMgPVxuICBhZGRfc3ViYnl0ZXMgYiBicy5idWZmZXIgMCBicy5wb3NpdGlvblxuXG4oKiB0aGlzIChwcml2YXRlKSBmdW5jdGlvbiBjb3VsZCBtb3ZlIGludG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgKilcbmxldCByZWFsbHlfaW5wdXRfdXBfdG8gaWMgYnVmIG9mcyBsZW4gPVxuICBsZXQgcmVjIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQgfm9mcyB+dG9fcmVhZCA9XG4gICAgaWYgdG9fcmVhZCA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGlucHV0IGljIGJ1ZiBvZnMgdG9fcmVhZCBpblxuICAgICAgaWYgciA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGFscmVhZHlfcmVhZCA9IGFscmVhZHlfcmVhZCArIHIgaW5cbiAgICAgICAgbGV0IG9mcyA9IG9mcyArIHIgaW5cbiAgICAgICAgbGV0IHRvX3JlYWQgPSB0b19yZWFkIC0gciBpblxuICAgICAgICBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkIH5vZnMgfnRvX3JlYWRcbiAgICAgIGVuZFxuICAgIGVuZFxuICBpbiBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkOjAgfm9mcyB+dG9fcmVhZDpsZW5cblxuXG5sZXQgdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuID1cbiAgaWYgYi5wb3NpdGlvbiArIGxlbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgbGVuO1xuICBsZXQgbiA9IHJlYWxseV9pbnB1dF91cF90byBpYyBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbiBpblxuICAoKiBUaGUgYXNzZXJ0aW9uIGJlbG93IG1heSBmYWlsIGluIHdlaXJkIHNjZW5hcmlvIHdoZXJlXG4gICAgIHRocmVhZGVkL2ZpbmFsaXplciBjb2RlLCBydW4gYXN5bmNocm9ub3VzbHkgZHVyaW5nIHRoZVxuICAgICBbcmVhbGx5X2lucHV0X3VwX3RvXSBjYWxsLCByYWNlcyBvbiB0aGUgYnVmZmVyOyB3ZSBkb24ndCBlbnN1cmVcbiAgICAgY29ycmVjdG5lc3MgaW4gdGhpcyBjYXNlLCBidXQgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgaW52YXJpYW50cyBmb3JcbiAgICAgbWVtb3J5LXNhZmV0eSAoc2VlIGRpc2N1c3Npb24gb2YgW3Jlc2l6ZV0pLiAqKVxuICBhc3NlcnQgKGIucG9zaXRpb24gKyBuIDw9IGIubGVuZ3RoKTtcbiAgYi5wb3NpdGlvbiA8LSBiLnBvc2l0aW9uICsgbjtcbiAgblxuXG5sZXQgYWRkX2NoYW5uZWwgYiBpYyBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IGxlbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuICAgKCogUFIjNTAwNCAqKVxuICAgIGludmFsaWRfYXJnIFwiQnVmZmVyLmFkZF9jaGFubmVsXCI7XG4gIGxldCBuID0gdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuIGluXG4gICgqIEl0IGlzIGludGVudGlvbmFsIHRoYXQgYSBjb25zdW1lciBjYXRjaGluZyBFbmRfb2ZfZmlsZVxuICAgICB3aWxsIHNlZSB0aGUgZGF0YSB3cml0dGVuIChzZWUgIzY3MTksICM3MTM2KS4gKilcbiAgaWYgbiA8IGxlbiB0aGVuIHJhaXNlIEVuZF9vZl9maWxlO1xuICAoKVxuXG5sZXQgb3V0cHV0X2J1ZmZlciBvYyBiID1cbiAgb3V0cHV0IG9jIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxuXG5sZXQgY2xvc2luZyA9IGZ1bmN0aW9uXG4gIHwgJygnIC0+ICcpJ1xuICB8ICd7JyAtPiAnfSdcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4oKiBvcGVuaW5nIGFuZCBjbG9zaW5nOiBvcGVuIGFuZCBjbG9zZSBjaGFyYWN0ZXJzLCB0eXBpY2FsbHkgKCBhbmQgKVxuICAgazogYmFsYW5jZSBvZiBvcGVuaW5nIGFuZCBjbG9zaW5nIGNoYXJzXG4gICBzOiB0aGUgc3RyaW5nIHdoZXJlIHdlIGFyZSBzZWFyY2hpbmdcbiAgIHN0YXJ0OiB0aGUgaW5kZXggd2hlcmUgd2Ugc3RhcnQgdGhlIHNlYXJjaC4gKilcbmxldCBhZHZhbmNlX3RvX2Nsb3Npbmcgb3BlbmluZyBjbG9zaW5nIGsgcyBzdGFydCA9XG4gIGxldCByZWMgYWR2YW5jZSBrIGkgbGltID1cbiAgICBpZiBpID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gICAgaWYgcy5baV0gPSBvcGVuaW5nIHRoZW4gYWR2YW5jZSAoayArIDEpIChpICsgMSkgbGltIGVsc2VcbiAgICBpZiBzLltpXSA9IGNsb3NpbmcgdGhlblxuICAgICAgaWYgayA9IDAgdGhlbiBpIGVsc2UgYWR2YW5jZSAoayAtIDEpIChpICsgMSkgbGltXG4gICAgZWxzZSBhZHZhbmNlIGsgKGkgKyAxKSBsaW0gaW5cbiAgYWR2YW5jZSBrIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMpXG5cbmxldCBhZHZhbmNlX3RvX25vbl9hbHBoYSBzIHN0YXJ0ID1cbiAgbGV0IHJlYyBhZHZhbmNlIGkgbGltID1cbiAgICBpZiBpID49IGxpbSB0aGVuIGxpbSBlbHNlXG4gICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgIHwgJ2EnIC4uICd6JyB8ICdBJyAuLiAnWicgfCAnMCcgLi4gJzknIHwgJ18nIC0+IGFkdmFuY2UgKGkgKyAxKSBsaW1cbiAgICB8IF8gLT4gaSBpblxuICBhZHZhbmNlIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMpXG5cbigqIFdlIGFyZSBqdXN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYW4gaWRlbnQgaW4gcywgc3RhcnRpbmcgYXQgc3RhcnQuICopXG5sZXQgZmluZF9pZGVudCBzIHN0YXJ0IGxpbSA9XG4gIGlmIHN0YXJ0ID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIG1hdGNoIHMuW3N0YXJ0XSB3aXRoXG4gICgqIFBhcmVudGhlc2l6ZWQgaWRlbnQgPyAqKVxuICB8ICcoJyB8ICd7JyBhcyBjIC0+XG4gICAgIGxldCBuZXdfc3RhcnQgPSBzdGFydCArIDEgaW5cbiAgICAgbGV0IHN0b3AgPSBhZHZhbmNlX3RvX2Nsb3NpbmcgYyAoY2xvc2luZyBjKSAwIHMgbmV3X3N0YXJ0IGluXG4gICAgIFN0cmluZy5zdWIgcyBuZXdfc3RhcnQgKHN0b3AgLSBzdGFydCAtIDEpLCBzdG9wICsgMVxuICAoKiBSZWd1bGFyIGlkZW50ICopXG4gIHwgXyAtPlxuICAgICBsZXQgc3RvcCA9IGFkdmFuY2VfdG9fbm9uX2FscGhhIHMgKHN0YXJ0ICsgMSkgaW5cbiAgICAgU3RyaW5nLnN1YiBzIHN0YXJ0IChzdG9wIC0gc3RhcnQpLCBzdG9wXG5cbigqIFN1YnN0aXR1dGUgJGlkZW50LCAkKGlkZW50KSwgb3IgJHtpZGVudH0gaW4gcyxcbiAgICBhY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9uIG1hcHBpbmcgZi4gKilcbmxldCBhZGRfc3Vic3RpdHV0ZSBiIGYgcyA9XG4gIGxldCBsaW0gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBzdWJzdCBwcmV2aW91cyBpID1cbiAgICBpZiBpIDwgbGltIHRoZW4gYmVnaW5cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJyQnIGFzIGN1cnJlbnQgd2hlbiBwcmV2aW91cyA9ICdcXFxcJyAtPlxuICAgICAgICAgYWRkX2NoYXIgYiBjdXJyZW50O1xuICAgICAgICAgc3Vic3QgJyAnIChpICsgMSlcbiAgICAgIHwgJyQnIC0+XG4gICAgICAgICBsZXQgaiA9IGkgKyAxIGluXG4gICAgICAgICBsZXQgaWRlbnQsIG5leHRfaSA9IGZpbmRfaWRlbnQgcyBqIGxpbSBpblxuICAgICAgICAgYWRkX3N0cmluZyBiIChmIGlkZW50KTtcbiAgICAgICAgIHN1YnN0ICcgJyBuZXh0X2lcbiAgICAgIHwgY3VycmVudCB3aGVuIHByZXZpb3VzID09ICdcXFxcJyAtPlxuICAgICAgICAgYWRkX2NoYXIgYiAnXFxcXCc7XG4gICAgICAgICBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCAnICcgKGkgKyAxKVxuICAgICAgfCAnXFxcXCcgYXMgY3VycmVudCAtPlxuICAgICAgICAgc3Vic3QgY3VycmVudCAoaSArIDEpXG4gICAgICB8IGN1cnJlbnQgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgY3VycmVudDtcbiAgICAgICAgIHN1YnN0IGN1cnJlbnQgKGkgKyAxKVxuICAgIGVuZCBlbHNlXG4gICAgaWYgcHJldmlvdXMgPSAnXFxcXCcgdGhlbiBhZGRfY2hhciBiIHByZXZpb3VzIGluXG4gIHN1YnN0ICcgJyAwXG5cbmxldCB0cnVuY2F0ZSBiIGxlbiA9XG4gICAgaWYgbGVuIDwgMCB8fCBsZW4gPiBsZW5ndGggYiB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci50cnVuY2F0ZVwiXG4gICAgZWxzZVxuICAgICAgYi5wb3NpdGlvbiA8LSBsZW5cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBiID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgKCogTm90ZSB0aGF0IGIucG9zaXRpb24gaXMgbm90IGEgY29uc3RhbnQgYW5kIGNhbm5vdCBiZSBsaWZ0ZWQgb3V0IG9mIGF1eCAqKVxuICAgIGlmIGkgPj0gYi5wb3NpdGlvbiB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmZXIgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgYiA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICgqIE5vdGUgdGhhdCBiLnBvc2l0aW9uIGlzIG5vdCBhIGNvbnN0YW50IGFuZCBjYW5ub3QgYmUgbGlmdGVkIG91dCBvZiBhdXggKilcbiAgICBpZiBpID49IGIucG9zaXRpb24gdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZmVyIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgYWRkX3NlcSBiIHNlcSA9IFNlcS5pdGVyIChhZGRfY2hhciBiKSBzZXFcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGIgPSBjcmVhdGUgMzIgaW5cbiAgYWRkX3NlcSBiIGk7XG4gIGJcblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDE2IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQxNnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQzMiA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQzMnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ2NCA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NHVcIlxuZXh0ZXJuYWwgc3dhcDE2IDogaW50IC0+IGludCA9IFwiJWJzd2FwMTZcIlxuZXh0ZXJuYWwgc3dhcDMyIDogaW50MzIgLT4gaW50MzIgPSBcIiVic3dhcF9pbnQzMlwiXG5leHRlcm5hbCBzd2FwNjQgOiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWJzd2FwX2ludDY0XCJcblxuXG5sZXQgYWRkX2ludDggYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyAxIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMTtcbiAgdW5zYWZlX3NldF9pbnQ4IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDIgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiAyO1xuICB1bnNhZmVfc2V0X2ludDE2IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQzMl9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDQgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA0O1xuICB1bnNhZmVfc2V0X2ludDMyIGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQ2NF9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDggaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA4O1xuICB1bnNhZmVfc2V0X2ludDY0IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9sZSBiIHggPVxuICBhZGRfaW50MTZfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50MTZfYmUgYiB4ID1cbiAgYWRkX2ludDE2X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXAxNiB4KVxuXG5sZXQgYWRkX2ludDMyX2xlIGIgeCA9XG4gIGFkZF9pbnQzMl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQzMl9iZSBiIHggPVxuICBhZGRfaW50MzJfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDMyIHgpXG5cbmxldCBhZGRfaW50NjRfbGUgYiB4ID1cbiAgYWRkX2ludDY0X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDY0X2JlIGIgeCA9XG4gIGFkZF9pbnQ2NF9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwNjQgeClcblxubGV0IGFkZF91aW50OCA9IGFkZF9pbnQ4XG5sZXQgYWRkX3VpbnQxNl9uZSA9IGFkZF9pbnQxNl9uZVxubGV0IGFkZF91aW50MTZfbGUgPSBhZGRfaW50MTZfbGVcbmxldCBhZGRfdWludDE2X2JlID0gYWRkX2ludDE2X2JlXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVub2l0IFZhdWdvbiwgRU5TVEEgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICgqIFRvb2xzIHRvIG1hbmlwdWxhdGUgc2Nhbm5pbmcgc2V0IG9mIGNoYXJzIChzZWUgJVsuLi5dKSAqKVxuXG50eXBlIG11dGFibGVfY2hhcl9zZXQgPSBieXRlc1xuXG4oKiBDcmVhdGUgYSBmcmVzaCwgZW1wdHksIG11dGFibGUgY2hhciBzZXQuICopXG5sZXQgY3JlYXRlX2NoYXJfc2V0ICgpID0gQnl0ZXMubWFrZSAzMiAnXFwwMDAnXG5cbigqIEFkZCBhIGNoYXIgaW4gYSBtdXRhYmxlIGNoYXIgc2V0LiAqKVxubGV0IGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCBjID1cbiAgbGV0IGluZCA9IGludF9vZl9jaGFyIGMgaW5cbiAgbGV0IHN0cl9pbmQgPSBpbmQgbHNyIDMgYW5kIG1hc2sgPSAxIGxzbCAoaW5kIGxhbmQgMGIxMTEpIGluXG4gIEJ5dGVzLnNldCBjaGFyX3NldCBzdHJfaW5kXG4gICAgKGNoYXJfb2ZfaW50IChpbnRfb2ZfY2hhciAoQnl0ZXMuZ2V0IGNoYXJfc2V0IHN0cl9pbmQpIGxvciBtYXNrKSlcblxubGV0IGZyZWV6ZV9jaGFyX3NldCBjaGFyX3NldCA9XG4gIEJ5dGVzLnRvX3N0cmluZyBjaGFyX3NldFxuXG4oKiBDb21wdXRlIHRoZSBjb21wbGVtZW50IG9mIGEgY2hhciBzZXQuICopXG5sZXQgcmV2X2NoYXJfc2V0IGNoYXJfc2V0ID1cbiAgbGV0IGNoYXJfc2V0JyA9IGNyZWF0ZV9jaGFyX3NldCAoKSBpblxuICBmb3IgaSA9IDAgdG8gMzEgZG9cbiAgICBCeXRlcy5zZXQgY2hhcl9zZXQnIGlcbiAgICAgIChjaGFyX29mX2ludCAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgaSkgbHhvciAweEZGKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgY2hhcl9zZXQnXG5cbigqIFJldHVybiB0cnVlIGlmIGEgYGMnIGlzIGluIGBjaGFyX3NldCcuICopXG5sZXQgaXNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYyA9XG4gIGxldCBpbmQgPSBpbnRfb2ZfY2hhciBjIGluXG4gIGxldCBzdHJfaW5kID0gaW5kIGxzciAzIGFuZCBtYXNrID0gMSBsc2wgKGluZCBsYW5kIDBiMTExKSBpblxuICAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgc3RyX2luZCkgbGFuZCBtYXNrKSA8PiAwXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAoKiBJZ25vcmVkIHBhcmFtIGNvbnZlcnNpb24gKilcblxuKCogR0FEVCB1c2VkIHRvIGFic3RyYWN0IGFuIGV4aXN0ZW50aWFsIHR5cGUgcGFyYW1ldGVyLiAqKVxuKCogU2VlIHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdC4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmIgPSBQYXJhbV9mb3JtYXRfRUJCIDpcbiAgICAoJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmJcblxuKCogQ29tcHV0ZSBhIHBhZGRpbmcgYXNzb2NpYXRlZCB0byBhIHBhZF9vcHRpb24gKHNlZSBcIiVfNDJkXCIpLiAqKVxubGV0IHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5vX3BhZGRpbmdcbiAgfCBTb21lIHdpZHRoIC0+IExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpXG5cbigqIENvbXB1dGUgYSBwcmVjaXNpb24gYXNzb2NpYXRlZCB0byBhIHByZWNfb3B0aW9uIChzZWUgXCIlXy40MmZcIikuICopXG5sZXQgcHJlY19vZl9wcmVjX29wdCBwcmVjX29wdCA9IG1hdGNoIHByZWNfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5vX3ByZWNpc2lvblxuICB8IFNvbWUgbmRlYyAtPiBMaXRfcHJlY2lzaW9uIG5kZWNcblxuKCogVHVybiBhbiBpZ25vcmVkIHBhcmFtIGludG8gaXRzIGVxdWl2YWxlbnQgbm90LWlnbm9yZWQgZm9ybWF0IG5vZGUuICopXG4oKiBVc2VkIGZvciBmb3JtYXQgcHJldHR5LXByaW50aW5nIGFuZCBTY2FuZi4gKilcbmxldCBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQgOiB0eXBlIGEgYiBjIGQgZSBmIHggeSAuXG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT4gKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhcmFtX2Zvcm1hdF9lYmIgPVxuZnVuIGlnbiBmbXQgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDaGFyIGZtdClcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKENhbWxfY2hhciBmbXQpXG4gIHwgSWdub3JlZF9zdHJpbmcgcGFkX29wdCAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFN0cmluZyAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIHBhZF9vcHQgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDYW1sX3N0cmluZyAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2ludCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoSW50IChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfaW50MzIgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChJbnQzMiAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKE5hdGl2ZWludCAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX2ludDY0IChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoSW50NjQgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9mbG9hdCAocGFkX29wdCwgcHJlY19vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEZsb2F0ICgoRmxvYXRfZmxhZ18sIEZsb2F0X2YpLFxuICAgICAgICAgICAgICBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBwcmVjX29mX3ByZWNfb3B0IHByZWNfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfYm9vbCBwYWRfb3B0IC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQm9vbCAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCBmbXQpKVxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgZm10KSlcbiAgfCBJZ25vcmVkX3JlYWRlciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFJlYWRlciBmbXQpXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdCkpXG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXQpKVxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX25leHRfY2hhciBmbXQpXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFR5cGVzICopXG5cbnR5cGUgKCdiLCAnYykgYWNjX2Zvcm1hdHRpbmdfZ2VuID1cbiAgfCBBY2Nfb3Blbl90YWcgb2YgKCdiLCAnYykgYWNjXG4gIHwgQWNjX29wZW5fYm94IG9mICgnYiwgJ2MpIGFjY1xuXG4oKiBSZXZlcnNlZCBsaXN0IG9mIHByaW50aW5nIGF0b21zLiAqKVxuKCogVXNlZCB0byBhY2N1bXVsYXRlIHByaW50ZiBhcmd1bWVudHMuICopXG5hbmQgKCdiLCAnYykgYWNjID1cbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgb2YgKCdiLCAnYykgYWNjICogZm9ybWF0dGluZ19saXRcbiAgICAgICgqIFNwZWNpYWwgZm10dGluZyAoYm94KSAqKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiBvZiAoJ2IsICdjKSBhY2MgKiAoJ2IsICdjKSBhY2NfZm9ybWF0dGluZ19nZW5cbiAgICAgICgqIFNwZWNpYWwgZm10dGluZyAoYm94KSAqKVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmcgICAgICgqIExpdGVyYWwgc3RyaW5nICopXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAgIG9mICgnYiwgJ2MpIGFjYyAqIGNoYXIgICAgICAgKCogTGl0ZXJhbCBjaGFyICopXG4gIHwgQWNjX2RhdGFfc3RyaW5nICAgIG9mICgnYiwgJ2MpIGFjYyAqIHN0cmluZyAgICAgKCogR2VuZXJhdGVkIHN0cmluZyAqKVxuICB8IEFjY19kYXRhX2NoYXIgICAgICBvZiAoJ2IsICdjKSBhY2MgKiBjaGFyICAgICAgICgqIEdlbmVyYXRlZCBjaGFyICopXG4gIHwgQWNjX2RlbGF5ICAgICAgICAgIG9mICgnYiwgJ2MpIGFjYyAqICgnYiAtPiAnYylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIERlbGF5ZWQgcHJpbnRpbmcgKCVhLCAldCkgKilcbiAgfCBBY2NfZmx1c2ggICAgICAgICAgb2YgKCdiLCAnYykgYWNjICAgICAgICAgICAgICAoKiBGbHVzaCAqKVxuICB8IEFjY19pbnZhbGlkX2FyZyAgICBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmdcbiAgICAgICgqIFJhaXNlIEludmFsaWRfYXJndW1lbnQgbXNnICopXG4gIHwgRW5kX29mX2FjY1xuXG4oKiBMaXN0IG9mIGhldGVyb2dlbmVvdXMgdmFsdWVzLiAqKVxuKCogVXNlZCB0byBhY2N1bXVsYXRlIHNjYW5mIGNhbGxiYWNrIGFyZ3VtZW50cy4gKilcbnR5cGUgKCdhLCAnYikgaGV0ZXJfbGlzdCA9XG4gIHwgQ29ucyA6ICdjICogKCdhLCAnYikgaGV0ZXJfbGlzdCAtPiAoJ2MgLT4gJ2EsICdiKSBoZXRlcl9saXN0XG4gIHwgTmlsIDogKCdiLCAnYikgaGV0ZXJfbGlzdFxuXG4oKiBFeGlzdGVudGlhbCBCbGFjayBCb3hlcy4gKilcbigqIFVzZWQgdG8gYWJzdHJhY3Qgc29tZSBleGlzdGVudGlhbCB0eXBlIHBhcmFtZXRlcnMuICopXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcgYW5kIGFuIGZtdHR5LiAqKVxuKCogU2VlIHRoZSB0eXBlX3BhZGRpbmcgZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRkaW5nX2ZtdHR5X2ViYiA9IFBhZGRpbmdfZm10dHlfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkZGluZ19mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGFuIGZtdHR5LiAqKVxuKCogU2VlIHRoZSB0eXBlX3BhZHByZWMgZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRwcmVjX2ZtdHR5X2ViYiA9IFBhZHByZWNfZm10dHlfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ3opIHByZWNpc2lvbiAqICgneiwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkcHJlY19mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZyBhbmQgYW4gZm10LiAqKVxuKCogU2VlIG1ha2VfcGFkZGluZ19mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2UsICdmKSBwYWRkaW5nX2ZtdF9lYmIgPSBQYWRkaW5nX2ZtdF9FQkIgOlxuICAgICAoXywgJ3ggLT4gJ2EpIHBhZGRpbmcgKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZSwgJ2YpIHBhZGRpbmdfZm10X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwcmVjaXNpb24gYW5kIGFuIGZtdC4gKilcbigqIFNlZSBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2UsICdmKSBwcmVjaXNpb25fZm10X2ViYiA9IFByZWNpc2lvbl9mbXRfRUJCIDpcbiAgICAgKF8sICd4IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZSwgJ2YpIHByZWNpc2lvbl9mbXRfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhbiBmbXQuICopXG4oKiBTZWUgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgYW5kIHBhcnNlX2Zvcm1hdCBmdW5jdGlvbnMuICopXG50eXBlICgncCwgJ2IsICdjLCAnZSwgJ2YpIHBhZHByZWNfZm10X2ViYiA9IFBhZHByZWNfZm10X0VCQiA6XG4gICAgICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksICdwIC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgncCwgJ2IsICdjLCAnZSwgJ2YpIHBhZHByZWNfZm10X2ViYlxuXG4oKiBBYnN0cmFjdCB0aGUgJ2EgYW5kICdkIHBhcmFtZXRlcnMgb2YgYW4gZm10LiAqKVxuKCogT3V0cHV0IHR5cGUgb2YgdGhlIGZvcm1hdCBwYXJzaW5nIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2IsICdjLCAnZSwgJ2YpIGZtdF9lYmIgPSBGbXRfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ2IsICdjLCAnZSwgJ2YpIGZtdF9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGFuIGZtdHR5IGFuZCBhbiBmbXQuICopXG4oKiBTZWUgdGhlIHR5cGVfZm9ybWF0X2dlbiBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdF9mbXR0eV9lYmIgPSBGbXRfZm10dHlfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGZtdCAqXG4gICAgICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10X2ZtdHR5X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYW4gZm10dHkgYW5kIGFuIGZtdC4gKilcbigqIFNlZSB0aGUgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9mbXRfZWJiID0gRm10dHlfZm10X0VCQiA6XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBmbXR0eSAqXG4gICAgICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXRfZm10dHlfZWJiIC0+XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9mbXRfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBmbXR0eSB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgZm9ybWF0IHR5cGVzLiAqKVxudHlwZSBmbXR0eV9lYmIgPSBGbXR0eV9FQkIgOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT4gZm10dHlfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBwYWRkaW5nIHR5cGUgcGFyYW1ldGVycy4gKilcbigqIFVzZWQgdG8gY29tcGFyZSBwYWRkaW5ncy4gKilcbnR5cGUgcGFkZGluZ19lYmIgPSBQYWRkaW5nX0VCQiA6ICgnYSwgJ2IpIHBhZGRpbmcgLT4gcGFkZGluZ19lYmJcblxuKCogQWJzdHJhY3QgYWxsIHByZWNpc2lvbiB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgcHJlY2lzaW9ucy4gKilcbnR5cGUgcHJlY2lzaW9uX2ViYiA9IFByZWNpc2lvbl9FQkIgOiAoJ2EsICdiKSBwcmVjaXNpb24gLT4gcHJlY2lzaW9uX2ViYlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIENvbnN0YW50cyAqKVxuXG4oKiBEZWZhdWx0IHByZWNpc2lvbiBmb3IgZmxvYXQgcHJpbnRpbmcuICopXG5sZXQgZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYgPVxuICBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HIHwgRmxvYXRfaCB8IEZsb2F0X0hcbiAgfCBGbG9hdF9DRiAtPiAtNlxuICAoKiBGb3IgJWggJUggYW5kICUjRiBmb3JtYXRzLCBhIG5lZ2F0aXZlIHByZWNpc2lvbiBtZWFucyBcImFzIG1hbnkgZGlnaXRzIGFzXG4gICAgIG5lY2Vzc2FyeVwiLiAgRm9yIHRoZSBvdGhlciBGUCBmb3JtYXRzLCB3ZSB0YWtlIHRoZSBhYnNvbHV0ZSB2YWx1ZVxuICAgICBvZiB0aGUgcHJlY2lzaW9uLCBoZW5jZSA2IGRpZ2l0cyBieSBkZWZhdWx0LiAqKVxuICB8IEZsb2F0X0YgLT4gMTJcbiAgKCogRGVmYXVsdCBwcmVjaXNpb24gZm9yIE9DYW1sIGZsb2F0IHByaW50aW5nICglRikuICopXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRXh0ZXJuYWxzICopXG5cbmV4dGVybmFsIGZvcm1hdF9mbG9hdDogc3RyaW5nIC0+IGZsb2F0IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9mb3JtYXRfZmxvYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5leHRlcm5hbCBmb3JtYXRfaW50MzI6IHN0cmluZyAtPiBpbnQzMiAtPiBzdHJpbmdcbiAgPSBcImNhbWxfaW50MzJfZm9ybWF0XCJcbmV4dGVybmFsIGZvcm1hdF9uYXRpdmVpbnQ6IHN0cmluZyAtPiBuYXRpdmVpbnQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX25hdGl2ZWludF9mb3JtYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDY0OiBzdHJpbmcgLT4gaW50NjQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2ludDY0X2Zvcm1hdFwiXG5leHRlcm5hbCBoZXhzdHJpbmdfb2ZfZmxvYXQ6IGZsb2F0IC0+IGludCAtPiBjaGFyIC0+IHN0cmluZ1xuICA9IFwiY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXRcIlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgKCogVG9vbHMgdG8gcHJldHR5LXByaW50IGZvcm1hdHMgKilcblxuKCogVHlwZSBvZiBleHRlbnNpYmxlIGNoYXJhY3RlciBidWZmZXJzLiAqKVxudHlwZSBidWZmZXIgPSB7XG4gIG11dGFibGUgaW5kIDogaW50O1xuICBtdXRhYmxlIGJ5dGVzIDogYnl0ZXM7XG59XG5cbigqIENyZWF0ZSBhIGZyZXNoIGJ1ZmZlci4gKilcbmxldCBidWZmZXJfY3JlYXRlIGluaXRfc2l6ZSA9IHsgaW5kID0gMDsgYnl0ZXMgPSBCeXRlcy5jcmVhdGUgaW5pdF9zaXplIH1cblxuKCogQ2hlY2sgc2l6ZSBvZiB0aGUgYnVmZmVyIGFuZCBncm93IGl0IGlmIG5lZWRlZC4gKilcbmxldCBidWZmZXJfY2hlY2tfc2l6ZSBidWYgb3ZlcmhlYWQgPVxuICBsZXQgbGVuID0gQnl0ZXMubGVuZ3RoIGJ1Zi5ieXRlcyBpblxuICBsZXQgbWluX2xlbiA9IGJ1Zi5pbmQgKyBvdmVyaGVhZCBpblxuICBpZiBtaW5fbGVuID4gbGVuIHRoZW4gKFxuICAgIGxldCBuZXdfbGVuID0gSW50Lm1heCAobGVuICogMikgbWluX2xlbiBpblxuICAgIGxldCBuZXdfc3RyID0gQnl0ZXMuY3JlYXRlIG5ld19sZW4gaW5cbiAgICBCeXRlcy5ibGl0IGJ1Zi5ieXRlcyAwIG5ld19zdHIgMCBsZW47XG4gICAgYnVmLmJ5dGVzIDwtIG5ld19zdHI7XG4gIClcblxuKCogQWRkIHRoZSBjaGFyYWN0ZXIgYGMnIHRvIHRoZSBidWZmZXIgYGJ1ZicuICopXG5sZXQgYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjID1cbiAgYnVmZmVyX2NoZWNrX3NpemUgYnVmIDE7XG4gIEJ5dGVzLnNldCBidWYuYnl0ZXMgYnVmLmluZCBjO1xuICBidWYuaW5kIDwtIGJ1Zi5pbmQgKyAxXG5cbigqIEFkZCB0aGUgc3RyaW5nIGBzJyB0byB0aGUgYnVmZmVyIGBidWYnLiAqKVxubGV0IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBzID1cbiAgbGV0IHN0cl9sZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgYnVmZmVyX2NoZWNrX3NpemUgYnVmIHN0cl9sZW47XG4gIFN0cmluZy5ibGl0IHMgMCBidWYuYnl0ZXMgYnVmLmluZCBzdHJfbGVuO1xuICBidWYuaW5kIDwtIGJ1Zi5pbmQgKyBzdHJfbGVuXG5cbigqIEdldCB0aGUgY29udGVudCBvZiB0aGUgYnVmZmVyLiAqKVxubGV0IGJ1ZmZlcl9jb250ZW50cyBidWYgPVxuICBCeXRlcy5zdWJfc3RyaW5nIGJ1Zi5ieXRlcyAwIGJ1Zi5pbmRcblxuKCoqKilcblxuKCogQ29udmVydCBhbiBpbnRlZ2VyIGNvbnZlcnNpb24gdG8gY2hhci4gKilcbmxldCBjaGFyX29mX2ljb252IGljb252ID0gbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9kIHwgSW50X3BkIHwgSW50X3NkIHwgSW50X0NkIC0+ICdkJyB8IEludF9pIHwgSW50X3BpIHwgSW50X3NpXG4gIHwgSW50X0NpIC0+ICdpJyB8IEludF94IHwgSW50X0N4IC0+ICd4JyB8IEludF9YIHwgSW50X0NYIC0+ICdYJyB8IEludF9vXG4gIHwgSW50X0NvIC0+ICdvJyB8IEludF91IHwgSW50X0N1IC0+ICd1J1xuXG4oKiBDb252ZXJ0IGEgZmxvYXQgY29udmVyc2lvbiB0byBjaGFyLiAqKVxuKCogYGNGJyB3aWxsIGJlICdGJyBmb3IgZGlzcGxheWluZyBmb3JtYXQgYW5kICdnJyB0byBjYWxsIGxpYmMgcHJpbnRmICopXG5sZXQgY2hhcl9vZl9mY29udiA/KGNGPSdGJykgZmNvbnYgPSBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2YgLT4gJ2YnIHwgRmxvYXRfZSAtPiAnZSdcbiAgfCBGbG9hdF9FIC0+ICdFJyB8IEZsb2F0X2cgLT4gJ2cnXG4gIHwgRmxvYXRfRyAtPiAnRycgfCBGbG9hdF9GIC0+IGNGXG4gIHwgRmxvYXRfaCAtPiAnaCcgfCBGbG9hdF9IIC0+ICdIJ1xuICB8IEZsb2F0X0NGIC0+ICdGJ1xuXG5cbigqIENvbnZlcnQgYSBzY2FubmluZyBjb3VudGVyIHRvIGNoYXIuICopXG5sZXQgY2hhcl9vZl9jb3VudGVyIGNvdW50ZXIgPSBtYXRjaCBjb3VudGVyIHdpdGhcbiAgfCBMaW5lX2NvdW50ZXIgIC0+ICdsJ1xuICB8IENoYXJfY291bnRlciAgLT4gJ24nXG4gIHwgVG9rZW5fY291bnRlciAtPiAnTidcblxuKCoqKilcblxuKCogUHJpbnQgYSBjaGFyX3NldCBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBPQ2FtbCBmb3JtYXQgbGV4aWNhbCBjb252ZW50aW9uLiAqKVxubGV0IGJwcmludF9jaGFyX3NldCBidWYgY2hhcl9zZXQgPVxuICBsZXQgcmVjIHByaW50X3N0YXJ0IHNldCA9XG4gICAgbGV0IGlzX2Fsb25lIGMgPVxuICAgICAgbGV0IGJlZm9yZSwgYWZ0ZXIgPSBDaGFyLihjaHIgKGNvZGUgYyAtIDEpLCBjaHIgKGNvZGUgYyArIDEpKSBpblxuICAgICAgaXNfaW5fY2hhcl9zZXQgc2V0IGNcbiAgICAgICYmIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IGJlZm9yZSAmJiBpc19pbl9jaGFyX3NldCBzZXQgYWZ0ZXIpIGluXG4gICAgaWYgaXNfYWxvbmUgJ10nIHRoZW4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXSc7XG4gICAgcHJpbnRfb3V0IHNldCAxO1xuICAgIGlmIGlzX2Fsb25lICctJyB0aGVuIGJ1ZmZlcl9hZGRfY2hhciBidWYgJy0nO1xuICBhbmQgcHJpbnRfb3V0IHNldCBpID1cbiAgICBpZiBpIDwgMjU2IHRoZW5cbiAgICAgIGlmIGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgaSkgdGhlbiBwcmludF9maXJzdCBzZXQgaVxuICAgICAgZWxzZSBwcmludF9vdXQgc2V0IChpICsgMSlcbiAgYW5kIHByaW50X2ZpcnN0IHNldCBpID1cbiAgICBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICB8ICdcXDI1NScgLT4gcHJpbnRfY2hhciBidWYgMjU1O1xuICAgIHwgJ10nIHwgJy0nIC0+IHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICB8IF8gLT4gcHJpbnRfc2Vjb25kIHNldCAoaSArIDEpO1xuICBhbmQgcHJpbnRfc2Vjb25kIHNldCBpID1cbiAgICBpZiBpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGkpIHRoZW5cbiAgICAgIG1hdGNoIGNoYXJfb2ZfaW50IGkgd2l0aFxuICAgICAgfCAnXFwyNTUnIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIDI1NDtcbiAgICAgICAgcHJpbnRfY2hhciBidWYgMjU1O1xuICAgICAgfCAnXScgfCAnLScgd2hlbiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgKGkgKyAxKSkpIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIChpIC0gMSk7XG4gICAgICAgIHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICAgIHwgXyB3aGVuIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCAoaSArIDEpKSkgLT5cbiAgICAgICAgcHJpbnRfY2hhciBidWYgKGkgLSAxKTtcbiAgICAgICAgcHJpbnRfY2hhciBidWYgaTtcbiAgICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDIpO1xuICAgICAgfCBfIC0+XG4gICAgICAgIHByaW50X2luIHNldCAoaSAtIDEpIChpICsgMik7XG4gICAgZWxzZSAoXG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaSAtIDEpO1xuICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDEpO1xuICAgIClcbiAgYW5kIHByaW50X2luIHNldCBpIGogPVxuICAgIGlmIGogPSAyNTYgfHwgbm90IChpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGopKSB0aGVuIChcbiAgICAgIHByaW50X2NoYXIgYnVmIGk7XG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaW50X29mX2NoYXIgJy0nKTtcbiAgICAgIHByaW50X2NoYXIgYnVmIChqIC0gMSk7XG4gICAgICBpZiBqIDwgMjU2IHRoZW4gcHJpbnRfb3V0IHNldCAoaiArIDEpO1xuICAgICkgZWxzZVxuICAgICAgcHJpbnRfaW4gc2V0IGkgKGogKyAxKTtcbiAgYW5kIHByaW50X2NoYXIgYnVmIGkgPSBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICB8ICclJyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gICAgfCAnQCcgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0AnO1xuICAgIHwgYyAgIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgYztcbiAgaW5cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnWyc7XG4gIHByaW50X3N0YXJ0IChcbiAgICBpZiBpc19pbl9jaGFyX3NldCBjaGFyX3NldCAnXFwwMDAnXG4gICAgdGhlbiAoIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ14nOyByZXZfY2hhcl9zZXQgY2hhcl9zZXQgKVxuICAgIGVsc2UgY2hhcl9zZXRcbiAgKTtcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXSdcblxuKCoqKilcblxuKCogUHJpbnQgYSBwYWR0eSBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eSA9IG1hdGNoIHBhZHR5IHdpdGhcbiAgfCBMZWZ0ICAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICctJ1xuICB8IFJpZ2h0IC0+ICgpXG4gIHwgWmVyb3MgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnMCdcblxuKCogUHJpbnQgdGhlICdfJyBvZiBhbiBpZ25vcmVkIGZsYWcgaWYgbmVlZGVkLiAqKVxubGV0IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnID1cbiAgaWYgaWduX2ZsYWcgdGhlbiBidWZmZXJfYWRkX2NoYXIgYnVmICdfJ1xuXG4oKioqKVxuXG5sZXQgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB3aWR0aCAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgd2lkdGgpXG5cbigqKiopXG5cbigqIFByaW50IHBhZGRpbmcgaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wYWRkaW5nIDogdHlwZSBhIGIgLiBidWZmZXIgLT4gKGEsIGIpIHBhZGRpbmcgLT4gdW5pdCA9XG5mdW4gYnVmIHBhZCAtPiBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgLT4gKClcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIG4pIC0+XG4gICAgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgbik7XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHkgLT5cbiAgICBicHJpbnRfcGFkdHkgYnVmIHBhZHR5O1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyonXG5cbigqIFByaW50IHByZWNpc2lvbiBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3ByZWNpc2lvbiA6IHR5cGUgYSBiIC4gYnVmZmVyIC0+IChhLCBiKSBwcmVjaXNpb24gLT4gdW5pdCA9XG4gIGZ1biBidWYgcHJlYyAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgfCBOb19wcmVjaXNpb24gLT4gKClcbiAgfCBMaXRfcHJlY2lzaW9uIG4gLT5cbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcuJztcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgbik7XG4gIHwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIi4qXCJcblxuKCoqKilcblxuKCogUHJpbnQgdGhlIG9wdGlvbmFsICcrJywgJyAnIG9yICcjJyBhc3NvY2lhdGVkIHRvIGFuIGludCBjb252ZXJzaW9uLiAqKVxubGV0IGJwcmludF9pY29udl9mbGFnIGJ1ZiBpY29udiA9IG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfcGQgfCBJbnRfcGkgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKydcbiAgfCBJbnRfc2QgfCBJbnRfc2kgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnICdcbiAgfCBJbnRfQ3ggfCBJbnRfQ1ggfCBJbnRfQ28gfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyMnXG4gIHwgSW50X2QgfCBJbnRfaSB8IEludF94IHwgSW50X1ggfCBJbnRfbyB8IEludF91IC0+ICgpXG5cbigqIFByaW50IGFuIGNvbXBsZXRlIGludCBmb3JtYXQgaW4gYSBidWZmZXIgKGV4OiBcIiUzLipkXCIpLiAqKVxubGV0IGJwcmludF9pbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2ljb252X2ZsYWcgYnVmIGljb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2ljb252IGljb252KVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQgZm9ybWF0IGluIGEgYnVmZmVyLiAqKVxubGV0IGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyBjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfaWNvbnZfZmxhZyBidWYgaWNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9pY29udiBpY29udilcblxuKCoqKilcblxuKCogUHJpbnQgdGhlIG9wdGlvbmFsICcrJywgJyAnIGFuZC9vciAnIycgYXNzb2NpYXRlZCB0byBhIGZsb2F0IGNvbnZlcnNpb24uICopXG5sZXQgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252ID1cbiAgYmVnaW4gbWF0Y2ggZnN0IGZjb252IHdpdGhcbiAgfCBGbG9hdF9mbGFnX3AgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKydcbiAgfCBGbG9hdF9mbGFnX3MgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnICdcbiAgfCBGbG9hdF9mbGFnXyAtPiAoKSBlbmQ7XG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfQ0YgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnIydcbiAgfCBGbG9hdF9mIHwgRmxvYXRfZSB8IEZsb2F0X0UgfCBGbG9hdF9nIHwgRmxvYXRfR1xuICB8IEZsb2F0X0YgfCBGbG9hdF9oIHwgRmxvYXRfSCAtPiAoKVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZsb2F0IGZvcm1hdCBpbiBhIGJ1ZmZlciAoZXg6IFwiJSsqLjNmXCIpLiAqKVxubGV0IGJwcmludF9mbG9hdF9mbXQgYnVmIGlnbl9mbGFnIGZjb252IHBhZCBwcmVjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfZmNvbnYgZmNvbnYpXG5cbigqIENvbXB1dGUgdGhlIGxpdGVyYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgRm9ybWF0dGluZ19saXQuICopXG4oKiBVc2VkIGJ5IFByaW50ZiBhbmQgU2NhbmYgd2hlcmUgZm9ybWF0dGluZyBpcyBub3QgaW50ZXJwcmV0ZWQuICopXG5sZXQgc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZvcm1hdHRpbmdfbGl0ID0gbWF0Y2ggZm9ybWF0dGluZ19saXQgd2l0aFxuICB8IENsb3NlX2JveCAgICAgICAgICAgIC0+IFwiQF1cIlxuICB8IENsb3NlX3RhZyAgICAgICAgICAgIC0+IFwiQH1cIlxuICB8IEJyZWFrIChzdHIsIF8sIF8pICAgIC0+IHN0clxuICB8IEZGbHVzaCAgICAgICAgICAgICAgIC0+IFwiQD9cIlxuICB8IEZvcmNlX25ld2xpbmUgICAgICAgIC0+IFwiQFxcblwiXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgLT4gXCJALlwiXG4gIHwgTWFnaWNfc2l6ZSAoc3RyLCBfKSAgLT4gc3RyXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgLT4gXCJAQFwiXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgLT4gXCJAJVwiXG4gIHwgU2Nhbl9pbmRpYyBjIC0+IFwiQFwiIF4gKFN0cmluZy5tYWtlIDEgYylcblxuKCoqKilcblxuKCogUHJpbnQgYSBsaXRlcmFsIGNoYXIgaW4gYSBidWZmZXIsIGVzY2FwZSAnJScgYnkgXCIlJVwiLiAqKVxubGV0IGJwcmludF9jaGFyX2xpdGVyYWwgYnVmIGNociA9IG1hdGNoIGNociB3aXRoXG4gIHwgJyUnIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUlXCJcbiAgfCBfIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgY2hyXG5cbigqIFByaW50IGEgbGl0ZXJhbCBzdHJpbmcgaW4gYSBidWZmZXIsIGVzY2FwZSBhbGwgJyUnIGJ5IFwiJSVcIi4gKilcbmxldCBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIHN0ciA9XG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHN0ciAtIDEgZG9cbiAgICBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBzdHIuW2ldXG4gIGRvbmVcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHByZXR0eS1wcmludGluZyAqKVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZvcm1hdCB0eXBlIChhbiBmbXR0eSkgaW4gYSBidWZmZXIuICopXG5sZXQgcmVjIGJwcmludF9mbXR0eSA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgLlxuICAgIGJ1ZmZlciAtPiAoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCkgZm10dHlfcmVsIC0+IHVuaXQgPVxuZnVuIGJ1ZiBmbXR0eSAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0ICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWNcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlc1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludF90eSByZXN0ICAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVpXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgSW50MzJfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWxpXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlbmlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludDY0X3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVMaVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgRmxvYXRfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWZcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBCb29sX3R5IHJlc3QgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlQlwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEFscGhhX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVhXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgVGhldGFfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXRcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBBbnlfdHkgcmVzdCAgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlP1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IFJlYWRlcl90eSByZXN0ICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVyXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJV9yXCI7XG4gICAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgRm9ybWF0X2FyZ190eSAoc3ViX2ZtdHR5LCByZXN0KSAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV7XCI7IGJwcmludF9mbXR0eSBidWYgc3ViX2ZtdHR5O1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV9XCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHN1Yl9mbXR0eSwgXywgcmVzdCkgLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlKFwiOyBicHJpbnRfZm10dHkgYnVmIHN1Yl9mbXR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlKVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBFbmRfb2ZfZm10dHkgLT4gKClcblxuKCoqKilcblxubGV0IHJlYyBpbnRfb2ZfY3VzdG9tX2FyaXR5IDogdHlwZSBhIGIgYyAuXG4gIChhLCBiLCBjKSBjdXN0b21fYXJpdHkgLT4gaW50ID1cbiAgZnVuY3Rpb25cbiAgfCBDdXN0b21femVybyAtPiAwXG4gIHwgQ3VzdG9tX3N1Y2MgeCAtPiAxICsgaW50X29mX2N1c3RvbV9hcml0eSB4XG5cbigqIFByaW50IGEgY29tcGxldGUgZm9ybWF0IGluIGEgYnVmZmVyLiAqKVxubGV0IGJwcmludF9mbXQgYnVmIGZtdCA9XG4gIGxldCByZWMgZm10aXRlciA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBib29sIC0+IHVuaXQgPVxuICBmdW4gZm10IGlnbl9mbGFnIC0+IG1hdGNoIGZtdCB3aXRoXG4gICAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3MnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ1MnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfaW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWM7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyAnbCc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ24nO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ0wnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfZmxvYXRfZm10IGJ1ZiBpZ25fZmxhZyBmY29udiBwYWQgcHJlYztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgQ2hhciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdjJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0MnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdCJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEFscGhhIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ2EnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBUaGV0YSByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICd0JzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ3VzdG9tIChhcml0eSwgXywgcmVzdCkgLT5cbiAgICAgIGZvciBfaSA9IDEgdG8gaW50X29mX2N1c3RvbV9hcml0eSBhcml0eSBkb1xuICAgICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJz8nO1xuICAgICAgZG9uZTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFJlYWRlciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdyJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRmx1c2ggcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJSFcIjtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcblxuICAgIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgc3RyO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuICAgIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBjaHI7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3snO1xuICAgICAgYnByaW50X2ZtdHR5IGJ1ZiBmbXR0eTsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ30nO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0OyBidWZmZXJfYWRkX2NoYXIgYnVmICcoJztcbiAgICAgIGJwcmludF9mbXR0eSBidWYgZm10dHk7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICcpJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiB3aWR0aF9vcHQ7IGJwcmludF9jaGFyX3NldCBidWYgY2hhcl9zZXQ7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9jb3VudGVyIGNvdW50ZXIpO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiBcIjBjXCI7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgICAgbGV0IFBhcmFtX2Zvcm1hdF9FQkIgZm10JyA9IHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdCBpZ24gcmVzdCBpblxuICAgICAgZm10aXRlciBmbXQnIHRydWU7XG5cbiAgICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiAoc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQpO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuICAgIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpIC0+XG4gICAgICBiZWdpbiBtYXRjaCBmbXRpbmdfZ2VuIHdpdGhcbiAgICAgIHwgT3Blbl90YWcgKEZvcm1hdCAoXywgc3RyKSkgLT5cbiAgICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiQHtcIjsgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIHN0clxuICAgICAgfCBPcGVuX2JveCAoRm9ybWF0IChfLCBzdHIpKSAtPlxuICAgICAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCJAW1wiOyBidWZmZXJfYWRkX3N0cmluZyBidWYgc3RyXG4gICAgICBlbmQ7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IEVuZF9vZl9mb3JtYXQgLT4gKClcblxuICBpbiBmbXRpdGVyIGZtdCBmYWxzZVxuXG4oKioqKVxuXG4oKiBDb252ZXJ0IGEgZm9ybWF0IHRvIHN0cmluZy4gKilcbmxldCBzdHJpbmdfb2ZfZm10IGZtdCA9XG4gIGxldCBidWYgPSBidWZmZXJfY3JlYXRlIDE2IGluXG4gIGJwcmludF9mbXQgYnVmIGZtdDtcbiAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBUeXBlIGV4dHJhY3Rpb24gKilcblxudHlwZSAoXywgXykgZXEgPSBSZWZsIDogKCdhLCAnYSkgZXFcblxuKCogSW52YXJpYW50OiB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBpZGVudGl0eSBvbiB2YWx1ZXMuXG5cbiAgIEluIHBhcnRpY3VsYXIsIGlmICh0eTEsIHR5MikgaGF2ZSBlcXVhbCB2YWx1ZXMsIHRoZW5cbiAgICh0cmFucyAoc3ltbSB0eTEpIHR5MikgcmVzcGVjdHMgdGhlICd0cmFucycgcHJlY29uZGl0aW9uLiAqKVxubGV0IHJlYyBzeW1tIDogdHlwZSBhMSBiMSBjMSBkMSBlMSBmMSBhMiBiMiBjMiBkMiBlMiBmMiAuXG4gICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWxcbi0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyLFxuICAgIGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdHR5X3JlbFxuPSBmdW5jdGlvblxuICB8IENoYXJfdHkgcmVzdCAtPiBDaGFyX3R5IChzeW1tIHJlc3QpXG4gIHwgSW50X3R5IHJlc3QgLT4gSW50X3R5IChzeW1tIHJlc3QpXG4gIHwgSW50MzJfdHkgcmVzdCAtPiBJbnQzMl90eSAoc3ltbSByZXN0KVxuICB8IEludDY0X3R5IHJlc3QgLT4gSW50NjRfdHkgKHN5bW0gcmVzdClcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPiBOYXRpdmVpbnRfdHkgKHN5bW0gcmVzdClcbiAgfCBGbG9hdF90eSByZXN0IC0+IEZsb2F0X3R5IChzeW1tIHJlc3QpXG4gIHwgQm9vbF90eSByZXN0IC0+IEJvb2xfdHkgKHN5bW0gcmVzdClcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPiBTdHJpbmdfdHkgKHN5bW0gcmVzdClcbiAgfCBUaGV0YV90eSByZXN0IC0+IFRoZXRhX3R5IChzeW1tIHJlc3QpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPiBBbHBoYV90eSAoc3ltbSByZXN0KVxuICB8IEFueV90eSByZXN0IC0+IEFueV90eSAoc3ltbSByZXN0KVxuICB8IFJlYWRlcl90eSByZXN0IC0+IFJlYWRlcl90eSAoc3ltbSByZXN0KVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT4gSWdub3JlZF9yZWFkZXJfdHkgKHN5bW0gcmVzdClcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgc3ltbSByZXN0KVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTIsIHR5MSwgc3ltbSByZXN0KVxuICB8IEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcblxubGV0IHJlYyBmbXR0eV9yZWxfZGV0IDogdHlwZSBhMSBiIGMgZDEgZTEgZjEgYTIgZDIgZTIgZjIgLlxuICAoYTEsIGIsIGMsIGQxLCBlMSwgZjEsXG4gICBhMiwgYiwgYywgZDIsIGUyLCBmMikgZm10dHlfcmVsIC0+XG4gICAgKChmMSwgZjIpIGVxIC0+IChhMSwgYTIpIGVxKVxuICAqICgoYTEsIGEyKSBlcSAtPiAoZjEsIGYyKSBlcSlcbiAgKiAoKGUxLCBlMikgZXEgLT4gKGQxLCBkMikgZXEpXG4gICogKChkMSwgZDIpIGVxIC0+IChlMSwgZTIpIGVxKVxuPSBmdW5jdGlvblxuICB8IEVuZF9vZl9mbXR0eSAtPlxuICAgIChmdW4gUmVmbCAtPiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBSZWZsKVxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG5cbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBlZCBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcbiAgfCBGb3JtYXRfYXJnX3R5IChfdHksIHJlc3QpIC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxKSB0eTIgaW5cbiAgICBsZXQgYWcsIGdhLCBkaiwgamQgPSBmbXR0eV9yZWxfZGV0IHR5IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBsZXQgUmVmbCA9IGFnIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZ2EgUmVmbCBpbiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBsZXQgUmVmbCA9IGRqIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gamQgUmVmbCBpbiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcblxuKCogUHJlY29uZGl0aW9uOiB3ZSBhc3N1bWUgdGhhdCB0aGUgdHdvIGZtdHR5X3JlbCBhcmd1bWVudHMgaGF2ZSBlcXVhbFxuICAgdmFsdWVzIChhdCBwb3NzaWJseSBkaXN0aW5jdCB0eXBlcyk7IHRoaXMgaW52YXJpYW50IGNvbWVzIGZyb20gdGhlIHdheVxuICAgZm10dHlfcmVsIHdpdG5lc3NlcyBhcmUgcHJvZHVjZWQgYnkgdGhlIHR5cGUtY2hlY2tlclxuXG4gICBUaGUgY29kZSBiZWxvdyB1c2VzIChhc3NlcnQgZmFsc2UpIHdoZW4gdGhpcyBhc3N1bXB0aW9uIGlzIGJyb2tlbi4gVGhlXG4gICBjb2RlIHBhdHRlcm4gaXMgdGhlIGZvbGxvd2luZzpcblxuICAgICB8IEZvbyB4LCBGb28geSAtPlxuICAgICAgICgqIGNhc2Ugd2hlcmUgaW5kZWVkIGJvdGggdmFsdWVzXG4gICAgICAgICAgc3RhcnQgd2l0aCBjb25zdHJ1Y3RvciBGb28gKilcbiAgICAgfCBGb28gXywgX1xuICAgICB8IF8sIEZvbyBfIC0+XG4gICAgICAgKCogZGlmZmVyZW50IGhlYWQgY29uc3RydWN0b3JzOiBicm9rZW4gcHJlY29uZGl0aW9uICopXG4gICAgICAgYXNzZXJ0IGZhbHNlXG4qKVxuYW5kIHRyYW5zIDogdHlwZVxuICBhMSBiMSBjMSBkMSBlMSBmMVxuICBhMiBiMiBjMiBkMiBlMiBmMlxuICBhMyBiMyBjMyBkMyBlMyBmM1xuLlxuICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsXG4tPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMixcbiAgICBhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eV9yZWxcbi0+IChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgIGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5X3JlbFxuPSBmdW4gdHkxIHR5MiAtPiBtYXRjaCB0eTEsIHR5MiB3aXRoXG4gIHwgQ2hhcl90eSByZXN0MSwgQ2hhcl90eSByZXN0MiAtPiBDaGFyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBTdHJpbmdfdHkgcmVzdDEsIFN0cmluZ190eSByZXN0MiAtPiBTdHJpbmdfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEJvb2xfdHkgcmVzdDEsIEJvb2xfdHkgcmVzdDIgLT4gQm9vbF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSW50X3R5IHJlc3QxLCBJbnRfdHkgcmVzdDIgLT4gSW50X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJbnQzMl90eSByZXN0MSwgSW50MzJfdHkgcmVzdDIgLT4gSW50MzJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEludDY0X3R5IHJlc3QxLCBJbnQ2NF90eSByZXN0MiAtPiBJbnQ2NF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QxLCBOYXRpdmVpbnRfdHkgcmVzdDIgLT4gTmF0aXZlaW50X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBGbG9hdF90eSByZXN0MSwgRmxvYXRfdHkgcmVzdDIgLT4gRmxvYXRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuXG4gIHwgQWxwaGFfdHkgcmVzdDEsIEFscGhhX3R5IHJlc3QyIC0+IEFscGhhX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBBbHBoYV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEFscGhhX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBUaGV0YV90eSByZXN0MSwgVGhldGFfdHkgcmVzdDIgLT4gVGhldGFfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFRoZXRhX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgVGhldGFfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEFueV90eSByZXN0MSwgQW55X3R5IHJlc3QyIC0+IEFueV90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgQW55X3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgQW55X3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBSZWFkZXJfdHkgcmVzdDEsIFJlYWRlcl90eSByZXN0MiAtPiBSZWFkZXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFJlYWRlcl90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIFJlYWRlcl90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdDEsIElnbm9yZWRfcmVhZGVyX3R5IHJlc3QyIC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgSWdub3JlZF9yZWFkZXJfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEZvcm1hdF9hcmdfdHkgKHR5MSwgcmVzdDEpLCBGb3JtYXRfYXJnX3R5ICh0eTIsIHJlc3QyKSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHRyYW5zIHR5MSB0eTIsIHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEZvcm1hdF9hcmdfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBGb3JtYXRfYXJnX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MTEsIHR5MTIsIHJlc3QxKSxcbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MjEsIHR5MjIsIHJlc3QyKSAtPlxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MTIpIHR5MjEgaW5cbiAgICBsZXQgXywgZjIsIF8sIGY0ID0gZm10dHlfcmVsX2RldCB0eSBpblxuICAgIGxldCBSZWZsID0gZjIgUmVmbCBpblxuICAgIGxldCBSZWZsID0gZjQgUmVmbCBpblxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxMSwgdHkyMiwgdHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgRm9ybWF0X3N1YnN0X3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRm9ybWF0X3N1YnN0X3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBFbmRfb2ZfZm10dHksIEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcbiAgfCBFbmRfb2ZfZm10dHksIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRW5kX29mX2ZtdHR5IC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcmVjIGZtdHR5X29mX2Zvcm1hdHRpbmdfZ2VuIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmb3JtYXR0aW5nX2dlbiAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gZm9ybWF0dGluZ19nZW4gLT4gbWF0Y2ggZm9ybWF0dGluZ19nZW4gd2l0aFxuICB8IE9wZW5fdGFnIChGb3JtYXQgKGZtdCwgXykpIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBPcGVuX2JveCAoRm9ybWF0IChmbXQsIF8pKSAtPiBmbXR0eV9vZl9mbXQgZm10XG5cbigqIEV4dHJhY3QgdGhlIHR5cGUgcmVwcmVzZW50YXRpb24gKGFuIGZtdHR5KSBvZiBhIGZvcm1hdC4gKilcbmFuZCBmbXR0eV9vZl9mbXQgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGZtdHR5IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG5cbiAgfCBJbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEludDMyIChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludDMyX3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IE5hdGl2ZWludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChOYXRpdmVpbnRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgSW50NjQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50NjRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgRmxvYXQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoRmxvYXRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG5cbiAgfCBDaGFyIHJlc3QgICAgICAgICAgICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBDYW1sX2NoYXIgcmVzdCAgICAgICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBCb29sIChwYWQsIHJlc3QpICAgICAgICAgICAtPlxuICAgICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKEJvb2xfdHkgKGZtdHR5X29mX2ZtdCByZXN0KSlcbiAgfCBBbHBoYSByZXN0ICAgICAgICAgICAgICAgICAtPiBBbHBoYV90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgVGhldGEgcmVzdCAgICAgICAgICAgICAgICAgLT4gVGhldGFfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IEN1c3RvbSAoYXJpdHksIF8sIHJlc3QpICAgIC0+IGZtdHR5X29mX2N1c3RvbSBhcml0eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgUmVhZGVyIHJlc3QgICAgICAgICAgICAgICAgLT4gUmVhZGVyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEZvcm1hdF9hcmcgKF8sIHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBGb3JtYXRfc3Vic3QgKF8sIHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHksIHR5LCBmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEZsdXNoIHJlc3QgICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBDaGFyX2xpdGVyYWwgKF8sIHJlc3QpICAgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT4gU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPiBJbnRfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgICAgICAgIC0+IENoYXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgIC0+IGZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IGlnbiByZXN0XG4gIHwgRm9ybWF0dGluZ19saXQgKF8sIHJlc3QpICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgIC0+XG4gICAgY29uY2F0X2ZtdHR5IChmbXR0eV9vZl9mb3JtYXR0aW5nX2dlbiBmbXRpbmdfZ2VuKSAoZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBFbmRfb2ZfZm9ybWF0ICAgICAgICAgICAgICAtPiBFbmRfb2ZfZm10dHlcblxuYW5kIGZtdHR5X29mX2N1c3RvbSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgKHksIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBhcml0eSBmbXR0eSAtPiBtYXRjaCBhcml0eSB3aXRoXG4gIHwgQ3VzdG9tX3plcm8gLT4gZm10dHlcbiAgfCBDdXN0b21fc3VjYyBhcml0eSAtPiBBbnlfdHkgKGZtdHR5X29mX2N1c3RvbSBhcml0eSBmbXR0eSlcblxuKCogRXh0cmFjdCB0aGUgZm10dHkgb2YgYW4gaWdub3JlZCBwYXJhbWV0ZXIgZm9sbG93ZWQgYnkgdGhlIHJlc3Qgb2ZcbiAgIHRoZSBmb3JtYXQuICopXG5hbmQgZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT5cbiAgICAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQgKF8sIF8pICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQzMiAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQ2NCAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mbG9hdCAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIF8gICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKF8sIGZtdHR5KSAtPiBjb25jYXRfZm10dHkgZm10dHkgKGZtdHR5X29mX2ZtdCBmbXQpXG4gIHwgSWdub3JlZF9yZWFkZXIgICAgICAgICAgICAgICAgICAtPiBJZ25vcmVkX3JlYWRlcl90eSAoZm10dHlfb2ZfZm10IGZtdClcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcblxuKCogQWRkIGFuIEludF90eSBub2RlIGlmIHBhZGRpbmcgaXMgdGFrZW4gYXMgYW4gZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUqc1wiKS4gKilcbmFuZCBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IDogdHlwZSB4IGEgYiBjIGQgZSBmIC5cbiAgICAoeCwgYSkgcGFkZGluZyAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKHgsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbiAgZnVuIHBhZCBmbXR0eSAtPiBtYXRjaCBwYWQgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAgICAtPiBmbXR0eVxuICAgIHwgTGl0X3BhZGRpbmcgXyAtPiBmbXR0eVxuICAgIHwgQXJnX3BhZGRpbmcgXyAtPiBJbnRfdHkgZm10dHlcblxuKCogQWRkIGFuIEludF90eSBub2RlIGlmIHByZWNpc2lvbiBpcyB0YWtlbiBhcyBhbiBleHRyYSBhcmd1bWVudCAoZXg6IFwiJS4qZlwiKS4qKVxuYW5kIGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSA6IHR5cGUgeCBhIGIgYyBkIGUgZiAuXG4gICAgKHgsIGEpIHByZWNpc2lvbiAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKHgsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbiAgZnVuIHByZWMgZm10dHkgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgfCBOb19wcmVjaXNpb24gICAgLT4gZm10dHlcbiAgICB8IExpdF9wcmVjaXNpb24gXyAtPiBmbXR0eVxuICAgIHwgQXJnX3ByZWNpc2lvbiAgIC0+IEludF90eSBmbXR0eVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCB0eXBpbmcgKilcblxuKCogRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgZm9ybWF0IGRvZXMgbm90IG1hdGNoIGEgZ2l2ZW4gZm9ybWF0IHR5cGUuICopXG5leGNlcHRpb24gVHlwZV9taXNtYXRjaFxuXG4oKiBUeXBlIGEgcGFkZGluZy4gKilcbigqIFRha2UgYW4gSW50X3R5IGZyb20gdGhlIGZtdHR5IGlmIHRoZSBpbnRlZ2VyIHNob3VsZCBiZSBrZXB0IGFzIGFyZ3VtZW50LiAqKVxuKCogUmFpc2UgVHlwZV9taXNtYXRjaCBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgdHlwZV9wYWRkaW5nIDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhZGRpbmdfZm10dHlfZWJiID1cbmZ1biBwYWQgZm10dHkgLT4gbWF0Y2ggcGFkLCBmbXR0eSB3aXRoXG4gIHwgTm9fcGFkZGluZywgXyAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoTm9fcGFkZGluZywgZm10dHkpXG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgXyAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoTGl0X3BhZGRpbmcgKHBhZHR5LHcpLGZtdHR5KVxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBJbnRfdHkgcmVzdCAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoQXJnX3BhZGRpbmcgcGFkdHkscmVzdClcbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogQ29udmVydCBhICh1cGFkZGluZywgdXByZWNpc2lvbikgdG8gYSAocGFkZGluZywgcHJlY2lzaW9uKS4gKilcbigqIFRha2Ugb25lIG9yIHR3byBJbnRfdHkgZnJvbSB0aGUgZm10dHkgaWYgbmVlZGVkLiAqKVxuKCogUmFpc2UgVHlwZV9taXNtYXRjaCBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgdHlwZV9wYWRwcmVjIDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgeiAuXG4gICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6KSBwcmVjaXNpb24gLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhZHByZWNfZm10dHlfZWJiID1cbmZ1biBwYWQgcHJlYyBmbXR0eSAtPiBtYXRjaCBwcmVjLCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgfCBOb19wcmVjaXNpb24sIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgTm9fcHJlY2lzaW9uLCByZXN0KVxuICB8IExpdF9wcmVjaXNpb24gcCwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgcmVzdCkgLT5cbiAgICBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBMaXRfcHJlY2lzaW9uIHAsIHJlc3QpXG4gIHwgQXJnX3ByZWNpc2lvbiwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgSW50X3R5IHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgQXJnX3ByZWNpc2lvbiwgcmVzdClcbiAgfCBfLCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBUeXBlIGEgZm9ybWF0IGFjY29yZGluZyB0byBhbiBmbXR0eS4gKilcbigqIElmIHR5cGluZyBzdWNjZWVkLCBnZW5lcmF0ZSBhIGNvcHkgb2YgdGhlIGZvcm1hdCB3aXRoIHRoZSBzYW1lXG4gICAgdHlwZSBwYXJhbWV0ZXJzIGFzIHRoZSBmbXR0eS4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHJlYyB0eXBlX2Zvcm1hdCA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMiAgLlxuICAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eVxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10XG49IGZ1biBmbXQgZm10dHkgLT4gbWF0Y2ggdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eSB3aXRoXG4gIHwgRm10X2ZtdHR5X0VCQiAoZm10JywgRW5kX29mX2ZtdHR5KSAtPiBmbXQnXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbmFuZCB0eXBlX2Zvcm1hdF9nZW4gOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjIgIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdF9mbXR0eV9lYmJcbj0gZnVuIGZtdCBmbXR0eSAtPiBtYXRjaCBmbXQsIGZtdHR5IHdpdGhcbiAgfCBDaGFyIGZtdF9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2hhciBmbXQnLCBmbXR0eScpXG4gIHwgQ2FtbF9jaGFyIGZtdF9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2FtbF9jaGFyIGZtdCcsIGZtdHR5JylcbiAgfCBTdHJpbmcgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIFN0cmluZ190eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoU3RyaW5nIChwYWQsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIFN0cmluZ190eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZCwgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEludF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBJbnQzMl90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50MzIgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBOYXRpdmVpbnRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgSW50NjRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludDY0IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBGbG9hdF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgQm9vbCAocGFkLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgQm9vbF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoQm9vbCAocGFkLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEZsdXNoIGZtdF9yZXN0LCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZsdXNoIGZtdCcsIGZtdHR5JylcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChTdHJpbmdfbGl0ZXJhbCAoc3RyLCBmbXQnKSwgZm10dHknKVxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2hhcl9saXRlcmFsIChjaHIsIGZtdCcpLCBmbXR0eScpXG5cbiAgfCBGb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHksIGZtdF9yZXN0KSxcbiAgICBGb3JtYXRfYXJnX3R5IChzdWJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgIGlmIEZtdHR5X0VCQiBzdWJfZm10dHkgPD4gRm10dHlfRUJCIHN1Yl9mbXR0eScgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHknLCBmbXQnKSwgZm10dHknKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5LCBmbXRfcmVzdCksXG4gICAgRm9ybWF0X3N1YnN0X3R5IChzdWJfZm10dHkxLCBfc3ViX2ZtdHR5MiwgZm10dHlfcmVzdCkgLT5cbiAgICBpZiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWJfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1Yl9mbXR0eTEpIHRoZW5cbiAgICAgIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPVxuICAgICAgdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IChlcmFzZV9yZWwgZm10dHlfcmVzdClcbiAgICBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5MSwgZm10JyksIGZtdHR5JylcbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IEFscGhhIGZtdF9yZXN0LCBBbHBoYV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEFscGhhIGZtdCcsIGZtdHR5JylcbiAgfCBUaGV0YSBmbXRfcmVzdCwgVGhldGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChUaGV0YSBmbXQnLCBmbXR0eScpXG5cbiAgKCogRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdCcpLCBmbXR0eScpXG4gIHwgRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmdfZ2VuLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICB0eXBlX2Zvcm1hdHRpbmdfZ2VuIGZvcm1hdHRpbmdfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3RcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgUmVhZGVyIGZtdF9yZXN0LCBSZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChSZWFkZXIgZm10JywgZm10dHknKVxuICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdF9yZXN0KSwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgZm10JyksIGZtdHR5JylcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCksIEludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdCcpLCBmbXR0eScpXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIHR5cGVfaWdub3JlZF9wYXJhbSBpZ24gcmVzdCBmbXR0eV9yZXN0XG5cbiAgfCBFbmRfb2ZfZm9ybWF0LCBmbXR0eV9yZXN0IC0+IEZtdF9mbXR0eV9FQkIgKEVuZF9vZl9mb3JtYXQsIGZtdHR5X3Jlc3QpXG5cbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuYW5kIHR5cGVfZm9ybWF0dGluZ19nZW4gOiB0eXBlIGExIGEzIGIxIGIzIGMxIGMzIGQxIGQzIGUxIGUyIGUzIGYxIGYyIGYzIC5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm9ybWF0dGluZ19nZW4gLT5cbiAgICAoZjEsIGIxLCBjMSwgZTEsIGUyLCBmMikgZm10IC0+XG4gICAgKGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5IC0+XG4gICAgKGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdF9mbXR0eV9lYmIgPVxuZnVuIGZvcm1hdHRpbmdfZ2VuIGZtdDAgZm10dHkwIC0+IG1hdGNoIGZvcm1hdHRpbmdfZ2VuIHdpdGhcbiAgfCBPcGVuX3RhZyAoRm9ybWF0IChmbXQxLCBzdHIpKSAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQyLCBmbXR0eTIpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDEgZm10dHkwIGluXG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDMsIGZtdHR5MykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MCBmbXR0eTIgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10Miwgc3RyKSksIGZtdDMpLCBmbXR0eTMpXG4gIHwgT3Blbl9ib3ggKEZvcm1hdCAoZm10MSwgc3RyKSkgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MiwgZm10dHkyKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQxIGZtdHR5MCBpblxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQzLCBmbXR0eTMpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDAgZm10dHkyIGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdDIsIHN0cikpLCBmbXQzKSwgZm10dHkzKVxuXG4oKiBUeXBlIGFuIElnbm9yZWRfcGFyYW0gbm9kZSBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG5hbmQgdHlwZV9pZ25vcmVkX3BhcmFtIDogdHlwZSBwIHEgeCB5IHogdCB1IHYgYSBiIGMgZCBlIGYgLlxuICAgICh4LCB5LCB6LCB0LCBxLCBwKSBpZ25vcmVkIC0+XG4gICAgKHAsIHksIHosIHEsIHUsIHYpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXRfZm10dHlfZWJiID1cbmZ1biBpZ24gZm10IGZtdHR5IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQgXyAgICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQzMiBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgXyAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQ2NCBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mbG9hdCBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHkpIC0+XG4gICAgdHlwZV9pZ25vcmVkX3BhcmFtX29uZSAoSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHkpKSBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5KSAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHknLCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHkgZm10IGZtdHR5IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCcpLFxuICAgICAgICAgICAgICAgICAgIGZtdHR5JylcbiAgfCBJZ25vcmVkX3JlYWRlciAtPiAoXG4gICAgbWF0Y2ggZm10dHkgd2l0aFxuICAgIHwgSWdub3JlZF9yZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfcmVhZGVyLCBmbXQnKSwgZm10dHknKVxuICAgIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcblxuYW5kIHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgOiB0eXBlIGExIGEyIGIxIGIyIGMxIGMyIGQxIGQyIGUxIGUyIGYxIGYyIC5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGQyLCBhMikgaWdub3JlZCAtPlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXQgLT5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHkgLT5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10X2ZtdHR5X2ViYlxuPSBmdW4gaWduIGZtdCBmbXR0eSAtPlxuICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHkgaW5cbiAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoaWduLCBmbXQnKSwgZm10dHknKVxuXG4oKiBUeXBpbmcgb2YgdGhlIGNvbXBsZXggY2FzZTogXCIlXyguLi4lKVwiLiAqKVxuYW5kIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIDogdHlwZSB3IHggeSB6IHAgcyB0IHUgYSBiIGMgZCBlIGYgLlxuICAgICh3LCB4LCB5LCB6LCBzLCBwKSBmbXR0eSAtPlxuICAgIChwLCB4LCB5LCBzLCB0LCB1KSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5X2ZtdF9lYmIgPVxuZnVuIHN1Yl9mbXR0eSBmbXQgZm10dHkgLT4gbWF0Y2ggc3ViX2ZtdHR5LCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSBzdWJfZm10dHlfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChDaGFyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBTdHJpbmdfdHkgc3ViX2ZtdHR5X3Jlc3QsIFN0cmluZ190eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChTdHJpbmdfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludF90eSBzdWJfZm10dHlfcmVzdCwgSW50X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSW50MzJfdHkgc3ViX2ZtdHR5X3Jlc3QsIEludDMyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludDMyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBOYXRpdmVpbnRfdHkgc3ViX2ZtdHR5X3Jlc3QsIE5hdGl2ZWludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChOYXRpdmVpbnRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludDY0X3R5IHN1Yl9mbXR0eV9yZXN0LCBJbnQ2NF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnQ2NF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgRmxvYXRfdHkgc3ViX2ZtdHR5X3Jlc3QsIEZsb2F0X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZsb2F0X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBCb29sX3R5IHN1Yl9mbXR0eV9yZXN0LCBCb29sX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEJvb2xfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEFscGhhX3R5IHN1Yl9mbXR0eV9yZXN0LCBBbHBoYV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChBbHBoYV90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgVGhldGFfdHkgc3ViX2ZtdHR5X3Jlc3QsIFRoZXRhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKFRoZXRhX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBSZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QsIFJlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChSZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0LCBJZ25vcmVkX3JlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJZ25vcmVkX3JlYWRlcl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG5cbiAgfCBGb3JtYXRfYXJnX3R5IChzdWIyX2ZtdHR5LCBzdWJfZm10dHlfcmVzdCksXG4gICAgRm9ybWF0X2FyZ190eSAoc3ViMl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgaWYgRm10dHlfRUJCIHN1YjJfZm10dHkgPD4gRm10dHlfRUJCIHN1YjJfZm10dHknIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZvcm1hdF9hcmdfdHkgKHN1YjJfZm10dHknLCBzdWJfZm10dHlfcmVzdCcpLCBmbXQnKVxuICB8IEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eSwgIHN1YjJfZm10dHksICBzdWJfZm10dHlfcmVzdCksXG4gICAgRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5Jywgc3ViMl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgKCogVE9ETyBkZWZpbmUgRm10dHlfcmVsX0VCQiB0byByZW1vdmUgdGhvc2UgZXJhc2VfcmVsICopXG4gICAgaWYgRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMV9mbXR0eSkgPD4gRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMV9mbXR0eScpXG4gICAgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGlmIEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjJfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjJfZm10dHknKVxuICAgIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgc3ViX2ZtdHR5JyA9IHRyYW5zIChzeW1tIHN1YjFfZm10dHknKSBzdWIyX2ZtdHR5JyBpblxuICAgIGxldCBfLCBmMiwgXywgZjQgPSBmbXR0eV9yZWxfZGV0IHN1Yl9mbXR0eScgaW5cbiAgICBsZXQgUmVmbCA9IGYyIFJlZmwgaW5cbiAgICBsZXQgUmVmbCA9IGY0IFJlZmwgaW5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiAoZXJhc2VfcmVsIHN1Yl9mbXR0eV9yZXN0KSBmbXQgZm10dHlfcmVzdFxuICAgIGluXG4gICAgRm10dHlfZm10X0VCQiAoRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5Jywgc3ViMl9mbXR0eScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tIHN1Yl9mbXR0eV9yZXN0JyksXG4gICAgICAgICAgICAgICAgICAgZm10JylcbiAgfCBFbmRfb2ZfZm10dHksIGZtdHR5IC0+XG4gICAgRm10dHlfZm10X0VCQiAoRW5kX29mX2ZtdHR5LCB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5KVxuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBUaGlzIGltcGxlbWVudGF0aW9uIG9mIGByZWNhc3RgIGlzIGEgYml0IGRpc2FwcG9pbnRpbmcuIFRoZVxuICAgaW52YXJpYW50IHByb3ZpZGVkIGJ5IHRoZSB0eXBlIGFyZSB2ZXJ5IHN0cm9uZzogdGhlIGlucHV0IGZvcm1hdCdzXG4gICB0eXBlIGlzIGluIHJlbGF0aW9uIHRvIHRoZSBvdXRwdXQgdHlwZSdzIGFzIHdpdG5lc3NlZCBieSB0aGVcbiAgIGZtdHR5X3JlbCBhcmd1bWVudC4gT25lIHdvdWxkIGF0IGZpcnN0IGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGJlXG4gICB0b3RhbCwgYW5kIGltcGxlbWVudGFibGUgYnkgZXhoYXVzdGl2ZSBwYXR0ZXJuIG1hdGNoaW5nLiBJbnN0ZWFkLFxuICAgd2UgcmV1c2UgdGhlIGhpZ2hseSBwYXJ0aWFsIGFuZCBtdWNoIGxlc3Mgd2VsbC1kZWZpbmVkIGZ1bmN0aW9uXG4gICBgdHlwZV9mb3JtYXRgIHRoYXQgaGFzIGxvc3QgYWxsIGtub3dsZWRnZSBvZiB0aGUgY29ycmVzcG9uZGVuY2VcbiAgIGJldHdlZW4gdGhlIGFyZ3VtZW50J3MgdHlwZXMuXG5cbiAgIEJlc2lkZXMgdGhlIGZhY3QgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldXNlcyBhIGxvdCBvZiB0aGVcbiAgIGB0eXBlX2Zvcm1hdGAgbG9naWMgKGVnLjogc2VlaW5nIEludF90eSBpbiB0aGUgZm10dHkgcGFyYW1ldGVyIGRvZXNcbiAgIG5vdCBsZXQgeW91IG1hdGNoIG9uIEludCBvbmx5LCBhcyB5b3UgbWF5IGluIGZhY3QgaGF2ZSBGbG9hdFxuICAgKEFyZ19wYWRkaW5nLCAuLi4pIChcIiUuKmRcIikgYmVnaW5uaW5nIHdpdGggYW4gSW50X3R5KSwgaXQgaXMgYWxzb1xuICAgYSBwYXJ0aWFsIGZ1bmN0aW9uLCBiZWNhdXNlIHRoZSB0eXBpbmcgaW5mb3JtYXRpb24gaW4gYSBmb3JtYXQgaXNcbiAgIG5vdCBxdWl0ZSBlbm91Z2ggdG8gcmVjb25zdHJ1Y3QgaXQgdW5hbWJpZ3VvdXNseS4gRm9yIGV4YW1wbGUsIHRoZVxuICAgZm9ybWF0IHR5cGVzIG9mIFwiJWQlX3JcIiBhbmQgXCIlX3IlZFwiIGhhdmUgdGhlIHNhbWUgZm9ybWF0NlxuICAgcGFyYW1ldGVycywgYnV0IHRoZXkgYXJlIG5vdCBhdCBhbGwgZXhjaGFuZ2VhYmxlLCBhbmQgcHV0dGluZyBvbmVcbiAgIGluIHBsYWNlIG9mIHRoZSBvdGhlciBtdXN0IHJlc3VsdCBpbiBhIGR5bmFtaWMgZmFpbHVyZS5cblxuICAgR2l2ZW4gdGhhdDpcbiAgIC0gd2UnZCBoYXZlIHRvIGR1cGxpY2F0ZSBhIGxvdCBvZiBub24tdHJpdmlhbCB0eXBpbmcgbG9naWMgZnJvbSB0eXBlX2Zvcm1hdFxuICAgLSB0aGlzIHdvdWxkbid0IGV2ZW4gZWxpbWluYXRlIChhbGwpIHRoZSBkeW5hbWljIGZhaWx1cmVzXG4gICB3ZSBkZWNpZGVkIHRvIGp1c3QgcmV1c2UgdHlwZV9mb3JtYXQgZGlyZWN0bHkgZm9yIG5vdy5cbiopXG5sZXQgcmVjYXN0IDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyXG4gIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10XG49IGZ1biBmbXQgZm10dHkgLT5cbiAgdHlwZV9mb3JtYXQgZm10IChlcmFzZV9yZWwgKHN5bW0gZm10dHkpKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBQcmludGluZyB0b29scyAqKVxuXG4oKiBBZGQgcGFkZGluZyBzcGFjZXMgYXJvdW5kIGEgc3RyaW5nLiAqKVxubGV0IGZpeF9wYWRkaW5nIHBhZHR5IHdpZHRoIHN0ciA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgd2lkdGgsIHBhZHR5ID1cbiAgICBhYnMgd2lkdGgsXG4gICAgKCogd2hpbGUgbGl0ZXJhbCBwYWRkaW5nIHdpZHRocyBhcmUgYWx3YXlzIG5vbi1uZWdhdGl2ZSxcbiAgICAgICBkeW5hbWljYWxseS1zZXQgd2lkdGhzIChBcmdfcGFkZGluZywgZWcuICUqZCkgbWF5IGJlIG5lZ2F0aXZlO1xuICAgICAgIHdlIGludGVycHJldCB0aG9zZSBhcyBzcGVjaWZ5aW5nIGEgcGFkZGluZy10by10aGUtbGVmdDsgdGhpc1xuICAgICAgIG1lYW5zIHRoYXQgJzAnIG1heSBnZXQgZHJvcHBlZCBldmVuIGlmIGl0IHdhcyBleHBsaWNpdGx5IHNldCxcbiAgICAgICBidXQ6XG4gICAgICAgLSB0aGlzIGlzIHdoYXQgdGhlIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBkb2VzLCBhbmRcbiAgICAgICAgIHdlIHByZXNlcnZlIGNvbXBhdGliaWxpdHkgaWYgcG9zc2libGVcbiAgICAgICAtIHdlIGNvdWxkIG9ubHkgc2lnbmFsIHRoaXMgaXNzdWUgYnkgZmFpbGluZyBhdCBydW50aW1lLFxuICAgICAgICAgd2hpY2ggaXMgbm90IHZlcnkgbmljZS4uLiAqKVxuICAgIGlmIHdpZHRoIDwgMCB0aGVuIExlZnQgZWxzZSBwYWR0eSBpblxuICBpZiB3aWR0aCA8PSBsZW4gdGhlbiBzdHIgZWxzZVxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIHdpZHRoIChpZiBwYWR0eSA9IFplcm9zIHRoZW4gJzAnIGVsc2UgJyAnKSBpblxuICAgIGJlZ2luIG1hdGNoIHBhZHR5IHdpdGhcbiAgICB8IExlZnQgIC0+IFN0cmluZy5ibGl0IHN0ciAwIHJlcyAwIGxlblxuICAgIHwgUmlnaHQgLT4gU3RyaW5nLmJsaXQgc3RyIDAgcmVzICh3aWR0aCAtIGxlbikgbGVuXG4gICAgfCBaZXJvcyB3aGVuIGxlbiA+IDAgJiYgKHN0ci5bMF0gPSAnKycgfHwgc3RyLlswXSA9ICctJyB8fCBzdHIuWzBdID0gJyAnKSAtPlxuICAgICAgQnl0ZXMuc2V0IHJlcyAwIHN0ci5bMF07XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMSByZXMgKHdpZHRoIC0gbGVuICsgMSkgKGxlbiAtIDEpXG4gICAgfCBaZXJvcyB3aGVuIGxlbiA+IDEgJiYgc3RyLlswXSA9ICcwJyAmJiAoc3RyLlsxXSA9ICd4JyB8fCBzdHIuWzFdID0gJ1gnKSAtPlxuICAgICAgQnl0ZXMuc2V0IHJlcyAxIHN0ci5bMV07XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMiByZXMgKHdpZHRoIC0gbGVuICsgMikgKGxlbiAtIDIpXG4gICAgfCBaZXJvcyAtPlxuICAgICAgU3RyaW5nLmJsaXQgc3RyIDAgcmVzICh3aWR0aCAtIGxlbikgbGVuXG4gICAgZW5kO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIEFkZCAnMCcgcGFkZGluZyB0byBpbnQsIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiAqKVxubGV0IGZpeF9pbnRfcHJlY2lzaW9uIHByZWMgc3RyID1cbiAgbGV0IHByZWMgPSBhYnMgcHJlYyBpblxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbWF0Y2ggc3RyLlswXSB3aXRoXG4gIHwgKCcrJyB8ICctJyB8ICcgJykgYXMgYyB3aGVuIHByZWMgKyAxID4gbGVuIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKHByZWMgKyAxKSAnMCcgaW5cbiAgICBCeXRlcy5zZXQgcmVzIDAgYztcbiAgICBTdHJpbmcuYmxpdCBzdHIgMSByZXMgKHByZWMgLSBsZW4gKyAyKSAobGVuIC0gMSk7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCAnMCcgd2hlbiBwcmVjICsgMiA+IGxlbiAmJiBsZW4gPiAxICYmIChzdHIuWzFdID0gJ3gnIHx8IHN0ci5bMV0gPSAnWCcpIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKHByZWMgKyAyKSAnMCcgaW5cbiAgICBCeXRlcy5zZXQgcmVzIDEgc3RyLlsxXTtcbiAgICBTdHJpbmcuYmxpdCBzdHIgMiByZXMgKHByZWMgLSBsZW4gKyA0KSAobGVuIC0gMik7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCAnMCcgLi4gJzknIHwgJ2EnIC4uICdmJyB8ICdBJyAuLiAnRicgd2hlbiBwcmVjID4gbGVuIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgcHJlYyAnMCcgaW5cbiAgICBTdHJpbmcuYmxpdCBzdHIgMCByZXMgKHByZWMgLSBsZW4pIGxlbjtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuICB8IF8gLT5cbiAgICBzdHJcblxuKCogRXNjYXBlIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgT0NhbWwgbGV4aW5nIGNvbnZlbnRpb24uICopXG5sZXQgc3RyaW5nX3RvX2NhbWxfc3RyaW5nIHN0ciA9XG4gIGxldCBzdHIgPSBTdHJpbmcuZXNjYXBlZCBzdHIgaW5cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgcmVzID0gQnl0ZXMubWFrZSAobCArIDIpICdcXFwiJyBpblxuICBTdHJpbmcudW5zYWZlX2JsaXQgc3RyIDAgcmVzIDEgbDtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxuKCogR2VuZXJhdGUgdGhlIGZvcm1hdF9pbnQvaW50MzIvbmF0aXZlaW50L2ludDY0IGZpcnN0IGFyZ3VtZW50XG4gICBmcm9tIGFuIGludF9jb252LiAqKVxubGV0IGZvcm1hdF9vZl9pY29udiA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlZFwiIHwgSW50X3BkIC0+IFwiJStkXCIgfCBJbnRfc2QgLT4gXCIlIGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJWlcIiB8IEludF9waSAtPiBcIiUraVwiIHwgSW50X3NpIC0+IFwiJSBpXCJcbiAgfCBJbnRfeCAtPiBcIiV4XCIgfCBJbnRfQ3ggLT4gXCIlI3hcIlxuICB8IEludF9YIC0+IFwiJVhcIiB8IEludF9DWCAtPiBcIiUjWFwiXG4gIHwgSW50X28gLT4gXCIlb1wiIHwgSW50X0NvIC0+IFwiJSNvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiV1XCJcblxubGV0IGZvcm1hdF9vZl9pY29udkwgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJUxkXCIgfCBJbnRfcGQgLT4gXCIlK0xkXCIgfCBJbnRfc2QgLT4gXCIlIExkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVMaVwiIHwgSW50X3BpIC0+IFwiJStMaVwiIHwgSW50X3NpIC0+IFwiJSBMaVwiXG4gIHwgSW50X3ggLT4gXCIlTHhcIiB8IEludF9DeCAtPiBcIiUjTHhcIlxuICB8IEludF9YIC0+IFwiJUxYXCIgfCBJbnRfQ1ggLT4gXCIlI0xYXCJcbiAgfCBJbnRfbyAtPiBcIiVMb1wiIHwgSW50X0NvIC0+IFwiJSNMb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIlTHVcIlxuXG5sZXQgZm9ybWF0X29mX2ljb252bCA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlbGRcIiB8IEludF9wZCAtPiBcIiUrbGRcIiB8IEludF9zZCAtPiBcIiUgbGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJWxpXCIgfCBJbnRfcGkgLT4gXCIlK2xpXCIgfCBJbnRfc2kgLT4gXCIlIGxpXCJcbiAgfCBJbnRfeCAtPiBcIiVseFwiIHwgSW50X0N4IC0+IFwiJSNseFwiXG4gIHwgSW50X1ggLT4gXCIlbFhcIiB8IEludF9DWCAtPiBcIiUjbFhcIlxuICB8IEludF9vIC0+IFwiJWxvXCIgfCBJbnRfQ28gLT4gXCIlI2xvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiVsdVwiXG5cbmxldCBmb3JtYXRfb2ZfaWNvbnZuID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVuZFwiIHwgSW50X3BkIC0+IFwiJStuZFwiIHwgSW50X3NkIC0+IFwiJSBuZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlbmlcIiB8IEludF9waSAtPiBcIiUrbmlcIiB8IEludF9zaSAtPiBcIiUgbmlcIlxuICB8IEludF94IC0+IFwiJW54XCIgfCBJbnRfQ3ggLT4gXCIlI254XCJcbiAgfCBJbnRfWCAtPiBcIiVuWFwiIHwgSW50X0NYIC0+IFwiJSNuWFwiXG4gIHwgSW50X28gLT4gXCIlbm9cIiB8IEludF9DbyAtPiBcIiUjbm9cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJW51XCJcblxuKCogR2VuZXJhdGUgdGhlIGZvcm1hdF9mbG9hdCBmaXJzdCBhcmd1bWVudCBmcm9tIGEgZmxvYXRfY29udi4gKilcbmxldCBmb3JtYXRfb2ZfZmNvbnYgZmNvbnYgcHJlYyA9XG4gICAgbGV0IHByZWMgPSBhYnMgcHJlYyBpblxuICAgIGxldCBzeW1iID0gY2hhcl9vZl9mY29udiB+Y0Y6J2cnIGZjb252IGluXG4gICAgbGV0IGJ1ZiA9IGJ1ZmZlcl9jcmVhdGUgMTYgaW5cbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgICBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnY7XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLic7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIHByZWMpO1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgc3ltYjtcbiAgICBidWZmZXJfY29udGVudHMgYnVmXG5cbmxldCB0cmFuc2Zvcm1faW50X2FsdCBpY29udiBzID1cbiAgbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAtPlxuICAgIGxldCBkaWdpdHMgPVxuICAgICAgbGV0IG4gPSByZWYgMCBpblxuICAgICAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgICAgbWF0Y2ggU3RyaW5nLnVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgICAgfCAnMCcuLic5JyAtPiBpbmNyIG5cbiAgICAgICAgfCBfIC0+ICgpXG4gICAgICBkb25lO1xuICAgICAgIW5cbiAgICBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgKFN0cmluZy5sZW5ndGggcyArIChkaWdpdHMgLSAxKSAvIDMpIGluXG4gICAgbGV0IHBvcyA9IHJlZiAwIGluXG4gICAgbGV0IHB1dCBjID0gQnl0ZXMuc2V0IGJ1ZiAhcG9zIGM7IGluY3IgcG9zIGluXG4gICAgbGV0IGxlZnQgPSByZWYgKChkaWdpdHMgLSAxKSBtb2QgMyArIDEpIGluXG4gICAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgIG1hdGNoIFN0cmluZy51bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICcwJy4uJzknIGFzIGMgLT5cbiAgICAgICAgICBpZiAhbGVmdCA9IDAgdGhlbiAocHV0ICdfJzsgbGVmdCA6PSAzKTsgZGVjciBsZWZ0OyBwdXQgY1xuICAgICAgfCBjIC0+IHB1dCBjXG4gICAgZG9uZTtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGJ1ZlxuICB8IF8gLT4gc1xuXG4oKiBDb252ZXJ0IGFuIGludGVnZXIgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIGEgY29udmVyc2lvbi4gKilcbmxldCBjb252ZXJ0X2ludCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQgKGZvcm1hdF9vZl9pY29udiBpY29udikgbilcbmxldCBjb252ZXJ0X2ludDMyIGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludDMyIChmb3JtYXRfb2ZfaWNvbnZsIGljb252KSBuKVxubGV0IGNvbnZlcnRfbmF0aXZlaW50IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X25hdGl2ZWludCAoZm9ybWF0X29mX2ljb252biBpY29udikgbilcbmxldCBjb252ZXJ0X2ludDY0IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludDY0IChmb3JtYXRfb2ZfaWNvbnZMIGljb252KSBuKVxuXG4oKiBDb252ZXJ0IGEgZmxvYXQgdG8gc3RyaW5nLiAqKVxuKCogRml4IHNwZWNpYWwgY2FzZSBvZiBcIk9DYW1sIGZsb2F0IGZvcm1hdFwiLiAqKVxubGV0IGNvbnZlcnRfZmxvYXQgZmNvbnYgcHJlYyB4ID1cbiAgbGV0IGhleCAoKSA9XG4gICAgbGV0IHNpZ24gPVxuICAgICAgbWF0Y2ggZnN0IGZjb252IHdpdGhcbiAgICAgIHwgRmxvYXRfZmxhZ19wIC0+ICcrJ1xuICAgICAgfCBGbG9hdF9mbGFnX3MgLT4gJyAnXG4gICAgICB8IF8gLT4gJy0nIGluXG4gICAgaGV4c3RyaW5nX29mX2Zsb2F0IHggcHJlYyBzaWduIGluXG4gIGxldCBhZGRfZG90X2lmX25lZWRlZCBzdHIgPVxuICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICAgIGxldCByZWMgaXNfdmFsaWQgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW4gZmFsc2UgZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2ldIHdpdGhcbiAgICAgICAgfCAnLicgfCAnZScgfCAnRScgLT4gdHJ1ZVxuICAgICAgICB8IF8gLT4gaXNfdmFsaWQgKGkgKyAxKSBpblxuICAgIGlmIGlzX3ZhbGlkIDAgdGhlbiBzdHIgZWxzZSBzdHIgXiBcIi5cIiBpblxuICBsZXQgY2FtbF9zcGVjaWFsX3ZhbCBzdHIgPSBtYXRjaCBjbGFzc2lmeV9mbG9hdCB4IHdpdGhcbiAgICB8IEZQX25vcm1hbCB8IEZQX3N1Ym5vcm1hbCB8IEZQX3plcm8gLT4gc3RyXG4gICAgfCBGUF9pbmZpbml0ZSAtPiBpZiB4IDwgMC4wIHRoZW4gXCJuZWdfaW5maW5pdHlcIiBlbHNlIFwiaW5maW5pdHlcIlxuICAgIHwgRlBfbmFuIC0+IFwibmFuXCIgaW5cbiAgbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9oIC0+IGhleCAoKVxuICB8IEZsb2F0X0ggLT4gU3RyaW5nLnVwcGVyY2FzZV9hc2NpaSAoaGV4ICgpKVxuICB8IEZsb2F0X0NGIC0+IGNhbWxfc3BlY2lhbF92YWwgKGhleCAoKSlcbiAgfCBGbG9hdF9GIC0+XG4gICAgbGV0IHN0ciA9IGZvcm1hdF9mbG9hdCAoZm9ybWF0X29mX2Zjb252IGZjb252IHByZWMpIHggaW5cbiAgICBjYW1sX3NwZWNpYWxfdmFsIChhZGRfZG90X2lmX25lZWRlZCBzdHIpXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0cgLT5cbiAgICBmb3JtYXRfZmxvYXQgKGZvcm1hdF9vZl9mY29udiBmY29udiBwcmVjKSB4XG5cbigqIENvbnZlcnQgYSBjaGFyIHRvIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgT0NhbWwgbGV4aWNhbCBjb252ZW50aW9uLiAqKVxubGV0IGZvcm1hdF9jYW1sX2NoYXIgYyA9XG4gIGxldCBzdHIgPSBDaGFyLmVzY2FwZWQgYyBpblxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChsICsgMikgJ1xcJycgaW5cbiAgU3RyaW5nLnVuc2FmZV9ibGl0IHN0ciAwIHJlcyAxIGw7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIENvbnZlcnQgYSBmb3JtYXQgdHlwZSB0byBzdHJpbmcgKilcbmxldCBzdHJpbmdfb2ZfZm10dHkgZm10dHkgPVxuICBsZXQgYnVmID0gYnVmZmVyX2NyZWF0ZSAxNiBpblxuICBicHJpbnRfZm10dHkgYnVmIGZtdHR5O1xuICBidWZmZXJfY29udGVudHMgYnVmXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAoKiBHZW5lcmljIHByaW50aW5nIGZ1bmN0aW9uICopXG5cbigqIE1ha2UgYSBnZW5lcmljIHByaW50aW5nIGZ1bmN0aW9uLiAqKVxuKCogVXNlZCB0byBnZW5lcmF0ZSBQcmludGYgYW5kIEZvcm1hdCBwcmludGluZyBmdW5jdGlvbnMuICopXG4oKiBQYXJhbWV0ZXJzOlxuICAgICBrOiBhIGNvbnRpbnVhdGlvbiBmaW5hbGx5IGFwcGxpZWQgdG8gdGhlIG91dHB1dCBzdHJlYW0gYW5kIHRoZSBhY2N1bXVsYXRvci5cbiAgICAgbzogdGhlIG91dHB1dCBzdHJlYW0gKHNlZSBrLCAlYSBhbmQgJXQpLlxuICAgICBhY2M6IHJldiBsaXN0IG9mIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXNoLCBmb3JtYXR0aW5nLCAuLi4pLlxuICAgICBmbXQ6IHRoZSBmb3JtYXQuICopXG5sZXQgcmVjIG1ha2VfcHJpbnRmIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gIHwgQ2hhciByZXN0IC0+XG4gICAgZnVuIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfY2hhciAoYWNjLCBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIGZ1biBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmb3JtYXRfY2FtbF9jaGFyIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIG1ha2VfcGFkZGluZyBrIGFjYyByZXN0IHBhZCAoZnVuIHN0ciAtPiBzdHIpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgc3RyaW5nX3RvX2NhbWxfc3RyaW5nXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQgaWNvbnZcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50MzIgaWNvbnZcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X25hdGl2ZWludCBpY29udlxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQ2NCBpY29udlxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfZmxvYXRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBmY29udlxuICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgc3RyaW5nX29mX2Jvb2xcbiAgfCBBbHBoYSByZXN0IC0+XG4gICAgZnVuIGYgeCAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGVsYXkgKGFjYywgZnVuIG8gLT4gZiBvIHgpKSByZXN0XG4gIHwgVGhldGEgcmVzdCAtPlxuICAgIGZ1biBmIC0+IG1ha2VfcHJpbnRmIGsgKEFjY19kZWxheSAoYWNjLCBmKSkgcmVzdFxuICB8IEN1c3RvbSAoYXJpdHksIGYsIHJlc3QpIC0+XG4gICAgbWFrZV9jdXN0b20gayBhY2MgcmVzdCBhcml0eSAoZiAoKSlcbiAgfCBSZWFkZXIgXyAtPlxuICAgICgqIFRoaXMgY2FzZSBpcyBpbXBvc3NpYmxlLCBieSB0eXBpbmcgb2YgZm9ybWF0cy4gKilcbiAgICAoKiBJbmRlZWQsIHNpbmNlIHByaW50ZiBhbmQgY28uIHRha2UgYSBmb3JtYXQ0IGFzIGFyZ3VtZW50LCB0aGUgJ2QgYW5kICdlXG4gICAgICAgdHlwZSBwYXJhbWV0ZXJzIG9mIGZtdCBhcmUgb2J2aW91c2x5IGVxdWFscy4gVGhlIFJlYWRlciBpcyB0aGVcbiAgICAgICBvbmx5IGNvbnN0cnVjdG9yIHdoaWNoIHRvdWNoICdkIGFuZCAnZSB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIGZvcm1hdFxuICAgICAgIHR5cGUsIGl0IGFkZHMgYW4gKC0+KSB0byB0aGUgJ2QgcGFyYW1ldGVycy4gQ29uc2VxdWVudGx5LCBhIGZvcm1hdDRcbiAgICAgICBjYW5ub3QgY29udGFpbiBhIFJlYWRlciBub2RlLCBleGNlcHQgaW4gdGhlIHN1Yi1mb3JtYXQgYXNzb2NpYXRlZCB0b1xuICAgICAgIGFuICV7Li4uJX0uIEl0J3Mgbm90IGEgcHJvYmxlbSBiZWNhdXNlIG1ha2VfcHJpbnRmIGRvIG5vdCBjYWxsXG4gICAgICAgaXRzZWxmIHJlY3Vyc2l2ZWx5IG9uIHRoZSBzdWItZm9ybWF0IGFzc29jaWF0ZWQgdG8gJXsuLi4lfS4gKilcbiAgICBhc3NlcnQgZmFsc2VcbiAgfCBGbHVzaCByZXN0IC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX2ZsdXNoIGFjYykgcmVzdFxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2Nfc3RyaW5nX2xpdGVyYWwgKGFjYywgc3RyKSkgcmVzdFxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19jaGFyX2xpdGVyYWwgKGFjYywgY2hyKSkgcmVzdFxuXG4gIHwgRm9ybWF0X2FyZyAoXywgc3ViX2ZtdHR5LCByZXN0KSAtPlxuICAgIGxldCB0eSA9IHN0cmluZ19vZl9mbXR0eSBzdWJfZm10dHkgaW5cbiAgICAoZnVuIHN0ciAtPlxuICAgICAgaWdub3JlIHN0cjtcbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCB0eSkpIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0IChfLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBmdW4gKEZvcm1hdCAoZm10LCBfKSkgLT4gbWFrZV9wcmludGYgayBhY2NcbiAgICAgIChjb25jYXRfZm10IChyZWNhc3QgZm10IGZtdHR5KSByZXN0KVxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT5cbiAgICBsZXQgbmV3X2FjYyA9IEFjY19pbnZhbGlkX2FyZyAoYWNjLCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJVtcIikgaW5cbiAgICBmdW4gXyAtPiBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKF8sIHJlc3QpIC0+XG4gICAgKCogVGhpcyBjYXNlIHNob3VsZCBiZSByZWZ1c2VkIGZvciBQcmludGYuICopXG4gICAgKCogQWNjZXB0ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICopXG4gICAgKCogSW50ZXJwcmV0ICVsLCAlbiBhbmQgJUwgYXMgJXUuICopXG4gICAgZnVuIG4gLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZvcm1hdF9pbnQgXCIldVwiIG4pIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICBmdW4gYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9jaGFyIChhY2MsIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICBtYWtlX2lnbm9yZWRfcGFyYW0gayBhY2MgaWduIHJlc3RcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2xpdCAoYWNjLCBmbXRpbmdfbGl0KSkgcmVzdFxuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgbGV0IGsnIGthY2MgPVxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfZ2VuIChhY2MsIEFjY19vcGVuX3RhZyBrYWNjKSkgcmVzdCBpblxuICAgIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10J1xuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgbGV0IGsnIGthY2MgPVxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfZ2VuIChhY2MsIEFjY19vcGVuX2JveCBrYWNjKSkgcmVzdCBpblxuICAgIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10J1xuXG4gIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgIGsgYWNjXG5cbigqIERlbGF5IHRoZSBlcnJvciAoSW52YWxpZF9hcmd1bWVudCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJV9cIikuICopXG4oKiBHZW5lcmF0ZSBmdW5jdGlvbnMgdG8gdGFrZSByZW1haW5pbmcgYXJndW1lbnRzIChhZnRlciB0aGUgXCIlX1wiKS4gKilcbmFuZCBtYWtlX2lnbm9yZWRfcGFyYW0gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+XG4gICAgKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50IChfLCBfKSAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludDMyIChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50NjQgKF8sIF8pICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zsb2F0IChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyBfICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoXywgZm10dHkpIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyBmbXR0eSBmbXRcbiAgfCBJZ25vcmVkX3JlYWRlciAgICAgICAgICAgICAgICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuXG5cbigqIFNwZWNpYWwgY2FzZSBvZiBwcmludGYgXCIlXyhcIi4gKilcbmFuZCBtYWtlX2Zyb21fZm10dHkgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBmbXR0eSAtPlxuICAgICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10dHkgZm10IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnRfdHkgcmVzdCAgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnQzMl90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnQ2NF90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBGbG9hdF90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBCb29sX3R5IHJlc3QgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBBbHBoYV90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFRoZXRhX3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEFueV90eSByZXN0ICAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFJlYWRlcl90eSBfICAgICAgICAgICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IF8gICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IEZvcm1hdF9hcmdfdHkgKF8sIHJlc3QpIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEVuZF9vZl9mbXR0eSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEpIHR5MiBpblxuICAgIGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyAoY29uY2F0X2ZtdHR5IHR5IHJlc3QpIGZtdFxuXG4oKiBJbnNlcnQgYW4gQWNjX2ludmFsaWRfYXJnIGluIHRoZSBhY2N1bXVsYXRvciBhbmQgY29udGludWUgdG8gZ2VuZXJhdGVcbiAgIGNsb3N1cmVzIHRvIGdldCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4gKilcbmFuZCBtYWtlX2ludmFsaWRfYXJnIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10IC0+XG4gIG1ha2VfcHJpbnRmIGsgKEFjY19pbnZhbGlkX2FyZyAoYWNjLCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJV9cIikpIGZtdFxuXG4oKiBGaXggcGFkZGluZywgdGFrZSBpdCBhcyBhbiBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50IGlmIG5lZWRlZC4gKilcbmFuZCBtYWtlX3BhZGRpbmcgOiB0eXBlIHggeiBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeiAtPiBhKSBwYWRkaW5nIC0+ICh6IC0+IHN0cmluZykgLT4geCA9XG4gIGZ1biBrIGFjYyBmbXQgcGFkIHRyYW5zIC0+IG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCB0cmFucyB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgd2lkdGgpIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZpeF9wYWRkaW5nIHBhZHR5IHdpZHRoICh0cmFucyB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuXG4oKiBGaXggcGFkZGluZyBhbmQgcHJlY2lzaW9uIGZvciBpbnQsIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQuICopXG4oKiBUYWtlIG9uZSBvciB0d28gZXh0cmEgaW50ZWdlciBhcmd1bWVudHMgaWYgbmVlZGVkLiAqKVxuYW5kIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIDogdHlwZSB4IHkgeiBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT4gKGludF9jb252IC0+IHogLT4gc3RyaW5nKSAtPlxuICAgIGludF9jb252IC0+IHggPVxuICBmdW4gayBhY2MgZm10IHBhZCBwcmVjIHRyYW5zIGljb252IC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gIHwgTm9fcGFkZGluZywgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSB0cmFucyBpY29udiB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG5cbigqIENvbnZlcnQgYSBmbG9hdCwgZml4IHBhZGRpbmcgYW5kIHByZWNpc2lvbiBpZiBuZWVkZWQuICopXG4oKiBUYWtlIHRoZSBmbG9hdCBhcmd1bWVudCBhbmQgb25lIG9yIHR3byBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50cyBpZiBuZWVkZWQuICopXG5hbmQgbWFrZV9mbG9hdF9wYWRkaW5nX3ByZWNpc2lvbiA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh5LCBmbG9hdCAtPiBhKSBwcmVjaXNpb24gLT4gZmxvYXRfY29udiAtPiB4ID1cbiAgZnVuIGsgYWNjIGZtdCBwYWQgcHJlYyBmY29udiAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICB8IE5vX3BhZGRpbmcsIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIGxldCBzdHInID0gZml4X3BhZGRpbmcgcGFkdHkgdyBzdHIgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHInKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIGxldCBzdHInID0gZml4X3BhZGRpbmcgcGFkdHkgdyBzdHIgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHInKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuYW5kIG1ha2VfY3VzdG9tIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiB4IC0+IHkgPVxuICBmdW4gayBhY2MgcmVzdCBhcml0eSBmIC0+IG1hdGNoIGFyaXR5IHdpdGhcbiAgfCBDdXN0b21femVybyAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgZikpIHJlc3RcbiAgfCBDdXN0b21fc3VjYyBhcml0eSAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBtYWtlX2N1c3RvbSBrIGFjYyByZXN0IGFyaXR5IChmIHgpXG5cbmxldCBjb25zdCB4IF8gPSB4XG5cbmxldCByZWMgbWFrZV9pcHJpbnRmIDogdHlwZSBhIGIgYyBkIGUgZiBzdGF0ZS5cbiAgKHN0YXRlIC0+IGYpIC0+IHN0YXRlIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG4gIGZ1biBrIG8gZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gICAgfCBDaGFyIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IENhbWxfc3RyaW5nIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ2FtbF9zdHJpbmcgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDYW1sX3N0cmluZyAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgSW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBJbnQzMiAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgTmF0aXZlaW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBJbnQ2NCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgRmxvYXQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEJvb2wgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBCb29sIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQm9vbCAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgQWxwaGEgcmVzdCAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBUaGV0YSByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDdXN0b20gKGFyaXR5LCBfLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9jdXN0b21fYXJpdHkgayBvIHJlc3QgYXJpdHlcbiAgICB8IFJlYWRlciBfIC0+XG4gICAgICAgICgqIFRoaXMgY2FzZSBpcyBpbXBvc3NpYmxlLCBieSB0eXBpbmcgb2YgZm9ybWF0cy4gIFNlZSB0aGVcbiAgICAgICAgICAgbm90ZSBpbiB0aGUgY29ycmVzcG9uZGluZyBjYXNlIGZvciBtYWtlX3ByaW50Zi4gKilcbiAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgfCBGbHVzaCByZXN0IC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgQ2hhcl9saXRlcmFsIChfLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IEZvcm1hdF9hcmcgKF8sIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBGb3JtYXRfc3Vic3QgKF8sIGZtdHR5LCByZXN0KSAtPlxuICAgICAgICBmdW4gKEZvcm1hdCAoZm10LCBfKSkgLT5cbiAgICAgICAgICBtYWtlX2lwcmludGYgayBvXG4gICAgICAgICAgICAoY29uY2F0X2ZtdCAocmVjYXN0IGZtdCBmbXR0eSkgcmVzdClcbiAgICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lnbm9yZWRfcGFyYW0gKGZ1biBfIC0+IGsgbykgKEVuZF9vZl9hY2MpIGlnbiByZXN0XG4gICAgfCBGb3JtYXR0aW5nX2xpdCAoXywgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgKGZ1biBrb2MgLT4gbWFrZV9pcHJpbnRmIGsga29jIHJlc3QpIG8gZm10J1xuICAgIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIChmdW4ga29jIC0+IG1ha2VfaXByaW50ZiBrIGtvYyByZXN0KSBvIGZtdCdcbiAgICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICAgICAgayBvXG5hbmQgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gOlxuICB0eXBlIHggeSB6IGEgYiBjIGQgZSBmIHN0YXRlLlxuICAoc3RhdGUgLT4gZikgLT4gc3RhdGUgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT4geCA9XG4gIGZ1biBrIG8gZm10IHBhZCBwcmVjIC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gICAgfCBOb19wYWRkaW5nICAgLCBOb19wcmVjaXNpb24gICAgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTm9fcGFkZGluZyAgICwgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IE5vX3BhZGRpbmcgICAsIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IExpdF9wYWRkaW5nIF8sIE5vX3ByZWNpc2lvbiAgICAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBMaXRfcGFkZGluZyBfLCBMaXRfcHJlY2lzaW9uIF8gLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTGl0X3BhZGRpbmcgXywgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgTm9fcHJlY2lzaW9uICAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSkpXG5hbmQgZm5fb2ZfY3VzdG9tX2FyaXR5IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgc3RhdGUuXG4gIChzdGF0ZSAtPiBmKSAtPlxuICBzdGF0ZSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4geSA9XG4gIGZ1biBrIG8gZm10IC0+IGZ1bmN0aW9uXG4gICAgfCBDdXN0b21femVybyAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIGZtdFxuICAgIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT5cbiAgICAgICAgY29uc3QgKGZuX29mX2N1c3RvbV9hcml0eSBrIG8gZm10IGFyaXR5KVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBDb250aW51YXRpb25zIGZvciBtYWtlX3ByaW50ZiAqKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGFuIG91dHB1dF9zdHJlYW0uICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIG1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBvdXRwdXRfYWNjIG8gYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGZtdGluZ19saXQpIC0+XG4gICAgbGV0IHMgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gXCJAe1wiOyBvdXRwdXRfYWNjIG8gYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gXCJAW1wiOyBvdXRwdXRfYWNjIG8gYWNjJztcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfY2hhciBvIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gb3V0cHV0X2FjYyBvIHA7IGYgb1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIG8gcDsgZmx1c2ggb1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBvdXRwdXRfYWNjIG8gcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGEgYnVmZmVyLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBtYWtlX3ByaW50Zi4gKilcbmxldCByZWMgYnVmcHV0X2FjYyBiIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmbXRpbmdfbGl0KSAtPlxuICAgIGxldCBzID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAe1wiOyBidWZwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQFtcIjsgYnVmcHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfY2hhciBiIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gYnVmcHV0X2FjYyBiIHA7IGYgYlxuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBidWZwdXRfYWNjIGIgcDtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gYnVmcHV0X2FjYyBiIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIGJ1ZnB1dF9hY2MgYnkgdGhlIGludGVycHJldGF0aW9uIG9mICVhIGFuZCAldC4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgbWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgYiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZm10aW5nX2xpdCkgLT5cbiAgICBsZXQgcyA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQHtcIjsgc3RycHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkBbXCI7IHN0cnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX2NoYXIgYiBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIChmICgpKVxuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIGIgcDtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gc3RycHV0X2FjYyBiIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRXJyb3IgbWFuYWdlbWVudCAqKVxuXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIHByZXR0eS1wcmludGVkIGVycm9yIG1lc3NhZ2UuICopXG5sZXQgZmFpbHdpdGhfbWVzc2FnZSAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgayBhY2MgPSBzdHJwdXRfYWNjIGJ1ZiBhY2M7IGZhaWx3aXRoIChCdWZmZXIuY29udGVudHMgYnVmKSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0dGluZyB0b29scyAqKVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIG9wZW4gYmxvY2sgZGVzY3JpcHRpb24gKGluZGVudCwgYmxvY2tfdHlwZSkgKilcbmxldCBvcGVuX2JveF9vZl9zdHJpbmcgc3RyID1cbiAgaWYgc3RyID0gXCJcIiB0aGVuICgwLCBQcF9ib3gpIGVsc2VcbiAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgICBsZXQgaW52YWxpZF9ib3ggKCkgPSBmYWlsd2l0aF9tZXNzYWdlIFwiaW52YWxpZCBib3ggZGVzY3JpcHRpb24gJVNcIiBzdHIgaW5cbiAgICBsZXQgcmVjIHBhcnNlX3NwYWNlcyBpID1cbiAgICAgIGlmIGkgPSBsZW4gdGhlbiBpIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltpXSB3aXRoXG4gICAgICAgIHwgJyAnIHwgJ1xcdCcgLT4gcGFyc2Vfc3BhY2VzIChpICsgMSlcbiAgICAgICAgfCBfIC0+IGlcbiAgICBhbmQgcGFyc2VfbHdvcmQgaSBqID1cbiAgICAgIGlmIGogPSBsZW4gdGhlbiBqIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltqXSB3aXRoXG4gICAgICAgIHwgJ2EnIC4uICd6JyAtPiBwYXJzZV9sd29yZCBpIChqICsgMSlcbiAgICAgICAgfCBfIC0+IGpcbiAgICBhbmQgcGFyc2VfaW50IGkgaiA9XG4gICAgICBpZiBqID0gbGVuIHRoZW4gaiBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5bal0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT4gcGFyc2VfaW50IGkgKGogKyAxKVxuICAgICAgICB8IF8gLT4gaiBpblxuICAgIGxldCB3c3RhcnQgPSBwYXJzZV9zcGFjZXMgMCBpblxuICAgIGxldCB3ZW5kID0gcGFyc2VfbHdvcmQgd3N0YXJ0IHdzdGFydCBpblxuICAgIGxldCBib3hfbmFtZSA9IFN0cmluZy5zdWIgc3RyIHdzdGFydCAod2VuZCAtIHdzdGFydCkgaW5cbiAgICBsZXQgbnN0YXJ0ID0gcGFyc2Vfc3BhY2VzIHdlbmQgaW5cbiAgICBsZXQgbmVuZCA9IHBhcnNlX2ludCBuc3RhcnQgbnN0YXJ0IGluXG4gICAgbGV0IGluZGVudCA9XG4gICAgICBpZiBuc3RhcnQgPSBuZW5kIHRoZW4gMCBlbHNlXG4gICAgICAgIHRyeSBpbnRfb2Zfc3RyaW5nIChTdHJpbmcuc3ViIHN0ciBuc3RhcnQgKG5lbmQgLSBuc3RhcnQpKVxuICAgICAgICB3aXRoIEZhaWx1cmUgXyAtPiBpbnZhbGlkX2JveCAoKSBpblxuICAgIGxldCBleHBfZW5kID0gcGFyc2Vfc3BhY2VzIG5lbmQgaW5cbiAgICBpZiBleHBfZW5kIDw+IGxlbiB0aGVuIGludmFsaWRfYm94ICgpO1xuICAgIGxldCBib3hfdHlwZSA9IG1hdGNoIGJveF9uYW1lIHdpdGhcbiAgICAgIHwgXCJcIiB8IFwiYlwiIC0+IFBwX2JveFxuICAgICAgfCBcImhcIiAgICAgIC0+IFBwX2hib3hcbiAgICAgIHwgXCJ2XCIgICAgICAtPiBQcF92Ym94XG4gICAgICB8IFwiaHZcIiAgICAgLT4gUHBfaHZib3hcbiAgICAgIHwgXCJob3ZcIiAgICAtPiBQcF9ob3Zib3hcbiAgICAgIHwgXyAgICAgICAgLT4gaW52YWxpZF9ib3ggKCkgaW5cbiAgICAoaW5kZW50LCBib3hfdHlwZSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBQYXJzaW5nIHRvb2xzICopXG5cbigqIENyZWF0ZSBhIHBhZGRpbmdfZm10X2ViYiBmcm9tIGEgcGFkZGluZyBhbmQgYSBmb3JtYXQuICopXG4oKiBDb3B5IHRoZSBwYWRkaW5nIHRvIGRpc2pvaW4gdGhlIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudCBhbmQgcmVzdWx0LiAqKVxubGV0IG1ha2VfcGFkZGluZ19mbXRfZWJiIDogdHlwZSB4IHkgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+IChfLCBfLCBfLCBfLCBfLCBfKSBmbXQgLT5cbiAgICAgIChfLCBfLCBfLCBfLCBfKSBwYWRkaW5nX2ZtdF9lYmIgPVxuZnVuIHBhZCBmbXQgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nICAgICAgICAgLT4gUGFkZGluZ19mbXRfRUJCIChOb19wYWRkaW5nLCBmbXQpXG4gIHwgTGl0X3BhZGRpbmcgKHMsIHcpIC0+IFBhZGRpbmdfZm10X0VCQiAoTGl0X3BhZGRpbmcgKHMsIHcpLCBmbXQpXG4gIHwgQXJnX3BhZGRpbmcgcyAgICAgIC0+IFBhZGRpbmdfZm10X0VCQiAoQXJnX3BhZGRpbmcgcywgZm10KVxuXG4oKiBDcmVhdGUgYSBwcmVjaXNpb25fZm10X2ViYiBmcm9tIGEgcHJlY2lzaW9uIGFuZCBhIGZvcm1hdC4gKilcbigqIENvcHkgdGhlIHByZWNpc2lvbiB0byBkaXNqb2luIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnQgYW5kIHJlc3VsdC4gKilcbmxldCBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIDogdHlwZSB4IHkgLlxuICAgICh4LCB5KSBwcmVjaXNpb24gLT4gKF8sIF8sIF8sIF8sIF8sIF8pIGZtdCAtPlxuICAgICAgKF8sIF8sIF8sIF8sIF8pIHByZWNpc2lvbl9mbXRfZWJiID1cbmZ1biBwcmVjIGZtdCAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgfCBOb19wcmVjaXNpb24gICAgLT4gUHJlY2lzaW9uX2ZtdF9FQkIgKE5vX3ByZWNpc2lvbiwgZm10KVxuICB8IExpdF9wcmVjaXNpb24gcCAtPiBQcmVjaXNpb25fZm10X0VCQiAoTGl0X3ByZWNpc2lvbiBwLCBmbXQpXG4gIHwgQXJnX3ByZWNpc2lvbiAgIC0+IFByZWNpc2lvbl9mbXRfRUJCIChBcmdfcHJlY2lzaW9uLCBmbXQpXG5cbigqIENyZWF0ZSBhIHBhZHByZWNfZm10X2ViYiBmcm9tIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGEgZm9ybWF0LiAqKVxuKCogQ29weSB0aGUgcGFkZGluZyBhbmQgdGhlIHByZWNpc2lvbiB0byBkaXNqb2luIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudHNcbiAgIGFuZCByZXN1bHQuICopXG5sZXQgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgOiB0eXBlIHggeSB6IHQgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh6LCB0KSBwcmVjaXNpb24gLT5cbiAgICAoXywgXywgXywgXywgXywgXykgZm10IC0+XG4gICAgKF8sIF8sIF8sIF8sIF8pIHBhZHByZWNfZm10X2ViYiA9XG5mdW4gcGFkIHByZWMgZm10IC0+XG4gIGxldCBQcmVjaXNpb25fZm10X0VCQiAocHJlYywgZm10JykgPSBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIHByZWMgZm10IGluXG4gIG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAgICAgICAgIC0+IFBhZHByZWNfZm10X0VCQiAoTm9fcGFkZGluZywgcHJlYywgZm10JylcbiAgfCBMaXRfcGFkZGluZyAocywgdykgLT4gUGFkcHJlY19mbXRfRUJCIChMaXRfcGFkZGluZyAocywgdyksIHByZWMsIGZtdCcpXG4gIHwgQXJnX3BhZGRpbmcgcyAgICAgIC0+IFBhZHByZWNfZm10X0VCQiAoQXJnX3BhZGRpbmcgcywgcHJlYywgZm10JylcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHBhcnNpbmcgKilcblxuKCogUGFyc2UgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZm9ybWF0IGFuZCBjcmVhdGUgYSBmbXRfZWJiLiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIGluIGNhc2Ugb2YgaW52YWxpZCBmb3JtYXQuICopXG5sZXQgZm10X2ViYl9vZl9zdHJpbmcgP2xlZ2FjeV9iZWhhdmlvciBzdHIgPVxuICAoKiBQYXJhbWV0ZXJzIG5hbWluZyBjb252ZW50aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBsaXRfc3RhcnQ6IHN0YXJ0IG9mIHRoZSBsaXRlcmFsIHNlcXVlbmNlLiAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHN0cl9pbmQ6IGN1cnJlbnQgaW5kZXggaW4gdGhlIHN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gZW5kX2luZDogZW5kIG9mIHRoZSBjdXJyZW50IChzdWItKWZvcm1hdC4gICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBwY3RfaW5kOiBpbmRleCBvZiB0aGUgJyUnIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgKilcbiAgKCogICAtIHplcm86ICBpcyB0aGUgJzAnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gbWludXM6IGlzIHRoZSAnLScgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBwbHVzOiAgaXMgdGhlICcrJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIGhhc2g6ICBpcyB0aGUgJyMnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gc3BhY2U6IGlzIHRoZSAnICcgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBpZ246ICAgaXMgdGhlICdfJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIHBhZDogcGFkZGluZyBvZiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gcHJlYzogcHJlY2lzaW9uIG9mIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBzeW1iOiBjaGFyIHJlcHJlc2VudGluZyB0aGUgY29udmVyc2lvbiAoJ2MnLCAncycsICdkJywgLi4uKS4gKilcbiAgKCogICAtIGNoYXJfc2V0OiBzZXQgb2YgY2hhcmFjdGVycyBhcyBiaXRtYXAgKHNlZSBzY2FuZiAlWy4uLl0pLiAgICAqKVxuXG4gIGxldCBsZWdhY3lfYmVoYXZpb3IgPSBtYXRjaCBsZWdhY3lfYmVoYXZpb3Igd2l0aFxuICAgIHwgU29tZSBmbGFnIC0+IGZsYWdcbiAgICB8IE5vbmUgLT4gdHJ1ZVxuICAoKiAgV2hlbiB0aGlzIGZsYWcgaXMgZW5hYmxlZCwgdGhlIGZvcm1hdCBwYXJzZXIgdHJpZXMgdG8gYmVoYXZlIGFzXG4gICAgICB0aGUgPDQuMDIgaW1wbGVtZW50YXRpb25zLCBpbiBwYXJ0aWN1bGFyIGl0IGlnbm9yZXMgbW9zdCBiZW5pbmVcbiAgICAgIG5vbnNlbnNpY2FsIGZvcm1hdC4gV2hlbiB0aGUgZmxhZyBpcyBkaXNhYmxlZCwgaXQgd2lsbCByZWplY3QgYW55XG4gICAgICBmb3JtYXQgdGhhdCBpcyBub3QgYWNjZXB0ZWQgYnkgdGhlIHNwZWNpZmljYXRpb24uXG5cbiAgICAgIEEgdHlwaWNhbCBleGFtcGxlIHdvdWxkIGJlIFwiJSsgZFwiOiBzcGVjaWZ5aW5nIGJvdGggJysnIChpZiB0aGVcbiAgICAgIG51bWJlciBpcyBwb3NpdGl2ZSwgcGFkIHdpdGggYSAnKycgdG8gZ2V0IHRoZSBzYW1lIHdpZHRoIGFzXG4gICAgICBuZWdhdGl2ZSBudW1iZXJzKSBhbmQgJyAnIChpZiB0aGUgbnVtYmVyIGlzIHBvc2l0aXZlLCBwYWQgd2l0aFxuICAgICAgYSBzcGFjZSkgZG9lcyBub3QgbWFrZSBzZW5zZSwgYnV0IHRoZSBsZWdhY3kgKDwgNC4wMilcbiAgICAgIGltcGxlbWVudGF0aW9uIHdhcyBoYXBweSB0byBqdXN0IGlnbm9yZSB0aGUgc3BhY2UuXG4gICopXG4gIGluXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlLiAqKVxuICBsZXQgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBzdHJfaW5kIG1zZyA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgJXNcIlxuICAgICAgc3RyIHN0cl9pbmQgbXNnXG4gIGluXG5cbiAgKCogVXNlZCB3aGVuIHRoZSBlbmQgb2YgdGhlIGZvcm1hdCAob3IgdGhlIGN1cnJlbnQgc3ViLWZvcm1hdCkgd2FzIGVuY291bnRlcmVkXG4gICAgICB1bmV4cGVjdGVkbHkuICopXG4gIGxldCB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZCA9XG4gICAgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBlbmRfaW5kXG4gICAgICBcInVuZXhwZWN0ZWQgZW5kIG9mIGZvcm1hdFwiXG4gIGluXG5cbiAgKCogVXNlZCBmb3IgJTBjOiBubyBvdGhlciB3aWR0aHMgYXJlIGltcGxlbWVudGVkICopXG4gIGxldCBpbnZhbGlkX25vbm51bGxfY2hhcl93aWR0aCBzdHJfaW5kID1cbiAgICBpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIHN0cl9pbmRcbiAgICAgIFwibm9uLXplcm8gd2lkdGhzIGFyZSB1bnN1cHBvcnRlZCBmb3IgJWMgY29udmVyc2lvbnNcIlxuICBpblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgYW4gb3B0aW9uIGRlcGVuZGVuY3lcbiAgICAgcHJvYmxlbS4gKilcbiAgbGV0IGludmFsaWRfZm9ybWF0X3dpdGhvdXQgc3RyX2luZCBjIHMgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICclYycgd2l0aG91dCAlc1wiXG4gICAgICBzdHIgc3RyX2luZCBjIHNcbiAgaW5cblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgYW4gdW5leHBlY3RlZFxuICAgICBjaGFyYWN0ZXIuICopXG4gIGxldCBleHBlY3RlZF9jaGFyYWN0ZXIgc3RyX2luZCBleHBlY3RlZCByZWFkID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICVzIGV4cGVjdGVkLCByZWFkICVDXCJcbiAgICAgIHN0ciBzdHJfaW5kIGV4cGVjdGVkIHJlYWRcbiAgaW5cblxuICAoKiBQYXJzZSB0aGUgc3RyaW5nIGZyb20gYmVnX2luZCAoaW5jbHVkZWQpIHRvIGVuZF9pbmQgKGV4Y2x1ZGVkKS4gKilcbiAgbGV0IHJlYyBwYXJzZSA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBiZWdfaW5kIGVuZF9pbmQgLT4gcGFyc2VfbGl0ZXJhbCBiZWdfaW5kIGJlZ19pbmQgZW5kX2luZFxuXG4gICgqIFJlYWQgbGl0ZXJhbCBjaGFyYWN0ZXJzIHVwIHRvICclJyBvciAnQCcgc3BlY2lhbCBjaGFyYWN0ZXJzLiAqKVxuICBhbmQgcGFyc2VfbGl0ZXJhbCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gbGl0X3N0YXJ0IHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgRW5kX29mX2Zvcm1hdCBlbHNlXG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2VfZm9ybWF0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBhZGRfbGl0ZXJhbCBsaXRfc3RhcnQgc3RyX2luZCBmbXRfcmVzdFxuICAgICAgfCAnQCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZV9hZnRlcl9hdCAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgZm10X3Jlc3RcbiAgICAgIHwgXyAtPlxuICAgICAgICBwYXJzZV9saXRlcmFsIGxpdF9zdGFydCAoc3RyX2luZCArIDEpIGVuZF9pbmRcblxuICAoKiBQYXJzZSBhIGZvcm1hdCBhZnRlciAnJScgKilcbiAgYW5kIHBhcnNlX2Zvcm1hdCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIGVuZF9pbmQgLT4gcGFyc2VfaWduIHBjdF9pbmQgKHBjdF9pbmQgKyAxKSBlbmRfaW5kXG5cbiAgYW5kIHBhcnNlX2lnbiA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXycgLT4gcGFyc2VfZmxhZ3MgcGN0X2luZCAoc3RyX2luZCsxKSBlbmRfaW5kIHRydWVcbiAgICAgIHwgXyAtPiBwYXJzZV9mbGFncyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBmYWxzZVxuXG4gIGFuZCBwYXJzZV9mbGFncyA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiAoXywgXywgZSwgZikgZm10X2ViYlxuICA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBpZ24gLT5cbiAgICBsZXQgemVybyA9IHJlZiBmYWxzZSBhbmQgbWludXMgPSByZWYgZmFsc2VcbiAgICBhbmQgcGx1cyA9IHJlZiBmYWxzZSBhbmQgc3BhY2UgPSByZWYgZmFsc2VcbiAgICBhbmQgaGFzaCA9IHJlZiBmYWxzZSBpblxuICAgIGxldCBzZXRfZmxhZyBzdHJfaW5kIGZsYWcgPVxuICAgICAgKCogaW4gbGVnYWN5IG1vZGUsIGR1cGxpY2F0ZSBmbGFncyBhcmUgYWNjZXB0ZWQgKilcbiAgICAgIGlmICFmbGFnICYmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgZHVwbGljYXRlIGZsYWcgJUNcIlxuICAgICAgICAgIHN0ciBzdHJfaW5kIHN0ci5bc3RyX2luZF07XG4gICAgICBmbGFnIDo9IHRydWU7XG4gICAgaW5cbiAgICBsZXQgcmVjIHJlYWRfZmxhZ3Mgc3RyX2luZCA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICcwJyAtPiBzZXRfZmxhZyBzdHJfaW5kIHplcm87ICByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJy0nIC0+IHNldF9mbGFnIHN0cl9pbmQgbWludXM7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnKycgLT4gc2V0X2ZsYWcgc3RyX2luZCBwbHVzOyAgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICcjJyAtPiBzZXRfZmxhZyBzdHJfaW5kIGhhc2g7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnICcgLT4gc2V0X2ZsYWcgc3RyX2luZCBzcGFjZTsgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8IF8gLT5cbiAgICAgICAgcGFyc2VfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZFxuICAgICAgICAgICF6ZXJvICFtaW51cyAhcGx1cyAhaGFzaCAhc3BhY2UgaWduXG4gICAgICBlbmRcbiAgICBpblxuICAgIHJlYWRfZmxhZ3Mgc3RyX2luZFxuXG4gICgqIFRyeSB0byByZWFkIGEgZGlnaXRhbCBvciBhICcqJyBwYWRkaW5nLiAqKVxuICBhbmQgcGFyc2VfcGFkZGluZyA6IHR5cGUgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgIChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIHplcm8gbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhZHR5ID0gbWF0Y2ggemVybywgbWludXMgd2l0aFxuICAgICAgfCBmYWxzZSwgZmFsc2UgLT4gUmlnaHRcbiAgICAgIHwgZmFsc2UsIHRydWUgIC0+IExlZnRcbiAgICAgIHwgIHRydWUsIGZhbHNlIC0+IFplcm9zXG4gICAgICB8ICB0cnVlLCB0cnVlICAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBMZWZ0XG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICctJyBcIjBcIiBpblxuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPlxuICAgICAgbGV0IG5ld19pbmQsIHdpZHRoID0gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDAgaW5cbiAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBuZXdfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAoTGl0X3BhZGRpbmcgKHBhZHR5LCB3aWR0aCkpXG4gICAgfCAnKicgLT5cbiAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlXG4gICAgICAgIGlnbiAoQXJnX3BhZGRpbmcgcGFkdHkpXG4gICAgfCBfIC0+XG4gICAgICBiZWdpbiBtYXRjaCBwYWR0eSB3aXRoXG4gICAgICB8IExlZnQgIC0+XG4gICAgICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAgIGludmFsaWRfZm9ybWF0X3dpdGhvdXQgKHN0cl9pbmQgLSAxKSAnLScgXCJwYWRkaW5nXCI7XG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIE5vX3BhZGRpbmdcbiAgICAgIHwgWmVyb3MgLT5cbiAgICAgICAgICgqIGEgJzAnIHBhZGRpbmcgaW5kaWNhdGlvbiBub3QgZm9sbG93ZWQgYnkgYW55dGhpbmcgc2hvdWxkXG4gICAgICAgICAgIGJlIGludGVycHJldGVkIGFzIGEgUmlnaHQgcGFkZGluZyBvZiB3aWR0aCAwLiBUaGlzIGlzIHVzZWRcbiAgICAgICAgICAgYnkgc2Nhbm5pbmcgY29udmVyc2lvbnMgJTBzIGFuZCAlMGMgKilcbiAgICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgKExpdF9wYWRkaW5nIChSaWdodCwgMCkpXG4gICAgICB8IFJpZ2h0IC0+XG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIE5vX3BhZGRpbmdcbiAgICAgIGVuZFxuXG4gICgqIElzIHByZWNpc2lvbiBkZWZpbmVkPyAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfcGFkZGluZyA6IHR5cGUgeCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCBfKSBwYWRkaW5nIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcuJyAtPlxuICAgICAgcGFyc2VfcHJlY2lzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgcGFkXG4gICAgfCBzeW1iIC0+XG4gICAgICBwYXJzZV9jb252ZXJzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkXG4gICAgICAgIE5vX3ByZWNpc2lvbiBwYWQgc3ltYlxuXG4gICgqIFJlYWQgdGhlIGRpZ2l0YWwgb3IgJyonIHByZWNpc2lvbi4gKilcbiAgYW5kIHBhcnNlX3ByZWNpc2lvbiA6IHR5cGUgeCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCBfKSBwYWRkaW5nIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFyc2VfbGl0ZXJhbCBtaW51cyBzdHJfaW5kID1cbiAgICAgIGxldCBuZXdfaW5kLCBwcmVjID0gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDAgaW5cbiAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIG5ld19pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIHBhZCAoTGl0X3ByZWNpc2lvbiBwcmVjKSBpblxuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPiBwYXJzZV9saXRlcmFsIG1pbnVzIHN0cl9pbmRcbiAgICB8ICgnKycgfCAnLScpIGFzIHN5bWIgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT5cbiAgICAgICgqIExlZ2FjeSBtb2RlIHdvdWxkIGFjY2VwdCBhbmQgaWdub3JlICcrJyBvciAnLScgYmVmb3JlIHRoZVxuICAgICAgICAgaW50ZWdlciBkZXNjcmliaW5nIHRoZSBkZXNpcmVkIHByZWNpc2lvbjsgbm90ZSB0aGF0IHRoaXNcbiAgICAgICAgIGNhbm5vdCBoYXBwZW4gZm9yIHBhZGRpbmcgd2lkdGgsIGFzICcrJyBhbmQgJy0nIGFscmVhZHkgaGF2ZVxuICAgICAgICAgYSBzZW1hbnRpY3MgdGhlcmUuXG5cbiAgICAgICAgIFRoYXQgc2FpZCwgdGhlIGlkZWEgKHN1cHBvcnRlZCBieSB0aGlzIHR3ZWFrKSB0aGF0IHdpZHRoIGFuZFxuICAgICAgICAgcHJlY2lzaW9uIGxpdGVyYWxzIGFyZSBcImludGVnZXIgbGl0ZXJhbHNcIiBpbiB0aGUgT0NhbWwgc2Vuc2UgaXNcbiAgICAgICAgIHN0aWxsIGJsYXRhbnRseSB3cm9uZywgYXMgMTIzXzQ1NiBvciAweEZGIGFyZSByZWplY3RlZC4gKilcbiAgICAgIHBhcnNlX2xpdGVyYWwgKG1pbnVzIHx8IHN5bWIgPSAnLScpIChzdHJfaW5kICsgMSlcbiAgICB8ICcqJyAtPlxuICAgICAgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZVxuICAgICAgICBpZ24gcGFkIEFyZ19wcmVjaXNpb25cbiAgICB8IF8gLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICgqIG5vdGUgdGhhdCBsZWdhY3kgaW1wbGVtZW50YXRpb24gZGlkIG5vdCBpZ25vcmUgJy4nIHdpdGhvdXRcbiAgICAgICAgICAgYSBudW1iZXIgKGFzIGl0IGRvZXMgZm9yIHBhZGRpbmcgaW5kaWNhdGlvbnMpLCBidXRcbiAgICAgICAgICAgaW50ZXJwcmV0cyBpdCBhcyAnLjAnICopXG4gICAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgcGFkIChMaXRfcHJlY2lzaW9uIDApXG4gICAgICBlbHNlXG4gICAgICAgIGludmFsaWRfZm9ybWF0X3dpdGhvdXQgKHN0cl9pbmQgLSAxKSAnLicgXCJwcmVjaXNpb25cIlxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBjb252ZXJzaW9uLiAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIDogdHlwZSB4IHkgeiB0IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKHgsIHkpIHBhZGRpbmcgLT4gKHosIHQpIHByZWNpc2lvbiAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCBwcmVjIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFyc2VfY29udiAodHlwZSB1KSAodHlwZSB2KSAocGFkcHJlYyA6ICh1LCB2KSBwYWRkaW5nKSA9XG4gICAgICBwYXJzZV9jb252ZXJzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkXG4gICAgICAgIHByZWMgcGFkcHJlYyBzdHIuW3N0cl9pbmRdIGluXG4gICAgKCogaW4gbGVnYWN5IG1vZGUsIHNvbWUgZm9ybWF0cyAoJXMgYW5kICVTKSBhY2NlcHQgYSB3ZWlyZCBtaXggb2ZcbiAgICAgICBwYWRkaW5nIGFuZCBwcmVjaXNpb24sIHdoaWNoIGlzIG1lcmdlZCBhcyBhIHNpbmdsZSBwYWRkaW5nXG4gICAgICAgaW5mb3JtYXRpb24uIEZvciBleGFtcGxlLCBpbiAlLjEwcyB0aGUgcHJlY2lzaW9uIGlzIGltcGxpY2l0bHlcbiAgICAgICB1bmRlcnN0b29kIGFzIHBhZGRpbmcgJTEwcywgYnV0IHRoZSBsZWZ0LXBhZGRpbmcgY29tcG9uZW50IG1heVxuICAgICAgIGJlIHNwZWNpZmllZCBlaXRoZXIgYXMgYSBsZWZ0IHBhZGRpbmcgb3IgYSBuZWdhdGl2ZSBwcmVjaXNpb246XG4gICAgICAgJS0uM3MgYW5kICUuLTNzIGFyZSBlcXVpdmFsZW50IHRvICUtM3MgKilcbiAgICBtYXRjaCBwYWQgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAtPiAoXG4gICAgICBtYXRjaCBtaW51cywgcHJlYyB3aXRoXG4gICAgICAgIHwgXywgTm9fcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgTm9fcGFkZGluZ1xuICAgICAgICB8IGZhbHNlLCBMaXRfcHJlY2lzaW9uIG4gLT4gcGFyc2VfY29udiAoTGl0X3BhZGRpbmcgKFJpZ2h0LCBuKSlcbiAgICAgICAgfCB0cnVlLCBMaXRfcHJlY2lzaW9uIG4gLT4gcGFyc2VfY29udiAoTGl0X3BhZGRpbmcgKExlZnQsIG4pKVxuICAgICAgICB8IGZhbHNlLCBBcmdfcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgKEFyZ19wYWRkaW5nIFJpZ2h0KVxuICAgICAgICB8IHRydWUsIEFyZ19wcmVjaXNpb24gLT4gcGFyc2VfY29udiAoQXJnX3BhZGRpbmcgTGVmdClcbiAgICApXG4gICAgfCBwYWQgLT4gcGFyc2VfY29udiBwYWRcblxuICAoKiBDYXNlIGFuYWx5c2lzIG9uIGNvbnZlcnNpb24uICopXG4gIGFuZCBwYXJzZV9jb252ZXJzaW9uIDogdHlwZSB4IHkgeiB0IHUgdiBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiAoeCwgeSkgcGFkZGluZyAtPlxuICAgICAgICAoeiwgdCkgcHJlY2lzaW9uIC0+ICh1LCB2KSBwYWRkaW5nIC0+IGNoYXIgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgcHJlYyBwYWRwcmVjIHN5bWIgLT5cbiAgICAoKiBGbGFncyB1c2VkIHRvIGNoZWNrIG9wdGlvbiB1c2FnZXMvY29tcGF0aWJpbGl0aWVzLiAqKVxuICAgIGxldCBwbHVzX3VzZWQgID0gcmVmIGZhbHNlIGFuZCBoYXNoX3VzZWQgPSByZWYgZmFsc2VcbiAgICBhbmQgc3BhY2VfdXNlZCA9IHJlZiBmYWxzZSBhbmQgaWduX3VzZWQgICA9IHJlZiBmYWxzZVxuICAgIGFuZCBwYWRfdXNlZCAgID0gcmVmIGZhbHNlIGFuZCBwcmVjX3VzZWQgID0gcmVmIGZhbHNlIGluXG5cbiAgICAoKiBBY2Nlc3MgdG8gb3B0aW9ucywgdXBkYXRlIGZsYWdzLiAqKVxuICAgIGxldCBnZXRfcGx1cyAgICAoKSA9IHBsdXNfdXNlZCAgOj0gdHJ1ZTsgcGx1c1xuICAgIGFuZCBnZXRfaGFzaCAgICgpID0gaGFzaF91c2VkIDo9IHRydWU7IGhhc2hcbiAgICBhbmQgZ2V0X3NwYWNlICAgKCkgPSBzcGFjZV91c2VkIDo9IHRydWU7IHNwYWNlXG4gICAgYW5kIGdldF9pZ24gICAgICgpID0gaWduX3VzZWQgICA6PSB0cnVlOyBpZ25cbiAgICBhbmQgZ2V0X3BhZCAgICAgKCkgPSBwYWRfdXNlZCAgIDo9IHRydWU7IHBhZFxuICAgIGFuZCBnZXRfcHJlYyAgICAoKSA9IHByZWNfdXNlZCAgOj0gdHJ1ZTsgcHJlY1xuICAgIGFuZCBnZXRfcGFkcHJlYyAoKSA9IHBhZF91c2VkICAgOj0gdHJ1ZTsgcGFkcHJlYyBpblxuXG4gICAgbGV0IGdldF9pbnRfcGFkICgpIDogKHgseSkgcGFkZGluZyA9XG4gICAgICAoKiAlNS4zZCBpcyBhY2NlcHRlZCBhbmQgbWVhbmluZ2Z1bDogcGFkIHRvIGxlbmd0aCA1IHdpdGhcbiAgICAgICAgIHNwYWNlcywgYnV0IGZpcnN0IHBhZCB3aXRoIHplcm9zIHVwdG8gbGVuZ3RoIDMgKDAtcGFkZGluZ1xuICAgICAgICAgaXMgdGhlIGludGVycHJldGF0aW9uIG9mIFwicHJlY2lzaW9uXCIgZm9yIGludGVnZXIgZm9ybWF0cykuXG5cbiAgICAgICAgICUwNS4zZCBpcyByZWR1bmRhbnQ6IHBhZCB0byBsZW5ndGggNSAqd2l0aCB6ZXJvcyosIGJ1dFxuICAgICAgICAgZmlyc3QgcGFkIHdpdGggemVyb3MuLi4gVG8gYWRkIGluc3VsdCB0byB0aGUgaW5qdXJ5LCB0aGVcbiAgICAgICAgIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBpZ25vcmVzIHRoZSAwLXBhZGRpbmcgaW5kaWNhdGlvbiBhbmRcbiAgICAgICAgIGRvZXMgdGhlIDUgcGFkZGluZyB3aXRoIHNwYWNlcyBpbnN0ZWFkLiBXZSByZXVzZSB0aGlzXG4gICAgICAgICBpbnRlcnByZXRhdGlvbiBmb3IgY29tcGF0aWJpbGl0eSwgYnV0IHN0YXRpY2FsbHkgcmVqZWN0IHRoaXNcbiAgICAgICAgIGZvcm1hdCB3aGVuIHRoZSBsZWdhY3kgbW9kZSBpcyBkaXNhYmxlZCwgdG8gcHJvdGVjdCBzdHJpY3RcbiAgICAgICAgIHVzZXJzIGZyb20gdGhpcyBjb3JuZXIgY2FzZS4gKilcbiAgICAgICBtYXRjaCBnZXRfcGFkICgpLCBnZXRfcHJlYyAoKSB3aXRoXG4gICAgICAgICB8IHBhZCwgTm9fcHJlY2lzaW9uIC0+IHBhZFxuICAgICAgICAgfCBOb19wYWRkaW5nLCBfICAgICAtPiBOb19wYWRkaW5nXG4gICAgICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgbiksIF8gLT5cbiAgICAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGl0X3BhZGRpbmcgKFJpZ2h0LCBuKVxuICAgICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnMCcgXCJwcmVjaXNpb25cIlxuICAgICAgICAgfCBBcmdfcGFkZGluZyBaZXJvcywgXyAtPlxuICAgICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBBcmdfcGFkZGluZyBSaWdodFxuICAgICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnMCcgXCJwcmVjaXNpb25cIlxuICAgICAgICAgfCBMaXRfcGFkZGluZyBfIGFzIHBhZCwgXyAtPiBwYWRcbiAgICAgICAgIHwgQXJnX3BhZGRpbmcgXyBhcyBwYWQsIF8gLT4gcGFkIGluXG5cbiAgICAoKiBDaGVjayB0aGF0IHBhZHR5IDw+IFplcm9zLiAqKVxuICAgIGxldCBjaGVja19ub18wIHN5bWIgKHR5cGUgYSBiKSAocGFkIDogKGEsIGIpIHBhZGRpbmcpIDogKGEsYikgcGFkZGluZyA9XG4gICAgICBtYXRjaCBwYWQgd2l0aFxuICAgICAgfCBOb19wYWRkaW5nIC0+IHBhZFxuICAgICAgfCBMaXRfcGFkZGluZyAoKExlZnQgfCBSaWdodCksIF8pIC0+IHBhZFxuICAgICAgfCBBcmdfcGFkZGluZyAoTGVmdCB8IFJpZ2h0KSAtPiBwYWRcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aClcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIjBcIlxuICAgICAgfCBBcmdfcGFkZGluZyBaZXJvcyAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBBcmdfcGFkZGluZyBSaWdodFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiMFwiXG4gICAgaW5cblxuICAgICgqIEdldCBwYWRkaW5nIGFzIGEgcGFkX29wdGlvbiAoc2VlIFwiJV9cIiwgXCIle1wiLCBcIiUoXCIgYW5kIFwiJVtcIikuXG4gICAgICAgKG5vIG5lZWQgZm9yIGxlZ2FjeSBtb2RlIHR3ZWFraW5nLCB0aG9zZSB3ZXJlIHJlamVjdGVkIGJ5IHRoZVxuICAgICAgIGxlZ2FjeSBwYXJzZXIgYXMgd2VsbCkgKilcbiAgICBsZXQgb3B0X29mX3BhZCBjICh0eXBlIGEpICh0eXBlIGIpIChwYWQgOiAoYSwgYikgcGFkZGluZykgPSBtYXRjaCBwYWQgd2l0aFxuICAgICAgfCBOb19wYWRkaW5nIC0+IE5vbmVcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aCkgLT4gU29tZSB3aWR0aFxuICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBTb21lIHdpZHRoXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInMCdcIlxuICAgICAgfCBMaXRfcGFkZGluZyAoTGVmdCwgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIFNvbWUgd2lkdGhcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIictJ1wiXG4gICAgICB8IEFyZ19wYWRkaW5nIF8gLT4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInKidcIlxuICAgIGluXG4gICAgbGV0IGdldF9wYWRfb3B0IGMgPSBvcHRfb2ZfcGFkIGMgKGdldF9wYWQgKCkpIGluXG4gICAgbGV0IGdldF9wYWRwcmVjX29wdCBjID0gb3B0X29mX3BhZCBjIChnZXRfcGFkcHJlYyAoKSkgaW5cblxuICAgICgqIEdldCBwcmVjaXNpb24gYXMgYSBwcmVjX29wdGlvbiAoc2VlIFwiJV9mXCIpLlxuICAgICAgIChubyBuZWVkIGZvciBsZWdhY3kgbW9kZSB0d2Vha2luZywgdGhvc2Ugd2VyZSByZWplY3RlZCBieSB0aGVcbiAgICAgICBsZWdhY3kgcGFyc2VyIGFzIHdlbGwpICopXG4gICAgbGV0IGdldF9wcmVjX29wdCAoKSA9IG1hdGNoIGdldF9wcmVjICgpIHdpdGhcbiAgICAgIHwgTm9fcHJlY2lzaW9uICAgICAgIC0+IE5vbmVcbiAgICAgIHwgTGl0X3ByZWNpc2lvbiBuZGVjIC0+IFNvbWUgbmRlY1xuICAgICAgfCBBcmdfcHJlY2lzaW9uICAgICAgLT4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICdfJyBcIicqJ1wiXG4gICAgaW5cblxuICAgIGxldCBmbXRfcmVzdWx0ID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnLCcgLT5cbiAgICAgIHBhcnNlIHN0cl9pbmQgZW5kX2luZFxuICAgIHwgJ2MnIC0+XG4gICAgICBsZXQgY2hhcl9mb3JtYXQgZm10X3Jlc3QgPSAoKiAlYyAqKVxuICAgICAgICBpZiBnZXRfaWduICgpXG4gICAgICAgIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9jaGFyLCBmbXRfcmVzdCkpXG4gICAgICAgIGVsc2UgRm10X0VCQiAoQ2hhciBmbXRfcmVzdClcbiAgICAgIGluXG4gICAgICBsZXQgc2Nhbl9mb3JtYXQgZm10X3Jlc3QgPSAoKiAlMGMgKilcbiAgICAgICAgaWYgZ2V0X2lnbiAoKVxuICAgICAgICB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIsIGZtdF9yZXN0KSlcbiAgICAgICAgZWxzZSBGbXRfRUJCIChTY2FuX25leHRfY2hhciBmbXRfcmVzdClcbiAgICAgIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgYmVnaW4gbWF0Y2ggZ2V0X3BhZF9vcHQgJ2MnIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGNoYXJfZm9ybWF0IGZtdF9yZXN0XG4gICAgICAgIHwgU29tZSAwIC0+IHNjYW5fZm9ybWF0IGZtdF9yZXN0XG4gICAgICAgIHwgU29tZSBfbiAtPlxuICAgICAgICAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yXG4gICAgICAgICAgIHRoZW4gaW52YWxpZF9ub25udWxsX2NoYXJfd2lkdGggc3RyX2luZFxuICAgICAgICAgICBlbHNlICgqIGxlZ2FjeSBpZ25vcmVzICVjIHdpZHRocyAqKSBjaGFyX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgZW5kXG4gICAgfCAnQycgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9jYW1sX2NoYXIsZm10X3Jlc3QpKVxuICAgICAgZWxzZSBGbXRfRUJCIChDYW1sX2NoYXIgZm10X3Jlc3QpXG4gICAgfCAncycgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc3RyaW5nIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChTdHJpbmcgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnUycgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfY2FtbF9zdHJpbmcgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKENhbWxfc3RyaW5nIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2QnIHwgJ2knIHwgJ3gnIHwgJ1gnIHwgJ28nIHwgJ3UnIC0+XG4gICAgICBsZXQgaWNvbnYgPSBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgKGdldF9zcGFjZSAoKSkgc3ltYiBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnTicgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgY291bnRlciA9IFRva2VuX2NvdW50ZXIgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBjb3VudGVyIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpKVxuICAgIHwgJ2wnIHwgJ24nIHwgJ0wnIHdoZW4gc3RyX2luZD1lbmRfaW5kIHx8IG5vdCAoaXNfaW50X2Jhc2Ugc3RyLltzdHJfaW5kXSkgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgY291bnRlciA9IGNvdW50ZXJfb2ZfY2hhciBzeW1iIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgY291bnRlciBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdF9yZXN0KSlcbiAgICB8ICdsJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgICAgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50MzIgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQzMiAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ24nIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpXG4gICAgICAgICAgKGdldF9oYXNoICgpKSAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9uYXRpdmVpbnQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChOYXRpdmVpbnQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdMJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgICAgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50NjQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQ2NCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2YnIHwgJ2UnIHwgJ0UnIHwgJ2cnIHwgJ0cnIHwgJ0YnIHwgJ2gnIHwgJ0gnIC0+XG4gICAgICBsZXQgZmNvbnYgPVxuICAgICAgICBjb21wdXRlX2Zsb2F0X2NvbnYgcGN0X2luZCBzdHJfaW5kXG4gICAgICAgICAgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpIChnZXRfc3BhY2UgKCkpIHN5bWIgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zsb2F0IChnZXRfcGFkX29wdCAnXycsIGdldF9wcmVjX29wdCAoKSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoRmxvYXQgKGZjb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdiJyB8ICdCJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9ib29sIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChCb29sIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2EnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoQWxwaGEgZm10X3Jlc3QpXG4gICAgfCAndCcgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChUaGV0YSBmbXRfcmVzdClcbiAgICB8ICdyJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3JlYWRlciwgZm10X3Jlc3QpKVxuICAgICAgZWxzZSBGbXRfRUJCIChSZWFkZXIgZm10X3Jlc3QpXG4gICAgfCAnIScgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGbHVzaCBmbXRfcmVzdClcbiAgICB8ICgnJScgfCAnQCcpIGFzIGMgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKGMsIGZtdF9yZXN0KSlcbiAgICB8ICd7JyAtPlxuICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgJ30nIGluXG4gICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCBzdWJfZW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdWJfZW5kICsgMikgZW5kX2luZCBpblxuICAgICAgbGV0IHN1Yl9mbXR0eSA9IGZtdHR5X29mX2ZtdCBzdWJfZm10IGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zvcm1hdF9hcmcgKGdldF9wYWRfb3B0ICdfJywgc3ViX2ZtdHR5KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdF9hcmcgKGdldF9wYWRfb3B0ICd7Jywgc3ViX2ZtdHR5LCBmbXRfcmVzdCkpXG4gICAgfCAnKCcgLT5cbiAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kICcpJyBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3ViX2VuZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIHN1Yl9lbmQgaW5cbiAgICAgIGxldCBzdWJfZm10dHkgPSBmbXR0eV9vZl9mbXQgc3ViX2ZtdCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mb3JtYXRfc3Vic3QgKGdldF9wYWRfb3B0ICdfJywgc3ViX2ZtdHR5KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdF9zdWJzdCAoZ2V0X3BhZF9vcHQgJygnLCBzdWJfZm10dHksIGZtdF9yZXN0KSlcbiAgICB8ICdbJyAtPlxuICAgICAgbGV0IG5leHRfaW5kLCBjaGFyX3NldCA9IHBhcnNlX2NoYXJfc2V0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgKGdldF9wYWRfb3B0ICdfJywgY2hhcl9zZXQpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9jaGFyX3NldCAoZ2V0X3BhZF9vcHQgJ1snLCBjaGFyX3NldCwgZm10X3Jlc3QpKVxuICAgIHwgJy0nIHwgJysnIHwgJyMnIHwgJyAnIHwgJ18nIC0+XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICBmbGFnICVDIGlzIG9ubHkgYWxsb3dlZCBhZnRlciB0aGUgJyUlJywgYmVmb3JlIHBhZGRpbmcgYW5kIHByZWNpc2lvblwiXG4gICAgICAgIHN0ciBwY3RfaW5kIHN5bWJcbiAgICB8IF8gLT5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgIGludmFsaWQgY29udmVyc2lvbiBcXFwiJSUlY1xcXCJcIiBzdHIgKHN0cl9pbmQgLSAxKSBzeW1iXG4gICAgaW5cbiAgICAoKiBDaGVjayBmb3IgdW51c2VkIG9wdGlvbnMsIGFuZCByZWplY3QgdGhlbSBhcyBpbmNvbXBhdGlibGUuXG5cbiAgICAgICBTdWNoIGNoZWNrcyBuZWVkIHRvIGJlIGRpc2FibGVkIGluIGxlZ2FjeSBtb2RlLCBhcyB0aGUgbGVnYWN5XG4gICAgICAgcGFyc2VyIHNpbGVudGx5IGlnbm9yZWQgaW5jb21wYXRpYmxlIGZsYWdzLiAqKVxuICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlbiBiZWdpblxuICAgIGlmIG5vdCAhcGx1c191c2VkICYmIHBsdXMgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInKydcIjtcbiAgICBpZiBub3QgIWhhc2hfdXNlZCAmJiBoYXNoIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyMnXCI7XG4gICAgaWYgbm90ICFzcGFjZV91c2VkICYmIHNwYWNlIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyAnXCI7XG4gICAgaWYgbm90ICFwYWRfdXNlZCAgJiYgUGFkZGluZ19FQkIgcGFkIDw+IFBhZGRpbmdfRUJCIE5vX3BhZGRpbmcgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCJgcGFkZGluZydcIjtcbiAgICBpZiBub3QgIXByZWNfdXNlZCAmJiBQcmVjaXNpb25fRUJCIHByZWMgPD4gUHJlY2lzaW9uX0VCQiBOb19wcmVjaXNpb24gdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIChpZiBpZ24gdGhlbiAnXycgZWxzZSBzeW1iKVxuICAgICAgICBcImBwcmVjaXNpb24nXCI7XG4gICAgaWYgaWduICYmIHBsdXMgdGhlbiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJ18nIFwiJysnXCI7XG4gICAgZW5kO1xuICAgICgqIHRoaXMgbGFzdCB0ZXN0IG11c3Qgbm90IGJlIGRpc2FibGVkIGluIGxlZ2FjeSBtb2RlLFxuICAgICAgIGFzIGlnbm9yaW5nIGl0IHdvdWxkIHR5cGljYWxseSByZXN1bHQgaW4gYSBkaWZmZXJlbnQgdHlwaW5nXG4gICAgICAgdGhhbiB3aGF0IHRoZSBsZWdhY3kgcGFyc2VyIHVzZWQgKilcbiAgICBpZiBub3QgIWlnbl91c2VkICYmIGlnbiB0aGVuXG4gICAgICBiZWdpbiBtYXRjaCBzeW1iIHdpdGhcbiAgICAgICAgKCogYXJndW1lbnQtbGVzcyBmb3JtYXRzIGNhbiBzYWZlbHkgYmUgaWdub3JlZCBpbiBsZWdhY3kgbW9kZSAqKVxuICAgICAgICB8ICgnQCcgfCAnJScgfCAnIScgfCAnLCcpIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+ICgpXG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJ18nXCJcbiAgICAgIGVuZDtcbiAgICBmbXRfcmVzdWx0XG5cbiAgKCogUGFyc2UgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiAoYWZ0ZXIgJ0AnKS4gKilcbiAgYW5kIHBhcnNlX2FmdGVyX2F0IDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gRm10X0VCQiAoQ2hhcl9saXRlcmFsICgnQCcsIEVuZF9vZl9mb3JtYXQpKVxuICAgIGVsc2VcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnWycgLT5cbiAgICAgICAgcGFyc2VfdGFnIGZhbHNlIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKENsb3NlX2JveCwgZm10X3Jlc3QpKVxuICAgICAgfCAneycgLT5cbiAgICAgICAgcGFyc2VfdGFnIHRydWUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICd9JyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQ2xvc2VfdGFnLCBmbXRfcmVzdCkpXG4gICAgICB8ICcsJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQnJlYWsgKFwiQCxcIiwgMCwgMCksIGZtdF9yZXN0KSlcbiAgICAgIHwgJyAnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChCcmVhayAoXCJAIFwiLCAxLCAwKSwgZm10X3Jlc3QpKVxuICAgICAgfCAnOycgLT5cbiAgICAgICAgcGFyc2VfZ29vZF9icmVhayAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJz8nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGRmx1c2gsIGZtdF9yZXN0KSlcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZvcmNlX25ld2xpbmUsIGZtdF9yZXN0KSlcbiAgICAgIHwgJy4nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGbHVzaF9uZXdsaW5lLCBmbXRfcmVzdCkpXG4gICAgICB8ICc8JyAtPlxuICAgICAgICBwYXJzZV9tYWdpY19zaXplIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnQCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEVzY2FwZWRfYXQsIGZtdF9yZXN0KSlcbiAgICAgIHwgJyUnIHdoZW4gc3RyX2luZCArIDEgPCBlbmRfaW5kICYmIHN0ci5bc3RyX2luZCArIDFdID0gJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChFc2NhcGVkX3BlcmNlbnQsIGZtdF9yZXN0KSlcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoJ0AnLCBmbXRfcmVzdCkpXG4gICAgICB8IGMgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKFNjYW5faW5kaWMgYywgZm10X3Jlc3QpKVxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBvcHRpb25hbCA8bmFtZT4gYWZ0ZXIgXCJAe1wiIG9yIFwiQFtcIi4gKilcbiAgYW5kIHBhcnNlX3RhZyA6IHR5cGUgZSBmIC4gYm9vbCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGlzX29wZW5fdGFnIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIHRyeVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJzwnIC0+XG4gICAgICAgIGxldCBpbmQgPSBTdHJpbmcuaW5kZXhfZnJvbSBzdHIgKHN0cl9pbmQgKyAxKSAnPicgaW5cbiAgICAgICAgaWYgaW5kID49IGVuZF9pbmQgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgIGxldCBzdWJfc3RyID0gU3RyaW5nLnN1YiBzdHIgc3RyX2luZCAoaW5kIC0gc3RyX2luZCArIDEpIGluXG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKGluZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgKGluZCArIDEpIGluXG4gICAgICAgIGxldCBzdWJfZm9ybWF0ID0gRm9ybWF0IChzdWJfZm10LCBzdWJfc3RyKSBpblxuICAgICAgICBsZXQgZm9ybWF0dGluZyA9XG4gICAgICAgICAgaWYgaXNfb3Blbl90YWcgdGhlbiBPcGVuX3RhZyBzdWJfZm9ybWF0IGVsc2UgT3Blbl9ib3ggc3ViX2Zvcm1hdCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2dlbiAoZm9ybWF0dGluZywgZm10X3Jlc3QpKVxuICAgICAgfCBfIC0+XG4gICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IHN1Yl9mb3JtYXQgPSBGb3JtYXQgKEVuZF9vZl9mb3JtYXQsIFwiXCIpIGluXG4gICAgICBsZXQgZm9ybWF0dGluZyA9XG4gICAgICAgIGlmIGlzX29wZW5fdGFnIHRoZW4gT3Blbl90YWcgc3ViX2Zvcm1hdCBlbHNlIE9wZW5fYm94IHN1Yl9mb3JtYXQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nLCBmbXRfcmVzdCkpXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIG9wdGlvbmFsIDx3aWR0aCBvZmZzZXQ+IGFmdGVyIFwiQDtcIi4gKilcbiAgYW5kIHBhcnNlX2dvb2RfYnJlYWsgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgbGV0IG5leHRfaW5kLCBmb3JtYXR0aW5nX2xpdCA9XG4gICAgICB0cnlcbiAgICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgfHwgc3RyLltzdHJfaW5kXSA8PiAnPCcgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgIGxldCBzdHJfaW5kXzEgPSBwYXJzZV9zcGFjZXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8xXSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPiAoXG4gICAgICAgICAgbGV0IHN0cl9pbmRfMiwgd2lkdGggPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMSBlbmRfaW5kIGluXG4gICAgICAgICAgICBsZXQgc3RyX2luZF8zID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfMiBlbmRfaW5kIGluXG4gICAgICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfM10gd2l0aFxuICAgICAgICAgICAgICB8ICc+JyAtPlxuICAgICAgICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQtMikgKHN0cl9pbmRfMy1zdHJfaW5kKzMpIGluXG4gICAgICAgICAgICAgICAgc3RyX2luZF8zICsgMSwgQnJlYWsgKHMsIHdpZHRoLCAwKVxuICAgICAgICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT5cbiAgICAgICAgICAgICAgICBsZXQgc3RyX2luZF80LCBvZmZzZXQgPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMyBlbmRfaW5kIGluXG4gICAgICAgICAgICAgICAgbGV0IHN0cl9pbmRfNSA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzQgZW5kX2luZCBpblxuICAgICAgICAgICAgICAgIGlmIHN0ci5bc3RyX2luZF81XSA8PiAnPicgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZC0yKSAoc3RyX2luZF81LXN0cl9pbmQrMykgaW5cbiAgICAgICAgICAgICAgICBzdHJfaW5kXzUgKyAxLCBCcmVhayAocywgd2lkdGgsIG9mZnNldClcbiAgICAgICAgICAgICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICApXG4gICAgICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHdpdGggTm90X2ZvdW5kIHwgRmFpbHVyZSBfIC0+XG4gICAgICAgIHN0cl9pbmQsIEJyZWFrIChcIkA7XCIsIDEsIDApXG4gICAgaW5cbiAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSlcblxuICAoKiBQYXJzZSB0aGUgc2l6ZSBpbiBhIDxuPi4gKilcbiAgYW5kIHBhcnNlX21hZ2ljX3NpemUgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgbWF0Y2hcbiAgICAgIHRyeVxuICAgICAgICBsZXQgc3RyX2luZF8xID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfMV0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT5cbiAgICAgICAgICBsZXQgc3RyX2luZF8yLCBzaXplID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzEgZW5kX2luZCBpblxuICAgICAgICAgIGxldCBzdHJfaW5kXzMgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF8yIGVuZF9pbmQgaW5cbiAgICAgICAgICBpZiBzdHIuW3N0cl9pbmRfM10gPD4gJz4nIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQgLSAyKSAoc3RyX2luZF8zIC0gc3RyX2luZCArIDMpIGluXG4gICAgICAgICAgU29tZSAoc3RyX2luZF8zICsgMSwgTWFnaWNfc2l6ZSAocywgc2l6ZSkpXG4gICAgICAgIHwgXyAtPiBOb25lXG4gICAgICB3aXRoIE5vdF9mb3VuZCB8IEZhaWx1cmUgXyAtPlxuICAgICAgICBOb25lXG4gICAgd2l0aFxuICAgIHwgU29tZSAobmV4dF9pbmQsIGZvcm1hdHRpbmdfbGl0KSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSlcbiAgICB8IE5vbmUgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoU2Nhbl9pbmRpYyAnPCcsIGZtdF9yZXN0KSlcblxuICAoKiBQYXJzZSBhbmQgY29uc3RydWN0IGEgY2hhciBzZXQuICopXG4gIGFuZCBwYXJzZV9jaGFyX3NldCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG5cbiAgICBsZXQgY2hhcl9zZXQgPSBjcmVhdGVfY2hhcl9zZXQgKCkgaW5cbiAgICBsZXQgYWRkX2NoYXIgYyA9XG4gICAgICBhZGRfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYztcbiAgICBpblxuICAgIGxldCBhZGRfcmFuZ2UgYyBjJyA9XG4gICAgICBmb3IgaSA9IGludF9vZl9jaGFyIGMgdG8gaW50X29mX2NoYXIgYycgZG9cbiAgICAgICAgYWRkX2luX2NoYXJfc2V0IGNoYXJfc2V0IChjaGFyX29mX2ludCBpKTtcbiAgICAgIGRvbmU7XG4gICAgaW5cblxuICAgIGxldCBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmQgPVxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiAnJSUnIGFsb25lIGlzIG5vdCBhY2NlcHRlZCBpbiBjaGFyYWN0ZXIgc2V0cywgXFxcbiAgICAgICAgIHVzZSAlJSUlIGluc3RlYWQgYXQgcG9zaXRpb24gJWQuXCIgc3RyIHN0cl9pbmRcbiAgICBpblxuXG4gICAgKCogUGFyc2UgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGNoYXIgc2V0LiAqKVxuICAgIGxldCByZWMgcGFyc2VfY2hhcl9zZXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBsZXQgYyA9IHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAgICgqIFBhcnNlIHRoZSBjb250ZW50IG9mIGEgY2hhciBzZXQgdW50aWwgdGhlIGZpcnN0ICddJy4gKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfY29udGVudCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJy0nIC0+XG4gICAgICAgIGFkZF9jaGFyICctJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgYyAtPlxuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgICAoKiBUZXN0IGZvciByYW5nZSBpbiBjaGFyIHNldC4gKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnLScgLT5cbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfbWludXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcbiAgICAgIHwgKCclJyB8ICdAJykgYXMgYycgd2hlbiBjID0gJyUnIC0+XG4gICAgICAgIGFkZF9jaGFyIGMnO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCBjJyAtPlxuICAgICAgICBpZiBjID0gJyUnIHRoZW4gZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kO1xuICAgICAgICAoKiBub3RlIHRoYXQgJ0AnIGFsb25lIGlzIGFjY2VwdGVkLCBhcyBkb25lIGJ5IHRoZSBsZWdhY3lcbiAgICAgICAgICAgaW1wbGVtZW50YXRpb247IHRoZSBkb2N1bWVudGF0aW9uIHNwZWNpZmljYWxseSByZXF1aXJlcyAlQFxuICAgICAgICAgICBzbyB3ZSBjb3VsZCB3YXJuIG9uIHRoYXQgKilcbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgYydcblxuICAgICgqIE1hbmFnZSByYW5nZSBpbiBjaGFyIHNldCAoZXhjZXB0IGlmIHRoZSAnLScgdGhlIGxhc3QgY2hhciBiZWZvcmUgJ10nKSAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9hZnRlcl9taW51cyBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBhZGRfY2hhciAnLSc7XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICclJyAtPlxuICAgICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgICAgIHwgKCclJyB8ICdAJykgYXMgYycgLT5cbiAgICAgICAgICAgIGFkZF9yYW5nZSBjIGMnO1xuICAgICAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDIpIGVuZF9pbmRcbiAgICAgICAgICB8IF8gLT4gZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kXG4gICAgICAgIGVuZFxuICAgICAgfCBjJyAtPlxuICAgICAgICBhZGRfcmFuZ2UgYyBjJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICBpblxuICAgIGxldCBzdHJfaW5kLCByZXZlcnNlID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgICAgfCAnXicgLT4gc3RyX2luZCArIDEsIHRydWVcbiAgICAgICAgfCBfIC0+IHN0cl9pbmQsIGZhbHNlIGluXG4gICAgbGV0IG5leHRfaW5kID0gcGFyc2VfY2hhcl9zZXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgbGV0IGNoYXJfc2V0ID0gZnJlZXplX2NoYXJfc2V0IGNoYXJfc2V0IGluXG4gICAgbmV4dF9pbmQsIChpZiByZXZlcnNlIHRoZW4gcmV2X2NoYXJfc2V0IGNoYXJfc2V0IGVsc2UgY2hhcl9zZXQpXG5cbiAgKCogQ29uc3VtZSBhbGwgbmV4dCBzcGFjZXMsIHJhaXNlIGFuIEZhaWx1cmUgaWYgZW5kX2luZCBpcyByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2Vfc3BhY2VzIHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBpZiBzdHIuW3N0cl9pbmRdID0gJyAnIHRoZW4gcGFyc2Vfc3BhY2VzIChzdHJfaW5kICsgMSkgZW5kX2luZCBlbHNlIHN0cl9pbmRcblxuICAoKiBSZWFkIGEgcG9zaXRpdmUgaW50ZWdlciBmcm9tIHRoZSBzdHJpbmcsIHJhaXNlIGEgRmFpbHVyZSBpZiBlbmRfaW5kIGlzXG4gICAgIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgYWNjID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyBhcyBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IGFjYyAqIDEwICsgKGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnMCcpIGluXG4gICAgICBpZiBuZXdfYWNjID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW5cbiAgICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGludGVnZXIgJWQgaXMgZ3JlYXRlciB0aGFuIHRoZSBsaW1pdCAlZFwiXG4gICAgICAgICAgc3RyIG5ld19hY2MgU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgICBlbHNlXG4gICAgICAgIHBhcnNlX3Bvc2l0aXZlIChzdHJfaW5kICsgMSkgZW5kX2luZCBuZXdfYWNjXG4gICAgfCBfIC0+IHN0cl9pbmQsIGFjY1xuXG4gICgqIFJlYWQgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBpbnRlZ2VyIGZyb20gdGhlIHN0cmluZywgcmFpc2UgYSBGYWlsdXJlXG4gICAgIGlmIGVuZF9pbmQgaXMgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX2ludGVnZXIgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPiBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMFxuICAgIHwgJy0nIC0+IChcbiAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgfCAnMCcgLi4gJzknIC0+XG4gICAgICAgIGxldCBuZXh0X2luZCwgbiA9IHBhcnNlX3Bvc2l0aXZlIChzdHJfaW5kICsgMSkgZW5kX2luZCAwIGluXG4gICAgICAgIG5leHRfaW5kLCAtblxuICAgICAgfCBjIC0+XG4gICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiZGlnaXRcIiBjXG4gICAgKVxuICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBBZGQgYSBsaXRlcmFsIHRvIGEgZm9ybWF0IGZyb20gYSBsaXRlcmFsIGNoYXJhY3RlciBzdWItc2VxdWVuY2UuICopXG4gIGFuZCBhZGRfbGl0ZXJhbCA6IHR5cGUgYSBkIGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IChhLCBfLCBfLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAgIChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGxpdF9zdGFydCBzdHJfaW5kIGZtdCAtPiBtYXRjaCBzdHJfaW5kIC0gbGl0X3N0YXJ0IHdpdGhcbiAgICB8IDAgICAgLT4gRm10X0VCQiBmbXRcbiAgICB8IDEgICAgLT4gRm10X0VCQiAoQ2hhcl9saXRlcmFsIChzdHIuW2xpdF9zdGFydF0sIGZtdCkpXG4gICAgfCBzaXplIC0+IEZtdF9FQkIgKFN0cmluZ19saXRlcmFsIChTdHJpbmcuc3ViIHN0ciBsaXRfc3RhcnQgc2l6ZSwgZm10KSlcblxuICAoKiBTZWFyY2ggdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzdWItZm9ybWF0XG4gICAgIChpLmUuIHRoZSBjb3JyZXNwb25kaW5nIFwiJX1cIiBvciBcIiUpXCIpICopXG4gIGFuZCBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlblxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiB1bmNsb3NlZCBzdWItZm9ybWF0LCBcXFxuICAgICAgICAgZXhwZWN0ZWQgXFxcIiUlJWNcXFwiIGF0IGNoYXJhY3RlciBudW1iZXIgJWRcIiBzdHIgYyBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJyUnIC0+XG4gICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGlmIHN0ci5bc3RyX2luZCArIDFdID0gYyB0aGVuICgqIEVuZCBvZiBmb3JtYXQgZm91bmQgKikgc3RyX2luZCBlbHNlXG4gICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgICAgfCAnXycgLT5cbiAgICAgICAgICAoKiBTZWFyY2ggZm9yIFwiJV8oXCIgb3IgXCIlX3tcIi4gKilcbiAgICAgICAgICBpZiBzdHJfaW5kICsgMiA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAyXSB3aXRoXG4gICAgICAgICAgfCAneycgLT5cbiAgICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kICd9JyBpblxuICAgICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgICB8ICcoJyAtPlxuICAgICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgJyknIGluXG4gICAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICAgIHwgXyAtPiBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgY1xuICAgICAgICAgIGVuZFxuICAgICAgICB8ICd7JyAtPlxuICAgICAgICAgICgqICV7Li4uJX0gc3ViLWZvcm1hdCBmb3VuZC4gKilcbiAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCAnfScgaW5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICB8ICcoJyAtPlxuICAgICAgICAgICgqICUoLi4uJSkgc3ViLWZvcm1hdCBmb3VuZC4gKilcbiAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCAnKScgaW5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICB8ICd9JyAtPlxuICAgICAgICAgICgqIEVycm9yOiAlKC4uLiV9LiAqKVxuICAgICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiY2hhcmFjdGVyICcpJ1wiICd9J1xuICAgICAgICB8ICcpJyAtPlxuICAgICAgICAgICgqIEVycm9yOiAley4uLiUpLiAqKVxuICAgICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiY2hhcmFjdGVyICd9J1wiICcpJ1xuICAgICAgICB8IF8gLT5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICBlbmRcbiAgICB8IF8gLT4gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAoKiBDaGVjayBpZiBzeW1iIGlzIGEgdmFsaWQgaW50IGNvbnZlcnNpb24gYWZ0ZXIgXCIlbFwiLCBcIiVuXCIgb3IgXCIlTFwiICopXG4gIGFuZCBpc19pbnRfYmFzZSBzeW1iID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnZCcgfCAnaScgfCAneCcgfCAnWCcgfCAnbycgfCAndScgLT4gdHJ1ZVxuICAgIHwgXyAtPiBmYWxzZVxuXG4gICgqIENvbnZlcnQgYSBjaGFyIChsLCBuIG9yIEwpIHRvIGl0cyBhc3NvY2lhdGVkIGNvdW50ZXIuICopXG4gIGFuZCBjb3VudGVyX29mX2NoYXIgc3ltYiA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJ2wnIC0+IExpbmVfY291bnRlciAgfCAnbicgLT4gQ2hhcl9jb3VudGVyXG4gICAgfCAnTCcgLT4gVG9rZW5fY291bnRlciB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQ29udmVydCAocGx1cywgc3ltYikgdG8gaXRzIGFzc29jaWF0ZWQgaW50X2NvbnYuICopXG4gIGFuZCBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggc3BhY2Ugc3ltYiA9XG4gICAgbWF0Y2ggcGx1cywgaGFzaCwgc3BhY2UsIHN5bWIgd2l0aFxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ2QnIC0+IEludF9kICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdpJyAtPiBJbnRfaVxuICAgIHwgZmFsc2UsIGZhbHNlLCAgdHJ1ZSwgJ2QnIC0+IEludF9zZCB8IGZhbHNlLCBmYWxzZSwgIHRydWUsICdpJyAtPiBJbnRfc2lcbiAgICB8ICB0cnVlLCBmYWxzZSwgZmFsc2UsICdkJyAtPiBJbnRfcGQgfCAgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAnaScgLT4gSW50X3BpXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAneCcgLT4gSW50X3ggIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ1gnIC0+IEludF9YXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAneCcgLT4gSW50X0N4IHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ1gnIC0+IEludF9DWFxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ28nIC0+IEludF9vXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnbycgLT4gSW50X0NvXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAndScgLT4gSW50X3VcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdkJyAtPiBJbnRfQ2RcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdpJyAtPiBJbnRfQ2lcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICd1JyAtPiBJbnRfQ3VcbiAgICB8IF8sIHRydWUsIF8sICd4JyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ3hcbiAgICB8IF8sIHRydWUsIF8sICdYJyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ1hcbiAgICB8IF8sIHRydWUsIF8sICdvJyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ29cbiAgICB8IF8sIHRydWUsIF8sICgnZCcgfCAnaScgfCAndScpIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBmYWxzZSBzcGFjZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyMnXCJcbiAgICB8IHRydWUsIF8sIHRydWUsIF8gLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICgqIHBsdXMgYW5kIHNwYWNlOiBsZWdhY3kgaW1wbGVtZW50YXRpb24gcHJlZmVycyBwbHVzICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBmYWxzZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnICcgXCInKydcIlxuICAgIHwgZmFsc2UsIF8sIHRydWUsIF8gICAgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggZmFsc2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicgJ1wiXG4gICAgfCB0cnVlLCBfLCBmYWxzZSwgXyAgICAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIGZhbHNlIGhhc2ggc3BhY2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicrJ1wiXG4gICAgfCBmYWxzZSwgXywgZmFsc2UsIF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQ29udmVydCAocGx1cywgc3BhY2UsIHN5bWIpIHRvIGl0cyBhc3NvY2lhdGVkIGZsb2F0X2NvbnYuICopXG4gIGFuZCBjb21wdXRlX2Zsb2F0X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBzcGFjZSBzeW1iID1cbiAgICBsZXQgZmxhZyA9IG1hdGNoIHBsdXMsIHNwYWNlIHdpdGhcbiAgICB8IGZhbHNlLCBmYWxzZSAtPiBGbG9hdF9mbGFnX1xuICAgIHwgZmFsc2UsICB0cnVlIC0+IEZsb2F0X2ZsYWdfc1xuICAgIHwgIHRydWUsIGZhbHNlIC0+IEZsb2F0X2ZsYWdfcFxuICAgIHwgIHRydWUsICB0cnVlIC0+XG4gICAgICAoKiBwbHVzIGFuZCBzcGFjZTogbGVnYWN5IGltcGxlbWVudGF0aW9uIHByZWZlcnMgcGx1cyAqKVxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gRmxvYXRfZmxhZ19wXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnICcgXCInKydcIiBpblxuICAgIGxldCBraW5kID0gbWF0Y2ggaGFzaCwgc3ltYiB3aXRoXG4gICAgfCBfLCAnZicgLT4gRmxvYXRfZlxuICAgIHwgXywgJ2UnIC0+IEZsb2F0X2VcbiAgICB8IF8sICdFJyAtPiBGbG9hdF9FXG4gICAgfCBfLCAnZycgLT4gRmxvYXRfZ1xuICAgIHwgXywgJ0cnIC0+IEZsb2F0X0dcbiAgICB8IF8sICdoJyAtPiBGbG9hdF9oXG4gICAgfCBfLCAnSCcgLT4gRmxvYXRfSFxuICAgIHwgZmFsc2UsICdGJyAtPiBGbG9hdF9GXG4gICAgfCB0cnVlLCAnRicgLT4gRmxvYXRfQ0ZcbiAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlIGluXG4gICAgZmxhZywga2luZFxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBpbmNvbXBhdGlibGUgb3B0aW9ucy4qKVxuICBhbmQgaW5jb21wYXRpYmxlX2ZsYWcgOiB0eXBlIGEgLiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gc3RyaW5nIC0+IGEgPVxuICAgIGZ1biBwY3RfaW5kIHN0cl9pbmQgc3ltYiBvcHRpb24gLT5cbiAgICAgIGxldCBzdWJmbXQgPSBTdHJpbmcuc3ViIHN0ciBwY3RfaW5kIChzdHJfaW5kIC0gcGN0X2luZCkgaW5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgICVzIGlzIGluY29tcGF0aWJsZSB3aXRoICclYycgaW4gc3ViLWZvcm1hdCAlU1wiXG4gICAgICAgIHN0ciBwY3RfaW5kIG9wdGlvbiBzeW1iIHN1YmZtdFxuXG4gIGluIHBhcnNlIDAgKFN0cmluZy5sZW5ndGggc3RyKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgKCogR3VhcmRlZCBzdHJpbmcgdG8gZm9ybWF0IGNvbnZlcnNpb25zICopXG5cbigqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBmb3JtYXQgYWNjb3JkaW5nIHRvIGFuIGZtdHR5LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgZm9ybWF0X29mX3N0cmluZ19mbXR0eSBzdHIgZm10dHkgPVxuICBsZXQgRm10X0VCQiBmbXQgPSBmbXRfZWJiX29mX3N0cmluZyBzdHIgaW5cbiAgdHJ5IEZvcm1hdCAodHlwZV9mb3JtYXQgZm10IGZtdHR5LCBzdHIpXG4gIHdpdGggVHlwZV9taXNtYXRjaCAtPlxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiYmFkIGlucHV0OiBmb3JtYXQgdHlwZSBtaXNtYXRjaCBiZXR3ZWVuICVTIGFuZCAlU1wiXG4gICAgICBzdHIgKHN0cmluZ19vZl9mbXR0eSBmbXR0eSlcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhIGZvcm1hdCBjb21wYXRpYmxlIHdpdGggYW4gb3RoZXIgZm9ybWF0LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgZm9ybWF0X29mX3N0cmluZ19mb3JtYXQgc3RyIChGb3JtYXQgKGZtdCcsIHN0cicpKSA9XG4gIGxldCBGbXRfRUJCIGZtdCA9IGZtdF9lYmJfb2Zfc3RyaW5nIHN0ciBpblxuICB0cnkgRm9ybWF0ICh0eXBlX2Zvcm1hdCBmbXQgKGZtdHR5X29mX2ZtdCBmbXQnKSwgc3RyKVxuICB3aXRoIFR5cGVfbWlzbWF0Y2ggLT5cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImJhZCBpbnB1dDogZm9ybWF0IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiAlUyBhbmQgJVNcIiBzdHIgc3RyJ1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBYYXZpZXIgTGVyb3kgYW5kIFBpZXJyZSBXZWlzLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRcblxubGV0IGtmcHJpbnRmIGsgbyAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmIChmdW4gYWNjIC0+IG91dHB1dF9hY2MgbyBhY2M7IGsgbykgRW5kX29mX2FjYyBmbXRcbmxldCBrYnByaW50ZiBrIGIgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZiAoZnVuIGFjYyAtPiBidWZwdXRfYWNjIGIgYWNjOyBrIGIpIEVuZF9vZl9hY2MgZm10XG5sZXQgaWtmcHJpbnRmIGsgb2MgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX2lwcmludGYgayBvYyBmbXRcbmxldCBpa2JwcmludGYgPSBpa2ZwcmludGZcblxubGV0IGZwcmludGYgb2MgZm10ID0ga2ZwcmludGYgaWdub3JlIG9jIGZtdFxubGV0IGJwcmludGYgYiBmbXQgPSBrYnByaW50ZiBpZ25vcmUgYiBmbXRcbmxldCBpZnByaW50ZiBvYyBmbXQgPSBpa2ZwcmludGYgaWdub3JlIG9jIGZtdFxubGV0IGlicHJpbnRmIGIgZm10ID0gaWticHJpbnRmIGlnbm9yZSBiIGZtdFxubGV0IHByaW50ZiBmbXQgPSBmcHJpbnRmIHN0ZG91dCBmbXRcbmxldCBlcHJpbnRmIGZtdCA9IGZwcmludGYgc3RkZXJyIGZtdFxuXG5sZXQga3NwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBrJyBhY2MgPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gICAgc3RycHV0X2FjYyBidWYgYWNjO1xuICAgIGsgKEJ1ZmZlci5jb250ZW50cyBidWYpIGluXG4gIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10XG5cbmxldCBzcHJpbnRmIGZtdCA9IGtzcHJpbnRmIChmdW4gcyAtPiBzKSBmbXRcblxubGV0IGtwcmludGYgPSBrc3ByaW50ZlxuIiwiKCogQ29udl9lcnJvcjogTW9kdWxlIGZvciBIYW5kbGluZyBFcnJvcnMgZHVyaW5nIEF1dG9tYXRlZCBZb2pzb25cbiAgIENvbnZlcnNpb25zICopXG5cbm9wZW4hIFN0ZExhYmVsc1xub3BlbiBZb2pzb25fY29udlxuXG5sZXQgc3ByaW50ZiA9IFByaW50Zi5zcHJpbnRmXG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHR1cGxlcyAqKVxuXG5sZXQgdHVwbGVfb2Zfc2l6ZV9uX2V4cGVjdGVkIGxvYyBuIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAoc3ByaW50ZiBcIiVzX29mX3lvanNvbjogdHVwbGUgb2Ygc2l6ZSAlZCBleHBlY3RlZFwiIGxvYyBuKSB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHN1bSB0eXBlcyAqKVxuXG5sZXQgc3RhZ19ub19hcmdzIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogdGhpcyBjb25zdHJ1Y3RvciBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBzdGFnX2luY29ycmVjdF9uX2FyZ3MgbG9jIHRhZyB5b2pzb24gPVxuICBsZXQgbXNnID1cbiAgICBzcHJpbnRmIFwiJXNfb2ZfeW9qc29uOiBzdW0gdGFnICVTIGhhcyBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50c1wiIGxvYyB0YWdcbiAgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbmxldCBzdGFnX3Rha2VzX2FyZ3MgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiB0aGlzIGNvbnN0cnVjdG9yIHJlcXVpcmVzIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBuZXN0ZWRfbGlzdF9pbnZhbGlkX3N1bSBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IGV4cGVjdGVkIGEgdmFyaWFudCB0eXBlLCBzYXcgYSBuZXN0ZWQgbGlzdFwiKSB5b2pzb25cbjs7XG5cbmxldCBlbXB0eV9saXN0X2ludmFsaWRfc3VtIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogZXhwZWN0ZWQgYSB2YXJpYW50IHR5cGUsIHNhdyBhbiBlbXB0eSBsaXN0XCIpIHlvanNvblxuOztcblxubGV0IHVuZXhwZWN0ZWRfc3RhZyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHVuZXhwZWN0ZWQgdmFyaWFudCBjb25zdHJ1Y3RvclwiKSB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHJlY29yZHMgKilcblxubGV0IHJlY29yZF9zdXBlcmZsdW91c19maWVsZHMgfndoYXQgfmxvYyByZXZfZmxkX25hbWVzIHlvanNvbiA9XG4gIGxldCBmbGRfbmFtZXNfc3RyID0gU3RyaW5nLmNvbmNhdCAoTGlzdC5yZXYgcmV2X2ZsZF9uYW1lcykgfnNlcDpcIiBcIiBpblxuICBsZXQgbXNnID0gc3ByaW50ZiBcIiVzX29mX3lvanNvbjogJXM6ICVzXCIgbG9jIHdoYXQgZmxkX25hbWVzX3N0ciBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHJlY29yZF9kdXBsaWNhdGVfZmllbGRzIGxvYyByZXZfZmxkX25hbWVzIHlvanNvbiA9XG4gIHJlY29yZF9zdXBlcmZsdW91c19maWVsZHMgfndoYXQ6XCJkdXBsaWNhdGUgZmllbGRzXCIgfmxvYyByZXZfZmxkX25hbWVzIHlvanNvblxuOztcblxubGV0IHJlY29yZF9leHRyYV9maWVsZHMgbG9jIHJldl9mbGRfbmFtZXMgeW9qc29uID1cbiAgcmVjb3JkX3N1cGVyZmx1b3VzX2ZpZWxkcyB+d2hhdDpcImV4dHJhIGZpZWxkc1wiIH5sb2MgcmV2X2ZsZF9uYW1lcyB5b2pzb25cbjs7XG5cbmxldCByZWMgcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBmaWVsZHMgPSBmdW5jdGlvblxuICB8IFtdIC0+IFN0cmluZy5jb25jYXQgKExpc3QucmV2IGZpZWxkcykgfnNlcDpcIiBcIlxuICB8ICh0cnVlLCBmaWVsZCkgOjogcmVzdCAtPiByZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIChmaWVsZCA6OiBmaWVsZHMpIHJlc3RcbiAgfCBfIDo6IHJlc3QgLT4gcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBmaWVsZHMgcmVzdFxuOztcblxubGV0IHJlY29yZF91bmRlZmluZWRfZWxlbWVudHMgbG9jIHlvanNvbiBsc3QgPVxuICBsZXQgdW5kZWZpbmVkID0gcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBbXSBsc3QgaW5cbiAgbGV0IG1zZyA9XG4gICAgc3ByaW50ZiBcIiVzX29mX3lvanNvbjogdGhlIGZvbGxvd2luZyByZWNvcmQgZWxlbWVudHMgd2VyZSB1bmRlZmluZWQ6ICVzXCIgbG9jIHVuZGVmaW5lZFxuICBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHJlY29yZF9saXN0X2luc3RlYWRfYXRvbSBsb2MgeW9qc29uID1cbiAgbGV0IG1zZyA9IGxvYyBeIFwiX29mX3lvanNvbjogbGlzdCBpbnN0ZWFkIG9mIGF0b20gZm9yIHJlY29yZCBleHBlY3RlZFwiIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG5sZXQgcmVjb3JkX3BvbHlfZmllbGRfdmFsdWUgbG9jIHlvanNvbiA9XG4gIGxldCBtc2cgPVxuICAgIGxvY1xuICAgIF4gXCJfb2ZfeW9qc29uOiBjYW5ub3QgY29udmVydCB2YWx1ZXMgb2YgdHlwZXMgcmVzdWx0aW5nIGZyb20gcG9seW1vcnBoaWMgcmVjb3JkIFxcXG4gICAgICAgZmllbGRzXCJcbiAgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHBvbHltb3JwaGljIHZhcmlhbnRzICopXG5cbmV4Y2VwdGlvbiBOb192YXJpYW50X21hdGNoXG5cbmxldCBub192YXJpYW50X21hdGNoICgpID0gcmFpc2UgTm9fdmFyaWFudF9tYXRjaFxuXG5sZXQgbm9fbWF0Y2hpbmdfdmFyaWFudF9mb3VuZCBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IG5vIG1hdGNoaW5nIHZhcmlhbnQgZm91bmRcIikgeW9qc29uXG47O1xuXG5sZXQgcHRhZ19ub19hcmdzIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogcG9seW1vcnBoaWMgdmFyaWFudCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBwdGFnX2luY29ycmVjdF9uX2FyZ3MgbG9jIGNuc3RyIHlvanNvbiA9XG4gIGxldCBtc2cgPVxuICAgIHNwcmludGZcbiAgICAgIFwiJXNfb2ZfeW9qc29uOiBwb2x5bW9ycGhpYyB2YXJpYW50IHRhZyAlUyBoYXMgaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHNcIlxuICAgICAgbG9jXG4gICAgICBjbnN0clxuICBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHB0YWdfdGFrZXNfYXJncyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHBvbHltb3JwaGljIHZhcmlhbnQgdGFnIHRha2VzIGFuIGFyZ3VtZW50XCIpIHlvanNvblxuOztcblxubGV0IG5lc3RlZF9saXN0X2ludmFsaWRfcG9seV92YXIgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvclxuICAgIChsb2MgXiBcIl9vZl95b2pzb246IGEgbmVzdGVkIGxpc3QgaXMgYW4gaW52YWxpZCBwb2x5bW9ycGhpYyB2YXJpYW50XCIpXG4gICAgeW9qc29uXG47O1xuXG5sZXQgZW1wdHlfbGlzdF9pbnZhbGlkX3BvbHlfdmFyIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3JcbiAgICAobG9jIF4gXCJfb2ZfeW9qc29uOiB0aGUgZW1wdHkgbGlzdCBpcyBhbiBpbnZhbGlkIHBvbHltb3JwaGljIHZhcmlhbnRcIilcbiAgICB5b2pzb25cbjs7XG5cbmxldCBlbXB0eV90eXBlIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogdHJ5aW5nIHRvIGNvbnZlcnQgYW4gZW1wdHkgdHlwZVwiKSB5b2pzb25cbjs7XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIGlkIDogJ2EgLT4gJ2EgPSBcIiVpZGVudGl0eVwiXG5sZXQgY29uc3QgYyBfID0gY1xubGV0IGZsaXAgZiB4IHkgPSBmIHkgeFxubGV0IG5lZ2F0ZSBwIHYgPSBub3QgKHAgdilcblxuZXhjZXB0aW9uIEZpbmFsbHlfcmFpc2VkIG9mIGV4blxuXG5sZXQgKCkgPSBQcmludGV4Yy5yZWdpc3Rlcl9wcmludGVyIEBAIGZ1bmN0aW9uXG58IEZpbmFsbHlfcmFpc2VkIGV4biAtPiBTb21lIChcIkZ1bi5GaW5hbGx5X3JhaXNlZDogXCIgXiBQcmludGV4Yy50b19zdHJpbmcgZXhuKVxufCBfIC0+IE5vbmVcblxubGV0IHByb3RlY3QgfihmaW5hbGx5IDogdW5pdCAtPiB1bml0KSB3b3JrID1cbiAgbGV0IGZpbmFsbHlfbm9fZXhuICgpID1cbiAgICB0cnkgZmluYWxseSAoKSB3aXRoIGUgLT5cbiAgICAgIGxldCBidCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBQcmludGV4Yy5yYWlzZV93aXRoX2JhY2t0cmFjZSAoRmluYWxseV9yYWlzZWQgZSkgYnRcbiAgaW5cbiAgbWF0Y2ggd29yayAoKSB3aXRoXG4gIHwgcmVzdWx0IC0+IGZpbmFsbHlfbm9fZXhuICgpIDsgcmVzdWx0XG4gIHwgZXhjZXB0aW9uIHdvcmtfZXhuIC0+XG4gICAgICBsZXQgd29ya19idCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBmaW5hbGx5X25vX2V4biAoKSA7XG4gICAgICBQcmludGV4Yy5yYWlzZV93aXRoX2JhY2t0cmFjZSB3b3JrX2V4biB3b3JrX2J0XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1lc3NhZ2UgZGlnZXN0IChNRDUpICopXG5cbnR5cGUgdCA9IHN0cmluZ1xuXG5sZXQgY29tcGFyZSA9IFN0cmluZy5jb21wYXJlXG5sZXQgZXF1YWwgPSBTdHJpbmcuZXF1YWxcblxuZXh0ZXJuYWwgdW5zYWZlX3N0cmluZzogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9tZDVfc3RyaW5nXCJcbmV4dGVybmFsIGNoYW5uZWw6IGluX2NoYW5uZWwgLT4gaW50IC0+IHQgPSBcImNhbWxfbWQ1X2NoYW5cIlxuXG5sZXQgc3RyaW5nIHN0ciA9XG4gIHVuc2FmZV9zdHJpbmcgc3RyIDAgKFN0cmluZy5sZW5ndGggc3RyKVxuXG5sZXQgYnl0ZXMgYiA9IHN0cmluZyAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiKVxuXG5sZXQgc3Vic3RyaW5nIHN0ciBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IFN0cmluZy5sZW5ndGggc3RyIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3Quc3Vic3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfc3RyaW5nIHN0ciBvZnMgbGVuXG5cbmxldCBzdWJieXRlcyBiIG9mcyBsZW4gPSBzdWJzdHJpbmcgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYikgb2ZzIGxlblxuXG5sZXQgZmlsZSBmaWxlbmFtZSA9XG4gIGxldCBpYyA9IG9wZW5faW5fYmluIGZpbGVuYW1lIGluXG4gIG1hdGNoIGNoYW5uZWwgaWMgKC0xKSB3aXRoXG4gICAgfCBkIC0+IGNsb3NlX2luIGljOyBkXG4gICAgfCBleGNlcHRpb24gZSAtPiBjbG9zZV9pbiBpYzsgcmFpc2UgZVxuXG5sZXQgb3V0cHV0IGNoYW4gZGlnZXN0ID1cbiAgb3V0cHV0X3N0cmluZyBjaGFuIGRpZ2VzdFxuXG5sZXQgaW5wdXQgY2hhbiA9IHJlYWxseV9pbnB1dF9zdHJpbmcgY2hhbiAxNlxuXG5sZXQgY2hhcl9oZXggbiA9XG4gIENoYXIudW5zYWZlX2NociAobiArIGlmIG4gPCAxMCB0aGVuIENoYXIuY29kZSAnMCcgZWxzZSAoQ2hhci5jb2RlICdhJyAtIDEwKSlcblxubGV0IHRvX2hleCBkID1cbiAgaWYgU3RyaW5nLmxlbmd0aCBkIDw+IDE2IHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3QudG9faGV4XCI7XG4gIGxldCByZXN1bHQgPSBCeXRlcy5jcmVhdGUgMzIgaW5cbiAgZm9yIGkgPSAwIHRvIDE1IGRvXG4gICAgbGV0IHggPSBDaGFyLmNvZGUgZC5baV0gaW5cbiAgICBCeXRlcy51bnNhZmVfc2V0IHJlc3VsdCAoaSoyKSAoY2hhcl9oZXggKHggbHNyIDQpKTtcbiAgICBCeXRlcy51bnNhZmVfc2V0IHJlc3VsdCAoaSoyKzEpIChjaGFyX2hleCAoeCBsYW5kIDB4MGYpKTtcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXN1bHRcblxubGV0IGZyb21faGV4IHMgPVxuICBpZiBTdHJpbmcubGVuZ3RoIHMgPD4gMzIgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5mcm9tX2hleFwiO1xuICBsZXQgZGlnaXQgYyA9XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCAnMCcuLic5JyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCdcbiAgICB8ICdBJy4uJ0YnIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdBJyArIDEwXG4gICAgfCAnYScuLidmJyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnYScgKyAxMFxuICAgIHwgXyAtPiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkRpZ2VzdC5mcm9tX2hleFwiKVxuICBpblxuICBsZXQgYnl0ZSBpID0gZGlnaXQgcy5baV0gbHNsIDQgKyBkaWdpdCBzLltpKzFdIGluXG4gIGxldCByZXN1bHQgPSBCeXRlcy5jcmVhdGUgMTYgaW5cbiAgZm9yIGkgPSAwIHRvIDE1IGRvXG4gICAgQnl0ZXMuc2V0IHJlc3VsdCBpIChDaGFyLmNociAoYnl0ZSAoMiAqIGkpKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzdWx0XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEhhc2ggdGFibGVzICopXG5cbigqIFdlIGRvIGR5bmFtaWMgaGFzaGluZywgYW5kIHJlc2l6ZSB0aGUgdGFibGUgYW5kIHJlaGFzaCB0aGUgZWxlbWVudHNcbiAgIHdoZW4gYnVja2V0cyBiZWNvbWUgdG9vIGxvbmcuICopXG5cbnR5cGUgKCdhLCAnYikgdCA9XG4gIHsgbXV0YWJsZSBzaXplOiBpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgKCogbnVtYmVyIG9mIGVudHJpZXMgKilcbiAgICBtdXRhYmxlIGRhdGE6ICgnYSwgJ2IpIGJ1Y2tldGxpc3QgYXJyYXk7ICAoKiB0aGUgYnVja2V0cyAqKVxuICAgIHNlZWQ6IGludDsgICAgICAgICAgICAgICAgICAgICAgICAoKiBmb3IgcmFuZG9taXphdGlvbiAqKVxuICAgIG11dGFibGUgaW5pdGlhbF9zaXplOiBpbnQ7ICAgICAgICAgICAgICAgICgqIGluaXRpYWwgYXJyYXkgc2l6ZSAqKVxuICB9XG5cbmFuZCAoJ2EsICdiKSBidWNrZXRsaXN0ID1cbiAgICBFbXB0eVxuICB8IENvbnMgb2YgeyBtdXRhYmxlIGtleTogJ2E7XG4gICAgICAgICAgICAgIG11dGFibGUgZGF0YTogJ2I7XG4gICAgICAgICAgICAgIG11dGFibGUgbmV4dDogKCdhLCAnYikgYnVja2V0bGlzdCB9XG5cbigqIFRoZSBzaWduIG9mIGluaXRpYWxfc2l6ZSBlbmNvZGVzIHRoZSBmYWN0IHRoYXQgYSB0cmF2ZXJzYWwgaXNcbiAgIG9uZ29pbmcgb3Igbm90LlxuXG4gICBUaGlzIGRpc2FibGVzIHRoZSBlZmZpY2llbnQgaW4gcGxhY2UgaW1wbGVtZW50YXRpb24gb2YgcmVzaXppbmcuXG4qKVxuXG5sZXQgb25nb2luZ190cmF2ZXJzYWwgaCA9XG4gIE9iai5zaXplIChPYmoucmVwciBoKSA8IDQgKCogY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBoYXNoIHRhYmxlcyAqKVxuICB8fCBoLmluaXRpYWxfc2l6ZSA8IDBcblxubGV0IGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaCA9XG4gIGguaW5pdGlhbF9zaXplIDwtIC0gaC5pbml0aWFsX3NpemVcblxuKCogVG8gcGljayByYW5kb20gc2VlZHMgaWYgcmVxdWVzdGVkICopXG5cbmxldCByYW5kb21pemVkX2RlZmF1bHQgPVxuICBsZXQgcGFyYW1zID1cbiAgICB0cnkgU3lzLmdldGVudiBcIk9DQU1MUlVOUEFSQU1cIiB3aXRoIE5vdF9mb3VuZCAtPlxuICAgIHRyeSBTeXMuZ2V0ZW52IFwiQ0FNTFJVTlBBUkFNXCIgd2l0aCBOb3RfZm91bmQgLT4gXCJcIiBpblxuICBTdHJpbmcuY29udGFpbnMgcGFyYW1zICdSJ1xuXG5sZXQgcmFuZG9taXplZCA9IHJlZiByYW5kb21pemVkX2RlZmF1bHRcblxubGV0IHJhbmRvbWl6ZSAoKSA9IHJhbmRvbWl6ZWQgOj0gdHJ1ZVxubGV0IGlzX3JhbmRvbWl6ZWQgKCkgPSAhcmFuZG9taXplZFxuXG5sZXQgcHJuZyA9IGxhenkgKFJhbmRvbS5TdGF0ZS5tYWtlX3NlbGZfaW5pdCgpKVxuXG4oKiBGdW5jdGlvbnMgd2hpY2ggYXBwZWFyIGJlZm9yZSB0aGUgZnVuY3RvcmlhbCBpbnRlcmZhY2UgbXVzdCBlaXRoZXIgYmVcbiAgIGluZGVwZW5kZW50IG9mIHRoZSBoYXNoIGZ1bmN0aW9uIG9yIHRha2UgaXQgYXMgYSBwYXJhbWV0ZXIgKHNlZSAjMjIwMiBhbmRcbiAgIGNvZGUgYmVsb3cgdGhlIGZ1bmN0b3IgZGVmaW5pdGlvbnMuICopXG5cbigqIENyZWF0aW5nIGEgZnJlc2gsIGVtcHR5IHRhYmxlICopXG5cbmxldCByZWMgcG93ZXJfMl9hYm92ZSB4IG4gPVxuICBpZiB4ID49IG4gdGhlbiB4XG4gIGVsc2UgaWYgeCAqIDIgPiBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIHhcbiAgZWxzZSBwb3dlcl8yX2Fib3ZlICh4ICogMikgblxuXG5sZXQgY3JlYXRlID8ocmFuZG9tID0gIXJhbmRvbWl6ZWQpIGluaXRpYWxfc2l6ZSA9XG4gIGxldCBzID0gcG93ZXJfMl9hYm92ZSAxNiBpbml0aWFsX3NpemUgaW5cbiAgbGV0IHNlZWQgPSBpZiByYW5kb20gdGhlbiBSYW5kb20uU3RhdGUuYml0cyAoTGF6eS5mb3JjZSBwcm5nKSBlbHNlIDAgaW5cbiAgeyBpbml0aWFsX3NpemUgPSBzOyBzaXplID0gMDsgc2VlZCA9IHNlZWQ7IGRhdGEgPSBBcnJheS5tYWtlIHMgRW1wdHkgfVxuXG5sZXQgY2xlYXIgaCA9XG4gIGlmIGguc2l6ZSA+IDAgdGhlbiBiZWdpblxuICAgIGguc2l6ZSA8LSAwO1xuICAgIEFycmF5LmZpbGwgaC5kYXRhIDAgKEFycmF5Lmxlbmd0aCBoLmRhdGEpIEVtcHR5XG4gIGVuZFxuXG5sZXQgcmVzZXQgaCA9XG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggaC5kYXRhIGluXG4gIGlmIE9iai5zaXplIChPYmoucmVwciBoKSA8IDQgKCogY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBoYXNoIHRhYmxlcyAqKVxuICAgIHx8IGxlbiA9IGFicyBoLmluaXRpYWxfc2l6ZSB0aGVuXG4gICAgY2xlYXIgaFxuICBlbHNlIGJlZ2luXG4gICAgaC5zaXplIDwtIDA7XG4gICAgaC5kYXRhIDwtIEFycmF5Lm1ha2UgKGFicyBoLmluaXRpYWxfc2l6ZSkgRW1wdHlcbiAgZW5kXG5cbmxldCBjb3B5X2J1Y2tldGxpc3QgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+IEVtcHR5XG4gIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgbGV0IHJlYyBsb29wIHByZWMgPSBmdW5jdGlvblxuICAgICAgICB8IEVtcHR5IC0+ICgpXG4gICAgICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICAgICAgbGV0IHIgPSBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGluXG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICAgIHwgRW1wdHkgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgICB8IENvbnMgcHJlYyAtPiAgcHJlYy5uZXh0IDwtIHJcbiAgICAgICAgICAgIGVuZDtcbiAgICAgICAgICAgIGxvb3AgciBuZXh0XG4gICAgICBpblxuICAgICAgbGV0IHIgPSBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGluXG4gICAgICBsb29wIHIgbmV4dDtcbiAgICAgIHJcblxubGV0IGNvcHkgaCA9IHsgaCB3aXRoIGRhdGEgPSBBcnJheS5tYXAgY29weV9idWNrZXRsaXN0IGguZGF0YSB9XG5cbmxldCBsZW5ndGggaCA9IGguc2l6ZVxuXG5sZXQgaW5zZXJ0X2FsbF9idWNrZXRzIGluZGV4ZnVuIGlucGxhY2Ugb2RhdGEgbmRhdGEgPVxuICBsZXQgbnNpemUgPSBBcnJheS5sZW5ndGggbmRhdGEgaW5cbiAgbGV0IG5kYXRhX3RhaWwgPSBBcnJheS5tYWtlIG5zaXplIEVtcHR5IGluXG4gIGxldCByZWMgaW5zZXJ0X2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgfCBFbXB0eSAtPiAoKVxuICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBhcyBjZWxsIC0+XG4gICAgICAgIGxldCBjZWxsID1cbiAgICAgICAgICBpZiBpbnBsYWNlIHRoZW4gY2VsbFxuICAgICAgICAgIGVsc2UgQ29ucyB7a2V5OyBkYXRhOyBuZXh0ID0gRW1wdHl9XG4gICAgICAgIGluXG4gICAgICAgIGxldCBuaWR4ID0gaW5kZXhmdW4ga2V5IGluXG4gICAgICAgIGJlZ2luIG1hdGNoIG5kYXRhX3RhaWwuKG5pZHgpIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBuZGF0YS4obmlkeCkgPC0gY2VsbDtcbiAgICAgICAgfCBDb25zIHRhaWwgLT4gdGFpbC5uZXh0IDwtIGNlbGw7XG4gICAgICAgIGVuZDtcbiAgICAgICAgbmRhdGFfdGFpbC4obmlkeCkgPC0gY2VsbDtcbiAgICAgICAgaW5zZXJ0X2J1Y2tldCBuZXh0XG4gIGluXG4gIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggb2RhdGEgLSAxIGRvXG4gICAgaW5zZXJ0X2J1Y2tldCBvZGF0YS4oaSlcbiAgZG9uZTtcbiAgaWYgaW5wbGFjZSB0aGVuXG4gICAgZm9yIGkgPSAwIHRvIG5zaXplIC0gMSBkb1xuICAgICAgbWF0Y2ggbmRhdGFfdGFpbC4oaSkgd2l0aFxuICAgICAgfCBFbXB0eSAtPiAoKVxuICAgICAgfCBDb25zIHRhaWwgLT4gdGFpbC5uZXh0IDwtIEVtcHR5XG4gICAgZG9uZVxuXG5sZXQgcmVzaXplIGluZGV4ZnVuIGggPVxuICBsZXQgb2RhdGEgPSBoLmRhdGEgaW5cbiAgbGV0IG9zaXplID0gQXJyYXkubGVuZ3RoIG9kYXRhIGluXG4gIGxldCBuc2l6ZSA9IG9zaXplICogMiBpblxuICBpZiBuc2l6ZSA8IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIHRoZW4gYmVnaW5cbiAgICBsZXQgbmRhdGEgPSBBcnJheS5tYWtlIG5zaXplIEVtcHR5IGluXG4gICAgbGV0IGlucGxhY2UgPSBub3QgKG9uZ29pbmdfdHJhdmVyc2FsIGgpIGluXG4gICAgaC5kYXRhIDwtIG5kYXRhOyAgICAgICAgICAoKiBzbyB0aGF0IGluZGV4ZnVuIHNlZXMgdGhlIG5ldyBidWNrZXQgY291bnQgKilcbiAgICBpbnNlcnRfYWxsX2J1Y2tldHMgKGluZGV4ZnVuIGgpIGlucGxhY2Ugb2RhdGEgbmRhdGFcbiAgZW5kXG5cbmxldCBpdGVyIGYgaCA9XG4gIGxldCByZWMgZG9fYnVja2V0ID0gZnVuY3Rpb25cbiAgICB8IEVtcHR5IC0+XG4gICAgICAgICgpXG4gICAgfCBDb25ze2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgZiBrZXkgZGF0YTsgZG9fYnVja2V0IG5leHQgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgZG9fYnVja2V0IGQuKGkpXG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG5sZXQgcmVjIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgcHJlYyA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIGJlZ2luIG1hdGNoIHByZWMgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIEVtcHR5XG4gICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gRW1wdHlcbiAgICAgIGVuZFxuICB8IChDb25zICh7a2V5OyBkYXRhOyBuZXh0fSBhcyBjKSkgYXMgc2xvdCAtPlxuICAgICAgYmVnaW4gbWF0Y2ggZiBrZXkgZGF0YSB3aXRoXG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHByZWMgbmV4dFxuICAgICAgfCBTb21lIGRhdGEgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gc2xvdFxuICAgICAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBzbG90XG4gICAgICAgICAgZW5kO1xuICAgICAgICAgIGMuZGF0YSA8LSBkYXRhO1xuICAgICAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgc2xvdCBuZXh0XG4gICAgICBlbmRcblxubGV0IGZpbHRlcl9tYXBfaW5wbGFjZSBmIGggPVxuICBsZXQgZCA9IGguZGF0YSBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBFbXB0eSBoLmRhdGEuKGkpXG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGhcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbmxldCBmb2xkIGYgaCBpbml0ID1cbiAgbGV0IHJlYyBkb19idWNrZXQgYiBhY2N1ID1cbiAgICBtYXRjaCBiIHdpdGhcbiAgICAgIEVtcHR5IC0+XG4gICAgICAgIGFjY3VcbiAgICB8IENvbnN7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICBkb19idWNrZXQgbmV4dCAoZiBrZXkgZGF0YSBhY2N1KSBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgICBsZXQgYWNjdSA9IHJlZiBpbml0IGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgYWNjdSA6PSBkb19idWNrZXQgZC4oaSkgIWFjY3VcbiAgICBkb25lO1xuICAgIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICAhYWNjdVxuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxudHlwZSBzdGF0aXN0aWNzID0ge1xuICBudW1fYmluZGluZ3M6IGludDtcbiAgbnVtX2J1Y2tldHM6IGludDtcbiAgbWF4X2J1Y2tldF9sZW5ndGg6IGludDtcbiAgYnVja2V0X2hpc3RvZ3JhbTogaW50IGFycmF5XG59XG5cbmxldCByZWMgYnVja2V0X2xlbmd0aCBhY2N1ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBhY2N1XG4gIHwgQ29uc3tuZXh0fSAtPiBidWNrZXRfbGVuZ3RoIChhY2N1ICsgMSkgbmV4dFxuXG5sZXQgc3RhdHMgaCA9XG4gIGxldCBtYmwgPVxuICAgIEFycmF5LmZvbGRfbGVmdCAoZnVuIG0gYiAtPiBJbnQubWF4IG0gKGJ1Y2tldF9sZW5ndGggMCBiKSkgMCBoLmRhdGEgaW5cbiAgbGV0IGhpc3RvID0gQXJyYXkubWFrZSAobWJsICsgMSkgMCBpblxuICBBcnJheS5pdGVyXG4gICAgKGZ1biBiIC0+XG4gICAgICBsZXQgbCA9IGJ1Y2tldF9sZW5ndGggMCBiIGluXG4gICAgICBoaXN0by4obCkgPC0gaGlzdG8uKGwpICsgMSlcbiAgICBoLmRhdGE7XG4gIHsgbnVtX2JpbmRpbmdzID0gaC5zaXplO1xuICAgIG51bV9idWNrZXRzID0gQXJyYXkubGVuZ3RoIGguZGF0YTtcbiAgICBtYXhfYnVja2V0X2xlbmd0aCA9IG1ibDtcbiAgICBidWNrZXRfaGlzdG9ncmFtID0gaGlzdG8gfVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHRibCA9XG4gICgqIGNhcHR1cmUgY3VycmVudCBhcnJheSwgc28gdGhhdCBldmVuIGlmIHRoZSB0YWJsZSBpcyByZXNpemVkIHdlXG4gICAgIGtlZXAgaXRlcmF0aW5nIG9uIHRoZSBzYW1lIGFycmF5ICopXG4gIGxldCB0YmxfZGF0YSA9IHRibC5kYXRhIGluXG4gICgqIHN0YXRlOiBpbmRleCAqIG5leHQgYnVja2V0IHRvIHRyYXZlcnNlICopXG4gIGxldCByZWMgYXV4IGkgYnVjayAoKSA9IG1hdGNoIGJ1Y2sgd2l0aFxuICAgIHwgRW1wdHkgLT5cbiAgICAgICAgaWYgaSA9IEFycmF5Lmxlbmd0aCB0YmxfZGF0YVxuICAgICAgICB0aGVuIFNlcS5OaWxcbiAgICAgICAgZWxzZSBhdXgoaSsxKSB0YmxfZGF0YS4oaSkgKClcbiAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgU2VxLkNvbnMgKChrZXksIGRhdGEpLCBhdXggaSBuZXh0KVxuICBpblxuICBhdXggMCBFbXB0eVxuXG5sZXQgdG9fc2VxX2tleXMgbSA9IFNlcS5tYXAgZnN0ICh0b19zZXEgbSlcblxubGV0IHRvX3NlcV92YWx1ZXMgbSA9IFNlcS5tYXAgc25kICh0b19zZXEgbSlcblxuKCogRnVuY3RvcmlhbCBpbnRlcmZhY2UgKilcblxubW9kdWxlIHR5cGUgSGFzaGVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgaGFzaDogdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFNlZWRlZEhhc2hlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgZXF1YWw6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGhhc2g6IGludCAtPiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgUyA9XG4gIHNpZ1xuICAgIHR5cGUga2V5XG4gICAgdHlwZSAhJ2EgdFxuICAgIHZhbCBjcmVhdGU6IGludCAtPiAnYSB0XG4gICAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIGNvcHk6ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBhZGQ6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgcmVtb3ZlOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gICAgdmFsIGZpbmQ6ICdhIHQgLT4ga2V5IC0+ICdhXG4gICAgdmFsIGZpbmRfb3B0OiAnYSB0IC0+IGtleSAtPiAnYSBvcHRpb25cbiAgICB2YWwgZmluZF9hbGw6ICdhIHQgLT4ga2V5IC0+ICdhIGxpc3RcbiAgICB2YWwgcmVwbGFjZSA6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgbWVtIDogJ2EgdCAtPiBrZXkgLT4gYm9vbFxuICAgIHZhbCBpdGVyOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmaWx0ZXJfbWFwX2lucGxhY2U6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBsZW5ndGg6ICdhIHQgLT4gaW50XG4gICAgdmFsIHN0YXRzOiAnYSB0IC0+IHN0YXRpc3RpY3NcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3NlcV9rZXlzIDogXyB0IC0+IGtleSBTZXEudFxuICAgIHZhbCB0b19zZXFfdmFsdWVzIDogJ2EgdCAtPiAnYSBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgcmVwbGFjZV9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFNlZWRlZFMgPVxuICBzaWdcbiAgICB0eXBlIGtleVxuICAgIHR5cGUgISdhIHRcbiAgICB2YWwgY3JlYXRlIDogP3JhbmRvbTpib29sIC0+IGludCAtPiAnYSB0XG4gICAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIGNvcHkgOiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgYWRkIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCByZW1vdmUgOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gICAgdmFsIGZpbmQgOiAnYSB0IC0+IGtleSAtPiAnYVxuICAgIHZhbCBmaW5kX29wdDogJ2EgdCAtPiBrZXkgLT4gJ2Egb3B0aW9uXG4gICAgdmFsIGZpbmRfYWxsIDogJ2EgdCAtPiBrZXkgLT4gJ2EgbGlzdFxuICAgIHZhbCByZXBsYWNlIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCBtZW0gOiAnYSB0IC0+IGtleSAtPiBib29sXG4gICAgdmFsIGl0ZXIgOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmaWx0ZXJfbWFwX2lucGxhY2U6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZCA6IChrZXkgLT4gJ2EgLT4gJ2IgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgLT4gJ2JcbiAgICB2YWwgbGVuZ3RoIDogJ2EgdCAtPiBpbnRcbiAgICB2YWwgc3RhdHM6ICdhIHQgLT4gc3RhdGlzdGljc1xuICAgIHZhbCB0b19zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX2tleXMgOiBfIHQgLT4ga2V5IFNlcS50XG4gICAgdmFsIHRvX3NlcV92YWx1ZXMgOiAnYSB0IC0+ICdhIFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCByZXBsYWNlX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIG9mX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICBlbmRcblxubW9kdWxlIE1ha2VTZWVkZWQoSDogU2VlZGVkSGFzaGVkVHlwZSk6IChTZWVkZWRTIHdpdGggdHlwZSBrZXkgPSBILnQpID1cbiAgc3RydWN0XG4gICAgdHlwZSBrZXkgPSBILnRcbiAgICB0eXBlICdhIGhhc2h0YmwgPSAoa2V5LCAnYSkgdFxuICAgIHR5cGUgJ2EgdCA9ICdhIGhhc2h0YmxcbiAgICBsZXQgY3JlYXRlID0gY3JlYXRlXG4gICAgbGV0IGNsZWFyID0gY2xlYXJcbiAgICBsZXQgcmVzZXQgPSByZXNldFxuICAgIGxldCBjb3B5ID0gY29weVxuXG4gICAgbGV0IGtleV9pbmRleCBoIGtleSA9XG4gICAgICAoSC5oYXNoIGguc2VlZCBrZXkpIGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuXG4gICAgbGV0IGFkZCBoIGtleSBkYXRhID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICBsZXQgYnVja2V0ID0gQ29uc3trZXk7IGRhdGE7IG5leHQ9aC5kYXRhLihpKX0gaW5cbiAgICAgIGguZGF0YS4oaSkgPC0gYnVja2V0O1xuICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9idWNrZXQgaCBpIGtleSBwcmVjID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICAoKVxuICAgICAgfCAoQ29ucyB7a2V5PWs7IG5leHR9KSBhcyBjIC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICAgICAgbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gbmV4dFxuICAgICAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIG5leHRcbiAgICAgICAgICBlbmRcbiAgICAgICAgICBlbHNlIHJlbW92ZV9idWNrZXQgaCBpIGtleSBjIG5leHRcblxuICAgIGxldCByZW1vdmUgaCBrZXkgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIHJlbW92ZV9idWNrZXQgaCBpIGtleSBFbXB0eSBoLmRhdGEuKGkpXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjIGtleSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgayB0aGVuIGRhdGEgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dFxuXG4gICAgbGV0IGZpbmQgaCBrZXkgPVxuICAgICAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsxIHRoZW4gZDEgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsyIHRoZW4gZDIgZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMyB0aGVuIGQzIGVsc2UgZmluZF9yZWMga2V5IG5leHQzXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjX29wdCBrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrIHRoZW4gU29tZSBkYXRhIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0XG5cbiAgICBsZXQgZmluZF9vcHQgaCBrZXkgPVxuICAgICAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMSB0aGVuIFNvbWUgZDEgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMiB0aGVuIFNvbWUgZDIgZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazMgdGhlbiBTb21lIGQzIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0M1xuXG4gICAgbGV0IGZpbmRfYWxsIGgga2V5ID1cbiAgICAgIGxldCByZWMgZmluZF9pbl9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIFtdXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE9ZDsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGsga2V5XG4gICAgICAgICAgdGhlbiBkIDo6IGZpbmRfaW5fYnVja2V0IG5leHRcbiAgICAgICAgICBlbHNlIGZpbmRfaW5fYnVja2V0IG5leHQgaW5cbiAgICAgIGZpbmRfaW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG4gICAgbGV0IHJlYyByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgdHJ1ZVxuICAgICAgfCBDb25zICh7a2V5PWs7IG5leHR9IGFzIHNsb3QpIC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gKHNsb3Qua2V5IDwtIGtleTsgc2xvdC5kYXRhIDwtIGRhdGE7IGZhbHNlKVxuICAgICAgICAgIGVsc2UgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbmV4dFxuXG4gICAgbGV0IHJlcGxhY2UgaCBrZXkgZGF0YSA9XG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICAgICAgbGV0IGwgPSBoLmRhdGEuKGkpIGluXG4gICAgICBpZiByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBsIHRoZW4gYmVnaW5cbiAgICAgICAgaC5kYXRhLihpKSA8LSBDb25ze2tleTsgZGF0YTsgbmV4dD1sfTtcbiAgICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICAgIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcbiAgICAgIGVuZFxuXG4gICAgbGV0IG1lbSBoIGtleSA9XG4gICAgICBsZXQgcmVjIG1lbV9pbl9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IENvbnN7a2V5PWs7IG5leHR9IC0+XG4gICAgICAgICAgSC5lcXVhbCBrIGtleSB8fCBtZW1faW5fYnVja2V0IG5leHQgaW5cbiAgICAgIG1lbV9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbiAgICBsZXQgYWRkX3NlcSB0YmwgaSA9XG4gICAgICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IGFkZCB0YmwgayB2KSBpXG5cbiAgICBsZXQgcmVwbGFjZV9zZXEgdGJsIGkgPVxuICAgICAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiByZXBsYWNlIHRibCBrIHYpIGlcblxuICAgIGxldCBvZl9zZXEgaSA9XG4gICAgICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gICAgICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgICAgIHRibFxuXG4gICAgbGV0IGl0ZXIgPSBpdGVyXG4gICAgbGV0IGZpbHRlcl9tYXBfaW5wbGFjZSA9IGZpbHRlcl9tYXBfaW5wbGFjZVxuICAgIGxldCBmb2xkID0gZm9sZFxuICAgIGxldCBsZW5ndGggPSBsZW5ndGhcbiAgICBsZXQgc3RhdHMgPSBzdGF0c1xuICAgIGxldCB0b19zZXEgPSB0b19zZXFcbiAgICBsZXQgdG9fc2VxX2tleXMgPSB0b19zZXFfa2V5c1xuICAgIGxldCB0b19zZXFfdmFsdWVzID0gdG9fc2VxX3ZhbHVlc1xuICBlbmRcblxubW9kdWxlIE1ha2UoSDogSGFzaGVkVHlwZSk6IChTIHdpdGggdHlwZSBrZXkgPSBILnQpID1cbiAgc3RydWN0XG4gICAgaW5jbHVkZSBNYWtlU2VlZGVkKHN0cnVjdFxuICAgICAgICB0eXBlIHQgPSBILnRcbiAgICAgICAgbGV0IGVxdWFsID0gSC5lcXVhbFxuICAgICAgICBsZXQgaGFzaCAoX3NlZWQ6IGludCkgeCA9IEguaGFzaCB4XG4gICAgICBlbmQpXG4gICAgbGV0IGNyZWF0ZSBzeiA9IGNyZWF0ZSB+cmFuZG9tOmZhbHNlIHN6XG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG4gIGVuZFxuXG4oKiBQb2x5bW9ycGhpYyBoYXNoIGZ1bmN0aW9uLWJhc2VkIHRhYmxlcyAqKVxuKCogQ29kZSBpbmNsdWRlZCBiZWxvdyB0aGUgZnVuY3RvcmlhbCBpbnRlcmZhY2UgdG8gZ3VhcmQgYWdhaW5zdCBhY2NpZGVudGFsXG4gICB1c2UgLSBzZWUgIzIyMDIgKilcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2hfcGFyYW0gOlxuICBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiBpbnQgPSBcImNhbWxfaGFzaFwiIFtAQG5vYWxsb2NdXG5cbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG5sZXQgaGFzaF9wYXJhbSBuMSBuMiB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gbjEgbjIgMCB4XG5sZXQgc2VlZGVkX2hhc2ggc2VlZCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIHNlZWQgeFxuXG5sZXQga2V5X2luZGV4IGgga2V5ID1cbiAgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpID49IDRcbiAgdGhlbiAoc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIGguc2VlZCBrZXkpIGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuICBlbHNlIGludmFsaWRfYXJnIFwiSGFzaHRibDogdW5zdXBwb3J0ZWQgaGFzaCB0YWJsZSBmb3JtYXRcIlxuXG5sZXQgYWRkIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgYnVja2V0ID0gQ29uc3trZXk7IGRhdGE7IG5leHQ9aC5kYXRhLihpKX0gaW5cbiAgaC5kYXRhLihpKSA8LSBidWNrZXQ7XG4gIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG5cbmxldCByZWMgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IHByZWMgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICAoKVxuICB8IChDb25zIHtrZXk9azsgbmV4dH0pIGFzIGMgLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIGJlZ2luXG4gICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIG5leHRcbiAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIG5leHRcbiAgICAgIGVuZFxuICAgICAgZWxzZSByZW1vdmVfYnVja2V0IGggaSBrZXkgYyBuZXh0XG5cbmxldCByZW1vdmUgaCBrZXkgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICByZW1vdmVfYnVja2V0IGggaSBrZXkgRW1wdHkgaC5kYXRhLihpKVxuXG5sZXQgcmVjIGZpbmRfcmVjIGtleSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrID0gMCB0aGVuIGRhdGEgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dFxuXG5sZXQgZmluZCBoIGtleSA9XG4gIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrMSA9IDAgdGhlbiBkMSBlbHNlXG4gICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMiA9IDAgdGhlbiBkMiBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgaWYgY29tcGFyZSBrZXkgazMgPSAwIHRoZW4gZDMgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dDNcblxubGV0IHJlYyBmaW5kX3JlY19vcHQga2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgTm9uZVxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrID0gMCB0aGVuIFNvbWUgZGF0YSBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dFxuXG5sZXQgZmluZF9vcHQgaCBrZXkgPVxuICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICB8IEVtcHR5IC0+IE5vbmVcbiAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsxID0gMCB0aGVuIFNvbWUgZDEgZWxzZVxuICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGsyID0gMCB0aGVuIFNvbWUgZDIgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMyA9IDAgdGhlbiBTb21lIGQzIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0M1xuXG5sZXQgZmluZF9hbGwgaCBrZXkgPVxuICBsZXQgcmVjIGZpbmRfaW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgW11cbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gZGF0YSA6OiBmaW5kX2luX2J1Y2tldCBuZXh0XG4gICAgICBlbHNlIGZpbmRfaW5fYnVja2V0IG5leHQgaW5cbiAgZmluZF9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCByZWMgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoe2tleT1rOyBuZXh0fSBhcyBzbG90KSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gKHNsb3Qua2V5IDwtIGtleTsgc2xvdC5kYXRhIDwtIGRhdGE7IGZhbHNlKVxuICAgICAgZWxzZSByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBuZXh0XG5cbmxldCByZXBsYWNlIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgbCA9IGguZGF0YS4oaSkgaW5cbiAgaWYgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbCB0aGVuIGJlZ2luXG4gICAgaC5kYXRhLihpKSA8LSBDb25ze2tleTsgZGF0YTsgbmV4dD1sfTtcbiAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG4gIGVuZFxuXG5sZXQgbWVtIGgga2V5ID1cbiAgbGV0IHJlYyBtZW1faW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgZmFsc2VcbiAgfCBDb25ze2tleT1rOyBuZXh0fSAtPlxuICAgICAgY29tcGFyZSBrIGtleSA9IDAgfHwgbWVtX2luX2J1Y2tldCBuZXh0IGluXG4gIG1lbV9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCBhZGRfc2VxIHRibCBpID1cbiAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG5sZXQgcmVwbGFjZV9zZXEgdGJsIGkgPVxuICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IHJlcGxhY2UgdGJsIGsgdikgaVxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gIHJlcGxhY2Vfc2VxIHRibCBpO1xuICB0YmxcblxubGV0IHJlYnVpbGQgPyhyYW5kb20gPSAhcmFuZG9taXplZCkgaCA9XG4gIGxldCBzID0gcG93ZXJfMl9hYm92ZSAxNiAoQXJyYXkubGVuZ3RoIGguZGF0YSkgaW5cbiAgbGV0IHNlZWQgPVxuICAgIGlmIHJhbmRvbSB0aGVuIFJhbmRvbS5TdGF0ZS5iaXRzIChMYXp5LmZvcmNlIHBybmcpXG4gICAgZWxzZSBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNCB0aGVuIGguc2VlZFxuICAgIGVsc2UgMCBpblxuICBsZXQgaCcgPSB7XG4gICAgc2l6ZSA9IGguc2l6ZTtcbiAgICBkYXRhID0gQXJyYXkubWFrZSBzIEVtcHR5O1xuICAgIHNlZWQgPSBzZWVkO1xuICAgIGluaXRpYWxfc2l6ZSA9IGlmIE9iai5zaXplIChPYmoucmVwciBoKSA+PSA0IHRoZW4gaC5pbml0aWFsX3NpemUgZWxzZSBzXG4gIH0gaW5cbiAgaW5zZXJ0X2FsbF9idWNrZXRzIChrZXlfaW5kZXggaCcpIGZhbHNlIGguZGF0YSBoJy5kYXRhO1xuICBoJ1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBIHByZXR0eS1wcmludGluZyBmYWNpbGl0eSBhbmQgZGVmaW5pdGlvbiBvZiBmb3JtYXR0ZXJzIGZvciAncGFyYWxsZWwnXG4gICAoaS5lLiB1bnJlbGF0ZWQgb3IgaW5kZXBlbmRlbnQpIHByZXR0eS1wcmludGluZyBvbiBtdWx0aXBsZSBvdXQgY2hhbm5lbHMuICopXG5cbigqXG4gICBUaGUgcHJldHR5LXByaW50aW5nIGVuZ2luZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuXG4qKVxuXG5sZXQgaWQgeCA9IHhcblxuKCogQSBkZXZvdGVkIHR5cGUgZm9yIHNpemVzIHRvIGF2b2lkIGNvbmZ1c2lvblxuICAgYmV0d2VlbiBzaXplcyBhbmQgbWVyZSBpbnRlZ2Vycy4gKilcbm1vZHVsZSBTaXplIDogc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCB0b19pbnQgOiB0IC0+IGludFxuICB2YWwgb2ZfaW50IDogaW50IC0+IHRcbiAgdmFsIHplcm8gOiB0XG4gIHZhbCB1bmtub3duIDogdFxuICB2YWwgaXNfa25vd24gOiB0IC0+IGJvb2xcbmVuZCAgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gaW50XG5cbiAgbGV0IHRvX2ludCA9IGlkXG4gIGxldCBvZl9pbnQgPSBpZFxuICBsZXQgemVybyA9IDBcbiAgbGV0IHVua25vd24gPSAtMVxuICBsZXQgaXNfa25vd24gbiA9IG4gPj0gMFxuZW5kXG5cblxuXG4oKiBUaGUgcHJldHR5LXByaW50aW5nIGJveGVzIGRlZmluaXRpb246XG4gICBhIHByZXR0eS1wcmludGluZyBib3ggaXMgZWl0aGVyXG4gICAtIGhib3g6IGhvcml6b250YWwgYm94IChubyBsaW5lIHNwbGl0dGluZylcbiAgIC0gdmJveDogdmVydGljYWwgYm94IChldmVyeSBicmVhayBoaW50IHNwbGl0cyB0aGUgbGluZSlcbiAgIC0gaHZib3g6IGhvcml6b250YWwvdmVydGljYWwgYm94XG4gICAgICh0aGUgYm94IGJlaGF2ZXMgYXMgYW4gaG9yaXpvbnRhbCBib3ggaWYgaXQgZml0cyBvblxuICAgICAgdGhlIGN1cnJlbnQgbGluZSwgb3RoZXJ3aXNlIHRoZSBib3ggYmVoYXZlcyBhcyBhIHZlcnRpY2FsIGJveClcbiAgIC0gaG92Ym94OiBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGNvbXBhY3RpbmcgYm94XG4gICAgICh0aGUgYm94IGlzIGNvbXBhY3RpbmcgbWF0ZXJpYWwsIHByaW50aW5nIGFzIG11Y2ggbWF0ZXJpYWwgYXMgcG9zc2libGVcbiAgICAgIG9uIGV2ZXJ5IGxpbmVzKVxuICAgLSBib3g6IGhvcml6b250YWwgb3IgdmVydGljYWwgY29tcGFjdGluZyBib3ggd2l0aCBlbmhhbmNlZCBib3ggc3RydWN0dXJlXG4gICAgICh0aGUgYm94IGJlaGF2ZXMgYXMgYW4gaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBib3ggYnV0IGJyZWFrIGhpbnRzIHNwbGl0XG4gICAgICB0aGUgbGluZSBpZiBzcGxpdHRpbmcgd291bGQgbW92ZSB0byB0aGUgbGVmdClcbiopXG50eXBlIGJveF90eXBlID0gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmJsb2NrX3R5cGUgPVxuICB8IFBwX2hib3ggfCBQcF92Ym94IHwgUHBfaHZib3ggfCBQcF9ob3Zib3ggfCBQcF9ib3ggfCBQcF9maXRzXG5cblxuKCogVGhlIHByZXR0eS1wcmludGluZyB0b2tlbnMgZGVmaW5pdGlvbjpcbiAgIGFyZSBlaXRoZXIgdGV4dCB0byBwcmludCBvciBwcmV0dHkgcHJpbnRpbmdcbiAgIGVsZW1lbnRzIHRoYXQgZHJpdmUgaW5kZW50YXRpb24gYW5kIGxpbmUgc3BsaXR0aW5nLiAqKVxudHlwZSBwcF90b2tlbiA9XG4gIHwgUHBfdGV4dCBvZiBzdHJpbmcgICAgICAgICAgKCogbm9ybWFsIHRleHQgKilcbiAgfCBQcF9icmVhayBvZiB7ICAgICAgICAgICAgICAoKiBjb21wbGV0ZSBicmVhayAqKVxuICAgICAgZml0czogc3RyaW5nICogaW50ICogc3RyaW5nOyAgICgqIGxpbmUgaXMgbm90IHNwbGl0ICopXG4gICAgICBicmVha3M6IHN0cmluZyAqIGludCAqIHN0cmluZzsgKCogbGluZSBpcyBzcGxpdCAqKVxuICAgIH1cbiAgfCBQcF90YnJlYWsgb2YgaW50ICogaW50ICAgICAoKiBnbyB0byBuZXh0IHRhYnVsYXRpb24gKilcbiAgfCBQcF9zdGFiICAgICAgICAgICAgICAgICAgICAoKiBzZXQgYSB0YWJ1bGF0aW9uICopXG4gIHwgUHBfYmVnaW4gb2YgaW50ICogYm94X3R5cGUgKCogYmVnaW5uaW5nIG9mIGEgYm94ICopXG4gIHwgUHBfZW5kICAgICAgICAgICAgICAgICAgICAgKCogZW5kIG9mIGEgYm94ICopXG4gIHwgUHBfdGJlZ2luIG9mIHRib3ggICAgICAgICAgKCogYmVnaW5uaW5nIG9mIGEgdGFidWxhdGlvbiBib3ggKilcbiAgfCBQcF90ZW5kICAgICAgICAgICAgICAgICAgICAoKiBlbmQgb2YgYSB0YWJ1bGF0aW9uIGJveCAqKVxuICB8IFBwX25ld2xpbmUgICAgICAgICAgICAgICAgICgqIHRvIGZvcmNlIGEgbmV3bGluZSBpbnNpZGUgYSBib3ggKilcbiAgfCBQcF9pZl9uZXdsaW5lICAgICAgICAgICAgICAoKiB0byBkbyBzb21ldGhpbmcgb25seSBpZiB0aGlzIHZlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lIGhhcyBiZWVuIGJyb2tlbiAqKVxuICB8IFBwX29wZW5fdGFnIG9mIHN0YWcgICAgICAgICAoKiBvcGVuaW5nIGEgdGFnIG5hbWUgKilcbiAgfCBQcF9jbG9zZV90YWcgICAgICAgICAgICAgICAoKiBjbG9zaW5nIHRoZSBtb3N0IHJlY2VudGx5IG9wZW4gdGFnICopXG5cbmFuZCBzdGFnID0gLi5cblxuYW5kIHRib3ggPSBQcF90Ym94IG9mIGludCBsaXN0IHJlZiAgKCogVGFidWxhdGlvbiBib3ggKilcblxudHlwZSB0YWcgPSBzdHJpbmdcbnR5cGUgc3RhZyArPSBTdHJpbmdfdGFnIG9mIHRhZ1xuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZTpcbiAgIHByZXR0eS1wcmludGluZyBtYXRlcmlhbCBpcyBub3Qgd3JpdHRlbiBpbiB0aGUgb3V0cHV0IGFzIHNvb24gYXMgZW1pdHRlZDtcbiAgIGluc3RlYWQsIHRoZSBtYXRlcmlhbCBpcyBzaW1wbHkgcmVjb3JkZWQgaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLFxuICAgdW50aWwgdGhlIGVuY2xvc2luZyBib3ggaGFzIGEga25vd24gY29tcHV0ZWQgc2l6ZSBhbmQgcHJvcGVyIHNwbGl0dGluZ1xuICAgZGVjaXNpb25zIGNhbiBiZSBtYWRlLlxuXG4gICBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUgY29udGFpbnMgZm9ybWF0dGluZyBlbGVtZW50cyB0byBiZSBwcmludGVkLlxuICAgRWFjaCBmb3JtYXR0aW5nIGVsZW1lbnQgaXMgYSB0dXBsZSAoc2l6ZSwgdG9rZW4sIGxlbmd0aCksIHdoZXJlXG4gICAtIGxlbmd0aCBpcyB0aGUgZGVjbGFyZWQgbGVuZ3RoIG9mIHRoZSB0b2tlbixcbiAgIC0gc2l6ZSBpcyBlZmZlY3RpdmUgc2l6ZSBvZiB0aGUgdG9rZW4gd2hlbiBpdCBpcyBwcmludGVkXG4gICAgIChzaXplIGlzIHNldCB3aGVuIHRoZSBzaXplIG9mIHRoZSBib3ggaXMga25vd24sIHNvIHRoYXQgc2l6ZSBvZiBicmVha1xuICAgICAgaGludHMgYXJlIGRlZmluaXRpdmUpLiAqKVxudHlwZSBwcF9xdWV1ZV9lbGVtID0ge1xuICBtdXRhYmxlIHNpemUgOiBTaXplLnQ7XG4gIHRva2VuIDogcHBfdG9rZW47XG4gIGxlbmd0aCA6IGludDtcbn1cblxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUgZGVmaW5pdGlvbi4gKilcbnR5cGUgcHBfcXVldWUgPSBwcF9xdWV1ZV9lbGVtIFF1ZXVlLnRcblxuKCogVGhlIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLiAqKVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2s6IHNjYW5uaW5nIGVsZW1lbnQgZGVmaW5pdGlvbi4gKilcbnR5cGUgcHBfc2Nhbl9lbGVtID0ge1xuICBsZWZ0X3RvdGFsIDogaW50OyAoKiBWYWx1ZSBvZiBwcF9sZWZ0X3RvdGFsIHdoZW4gdGhlIGVsZW1lbnQgd2FzIGVucXVldWVkLiAqKVxuICBxdWV1ZV9lbGVtIDogcHBfcXVldWVfZWxlbVxufVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjazpcbiAgIHRoZSBmb3JtYXR0aW5nIHN0YWNrIGNvbnRhaW5zIHRoZSBkZXNjcmlwdGlvbiBvZiBhbGwgdGhlIGN1cnJlbnRseSBhY3RpdmVcbiAgIGJveGVzOyB0aGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjayBpcyB1c2VkIHRvIHNwbGl0IHRoZSBsaW5lc1xuICAgd2hpbGUgcHJpbnRpbmcgdG9rZW5zLiAqKVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjazogZm9ybWF0dGluZyBzdGFjayBlbGVtZW50IGRlZmluaXRpb24uXG4gICBFYWNoIHN0YWNrIGVsZW1lbnQgZGVzY3JpYmVzIGEgcHJldHR5LXByaW50aW5nIGJveC4gKilcbnR5cGUgcHBfZm9ybWF0X2VsZW0gPSB7IGJveF90eXBlIDogYm94X3R5cGU7IHdpZHRoIDogaW50IH1cblxuKCogVGhlIGZvcm1hdHRlciBkZWZpbml0aW9uLlxuICAgRWFjaCBmb3JtYXR0ZXIgdmFsdWUgaXMgYSBwcmV0dHktcHJpbnRlciBpbnN0YW5jZSB3aXRoIGFsbCBpdHNcbiAgIG1hY2hpbmVyeS4gKilcbnR5cGUgZm9ybWF0dGVyID0ge1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suICopXG4gIHBwX3NjYW5fc3RhY2sgOiBwcF9zY2FuX2VsZW0gU3RhY2sudDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIGZvcm1hdHRpbmcgc3RhY2suICopXG4gIHBwX2Zvcm1hdF9zdGFjayA6IHBwX2Zvcm1hdF9lbGVtIFN0YWNrLnQ7XG4gIHBwX3Rib3hfc3RhY2sgOiB0Ym94IFN0YWNrLnQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBzZW1hbnRpY3MgdGFnIHN0YWNrLiAqKVxuICBwcF90YWdfc3RhY2sgOiBzdGFnIFN0YWNrLnQ7XG4gIHBwX21hcmtfc3RhY2sgOiBzdGFnIFN0YWNrLnQ7XG4gICgqIFZhbHVlIG9mIHJpZ2h0IG1hcmdpbi4gKilcbiAgbXV0YWJsZSBwcF9tYXJnaW4gOiBpbnQ7XG4gICgqIE1pbmltYWwgc3BhY2UgbGVmdCBiZWZvcmUgbWFyZ2luLCB3aGVuIG9wZW5pbmcgYSBib3guICopXG4gIG11dGFibGUgcHBfbWluX3NwYWNlX2xlZnQgOiBpbnQ7XG4gICgqIE1heGltdW0gdmFsdWUgb2YgaW5kZW50YXRpb246XG4gICAgIG5vIGJveCBjYW4gYmUgb3BlbmVkIGZ1cnRoZXIuICopXG4gIG11dGFibGUgcHBfbWF4X2luZGVudCA6IGludDtcbiAgKCogU3BhY2UgcmVtYWluaW5nIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG4gIG11dGFibGUgcHBfc3BhY2VfbGVmdCA6IGludDtcbiAgKCogQ3VycmVudCB2YWx1ZSBvZiBpbmRlbnRhdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9jdXJyZW50X2luZGVudCA6IGludDtcbiAgKCogVHJ1ZSB3aGVuIHRoZSBsaW5lIGhhcyBiZWVuIGJyb2tlbiBieSB0aGUgcHJldHR5LXByaW50ZXIuICopXG4gIG11dGFibGUgcHBfaXNfbmV3X2xpbmUgOiBib29sO1xuICAoKiBUb3RhbCB3aWR0aCBvZiB0b2tlbnMgYWxyZWFkeSBwcmludGVkLiAqKVxuICBtdXRhYmxlIHBwX2xlZnRfdG90YWwgOiBpbnQ7XG4gICgqIFRvdGFsIHdpZHRoIG9mIHRva2VucyBldmVyIHB1dCBpbiBxdWV1ZS4gKilcbiAgbXV0YWJsZSBwcF9yaWdodF90b3RhbCA6IGludDtcbiAgKCogQ3VycmVudCBudW1iZXIgb2Ygb3BlbiBib3hlcy4gKilcbiAgbXV0YWJsZSBwcF9jdXJyX2RlcHRoIDogaW50O1xuICAoKiBNYXhpbXVtIG51bWJlciBvZiBib3hlcyB3aGljaCBjYW4gYmUgc2ltdWx0YW5lb3VzbHkgb3Blbi4gKilcbiAgbXV0YWJsZSBwcF9tYXhfYm94ZXMgOiBpbnQ7XG4gICgqIEVsbGlwc2lzIHN0cmluZy4gKilcbiAgbXV0YWJsZSBwcF9lbGxpcHNpcyA6IHN0cmluZztcbiAgKCogT3V0cHV0IGZ1bmN0aW9uLiAqKVxuICBtdXRhYmxlIHBwX291dF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0O1xuICAoKiBGbHVzaGluZyBmdW5jdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9vdXRfZmx1c2ggOiB1bml0IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBuZXcgbGluZXMuICopXG4gIG11dGFibGUgcHBfb3V0X25ld2xpbmUgOiB1bml0IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBicmVhayBoaW50cyBzcGFjZXMuICopXG4gIG11dGFibGUgcHBfb3V0X3NwYWNlcyA6IGludCAtPiB1bml0O1xuICAoKiBPdXRwdXQgb2YgaW5kZW50YXRpb24gb2YgbmV3IGxpbmVzLiAqKVxuICBtdXRhYmxlIHBwX291dF9pbmRlbnQgOiBpbnQgLT4gdW5pdDtcbiAgKCogQXJlIHRhZ3MgcHJpbnRlZCA/ICopXG4gIG11dGFibGUgcHBfcHJpbnRfdGFncyA6IGJvb2w7XG4gICgqIEFyZSB0YWdzIG1hcmtlZCA/ICopXG4gIG11dGFibGUgcHBfbWFya190YWdzIDogYm9vbDtcbiAgKCogRmluZCBvcGVuaW5nIGFuZCBjbG9zaW5nIG1hcmtlcnMgb2YgdGFncy4gKilcbiAgbXV0YWJsZSBwcF9tYXJrX29wZW5fdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIG11dGFibGUgcHBfbWFya19jbG9zZV90YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbXV0YWJsZSBwcF9wcmludF9vcGVuX3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgbXV0YWJsZSBwcF9wcmludF9jbG9zZV90YWcgOiBzdGFnIC0+IHVuaXQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbiAgcHBfcXVldWUgOiBwcF9xdWV1ZTtcbn1cblxuXG4oKiBUaGUgZm9ybWF0dGVyIHNwZWNpZmljIHRhZyBoYW5kbGluZyBmdW5jdGlvbnMuICopXG50eXBlIGZvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9IHtcbiAgbWFya19vcGVuX3N0YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbWFya19jbG9zZV9zdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIHByaW50X29wZW5fc3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgcHJpbnRfY2xvc2Vfc3RhZyA6IHN0YWcgLT4gdW5pdDtcbn1cblxuXG4oKiBUaGUgZm9ybWF0dGVyIGZ1bmN0aW9ucyB0byBvdXRwdXQgbWF0ZXJpYWwuICopXG50eXBlIGZvcm1hdHRlcl9vdXRfZnVuY3Rpb25zID0ge1xuICBvdXRfc3RyaW5nIDogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdW5pdDtcbiAgb3V0X2ZsdXNoIDogdW5pdCAtPiB1bml0O1xuICBvdXRfbmV3bGluZSA6IHVuaXQgLT4gdW5pdDtcbiAgb3V0X3NwYWNlcyA6IGludCAtPiB1bml0O1xuICBvdXRfaW5kZW50IDogaW50IC0+IHVuaXQ7XG59XG5cblxuKCpcblxuICBBdXhpbGlhcmllcyBhbmQgYmFzaWMgZnVuY3Rpb25zLlxuXG4qKVxuXG4oKiBFbnRlciBhIHRva2VuIGluIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbmxldCBwcF9lbnF1ZXVlIHN0YXRlIHRva2VuID1cbiAgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gc3RhdGUucHBfcmlnaHRfdG90YWwgKyB0b2tlbi5sZW5ndGg7XG4gIFF1ZXVlLmFkZCB0b2tlbiBzdGF0ZS5wcF9xdWV1ZVxuXG5cbmxldCBwcF9jbGVhcl9xdWV1ZSBzdGF0ZSA9XG4gIHN0YXRlLnBwX2xlZnRfdG90YWwgPC0gMTsgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gMTtcbiAgUXVldWUuY2xlYXIgc3RhdGUucHBfcXVldWVcblxuXG4oKiBQcF9pbmZpbml0eTogbGFyZ2UgdmFsdWUgZm9yIGRlZmF1bHQgdG9rZW5zIHNpemUuXG5cbiAgIFBwX2luZmluaXR5IGlzIGRvY3VtZW50ZWQgYXMgYmVpbmcgZ3JlYXRlciB0aGFuIDFlMTA7IHRvIGF2b2lkXG4gICBjb25mdXNpb24gYWJvdXQgdGhlIHdvcmQgJ2dyZWF0ZXInLCB3ZSBjaG9vc2UgcHBfaW5maW5pdHkgZ3JlYXRlclxuICAgdGhhbiAxZTEwICsgMTsgZm9yIGNvcnJlY3QgaGFuZGxpbmcgb2YgdGVzdHMgaW4gdGhlIGFsZ29yaXRobSxcbiAgIHBwX2luZmluaXR5IG11c3QgYmUgZXZlbiBvbmUgbW9yZSB0aGFuIDFlMTAgKyAxOyBsZXQncyBzdGFuZCBvbiB0aGVcbiAgIHNhZmUgc2lkZSBieSBjaG9vc2luZyAxLmUxMCsxMC5cblxuICAgUHBfaW5maW5pdHkgY291bGQgcHJvYmFibHkgYmUgMTA3Mzc0MTgyMyB0aGF0IGlzIDJeMzAgLSAxLCB0aGF0IGlzXG4gICB0aGUgbWluaW1hbCB1cHBlciBib3VuZCBmb3IgaW50ZWdlcnM7IG5vdyB0aGF0IG1heF9pbnQgaXMgZGVmaW5lZCxcbiAgIHRoaXMgbGltaXQgY291bGQgYWxzbyBiZSBkZWZpbmVkIGFzIG1heF9pbnQgLSAxLlxuXG4gICBIb3dldmVyLCBiZWZvcmUgc2V0dGluZyBwcF9pbmZpbml0eSB0byBzb21ldGhpbmcgYXJvdW5kIG1heF9pbnQsIHdlXG4gICBtdXN0IGNhcmVmdWxseSBkb3VibGUtY2hlY2sgYWxsIHRoZSBpbnRlZ2VyIGFyaXRobWV0aWMgb3BlcmF0aW9uc1xuICAgdGhhdCBpbnZvbHZlIHBwX2luZmluaXR5LCBzaW5jZSBhbnkgb3ZlcmZsb3cgd291bGQgd3JlY2sgaGF2b2MgdGhlXG4gICBwcmV0dHktcHJpbnRpbmcgYWxnb3JpdGhtJ3MgaW52YXJpYW50cy4gR2l2ZW4gdGhhdCB0aGlzIGFyaXRobWV0aWNcbiAgIGNvcnJlY3RuZXNzIGNoZWNrIGlzIGRpZmZpY3VsdCBhbmQgZXJyb3IgcHJvbmUgYW5kIGdpdmVuIHRoYXQgMWUxMFxuICAgKyAxIGlzIGluIHByYWN0aWNlIGxhcmdlIGVub3VnaCwgdGhlcmUgaXMgbm8gbmVlZCB0byBhdHRlbXB0IHRvIHNldFxuICAgcHBfaW5maW5pdHkgdG8gdGhlIHRoZW9yZXRpY2FsbHkgbWF4aW11bSBsaW1pdC4gSXQgaXMgbm90IHdvcnRoIHRoZVxuICAgYnVyZGVuICEgKilcbmxldCBwcF9pbmZpbml0eSA9IDEwMDAwMDAwMTBcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBmb3IgdGhlIGZvcm1hdHRlci4gKilcbmxldCBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIHMgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nIHMgMCAoU3RyaW5nLmxlbmd0aCBzKVxuYW5kIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlID0gc3RhdGUucHBfb3V0X25ld2xpbmUgKClcbmFuZCBwcF9vdXRwdXRfc3BhY2VzIHN0YXRlIG4gPSBzdGF0ZS5wcF9vdXRfc3BhY2VzIG5cbmFuZCBwcF9vdXRwdXRfaW5kZW50IHN0YXRlIG4gPSBzdGF0ZS5wcF9vdXRfaW5kZW50IG5cblxuKCogRm9ybWF0IGEgdGV4dHVhbCB0b2tlbiAqKVxubGV0IGZvcm1hdF9wcF90ZXh0IHN0YXRlIHNpemUgdGV4dCA9XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCAtIHNpemU7XG4gIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgdGV4dDtcbiAgc3RhdGUucHBfaXNfbmV3X2xpbmUgPC0gZmFsc2VcblxuKCogRm9ybWF0IGEgc3RyaW5nIGJ5IGl0cyBsZW5ndGgsIGlmIG5vdCBlbXB0eSAqKVxubGV0IGZvcm1hdF9zdHJpbmcgc3RhdGUgcyA9XG4gIGlmIHMgPD4gXCJcIiB0aGVuIGZvcm1hdF9wcF90ZXh0IHN0YXRlIChTdHJpbmcubGVuZ3RoIHMpIHNcblxuKCogVG8gZm9ybWF0IGEgYnJlYWssIGluZGVudGluZyBhIG5ldyBsaW5lLiAqKVxubGV0IGJyZWFrX25ld19saW5lIHN0YXRlIChiZWZvcmUsIG9mZnNldCwgYWZ0ZXIpIHdpZHRoID1cbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBiZWZvcmU7XG4gIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlO1xuICBzdGF0ZS5wcF9pc19uZXdfbGluZSA8LSB0cnVlO1xuICBsZXQgaW5kZW50ID0gc3RhdGUucHBfbWFyZ2luIC0gd2lkdGggKyBvZmZzZXQgaW5cbiAgKCogRG9uJ3QgaW5kZW50IG1vcmUgdGhhbiBwcF9tYXhfaW5kZW50LiAqKVxuICBsZXQgcmVhbF9pbmRlbnQgPSBJbnQubWluIHN0YXRlLnBwX21heF9pbmRlbnQgaW5kZW50IGluXG4gIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50IDwtIHJlYWxfaW5kZW50O1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50O1xuICBwcF9vdXRwdXRfaW5kZW50IHN0YXRlIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50O1xuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGFmdGVyXG5cblxuKCogVG8gZm9yY2UgYSBsaW5lIGJyZWFrIGluc2lkZSBhIGJveDogbm8gb2Zmc2V0IGlzIGFkZGVkLiAqKVxubGV0IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGggPSBicmVha19uZXdfbGluZSBzdGF0ZSAoXCJcIiwgMCwgXCJcIikgd2lkdGhcblxuKCogVG8gZm9ybWF0IGEgYnJlYWsgdGhhdCBmaXRzIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG5sZXQgYnJlYWtfc2FtZV9saW5lIHN0YXRlIChiZWZvcmUsIHdpZHRoLCBhZnRlcikgPVxuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGJlZm9yZTtcbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gd2lkdGg7XG4gIHBwX291dHB1dF9zcGFjZXMgc3RhdGUgd2lkdGg7XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYWZ0ZXJcblxuXG4oKiBUbyBpbmRlbnQgbm8gbW9yZSB0aGFuIHBwX21heF9pbmRlbnQsIGlmIG9uZSB0cmllcyB0byBvcGVuIGEgYm94XG4gICBiZXlvbmQgcHBfbWF4X2luZGVudCwgdGhlbiB0aGUgYm94IGlzIHJlamVjdGVkIG9uIHRoZSBsZWZ0XG4gICBieSBzaW11bGF0aW5nIGEgYnJlYWsuICopXG5sZXQgcHBfZm9yY2VfYnJlYWtfbGluZSBzdGF0ZSA9XG4gIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHdpdGhcbiAgfCBOb25lIC0+IHBwX291dHB1dF9uZXdsaW5lIHN0YXRlXG4gIHwgU29tZSB7IGJveF90eXBlOyB3aWR0aCB9IC0+XG4gICAgaWYgd2lkdGggPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW5cbiAgICAgIG1hdGNoIGJveF90eXBlIHdpdGhcbiAgICAgIHwgUHBfZml0cyB8IFBwX2hib3ggLT4gKClcbiAgICAgIHwgUHBfdmJveCB8IFBwX2h2Ym94IHwgUHBfaG92Ym94IHwgUHBfYm94IC0+IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGhcblxuXG4oKiBUbyBza2lwIGEgdG9rZW4sIGlmIHRoZSBwcmV2aW91cyBsaW5lIGhhcyBiZWVuIGJyb2tlbi4gKilcbmxldCBwcF9za2lwX3Rva2VuIHN0YXRlID1cbiAgbWF0Y2ggUXVldWUudGFrZV9vcHQgc3RhdGUucHBfcXVldWUgd2l0aFxuICB8IE5vbmUgLT4gKCkgKCogcHJpbnRfaWZfbmV3bGluZSBtdXN0IGhhdmUgYmVlbiB0aGUgbGFzdCBwcmludGluZyBjb21tYW5kICopXG4gIHwgU29tZSB7IHNpemU7IGxlbmd0aDsgXyB9IC0+XG4gICAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSBzdGF0ZS5wcF9sZWZ0X3RvdGFsIC0gbGVuZ3RoO1xuICAgIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCArIFNpemUudG9faW50IHNpemVcblxuXG4oKlxuXG4gIFRoZSBtYWluIHByZXR0eSBwcmludGluZyBmdW5jdGlvbnMuXG5cbiopXG5cbigqIEZvcm1hdHRpbmcgYSB0b2tlbiB3aXRoIGEgZ2l2ZW4gc2l6ZS4gKilcbmxldCBmb3JtYXRfcHBfdG9rZW4gc3RhdGUgc2l6ZSA9IGZ1bmN0aW9uXG5cbiAgfCBQcF90ZXh0IHMgLT5cbiAgICBmb3JtYXRfcHBfdGV4dCBzdGF0ZSBzaXplIHNcblxuICB8IFBwX2JlZ2luIChvZmYsIHR5KSAtPlxuICAgIGxldCBpbnNlcnRpb25fcG9pbnQgPSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IGluXG4gICAgaWYgaW5zZXJ0aW9uX3BvaW50ID4gc3RhdGUucHBfbWF4X2luZGVudCB0aGVuXG4gICAgICAoKiBjYW4gbm90IG9wZW4gYSBib3ggcmlnaHQgdGhlcmUuICopXG4gICAgICBiZWdpbiBwcF9mb3JjZV9icmVha19saW5lIHN0YXRlIGVuZDtcbiAgICBsZXQgd2lkdGggPSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gb2ZmIGluXG4gICAgbGV0IGJveF90eXBlID1cbiAgICAgIG1hdGNoIHR5IHdpdGhcbiAgICAgIHwgUHBfdmJveCAtPiBQcF92Ym94XG4gICAgICB8IFBwX2hib3ggfCBQcF9odmJveCB8IFBwX2hvdmJveCB8IFBwX2JveCB8IFBwX2ZpdHMgLT5cbiAgICAgICAgaWYgc2l6ZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnQgdGhlbiB0eSBlbHNlIFBwX2ZpdHMgaW5cbiAgICBTdGFjay5wdXNoIHsgYm94X3R5cGU7IHdpZHRoIH0gc3RhdGUucHBfZm9ybWF0X3N0YWNrXG5cbiAgfCBQcF9lbmQgLT5cbiAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB8PiBpZ25vcmVcblxuICB8IFBwX3RiZWdpbiAoUHBfdGJveCBfIGFzIHRib3gpIC0+XG4gICAgU3RhY2sucHVzaCB0Ym94IHN0YXRlLnBwX3Rib3hfc3RhY2tcblxuICB8IFBwX3RlbmQgLT5cbiAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgfD4gaWdub3JlXG5cbiAgfCBQcF9zdGFiIC0+XG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF90Ym94X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gb3BlbiB0YWJ1bGF0aW9uIGJveC4gKilcbiAgICB8IFNvbWUgKFBwX3Rib3ggdGFicykgLT5cbiAgICAgIGxldCByZWMgYWRkX3RhYiBuID0gZnVuY3Rpb25cbiAgICAgICAgfCBbXSAtPiBbbl1cbiAgICAgICAgfCB4IDo6IGwgYXMgbHMgLT4gaWYgbiA8IHggdGhlbiBuIDo6IGxzIGVsc2UgeCA6OiBhZGRfdGFiIG4gbCBpblxuICAgICAgdGFicyA6PSBhZGRfdGFiIChzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0KSAhdGFic1xuICAgIGVuZFxuXG4gIHwgUHBfdGJyZWFrIChuLCBvZmYpIC0+XG4gICAgbGV0IGluc2VydGlvbl9wb2ludCA9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnQgaW5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBvcGVuIHRhYnVsYXRpb24gYm94LiAqKVxuICAgIHwgU29tZSAoUHBfdGJveCB0YWJzKSAtPlxuICAgICAgbGV0IHRhYiA9XG4gICAgICAgIG1hdGNoICF0YWJzIHdpdGhcbiAgICAgICAgfCBbXSAtPiBpbnNlcnRpb25fcG9pbnRcbiAgICAgICAgfCBmaXJzdCA6OiBfIC0+XG4gICAgICAgICAgbGV0IHJlYyBmaW5kID0gZnVuY3Rpb25cbiAgICAgICAgICAgIHwgaGVhZCA6OiB0YWlsIC0+XG4gICAgICAgICAgICAgIGlmIGhlYWQgPj0gaW5zZXJ0aW9uX3BvaW50IHRoZW4gaGVhZCBlbHNlIGZpbmQgdGFpbFxuICAgICAgICAgICAgfCBbXSAtPiBmaXJzdCBpblxuICAgICAgICAgIGZpbmQgIXRhYnMgaW5cbiAgICAgIGxldCBvZmZzZXQgPSB0YWIgLSBpbnNlcnRpb25fcG9pbnQgaW5cbiAgICAgIGlmIG9mZnNldCA+PSAwXG4gICAgICB0aGVuIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSAoXCJcIiwgb2Zmc2V0ICsgbiwgXCJcIilcbiAgICAgIGVsc2UgYnJlYWtfbmV3X2xpbmUgc3RhdGUgKFwiXCIsIHRhYiArIG9mZiwgXCJcIikgc3RhdGUucHBfbWFyZ2luXG4gICAgZW5kXG5cbiAgfCBQcF9uZXdsaW5lIC0+XG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZSAoKiBObyBvcGVuIGJveC4gKilcbiAgICB8IFNvbWUgeyB3aWR0aDsgX30gLT4gYnJlYWtfbGluZSBzdGF0ZSB3aWR0aFxuICAgIGVuZFxuXG4gIHwgUHBfaWZfbmV3bGluZSAtPlxuICAgIGlmIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50ICE9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICB0aGVuIHBwX3NraXBfdG9rZW4gc3RhdGVcblxuICB8IFBwX2JyZWFrIHsgZml0czsgYnJlYWtzIH0gLT5cbiAgICBsZXQgYmVmb3JlLCBvZmYsIF8gPSBicmVha3MgaW5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG9wZW4gYm94LiAqKVxuICAgIHwgU29tZSB7IGJveF90eXBlOyB3aWR0aCB9IC0+XG4gICAgICBiZWdpbiBtYXRjaCBib3hfdHlwZSB3aXRoXG4gICAgICB8IFBwX2hvdmJveCAtPlxuICAgICAgICBpZiBzaXplICsgU3RyaW5nLmxlbmd0aCBiZWZvcmUgPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0XG4gICAgICAgIHRoZW4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICAgIGVsc2UgYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIHwgUHBfYm94IC0+XG4gICAgICAgICgqIEhhdmUgdGhlIGxpbmUganVzdCBiZWVuIGJyb2tlbiBoZXJlID8gKilcbiAgICAgICAgaWYgc3RhdGUucHBfaXNfbmV3X2xpbmUgdGhlbiBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0cyBlbHNlXG4gICAgICAgIGlmIHNpemUgKyBTdHJpbmcubGVuZ3RoIGJlZm9yZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aCBlbHNlXG4gICAgICAgICgqIGJyZWFrIHRoZSBsaW5lIGhlcmUgbGVhZHMgdG8gbmV3IGluZGVudGF0aW9uID8gKilcbiAgICAgICAgaWYgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPiBzdGF0ZS5wcF9tYXJnaW4gLSB3aWR0aCArIG9mZlxuICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgICBlbHNlIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX2h2Ym94IC0+IGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgfCBQcF9maXRzIC0+IGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX3Zib3ggLT4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICB8IFBwX2hib3ggLT4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIGVuZFxuICAgIGVuZFxuXG4gICB8IFBwX29wZW5fdGFnIHRhZ19uYW1lIC0+XG4gICAgIGxldCBtYXJrZXIgPSBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIHRhZ19uYW1lIGluXG4gICAgIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgbWFya2VyO1xuICAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX21hcmtfc3RhY2tcblxuICAgfCBQcF9jbG9zZV90YWcgLT5cbiAgICAgYmVnaW4gbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9tYXJrX3N0YWNrIHdpdGhcbiAgICAgfCBOb25lIC0+ICgpICgqIE5vIG1vcmUgdGFnIHRvIGNsb3NlLiAqKVxuICAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgICBsZXQgbWFya2VyID0gc3RhdGUucHBfbWFya19jbG9zZV90YWcgdGFnX25hbWUgaW5cbiAgICAgICBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIG1hcmtlclxuICAgICBlbmRcblxuXG4oKiBQcmludCBpZiB0b2tlbiBzaXplIGlzIGtub3duIGVsc2UgcHJpbnRpbmcgaXMgZGVsYXllZC5cbiAgIFByaW50aW5nIGlzIGRlbGF5ZWQgd2hlbiB0aGUgdGV4dCB3YWl0aW5nIGluIHRoZSBxdWV1ZSByZXF1aXJlc1xuICAgbW9yZSByb29tIHRvIGZvcm1hdCB0aGFuIGV4aXN0cyBvbiB0aGUgY3VycmVudCBsaW5lLiAqKVxubGV0IHJlYyBhZHZhbmNlX2xlZnQgc3RhdGUgPVxuICBtYXRjaCBRdWV1ZS5wZWVrX29wdCBzdGF0ZS5wcF9xdWV1ZSB3aXRoXG4gIHwgTm9uZSAtPiAoKSAoKiBObyB0b2tlbnMgdG8gcHJpbnQgKilcbiAgfCBTb21lIHsgc2l6ZTsgdG9rZW47IGxlbmd0aCB9IC0+XG4gICAgbGV0IHBlbmRpbmdfY291bnQgPSBzdGF0ZS5wcF9yaWdodF90b3RhbCAtIHN0YXRlLnBwX2xlZnRfdG90YWwgaW5cbiAgICBpZiBTaXplLmlzX2tub3duIHNpemUgfHwgcGVuZGluZ19jb3VudCA+PSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW4gYmVnaW5cbiAgICAgIFF1ZXVlLnRha2Ugc3RhdGUucHBfcXVldWUgfD4gaWdub3JlOyAoKiBOb3QgZW1wdHk6IHdlIHBlZWsgaW50byBpdCAqKVxuICAgICAgbGV0IHNpemUgPSBpZiBTaXplLmlzX2tub3duIHNpemUgdGhlbiBTaXplLnRvX2ludCBzaXplIGVsc2UgcHBfaW5maW5pdHkgaW5cbiAgICAgIGZvcm1hdF9wcF90b2tlbiBzdGF0ZSBzaXplIHRva2VuO1xuICAgICAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSBsZW5ndGggKyBzdGF0ZS5wcF9sZWZ0X3RvdGFsO1xuICAgICAgKGFkdmFuY2VfbGVmdCBbQHRhaWxjYWxsXSkgc3RhdGVcbiAgICBlbmRcblxuXG4oKiBUbyBlbnF1ZXVlIGEgdG9rZW4gOiB0cnkgdG8gYWR2YW5jZS4gKilcbmxldCBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgdG9rID0gcHBfZW5xdWV1ZSBzdGF0ZSB0b2s7IGFkdmFuY2VfbGVmdCBzdGF0ZVxuXG5cbigqIFRvIGVucXVldWUgc3RyaW5ncy4gKilcbmxldCBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSBzaXplIHMgPVxuICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgeyBzaXplOyB0b2tlbiA9IFBwX3RleHQgczsgbGVuZ3RoID0gU2l6ZS50b19pbnQgc2l6ZSB9XG5cblxubGV0IGVucXVldWVfc3RyaW5nIHN0YXRlIHMgPVxuICBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSAoU2l6ZS5vZl9pbnQgKFN0cmluZy5sZW5ndGggcykpIHNcblxuXG4oKiBSb3V0aW5lcyBmb3Igc2NhbiBzdGFja1xuICAgZGV0ZXJtaW5lIHNpemUgb2YgYm94ZXMuICopXG5cbigqIFRoZSBzY2FuX3N0YWNrIGlzIG5ldmVyIGVtcHR5LiAqKVxubGV0IGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGFjayA9XG4gIFN0YWNrLmNsZWFyIHN0YWNrO1xuICBsZXQgcXVldWVfZWxlbSA9IHsgc2l6ZSA9IFNpemUudW5rbm93bjsgdG9rZW4gPSBQcF90ZXh0IFwiXCI7IGxlbmd0aCA9IDAgfSBpblxuICBTdGFjay5wdXNoIHsgbGVmdF90b3RhbCA9IC0xOyBxdWV1ZV9lbGVtIH0gc3RhY2tcblxuKCogU2V0dGluZyB0aGUgc2l6ZSBvZiBib3hlcyBvbiBzY2FuIHN0YWNrOlxuICAgaWYgdHkgPSB0cnVlIHRoZW4gc2l6ZSBvZiBicmVhayBpcyBzZXQgZWxzZSBzaXplIG9mIGJveCBpcyBzZXQ7XG4gICBpbiBlYWNoIGNhc2UgcHBfc2Nhbl9zdGFjayBpcyBwb3BwZWQuXG5cbiAgIE5vdGU6XG4gICBQYXR0ZXJuIG1hdGNoaW5nIG9uIHNjYW4gc3RhY2sgaXMgZXhoYXVzdGl2ZSwgc2luY2Ugc2Nhbl9zdGFjayBpcyBuZXZlclxuICAgZW1wdHkuXG4gICBQYXR0ZXJuIG1hdGNoaW5nIG9uIHRva2VuIGluIHNjYW4gc3RhY2sgaXMgYWxzbyBleGhhdXN0aXZlLFxuICAgc2luY2Ugc2Nhbl9wdXNoIGlzIHVzZWQgb24gYnJlYWtzIGFuZCBvcGVuaW5nIG9mIGJveGVzLiAqKVxubGV0IHNldF9zaXplIHN0YXRlIHR5ID1cbiAgbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHdpdGhcbiAgfCBOb25lIC0+ICgpICgqIHNjYW5fc3RhY2sgaXMgbmV2ZXIgZW1wdHkuICopXG4gIHwgU29tZSB7IGxlZnRfdG90YWw7IHF1ZXVlX2VsZW0gfSAtPlxuICAgIGxldCBzaXplID0gU2l6ZS50b19pbnQgcXVldWVfZWxlbS5zaXplIGluXG4gICAgKCogdGVzdCBpZiBzY2FuIHN0YWNrIGNvbnRhaW5zIGFueSBkYXRhIHRoYXQgaXMgbm90IG9ic29sZXRlLiAqKVxuICAgIGlmIGxlZnRfdG90YWwgPCBzdGF0ZS5wcF9sZWZ0X3RvdGFsIHRoZW5cbiAgICAgIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGF0ZS5wcF9zY2FuX3N0YWNrXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggcXVldWVfZWxlbS50b2tlbiB3aXRoXG4gICAgICB8IFBwX2JyZWFrIF8gfCBQcF90YnJlYWsgKF8sIF8pIC0+XG4gICAgICAgIGlmIHR5IHRoZW4gYmVnaW5cbiAgICAgICAgICBxdWV1ZV9lbGVtLnNpemUgPC0gU2l6ZS5vZl9pbnQgKHN0YXRlLnBwX3JpZ2h0X3RvdGFsICsgc2l6ZSk7XG4gICAgICAgICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHw+IGlnbm9yZVxuICAgICAgICBlbmRcbiAgICAgIHwgUHBfYmVnaW4gKF8sIF8pIC0+XG4gICAgICAgIGlmIG5vdCB0eSB0aGVuIGJlZ2luXG4gICAgICAgICAgcXVldWVfZWxlbS5zaXplIDwtIFNpemUub2ZfaW50IChzdGF0ZS5wcF9yaWdodF90b3RhbCArIHNpemUpO1xuICAgICAgICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfc2Nhbl9zdGFjayB8PiBpZ25vcmVcbiAgICAgICAgZW5kXG4gICAgICB8IFBwX3RleHQgXyB8IFBwX3N0YWIgfCBQcF90YmVnaW4gXyB8IFBwX3RlbmQgfCBQcF9lbmRcbiAgICAgIHwgUHBfbmV3bGluZSB8IFBwX2lmX25ld2xpbmUgfCBQcF9vcGVuX3RhZyBfIHwgUHBfY2xvc2VfdGFnIC0+XG4gICAgICAgICgpICgqIHNjYW5fcHVzaCBpcyBvbmx5IHVzZWQgZm9yIGJyZWFrcyBhbmQgYm94ZXMuICopXG5cblxuKCogUHVzaCBhIHRva2VuIG9uIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLlxuICAgSWYgYiBpcyB0cnVlIHNldF9zaXplIGlzIGNhbGxlZC4gKilcbmxldCBzY2FuX3B1c2ggc3RhdGUgYiB0b2tlbiA9XG4gIHBwX2VucXVldWUgc3RhdGUgdG9rZW47XG4gIGlmIGIgdGhlbiBzZXRfc2l6ZSBzdGF0ZSB0cnVlO1xuICBsZXQgZWxlbSA9IHsgbGVmdF90b3RhbCA9IHN0YXRlLnBwX3JpZ2h0X3RvdGFsOyBxdWV1ZV9lbGVtID0gdG9rZW4gfSBpblxuICBTdGFjay5wdXNoIGVsZW0gc3RhdGUucHBfc2Nhbl9zdGFja1xuXG5cbigqIFRvIG9wZW4gYSBuZXcgYm94IDpcbiAgIHRoZSB1c2VyIG1heSBzZXQgdGhlIGRlcHRoIGJvdW5kIHBwX21heF9ib3hlc1xuICAgYW55IHRleHQgbmVzdGVkIGRlZXBlciBpcyBwcmludGVkIGFzIHRoZSBlbGxpcHNpcyBzdHJpbmcuICopXG5sZXQgcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBicl90eSA9XG4gIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCArIDE7XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfYmVnaW4gKGluZGVudCwgYnJfdHkpOyBsZW5ndGggPSAwIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgZmFsc2UgZWxlbSBlbHNlXG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPSBzdGF0ZS5wcF9tYXhfYm94ZXNcbiAgdGhlbiBlbnF1ZXVlX3N0cmluZyBzdGF0ZSBzdGF0ZS5wcF9lbGxpcHNpc1xuXG5cbigqIFRoZSBib3ggd2hpY2ggaXMgYWx3YXlzIG9wZW4uICopXG5sZXQgcHBfb3Blbl9zeXNfYm94IHN0YXRlID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIDAgUHBfaG92Ym94XG5cbigqIENsb3NlIGEgYm94LCBzZXR0aW5nIHNpemVzIG9mIGl0cyBzdWIgYm94ZXMuICopXG5sZXQgcHBfY2xvc2VfYm94IHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA+IDEgdGhlblxuICBiZWdpblxuICAgIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGJlZ2luXG4gICAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9lbmQ7IGxlbmd0aCA9IDAgfTtcbiAgICAgIHNldF9zaXplIHN0YXRlIHRydWU7IHNldF9zaXplIHN0YXRlIGZhbHNlXG4gICAgZW5kO1xuICAgIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCAtIDE7XG4gIGVuZFxuXG5cbigqIE9wZW4gYSB0YWcsIHB1c2hpbmcgaXQgb24gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9vcGVuX3N0YWcgc3RhdGUgdGFnX25hbWUgPVxuICBpZiBzdGF0ZS5wcF9wcmludF90YWdzIHRoZW5cbiAgYmVnaW5cbiAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX3RhZ19zdGFjaztcbiAgICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyB0YWdfbmFtZVxuICBlbmQ7XG4gIGlmIHN0YXRlLnBwX21hcmtfdGFncyB0aGVuXG4gICAgbGV0IHRva2VuID0gUHBfb3Blbl90YWcgdGFnX25hbWUgaW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW47IGxlbmd0aCA9IDAgfVxuXG5cbigqIENsb3NlIGEgdGFnLCBwb3BwaW5nIGl0IGZyb20gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9jbG9zZV9zdGFnIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfbWFya190YWdzIHRoZW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9jbG9zZV90YWc7IGxlbmd0aCA9IDAgfTtcbiAgaWYgc3RhdGUucHBfcHJpbnRfdGFncyB0aGVuXG4gICAgbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF90YWdfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBtb3JlIHRhZyB0byBjbG9zZS4gKilcbiAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyB0YWdfbmFtZVxuXG5sZXQgcHBfb3Blbl90YWcgc3RhdGUgcyA9IHBwX29wZW5fc3RhZyBzdGF0ZSAoU3RyaW5nX3RhZyBzKVxubGV0IHBwX2Nsb3NlX3RhZyBzdGF0ZSAoKSA9IHBwX2Nsb3NlX3N0YWcgc3RhdGUgKClcblxubGV0IHBwX3NldF9wcmludF90YWdzIHN0YXRlIGIgPSBzdGF0ZS5wcF9wcmludF90YWdzIDwtIGJcbmxldCBwcF9zZXRfbWFya190YWdzIHN0YXRlIGIgPSBzdGF0ZS5wcF9tYXJrX3RhZ3MgPC0gYlxubGV0IHBwX2dldF9wcmludF90YWdzIHN0YXRlICgpID0gc3RhdGUucHBfcHJpbnRfdGFnc1xubGV0IHBwX2dldF9tYXJrX3RhZ3Mgc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXJrX3RhZ3NcbmxldCBwcF9zZXRfdGFncyBzdGF0ZSBiID1cbiAgcHBfc2V0X3ByaW50X3RhZ3Mgc3RhdGUgYjsgcHBfc2V0X21hcmtfdGFncyBzdGF0ZSBiXG5cblxuKCogSGFuZGxpbmcgdGFnIGhhbmRsaW5nIGZ1bmN0aW9uczogZ2V0L3NldCBmdW5jdGlvbnMuICopXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGF0ZSAoKSA9IHtcbiAgbWFya19vcGVuX3N0YWcgPSBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnO1xuICBtYXJrX2Nsb3NlX3N0YWcgPSBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZztcbiAgcHJpbnRfb3Blbl9zdGFnID0gc3RhdGUucHBfcHJpbnRfb3Blbl90YWc7XG4gIHByaW50X2Nsb3NlX3N0YWcgPSBzdGF0ZS5wcF9wcmludF9jbG9zZV90YWc7XG59XG5cblxubGV0IHBwX3NldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RhdGUge1xuICAgICBtYXJrX29wZW5fc3RhZyA9IG1vdDtcbiAgICAgbWFya19jbG9zZV9zdGFnID0gbWN0O1xuICAgICBwcmludF9vcGVuX3N0YWcgPSBwb3Q7XG4gICAgIHByaW50X2Nsb3NlX3N0YWcgPSBwY3Q7XG4gIH0gPVxuICBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIDwtIG1vdDtcbiAgc3RhdGUucHBfbWFya19jbG9zZV90YWcgPC0gbWN0O1xuICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyA8LSBwb3Q7XG4gIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyA8LSBwY3RcblxuXG4oKiBJbml0aWFsaXplIHByZXR0eS1wcmludGVyLiAqKVxubGV0IHBwX3Jpbml0IHN0YXRlID1cbiAgcHBfY2xlYXJfcXVldWUgc3RhdGU7XG4gIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGF0ZS5wcF9zY2FuX3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF9mb3JtYXRfc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX3Rib3hfc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX3RhZ19zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfbWFya19zdGFjaztcbiAgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPC0gMDtcbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSAwO1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX21hcmdpbjtcbiAgcHBfb3Blbl9zeXNfYm94IHN0YXRlXG5cbmxldCBjbGVhcl90YWdfc3RhY2sgc3RhdGUgPVxuICBTdGFjay5pdGVyIChmdW4gXyAtPiBwcF9jbG9zZV90YWcgc3RhdGUgKCkpIHN0YXRlLnBwX3RhZ19zdGFja1xuXG5cbigqIEZsdXNoaW5nIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxubGV0IHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIGIgPVxuICBjbGVhcl90YWdfc3RhY2sgc3RhdGU7XG4gIHdoaWxlIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIGRvXG4gICAgcHBfY2xvc2VfYm94IHN0YXRlICgpXG4gIGRvbmU7XG4gIHN0YXRlLnBwX3JpZ2h0X3RvdGFsIDwtIHBwX2luZmluaXR5O1xuICBhZHZhbmNlX2xlZnQgc3RhdGU7XG4gIGlmIGIgdGhlbiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZTtcbiAgcHBfcmluaXQgc3RhdGVcblxuKCpcblxuICBQcm9jZWR1cmVzIHRvIGZvcm1hdCB2YWx1ZXMgYW5kIHVzZSBib3hlcy5cblxuKilcblxuKCogVG8gZm9ybWF0IGEgc3RyaW5nLiAqKVxubGV0IHBwX3ByaW50X2FzX3NpemUgc3RhdGUgc2l6ZSBzID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlc1xuICB0aGVuIGVucXVldWVfc3RyaW5nX2FzIHN0YXRlIHNpemUgc1xuXG5cbmxldCBwcF9wcmludF9hcyBzdGF0ZSBpc2l6ZSBzID1cbiAgcHBfcHJpbnRfYXNfc2l6ZSBzdGF0ZSAoU2l6ZS5vZl9pbnQgaXNpemUpIHNcblxuXG5sZXQgcHBfcHJpbnRfc3RyaW5nIHN0YXRlIHMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBzXG5cbmxldCBwcF9wcmludF9ieXRlcyBzdGF0ZSBzID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgKEJ5dGVzLmxlbmd0aCBzKSAoQnl0ZXMudG9fc3RyaW5nIHMpXG5cbigqIFRvIGZvcm1hdCBhbiBpbnRlZ2VyLiAqKVxubGV0IHBwX3ByaW50X2ludCBzdGF0ZSBpID0gcHBfcHJpbnRfc3RyaW5nIHN0YXRlIChJbnQudG9fc3RyaW5nIGkpXG5cbigqIFRvIGZvcm1hdCBhIGZsb2F0LiAqKVxubGV0IHBwX3ByaW50X2Zsb2F0IHN0YXRlIGYgPSBwcF9wcmludF9zdHJpbmcgc3RhdGUgKHN0cmluZ19vZl9mbG9hdCBmKVxuXG4oKiBUbyBmb3JtYXQgYSBib29sZWFuLiAqKVxubGV0IHBwX3ByaW50X2Jvb2wgc3RhdGUgYiA9IHBwX3ByaW50X3N0cmluZyBzdGF0ZSAoc3RyaW5nX29mX2Jvb2wgYilcblxuKCogVG8gZm9ybWF0IGEgY2hhci4gKilcbmxldCBwcF9wcmludF9jaGFyIHN0YXRlIGMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAxIChTdHJpbmcubWFrZSAxIGMpXG5cblxuKCogT3BlbmluZyBib3hlcy4gKilcbmxldCBwcF9vcGVuX2hib3ggc3RhdGUgKCkgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgMCBQcF9oYm94XG5hbmQgcHBfb3Blbl92Ym94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfdmJveFxuXG5hbmQgcHBfb3Blbl9odmJveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2h2Ym94XG5hbmQgcHBfb3Blbl9ob3Zib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9ob3Zib3hcbmFuZCBwcF9vcGVuX2JveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2JveFxuXG5cbigqIFByaW50aW5nIHF1ZXVlZCB0ZXh0LlxuXG4gICBbcHBfcHJpbnRfZmx1c2hdIHByaW50cyBhbGwgcGVuZGluZyBpdGVtcyBpbiB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUgYW5kXG4gICB0aGVuIGZsdXNoZXMgdGhlIGxvdyBsZXZlbCBvdXRwdXQgZGV2aWNlIG9mIHRoZSBmb3JtYXR0ZXIgdG8gYWN0dWFsbHlcbiAgIGRpc3BsYXkgcHJpbnRpbmcgbWF0ZXJpYWwuXG5cbiAgIFtwcF9wcmludF9uZXdsaW5lXSBiZWhhdmVzIGFzIFtwcF9wcmludF9mbHVzaF0gYWZ0ZXIgcHJpbnRpbmcgYW4gYWRkaXRpb25hbFxuICAgbmV3IGxpbmUuICopXG5sZXQgcHBfcHJpbnRfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIHRydWU7IHN0YXRlLnBwX291dF9mbHVzaCAoKVxuYW5kIHBwX3ByaW50X2ZsdXNoIHN0YXRlICgpID1cbiAgcHBfZmx1c2hfcXVldWUgc3RhdGUgZmFsc2U7IHN0YXRlLnBwX291dF9mbHVzaCAoKVxuXG5cbigqIFRvIGdldCBhIG5ld2xpbmUgd2hlbiBvbmUgZG9lcyBub3Qgd2FudCB0byBjbG9zZSB0aGUgY3VycmVudCBib3guICopXG5sZXQgcHBfZm9yY2VfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfbmV3bGluZTsgbGVuZ3RoID0gMCB9XG5cblxuKCogVG8gZm9ybWF0IHNvbWV0aGluZywgb25seSBpbiBjYXNlIHRoZSBsaW5lIGhhcyBqdXN0IGJlZW4gYnJva2VuLiAqKVxubGV0IHBwX3ByaW50X2lmX25ld2xpbmUgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGVcbiAgICAgIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9pZl9uZXdsaW5lOyBsZW5ndGggPSAwIH1cblxuXG4oKiBHZW5lcmFsaXplZCBicmVhayBoaW50IHRoYXQgYWxsb3dzIHByaW50aW5nIHN0cmluZ3MgYmVmb3JlL2FmdGVyXG4gICBzYW1lLWxpbmUgb2Zmc2V0ICh3aWR0aCkgb3IgbmV3LWxpbmUgb2Zmc2V0ICopXG5sZXQgcHBfcHJpbnRfY3VzdG9tX2JyZWFrIHN0YXRlIH5maXRzIH5icmVha3MgPVxuICBsZXQgYmVmb3JlLCB3aWR0aCwgYWZ0ZXIgPSBmaXRzIGluXG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IHRva2VuID0gUHBfYnJlYWsgeyBmaXRzOyBicmVha3MgfSBpblxuICAgIGxldCBsZW5ndGggPSBTdHJpbmcubGVuZ3RoIGJlZm9yZSArIHdpZHRoICsgU3RyaW5nLmxlbmd0aCBhZnRlciBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbjsgbGVuZ3RoIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgdHJ1ZSBlbGVtXG5cbigqIFByaW50aW5nIGJyZWFrIGhpbnRzOlxuICAgQSBicmVhayBoaW50IGluZGljYXRlcyB3aGVyZSBhIGJveCBtYXkgYmUgYnJva2VuLlxuICAgSWYgbGluZSBpcyBicm9rZW4gdGhlbiBvZmZzZXQgaXMgYWRkZWQgdG8gdGhlIGluZGVudGF0aW9uIG9mIHRoZSBjdXJyZW50XG4gICBib3ggZWxzZSAodGhlIHZhbHVlIG9mKSB3aWR0aCBibGFua3MgYXJlIHByaW50ZWQuICopXG5sZXQgcHBfcHJpbnRfYnJlYWsgc3RhdGUgd2lkdGggb2Zmc2V0ID1cbiAgcHBfcHJpbnRfY3VzdG9tX2JyZWFrIHN0YXRlXG4gICAgfmZpdHM6KFwiXCIsIHdpZHRoLCBcIlwiKSB+YnJlYWtzOihcIlwiLCBvZmZzZXQsIFwiXCIpXG5cblxuKCogUHJpbnQgYSBzcGFjZSA6XG4gICBhIHNwYWNlIGlzIGEgYnJlYWsgaGludCB0aGF0IHByaW50cyBhIHNpbmdsZSBzcGFjZSBpZiB0aGUgYnJlYWsgZG9lcyBub3RcbiAgIHNwbGl0IHRoZSBsaW5lO1xuICAgYSBjdXQgaXMgYSBicmVhayBoaW50IHRoYXQgcHJpbnRzIG5vdGhpbmcgaWYgdGhlIGJyZWFrIGRvZXMgbm90IHNwbGl0IHRoZVxuICAgbGluZS4gKilcbmxldCBwcF9wcmludF9zcGFjZSBzdGF0ZSAoKSA9IHBwX3ByaW50X2JyZWFrIHN0YXRlIDEgMFxuYW5kIHBwX3ByaW50X2N1dCBzdGF0ZSAoKSA9IHBwX3ByaW50X2JyZWFrIHN0YXRlIDAgMFxuXG5cbigqIFRhYnVsYXRpb24gYm94ZXMuICopXG5sZXQgcHBfb3Blbl90Ym94IHN0YXRlICgpID1cbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoICsgMTtcbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLnplcm8gaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW4gPSBQcF90YmVnaW4gKFBwX3Rib3ggKHJlZiBbXSkpOyBsZW5ndGggPSAwIH0gaW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbVxuXG5cbigqIENsb3NlIGEgdGFidWxhdGlvbiBib3guICopXG5sZXQgcHBfY2xvc2VfdGJveCBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIHRoZW5cbiAgYmVnaW5cbiAgIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgICBsZXQgZWxlbSA9IHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF90ZW5kOyBsZW5ndGggPSAwIH0gaW5cbiAgICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW07XG4gICAgIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCAtIDFcbiAgZW5kXG5cblxuKCogUHJpbnQgYSB0YWJ1bGF0aW9uIGJyZWFrLiAqKVxubGV0IHBwX3ByaW50X3RicmVhayBzdGF0ZSB3aWR0aCBvZmZzZXQgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUub2ZfaW50ICgtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsKSBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbiA9IFBwX3RicmVhayAod2lkdGgsIG9mZnNldCk7IGxlbmd0aCA9IHdpZHRoIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgdHJ1ZSBlbGVtXG5cblxubGV0IHBwX3ByaW50X3RhYiBzdGF0ZSAoKSA9IHBwX3ByaW50X3RicmVhayBzdGF0ZSAwIDBcblxubGV0IHBwX3NldF90YWIgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9zdGFiOyBsZW5ndGggPSAwIH0gaW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbVxuXG5cbigqXG5cbiAgUHJvY2VkdXJlcyB0byBjb250cm9sIHRoZSBwcmV0dHktcHJpbnRlcnNcblxuKilcblxuKCogU2V0X21heF9ib3hlcy4gKilcbmxldCBwcF9zZXRfbWF4X2JveGVzIHN0YXRlIG4gPSBpZiBuID4gMSB0aGVuIHN0YXRlLnBwX21heF9ib3hlcyA8LSBuXG5cbigqIFRvIGtub3cgdGhlIGN1cnJlbnQgbWF4aW11bSBudW1iZXIgb2YgYm94ZXMgYWxsb3dlZC4gKilcbmxldCBwcF9nZXRfbWF4X2JveGVzIHN0YXRlICgpID0gc3RhdGUucHBfbWF4X2JveGVzXG5cbmxldCBwcF9vdmVyX21heF9ib3hlcyBzdGF0ZSAoKSA9IHN0YXRlLnBwX2N1cnJfZGVwdGggPSBzdGF0ZS5wcF9tYXhfYm94ZXNcblxuKCogRWxsaXBzaXMuICopXG5sZXQgcHBfc2V0X2VsbGlwc2lzX3RleHQgc3RhdGUgcyA9IHN0YXRlLnBwX2VsbGlwc2lzIDwtIHNcbmFuZCBwcF9nZXRfZWxsaXBzaXNfdGV4dCBzdGF0ZSAoKSA9IHN0YXRlLnBwX2VsbGlwc2lzXG5cblxuKCogVG8gc2V0IHRoZSBtYXJnaW4gb2YgcHJldHR5LXByaW50ZXIuICopXG5sZXQgcHBfbGltaXQgbiA9XG4gIGlmIG4gPCBwcF9pbmZpbml0eSB0aGVuIG4gZWxzZSBwcmVkIHBwX2luZmluaXR5XG5cblxuKCogSW50ZXJuYWwgcHJldHR5LXByaW50ZXIgZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9taW5fc3BhY2VfbGVmdCBzdGF0ZSBuID1cbiAgaWYgbiA+PSAxIHRoZW5cbiAgICBsZXQgbiA9IHBwX2xpbWl0IG4gaW5cbiAgICBzdGF0ZS5wcF9taW5fc3BhY2VfbGVmdCA8LSBuO1xuICAgIHN0YXRlLnBwX21heF9pbmRlbnQgPC0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfcmluaXQgc3RhdGVcblxuXG4oKiBJbml0aWFsbHksIHdlIGhhdmUgOlxuICAgcHBfbWF4X2luZGVudCA9IHBwX21hcmdpbiAtIHBwX21pbl9zcGFjZV9sZWZ0LCBhbmRcbiAgIHBwX3NwYWNlX2xlZnQgPSBwcF9tYXJnaW4uICopXG5sZXQgcHBfc2V0X21heF9pbmRlbnQgc3RhdGUgbiA9XG4gIGlmIG4gPiAxIHRoZW5cbiAgICBwcF9zZXRfbWluX3NwYWNlX2xlZnQgc3RhdGUgKHN0YXRlLnBwX21hcmdpbiAtIG4pXG5cblxubGV0IHBwX2dldF9tYXhfaW5kZW50IHN0YXRlICgpID0gc3RhdGUucHBfbWF4X2luZGVudFxuXG5sZXQgcHBfc2V0X21hcmdpbiBzdGF0ZSBuID1cbiAgaWYgbiA+PSAxIHRoZW5cbiAgICBsZXQgbiA9IHBwX2xpbWl0IG4gaW5cbiAgICBzdGF0ZS5wcF9tYXJnaW4gPC0gbjtcbiAgICBsZXQgbmV3X21heF9pbmRlbnQgPVxuICAgICAgKCogVHJ5IHRvIG1haW50YWluIG1heF9pbmRlbnQgdG8gaXRzIGFjdHVhbCB2YWx1ZS4gKilcbiAgICAgIGlmIHN0YXRlLnBwX21heF9pbmRlbnQgPD0gc3RhdGUucHBfbWFyZ2luXG4gICAgICB0aGVuIHN0YXRlLnBwX21heF9pbmRlbnQgZWxzZVxuICAgICAgKCogSWYgcG9zc2libGUgbWFpbnRhaW4gcHBfbWluX3NwYWNlX2xlZnQgdG8gaXRzIGFjdHVhbCB2YWx1ZSxcbiAgICAgICAgIGlmIHRoaXMgbGVhZHMgdG8gYSB0b28gc21hbGwgbWF4X2luZGVudCwgdGFrZSBoYWxmIG9mIHRoZVxuICAgICAgICAgbmV3IG1hcmdpbiwgaWYgaXQgaXMgZ3JlYXRlciB0aGFuIDEuICopXG4gICAgICAgSW50Lm1heCAoSW50Lm1heCAoc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfbWluX3NwYWNlX2xlZnQpXG4gICAgICAgICAgICAgICAgKHN0YXRlLnBwX21hcmdpbiAvIDIpKSAxIGluXG4gICAgKCogUmVidWlsZCBpbnZhcmlhbnRzLiAqKVxuICAgIHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG5ld19tYXhfaW5kZW50XG5cblxuKCoqIEdlb21ldHJ5IGZ1bmN0aW9ucyBhbmQgdHlwZXMgKilcbnR5cGUgZ2VvbWV0cnkgPSB7IG1heF9pbmRlbnQ6aW50OyBtYXJnaW46IGludH1cblxubGV0IHZhbGlkYXRlX2dlb21ldHJ5IHttYXJnaW47IG1heF9pbmRlbnR9ID1cbiAgaWYgbWF4X2luZGVudCA8IDIgdGhlblxuICAgIEVycm9yIFwibWF4X2luZGVudCA8IDJcIlxuICBlbHNlIGlmIG1hcmdpbiA8PSBtYXhfaW5kZW50IHRoZW5cbiAgICBFcnJvciBcIm1hcmdpbiA8PSBtYXhfaW5kZW50XCJcbiAgZWxzZSBPayAoKVxuXG5sZXQgY2hlY2tfZ2VvbWV0cnkgZ2VvbWV0cnkgPVxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgT2sgKCkgLT4gdHJ1ZVxuICB8IEVycm9yIF8gLT4gZmFsc2VcblxubGV0IHBwX2dldF9tYXJnaW4gc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXJnaW5cblxubGV0IHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIHttYXJnaW47IG1heF9pbmRlbnR9ID1cbiAgcHBfc2V0X21hcmdpbiBzdGF0ZSBtYXJnaW47XG4gIHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG1heF9pbmRlbnQ7XG4gICgpXG5cbmxldCBwcF9zZXRfZ2VvbWV0cnkgc3RhdGUgfm1heF9pbmRlbnQgfm1hcmdpbiA9XG4gIGxldCBnZW9tZXRyeSA9IHsgbWF4X2luZGVudDsgbWFyZ2luIH0gaW5cbiAgbWF0Y2ggdmFsaWRhdGVfZ2VvbWV0cnkgZ2VvbWV0cnkgd2l0aFxuICB8IEVycm9yIG1zZyAtPlxuICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IChcIkZvcm1hdC5wcF9zZXRfZ2VvbWV0cnk6IFwiIF4gbXNnKSlcbiAgfCBPayAoKSAtPlxuICAgIHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIGdlb21ldHJ5XG5cbmxldCBwcF9zYWZlX3NldF9nZW9tZXRyeSBzdGF0ZSB+bWF4X2luZGVudCB+bWFyZ2luID1cbiAgbGV0IGdlb21ldHJ5ID0geyBtYXhfaW5kZW50OyBtYXJnaW4gfSBpblxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgRXJyb3IgX21zZyAtPlxuICAgICAoKVxuICB8IE9rICgpIC0+XG4gICAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgZ2VvbWV0cnlcblxubGV0IHBwX2dldF9nZW9tZXRyeSBzdGF0ZSAoKSA9XG4gIHsgbWFyZ2luID0gcHBfZ2V0X21hcmdpbiBzdGF0ZSAoKTsgbWF4X2luZGVudCA9IHBwX2dldF9tYXhfaW5kZW50IHN0YXRlICgpIH1cblxubGV0IHBwX3VwZGF0ZV9nZW9tZXRyeSBzdGF0ZSB1cGRhdGUgPVxuICBsZXQgZ2VvbWV0cnkgPSBwcF9nZXRfZ2VvbWV0cnkgc3RhdGUgKCkgaW5cbiAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgKHVwZGF0ZSBnZW9tZXRyeSlcblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBvdXRwdXQgZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGF0ZSB7XG4gICAgICBvdXRfc3RyaW5nID0gZjtcbiAgICAgIG91dF9mbHVzaCA9IGc7XG4gICAgICBvdXRfbmV3bGluZSA9IGg7XG4gICAgICBvdXRfc3BhY2VzID0gaTtcbiAgICAgIG91dF9pbmRlbnQgPSBqO1xuICAgIH0gPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIGY7XG4gIHN0YXRlLnBwX291dF9mbHVzaCA8LSBnO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBoO1xuICBzdGF0ZS5wcF9vdXRfc3BhY2VzIDwtIGk7XG4gIHN0YXRlLnBwX291dF9pbmRlbnQgPC0galxuXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0YXRlICgpID0ge1xuICBvdXRfc3RyaW5nID0gc3RhdGUucHBfb3V0X3N0cmluZztcbiAgb3V0X2ZsdXNoID0gc3RhdGUucHBfb3V0X2ZsdXNoO1xuICBvdXRfbmV3bGluZSA9IHN0YXRlLnBwX291dF9uZXdsaW5lO1xuICBvdXRfc3BhY2VzID0gc3RhdGUucHBfb3V0X3NwYWNlcztcbiAgb3V0X2luZGVudCA9IHN0YXRlLnBwX291dF9pbmRlbnQ7XG59XG5cblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBzdHJpbmcgb3V0cHV0IGFuZCBmbHVzaCBmdW5jdGlvbnMuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlIGYgZyA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gZjsgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIGdcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSAoKSA9XG4gIChzdGF0ZS5wcF9vdXRfc3RyaW5nLCBzdGF0ZS5wcF9vdXRfZmx1c2gpXG5cblxuKCogVGhlIGRlZmF1bHQgZnVuY3Rpb24gdG8gb3V0cHV0IG5ldyBsaW5lcy4gKilcbmxldCBkaXNwbGF5X25ld2xpbmUgc3RhdGUgKCkgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nIFwiXFxuXCIgMCAgMVxuXG4oKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBvdXRwdXQgc3BhY2VzLiAqKVxubGV0IGJsYW5rX2xpbmUgPSBTdHJpbmcubWFrZSA4MCAnICdcbmxldCByZWMgZGlzcGxheV9ibGFua3Mgc3RhdGUgbiA9XG4gIGlmIG4gPiAwIHRoZW5cbiAgaWYgbiA8PSA4MCB0aGVuIHN0YXRlLnBwX291dF9zdHJpbmcgYmxhbmtfbGluZSAwIG4gZWxzZVxuICBiZWdpblxuICAgIHN0YXRlLnBwX291dF9zdHJpbmcgYmxhbmtfbGluZSAwIDgwO1xuICAgIGRpc3BsYXlfYmxhbmtzIHN0YXRlIChuIC0gODApXG4gIGVuZFxuXG5cbigqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIG91dHB1dCBpbmRlbnRhdGlvbiBvZiBuZXcgbGluZXMuICopXG5sZXQgZGlzcGxheV9pbmRlbnQgPSBkaXNwbGF5X2JsYW5rc1xuXG4oKiBTZXR0aW5nIGEgZm9ybWF0dGVyIGJhc2ljIG91dHB1dCBmdW5jdGlvbnMgYXMgcHJpbnRpbmcgdG8gYSBnaXZlblxuICAgW1BlcnZhc2l2ZS5vdXRfY2hhbm5lbF0gdmFsdWUuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCBzdGF0ZSBvYyA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gb3V0cHV0X3N1YnN0cmluZyBvYztcbiAgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIChmdW4gKCkgLT4gZmx1c2ggb2MpO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBkaXNwbGF5X25ld2xpbmUgc3RhdGU7XG4gIHN0YXRlLnBwX291dF9zcGFjZXMgPC0gZGlzcGxheV9ibGFua3Mgc3RhdGU7XG4gIHN0YXRlLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgc3RhdGVcblxuKCpcblxuICBEZWZpbmluZyBzcGVjaWZpYyBmb3JtYXR0ZXJzXG5cbiopXG5cbmxldCBkZWZhdWx0X3BwX21hcmtfb3Blbl90YWcgPSBmdW5jdGlvblxuICB8IFN0cmluZ190YWcgcyAtPiBcIjxcIiBeIHMgXiBcIj5cIlxuICB8IF8gLT4gXCJcIlxubGV0IGRlZmF1bHRfcHBfbWFya19jbG9zZV90YWcgPSBmdW5jdGlvblxuICB8IFN0cmluZ190YWcgcyAtPiBcIjwvXCIgXiBzIF4gXCI+XCJcbiAgfCBfIC0+IFwiXCJcblxubGV0IGRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWcgPSBpZ25vcmVcbmxldCBkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZyA9IGlnbm9yZVxuXG4oKiBCdWlsZGluZyBhIGZvcm1hdHRlciBnaXZlbiBpdHMgYmFzaWMgb3V0cHV0IGZ1bmN0aW9ucy5cbiAgIE90aGVyIGZpZWxkcyBnZXQgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlcy4gKilcbmxldCBwcF9tYWtlX2Zvcm1hdHRlciBmIGcgaCBpIGogPVxuICAoKiBUaGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgZm9ybWF0dGVyIGNvbnRhaW5zIGEgZHVtbXkgYm94LiAqKVxuICBsZXQgcHBfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgbGV0IHN5c190b2sgPVxuICAgIHsgc2l6ZSA9IFNpemUudW5rbm93bjsgdG9rZW4gPSBQcF9iZWdpbiAoMCwgUHBfaG92Ym94KTsgbGVuZ3RoID0gMCB9IGluXG4gIFF1ZXVlLmFkZCBzeXNfdG9rIHBwX3F1ZXVlO1xuICBsZXQgc2Nhbl9zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKSBpblxuICBpbml0aWFsaXplX3NjYW5fc3RhY2sgc2Nhbl9zdGFjaztcbiAgU3RhY2sucHVzaCB7IGxlZnRfdG90YWwgPSAxOyBxdWV1ZV9lbGVtID0gc3lzX3RvayB9IHNjYW5fc3RhY2s7XG4gIGxldCBwcF9tYXJnaW4gPSA3OFxuICBhbmQgcHBfbWluX3NwYWNlX2xlZnQgPSAxMCBpblxuICB7XG4gICAgcHBfc2Nhbl9zdGFjayA9IHNjYW5fc3RhY2s7XG4gICAgcHBfZm9ybWF0X3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX3Rib3hfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfdGFnX3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX21hcmtfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfbWFyZ2luID0gcHBfbWFyZ2luO1xuICAgIHBwX21pbl9zcGFjZV9sZWZ0ID0gcHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfbWF4X2luZGVudCA9IHBwX21hcmdpbiAtIHBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX3NwYWNlX2xlZnQgPSBwcF9tYXJnaW47XG4gICAgcHBfY3VycmVudF9pbmRlbnQgPSAwO1xuICAgIHBwX2lzX25ld19saW5lID0gdHJ1ZTtcbiAgICBwcF9sZWZ0X3RvdGFsID0gMTtcbiAgICBwcF9yaWdodF90b3RhbCA9IDE7XG4gICAgcHBfY3Vycl9kZXB0aCA9IDE7XG4gICAgcHBfbWF4X2JveGVzID0gbWF4X2ludDtcbiAgICBwcF9lbGxpcHNpcyA9IFwiLlwiO1xuICAgIHBwX291dF9zdHJpbmcgPSBmO1xuICAgIHBwX291dF9mbHVzaCA9IGc7XG4gICAgcHBfb3V0X25ld2xpbmUgPSBoO1xuICAgIHBwX291dF9zcGFjZXMgPSBpO1xuICAgIHBwX291dF9pbmRlbnQgPSBqO1xuICAgIHBwX3ByaW50X3RhZ3MgPSBmYWxzZTtcbiAgICBwcF9tYXJrX3RhZ3MgPSBmYWxzZTtcbiAgICBwcF9tYXJrX29wZW5fdGFnID0gZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnO1xuICAgIHBwX21hcmtfY2xvc2VfdGFnID0gZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZztcbiAgICBwcF9wcmludF9vcGVuX3RhZyA9IGRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWc7XG4gICAgcHBfcHJpbnRfY2xvc2VfdGFnID0gZGVmYXVsdF9wcF9wcmludF9jbG9zZV90YWc7XG4gICAgcHBfcXVldWUgPSBwcF9xdWV1ZTtcbiAgfVxuXG5cbigqIEJ1aWxkIGEgZm9ybWF0dGVyIG91dCBvZiBpdHMgb3V0IGZ1bmN0aW9ucy4gKilcbmxldCBmb3JtYXR0ZXJfb2Zfb3V0X2Z1bmN0aW9ucyBvdXRfZnVucyA9XG4gIHBwX21ha2VfZm9ybWF0dGVyXG4gICAgb3V0X2Z1bnMub3V0X3N0cmluZ1xuICAgIG91dF9mdW5zLm91dF9mbHVzaFxuICAgIG91dF9mdW5zLm91dF9uZXdsaW5lXG4gICAgb3V0X2Z1bnMub3V0X3NwYWNlc1xuICAgIG91dF9mdW5zLm91dF9pbmRlbnRcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdpdGggZGVmYXVsdCBmdW5jdGlvbnMgdG8gb3V0cHV0IHNwYWNlcyxcbiAgaW5kZW50YXRpb24sIGFuZCBuZXcgbGluZXMuICopXG5sZXQgbWFrZV9mb3JtYXR0ZXIgb3V0cHV0IGZsdXNoID1cbiAgbGV0IHBwZiA9IHBwX21ha2VfZm9ybWF0dGVyIG91dHB1dCBmbHVzaCBpZ25vcmUgaWdub3JlIGlnbm9yZSBpblxuICBwcGYucHBfb3V0X25ld2xpbmUgPC0gZGlzcGxheV9uZXdsaW5lIHBwZjtcbiAgcHBmLnBwX291dF9zcGFjZXMgPC0gZGlzcGxheV9ibGFua3MgcHBmO1xuICBwcGYucHBfb3V0X2luZGVudCA8LSBkaXNwbGF5X2luZGVudCBwcGY7XG4gIHBwZlxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd3JpdGluZyB0byBhIGdpdmVuIFtQZXJ2YXNpdmUub3V0X2NoYW5uZWxdIHZhbHVlLiAqKVxubGV0IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBvYyA9XG4gIG1ha2VfZm9ybWF0dGVyIChvdXRwdXRfc3Vic3RyaW5nIG9jKSAoZnVuICgpIC0+IGZsdXNoIG9jKVxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd3JpdGluZyB0byBhIGdpdmVuIFtCdWZmZXIudF0gdmFsdWUuICopXG5sZXQgZm9ybWF0dGVyX29mX2J1ZmZlciBiID1cbiAgbWFrZV9mb3JtYXR0ZXIgKEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIpIGlnbm9yZVxuXG5cbigqIEFsbG9jYXRpbmcgYnVmZmVyIGZvciBwcmV0dHktcHJpbnRpbmcgcHVycG9zZXMuXG4gICBEZWZhdWx0IGJ1ZmZlciBzaXplIGlzIHBwX2J1ZmZlcl9zaXplIG9yIDUxMi5cbiopXG5sZXQgcHBfYnVmZmVyX3NpemUgPSA1MTJcbmxldCBwcF9tYWtlX2J1ZmZlciAoKSA9IEJ1ZmZlci5jcmVhdGUgcHBfYnVmZmVyX3NpemVcblxuKCogVGhlIHN0YW5kYXJkIChzaGFyZWQpIGJ1ZmZlci4gKilcbmxldCBzdGRidWYgPSBwcF9tYWtlX2J1ZmZlciAoKVxuXG4oKiBQcmVkZWZpbmVkIGZvcm1hdHRlcnMgc3RhbmRhcmQgZm9ybWF0dGVyIHRvIHByaW50XG4gICB0byBbU3RkbGliLnN0ZG91dF0sIFtTdGRsaWIuc3RkZXJyXSwgYW5kIHshc3RkYnVmfS4gKilcbmxldCBzdGRfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX291dF9jaGFubmVsIFN0ZGxpYi5zdGRvdXRcbmFuZCBlcnJfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX291dF9jaGFubmVsIFN0ZGxpYi5zdGRlcnJcbmFuZCBzdHJfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX2J1ZmZlciBzdGRidWZcblxuXG4oKiBbZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBidWYgcHBmXSBmbHVzaGVzIGZvcm1hdHRlciBbcHBmXSxcbiAgIHRoZW4gcmV0dXJucyB0aGUgY29udGVudHMgb2YgYnVmZmVyIFtidWZdIHRoYXQgaXMgcmVzZXQuXG4gICBGb3JtYXR0ZXIgW3BwZl0gaXMgc3VwcG9zZWQgdG8gcHJpbnQgdG8gYnVmZmVyIFtidWZdLCBvdGhlcndpc2UgdGhpc1xuICAgZnVuY3Rpb24gaXMgbm90IHJlYWxseSB1c2VmdWwuICopXG5sZXQgZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBidWYgcHBmID1cbiAgcHBfZmx1c2hfcXVldWUgcHBmIGZhbHNlO1xuICBsZXQgcyA9IEJ1ZmZlci5jb250ZW50cyBidWYgaW5cbiAgQnVmZmVyLnJlc2V0IGJ1ZjtcbiAgc1xuXG5cbigqIEZsdXNoIFtzdHJfZm9ybWF0dGVyXSBhbmQgZ2V0IHRoZSBjb250ZW50cyBvZiBbc3RkYnVmXS4gKilcbmxldCBmbHVzaF9zdHJfZm9ybWF0dGVyICgpID0gZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBzdGRidWYgc3RyX2Zvcm1hdHRlclxuXG4oKlxuICBTeW1ib2xpYyBwcmV0dHktcHJpbnRpbmdcbiopXG5cbigqXG4gIFN5bWJvbGljIHByZXR0eS1wcmludGluZyBpcyBwcmV0dHktcHJpbnRpbmcgd2l0aCBubyBsb3cgbGV2ZWwgb3V0cHV0LlxuXG4gIFdoZW4gdXNpbmcgYSBzeW1ib2xpYyBmb3JtYXR0ZXIsIGFsbCByZWd1bGFyIHByZXR0eS1wcmludGluZyBhY3Rpdml0aWVzXG4gIG9jY3VyIGJ1dCBvdXRwdXQgbWF0ZXJpYWwgaXMgc3ltYm9saWMgYW5kIHN0b3JlZCBpbiBhIGJ1ZmZlciBvZiBvdXRwdXRcbiAgaXRlbXMuIEF0IHRoZSBlbmQgb2YgcHJldHR5LXByaW50aW5nLCBmbHVzaGluZyB0aGUgb3V0cHV0IGJ1ZmZlciBhbGxvd3NcbiAgcG9zdC1wcm9jZXNzaW5nIG9mIHN5bWJvbGljIG91dHB1dCBiZWZvcmUgbG93IGxldmVsIG91dHB1dCBvcGVyYXRpb25zLlxuKilcblxudHlwZSBzeW1ib2xpY19vdXRwdXRfaXRlbSA9XG4gIHwgT3V0cHV0X2ZsdXNoXG4gIHwgT3V0cHV0X25ld2xpbmVcbiAgfCBPdXRwdXRfc3RyaW5nIG9mIHN0cmluZ1xuICB8IE91dHB1dF9zcGFjZXMgb2YgaW50XG4gIHwgT3V0cHV0X2luZGVudCBvZiBpbnRcblxudHlwZSBzeW1ib2xpY19vdXRwdXRfYnVmZmVyID0ge1xuICBtdXRhYmxlIHN5bWJvbGljX291dHB1dF9jb250ZW50cyA6IHN5bWJvbGljX291dHB1dF9pdGVtIGxpc3Q7XG59XG5cbmxldCBtYWtlX3N5bWJvbGljX291dHB1dF9idWZmZXIgKCkgPVxuICB7IHN5bWJvbGljX291dHB1dF9jb250ZW50cyA9IFtdIH1cblxubGV0IGNsZWFyX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50cyA8LSBbXVxuXG5sZXQgZ2V0X3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgTGlzdC5yZXYgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50c1xuXG5sZXQgZmx1c2hfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBsZXQgaXRlbXMgPSBnZXRfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgaW5cbiAgY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2I7XG4gIGl0ZW1zXG5cbmxldCBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIGl0ZW0gPVxuICBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDwtIGl0ZW0gOjogc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50c1xuXG5sZXQgZm9ybWF0dGVyX29mX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgbGV0IHN5bWJvbGljX2ZsdXNoIHNvYiAoKSA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiBPdXRwdXRfZmx1c2hcbiAgYW5kIHN5bWJvbGljX25ld2xpbmUgc29iICgpID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIE91dHB1dF9uZXdsaW5lXG4gIGFuZCBzeW1ib2xpY19zdHJpbmcgc29iIHMgaSBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfc3RyaW5nIChTdHJpbmcuc3ViIHMgaSBuKSlcbiAgYW5kIHN5bWJvbGljX3NwYWNlcyBzb2IgbiA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiAoT3V0cHV0X3NwYWNlcyBuKVxuICBhbmQgc3ltYm9saWNfaW5kZW50IHNvYiBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfaW5kZW50IG4pIGluXG5cbiAgbGV0IGYgPSBzeW1ib2xpY19zdHJpbmcgc29iXG4gIGFuZCBnID0gc3ltYm9saWNfZmx1c2ggc29iXG4gIGFuZCBoID0gc3ltYm9saWNfbmV3bGluZSBzb2JcbiAgYW5kIGkgPSBzeW1ib2xpY19zcGFjZXMgc29iXG4gIGFuZCBqID0gc3ltYm9saWNfaW5kZW50IHNvYiBpblxuICBwcF9tYWtlX2Zvcm1hdHRlciBmIGcgaCBpIGpcblxuKCpcblxuICBCYXNpYyBmdW5jdGlvbnMgb24gdGhlICdzdGFuZGFyZCcgZm9ybWF0dGVyXG4gICh0aGUgZm9ybWF0dGVyIHRoYXQgcHJpbnRzIHRvIFtTdGRsaWIuc3Rkb3V0XSkuXG5cbiopXG5cbmxldCBvcGVuX2hib3ggPSBwcF9vcGVuX2hib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fdmJveCA9IHBwX29wZW5fdmJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9odmJveCA9IHBwX29wZW5faHZib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5faG92Ym94ID0gcHBfb3Blbl9ob3Zib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fYm94ID0gcHBfb3Blbl9ib3ggc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX2JveCA9IHBwX2Nsb3NlX2JveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl90YWcgPSBwcF9vcGVuX3RhZyBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2VfdGFnID0gcHBfY2xvc2VfdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX3N0YWcgPSBwcF9vcGVuX3N0YWcgc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX3N0YWcgPSBwcF9jbG9zZV9zdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9hcyA9IHBwX3ByaW50X2FzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9zdHJpbmcgPSBwcF9wcmludF9zdHJpbmcgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2J5dGVzID0gcHBfcHJpbnRfYnl0ZXMgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2ludCA9IHBwX3ByaW50X2ludCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfZmxvYXQgPSBwcF9wcmludF9mbG9hdCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfY2hhciA9IHBwX3ByaW50X2NoYXIgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2Jvb2wgPSBwcF9wcmludF9ib29sIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9icmVhayA9IHBwX3ByaW50X2JyZWFrIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9jdXQgPSBwcF9wcmludF9jdXQgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3NwYWNlID0gcHBfcHJpbnRfc3BhY2Ugc3RkX2Zvcm1hdHRlclxuYW5kIGZvcmNlX25ld2xpbmUgPSBwcF9mb3JjZV9uZXdsaW5lIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9mbHVzaCA9IHBwX3ByaW50X2ZsdXNoIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9uZXdsaW5lID0gcHBfcHJpbnRfbmV3bGluZSBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfaWZfbmV3bGluZSA9IHBwX3ByaW50X2lmX25ld2xpbmUgc3RkX2Zvcm1hdHRlclxuXG5hbmQgb3Blbl90Ym94ID0gcHBfb3Blbl90Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBjbG9zZV90Ym94ID0gcHBfY2xvc2VfdGJveCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfdGJyZWFrID0gcHBfcHJpbnRfdGJyZWFrIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF90YWIgPSBwcF9zZXRfdGFiIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF90YWIgPSBwcF9wcmludF90YWIgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X21hcmdpbiA9IHBwX3NldF9tYXJnaW4gc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXJnaW4gPSBwcF9nZXRfbWFyZ2luIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9tYXhfaW5kZW50ID0gcHBfc2V0X21heF9pbmRlbnQgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXhfaW5kZW50ID0gcHBfZ2V0X21heF9pbmRlbnQgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2dlb21ldHJ5ID0gcHBfc2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCBzYWZlX3NldF9nZW9tZXRyeSA9IHBwX3NhZmVfc2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZ2VvbWV0cnkgPSBwcF9nZXRfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuYW5kIHVwZGF0ZV9nZW9tZXRyeSA9IHBwX3VwZGF0ZV9nZW9tZXRyeSBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfbWF4X2JveGVzID0gcHBfc2V0X21heF9ib3hlcyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21heF9ib3hlcyA9IHBwX2dldF9tYXhfYm94ZXMgc3RkX2Zvcm1hdHRlclxuYW5kIG92ZXJfbWF4X2JveGVzID0gcHBfb3Zlcl9tYXhfYm94ZXMgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2VsbGlwc2lzX3RleHQgPSBwcF9zZXRfZWxsaXBzaXNfdGV4dCBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2VsbGlwc2lzX3RleHQgPSBwcF9nZXRfZWxsaXBzaXNfdGV4dCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9jaGFubmVsID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIHNldF9wcmludF90YWdzID1cbiAgcHBfc2V0X3ByaW50X3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9wcmludF90YWdzID1cbiAgcHBfZ2V0X3ByaW50X3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIHNldF9tYXJrX3RhZ3MgPVxuICBwcF9zZXRfbWFya190YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfbWFya190YWdzID1cbiAgcHBfZ2V0X21hcmtfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgc2V0X3RhZ3MgPVxuICBwcF9zZXRfdGFncyBzdGRfZm9ybWF0dGVyXG5cblxuKCogQ29udmVuaWVuY2UgZnVuY3Rpb25zICopXG5cbigqIFRvIGZvcm1hdCBhIGxpc3QgKilcbmxldCByZWMgcHBfcHJpbnRfbGlzdCA/KHBwX3NlcCA9IHBwX3ByaW50X2N1dCkgcHBfdiBwcGYgPSBmdW5jdGlvblxuICB8IFtdIC0+ICgpXG4gIHwgW3ZdIC0+IHBwX3YgcHBmIHZcbiAgfCB2IDo6IHZzIC0+XG4gICAgcHBfdiBwcGYgdjtcbiAgICBwcF9zZXAgcHBmICgpO1xuICAgIHBwX3ByaW50X2xpc3QgfnBwX3NlcCBwcF92IHBwZiB2c1xuXG4oKiBUbyBmb3JtYXQgYSBzZXF1ZW5jZSAqKVxubGV0IHJlYyBwcF9wcmludF9zZXFfaW4gfnBwX3NlcCBwcF92IHBwZiBzZXEgPVxuICBtYXRjaCBzZXEgKCkgd2l0aFxuICB8IFNlcS5OaWwgLT4gKClcbiAgfCBTZXEuQ29ucyAodiwgc2VxKSAtPlxuICAgIHBwX3NlcCBwcGYgKCk7XG4gICAgcHBfdiBwcGYgdjtcbiAgICBwcF9wcmludF9zZXFfaW4gfnBwX3NlcCBwcF92IHBwZiBzZXFcblxubGV0IHBwX3ByaW50X3NlcSA/KHBwX3NlcCA9IHBwX3ByaW50X2N1dCkgcHBfdiBwcGYgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgfCBTZXEuTmlsIC0+ICgpXG4gIHwgU2VxLkNvbnMgKHYsIHNlcSkgLT5cbiAgICBwcF92IHBwZiB2O1xuICAgIHBwX3ByaW50X3NlcV9pbiB+cHBfc2VwIHBwX3YgcHBmIHNlcVxuXG4oKiBUbyBmb3JtYXQgZnJlZS1mbG93aW5nIHRleHQgKilcbmxldCBwcF9wcmludF90ZXh0IHBwZiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgbGVmdCA9IHJlZiAwIGluXG4gIGxldCByaWdodCA9IHJlZiAwIGluXG4gIGxldCBmbHVzaCAoKSA9XG4gICAgcHBfcHJpbnRfc3RyaW5nIHBwZiAoU3RyaW5nLnN1YiBzICFsZWZ0ICghcmlnaHQgLSAhbGVmdCkpO1xuICAgIGluY3IgcmlnaHQ7IGxlZnQgOj0gIXJpZ2h0O1xuICBpblxuICB3aGlsZSAoIXJpZ2h0IDw+IGxlbikgZG9cbiAgICBtYXRjaCBzLlshcmlnaHRdIHdpdGhcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgZmx1c2ggKCk7XG4gICAgICAgIHBwX2ZvcmNlX25ld2xpbmUgcHBmICgpXG4gICAgICB8ICcgJyAtPlxuICAgICAgICBmbHVzaCAoKTsgcHBfcHJpbnRfc3BhY2UgcHBmICgpXG4gICAgICAoKiB0aGVyZSBpcyBubyBzcGVjaWZpYyBzdXBwb3J0IGZvciAnXFx0J1xuICAgICAgICAgYXMgaXQgaXMgdW5jbGVhciB3aGF0IGEgcmlnaHQgc2VtYW50aWNzIHdvdWxkIGJlICopXG4gICAgICB8IF8gLT4gaW5jciByaWdodFxuICBkb25lO1xuICBpZiAhbGVmdCA8PiBsZW4gdGhlbiBmbHVzaCAoKVxuXG5sZXQgcHBfcHJpbnRfb3B0aW9uID8obm9uZSA9IGZ1biBfICgpIC0+ICgpKSBwcF92IHBwZiA9IGZ1bmN0aW9uXG58IE5vbmUgLT4gbm9uZSBwcGYgKClcbnwgU29tZSB2IC0+IHBwX3YgcHBmIHZcblxubGV0IHBwX3ByaW50X3Jlc3VsdCB+b2sgfmVycm9yIHBwZiA9IGZ1bmN0aW9uXG58IE9rIHYgLT4gb2sgcHBmIHZcbnwgRXJyb3IgZSAtPiBlcnJvciBwcGYgZVxuXG5sZXQgcHBfcHJpbnRfZWl0aGVyIH5sZWZ0IH5yaWdodCBwcGYgPSBmdW5jdGlvblxufCBFaXRoZXIuTGVmdCBsIC0+IGxlZnQgcHBmIGxcbnwgRWl0aGVyLlJpZ2h0IHIgLT4gcmlnaHQgcHBmIHJcblxuICgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxubGV0IGNvbXB1dGVfdGFnIG91dHB1dCB0YWdfYWNjID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTYgaW5cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIG91dHB1dCBwcGYgdGFnX2FjYztcbiAgcHBfcHJpbnRfZmx1c2ggcHBmICgpO1xuICBsZXQgbGVuID0gQnVmZmVyLmxlbmd0aCBidWYgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIEJ1ZmZlci5jb250ZW50cyBidWZcbiAgZWxzZSBCdWZmZXIuc3ViIGJ1ZiAxIChsZW4gLSAyKVxuXG4gKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgRGVmaW5pbmcgY29udGludWF0aW9ucyB0byBiZSBwYXNzZWQgYXMgYXJndW1lbnRzIG9mXG4gIENhbWxpbnRlcm5hbEZvcm1hdC5tYWtlX3ByaW50Zi5cblxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3Ncbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0XG5cbigqIEludGVycHJldCBhIGZvcm1hdHRpbmcgZW50aXR5IG9uIGEgZm9ybWF0dGVyLiAqKVxubGV0IG91dHB1dF9mb3JtYXR0aW5nX2xpdCBwcGYgZm10aW5nX2xpdCA9IG1hdGNoIGZtdGluZ19saXQgd2l0aFxuICB8IENsb3NlX2JveCAgICAgICAgICAgICAgICAgLT4gcHBfY2xvc2VfYm94IHBwZiAoKVxuICB8IENsb3NlX3RhZyAgICAgICAgICAgICAgICAgLT4gcHBfY2xvc2VfdGFnIHBwZiAoKVxuICB8IEJyZWFrIChfLCB3aWR0aCwgb2Zmc2V0KSAgLT4gcHBfcHJpbnRfYnJlYWsgcHBmIHdpZHRoIG9mZnNldFxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfZmx1c2ggcHBmICgpXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAtPiBwcF9mb3JjZV9uZXdsaW5lIHBwZiAoKVxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgICAgICAgLT4gcHBfcHJpbnRfbmV3bGluZSBwcGYgKClcbiAgfCBNYWdpY19zaXplIChfLCBfKSAgICAgICAgIC0+ICgpXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgICAgICAtPiBwcF9wcmludF9jaGFyIHBwZiAnQCdcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAgICAgIC0+IHBwX3ByaW50X2NoYXIgcHBmICclJ1xuICB8IFNjYW5faW5kaWMgYyAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfY2hhciBwcGYgJ0AnOyBwcF9wcmludF9jaGFyIHBwZiBjXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYW4gb3V0cHV0X3N0cmVhbS4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5vdXRwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIG91dHB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBvdXRwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgb3V0cHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IGYgcHBmO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IG91dHB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5idWZwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2RlbGF5IChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgZikgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoZiAoKSk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBzdHJwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgc3RycHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X3N0cmluZyBwcGYgKGYgKCkpO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IHN0cnB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCpcblxuICBEZWZpbmluZyBbZnByaW50Zl0gYW5kIHZhcmlvdXMgZmxhdm9ycyBvZiBbZnByaW50Zl0uXG5cbiopXG5cbmxldCBrZnByaW50ZiBrIHBwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBwcGYgYWNjOyBrIHBwZilcbiAgICBFbmRfb2ZfYWNjIGZtdFxuXG5hbmQgaWtmcHJpbnRmIGsgcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9pcHJpbnRmIGsgcHBmIGZtdFxuXG5sZXQgaWZwcmludGYgX3BwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBpZ25vcmUgKCkgZm10XG5cbmxldCBmcHJpbnRmIHBwZiA9IGtmcHJpbnRmIGlnbm9yZSBwcGZcbmxldCBwcmludGYgZm10ID0gZnByaW50ZiBzdGRfZm9ybWF0dGVyIGZtdFxubGV0IGVwcmludGYgZm10ID0gZnByaW50ZiBlcnJfZm9ybWF0dGVyIGZtdFxuXG5sZXQga2RwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gayAoZnVuIHBwZiAtPiBvdXRwdXRfYWNjIHBwZiBhY2MpKVxuICAgIEVuZF9vZl9hY2MgZm10XG5cbmxldCBkcHJpbnRmIGZtdCA9IGtkcHJpbnRmIChmdW4gaSAtPiBpKSBmbXRcblxubGV0IGtzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYiA9IHBwX21ha2VfYnVmZmVyICgpIGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID1cbiAgICBzdHJwdXRfYWNjIHBwZiBhY2M7XG4gICAgayAoZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBiIHBwZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbmxldCBzcHJpbnRmIGZtdCA9IGtzcHJpbnRmIGlkIGZtdFxuXG5sZXQga2FzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYiA9IHBwX21ha2VfYnVmZmVyICgpIGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID1cbiAgICBvdXRwdXRfYWNjIHBwZiBhY2M7XG4gICAgayAoZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBiIHBwZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbmxldCBhc3ByaW50ZiBmbXQgPSBrYXNwcmludGYgaWQgZm10XG5cbigqIEZsdXNoaW5nIHN0YW5kYXJkIGZvcm1hdHRlcnMgYXQgZW5kIG9mIGV4ZWN1dGlvbi4gKilcblxubGV0IGZsdXNoX3N0YW5kYXJkX2Zvcm1hdHRlcnMgKCkgPVxuICBwcF9wcmludF9mbHVzaCBzdGRfZm9ybWF0dGVyICgpO1xuICBwcF9wcmludF9mbHVzaCBlcnJfZm9ybWF0dGVyICgpXG5cbmxldCAoKSA9IGF0X2V4aXQgZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVyc1xuXG4oKlxuXG4gIERlcHJlY2F0ZWQgc3R1ZmYuXG5cbiopXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBwcF9zZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlXG4gICAgfm91dDpmIH5mbHVzaDpnIH5uZXdsaW5lOmggfnNwYWNlczppID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlIGYgZztcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gaDtcbiAgc3RhdGUucHBfb3V0X3NwYWNlcyA8LSBpXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBwcF9nZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlICgpID1cbiAgKHN0YXRlLnBwX291dF9zdHJpbmcsIHN0YXRlLnBwX291dF9mbHVzaCxcbiAgIHN0YXRlLnBwX291dF9uZXdsaW5lLCBzdGF0ZS5wcF9vdXRfc3BhY2VzKVxuXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBzZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IGdldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IGdldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9nZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuXG4oKiBEZXByZWNhdGVkIDogZXJyb3IgcHJvbmUgZnVuY3Rpb24sIGRvIG5vdCB1c2UgaXQuXG4gICBUaGlzIGZ1bmN0aW9uIGlzIG5laXRoZXIgY29tcG9zaXRpb25hbCBub3IgaW5jcmVtZW50YWwsIHNpbmNlIGl0IGZsdXNoZXNcbiAgIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBhdCBlYWNoIGNhbGwuXG4gICBUbyBnZXQgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSwgZGVmaW5lIGEgZm9ybWF0dGVyIG9mIHlvdXIgb3duIHdyaXRpbmcgdG9cbiAgIHRoZSBidWZmZXIgYXJndW1lbnQsIGFzIGluXG4gICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiXG4gICB0aGVuIHVzZSB7IWZwcmludGYgcHBmfSBhcyB1c3VhbC4gKilcbmxldCBicHJpbnRmIGIgKEZvcm1hdCAoZm10LCBfKSA6ICgnYSwgZm9ybWF0dGVyLCB1bml0KSBmb3JtYXQpID1cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBsZXQgayBhY2MgPSBvdXRwdXRfYWNjIHBwZiBhY2M7IHBwX2ZsdXNoX3F1ZXVlIHBwZiBmYWxzZSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cblxuKCogRGVwcmVjYXRlZCA6IGFsaWFzIGZvciBrc3ByaW50Zi4gKilcbmxldCBrcHJpbnRmID0ga3NwcmludGZcblxuXG5cbigqIERlcHJlY2F0ZWQgdGFnIGZ1bmN0aW9ucyAqKVxuXG50eXBlIGZvcm1hdHRlcl90YWdfZnVuY3Rpb25zID0ge1xuICBtYXJrX29wZW5fdGFnIDogdGFnIC0+IHN0cmluZztcbiAgbWFya19jbG9zZV90YWcgOiB0YWcgLT4gc3RyaW5nO1xuICBwcmludF9vcGVuX3RhZyA6IHRhZyAtPiB1bml0O1xuICBwcmludF9jbG9zZV90YWcgOiB0YWcgLT4gdW5pdDtcbn1cblxuXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0YXRlIHtcbiAgICAgbWFya19vcGVuX3RhZyA9IG1vdDtcbiAgICAgbWFya19jbG9zZV90YWcgPSBtY3Q7XG4gICAgIHByaW50X29wZW5fdGFnID0gcG90O1xuICAgICBwcmludF9jbG9zZV90YWcgPSBwY3Q7XG4gICB9ID1cbiAgbGV0IHN0cmluZ2lmeSBmIGUgPSBmdW5jdGlvbiBTdHJpbmdfdGFnIHMgLT4gZiBzIHwgXyAtPiBlIGluXG4gIHN0YXRlLnBwX21hcmtfb3Blbl90YWcgPC0gc3RyaW5naWZ5IG1vdCBcIlwiO1xuICBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyA8LSBzdHJpbmdpZnkgbWN0IFwiXCI7XG4gIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIDwtIHN0cmluZ2lmeSBwb3QgKCk7XG4gIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyA8LSBzdHJpbmdpZnkgcGN0ICgpXG5cbmxldCBwcF9nZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgZm10ICgpID1cbiAgbGV0IGZ1bnMgPSBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIGZtdCAoKSBpblxuICBsZXQgbWFya19vcGVuX3RhZyBzID0gZnVucy5tYXJrX29wZW5fc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICBsZXQgbWFya19jbG9zZV90YWcgcyA9IGZ1bnMubWFya19jbG9zZV9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIGxldCBwcmludF9vcGVuX3RhZyBzID0gZnVucy5wcmludF9vcGVuX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAgbGV0IHByaW50X2Nsb3NlX3RhZyBzID0gZnVucy5wcmludF9jbG9zZV9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIHttYXJrX29wZW5fdGFnOyBtYXJrX2Nsb3NlX3RhZzsgcHJpbnRfb3Blbl90YWc7IHByaW50X2Nsb3NlX3RhZ31cblxubGV0IHNldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUmVnaXN0ZXJpbmcgT0NhbWwgdmFsdWVzIHdpdGggdGhlIEMgcnVudGltZSBmb3IgbGF0ZXIgY2FsbGJhY2tzICopXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+IE9iai50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0IHJlZ2lzdGVyIG5hbWUgdiA9XG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIG5hbWUgKE9iai5yZXByIHYpXG5cbmxldCByZWdpc3Rlcl9leGNlcHRpb24gbmFtZSAoZXhuIDogZXhuKSA9XG4gIGxldCBleG4gPSBPYmoucmVwciBleG4gaW5cbiAgbGV0IHNsb3QgPSBpZiBPYmoudGFnIGV4biA9IE9iai5vYmplY3RfdGFnIHRoZW4gZXhuIGVsc2UgT2JqLmZpZWxkIGV4biAwIGluXG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIG5hbWUgc2xvdFxuIiwibW9kdWxlIEpzID0gc3RydWN0XG4gIHR5cGUgdFxuXG4gIHR5cGUgJ2EganNfYXJyYXkgPSB0XG5cbiAgdHlwZSAoJ2EsICdiKSBtZXRoX2NhbGxiYWNrID0gdFxuXG4gIGV4dGVybmFsIHN0cmluZyA6IHN0cmluZyAtPiB0ID0gXCJjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgdG9fc3RyaW5nIDogdCAtPiBzdHJpbmcgPSBcImNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXCJcblxuICBleHRlcm5hbCBieXRlc3RyaW5nIDogc3RyaW5nIC0+IHQgPSBcImNhbWxfanNieXRlc19vZl9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIHRvX2J5dGVzdHJpbmcgOiB0IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfanNieXRlc1wiXG5cbiAgZXh0ZXJuYWwgYm9vbCA6IGJvb2wgLT4gdCA9IFwiY2FtbF9qc19mcm9tX2Jvb2xcIlxuXG4gIGV4dGVybmFsIHRvX2Jvb2wgOiB0IC0+IGJvb2wgPSBcImNhbWxfanNfdG9fYm9vbFwiXG5cbiAgZXh0ZXJuYWwgYXJyYXkgOiAnYSBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fYXJyYXlcIlxuXG4gIGV4dGVybmFsIHRvX2FycmF5IDogdCAtPiAnYSBhcnJheSA9IFwiY2FtbF9qc190b19hcnJheVwiXG5cbiAgZXh0ZXJuYWwgbnVtYmVyX29mX2Zsb2F0IDogZmxvYXQgLT4gdCA9IFwiY2FtbF9qc19mcm9tX2Zsb2F0XCJcblxuICBleHRlcm5hbCBmbG9hdF9vZl9udW1iZXIgOiB0IC0+IGZsb2F0ID0gXCJjYW1sX2pzX3RvX2Zsb2F0XCJcblxuICBleHRlcm5hbCBudW1iZXJfb2ZfaW50MzIgOiBpbnQzMiAtPiB0ID0gXCJjYW1sX2pzX2Zyb21faW50MzJcIlxuXG4gIGV4dGVybmFsIGludDMyX29mX251bWJlciA6IHQgLT4gaW50MzIgPSBcImNhbWxfanNfdG9faW50MzJcIlxuXG4gIGV4dGVybmFsIG51bWJlcl9vZl9uYXRpdmVpbnQgOiBuYXRpdmVpbnQgLT4gdCA9IFwiY2FtbF9qc19mcm9tX25hdGl2ZWludFwiXG5cbiAgZXh0ZXJuYWwgbmF0aXZlaW50X29mX251bWJlciA6IHQgLT4gbmF0aXZlaW50ID0gXCJjYW1sX2pzX3RvX25hdGl2ZWludFwiXG5cbiAgZXh0ZXJuYWwgdHlwZW9mIDogdCAtPiB0ID0gXCJjYW1sX2pzX3R5cGVvZlwiXG5cbiAgZXh0ZXJuYWwgaW5zdGFuY2VvZiA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2pzX2luc3RhbmNlb2ZcIlxuXG4gIGV4dGVybmFsIGRlYnVnZ2VyIDogdW5pdCAtPiB1bml0ID0gXCJkZWJ1Z2dlclwiXG5cbiAgZXh0ZXJuYWwgZ2V0IDogdCAtPiB0IC0+IHQgPSBcImNhbWxfanNfZ2V0XCJcblxuICBleHRlcm5hbCBzZXQgOiB0IC0+IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2pzX3NldFwiXG5cbiAgZXh0ZXJuYWwgZGVsZXRlIDogdCAtPiB0IC0+IHVuaXQgPSBcImNhbWxfanNfZGVsZXRlXCJcblxuICBleHRlcm5hbCBjYWxsIDogdCAtPiB0IC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19jYWxsXCJcblxuICBleHRlcm5hbCBmdW5fY2FsbCA6IHQgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX2Z1bl9jYWxsXCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGwgOiB0IC0+IHN0cmluZyAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfbWV0aF9jYWxsXCJcblxuICBleHRlcm5hbCBuZXdfb2JqIDogdCAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfbmV3XCJcblxuICBleHRlcm5hbCBuZXdfb2JqX2FyciA6IHQgLT4gdCBqc19hcnJheSAtPiB0ID0gXCJjYW1sX29qc19uZXdfYXJyXCJcblxuICBleHRlcm5hbCBvYmogOiAoc3RyaW5nICogdCkgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19vYmplY3RcIlxuXG4gIGV4dGVybmFsIGVxdWFscyA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2pzX2VxdWFsc1wiXG5cbiAgZXh0ZXJuYWwgc3RyaWN0X2VxdWFscyA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2pzX3N0cmljdF9lcXVhbHNcIlxuXG4gIGV4dGVybmFsIHB1cmVfZXhwciA6ICh1bml0IC0+ICdhKSAtPiAnYSA9IFwiY2FtbF9qc19wdXJlX2V4cHJcIlxuXG4gIGV4dGVybmFsIGV2YWxfc3RyaW5nIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX2V2YWxfc3RyaW5nXCJcblxuICBleHRlcm5hbCBqc19leHByIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX2V4cHJcIlxuXG4gIGV4dGVybmFsIHB1cmVfanNfZXhwciA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9wdXJlX2pzX2V4cHJcIlxuXG4gIGV4dGVybmFsIGNhbGxiYWNrIDogKCdiIC0+ICdhKSAtPiAoJ2IsICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmVcIlxuXG4gIGV4dGVybmFsIGNhbGxiYWNrX3dpdGhfYXJndW1lbnRzIDpcbiAgICAodCBqc19hcnJheSAtPiAnYikgLT4gKCdjLCB0IGpzX2FycmF5IC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja19hcmd1bWVudHNcIlxuXG4gIGV4dGVybmFsIGNhbGxiYWNrX3dpdGhfYXJpdHkgOiBpbnQgLT4gKCdhIC0+ICdiKSAtPiAoJ2MsICdhIC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja19zdHJpY3RcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbGJhY2sgOiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlXCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrX3dpdGhfYXJpdHkgOiBpbnQgLT4gKCdiIC0+ICdhKSAtPiAoJ2IsICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdFwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFja193aXRoX2FyZ3VtZW50cyA6XG4gICAgKCdiIC0+IHQganNfYXJyYXkgLT4gJ2EpIC0+ICgnYiwgdCBqc19hcnJheSAtPiAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHNcIlxuXG4gIGV4dGVybmFsIHdyYXBfY2FsbGJhY2sgOiAoJ2EgLT4gJ2IpIC0+ICgnYywgJ2EgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrXCJcblxuICBleHRlcm5hbCB3cmFwX21ldGhfY2FsbGJhY2sgOiAoJ2EgLT4gJ2IpIC0+ICgnYSwgJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tcIlxuZW5kXG5cbm1vZHVsZSBTeXMgPSBzdHJ1Y3RcbiAgdHlwZSAnYSBjYWxsYmFjayA9ICdhXG5cbiAgZXh0ZXJuYWwgY3JlYXRlX2ZpbGUgOiBuYW1lOnN0cmluZyAtPiBjb250ZW50OnN0cmluZyAtPiB1bml0ID0gXCJjYW1sX2NyZWF0ZV9maWxlXCJcblxuICBleHRlcm5hbCByZWFkX2ZpbGUgOiBuYW1lOnN0cmluZyAtPiBzdHJpbmcgPSBcImNhbWxfcmVhZF9maWxlX2NvbnRlbnRcIlxuXG4gIGV4dGVybmFsIHNldF9jaGFubmVsX291dHB1dCcgOiBvdXRfY2hhbm5lbCAtPiAoanNfc3RyaW5nOkpzLnQgLT4gdW5pdCkgY2FsbGJhY2sgLT4gdW5pdFxuICAgID0gXCJjYW1sX21sX3NldF9jaGFubmVsX291dHB1dFwiXG5cbiAgZXh0ZXJuYWwgc2V0X2NoYW5uZWxfaW5wdXQnIDogaW5fY2hhbm5lbCAtPiAodW5pdCAtPiBzdHJpbmcpIGNhbGxiYWNrIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGxcIlxuXG4gIGV4dGVybmFsIG1vdW50X3BvaW50IDogdW5pdCAtPiBzdHJpbmcgbGlzdCA9IFwiY2FtbF9saXN0X21vdW50X3BvaW50XCJcblxuICBleHRlcm5hbCBtb3VudF9hdXRvbG9hZCA6IHN0cmluZyAtPiAoc3RyaW5nIC0+IHN0cmluZyAtPiBzdHJpbmcgb3B0aW9uKSBjYWxsYmFjayAtPiB1bml0XG4gICAgPSBcImNhbWxfbW91bnRfYXV0b2xvYWRcIlxuXG4gIGV4dGVybmFsIHVubW91bnQgOiBzdHJpbmcgLT4gdW5pdCA9IFwiY2FtbF91bm1vdW50XCJcblxuICBtb2R1bGUgQ29uZmlnID0gc3RydWN0XG4gICAgZXh0ZXJuYWwgdXNlX2pzX3N0cmluZyA6IHVuaXQgLT4gYm9vbCA9IFwiY2FtbF9qc29vX2ZsYWdzX3VzZV9qc19zdHJpbmdcIlxuXG4gICAgZXh0ZXJuYWwgZWZmZWN0cyA6IHVuaXQgLT4gYm9vbCA9IFwiY2FtbF9qc29vX2ZsYWdzX2VmZmVjdHNcIlxuICBlbmRcblxuICBsZXQgdmVyc2lvbiA9IFJ1bnRpbWVfdmVyc2lvbi5zXG5cbiAgbGV0IGdpdF92ZXJzaW9uID0gUnVudGltZV92ZXJzaW9uLmdpdF92ZXJzaW9uXG5lbmRcblxubW9kdWxlIEVycm9yIDogc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCByYWlzZV8gOiB0IC0+ICdhXG5cbiAgdmFsIGF0dGFjaF9qc19iYWNrdHJhY2UgOiBleG4gLT4gZm9yY2U6Ym9vbCAtPiBleG5cbiAgKCoqIEF0dGFjaCBhIEphdmFzU2NyaXB0IGVycm9yIHRvIGFuIE9DYW1sIGV4Y2VwdGlvbi4gIGlmIFtmb3JjZSA9IGZhbHNlXSBhbmQgYVxuICAgIEphdmFzU2NyaXB0IGVycm9yIGlzIGFscmVhZHkgYXR0YWNoZWQsIGl0IHdpbGwgZG8gbm90aGluZy4gVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgdG9cbiAgICBzdG9yZSBhbmQgcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgSmF2YVNjcmlwdCBzdGFjayB0cmFjZXMuXG5cbiAgICBBdHRhY2hpbmcgSmF2YXNTY3JpcHQgZXJyb3JzIHdpbGwgaGFwcGVuIGF1dG9tYXRpY2FsbHkgd2hlbiBjb21waWxpbmcgd2l0aFxuICAgIFstLWVuYWJsZSB3aXRoLWpzLWVycm9yXS4gKilcblxuICB2YWwgb2ZfZXhuIDogZXhuIC0+IHQgb3B0aW9uXG4gICgqKiBFeHRyYWN0IGEgSmF2YVNjcmlwdCBlcnJvciBhdHRhY2hlZCB0byBhbiBPQ2FtbCBleGNlcHRpb24sIGlmIGFueS4gIFRoaXMgaXMgdXNlZnVsIHRvXG4gICAgICBpbnNwZWN0IGFuIGV2ZW50dWFsIHN0YWNrIHN0cmFjZSwgZXNwZWNpYWxseSB3aGVuIHNvdXJjZW1hcCBpcyBlbmFibGVkLiAqKVxuXG4gIGV4Y2VwdGlvbiBFeG4gb2YgdFxuICAoKiogVGhlIFtFcnJvcl0gZXhjZXB0aW9uIHdyYXAgamF2YXNjcmlwdCBleGNlcHRpb25zIHdoZW4gY2F1Z2h0IGJ5IE9DYW1sIGNvZGUuXG4gICAgICBJbiBjYXNlIHRoZSBqYXZhc2NyaXB0IGV4Y2VwdGlvbiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgamF2YXNjcmlwdCBbRXJyb3JdLFxuICAgICAgaXQgd2lsbCBiZSBzZXJpYWxpemVkIGFuZCB3cmFwcGVkIGludG8gYSBbRmFpbHVyZV0gZXhjZXB0aW9uLlxuICAqKVxuZW5kID0gc3RydWN0XG4gIHR5cGUgdFxuXG4gIGV4Y2VwdGlvbiBFeG4gb2YgdFxuXG4gIGxldCBfID0gQ2FsbGJhY2sucmVnaXN0ZXJfZXhjZXB0aW9uIFwianNFcnJvclwiIChFeG4gKE9iai5tYWdpYyBbfHxdKSlcblxuICBsZXQgcmFpc2VfIDogdCAtPiAnYSA9IEpzLmpzX2V4cHIgXCIoZnVuY3Rpb24gKGV4bikgeyB0aHJvdyBleG4gfSlcIlxuXG4gIGV4dGVybmFsIG9mX2V4biA6IGV4biAtPiB0IG9wdGlvbiA9IFwiY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uXCJcblxuICBleHRlcm5hbCBhdHRhY2hfanNfYmFja3RyYWNlIDogZXhuIC0+IGZvcmNlOmJvb2wgLT4gZXhuID0gXCJjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVwiXG5lbmRcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzItNjBcIl1cblxubW9kdWxlIEZvcl9jb21wYXRpYmlsaXR5X29ubHkgPSBzdHJ1Y3RcbiAgKCogQWRkIHByaW1pdGl2ZXMgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4gRXhpc3RpbmcgdXNlcnMgbWlnaHRcbiAgICAgZGVwZW5kIG9uIGl0IChlLmcuIGdlbl9qc19hcGkpLCB3ZSBkb250IHdhbnQgdGhlIG9jYW1sIGNvbXBpbGVyXG4gICAgIHRvIGNvbXBsYWluIGFib3V0IHRoZXNlcyBtaXNzaW5nIHByaW1pdGl2ZXMuICopXG5cbiAgZXh0ZXJuYWwgY2FtbF9qc19mcm9tX3N0cmluZyA6IHN0cmluZyAtPiBKcy50ID0gXCJjYW1sX2pzX2Zyb21fc3RyaW5nXCJcblxuICBleHRlcm5hbCBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nIDogSnMudCAtPiBzdHJpbmcgPSBcImNhbWxfanNfdG9fYnl0ZV9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfanNfdG9fc3RyaW5nIDogSnMudCAtPiBzdHJpbmcgPSBcImNhbWxfanNfdG9fc3RyaW5nXCJcblxuICBleHRlcm5hbCBjYW1sX2xpc3Rfb2ZfanNfYXJyYXkgOiAnYSBKcy5qc19hcnJheSAtPiAnYSBsaXN0ID0gXCJjYW1sX2xpc3Rfb2ZfanNfYXJyYXlcIlxuXG4gIGV4dGVybmFsIGNhbWxfbGlzdF90b19qc19hcnJheSA6ICdhIGxpc3QgLT4gJ2EgSnMuanNfYXJyYXkgPSBcImNhbWxfbGlzdF90b19qc19hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdmFyaWFibGUgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfdmFyXCJcbmVuZFxuXG5tb2R1bGUgVHlwZWRfYXJyYXkgPSBzdHJ1Y3RcbiAgdHlwZSAoJ2EsICdiKSB0eXBlZEFycmF5ID0gSnMudFxuXG4gIHR5cGUgYXJyYXlCdWZmZXIgPSBKcy50XG5cbiAgdHlwZSB1aW50OEFycmF5ID0gSnMudFxuXG4gIGV4dGVybmFsIGtpbmQgOiAoJ2EsICdiKSB0eXBlZEFycmF5IC0+ICgnYSwgJ2IpIEJpZ2FycmF5LmtpbmRcbiAgICA9IFwiY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5XCJcblxuICBleHRlcm5hbCBmcm9tX2dlbmFycmF5IDpcbiAgICAoJ2EsICdiLCBCaWdhcnJheS5jX2xheW91dCkgQmlnYXJyYXkuR2VuYXJyYXkudCAtPiAoJ2EsICdiKSB0eXBlZEFycmF5XG4gICAgPSBcImNhbWxfYmFfdG9fdHlwZWRfYXJyYXlcIlxuXG4gIGV4dGVybmFsIHRvX2dlbmFycmF5IDpcbiAgICAoJ2EsICdiKSB0eXBlZEFycmF5IC0+ICgnYSwgJ2IsIEJpZ2FycmF5LmNfbGF5b3V0KSBCaWdhcnJheS5HZW5hcnJheS50XG4gICAgPSBcImNhbWxfYmFfZnJvbV90eXBlZF9hcnJheVwiXG5cbiAgbW9kdWxlIEJpZ3N0cmluZyA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IChjaGFyLCBCaWdhcnJheS5pbnQ4X3Vuc2lnbmVkX2VsdCwgQmlnYXJyYXkuY19sYXlvdXQpIEJpZ2FycmF5LkFycmF5MS50XG5cbiAgICBleHRlcm5hbCB0b19hcnJheUJ1ZmZlciA6IHQgLT4gYXJyYXlCdWZmZXIgPSBcImJpZ3N0cmluZ190b19hcnJheV9idWZmZXJcIlxuXG4gICAgZXh0ZXJuYWwgdG9fdWludDhBcnJheSA6IHQgLT4gdWludDhBcnJheSA9IFwiYmlnc3RyaW5nX3RvX3R5cGVkX2FycmF5XCJcblxuICAgIGV4dGVybmFsIG9mX2FycmF5QnVmZmVyIDogYXJyYXlCdWZmZXIgLT4gdCA9IFwiYmlnc3RyaW5nX29mX2FycmF5X2J1ZmZlclwiXG5cbiAgICBleHRlcm5hbCBvZl91aW50OEFycmF5IDogdWludDhBcnJheSAtPiB0ID0gXCJiaWdzdHJpbmdfb2ZfdHlwZWRfYXJyYXlcIlxuICBlbmRcblxuICBleHRlcm5hbCBvZl91aW50OEFycmF5IDogdWludDhBcnJheSAtPiBzdHJpbmcgPSBcImNhbWxfc3RyaW5nX29mX2FycmF5XCJcbmVuZFxuXG5tb2R1bGUgSW50NjQgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgY3JlYXRlX2ludDY0X2xvX21pX2hpIDogaW50IC0+IGludCAtPiBpbnQgLT4gSW50NjQudFxuICAgID0gXCJjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaVwiXG5lbmRcbiIsIm9wZW4gQnJyXG5cbm1vZHVsZSBLZXlfcGF0aCA9IHN0cnVjdFxuICB0eXBlIHQgPSBJZCBvZiBzdHJpbmcgfCBTIG9mIHQgYXJyYXlcblxuICBsZXQgcmVjIHRvX2p2ID0gZnVuY3Rpb25cbiAgICB8IElkIHAgLT4gSnYub2Zfc3RyaW5nIHBcbiAgICB8IFMga2V5cyAtPiBKdi5vZl9hcnJheSB0b19qdiBrZXlzXG5lbmRcblxubW9kdWxlIEtleV9yYW5nZSA9IHN0cnVjdFxuICB0eXBlIHQgPSBKdi50XG5cbiAgZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+ICdhID0gXCIlaWRlbnRpdHlcIlxuXG4gIGxldCBib3VuZCB+bG93ZXIgfnVwcGVyID8obG93ZXJfb3BlbiA9IGZhbHNlKSA/KHVwcGVyX29wZW4gPSBmYWxzZSkgKCkgPVxuICAgIGxldCBjID0gSnYuZ2V0IEp2Lmdsb2JhbCBcIklEQktleVJhbmdlXCIgaW5cbiAgICBKdi5jYWxsIGMgXCJib3VuZFwiXG4gICAgICBbfCBsb3dlcjsgdXBwZXI7IEp2Lm9mX2Jvb2wgbG93ZXJfb3BlbjsgSnYub2ZfYm9vbCB1cHBlcl9vcGVuIHxdXG5lbmRcblxubW9kdWxlIEV2ZW50cyA9IHN0cnVjdFxuICBtb2R1bGUgVmVyc2lvbl9jaGFuZ2UgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBKdi50XG5cbiAgICBsZXQgb2xkX3ZlcnNpb24gdCA9IEp2LnRvX2ludCBAQCBKdi5nZXQgdCBcIm9sZFZlcnNpb25cIlxuICAgIGxldCBuZXdfdmVyc2lvbiB0ID0gSnYudG9faW50IEBAIEp2LmdldCB0IFwibmV3VmVyc2lvblwiXG4gIGVuZFxuXG4gIGxldCB1cGdyYWRlX25lZWRlZCA6IFZlcnNpb25fY2hhbmdlLnQgRXYudHlwZScgPVxuICAgIEV2LlR5cGUuY3JlYXRlIChKc3RyLnYgXCJ1cGdyYWRlbmVlZGVkXCIpXG5cbiAgbGV0IHN1Y2Nlc3MgOiBFdi5UeXBlLnZvaWQgRXYudHlwZScgPSBFdi5UeXBlLnZvaWQgKEpzdHIudiBcInN1Y2Nlc3NcIilcbiAgbGV0IGVycm9yIDogRXYuVHlwZS52b2lkIEV2LnR5cGUnID0gRXYuVHlwZS52b2lkIChKc3RyLnYgXCJlcnJvclwiKVxuZW5kXG5cbm1vZHVsZSBSZXF1ZXN0ID0gc3RydWN0XG4gIHR5cGUgJ2EgdCA9IHsganYgOiBKdi50OyBvZl9qdiA6IEp2LnQgLT4gJ2EgfVxuXG4gIGV4dGVybmFsIG9mX2p2IDogSnYudCAtPiAnYSA9IFwiJWlkZW50aXR5XCJcblxuICBsZXQgb2ZfanYgfmYgaiA9IHsganYgPSBvZl9qdiBqOyBvZl9qdiA9IGYgfVxuICBsZXQgZXJyb3IgdCA9IEp2LmdldCB0Lmp2IFwiZXJyb3JcIiB8PiBKdi50b19lcnJvclxuXG4gIGxldCByZXN1bHQgKHR5cGUgYSkgKHQgOiBhIHQpIDogYSA9XG4gICAgKCogdG9kbyB0aGlzIGlzIHdyb25nICopXG4gICAgSnYuZ2V0IHQuanYgXCJyZXN1bHRcIiB8PiB0Lm9mX2p2XG5cbiAgbGV0IG9uX3N1Y2Nlc3MgKHR5cGUgYSkgfihmIDogRXYuVHlwZS52b2lkIEV2LnQgLT4gYSB0IC0+IHVuaXQpICh0IDogYSB0KSA9XG4gICAgbGV0IGYgZXYgPSBmIGV2IHQgaW5cbiAgICBpZ25vcmUgQEAgRXYubGlzdGVuIEV2ZW50cy5zdWNjZXNzIGYgKEV2LnRhcmdldF9vZl9qdiB0Lmp2KTtcbiAgICB0XG5cbiAgbGV0IG9uX2Vycm9yICh0eXBlIGEpIH4oZiA6IEV2LlR5cGUudm9pZCBFdi50IC0+IGEgdCAtPiB1bml0KSAodCA6IGEgdCkgPVxuICAgIGxldCBmIGV2ID0gZiBldiB0IGluXG4gICAgaWdub3JlIEBAIEV2Lmxpc3RlbiBFdmVudHMuZXJyb3IgZiAoRXYudGFyZ2V0X29mX2p2IHQuanYpO1xuICAgIHRcblxuICBsZXQgZnV0IHQgPVxuICAgIGxldCByZXN1bHRfZnV0LCBzZXQgPSBGdXQuY3JlYXRlICgpIGluXG4gICAgbGV0IF8gPSBvbl9zdWNjZXNzIH5mOihmdW4gXyB0IC0+IHNldCAoT2sgKHJlc3VsdCB0KSkpIHQgaW5cbiAgICBsZXQgXyA9IG9uX2Vycm9yIH5mOihmdW4gXyB0IC0+IHNldCAoRXJyb3IgKGVycm9yIHQpKSkgdCBpblxuICAgIHJlc3VsdF9mdXRcbmVuZFxuXG5tb2R1bGUgdHlwZSBLZXkgPSBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIHBhdGggOiBLZXlfcGF0aC50XG4gIHZhbCB0b19qdiA6IHQgLT4gSnYudFxuICB2YWwgb2ZfanYgOiBKdi50IC0+IHRcbmVuZFxuXG5tb2R1bGUgdHlwZSBTdG9yZV9jb250ZW50X2ludGYgPSBzaWdcbiAgdHlwZSB0XG5cbiAgbW9kdWxlIEtleSA6IEtleVxuXG4gIHZhbCBuYW1lIDogc3RyaW5nXG4gIHZhbCB0b19qdiA6IHQgLT4gSnYudFxuICB2YWwgb2ZfanYgOiBKdi50IC0+IHRcbiAgdmFsIGdldF9rZXkgOiB0IC0+IEtleS50XG5lbmRcblxubW9kdWxlIERpcmVjdGlvbiA9IHN0cnVjdFxuICB0eXBlIHQgPSBOZXh0IHwgTmV4dF91bmlxdWUgfCBQcmV2IHwgUHJldl91bmlxdWVcblxuICBsZXQgdG9fc3RyaW5nID0gZnVuY3Rpb25cbiAgICB8IE5leHQgLT4gXCJuZXh0XCJcbiAgICB8IE5leHRfdW5pcXVlIC0+IFwibmV4dFVuaXF1ZVwiXG4gICAgfCBQcmV2IC0+IFwicHJldlwiXG4gICAgfCBQcmV2X3VuaXF1ZSAtPiBcInByZXZVbmlxdWVcIlxuXG4gIGxldCBvZl9zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgXCJuZXh0XCIgLT4gTmV4dFxuICAgIHwgXCJuZXh0VW5pcXVlXCIgLT4gTmV4dF91bmlxdWVcbiAgICB8IFwicHJldlwiIC0+IFByZXZcbiAgICB8IFwicHJldlVuaXF1ZVwiIC0+IFByZXZfdW5pcXVlXG4gICAgfCBzIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IHMpXG5cbiAgbGV0IHRvX2p2IGQgPSBKdi5vZl9zdHJpbmcgKHRvX3N0cmluZyBkKVxuICBsZXQgb2ZfanYgaiA9IG9mX3N0cmluZyAoSnYudG9fc3RyaW5nIGopXG5lbmRcblxubW9kdWxlIENvbnRlbnRfYWNjZXNzIChDb250ZW50IDogU3RvcmVfY29udGVudF9pbnRmKSAoS2V5IDogS2V5KSA9IHN0cnVjdFxuICB0eXBlIHQgPSBKdi50XG5cbiAgZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+IHQgPSBcIiVpZGVudGl0eVwiXG5cbiAgbGV0IGNvdW50ICgpIHQgPSBKdi5jYWxsIHQgXCJjb3VudFwiIFt8fF0gfD4gUmVxdWVzdC5vZl9qdiB+ZjpKdi50b19pbnRcblxuICBsZXQgZ2V0IGtleSB0ID1cbiAgICBsZXQgZiBqdiA9IEp2LnRvX29wdGlvbiAoZnVuIGogLT4gQ29udGVudC5vZl9qdiBqKSBqdiBpblxuICAgIEp2LmNhbGwgdCBcImdldFwiIFt8IEtleS50b19qdiBrZXkgfF0gfD4gUmVxdWVzdC5vZl9qdiB+ZlxuXG4gIGxldCBnZXRfYWxsIHQgPVxuICAgIGxldCBmIGp2ID0gSnYudG9fYXJyYXkgKGZ1biBjIC0+IENvbnRlbnQub2ZfanYgYykganYgaW5cbiAgICBKdi5jYWxsIHQgXCJnZXRBbGxcIiBbfHxdIHw+IFJlcXVlc3Qub2ZfanYgfmZcblxuICBsZXQgZ2V0X2FsbF9rZXlzID9xdWVyeSB0ID1cbiAgICBsZXQgYXJncyA9IG1hdGNoIHF1ZXJ5IHdpdGggTm9uZSAtPiBbfHxdIHwgU29tZSBxdWVyeSAtPiBbfCBxdWVyeSB8XSBpblxuICAgIGxldCBmIGp2ID0gSnYudG9fYXJyYXkgKGZ1biBjIC0+IENvbnRlbnQuS2V5Lm9mX2p2IGMpIGp2IGluXG4gICAgSnYuY2FsbCB0IFwiZ2V0QWxsS2V5c1wiIGFyZ3MgfD4gUmVxdWVzdC5vZl9qdiB+ZlxuXG4gIG1vZHVsZSBDdXJzb3IgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBKdi50XG5cbiAgICBleHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxuICAgIGxldCBrZXkgdCA9IEp2LmdldCB0IFwia2V5XCIgfD4gSnYudG9fb3B0aW9uIEtleS5vZl9qdlxuICAgIGxldCBwcmltYXJ5X2tleSB0ID0gSnYuZ2V0IHQgXCJwcmltYXJ5S2V5XCIgfD4gSnYudG9fb3B0aW9uIENvbnRlbnQuS2V5Lm9mX2p2XG5cbiAgICBsZXQgYWR2YW5jZSBjb3VudCB0ID1cbiAgICAgIGlnbm9yZSBAQCBKdi5jYWxsIHQgXCJhZHZhbmNlXCIgW3wgSnYub2ZfaW50IGNvdW50IHxdO1xuICAgICAgdFxuXG4gICAgbGV0IGNvbnRpbnVlID9rZXkgdCA9XG4gICAgICBsZXQgYXJncyA9XG4gICAgICAgIG1hdGNoIGtleSB3aXRoIE5vbmUgLT4gW3x8XSB8IFNvbWUga2V5IC0+IFt8IENvbnRlbnQuS2V5LnRvX2p2IGtleSB8XVxuICAgICAgaW5cbiAgICAgIGlnbm9yZSBAQCBKdi5jYWxsIHQgXCJjb250aW51ZVwiIGFyZ3NcbiAgZW5kXG5cbiAgbW9kdWxlIEN1cnNvcl93aXRoX3ZhbHVlID0gc3RydWN0XG4gICAgaW5jbHVkZSBDdXJzb3JcblxuICAgIGxldCB2YWx1ZSB0ID1cbiAgICAgIGxldCBvZl9qdiBqID0gQ29udGVudC5vZl9qdiBqIGluXG4gICAgICBsZXQgdiA9IEp2LmdldCB0IFwidmFsdWVcIiBpblxuICAgICAgSnYudG9fb3B0aW9uIG9mX2p2IHZcblxuICAgIGxldCBkZWxldGUgdCA9IEp2LmNhbGwgdCBcImRlbGV0ZVwiIFt8fF0gfD4gUmVxdWVzdC5vZl9qdiB+ZjooZnVuIF8gLT4gKCkpXG5cbiAgICBsZXQgdXBkYXRlIHYgdCA9XG4gICAgICBKdi5jYWxsIHQgXCJ1cGRhdGVcIiBbfCBDb250ZW50LnRvX2p2IHYgfF1cbiAgICAgIHw+IFJlcXVlc3Qub2ZfanYgfmY6Q29udGVudC5LZXkub2ZfanZcbiAgZW5kXG5cbiAgbGV0IG9wZW5fY3Vyc29yID9xdWVyeSA/ZGlyZWN0aW9uIHQgOiBDdXJzb3Jfd2l0aF92YWx1ZS50IG9wdGlvbiBSZXF1ZXN0LnQgPVxuICAgIGxldCBkaXJlY3Rpb24gPSBPcHRpb24ubWFwIERpcmVjdGlvbi50b19qdiBkaXJlY3Rpb24gaW5cbiAgICBsZXQgYXJncyA9XG4gICAgICAoKiB0b2RvOiBxdWVyeSAhKilcbiAgICAgIG1hdGNoIChxdWVyeSwgZGlyZWN0aW9uKSB3aXRoXG4gICAgICB8IFNvbWUgcSwgU29tZSBkIC0+IFt8IHE7IGQgfF1cbiAgICAgIHwgTm9uZSwgU29tZSBkIC0+IFt8IEp2Lm51bGw7IGQgfF1cbiAgICAgIHwgU29tZSBxLCBOb25lIC0+IFt8IHEgfF1cbiAgICAgIHwgTm9uZSwgTm9uZSAtPiBbfHxdXG4gICAgaW5cbiAgICBsZXQgZiBqdiA9IEp2LnRvX29wdGlvbiBDdXJzb3Jfd2l0aF92YWx1ZS5vZl9qdiBqdiBpblxuICAgIEp2LmNhbGwgdCBcIm9wZW5DdXJzb3JcIiBhcmdzIHw+IFJlcXVlc3Qub2ZfanYgfmZcblxuICBsZXQgb3Blbl9rZXlfY3Vyc29yID9xdWVyeSA/ZGlyZWN0aW9uIHQgOiBDdXJzb3Jfd2l0aF92YWx1ZS50IG9wdGlvbiBSZXF1ZXN0LnRcbiAgICAgID1cbiAgICBsZXQgZGlyZWN0aW9uID0gT3B0aW9uLm1hcCBEaXJlY3Rpb24udG9fanYgZGlyZWN0aW9uIGluXG4gICAgbGV0IGFyZ3MgPVxuICAgICAgKCogdG9kbzogcXVlcnkgISopXG4gICAgICBtYXRjaCAocXVlcnksIGRpcmVjdGlvbikgd2l0aFxuICAgICAgfCBTb21lIHEsIFNvbWUgZCAtPiBbfCBxOyBkIHxdXG4gICAgICB8IE5vbmUsIFNvbWUgZCAtPiBbfCBKdi5udWxsOyBkIHxdXG4gICAgICB8IFNvbWUgcSwgTm9uZSAtPiBbfCBxIHxdXG4gICAgICB8IE5vbmUsIE5vbmUgLT4gW3x8XVxuICAgIGluXG4gICAgbGV0IGYganYgPSBKdi50b19vcHRpb24gQ3Vyc29yLm9mX2p2IGp2IGluXG4gICAgSnYuY2FsbCB0IFwib3BlbktleUN1cnNvclwiIGFyZ3MgfD4gUmVxdWVzdC5vZl9qdiB+ZlxuXG4gICgqIFtmb2xkX2tleV0gd2lsbCBmb2xkIG92ZXIgYWxsIGtleXMgcmV0dXJuZWQgYnkgdGhlIGdpdmVuIGN1cnNvci5cbiAgICAgTm90ZSB0aGF0IGl0IGlzIGxlc3MgZWZmaWNpZW50IHRoYW4gW2dldF9hbGxfa2V5c10gdG8gYnVpbGQgYW4gYXJyYXlcbiAgICAgb2YgZXZlcnkga2V5cy4gSXQncyBtb3N0IHByb2JhYmx5IGR1ZSB0byBhIGNhY2hpbmctYmFzZWQgb3B0aW1pemF0aW9uXG4gICAgIG9mIHRoZSBbZ2V0X2FsbF9rZXlzXSByZXN1bHRzIChhdCBsZWFzdCBpbiBGaXJlZm94KS4gKilcbiAgbGV0IGZvbGRfa2V5cyB+aW5pdCB+ZiBjdXJzb3JfcmVxID1cbiAgICBsZXQgcmVzdWx0LCBzZXRfcmVzdWx0ID0gRnV0LmNyZWF0ZSAoKSBpblxuICAgIGxldCBhY2MgPSByZWYgaW5pdCBpblxuICAgIGxldCBfID1cbiAgICAgIFJlcXVlc3Qub25fc3VjY2VzcyBjdXJzb3JfcmVxIH5mOihmdW4gX2V2IHIgLT5cbiAgICAgICAgICBtYXRjaCBSZXF1ZXN0LnJlc3VsdCByIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gc2V0X3Jlc3VsdCAoT2sgIWFjYylcbiAgICAgICAgICB8IFNvbWUgY3Vyc29yIC0+XG4gICAgICAgICAgICAgICgqIFRoZSBjdXJzb3Igc2hvdWxkIG5vdCBiZSBvdXQgb2YgcmFuZ2UgYXQgdGhhdCBwb2ludCBzbyB0aGUga2V5c1xuICAgICAgICAgICAgICAgICBzaG91bGQgaGF2ZSBhIHZhbHVlLiAqKVxuICAgICAgICAgICAgICBsZXQga2V5ID0gQ3Vyc29yLmtleSBjdXJzb3IgfD4gT3B0aW9uLmdldCBpblxuICAgICAgICAgICAgICBsZXQgcHJpbWFyeV9rZXkgPSBDdXJzb3IucHJpbWFyeV9rZXkgY3Vyc29yIHw+IE9wdGlvbi5nZXQgaW5cbiAgICAgICAgICAgICAgYWNjIDo9IGYgIWFjYyBrZXkgcHJpbWFyeV9rZXk7XG4gICAgICAgICAgICAgIEN1cnNvci5jb250aW51ZSBjdXJzb3IpXG4gICAgICB8PiBSZXF1ZXN0Lm9uX2Vycm9yIH5mOihmdW4gX2V2IHJlcSAtPlxuICAgICAgICAgICAgIHNldF9yZXN1bHQgKEVycm9yIChSZXF1ZXN0LmVycm9yIHJlcSkpKVxuICAgIGluXG4gICAgcmVzdWx0XG5lbmRcblxubW9kdWxlIHR5cGUgU3RvcmUgPSBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIG9mX2p2IDogSnYudCAtPiB0XG5cbiAgbW9kdWxlIENvbnRlbnQgOiBTdG9yZV9jb250ZW50X2ludGZcbmVuZFxuXG5tb2R1bGUgdHlwZSBJbmRleCA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgb2ZfanYgOiBKdi50IC0+IHRcbiAgdmFsIG5hbWUgOiBzdHJpbmdcblxuICBtb2R1bGUgS2V5IDogS2V5XG5lbmRcblxubW9kdWxlIE1ha2VfaW5kZXhcbiAgICAoUCA6IHNpZ1xuICAgICAgdmFsIG5hbWUgOiBzdHJpbmdcbiAgICBlbmQpXG4gICAgKEMgOiBTdG9yZV9jb250ZW50X2ludGYpXG4gICAgKEsgOiBLZXkpID1cbnN0cnVjdFxuICBtb2R1bGUgQ29udGVudCA9IENcbiAgbW9kdWxlIEtleSA9IEtcbiAgaW5jbHVkZSBDb250ZW50X2FjY2VzcyAoQ29udGVudCkgKEspXG4gIGluY2x1ZGUgUFxuZW5kXG5cbm1vZHVsZSBNYWtlX29iamVjdF9zdG9yZSAoQyA6IFN0b3JlX2NvbnRlbnRfaW50ZikgPSBzdHJ1Y3RcbiAgbW9kdWxlIENvbnRlbnQgPSBDXG4gIGluY2x1ZGUgQ29udGVudF9hY2Nlc3MgKENvbnRlbnQpIChDb250ZW50LktleSlcblxuICBsZXQgYWRkIHYgPyhrZXkgOiBDb250ZW50LktleS50IG9wdGlvbikgdCA6IENvbnRlbnQuS2V5LnQgUmVxdWVzdC50ID1cbiAgICBsZXQgYXJncyA9XG4gICAgICBtYXRjaCBrZXkgd2l0aFxuICAgICAgfCBTb21lIGtleSAtPiBbfCBDb250ZW50LnRvX2p2IHY7IENvbnRlbnQuS2V5LnRvX2p2IGtleSB8XVxuICAgICAgfCBOb25lIC0+IFt8IENvbnRlbnQudG9fanYgdiB8XVxuICAgIGluXG4gICAgSnYuY2FsbCB0IFwiYWRkXCIgYXJncyB8PiBSZXF1ZXN0Lm9mX2p2IH5mOkNvbnRlbnQuS2V5Lm9mX2p2XG5cbiAgbGV0IGNyZWF0ZV9pbmRleCAodHlwZSB0JykgKG1vZHVsZSBJIDogSW5kZXggd2l0aCB0eXBlIHQgPSB0JykgdCA6IHQnID1cbiAgICBsZXQga2V5X3BhdGggPSBLZXlfcGF0aC50b19qdiBJLktleS5wYXRoIGluXG4gICAgSnYuY2FsbCB0IFwiY3JlYXRlSW5kZXhcIiBbfCBKdi5vZl9zdHJpbmcgSS5uYW1lOyBrZXlfcGF0aCB8XSB8PiBJLm9mX2p2XG5cbiAgbGV0IGluZGV4ICh0eXBlIHQnKSAobW9kdWxlIEkgOiBJbmRleCB3aXRoIHR5cGUgdCA9IHQnKSB0IDogdCcgPVxuICAgIEp2LmNhbGwgdCBcImluZGV4XCIgW3wgSnYub2Zfc3RyaW5nIEkubmFtZSB8XSB8PiBJLm9mX2p2XG5cbiAgbGV0IHB1dCB2ID8oa2V5IDogQ29udGVudC5LZXkudCBvcHRpb24pIHQgOiBDb250ZW50LktleS50IFJlcXVlc3QudCA9XG4gICAgbGV0IGFyZ3MgPVxuICAgICAgbWF0Y2gga2V5IHdpdGhcbiAgICAgIHwgU29tZSBrZXkgLT4gW3wgQ29udGVudC50b19qdiB2OyBDb250ZW50LktleS50b19qdiBrZXkgfF1cbiAgICAgIHwgTm9uZSAtPiBbfCBDb250ZW50LnRvX2p2IHYgfF1cbiAgICBpblxuICAgIEp2LmNhbGwgdCBcInB1dFwiIGFyZ3MgfD4gUmVxdWVzdC5vZl9qdiB+ZjpDb250ZW50LktleS5vZl9qdlxuZW5kXG5cbm1vZHVsZSBUcmFuc2FjdGlvbiA9IHN0cnVjdFxuICB0eXBlIHQgPSBKdi50XG5cbiAgZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+IHQgPSBcIiVpZGVudGl0eVwiXG5cbiAgdHlwZSBtb2RlID0gUmVhZG9ubHkgfCBSZWFkd3JpdGUgfCBSZWFkd3JpdGVmbHVzaFxuXG4gIGxldCBzdHJpbmdfb2ZfbW9kZSA9IGZ1bmN0aW9uXG4gICAgfCBSZWFkb25seSAtPiBcInJlYWRvbmx5XCJcbiAgICB8IFJlYWR3cml0ZSAtPiBcInJlYWR3cml0ZVwiXG4gICAgfCBSZWFkd3JpdGVmbHVzaCAtPiBcInJlYWR3cml0ZWZsdXNoXCJcblxuICBsZXQgbW9kZV9vZl9zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgXCJyZWFkb25seVwiIC0+IFJlYWRvbmx5XG4gICAgfCBcInJlYWR3cml0ZVwiIC0+IFJlYWR3cml0ZVxuICAgIHwgXCJyZWFkd3JpdGVmbHVzaFwiIC0+IFJlYWR3cml0ZWZsdXNoXG4gICAgfCBzIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IHMpXG5cbiAgbGV0IG9iamVjdF9zdG9yZSAodHlwZSB0JykgKG1vZHVsZSBTIDogU3RvcmUgd2l0aCB0eXBlIHQgPSB0JykgdCA6IHQnID1cbiAgICBKdi5jYWxsIHQgXCJvYmplY3RTdG9yZVwiIFt8IEp2Lm9mX3N0cmluZyBTLkNvbnRlbnQubmFtZSB8XSB8PiBTLm9mX2p2XG5lbmRcblxubW9kdWxlIERhdGFiYXNlID0gc3RydWN0XG4gIHR5cGUgdCA9IEp2LnRcblxuICBleHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxuICBsZXQgY3JlYXRlX29iamVjdF9zdG9yZSAodHlwZSB0JykgKG1vZHVsZSBTIDogU3RvcmUgd2l0aCB0eXBlIHQgPSB0JylcbiAgICAgID8oYXV0b19pbmNyZW1lbnQgPSBmYWxzZSkgKGRiIDogdCkgOiB0JyA9XG4gICAgbGV0IG9wdHMgPSBbIChcImF1dG9JbmNyZW1lbnRcIiwgSnYub2ZfYm9vbCBhdXRvX2luY3JlbWVudCkgXSBpblxuICAgICgqIFRPRE86IG1vdmUgYXV0b2luY3JlbWVudCB0byBzdG9yZV9jb250ZW50ICopXG4gICAgbGV0IGtleV9wYXRoID0gS2V5X3BhdGgudG9fanYgUy5Db250ZW50LktleS5wYXRoIGluXG4gICAgbGV0IG9wdHMgPSAoXCJrZXlQYXRoXCIsIGtleV9wYXRoKSA6OiBvcHRzIGluXG4gICAgbGV0IG9wdGlvbnMgPSBKdi5vYmogQEAgQXJyYXkub2ZfbGlzdCBvcHRzIGluXG4gICAgQ29uc29sZS5pbmZvIFsgXCJuZXcgb2JqZWN0IHN0b3JlIHdpdGggb3B0aW9uczpcIjsgb3B0aW9ucyBdO1xuICAgICgqIFRPRE86IGtleXBhdGggc2hvdWxkIGJlIG9wdGlvbm5hbCAqKVxuICAgIEp2LmNhbGwgZGIgXCJjcmVhdGVPYmplY3RTdG9yZVwiIFt8IEp2Lm9mX3N0cmluZyBTLkNvbnRlbnQubmFtZTsgb3B0aW9ucyB8XVxuICAgIHw+IFMub2ZfanZcblxuICBsZXQgdHJhbnNhY3Rpb24gc3RvcmVzID8obW9kZSA9IFRyYW5zYWN0aW9uLlJlYWRvbmx5KSB0ID1cbiAgICBsZXQgbW9kZSA9IFRyYW5zYWN0aW9uLnN0cmluZ19vZl9tb2RlIG1vZGUgfD4gSnYub2Zfc3RyaW5nIGluXG4gICAgbGV0IGp2X29mX3N0b3JlIChtb2R1bGUgUyA6IFN0b3JlKSA9IEp2Lm9mX3N0cmluZyBTLkNvbnRlbnQubmFtZSBpblxuICAgIEp2LmNhbGwgdCBcInRyYW5zYWN0aW9uXCIgW3wgSnYub2ZfbGlzdCBqdl9vZl9zdG9yZSBzdG9yZXM7IG1vZGUgfF1cbiAgICB8PiBUcmFuc2FjdGlvbi5vZl9qdlxuZW5kXG5cbm1vZHVsZSBPcGVuX2RiX3JlcXVlc3QgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gRGF0YWJhc2UudCBSZXF1ZXN0LnRcblxuICBsZXQgb25fdXBncmFkZV9uZWVkZWQgfihmIDogRXZlbnRzLlZlcnNpb25fY2hhbmdlLnQgRXYudCAtPiB0IC0+IHVuaXQpICh0IDogdClcbiAgICAgIDogdCA9XG4gICAgbGV0IGYgZXYgPVxuICAgICAgbGV0IHJlcSA6IHQgPVxuICAgICAgICBFdi5jdXJyZW50X3RhcmdldCBldiB8PiBFdi50YXJnZXRfdG9fanZcbiAgICAgICAgfD4gUmVxdWVzdC5vZl9qdiB+ZjpEYXRhYmFzZS5vZl9qdlxuICAgICAgaW5cbiAgICAgIGYgZXYgcmVxXG4gICAgaW5cbiAgICBpZ25vcmUgQEAgRXYubGlzdGVuIEV2ZW50cy51cGdyYWRlX25lZWRlZCBmIChFdi50YXJnZXRfb2ZfanYgdC5qdik7XG4gICAgdFxuXG4gIGV4dGVybmFsIGFzX3JlcXVlc3QgOiB0IC0+IERhdGFiYXNlLnQgUmVxdWVzdC50ID0gXCIlaWRlbnRpdHlcIlxuZW5kXG5cbm1vZHVsZSBGYWN0b3J5ID0gc3RydWN0XG4gIHR5cGUgdCA9IEp2LnRcblxuICBsZXQgb3Blbicgfm5hbWUgP3ZlcnNpb24gdCA6IE9wZW5fZGJfcmVxdWVzdC50ID1cbiAgICBsZXQgYXJncyA9XG4gICAgICBtYXRjaCB2ZXJzaW9uIHdpdGhcbiAgICAgIHwgU29tZSB2IC0+IFt8IG5hbWU7IHN0cmluZ19vZl9pbnQgdiB8XVxuICAgICAgfCBOb25lIC0+IFt8IG5hbWUgfF1cbiAgICBpblxuXG4gICAgSnYuY2FsbCB0IFwib3BlblwiIEBAIEFycmF5Lm1hcCBKdi5vZl9zdHJpbmcgYXJnc1xuICAgIHw+IFJlcXVlc3Qub2ZfanYgfmY6RGF0YWJhc2Uub2ZfanZcbmVuZFxuXG5sZXQgZ2V0X2ZhY3RvcnkgPyhnbG9iYWwgPSBKdi5nbG9iYWwpICgpIDogRmFjdG9yeS50ID0gSnYuZ2V0IGdsb2JhbCBcImluZGV4ZWREQlwiXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgQXJyYXkgdXRpbHN9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG50eXBlICdhIGVxdWFsID0gJ2EgLT4gJ2EgLT4gYm9vbFxudHlwZSAnYSBvcmQgPSAnYSAtPiAnYSAtPiBpbnRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcblxuKCoqIHsyIEFycmF5c30gKilcblxuaW5jbHVkZSBBcnJheVxuXG5sZXQgZW1wdHkgPSBbfHxdXG5cbmxldCBnZXRfc2FmZSBhIGkgPVxuICBpZiBpID49IDAgJiYgaSA8IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICBTb21lIChBcnJheS51bnNhZmVfZ2V0IGEgaSlcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IG1hcF9pbnBsYWNlIGYgYSA9IEFycmF5Lml0ZXJpIChmdW4gaSBlIC0+IEFycmF5LnVuc2FmZV9zZXQgYSBpIChmIGUpKSBhXG5sZXQgbWFwaV9pbnBsYWNlIGYgYSA9IEFycmF5Lml0ZXJpIChmdW4gaSBlIC0+IEFycmF5LnVuc2FmZV9zZXQgYSBpIChmIGkgZSkpIGFcbmxldCBmb2xkID0gQXJyYXkuZm9sZF9sZWZ0XG5cbmxldCBmb2xkaSBmIGFjYyBhID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBhdXggKGYgYWNjIGkgYS4oaSkpIChpICsgMSlcbiAgaW5cbiAgYXV4IGFjYyAwXG5cbmxldCBmb2xkX3doaWxlIGYgYWNjIGEgPVxuICBsZXQgcmVjIGZvbGRfd2hpbGVfaSBmIGFjYyBpID1cbiAgICBpZiBpIDwgQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgYWNjLCBjb250ID0gZiBhY2MgYS4oaSkgaW5cbiAgICAgIG1hdGNoIGNvbnQgd2l0aFxuICAgICAgfCBgU3RvcCAtPiBhY2NcbiAgICAgIHwgYENvbnRpbnVlIC0+IGZvbGRfd2hpbGVfaSBmIGFjYyAoaSArIDEpXG4gICAgKSBlbHNlXG4gICAgICBhY2NcbiAgaW5cbiAgZm9sZF93aGlsZV9pIGYgYWNjIDBcblxubGV0IGZvbGRfbWFwIGYgYWNjIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICgqIG5lZWQgc3BlY2lhbCBjYXNlIGZvciBpbml0aWFsaXppbmcgdGhlIHJlc3VsdCAqKVxuICBpZiBuID0gMCB0aGVuXG4gICAgYWNjLCBbfHxdXG4gIGVsc2UgKFxuICAgIGxldCBhY2MsIGIwID0gZiBhY2MgYS4oMCkgaW5cbiAgICBsZXQgcmVzID0gQXJyYXkubWFrZSBuIGIwIGluXG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBmb3IgaSA9IDEgdG8gbiAtIDEgZG9cbiAgICAgIGxldCBuZXdfYWNjLCBiID0gZiAhYWNjIGEuKGkpIGluXG4gICAgICBhY2MgOj0gbmV3X2FjYztcbiAgICAgIHJlcy4oaSkgPC0gYlxuICAgIGRvbmU7XG4gICAgIWFjYywgcmVzXG4gIClcblxubGV0IHNjYW5fbGVmdCBmIGFjYyBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVzID0gQXJyYXkubWFrZSAobiArIDEpIGFjYyBpblxuICBBcnJheS5pdGVyaVxuICAgIChmdW4gaSB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IGYgcmVzLihpKSB4IGluXG4gICAgICByZXMuKGkgKyAxKSA8LSBuZXdfYWNjKVxuICAgIGE7XG4gIHJlc1xuXG5sZXQgcmV2ZXJzZV9pbl9wbGFjZSBhID1cbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGlmIGxlbiA+IDAgdGhlblxuICAgIGZvciBrID0gMCB0byAobGVuIC0gMSkgLyAyIGRvXG4gICAgICBsZXQgdCA9IGEuKGspIGluXG4gICAgICBhLihrKSA8LSBhLihsZW4gLSAxIC0gayk7XG4gICAgICBhLihsZW4gLSAxIC0gaykgPC0gdFxuICAgIGRvbmVcblxubGV0IHNvcnRlZCBjbXAgYSA9XG4gIGxldCBiID0gQXJyYXkuY29weSBhIGluXG4gIEFycmF5LnNvcnQgY21wIGI7XG4gIGJcblxubGV0IHNvcnRfaW5kaWNlcyBjbXAgYSA9XG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggYSBpblxuICBsZXQgYiA9IEFycmF5LmluaXQgbGVuIChmdW4gayAtPiBrKSBpblxuICBBcnJheS5zb3J0IChmdW4gazEgazIgLT4gY21wIGEuKGsxKSBhLihrMikpIGI7XG4gIGJcblxubGV0IHNvcnRfcmFua2luZyBjbXAgYSA9IHNvcnRfaW5kaWNlcyBjb21wYXJlIChzb3J0X2luZGljZXMgY21wIGEpXG5cbmxldCByZXYgYSA9XG4gIGxldCBiID0gQXJyYXkuY29weSBhIGluXG4gIHJldmVyc2VfaW5fcGxhY2UgYjtcbiAgYlxuXG5leGNlcHRpb24gRm91bmRcblxubGV0IG1lbSA/KGVxID0gU3RkbGliLiggPSApKSBlbHQgYSA9XG4gIHRyeVxuICAgIEFycmF5Lml0ZXIgKGZ1biBlIC0+IGlmIGVxIGUgZWx0IHRoZW4gcmFpc2Vfbm90cmFjZSBGb3VuZCkgYTtcbiAgICBmYWxzZVxuICB3aXRoIEZvdW5kIC0+IHRydWVcblxubGV0IHJlYyBmaW5kX2F1eCBmIGEgaSA9XG4gIGlmIGkgPj0gQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgIE5vbmVcbiAgZWxzZSAoXG4gICAgbWF0Y2ggZiBpIGEuKGkpIHdpdGhcbiAgICB8IFNvbWUgXyBhcyByZXMgLT4gcmVzXG4gICAgfCBOb25lIC0+IGZpbmRfYXV4IGYgYSAoaSArIDEpXG4gIClcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzJcIl1cblxubGV0IGZpbmRfbWFwIGYgYSA9IGZpbmRfYXV4IChmdW4gXyAtPiBmKSBhIDBcbmxldCBmaW5kID0gZmluZF9tYXBcbmxldCBmaW5kX21hcF9pIGYgYSA9IGZpbmRfYXV4IGYgYSAwXG5sZXQgZmluZGkgPSBmaW5kX21hcF9pXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiKzMyXCJdXG5cbmxldCBmaW5kX2lkeCBwIGEgPVxuICBmaW5kX2F1eFxuICAgIChmdW4gaSB4IC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBTb21lIChpLCB4KVxuICAgICAgZWxzZVxuICAgICAgICBOb25lKVxuICAgIGEgMFxuXG5sZXQgbWF4IGNtcCBhID1cbiAgaWYgQXJyYXkubGVuZ3RoIGEgPSAwIHRoZW5cbiAgICBOb25lXG4gIGVsc2VcbiAgICBTb21lXG4gICAgICAoZm9sZFxuICAgICAgICAgKGZ1biBhY2MgZWx0IC0+XG4gICAgICAgICAgIGlmIGNtcCBhY2MgZWx0IDwgMCB0aGVuXG4gICAgICAgICAgICAgZWx0XG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBhY2MpXG4gICAgICAgICBhLigwKSBhKVxuXG5sZXQgbWF4X2V4biBjbXAgYSA9XG4gIG1hdGNoIG1heCBjbXAgYSB3aXRoXG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDQXJyYXkubWF4X2V4blwiXG4gIHwgU29tZSBlbHQgLT4gZWx0XG5cbmxldCBhcmdtYXggY21wIGEgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlblxuICAgIE5vbmVcbiAgZWxzZVxuICAgIFNvbWVcbiAgICAgIChmb2xkaVxuICAgICAgICAgKGZ1biBhY2MgaSBlbHQgLT5cbiAgICAgICAgICAgaWYgY21wIGEuKGFjYykgZWx0IDwgMCB0aGVuXG4gICAgICAgICAgICAgaVxuICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgYWNjKVxuICAgICAgICAgMCBhKVxuXG5sZXQgYXJnbWF4X2V4biBjbXAgYSA9XG4gIG1hdGNoIGFyZ21heCBjbXAgYSB3aXRoXG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDQXJyYXkuYXJnbWF4X2V4blwiXG4gIHwgU29tZSBlbHQgLT4gZWx0XG5cbmxldCBtaW4gY21wIGEgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlblxuICAgIE5vbmVcbiAgZWxzZVxuICAgIFNvbWVcbiAgICAgIChmb2xkXG4gICAgICAgICAoZnVuIGFjYyBlbHQgLT5cbiAgICAgICAgICAgaWYgY21wIGFjYyBlbHQgPiAwIHRoZW5cbiAgICAgICAgICAgICBlbHRcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIGFjYylcbiAgICAgICAgIGEuKDApIGEpXG5cbmxldCBtaW5fZXhuIGNtcCBhID1cbiAgbWF0Y2ggbWluIGNtcCBhIHdpdGhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NBcnJheS5taW5fZXhuXCJcbiAgfCBTb21lIGVsdCAtPiBlbHRcblxubGV0IGFyZ21pbiBjbXAgYSA9XG4gIGlmIEFycmF5Lmxlbmd0aCBhID0gMCB0aGVuXG4gICAgTm9uZVxuICBlbHNlXG4gICAgU29tZVxuICAgICAgKGZvbGRpXG4gICAgICAgICAoZnVuIGFjYyBpIGVsdCAtPlxuICAgICAgICAgICBpZiBjbXAgYS4oYWNjKSBlbHQgPiAwIHRoZW5cbiAgICAgICAgICAgICBpXG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBhY2MpXG4gICAgICAgICAwIGEpXG5cbmxldCBhcmdtaW5fZXhuIGNtcCBhID1cbiAgbWF0Y2ggYXJnbWluIGNtcCBhIHdpdGhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NBcnJheS5hcmdtaW5fZXhuXCJcbiAgfCBTb21lIGVsdCAtPiBlbHRcblxubGV0IGZpbHRlcl9tYXAgZiBhID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuIChcbiAgICAgIGxldCBhJyA9IEFycmF5Lm9mX2xpc3QgYWNjIGluXG4gICAgICByZXZlcnNlX2luX3BsYWNlIGEnO1xuICAgICAgYSdcbiAgICApIGVsc2UgKFxuICAgICAgbWF0Y2ggZiBhLihpKSB3aXRoXG4gICAgICB8IE5vbmUgLT4gYXV4IGFjYyAoaSArIDEpXG4gICAgICB8IFNvbWUgeCAtPiBhdXggKHggOjogYWNjKSAoaSArIDEpXG4gICAgKVxuICBpblxuICBhdXggW10gMFxuXG5sZXQgZmlsdGVyIHAgYSA9XG4gIGZpbHRlcl9tYXBcbiAgICAoZnVuIHggLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIFNvbWUgeFxuICAgICAgZWxzZVxuICAgICAgICBOb25lKVxuICAgIGFcblxuKCogYXBwZW5kIFtyZXYgYV0gaW4gZnJvbnQgb2YgW2FjY10gKilcbmxldCByZWMgX19yZXZfYXBwZW5kX2xpc3QgYSBhY2MgaSA9XG4gIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgYWNjXG4gIGVsc2VcbiAgICBfX3Jldl9hcHBlbmRfbGlzdCBhIChhLihpKSA6OiBhY2MpIChpICsgMSlcblxubGV0IGZsYXRfbWFwIGYgYSA9XG4gIGxldCByZWMgYXV4IGFjYyBpID1cbiAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgYScgPSBBcnJheS5vZl9saXN0IGFjYyBpblxuICAgICAgcmV2ZXJzZV9pbl9wbGFjZSBhJztcbiAgICAgIGEnXG4gICAgKSBlbHNlIChcbiAgICAgIGxldCBhJyA9IGYgYS4oaSkgaW5cbiAgICAgIGF1eCAoX19yZXZfYXBwZW5kX2xpc3QgYScgYWNjIDApIChpICsgMSlcbiAgICApXG4gIGluXG4gIGF1eCBbXSAwXG5cbmxldCBtb25vaWRfcHJvZHVjdCBmIGExIGEyID1cbiAgbGV0IG5hMSA9IGxlbmd0aCBhMSBpblxuICBpbml0XG4gICAgKG5hMSAqIGxlbmd0aCBhMilcbiAgICAoZnVuIGlfcHJvZCAtPlxuICAgICAgbGV0IGkgPSBpX3Byb2QgbW9kIG5hMSBpblxuICAgICAgbGV0IGogPSBpX3Byb2QgLyBuYTEgaW5cbiAgICAgIGYgYTEuKGkpIGEyLihqKSlcblxubGV0IHJlYyBfbG9va3VwX3JlYyB+Y21wIGsgYSBpIGogPVxuICBpZiBpID4gaiB0aGVuXG4gICAgcmFpc2UgTm90X2ZvdW5kXG4gIGVsc2UgaWYgaSA9IGogdGhlblxuICAgIGlmIGNtcCBrIGEuKGkpID0gMCB0aGVuXG4gICAgICBpXG4gICAgZWxzZVxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gIGVsc2UgKFxuICAgIGxldCBtaWRkbGUgPSAoaiArIGkpIC8gMiBpblxuICAgIG1hdGNoIGNtcCBrIGEuKG1pZGRsZSkgd2l0aFxuICAgIHwgMCAtPiBtaWRkbGVcbiAgICB8IG4gd2hlbiBuIDwgMCAtPiBfbG9va3VwX3JlYyB+Y21wIGsgYSBpIChtaWRkbGUgLSAxKVxuICAgIHwgXyAtPiBfbG9va3VwX3JlYyB+Y21wIGsgYSAobWlkZGxlICsgMSkgalxuICApXG5cbmxldCBfbG9va3VwX2V4biB+Y21wIGsgYSBpIGogPVxuICBpZiBpID4gaiB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgbWF0Y2ggY21wIGsgYS4oaSkgd2l0aFxuICB8IDAgLT4gaVxuICB8IG4gd2hlbiBuIDwgMCAtPiByYWlzZSBOb3RfZm91bmQgKCogdG9vIGxvdyAqKVxuICB8IF8gd2hlbiBpID0gaiAtPiByYWlzZSBOb3RfZm91bmQgKCogdG9vIGhpZ2ggKilcbiAgfCBfIC0+XG4gICAgKG1hdGNoIGNtcCBrIGEuKGopIHdpdGhcbiAgICB8IDAgLT4galxuICAgIHwgbiB3aGVuIG4gPCAwIC0+IF9sb29rdXBfcmVjIH5jbXAgayBhIChpICsgMSkgKGogLSAxKVxuICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmQpXG4oKiB0b28gaGlnaCAqKVxuXG5sZXQgbG9va3VwX2V4biB+Y21wIGsgYSA9IF9sb29rdXBfZXhuIH5jbXAgayBhIDAgKEFycmF5Lmxlbmd0aCBhIC0gMSlcblxubGV0IGxvb2t1cCB+Y21wIGsgYSA9XG4gIHRyeSBTb21lIChfbG9va3VwX2V4biB+Y21wIGsgYSAwIChBcnJheS5sZW5ndGggYSAtIDEpKVxuICB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5cbmxldCBic2VhcmNoIH5jbXAgayBhID1cbiAgbGV0IHJlYyBhdXggaSBqID1cbiAgICBpZiBpID4gaiB0aGVuXG4gICAgICBgSnVzdF9hZnRlciBqXG4gICAgZWxzZSAoXG4gICAgICBsZXQgbWlkZGxlID0gaSArICgoaiAtIGkpIC8gMikgaW5cbiAgICAgICgqIGF2b2lkIG92ZXJmbG93ICopXG4gICAgICBtYXRjaCBjbXAgayBhLihtaWRkbGUpIHdpdGhcbiAgICAgIHwgMCAtPiBgQXQgbWlkZGxlXG4gICAgICB8IG4gd2hlbiBuIDwgMCAtPiBhdXggaSAobWlkZGxlIC0gMSlcbiAgICAgIHwgXyAtPiBhdXggKG1pZGRsZSArIDEpIGpcbiAgICApXG4gIGluXG4gIGxldCBuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgaWYgbiA9IDAgdGhlblxuICAgIGBFbXB0eVxuICBlbHNlIChcbiAgICBtYXRjaCBjbXAgYS4oMCkgaywgY21wIGEuKG4gLSAxKSBrIHdpdGhcbiAgICB8IGMsIF8gd2hlbiBjID4gMCAtPiBgQWxsX2JpZ2dlclxuICAgIHwgXywgYyB3aGVuIGMgPCAwIC0+IGBBbGxfbG93ZXJcbiAgICB8IF8gLT4gYXV4IDAgKG4gLSAxKVxuICApXG5cbmxldCByZWMgX2Zvcl9hbGwyIHAgYTEgYTIgaTEgaTIgfmxlbiA9XG4gIGxlbiA9IDBcbiAgfHwgKHAgYTEuKGkxKSBhMi4oaTIpICYmIF9mb3JfYWxsMiBwIGExIGEyIChpMSArIDEpIChpMiArIDEpIH5sZW46KGxlbiAtIDEpKVxuXG5sZXQgZm9yX2FsbDIgcCBhIGIgPVxuICBBcnJheS5sZW5ndGggYSA9IEFycmF5Lmxlbmd0aCBiICYmIF9mb3JfYWxsMiBwIGEgYiAwIDAgfmxlbjooQXJyYXkubGVuZ3RoIGEpXG5cbmxldCByZWMgX2V4aXN0czIgcCBhMSBhMiBpMSBpMiB+bGVuID1cbiAgbGVuID4gMFxuICAmJiAocCBhMS4oaTEpIGEyLihpMikgfHwgX2V4aXN0czIgcCBhMSBhMiAoaTEgKyAxKSAoaTIgKyAxKSB+bGVuOihsZW4gLSAxKSlcblxubGV0IGV4aXN0czIgcCBhIGIgPVxuICBfZXhpc3RzMiBwIGEgYiAwIDAgfmxlbjooU3RkbGliLm1pbiAoQXJyYXkubGVuZ3RoIGEpIChBcnJheS5sZW5ndGggYikpXG5cbmxldCBfZm9sZDIgZiBhY2MgYSBiIGkgaiB+bGVuID1cbiAgbGV0IHJlYyBhdXggYWNjIG8gPVxuICAgIGlmIG8gPSBsZW4gdGhlblxuICAgICAgYWNjXG4gICAgZWxzZSAoXG4gICAgICBsZXQgYWNjID0gZiBhY2MgKEFycmF5LmdldCBhIChpICsgbykpIChBcnJheS5nZXQgYiAoaiArIG8pKSBpblxuICAgICAgYXV4IGFjYyAobyArIDEpXG4gICAgKVxuICBpblxuICBhdXggYWNjIDBcblxubGV0IGZvbGQyIGYgYWNjIGEgYiA9XG4gIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW4gaW52YWxpZF9hcmcgXCJmb2xkMlwiO1xuICBfZm9sZDIgZiBhY2MgYSBiIDAgMCB+bGVuOihBcnJheS5sZW5ndGggYSlcblxubGV0ICggLS0gKSBpIGogPVxuICBpZiBpIDw9IGogdGhlblxuICAgIEFycmF5LmluaXQgKGogLSBpICsgMSkgKGZ1biBrIC0+IGkgKyBrKVxuICBlbHNlXG4gICAgQXJyYXkuaW5pdCAoaSAtIGogKyAxKSAoZnVuIGsgLT4gaSAtIGspXG5cbmxldCAoIC0tXiApIGkgaiA9XG4gIGlmIGkgPSBqIHRoZW5cbiAgICBbfHxdXG4gIGVsc2UgaWYgaSA+IGogdGhlblxuICAgIEFycmF5LmluaXQgKGkgLSBqKSAoZnVuIGsgLT4gaSAtIGspXG4gIGVsc2VcbiAgICBBcnJheS5pbml0IChqIC0gaSkgKGZ1biBrIC0+IGkgKyBrKVxuXG4oKiogYWxsIHRoZSBlbGVtZW50cyBvZiBhLCBidXQgdGhlIGktdGgsIGludG8gYSBsaXN0ICopXG5sZXQgZXhjZXB0X2lkeCBhIGkgPVxuICBmb2xkaVxuICAgIChmdW4gYWNjIGogZWx0IC0+XG4gICAgICBpZiBpID0gaiB0aGVuXG4gICAgICAgIGFjY1xuICAgICAgZWxzZVxuICAgICAgICBlbHQgOjogYWNjKVxuICAgIFtdIGFcblxubGV0IGVxdWFsIGVxIGEgYiA9XG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICB0cnVlXG4gICAgZWxzZVxuICAgICAgZXEgYS4oaSkgYi4oaSkgJiYgYXV4IChpICsgMSlcbiAgaW5cbiAgQXJyYXkubGVuZ3RoIGEgPSBBcnJheS5sZW5ndGggYiAmJiBhdXggMFxuXG5sZXQgY29tcGFyZSBjbXAgYSBiID1cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYiB0aGVuXG4gICAgICAgIDBcbiAgICAgIGVsc2VcbiAgICAgICAgLTFcbiAgICBlbHNlIGlmIGkgPSBBcnJheS5sZW5ndGggYiB0aGVuXG4gICAgICAxXG4gICAgZWxzZSAoXG4gICAgICBsZXQgYyA9IGNtcCBhLihpKSBiLihpKSBpblxuICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICBhdXggKGkgKyAxKVxuICAgICAgZWxzZVxuICAgICAgICBjXG4gICAgKVxuICBpblxuICBhdXggMFxuXG4oKiBzd2FwIGVsZW1lbnRzIG9mIGFycmF5ICopXG5sZXQgc3dhcCBhIGkgaiA9XG4gIGlmIGkgPD4gaiB0aGVuIChcbiAgICBsZXQgdG1wID0gYS4oaSkgaW5cbiAgICBhLihpKSA8LSBhLihqKTtcbiAgICBhLihqKSA8LSB0bXBcbiAgKVxuXG4oKiBzaHVmZmxlIGFbaSDigKYgal0gdXNpbmcgdGhlIGdpdmVuIGludCByYW5kb20gZ2VuZXJhdG9yXG4gICBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXItWWF0ZXNfc2h1ZmZsZSAqKVxubGV0IF9zaHVmZmxlIF9yYW5kX2ludCBhIGkgaiA9XG4gIGZvciBrID0gaiAtIDEgZG93bnRvIGkgKyAxIGRvXG4gICAgbGV0IGwgPSBfcmFuZF9pbnQgKGsgKyAxKSBpblxuICAgIGxldCB0bXAgPSBhLihsKSBpblxuICAgIGEuKGwpIDwtIGEuKGspO1xuICAgIGEuKGspIDwtIHRtcFxuICBkb25lXG5cbmxldCBzaHVmZmxlIGEgPSBfc2h1ZmZsZSBSYW5kb20uaW50IGEgMCAoQXJyYXkubGVuZ3RoIGEpXG5sZXQgc2h1ZmZsZV93aXRoIHN0IGEgPSBfc2h1ZmZsZSAoUmFuZG9tLlN0YXRlLmludCBzdCkgYSAwIChBcnJheS5sZW5ndGggYSlcblxubGV0IHJhbmRvbV9jaG9vc2UgYSA9XG4gIGxldCBuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgaWYgbiA9IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LnJhbmRvbV9jaG9vc2VcIjtcbiAgZnVuIHN0IC0+IGEuKFJhbmRvbS5TdGF0ZS5pbnQgc3QgbilcblxubGV0IHJhbmRvbV9sZW4gbiBnIHN0ID0gQXJyYXkuaW5pdCBuIChmdW4gXyAtPiBnIHN0KVxuXG5sZXQgcmFuZG9tIGcgc3QgPVxuICBsZXQgbiA9IFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBuIGcgc3RcblxubGV0IHJhbmRvbV9ub25fZW1wdHkgZyBzdCA9XG4gIGxldCBuID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBuIGcgc3RcblxubGV0IHBwID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgPyhwcF9zZXAgPSBmdW4gb3V0ICgpIC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIixAIFwiKSBwcF9pdGVtIG91dCBhID1cbiAgcHBfc3RhcnQgb3V0ICgpO1xuICBmb3IgayA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgaWYgayA+IDAgdGhlbiBwcF9zZXAgb3V0ICgpO1xuICAgIHBwX2l0ZW0gb3V0IGEuKGspXG4gIGRvbmU7XG4gIHBwX3N0b3Agb3V0ICgpXG5cbmxldCBwcF9pID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgPyhwcF9zZXAgPSBmdW4gb3V0ICgpIC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIixAIFwiKSBwcF9pdGVtIG91dCBhID1cbiAgcHBfc3RhcnQgb3V0ICgpO1xuICBmb3IgayA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgaWYgayA+IDAgdGhlbiBwcF9zZXAgb3V0ICgpO1xuICAgIHBwX2l0ZW0gayBvdXQgYS4oaylcbiAgZG9uZTtcbiAgcHBfc3RvcCBvdXQgKClcblxubGV0IHRvX3N0cmluZyA/KHNlcCA9IFwiLCBcIikgaXRlbV90b19zdHJpbmcgYSA9XG4gIEFycmF5LnRvX2xpc3QgYSB8PiBMaXN0Lm1hcCBpdGVtX3RvX3N0cmluZyB8PiBTdHJpbmcuY29uY2F0IHNlcFxuXG5sZXQgdG9fc2VxIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID49IGxlbmd0aCBhIHRoZW5cbiAgICAgIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBTZXEuQ29ucyAoYS4oaSksIGF1eCAoaSArIDEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgdG9faXRlciBhIGsgPSBpdGVyIGsgYVxuXG5sZXQgdG9fZ2VuIGEgPVxuICBsZXQgayA9IHJlZiAwIGluXG4gIGZ1biAoKSAtPlxuICAgIGlmICFrIDwgQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgeCA9IGEuKCFrKSBpblxuICAgICAgaW5jciBrO1xuICAgICAgU29tZSB4XG4gICAgKSBlbHNlXG4gICAgICBOb25lXG5cbigqKiB7MiBHZW5lcmljIEZ1bmN0aW9uc30gKilcblxubW9kdWxlIHR5cGUgTU9OT19BUlJBWSA9IHNpZ1xuICB0eXBlIGVsdFxuICB0eXBlIHRcblxuICB2YWwgbGVuZ3RoIDogdCAtPiBpbnRcbiAgdmFsIGdldCA6IHQgLT4gaW50IC0+IGVsdFxuICB2YWwgc2V0IDogdCAtPiBpbnQgLT4gZWx0IC0+IHVuaXRcbmVuZFxuXG4oKiBEdWFsIFBpdm90IFF1aWNrc29ydCAoWWFyb3NsYXZza2l5KVxuICAgZnJvbSBcImF2ZXJhZ2UgY2FzZSBhbmFseXNpcyBvZiBKYXZhIDcncyBEdWFsIFBpdm90IFF1aWNrc29ydFwiICopXG5tb2R1bGUgU29ydEdlbmVyaWMgKEEgOiBNT05PX0FSUkFZKSA9IHN0cnVjdFxuICBtb2R1bGUgUmFuZCA9IFJhbmRvbS5TdGF0ZVxuXG4gIGxldCBzZWVkXyA9IFt8IDEyMzQ1NiB8XVxuXG4gIHR5cGUgc3RhdGUgPSB7XG4gICAgbXV0YWJsZSBsOiBpbnQ7ICgqIGxlZnQgcG9pbnRlciAqKVxuICAgIG11dGFibGUgZzogaW50OyAoKiByaWdodCBwb2ludGVyICopXG4gICAgbXV0YWJsZSBrOiBpbnQ7XG4gIH1cblxuICBsZXQgcmFuZF9pZHhfIHJhbmQgaSBqID0gaSArIFJhbmQuaW50IHJhbmQgKGogLSBpKVxuXG4gIGxldCBzd2FwXyBhIGkgaiA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgKClcbiAgICBlbHNlIChcbiAgICAgIGxldCB0bXAgPSBBLmdldCBhIGkgaW5cbiAgICAgIEEuc2V0IGEgaSAoQS5nZXQgYSBqKTtcbiAgICAgIEEuc2V0IGEgaiB0bXBcbiAgICApXG5cbiAgbGV0IHNvcnQgfmNtcCBhID1cbiAgICBsZXQgcmVjIGluc2VydF8gYSBpIGsgPVxuICAgICAgaWYgayA8IGkgdGhlblxuICAgICAgICAoKVxuICAgICAgZWxzZSBpZiBjbXAgKEEuZ2V0IGEgaykgKEEuZ2V0IGEgKGsgKyAxKSkgPiAwIHRoZW4gKFxuICAgICAgICBzd2FwXyBhIGsgKGsgKyAxKTtcbiAgICAgICAgaW5zZXJ0XyBhIGkgKGsgLSAxKVxuICAgICAgKVxuICAgIGluXG4gICAgKCogcmVjdXJzaXZlIHBhcnQgb2YgaW5zZXJ0aW9uIHNvcnQgKilcbiAgICBsZXQgcmVjIHNvcnRfaW5zZXJ0aW9uX3JlYyBhIGkgaiBrID1cbiAgICAgIGlmIGsgPCBqIHRoZW4gKFxuICAgICAgICBpbnNlcnRfIGEgaSAoayAtIDEpO1xuICAgICAgICBzb3J0X2luc2VydGlvbl9yZWMgYSBpIGogKGsgKyAxKVxuICAgICAgKVxuICAgIGluXG4gICAgKCogaW5zZXJ0aW9uIHNvcnQsIGZvciBzbWFsbCBzbGljZXMgKilcbiAgICBsZXQgc29ydF9pbnNlcnRpb24gYSBpIGogPVxuICAgICAgaWYgaiAtIGkgPiAxIHRoZW4gc29ydF9pbnNlcnRpb25fcmVjIGEgaSBqIChpICsgMSlcbiAgICBpblxuICAgIGxldCByYW5kID0gUmFuZC5tYWtlIHNlZWRfIGluXG4gICAgKCogc29ydCBzbGljZS5cbiAgICAgICBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHRoZSB0d28gcGl2b3RzIGFyZSBlcXVhbCwgYnV0IGl0J3MgdW5saWtlbHkuICopXG4gICAgbGV0IHJlYyBzb3J0X3NsaWNlXyB+c3QgYSBpIGogPVxuICAgICAgaWYgaiAtIGkgPiAxMCB0aGVuIChcbiAgICAgICAgc3QubCA8LSBpO1xuICAgICAgICBzdC5nIDwtIGogLSAxO1xuICAgICAgICBzdC5rIDwtIGk7XG4gICAgICAgICgqIGNob29zZSBwaXZvdHMgKilcbiAgICAgICAgbGV0IHAgPSBBLmdldCBhIChyYW5kX2lkeF8gcmFuZCBpIGopIGluXG4gICAgICAgIGxldCBxID0gQS5nZXQgYSAocmFuZF9pZHhfIHJhbmQgaSBqKSBpblxuICAgICAgICAoKiBpbnZhcmlhbnQ6IHN0LnAgPD0gc3QucSwgc3dhcCB0aGVtIG90aGVyd2lzZSAqKVxuICAgICAgICBsZXQgcCwgcSA9XG4gICAgICAgICAgaWYgY21wIHAgcSA+IDAgdGhlblxuICAgICAgICAgICAgcSwgcFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHAsIHFcbiAgICAgICAgaW5cbiAgICAgICAgd2hpbGUgc3QuayA8PSBzdC5nIGRvXG4gICAgICAgICAgbGV0IGN1ciA9IEEuZ2V0IGEgc3QuayBpblxuICAgICAgICAgIGlmIGNtcCBjdXIgcCA8IDAgdGhlbiAoXG4gICAgICAgICAgICAoKiBpbnNlcnQgaW4gbGVmdG1vc3QgYmFuZCAqKVxuICAgICAgICAgICAgaWYgc3QuayA8PiBzdC5sIHRoZW4gc3dhcF8gYSBzdC5rIHN0Lmw7XG4gICAgICAgICAgICBzdC5sIDwtIHN0LmwgKyAxXG4gICAgICAgICAgKSBlbHNlIGlmIGNtcCBjdXIgcSA+IDAgdGhlbiAoXG4gICAgICAgICAgICAoKiBpbnNlcnQgaW4gcmlnaHRtb3N0IGJhbmQgKilcbiAgICAgICAgICAgIHdoaWxlIHN0LmsgPCBzdC5nICYmIGNtcCAoQS5nZXQgYSBzdC5nKSBxID4gMCBkb1xuICAgICAgICAgICAgICBzdC5nIDwtIHN0LmcgLSAxXG4gICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgc3dhcF8gYSBzdC5rIHN0Lmc7XG4gICAgICAgICAgICBzdC5nIDwtIHN0LmcgLSAxO1xuICAgICAgICAgICAgKCogdGhlIGVsZW1lbnQgc3dhcHBlZCBmcm9tIHRoZSByaWdodCBtaWdodCBiZSBpbiB0aGUgZmlyc3Qgc2l0dWF0aW9uLlxuICAgICAgICAgICAgICAgdGhhdCBpcywgPCBwICAod2Uga25vdyBpdCdzIDw9IHEgYWxyZWFkeSkgKilcbiAgICAgICAgICAgIGlmIGNtcCAoQS5nZXQgYSBzdC5rKSBwIDwgMCB0aGVuIChcbiAgICAgICAgICAgICAgaWYgc3QuayA8PiBzdC5sIHRoZW4gc3dhcF8gYSBzdC5rIHN0Lmw7XG4gICAgICAgICAgICAgIHN0LmwgPC0gc3QubCArIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0LmsgPC0gc3QuayArIDFcbiAgICAgICAgZG9uZTtcbiAgICAgICAgKCogc2F2ZSB2YWx1ZXMgYmVmb3JlIHJlY3Vyc2luZyAqKVxuICAgICAgICBsZXQgbCA9IHN0LmwgYW5kIGcgPSBzdC5nIGFuZCBzb3J0X21pZGRsZSA9IGNtcCBwIHEgPCAwIGluXG4gICAgICAgIHNvcnRfc2xpY2VfIH5zdCBhIGkgbDtcbiAgICAgICAgaWYgc29ydF9taWRkbGUgdGhlbiBzb3J0X3NsaWNlXyB+c3QgYSBsIChnICsgMSk7XG4gICAgICAgIHNvcnRfc2xpY2VfIH5zdCBhIChnICsgMSkgalxuICAgICAgKSBlbHNlXG4gICAgICAgIHNvcnRfaW5zZXJ0aW9uIGEgaSBqXG4gICAgaW5cbiAgICBpZiBBLmxlbmd0aCBhID4gMCB0aGVuIChcbiAgICAgIGxldCBzdCA9IHsgbCA9IDA7IGcgPSBBLmxlbmd0aCBhOyBrID0gMCB9IGluXG4gICAgICBzb3J0X3NsaWNlXyB+c3QgYSAwIChBLmxlbmd0aCBhKVxuICAgIClcbmVuZFxuXG5sZXQgc29ydF9nZW5lcmljICh0eXBlIGFyciBlbHQpXG4gICAgKG1vZHVsZSBBIDogTU9OT19BUlJBWSB3aXRoIHR5cGUgdCA9IGFyciBhbmQgdHlwZSBlbHQgPSBlbHQpIH5jbXAgYSA9XG4gIGxldCBtb2R1bGUgUyA9IFNvcnRHZW5lcmljIChBKSBpblxuICBTLnNvcnQgfmNtcCBhXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA+Pj0gKSBhIGYgPSBmbGF0X21hcCBmIGFcbiAgbGV0ICggPj58ICkgYSBmID0gbWFwIGYgYVxuICBsZXQgKCA+fD0gKSBhIGYgPSBtYXAgZiBhXG4gIGxldCAoIC0tICkgPSAoIC0tIClcbiAgbGV0ICggLS1eICkgPSAoIC0tXiApXG5cbiAgdHlwZSAnYSB0ID0gJ2EgYXJyYXlcblxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG4gIGxldCAoIGxldCsgKSA9ICggPnw9IClcbiAgbGV0W0BpbmxpbmVdICggYW5kKyApIGExIGEyID0gbW9ub2lkX3Byb2R1Y3QgKGZ1biB4IHkgLT4geCwgeSkgYTEgYTJcbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG4iLCIoKiBiYWNrcG9ydCBuZXcgZnVuY3Rpb25zIGZyb20gc3RkbGliIGhlcmUgKilcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzJcIl1cblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aHMgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF8gOjogXyAtPiAtMVxuICB8IF8gOjogXywgW10gLT4gMVxuICB8IF8gOjogdGFpbDEsIF8gOjogdGFpbDIgLT4gY29tcGFyZV9sZW5ndGhzIHRhaWwxIHRhaWwyXG5cbmxldCByZWMgY29tcGFyZV9sZW5ndGhfd2l0aCBsIG4gPVxuICBtYXRjaCBsLCBuIHdpdGhcbiAgfCBfIHdoZW4gbiA8IDAgLT4gMVxuICB8IFtdLCAwIC0+IDBcbiAgfCBbXSwgXyAtPiAtMVxuICB8IF8gOjogdGFpbCwgXyAtPiBjb21wYXJlX2xlbmd0aF93aXRoIHRhaWwgKG4gLSAxKVxuXG5sZXQgcmVjIGFzc29jX29wdCB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgKHksIHYpIDo6IF8gd2hlbiBTdGRsaWIuKCA9ICkgeCB5IC0+IFNvbWUgdlxuICB8IF8gOjogdGFpbCAtPiBhc3NvY19vcHQgeCB0YWlsXG5cbmxldCByZWMgYXNzcV9vcHQgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8ICh5LCB2KSA6OiBfIHdoZW4gU3RkbGliLiggPT0gKSB4IHkgLT4gU29tZSB2XG4gIHwgXyA6OiB0YWlsIC0+IGFzc3Ffb3B0IHggdGFpbFxuXG5bQEBAb2NhbWwud2FybmluZyBcIiszMlwiXVxuXG4oKiBlbmQgb2YgYmFja3BvcnQgKilcblxuaW5jbHVkZSBMaXN0XG5cbmxldCBlbXB0eSA9IFtdXG5cbmxldCBpc19lbXB0eSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gdHJ1ZVxuICB8IF8gOjogXyAtPiBmYWxzZVxuXG5sZXQgbWd1YXJkIGMgPVxuICBpZiBjIHRoZW5cbiAgICBbICgpIF1cbiAgZWxzZVxuICAgIFtdXG5cbigqKiBtYXggZGVwdGggZm9yIGRpcmVjdCByZWN1cnNpb24gKilcbmxldCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gPSAxMDAwXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCB0YWlsX21hcCBmIGwgPVxuICAoKiBVbndpbmQgdGhlIGxpc3Qgb2YgdHVwbGVzLCByZWNvbnN0cnVjdGluZyB0aGUgZnVsbCBsaXN0IGZyb250LXRvLWJhY2suXG4gICAgIEBwYXJhbSB0YWlsX2FjYyBhIHN1ZmZpeCBvZiB0aGUgZmluYWwgbGlzdDsgd2UgYXBwZW5kIHR1cGxlcycgY29udGVudFxuICAgICBhdCB0aGUgZnJvbnQgb2YgaXQgKilcbiAgbGV0IHJlYyByZWJ1aWxkIHRhaWxfYWNjID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHRhaWxfYWNjXG4gICAgfCAoeTAsIHkxLCB5MiwgeTMsIHk0LCB5NSwgeTYsIHk3LCB5OCkgOjogYnMgLT5cbiAgICAgIHJlYnVpbGRcbiAgICAgICAgKHkwIDo6IHkxIDo6IHkyIDo6IHkzIDo6IHk0IDo6IHk1IDo6IHk2IDo6IHk3IDo6IHk4IDo6IHRhaWxfYWNjKVxuICAgICAgICBic1xuICBpblxuICAoKiBDcmVhdGUgYSBjb21wcmVzc2VkIHJldmVyc2UtbGlzdCByZXByZXNlbnRhdGlvbiB1c2luZyB0dXBsZXNcbiAgICAgQHBhcmFtIHR1cGxlX2FjYyBhIHJldmVyc2UgbGlzdCBvZiBjaHVua3MgbWFwcGVkIHdpdGggW2ZdICopXG4gIGxldCByZWMgZGl2ZSB0dXBsZV9hY2MgPSBmdW5jdGlvblxuICAgIHwgeDAgOjogeDEgOjogeDIgOjogeDMgOjogeDQgOjogeDUgOjogeDYgOjogeDcgOjogeDggOjogeHMgLT5cbiAgICAgIGxldCB5MCA9IGYgeDAgaW5cbiAgICAgIGxldCB5MSA9IGYgeDEgaW5cbiAgICAgIGxldCB5MiA9IGYgeDIgaW5cbiAgICAgIGxldCB5MyA9IGYgeDMgaW5cbiAgICAgIGxldCB5NCA9IGYgeDQgaW5cbiAgICAgIGxldCB5NSA9IGYgeDUgaW5cbiAgICAgIGxldCB5NiA9IGYgeDYgaW5cbiAgICAgIGxldCB5NyA9IGYgeDcgaW5cbiAgICAgIGxldCB5OCA9IGYgeDggaW5cbiAgICAgIGRpdmUgKCh5MCwgeTEsIHkyLCB5MywgeTQsIHk1LCB5NiwgeTcsIHk4KSA6OiB0dXBsZV9hY2MpIHhzXG4gICAgfCB4cyAtPlxuICAgICAgKCogUmV2ZXJzZSBkaXJlY3Rpb24sIGZpbmlzaGluZyBvZmYgd2l0aCBhIGRpcmVjdCBtYXAgKilcbiAgICAgIGxldCB0YWlsID0gTGlzdC5tYXAgZiB4cyBpblxuICAgICAgcmVidWlsZCB0YWlsIHR1cGxlX2FjY1xuICBpblxuICBkaXZlIFtdIGxcblxubGV0IG1hcCBmIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBmIGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgWyB4IF0gLT4gWyBmIHggXVxuICAgIHwgWyB4MTsgeDIgXSAtPlxuICAgICAgbGV0IHkxID0gZiB4MSBpblxuICAgICAgWyB5MTsgZiB4MiBdXG4gICAgfCBbIHgxOyB4MjsgeDMgXSAtPlxuICAgICAgbGV0IHkxID0gZiB4MSBpblxuICAgICAgbGV0IHkyID0gZiB4MiBpblxuICAgICAgWyB5MTsgeTI7IGYgeDMgXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHRhaWxfbWFwIGYgbFxuICAgIHwgeDEgOjogeDIgOjogeDMgOjogeDQgOjogbCcgLT5cbiAgICAgIGxldCB5MSA9IGYgeDEgaW5cbiAgICAgIGxldCB5MiA9IGYgeDIgaW5cbiAgICAgIGxldCB5MyA9IGYgeDMgaW5cbiAgICAgIGxldCB5NCA9IGYgeDQgaW5cbiAgICAgIHkxIDo6IHkyIDo6IHkzIDo6IHk0IDo6IGRpcmVjdCBmIChpIC0gMSkgbCdcbiAgaW5cbiAgZGlyZWN0IGYgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGxcblxubGV0IGFwcGVuZCBsMSBsMiA9XG4gIGxldFtAaW5saW5lXSBzYWZlIGwxIGwyID0gTGlzdC5yZXZfYXBwZW5kIChMaXN0LnJldiBsMSkgbDIgaW5cbiAgbGV0IHJlYyBkaXJlY3QgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEgd2l0aFxuICAgIHwgW10gLT4gbDJcbiAgICB8IFsgeCBdIC0+IHggOjogbDJcbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIGwxIGwyXG4gICAgfCB4IDo6IHkgOjogdGwxIC0+IHggOjogeSA6OiBkaXJlY3QgKGkgLSAxKSB0bDEgbDJcbiAgaW5cbiAgZGlyZWN0IDEwMDAgbDEgbDJcblxuW0BAQGVsaWZsdCA1LjFdXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIG1hcCBmIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogdGwgLT5cbiAgICBsZXQgeCA9IGYgeCBpblxuICAgIHggOjogbWFwIGYgdGxcblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgYXBwZW5kIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICB8IFtdIC0+IGwyXG4gIHwgeCA6OiB0bDEgLT4geCA6OiBhcHBlbmQgdGwxIGwyXG5cbltAQEBlbHNlX11cblxuKCogVFJNQyBmdW5jdGlvbnMgb24gPj0gNS4xLCBubyBuZWVkIHRvIGJyaW5nIG91ciBvd24gKilcblxuW0BAQGVuZGlmXVxuXG4oKiBXcmFwcGVyIGFyb3VuZCBbYXBwZW5kXSB0byBvcHRpbWl6ZSBmb3IgdGhlIGNhc2Ugb2Ygc2hvcnQgW2wxXSxcbiAgIGFuZCBmb3IgdGhlIGNhc2Ugb2YgW2wyID0gW11dIChzYXZlcyB0aGUgd2hvbGUgY29weSBvZiBbbDFdISkgKilcbmxldFtAaW5saW5lXSBhcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBfIC0+IGwyXG4gIHwgXywgW10gLT4gbDFcbiAgfCBbIHggXSwgXyAtPiB4IDo6IGwyXG4gIHwgeCA6OiB5IDo6IHRsMSwgXyAtPiB4IDo6IHkgOjogYXBwZW5kIHRsMSBsMlxuXG5sZXQgKCBAICkgPSBhcHBlbmRcbmxldFtAaW5saW5lXSBjb25zJyBsIHggPSB4IDo6IGxcblxubGV0IGNvbnNfbWF5YmUgbyBsID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgU29tZSB4IC0+IHggOjogbFxuICB8IE5vbmUgLT4gbFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgZGlyZWN0X2RlcHRoX2ZpbHRlcl8gPSAxMF8wMDBcblxubGV0IGZpbHRlciBwIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBpIHAgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgcCBsIFtdXG4gICAgfCB4IDo6IGwnIHdoZW4gbm90IChwIHgpIC0+IGRpcmVjdCBpIHAgbCdcbiAgICB8IHggOjogbCcgLT4geCA6OiBkaXJlY3QgKGkgLSAxKSBwIGwnXG4gIGFuZCBzYWZlIHAgbCBhY2MgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIHdoZW4gbm90IChwIHgpIC0+IHNhZmUgcCBsJyBhY2NcbiAgICB8IHggOjogbCcgLT4gc2FmZSBwIGwnICh4IDo6IGFjYylcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9maWx0ZXJfIHAgbFxuXG5bQEBAZWxpZmx0IDUuMV1cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgZmlsdGVyIGYgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiB0bCAtPlxuICAgIGxldCBrZWVwID0gZiB4IGluXG4gICAgaWYga2VlcCB0aGVuXG4gICAgICB4IDo6IGZpbHRlciBmIHRsXG4gICAgZWxzZVxuICAgICAgZmlsdGVyIGYgdGxcblxuW0BAQGVsc2VfXVxuKCogc3RkbGliJ3MgZmlsdGVyIHVzZXMgVFJNQyBhZnRlciA1LjEgKilcblxuW0BAQGVuZGlmXVxuXG5sZXQgZm9sZF9yaWdodCBmIGwgYWNjID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBmIGwgYWNjID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgZiAoTGlzdC5yZXYgbCkgYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gZGlyZWN0IChpIC0gMSkgZiBsJyBhY2MgaW5cbiAgICAgIGYgeCBhY2NcbiAgYW5kIHNhZmUgZiBsIGFjYyA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSBmIHggYWNjIGluXG4gICAgICBzYWZlIGYgbCcgYWNjXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gZiBsIGFjY1xuXG5sZXQgcmVjIGZvbGRfd2hpbGUgZiBhY2MgPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY1xuICB8IGUgOjogbCAtPlxuICAgIGxldCBhY2MsIGNvbnQgPSBmIGFjYyBlIGluXG4gICAgKG1hdGNoIGNvbnQgd2l0aFxuICAgIHwgYFN0b3AgLT4gYWNjXG4gICAgfCBgQ29udGludWUgLT4gZm9sZF93aGlsZSBmIGFjYyBsKVxuXG5sZXQgZm9sZF9tYXAgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4IGluXG4gICAgICBhdXggZiBhY2MgKHkgOjogbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIFtdIGxcblxubGV0IGZvbGRfbWFwX2kgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGkgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIGkgeCBpblxuICAgICAgYXV4IGYgYWNjIChpICsgMSkgKHkgOjogbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIDAgW10gbFxuXG5sZXQgZm9sZF9vbl9tYXAgfmYgfnJlZHVjZSBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYyA9IHJlZHVjZSBhY2MgKGYgeCkgaW5cbiAgICAgIGF1eCBhY2MgbCdcbiAgaW5cbiAgYXV4IGFjYyBsXG5cbmxldCBzY2FuX2xlZnQgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGxfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgbF9hY2NcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgbGV0IGFjYyA9IGYgYWNjIHggaW5cbiAgICAgIGxldCBsX2FjYyA9IGFjYyA6OiBsX2FjYyBpblxuICAgICAgYXV4IGYgYWNjIGxfYWNjIHRhaWxcbiAgaW5cbiAgYXV4IGYgYWNjIFsgYWNjIF0gbFxuXG5sZXQgcmVkdWNlIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT4gU29tZSAoZm9sZF9sZWZ0IGYgeCBsKVxuXG5sZXQgcmVkdWNlX2V4biBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkNDTGlzdC5yZWR1Y2VfZXhuXCIpXG4gIHwgeCA6OiBsIC0+IGZvbGRfbGVmdCBmIHggbFxuXG5sZXQgZm9sZF9tYXAyIGYgYWNjIGwxIGwyID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgbWFwX2FjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gaW52YWxpZF9hcmcgXCJmb2xkX21hcDJcIlxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4MSB4MiBpblxuICAgICAgYXV4IGYgYWNjICh5IDo6IG1hcF9hY2MpIGwxJyBsMidcbiAgaW5cbiAgYXV4IGYgYWNjIFtdIGwxIGwyXG5cbmxldCBmb2xkX2ZpbHRlcl9tYXAgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4IGluXG4gICAgICBhdXggZiBhY2MgKGNvbnNfbWF5YmUgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgW10gbFxuXG5sZXQgZm9sZF9maWx0ZXJfbWFwX2kgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGkgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIGkgeCBpblxuICAgICAgYXV4IGYgYWNjIChpICsgMSkgKGNvbnNfbWF5YmUgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgMCBbXSBsXG5cbmxldCBmb2xkX2ZsYXRfbWFwIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBtYXBfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjLCBMaXN0LnJldiBtYXBfYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjLCB5ID0gZiBhY2MgeCBpblxuICAgICAgYXV4IGYgYWNjIChMaXN0LnJldl9hcHBlbmQgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgW10gbFxuXG5sZXQgZm9sZF9mbGF0X21hcF9pIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBpIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyBpIHggaW5cbiAgICAgIGF1eCBmIGFjYyAoaSArIDEpIChMaXN0LnJldl9hcHBlbmQgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgMCBbXSBsXG5cbltAQEBpZmx0IDQuMTRdXG5cbigqIGtlZXAgdGhpcyBiZWNhdXNlIGl0J3MgdGFpbHJlYyBmb3IgPCA1LjEgKilcbmxldCBpbml0IGxlbiBmID1cbiAgbGV0IHJlYyBpbmRpcmVjdF8gaSBhY2MgPVxuICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgZWxzZSAoXG4gICAgICBsZXQgeCA9IGYgaSBpblxuICAgICAgaW5kaXJlY3RfIChpICsgMSkgKHggOjogYWNjKVxuICAgIClcbiAgaW5cbiAgbGV0IHJlYyBkaXJlY3RfIGkgPVxuICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgW11cbiAgICBlbHNlIGlmIGkgPCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gdGhlbiAoXG4gICAgICBsZXQgeCA9IGYgaSBpblxuICAgICAgeCA6OiBkaXJlY3RfIChpICsgMSlcbiAgICApIGVsc2VcbiAgICAgIGluZGlyZWN0XyBpIFtdXG4gIGluXG4gIGlmIGxlbiA8IDAgdGhlblxuICAgIGludmFsaWRfYXJnIFwiaW5pdFwiXG4gIGVsc2UgaWYgbGVuID0gMCB0aGVuXG4gICAgW11cbiAgZWxzZVxuICAgIGRpcmVjdF8gMFxuXG5sZXQgcmVjIHVuZm9sZF9rb250IGYgc2VlZCBrID1cbiAgbWF0Y2ggZiBzZWVkIHdpdGhcbiAgfCBOb25lIC0+IGsgW11cbiAgfCBTb21lICh2LCBuZXh0KSAtPlxuICAgIGxldCBrJyB0bCA9IGsgKHYgOjogdGwpIGluXG4gICAgdW5mb2xkX2tvbnQgZiBuZXh0IGsnXG5cbmxldFtAaW5saW5lXSB1bmZvbGQgZiBzZWVkID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBmIHNlZWQgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIHVuZm9sZF9rb250IGYgc2VlZCAoZnVuIHggLT4geClcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIGYgc2VlZCB3aXRoXG4gICAgICB8IE5vbmUgLT4gW11cbiAgICAgIHwgU29tZSAodiwgbmV4dCkgLT4gdiA6OiBkaXJlY3QgKGkgLSAxKSBmIG5leHRcbiAgICApXG4gIGluXG4gIGRpcmVjdCAxMDAgZiBzZWVkXG5cbltAQEBlbGlmbHQgNS4xXVxuXG5sZXQgaW5pdCBuIGYgPVxuICBsZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBpbml0XyBpIG4gZiA9XG4gICAgaWYgaSA9IG4gdGhlblxuICAgICAgW11cbiAgICBlbHNlIChcbiAgICAgIGxldCB4ID0gZiBpIGluXG4gICAgICB4IDo6IGluaXRfIChpICsgMSkgbiBmXG4gICAgKVxuICBpblxuICBpbml0XyAwIG4gZlxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyB1bmZvbGQgZiBzZWVkID1cbiAgbWF0Y2ggZiBzZWVkIHdpdGhcbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSAodiwgbmV4dCkgLT4gdiA6OiB1bmZvbGQgZiBuZXh0XG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgdW5mb2xkIGYgc2VlZCA9XG4gIG1hdGNoIGYgc2VlZCB3aXRoXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgKHYsIG5leHQpIC0+IHYgOjogdW5mb2xkIGYgbmV4dFxuXG5bQEBAZW5kaWZdXG5cbmxldCByZWMgY29tcGFyZSBmIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IF8sIFtdIC0+IDFcbiAgfCBbXSwgXyAtPiAtMVxuICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgbGV0IGMgPSBmIHgxIHgyIGluXG4gICAgaWYgYyA8PiAwIHRoZW5cbiAgICAgIGNcbiAgICBlbHNlXG4gICAgICBjb21wYXJlIGYgbDEnIGwyJ1xuXG5sZXQgcmVjIGVxdWFsIGYgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiB0cnVlXG4gIHwgW10sIF8gfCBfLCBbXSAtPiBmYWxzZVxuICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+IGYgeDEgeDIgJiYgZXF1YWwgZiBsMScgbDInXG5cbltAQEBpZmx0IDUuMV1cblxubGV0IHJlYyBmbGF0X21hcF9rb250IGYgbCBrb250ID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4ga29udCBbXVxuICB8IFsgeCBdIC0+XG4gICAgbGV0IHggPSBmIHggaW5cbiAgICBrb250IHhcbiAgfCB4IDo6IGwnIC0+XG4gICAgbGV0IHggPSBmIHggaW5cbiAgICBsZXQga29udCcgdGFpbCA9IGtvbnQgKGFwcGVuZCB4IHRhaWwpIGluXG4gICAgZmxhdF9tYXBfa29udCBmIGwnIGtvbnQnXG5cbmxldFtAaW5saW5lXSBmbGF0X21hcCBmIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IFsgeCBdIC0+IGYgeFxuICB8IF8gOjogXyAtPiBmbGF0X21hcF9rb250IGYgbCBGdW4uaWRcblxuW0BAQGVsc2VfXVxuXG5sZXQgZmxhdF9tYXAgPSBjb25jYXRfbWFwXG5cbltAQEBlbmRpZl1cblxubGV0IGZsYXRfbWFwX2kgZiBsID1cbiAgbGV0IHJlYyBhdXggZiBpIGwga29udCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBrb250IFtdXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgeSA9IGYgaSB4IGluXG4gICAgICBsZXQga29udCcgdGFpbCA9XG4gICAgICAgIG1hdGNoIHkgd2l0aFxuICAgICAgICB8IFtdIC0+IGtvbnQgdGFpbFxuICAgICAgICB8IFsgeCBdIC0+IGtvbnQgKHggOjogdGFpbClcbiAgICAgICAgfCBbIHg7IHkgXSAtPiBrb250ICh4IDo6IHkgOjogdGFpbClcbiAgICAgICAgfCBsIC0+IGtvbnQgKGFwcGVuZCBsIHRhaWwpXG4gICAgICBpblxuICAgICAgYXV4IGYgKGkgKyAxKSBsJyBrb250J1xuICBpblxuICBhdXggZiAwIGwgKGZ1biBsIC0+IGwpXG5cbmxldCBmbGF0dGVuIGwgPSBmb2xkX3JpZ2h0IGFwcGVuZCBsIFtdXG5cbmxldCBjb3VudCBmIGwgPVxuICBmb2xkX2xlZnRcbiAgICAoZnVuIG4geCAtPlxuICAgICAgaWYgZiB4IHRoZW5cbiAgICAgICAgc3VjYyBuXG4gICAgICBlbHNlXG4gICAgICAgIG4pXG4gICAgMCBsXG5cbmxldCBjb3VudF90cnVlX2ZhbHNlIHAgbCA9XG4gIGZvbGRfbGVmdFxuICAgIChmdW4gKG9rLCBrbykgeCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgb2sgKyAxLCBrb1xuICAgICAgZWxzZVxuICAgICAgICBvaywga28gKyAxKVxuICAgICgwLCAwKSBsXG5cbmxldFtAaW5saW5lXSBwcm9kdWN0IGYgbDEgbDIgPSBmbGF0X21hcCAoZnVuIHggLT4gbWFwIChmdW4geSAtPiBmIHggeSkgbDIpIGwxXG5cbmxldCBmb2xkX3Byb2R1Y3QgZiBhY2MgbDEgbDIgPVxuICBMaXN0LmZvbGRfbGVmdFxuICAgIChmdW4gYWNjIHgxIC0+IExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIHgyIC0+IGYgYWNjIHgxIHgyKSBhY2MgbDIpXG4gICAgYWNjIGwxXG5cbmxldCBkaWFnb25hbCBsID1cbiAgbGV0IHJlYyBnZW4gYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeSAtPiAoeCwgeSkgOjogYWNjKSBhY2MgbCcgaW5cbiAgICAgIGdlbiBhY2MgbCdcbiAgaW5cbiAgZ2VuIFtdIGxcblxubGV0IHBhcnRpdGlvbl9tYXBfZWl0aGVyIGYgbCA9XG4gIGxldCByZWMgaXRlciBmIGwxIGwyIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgbDEsIExpc3QucmV2IGwyXG4gICAgfCB4IDo6IHRsIC0+XG4gICAgICAobWF0Y2ggZiB4IHdpdGhcbiAgICAgIHwgQ0NFaXRoZXIuTGVmdCB5IC0+IGl0ZXIgZiAoeSA6OiBsMSkgbDIgdGxcbiAgICAgIHwgQ0NFaXRoZXIuUmlnaHQgeSAtPiBpdGVyIGYgbDEgKHkgOjogbDIpIHRsKVxuICBpblxuICBpdGVyIGYgW10gW10gbFxuXG5sZXQgcGFydGl0aW9uX2ZpbHRlcl9tYXAgZiBsID1cbiAgbGV0IHJlYyBpdGVyIGYgbDEgbDIgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBsMSwgTGlzdC5yZXYgbDJcbiAgICB8IHggOjogdGwgLT5cbiAgICAgIChtYXRjaCBmIHggd2l0aFxuICAgICAgfCBgTGVmdCB5IC0+IGl0ZXIgZiAoeSA6OiBsMSkgbDIgdGxcbiAgICAgIHwgYFJpZ2h0IHkgLT4gaXRlciBmIGwxICh5IDo6IGwyKSB0bFxuICAgICAgfCBgRHJvcCAtPiBpdGVyIGYgbDEgbDIgdGwpXG4gIGluXG4gIGl0ZXIgZiBbXSBbXSBsXG5cbmxldCBwYXJ0aXRpb25fbWFwID0gcGFydGl0aW9uX2ZpbHRlcl9tYXBcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IGNvbWJpbmUgbDEgbDIgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBsMSBsMiBbXVxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogZGlyZWN0IChpIC0gMSkgbDEnIGwyJ1xuICAgIHwgXywgXyAtPiBpbnZhbGlkX2FyZyBcIkNDTGlzdC5jb21iaW5lXCJcbiAgYW5kIHNhZmUgbDEgbDIgYWNjID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gc2FmZSBsMScgbDInIEBAICgoeDEsIHgyKSA6OiBhY2MpXG4gICAgfCBfLCBfIC0+IGludmFsaWRfYXJnIFwiQ0NMaXN0LmNvbWJpbmVcIlxuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGwxIGwyXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgY29tYmluZSBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IFtdXG4gIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogY29tYmluZSBsMScgbDInXG4gIHwgXywgXyAtPiBpbnZhbGlkX2FyZyBcIkNDTGlzdC5jb21iaW5lXCJcblxuW0BAQGVuZGlmXVxuXG5sZXQgY29tYmluZV9nZW4gbDEgbDIgPVxuICBsZXQgbDEgPSByZWYgbDEgaW5cbiAgbGV0IGwyID0gcmVmIGwyIGluXG4gIGZ1biAoKSAtPlxuICAgIG1hdGNoICFsMSwgIWwyIHdpdGhcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gTm9uZVxuICAgIHwgeDEgOjogdGFpbDEsIHgyIDo6IHRhaWwyIC0+XG4gICAgICBsMSA6PSB0YWlsMTtcbiAgICAgIGwyIDo9IHRhaWwyO1xuICAgICAgU29tZSAoeDEsIHgyKVxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgY29tYmluZV9zaG9ydGVzdCBsMSBsMiA9XG4gIGxldCByZWMgZGlyZWN0IGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBfLCBbXSB8IFtdLCBfIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBsMSBsMiBbXVxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogZGlyZWN0IChpIC0gMSkgbDEnIGwyJ1xuICBhbmQgc2FmZSBsMSBsMiBhY2MgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBhY2MgPSAoeDEsIHgyKSA6OiBhY2MgaW5cbiAgICAgIHNhZmUgbDEnIGwyJyBhY2NcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBsMSBsMlxuXG5bQEBAZWxzZV9dXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGNvbWJpbmVfc2hvcnRlc3QgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IF8sIFtdIHwgW10sIF8gLT4gW11cbiAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPiAoeDEsIHgyKSA6OiBjb21iaW5lX3Nob3J0ZXN0IGwxJyBsMidcblxuW0BAQGVuZGlmXVxuXG5sZXQgc3BsaXQgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXSwgW11cbiAgICB8IFsgKHgxLCB5MSkgXSAtPiBbIHgxIF0sIFsgeTEgXVxuICAgIHwgWyAoeDEsIHkxKTsgKHgyLCB5MikgXSAtPiBbIHgxOyB4MiBdLCBbIHkxOyB5MiBdXG4gICAgfCBbICh4MSwgeTEpOyAoeDIsIHkyKTsgKHgzLCB5MykgXSAtPiBbIHgxOyB4MjsgeDMgXSwgWyB5MTsgeTI7IHkzIF1cbiAgICB8IFsgKHgxLCB5MSk7ICh4MiwgeTIpOyAoeDMsIHkzKTsgKHg0LCB5NCkgXSAtPlxuICAgICAgWyB4MTsgeDI7IHgzOyB4NCBdLCBbIHkxOyB5MjsgeTM7IHk0IF1cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzcGxpdF9zbG93IFtdIFtdIGxcbiAgICB8ICh4MSwgeTEpIDo6ICh4MiwgeTIpIDo6ICh4MywgeTMpIDo6ICh4NCwgeTQpIDo6ICh4NSwgeTUpIDo6IGwnIC0+XG4gICAgICBsZXQgcngsIHJ5ID0gZGlyZWN0IChpIC0gMSkgbCcgaW5cbiAgICAgIHgxIDo6IHgyIDo6IHgzIDo6IHg0IDo6IHg1IDo6IHJ4LCB5MSA6OiB5MiA6OiB5MyA6OiB5NCA6OiB5NSA6OiByeVxuICBhbmQgc3BsaXRfc2xvdyBhY2MxIGFjYzIgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2MxLCBMaXN0LnJldiBhY2MyXG4gICAgfCAoeDEsIHgyKSA6OiB0YWlsIC0+XG4gICAgICBsZXQgYWNjMSA9IHgxIDo6IGFjYzEgYW5kIGFjYzIgPSB4MiA6OiBhY2MyIGluXG4gICAgICBzcGxpdF9zbG93IGFjYzEgYWNjMiB0YWlsXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbFxuXG5sZXQgcmV0dXJuIHggPSBbIHggXVxubGV0IHB1cmUgPSByZXR1cm5cbmxldCAoIDwqPiApIGZ1bnMgbCA9IHByb2R1Y3QgKGZ1biBmIHggLT4gZiB4KSBmdW5zIGxcblxubGV0IGNhcnRlc2lhbl9wcm9kdWN0IGwgPVxuICAoKiBbbGVmdF06IGVsZW1lbnRzIHBpY2tlZCBzbyBmYXJcbiAgICAgW3JpZ2h0XTogc2V0cyB0byBwaWNrIGVsZW1lbnRzIGZyb21cbiAgICAgW2FjY106IGFjY3VtdWxhdG9yIGZvciB0aGUgcmVzdWx0LCB0byBwYXNzIHRvIGNvbnRpbnVhdGlvblxuICAgICBba106IGNvbnRpbnVhdGlvbiAqKVxuICBsZXQgcmVjIHByb2RfcmVjIGxlZnQgcmlnaHQgayBhY2MgPVxuICAgIG1hdGNoIHJpZ2h0IHdpdGhcbiAgICB8IFtdIC0+IGsgYWNjIChMaXN0LnJldiBsZWZ0KVxuICAgIHwgbDEgOjogdGFpbCAtPlxuICAgICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiBwcm9kX3JlYyAoeCA6OiBsZWZ0KSB0YWlsIGsgYWNjKSBhY2MgbDFcbiAgaW5cbiAgcHJvZF9yZWMgW10gbCAoZnVuIGFjYyBsJyAtPiBsJyA6OiBhY2MpIFtdXG5cbigqIGNhcnRlc2lhbiBwcm9kdWN0IG9mIGxpc3RzIG9mIGxpc3RzICopXG5sZXQgbWFwX3Byb2R1Y3RfbCBmIGwgPVxuICBsZXQgbCA9IExpc3QubWFwIGYgbCBpblxuICBjYXJ0ZXNpYW5fcHJvZHVjdCBsXG5cbmxldCByZWMgc29ydGVkX21lbSB+Y21wIHggbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IGZhbHNlXG4gIHwgeSA6OiB0YWlsIC0+XG4gICAgKG1hdGNoIGNtcCB4IHkgd2l0aFxuICAgIHwgMCAtPiB0cnVlXG4gICAgfCBuIHdoZW4gbiA8IDAgLT4gZmFsc2VcbiAgICB8IF8gLT4gKHNvcnRlZF9tZW0gW0B0YWlsY2FsbF0pIH5jbXAgeCB0YWlsKVxuXG5sZXQgc29ydGVkX21lcmdlIH5jbXAgbDEgbDIgPVxuICBsZXQgcmVjIHJlY3Vyc2UgY21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDJcbiAgICB8IF8sIFtdIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDFcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICByZWN1cnNlIGNtcCAoeDEgOjogYWNjKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIGNtcCAoeDIgOjogYWNjKSBsMSBsMidcbiAgICAgIGVsc2VcbiAgICAgICAgcmVjdXJzZSBjbXAgKHgxIDo6IHgyIDo6IGFjYykgbDEnIGwyJ1xuICBpblxuICByZWN1cnNlIGNtcCBbXSBsMSBsMlxuXG5sZXQgc29ydGVkX2RpZmYgfmNtcCBsMSBsMiA9XG4gIGxldCByZWMgcmVjdXJzZSBjbXAgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIF8gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfLCBbXSAtPiBMaXN0LnJldl9hcHBlbmQgYWNjIGwxXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSBjbXAgKHgxIDo6IGFjYykgbDEnIGwyXG4gICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSBjbXAgYWNjIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIGNtcCBhY2MgbDEnIGwyJ1xuICBpblxuICByZWN1cnNlIGNtcCBbXSBsMSBsMlxuXG5sZXQgc29ydF91bmlxIH5jbXAgbCA9IExpc3Quc29ydF91bmlxIGNtcCBsXG5cbmxldCBpc19zb3J0ZWQgfmNtcCBsID1cbiAgbGV0IHJlYyBhdXggY21wID0gZnVuY3Rpb25cbiAgICB8IFtdIHwgWyBfIF0gLT4gdHJ1ZVxuICAgIHwgeCA6OiAoeSA6OiBfIGFzIHRhaWwpIC0+IGNtcCB4IHkgPD0gMCAmJiBhdXggY21wIHRhaWxcbiAgaW5cbiAgYXV4IGNtcCBsXG5cbmxldCBzb3J0ZWRfaW5zZXJ0IH5jbXAgPyh1bmlxID0gZmFsc2UpIHggbCA9XG4gIGxldCByZWMgYXV4IGNtcCB1bmlxIHggbGVmdCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2X2FwcGVuZCBsZWZ0IFsgeCBdXG4gICAgfCB5IDo6IHRhaWwgLT5cbiAgICAgIChtYXRjaCBjbXAgeCB5IHdpdGhcbiAgICAgIHwgMCAtPlxuICAgICAgICBsZXQgbCcgPVxuICAgICAgICAgIGlmIHVuaXEgdGhlblxuICAgICAgICAgICAgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHggOjogbFxuICAgICAgICBpblxuICAgICAgICBMaXN0LnJldl9hcHBlbmQgbGVmdCBsJ1xuICAgICAgfCBuIHdoZW4gbiA8IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGxlZnQgKHggOjogbClcbiAgICAgIHwgXyAtPiBhdXggY21wIHVuaXEgeCAoeSA6OiBsZWZ0KSB0YWlsKVxuICBpblxuICBhdXggY21wIHVuaXEgeCBbXSBsXG5cbmxldCBzb3J0ZWRfcmVtb3ZlIH5jbXAgPyhhbGwgPSBmYWxzZSkgeCBsID1cbiAgbGV0IHJlYyBhdXggY21wIGFsbCB4IGxlZnQgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBsZWZ0XG4gICAgfCB5IDo6IHRhaWwgLT5cbiAgICAgIChtYXRjaCBjbXAgeCB5IHdpdGhcbiAgICAgIHwgMCAtPlxuICAgICAgICBpZiBhbGwgdGhlblxuICAgICAgICAgIGF1eCBjbXAgYWxsIHggbGVmdCB0YWlsXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBMaXN0LnJldl9hcHBlbmQgbGVmdCB0YWlsXG4gICAgICB8IG4gd2hlbiBuIDwgMCAtPiBMaXN0LnJldl9hcHBlbmQgbGVmdCBsXG4gICAgICB8IF8gLT4gYXV4IGNtcCBhbGwgeCAoeSA6OiBsZWZ0KSB0YWlsKVxuICBpblxuICBhdXggY21wIGFsbCB4IFtdIGxcblxubGV0IHVuaXFfc3VjYyB+ZXEgbCA9XG4gIGxldCByZWMgZiBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFsgeCBdIC0+IExpc3QucmV2ICh4IDo6IGFjYylcbiAgICB8IHggOjogKHkgOjogXyBhcyB0YWlsKSB3aGVuIGVxIHggeSAtPiBmIGFjYyB0YWlsXG4gICAgfCB4IDo6IHRhaWwgLT4gZiAoeCA6OiBhY2MpIHRhaWxcbiAgaW5cbiAgZiBbXSBsXG5cbmxldCBncm91cF9zdWNjIH5lcSBsID1cbiAgbGV0IHJlYyBmIH5lcSBhY2MgY3VyIGwgPVxuICAgIG1hdGNoIGN1ciwgbCB3aXRoXG4gICAgfCBbXSwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfIDo6IF8sIFtdIC0+IExpc3QucmV2IChMaXN0LnJldiBjdXIgOjogYWNjKVxuICAgIHwgW10sIHggOjogdGwgLT4gZiB+ZXEgYWNjIFsgeCBdIHRsXG4gICAgfCB5IDo6IF8sIHggOjogdGwgd2hlbiBlcSB4IHkgLT4gZiB+ZXEgYWNjICh4IDo6IGN1cikgdGxcbiAgICB8IF8sIHggOjogdGwgLT4gZiB+ZXEgKExpc3QucmV2IGN1ciA6OiBhY2MpIFsgeCBdIHRsXG4gIGluXG4gIGYgfmVxIFtdIFtdIGxcblxubGV0IHNvcnRlZF9tZXJnZV91bmlxIH5jbXAgbDEgbDIgPVxuICBsZXQgcHVzaCB+Y21wIGFjYyB4ID1cbiAgICBtYXRjaCBhY2Mgd2l0aFxuICAgIHwgW10gLT4gWyB4IF1cbiAgICB8IHkgOjogXyB3aGVuIGNtcCB4IHkgPiAwIC0+IHggOjogYWNjXG4gICAgfCBfIC0+IGFjY1xuICAgICgqIGR1cGxpY2F0ZSwgZG8gbm90IHlpZWxkICopXG4gIGluXG4gIGxldCByZWMgcmVjdXJzZSB+Y21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsIHwgbCwgW10gLT5cbiAgICAgIGxldCBhY2MgPSBMaXN0LmZvbGRfbGVmdCAocHVzaCB+Y21wKSBhY2MgbCBpblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSB+Y21wIChwdXNoIH5jbXAgYWNjIHgxKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIH5jbXAgKHB1c2ggfmNtcCBhY2MgeDIpIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxIGwyJ1xuICAgICgqIGRyb3Agb25lIG9mIHRoZSBbeF0gKilcbiAgaW5cbiAgcmVjdXJzZSB+Y21wIFtdIGwxIGwyXG5cbmxldCBzb3J0ZWRfZGlmZl91bmlxIH5jbXAgbDEgbDIgPVxuICBsZXQgcHVzaCB+Y21wIGFjYyB4ID1cbiAgICBtYXRjaCBhY2Mgd2l0aFxuICAgIHwgW10gLT4gWyB4IF1cbiAgICB8IHkgOjogXyB3aGVuIGNtcCB4IHkgPiAwIC0+IHggOjogYWNjXG4gICAgfCBfIC0+IGFjY1xuICAgICgqIGR1cGxpY2F0ZSwgZG8gbm90IHlpZWxkICopXG4gIGluXG4gIGxldCByZWMgcmVjdXJzZSB+Y21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2IGFjY1xuICAgIHwgbCwgW10gLT5cbiAgICAgIGxldCBhY2MgPSBMaXN0LmZvbGRfbGVmdCAocHVzaCB+Y21wKSBhY2MgbCBpblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSB+Y21wIChwdXNoIH5jbXAgYWNjIHgxKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxJyBsMidcbiAgaW5cbiAgcmVjdXJzZSB+Y21wIFtdIGwxIGwyXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCB0YWtlIG4gbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgbiBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBuIFtdIGxcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGlmIG4gPiAwIHRoZW5cbiAgICAgICAgeCA6OiBkaXJlY3QgKGkgLSAxKSAobiAtIDEpIGwnXG4gICAgICBlbHNlXG4gICAgICAgIFtdXG4gIGFuZCBzYWZlIG4gYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfIHdoZW4gbiA9IDAgLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIC0+IHNhZmUgKG4gLSAxKSAoeCA6OiBhY2MpIGwnXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbiBsXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgdGFrZSBuIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogbCcgLT5cbiAgICBpZiBuID4gMCB0aGVuXG4gICAgICB4IDo6IHRha2UgKG4gLSAxKSBsJ1xuICAgIGVsc2VcbiAgICAgIFtdXG5cbltAQEBlbmRpZl1cblxubGV0IHJlYyBkcm9wIG4gbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgXyB3aGVuIG4gPSAwIC0+IGxcbiAgfCBfIDo6IGwnIC0+IGRyb3AgKG4gLSAxKSBsJ1xuXG5sZXQgaGRfdGwgPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhaWx3aXRoIFwiaGRfdGxcIlxuICB8IHggOjogbCAtPiB4LCBsXG5cbmxldCB0YWtlX2Ryb3AgbiBsID0gdGFrZSBuIGwsIGRyb3AgbiBsXG5cbmxldCBzdWJsaXN0c19vZl9sZW4gPyhsYXN0ID0gZnVuIF8gLT4gTm9uZSkgP29mZnNldCBuIGwgPVxuICBpZiBuIDwgMSB0aGVuIGludmFsaWRfYXJnIFwic3VibGlzdHNfb2ZfbGVuOiBuIG11c3QgYmUgPiAwXCI7XG4gIGxldCBvZmZzZXQgPVxuICAgIG1hdGNoIG9mZnNldCB3aXRoXG4gICAgfCBOb25lIC0+IG5cbiAgICB8IFNvbWUgbyB3aGVuIG8gPCAxIC0+IGludmFsaWRfYXJnIFwic3VibGlzdHNfb2ZfbGVuOiBvZmZzZXQgbXVzdCBiZSA+IDBcIlxuICAgIHwgU29tZSBvIC0+IG9cbiAgaW5cbiAgKCogYWRkIHN1Yi1saXN0cyBvZiBbbF0gdG8gW2FjY10gKilcbiAgbGV0IHJlYyBhdXggYWNjIGwgPVxuICAgIGxldCBncm91cCA9IHRha2UgbiBsIGluXG4gICAgaWYgaXNfZW1wdHkgZ3JvdXAgdGhlblxuICAgICAgYWNjXG4gICAgKCogdGhpcyB3YXMgdGhlIGxhc3QgZ3JvdXAsIHdlIGFyZSBkb25lICopXG4gICAgZWxzZSBpZiBMaXN0Lmxlbmd0aCBncm91cCA8IG4gKCogbGFzdCBncm91cCwgd2l0aCBtaXNzaW5nIGVsZW1lbnRzICopIHRoZW4gKFxuICAgICAgbWF0Y2ggbGFzdCBncm91cCB3aXRoXG4gICAgICB8IE5vbmUgLT4gYWNjXG4gICAgICB8IFNvbWUgZ3JvdXAnIC0+IGdyb3VwJyA6OiBhY2NcbiAgICApIGVsc2UgKFxuICAgICAgbGV0IGwnID0gZHJvcCBvZmZzZXQgbCBpblxuICAgICAgYXV4IChncm91cCA6OiBhY2MpIGwnICgqIGNvbnRpbnVlICopXG4gICAgKVxuICBpblxuICBMaXN0LnJldiAoYXV4IFtdIGwpXG5cbmxldCBjaHVua3MgbiBsID0gc3VibGlzdHNfb2ZfbGVuIH5sYXN0OihmdW4geCAtPiBTb21lIHgpIG4gbFxuXG5sZXQgaW50ZXJzcGVyc2UgeCBsID1cbiAgbGV0IHJlYyBhdXhfZGlyZWN0IGkgeCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBbIF8gXSAtPiBsXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gYXV4X3RhaWxyZWMgW10geCBsXG4gICAgfCB5IDo6IHRhaWwgLT4geSA6OiB4IDo6IGF1eF9kaXJlY3QgKGkgLSAxKSB4IHRhaWxcbiAgYW5kIGF1eF90YWlscmVjIGFjYyB4IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBbIHkgXSAtPiBMaXN0LnJldiAoeSA6OiBhY2MpXG4gICAgfCB5IDo6IHRhaWwgLT4gYXV4X3RhaWxyZWMgKHggOjogeSA6OiBhY2MpIHggdGFpbFxuICBpblxuICBhdXhfZGlyZWN0IDFfMDAwIHggbFxuXG5sZXQgaW50ZXJsZWF2ZSBsMSBsMiA6IF8gbGlzdCA9XG4gIGxldCByZWMgYXV4IGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2IChMaXN0LnJldl9hcHBlbmQgbDIgYWNjKVxuICAgIHwgXywgW10gLT4gTGlzdC5yZXYgKExpc3QucmV2X2FwcGVuZCBsMSBhY2MpXG4gICAgfCB4MSA6OiB0bDEsIHgyIDo6IHRsMiAtPiBhdXggKHgyIDo6IHgxIDo6IGFjYykgdGwxIHRsMlxuICBpblxuICBhdXggW10gbDEgbDJcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IHRha2Vfd2hpbGUgcCBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBwIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW11cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIHAgW10gbFxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgeCA6OiBkaXJlY3QgKGkgLSAxKSBwIGwnXG4gICAgICBlbHNlXG4gICAgICAgIFtdXG4gIGFuZCBzYWZlIHAgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBzYWZlIHAgKHggOjogYWNjKSBsJ1xuICAgICAgZWxzZVxuICAgICAgICBMaXN0LnJldiBhY2NcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBwIGxcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyB0YWtlX3doaWxlIHAgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsJyAtPlxuICAgIGlmIHAgeCB0aGVuXG4gICAgICB4IDo6IHRha2Vfd2hpbGUgcCBsJ1xuICAgIGVsc2VcbiAgICAgIFtdXG5cbltAQEBlbmRpZl1cblxubGV0IHJlYyBkcm9wX3doaWxlIHAgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsJyAtPlxuICAgIGlmIHAgeCB0aGVuXG4gICAgICBkcm9wX3doaWxlIHAgbCdcbiAgICBlbHNlXG4gICAgICBsXG5cbmxldCB0YWtlX2Ryb3Bfd2hpbGUgcCBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBwIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW10sIFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBwIFtdIGxcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgaWYgcCB4IHRoZW4gKFxuICAgICAgICBsZXQgbDEsIGwyID0gZGlyZWN0IChpIC0gMSkgcCB0YWlsIGluXG4gICAgICAgIHggOjogbDEsIGwyXG4gICAgICApIGVsc2VcbiAgICAgICAgW10sIGxcbiAgYW5kIHNhZmUgcCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2MsIFtdXG4gICAgfCB4IDo6IHRhaWwgLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIHNhZmUgcCAoeCA6OiBhY2MpIHRhaWxcbiAgICAgIGVsc2VcbiAgICAgICAgTGlzdC5yZXYgYWNjLCBsXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gcCBsXG5cbmxldCBsYXN0IG4gbCA9XG4gIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IG4gdGhlblxuICAgIGxcbiAgZWxzZVxuICAgIGRyb3AgKGxlbiAtIG4pIGxcblxubGV0IGhlYWRfb3B0ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBfIC0+IFNvbWUgeFxuXG5sZXQgdGFpbF9vcHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCBfIDo6IHRhaWwgLT4gU29tZSB0YWlsXG5cbmxldCByZWMgbGFzdF9vcHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCBbIHggXSAtPiBTb21lIHhcbiAgfCBfIDo6IHRhaWwgLT4gbGFzdF9vcHQgdGFpbFxuXG5sZXQgZmluZF9wcmVkID0gZmluZF9vcHRcblxubGV0IGZpbmRfcHJlZF9leG4gcCBsID1cbiAgbWF0Y2ggZmluZF9wcmVkIHAgbCB3aXRoXG4gIHwgTm9uZSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCBTb21lIHggLT4geFxuXG5sZXQgZmluZF9tYXBpIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgaSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBOb25lXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICAobWF0Y2ggZiBpIHggd2l0aFxuICAgICAgfCBTb21lIF8gYXMgcmVzIC0+IHJlc1xuICAgICAgfCBOb25lIC0+IGF1eCBmIChpICsgMSkgbCcpXG4gIGluXG4gIGF1eCBmIDAgbFxuXG5sZXQgZmluZF9tYXAgZiBsID0gZmluZF9tYXBpIChmdW4gXyAtPiBmKSBsXG5cbmxldCBmaW5kX2lkeCBwIGwgPVxuICBmaW5kX21hcGlcbiAgICAoZnVuIGkgeCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgU29tZSAoaSwgeClcbiAgICAgIGVsc2VcbiAgICAgICAgTm9uZSlcbiAgICBsXG5cbmxldCByZW1vdmUgfmVxIHggbCA9XG4gIGxldCByZWMgcmVtb3ZlJyBlcSB4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeSA6OiB0YWlsIHdoZW4gZXEgeCB5IC0+IHJlbW92ZScgZXEgeCBhY2MgdGFpbFxuICAgIHwgeSA6OiB0YWlsIC0+IHJlbW92ZScgZXEgeCAoeSA6OiBhY2MpIHRhaWxcbiAgaW5cbiAgcmVtb3ZlJyBlcSB4IFtdIGxcblxubGV0IGZpbHRlcl9tYXAgZiBsID1cbiAgbGV0IHJlYyByZWN1cnNlIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYycgPVxuICAgICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgICB8IE5vbmUgLT4gYWNjXG4gICAgICAgIHwgU29tZSB5IC0+IHkgOjogYWNjXG4gICAgICBpblxuICAgICAgcmVjdXJzZSBhY2MnIGwnXG4gIGluXG4gIHJlY3Vyc2UgW10gbFxuXG5sZXQga2VlcF9zb21lIGwgPSBmaWx0ZXJfbWFwIChmdW4geCAtPiB4KSBsXG5cbmxldCBrZWVwX29rIGwgPVxuICBmaWx0ZXJfbWFwXG4gICAgKGZ1bmN0aW9uXG4gICAgICB8IE9rIHggLT4gU29tZSB4XG4gICAgICB8IEVycm9yIF8gLT4gTm9uZSlcbiAgICBsXG5cbmxldCBhbGxfc29tZSBsID1cbiAgdHJ5XG4gICAgU29tZVxuICAgICAgKG1hcFxuICAgICAgICAgKGZ1bmN0aW9uXG4gICAgICAgICAgIHwgU29tZSB4IC0+IHhcbiAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIEV4aXQpXG4gICAgICAgICBsKVxuICB3aXRoIEV4aXQgLT4gTm9uZVxuXG5sZXQgYWxsX29rIGwgPVxuICBsZXQgZXJyID0gcmVmIE5vbmUgaW5cbiAgdHJ5XG4gICAgT2tcbiAgICAgIChtYXBcbiAgICAgICAgIChmdW5jdGlvblxuICAgICAgICAgICB8IE9rIHggLT4geFxuICAgICAgICAgICB8IEVycm9yIGUgLT5cbiAgICAgICAgICAgICBlcnIgOj0gU29tZSBlO1xuICAgICAgICAgICAgIHJhaXNlIEV4aXQpXG4gICAgICAgICBsKVxuICB3aXRoIEV4aXQgLT5cbiAgICAobWF0Y2ggIWVyciB3aXRoXG4gICAgfCBOb25lIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgU29tZSBlIC0+IEVycm9yIGUpXG5cbmxldCBncm91cF9ieSAodHlwZSBrKSA/KGhhc2ggPSBIYXNodGJsLmhhc2gpID8oZXEgPSBTdGRsaWIuKCA9ICkpIGwgPVxuICBsZXQgbW9kdWxlIFRibCA9IEhhc2h0YmwuTWFrZSAoc3RydWN0XG4gICAgdHlwZSB0ID0ga1xuXG4gICAgbGV0IGVxdWFsID0gZXFcbiAgICBsZXQgaGFzaCA9IGhhc2hcbiAgZW5kKSBpblxuICAoKiBjb21wdXRlIGdyb3VwIHRhYmxlICopXG4gIGxldCB0YmwgPSBUYmwuY3JlYXRlIDMyIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGwgPSB0cnkgVGJsLmZpbmQgdGJsIHggd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIFRibC5yZXBsYWNlIHRibCB4ICh4IDo6IGwpKVxuICAgIGw7XG4gIFRibC5mb2xkIChmdW4gXyB4IGFjYyAtPiB4IDo6IGFjYykgdGJsIFtdXG5cbmxldCBqb2luIH5qb2luX3JvdyBzMSBzMiA6IF8gdCA9XG4gIGZsYXRfbWFwIChmdW4gYSAtPiBmaWx0ZXJfbWFwIChqb2luX3JvdyBhKSBzMikgczFcblxubGV0IGpvaW5fYnkgKHR5cGUgYSkgPyhlcSA9IFN0ZGxpYi4oID0gKSkgPyhoYXNoID0gSGFzaHRibC5oYXNoKSBmMSBmMiB+bWVyZ2UgYzFcbiAgICBjMiA9XG4gIGxldCBtb2R1bGUgVGJsID0gSGFzaHRibC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBhXG5cbiAgICBsZXQgZXF1YWwgPSBlcVxuICAgIGxldCBoYXNoID0gaGFzaFxuICBlbmQpIGluXG4gIGxldCB0YmwgPSBUYmwuY3JlYXRlIDMyIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGtleSA9IGYxIHggaW5cbiAgICAgIFRibC5hZGQgdGJsIGtleSB4KVxuICAgIGMxO1xuICBsZXQgcmVzID0gcmVmIFtdIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geSAtPlxuICAgICAgbGV0IGtleSA9IGYyIHkgaW5cbiAgICAgIGxldCB4cyA9IFRibC5maW5kX2FsbCB0Ymwga2V5IGluXG4gICAgICBMaXN0Lml0ZXJcbiAgICAgICAgKGZ1biB4IC0+XG4gICAgICAgICAgbWF0Y2ggbWVyZ2Uga2V5IHggeSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHogLT4gcmVzIDo9IHogOjogIXJlcylcbiAgICAgICAgeHMpXG4gICAgYzI7XG4gICFyZXNcblxudHlwZSAoJ2EsICdiKSBqb2luX2FsbF9jZWxsID0ge1xuICBtdXRhYmxlIGphX2xlZnQ6ICdhIGxpc3Q7XG4gIG11dGFibGUgamFfcmlnaHQ6ICdiIGxpc3Q7XG59XG5cbmxldCBqb2luX2FsbF9ieSAodHlwZSBhKSA/KGVxID0gU3RkbGliLiggPSApKSA/KGhhc2ggPSBIYXNodGJsLmhhc2gpIGYxIGYyXG4gICAgfm1lcmdlIGMxIGMyID1cbiAgbGV0IG1vZHVsZSBUYmwgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGFcblxuICAgIGxldCBlcXVhbCA9IGVxXG4gICAgbGV0IGhhc2ggPSBoYXNoXG4gIGVuZCkgaW5cbiAgbGV0IHRibCA9IFRibC5jcmVhdGUgMzIgaW5cbiAgKCogYnVpbGQgdGhlIG1hcCBba2V5IC0+IGNlbGxdICopXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGtleSA9IGYxIHggaW5cbiAgICAgIHRyeVxuICAgICAgICBsZXQgYyA9IFRibC5maW5kIHRibCBrZXkgaW5cbiAgICAgICAgYy5qYV9sZWZ0IDwtIHggOjogYy5qYV9sZWZ0XG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiBUYmwuYWRkIHRibCBrZXkgeyBqYV9sZWZ0ID0gWyB4IF07IGphX3JpZ2h0ID0gW10gfSlcbiAgICBjMTtcbiAgTGlzdC5pdGVyXG4gICAgKGZ1biB5IC0+XG4gICAgICBsZXQga2V5ID0gZjIgeSBpblxuICAgICAgdHJ5XG4gICAgICAgIGxldCBjID0gVGJsLmZpbmQgdGJsIGtleSBpblxuICAgICAgICBjLmphX3JpZ2h0IDwtIHkgOjogYy5qYV9yaWdodFxuICAgICAgd2l0aCBOb3RfZm91bmQgLT4gVGJsLmFkZCB0Ymwga2V5IHsgamFfbGVmdCA9IFtdOyBqYV9yaWdodCA9IFsgeSBdIH0pXG4gICAgYzI7XG4gIFRibC5mb2xkXG4gICAgKGZ1biBrZXkgY2VsbCByZXMgLT5cbiAgICAgIG1hdGNoIG1lcmdlIGtleSBjZWxsLmphX2xlZnQgY2VsbC5qYV9yaWdodCB3aXRoXG4gICAgICB8IE5vbmUgLT4gcmVzXG4gICAgICB8IFNvbWUgeiAtPiB6IDo6IHJlcylcbiAgICB0YmwgW11cblxubGV0IGdyb3VwX2pvaW5fYnkgKHR5cGUgYSkgPyhlcSA9IFN0ZGxpYi4oID0gKSkgPyhoYXNoID0gSGFzaHRibC5oYXNoKSBmIGMxIGMyID1cbiAgbGV0IG1vZHVsZSBUYmwgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGFcblxuICAgIGxldCBlcXVhbCA9IGVxXG4gICAgbGV0IGhhc2ggPSBoYXNoXG4gIGVuZCkgaW5cbiAgbGV0IHRibCA9IFRibC5jcmVhdGUgMzIgaW5cbiAgTGlzdC5pdGVyIChmdW4geCAtPiBUYmwucmVwbGFjZSB0YmwgeCBbXSkgYzE7XG4gIExpc3QuaXRlclxuICAgIChmdW4geSAtPlxuICAgICAgKCogcHJvamVjdCBbeV0gaW50byBzb21lIGVsZW1lbnQgb2YgW2MxXSAqKVxuICAgICAgbGV0IGtleSA9IGYgeSBpblxuICAgICAgdHJ5XG4gICAgICAgIGxldCBsID0gVGJsLmZpbmQgdGJsIGtleSBpblxuICAgICAgICBUYmwucmVwbGFjZSB0Ymwga2V5ICh5IDo6IGwpXG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiAoKSlcbiAgICBjMjtcbiAgVGJsLmZvbGQgKGZ1biBrIHYgbCAtPiAoaywgdikgOjogbCkgdGJsIFtdXG5cbmxldCBtZW0gPyhlcSA9IFN0ZGxpYi4oID0gKSkgeCBsID1cbiAgbGV0IHJlYyBzZWFyY2ggZXEgeCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGZhbHNlXG4gICAgfCB5IDo6IGwnIC0+IGVxIHggeSB8fCBzZWFyY2ggZXEgeCBsJ1xuICBpblxuICBzZWFyY2ggZXEgeCBsXG5cbmxldCBhZGRfbm9kdXAgfmVxIHggbCA9XG4gIGlmIG1lbSB+ZXEgeCBsIHRoZW5cbiAgICBsXG4gIGVsc2VcbiAgICB4IDo6IGxcblxubGV0IHJlbW92ZV9vbmUgfmVxIHggbCA9XG4gIGxldCByZWMgcmVtb3ZlX29uZSB+ZXEgeCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IHkgOjogdGwgd2hlbiBlcSB4IHkgLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyB0bFxuICAgIHwgeSA6OiB0bCAtPiByZW1vdmVfb25lIH5lcSB4ICh5IDo6IGFjYykgdGxcbiAgaW5cbiAgaWYgbWVtIH5lcSB4IGwgdGhlblxuICAgIHJlbW92ZV9vbmUgfmVxIHggW10gbFxuICBlbHNlXG4gICAgbFxuXG5sZXQgc3Vic2V0IH5lcSBsMSBsMiA9IExpc3QuZm9yX2FsbCAoZnVuIHQgLT4gbWVtIH5lcSB0IGwyKSBsMVxuXG5sZXQgdW5pcSB+ZXEgbCA9XG4gIGxldCByZWMgdW5pcSBlcSBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogeHMgd2hlbiBMaXN0LmV4aXN0cyAoZXEgeCkgeHMgLT4gdW5pcSBlcSBhY2MgeHNcbiAgICB8IHggOjogeHMgLT4gdW5pcSBlcSAoeCA6OiBhY2MpIHhzXG4gIGluXG4gIHVuaXEgZXEgW10gbFxuXG5sZXQgdW5pb24gfmVxIGwxIGwyID1cbiAgbGV0IHJlYyB1bmlvbiBlcSBhY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDJcbiAgICB8IHggOjogeHMgd2hlbiBtZW0gfmVxIHggbDIgLT4gdW5pb24gZXEgYWNjIHhzIGwyXG4gICAgfCB4IDo6IHhzIC0+IHVuaW9uIGVxICh4IDo6IGFjYykgeHMgbDJcbiAgaW5cbiAgdW5pb24gZXEgW10gbDEgbDJcblxubGV0IGludGVyIH5lcSBsMSBsMiA9XG4gIGxldCByZWMgaW50ZXIgZXEgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogeHMgd2hlbiBtZW0gfmVxIHggbDIgLT4gaW50ZXIgZXEgKHggOjogYWNjKSB4cyBsMlxuICAgIHwgXyA6OiB4cyAtPiBpbnRlciBlcSBhY2MgeHMgbDJcbiAgaW5cbiAgaW50ZXIgZXEgW10gbDEgbDJcblxubGV0IG1hcGkgZiBsID1cbiAgbGV0IHIgPSByZWYgMCBpblxuICBtYXBcbiAgICAoZnVuIHggLT5cbiAgICAgIGxldCB5ID0gZiAhciB4IGluXG4gICAgICBpbmNyIHI7XG4gICAgICB5KVxuICAgIGxcblxubGV0IGl0ZXJpIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgaSBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+ICgpXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBmIGkgeDtcbiAgICAgIGF1eCBmIChpICsgMSkgbCdcbiAgaW5cbiAgYXV4IGYgMCBsXG5cbmxldCBpdGVyaTIgZiBsMSBsMiA9XG4gIGxldCByZWMgYXV4IGYgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiAoKVxuICAgIHwgW10sIF8gfCBfLCBbXSAtPiBpbnZhbGlkX2FyZyBcIml0ZXJpMlwiXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgZiBpIHgxIHgyO1xuICAgICAgYXV4IGYgKGkgKyAxKSBsMScgbDInXG4gIGluXG4gIGF1eCBmIDAgbDEgbDJcblxubGV0IGZvbGRpIGYgYWNjIGwgPVxuICBsZXQgcmVjIGZvbGRpIGYgYWNjIGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSBmIGFjYyBpIHggaW5cbiAgICAgIGZvbGRpIGYgYWNjIChpICsgMSkgbCdcbiAgaW5cbiAgZm9sZGkgZiBhY2MgMCBsXG5cbmxldCBmb2xkaTIgZiBhY2MgbDEgbDIgPVxuICBsZXQgcmVjIGZvbGRpIGYgYWNjIGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgW10gLT4gYWNjXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IGludmFsaWRfYXJnIFwiZm9sZGkyXCJcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYWNjID0gZiBhY2MgaSB4MSB4MiBpblxuICAgICAgZm9sZGkgZiBhY2MgKGkgKyAxKSBsMScgbDInXG4gIGluXG4gIGZvbGRpIGYgYWNjIDAgbDEgbDJcblxubGV0IHJlYyBnZXRfYXRfaWR4X3JlYyBpIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCB4IDo6IF8gd2hlbiBpID0gMCAtPiB4XG4gIHwgXyA6OiBsJyAtPiBnZXRfYXRfaWR4X3JlYyAoaSAtIDEpIGwnXG5cbmxldCBnZXRfYXRfaWR4X2V4biBpIGwgPVxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwgKyBpXG4gICAgZWxzZVxuICAgICAgaVxuICBpblxuICBnZXRfYXRfaWR4X3JlYyBpIGxcblxubGV0IGdldF9hdF9pZHggaSBsID0gdHJ5IFNvbWUgKGdldF9hdF9pZHhfZXhuIGkgbCkgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG5sZXQgc2V0X2F0X2lkeCBpIHggbDAgPVxuICBsZXQgcmVjIGF1eCBsIGFjYyBpID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGwwXG4gICAgfCBfIDo6IGwnIHdoZW4gaSA9IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyAoeCA6OiBsJylcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKVxuICBpblxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwwICsgaVxuICAgIGVsc2VcbiAgICAgIGlcbiAgaW5cbiAgYXV4IGwwIFtdIGlcblxubGV0IGluc2VydF9hdF9pZHggaSB4IGwgPVxuICBsZXQgcmVjIGF1eCBsIGFjYyBpIHggPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyBbIHggXVxuICAgIHwgeSA6OiBsJyB3aGVuIGkgPSAwIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgKHggOjogeSA6OiBsJylcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKSB4XG4gIGluXG4gIGxldCBpID1cbiAgICBpZiBpIDwgMCB0aGVuXG4gICAgICBsZW5ndGggbCArIGlcbiAgICBlbHNlXG4gICAgICBpXG4gIGluXG4gIGF1eCBsIFtdIGkgeFxuXG5sZXQgcmVtb3ZlX2F0X2lkeCBpIGwwID1cbiAgbGV0IHJlYyBhdXggbCBhY2MgaSA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBsMFxuICAgIHwgXyA6OiBsJyB3aGVuIGkgPSAwIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbCdcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKVxuICBpblxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwwICsgaVxuICAgIGVsc2VcbiAgICAgIGlcbiAgaW5cbiAgYXV4IGwwIFtdIGlcblxubGV0IHJhbmdlX2J5IH5zdGVwIGkgaiA9XG4gIGxldCByZWMgcmFuZ2UgaSBqIGFjYyA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgaSA6OiBhY2NcbiAgICBlbHNlXG4gICAgICByYW5nZSBpIChqIC0gc3RlcCkgKGogOjogYWNjKVxuICBpblxuICBpZiBzdGVwID0gMCB0aGVuXG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJDQ0xpc3QucmFuZ2VfYnlcIilcbiAgZWxzZSBpZlxuICAgIGlmIHN0ZXAgPiAwIHRoZW5cbiAgICAgIGkgPiBqXG4gICAgZWxzZVxuICAgICAgaSA8IGpcbiAgdGhlblxuICAgIFtdXG4gIGVsc2VcbiAgICByYW5nZSBpICgoKGogLSBpKSAvIHN0ZXAgKiBzdGVwKSArIGkpIFtdXG5cbmxldCByYW5nZSBpIGogPVxuICBsZXQgcmVjIHVwIGkgaiBhY2MgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIGkgOjogYWNjXG4gICAgZWxzZVxuICAgICAgdXAgaSAoaiAtIDEpIChqIDo6IGFjYylcbiAgYW5kIGRvd24gaSBqIGFjYyA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgaSA6OiBhY2NcbiAgICBlbHNlXG4gICAgICBkb3duIGkgKGogKyAxKSAoaiA6OiBhY2MpXG4gIGluXG4gIGlmIGkgPD0gaiB0aGVuXG4gICAgdXAgaSBqIFtdXG4gIGVsc2VcbiAgICBkb3duIGkgaiBbXVxuXG5sZXQgcmFuZ2UnIGkgaiA9XG4gIGlmIGkgPCBqIHRoZW5cbiAgICByYW5nZSBpIChqIC0gMSlcbiAgZWxzZSBpZiBpID0gaiB0aGVuXG4gICAgW11cbiAgZWxzZVxuICAgIHJhbmdlIGkgKGogKyAxKVxuXG5sZXQgKCAtLSApID0gcmFuZ2VcbmxldCAoIC0tXiApID0gcmFuZ2UnXG5cbmxldCByZXBsaWNhdGUgaSB4ID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGF1eCAoeCA6OiBhY2MpIChpIC0gMSlcbiAgaW5cbiAgYXV4IFtdIGlcblxubGV0IHJlcGVhdCBpIGwgPVxuICBsZXQgcmVjIGF1eCBhY2MgaSA9XG4gICAgaWYgaSA9IDAgdGhlblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgZWxzZVxuICAgICAgYXV4IChMaXN0LnJldl9hcHBlbmQgbCBhY2MpIChpIC0gMSlcbiAgaW5cbiAgYXV4IFtdIGlcblxubW9kdWxlIEFzc29jID0gc3RydWN0XG4gIHR5cGUgKCdhLCAnYikgdCA9ICgnYSAqICdiKSBsaXN0XG5cbiAgbGV0IHJlYyBzZWFyY2hfZXhuIGVxIGwgeCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8ICh5LCB6KSA6OiBsJyAtPlxuICAgICAgaWYgZXEgeCB5IHRoZW5cbiAgICAgICAgelxuICAgICAgZWxzZVxuICAgICAgICBzZWFyY2hfZXhuIGVxIGwnIHhcblxuICBsZXQgZ2V0X2V4biB+ZXEgeCBsID0gc2VhcmNoX2V4biBlcSBsIHhcbiAgbGV0IGdldCB+ZXEgeCBsID0gdHJ5IFNvbWUgKHNlYXJjaF9leG4gZXEgbCB4KSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5cbiAgKCogc2VhcmNoIGZvciBhIGJpbmRpbmcgZm9yIFt4XSBpbiBbbF0sIGFuZCBjYWxscyBbZiB4IChTb21lIHYpIHJlc3RdXG4gICAgIG9yIFtmIHggTm9uZSByZXN0XSBkZXBlbmRpbmcgb24gd2hldGhlciBpdCBmaW5kcyB0aGUgYmluZGluZy5cbiAgICAgW3Jlc3RdIGlzIHRoZSBsaXN0IG9mIHRoZSBvdGhlciBiaW5kaW5ncyAqKVxuICBsZXQgcmVjIHNlYXJjaF9zZXQgZXEgYWNjIGwgeCB+ZiA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBmIHggTm9uZSBhY2NcbiAgICB8ICh4JywgeScpIDo6IGwnIC0+XG4gICAgICBpZiBlcSB4IHgnIHRoZW5cbiAgICAgICAgZiB4IChTb21lIHknKSAoTGlzdC5yZXZfYXBwZW5kIGFjYyBsJylcbiAgICAgIGVsc2VcbiAgICAgICAgc2VhcmNoX3NldCBlcSAoKHgnLCB5JykgOjogYWNjKSBsJyB4IH5mXG5cbiAgbGV0IHNldCB+ZXEgeCB5IGwgPSBzZWFyY2hfc2V0IGVxIFtdIGwgeCB+ZjooZnVuIHggXyBsIC0+ICh4LCB5KSA6OiBsKVxuXG4gIGxldCBtZW0gPyhlcSA9IFN0ZGxpYi4oID0gKSkgeCBsID1cbiAgICB0cnlcbiAgICAgIGlnbm9yZSAoc2VhcmNoX2V4biBlcSBsIHgpO1xuICAgICAgdHJ1ZVxuICAgIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbiAgbGV0IHVwZGF0ZSB+ZXEgZiB4IGwgPVxuICAgIHNlYXJjaF9zZXQgZXEgW10gbCB4IH5mOihmdW4geCBvcHRfeSByZXN0IC0+XG4gICAgICAgIG1hdGNoIGYgb3B0X3kgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gcmVzdCAoKiBkcm9wICopXG4gICAgICAgIHwgU29tZSB5JyAtPiAoeCwgeScpIDo6IHJlc3QpXG5cbiAgbGV0IHJlbW92ZSB+ZXEgeCBsID1cbiAgICBzZWFyY2hfc2V0IGVxIFtdIGwgeCB+ZjooZnVuIF8gb3B0X3kgcmVzdCAtPlxuICAgICAgICBtYXRjaCBvcHRfeSB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBsICgqIGtlZXAgYXMgaXMgKilcbiAgICAgICAgfCBTb21lIF8gLT4gcmVzdClcblxuICBsZXQga2V5cyBsID0gbWFwIChmdW4gKGssIF8pIC0+IGspIGxcbiAgbGV0IHZhbHVlcyBsID0gbWFwIChmdW4gKF8sIHYpIC0+IHYpIGxcbiAgbGV0IG1hcF92YWx1ZXMgZiBsID0gbWFwIChmdW4gKGssIHYpIC0+IGssIGYgdikgbFxuZW5kXG5cbmxldCBhc3NvYyA9IEFzc29jLmdldF9leG5cbmxldCBhc3NvY19vcHQgPSBBc3NvYy5nZXRcbmxldCBtZW1fYXNzb2MgPSBBc3NvYy5tZW1cbmxldCByZW1vdmVfYXNzb2MgPSBBc3NvYy5yZW1vdmVcblxuKCoqIHsyIFJlZmVyZW5jZXMgb24gTGlzdHN9ICopXG5cbm1vZHVsZSBSZWYgPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID0gJ2EgbGlzdCByZWZcblxuICBsZXQgcHVzaCBsIHggPSBsIDo9IHggOjogIWxcblxuICBsZXQgcG9wIGwgPVxuICAgIG1hdGNoICFsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgbCA6PSB0YWlsO1xuICAgICAgU29tZSB4XG5cbiAgbGV0IHBvcF9leG4gbCA9XG4gICAgbWF0Y2ggIWwgd2l0aFxuICAgIHwgW10gLT4gZmFpbHdpdGggXCJDQ0xpc3QuUmVmLnBvcF9leG5cIlxuICAgIHwgeCA6OiB0YWlsIC0+XG4gICAgICBsIDo9IHRhaWw7XG4gICAgICB4XG5cbiAgbGV0IGNyZWF0ZSAoKSA9IHJlZiBbXVxuICBsZXQgY2xlYXIgbCA9IGwgOj0gW11cbiAgbGV0IGxpZnQgZiBsID0gZiAhbFxuICBsZXQgcHVzaF9saXN0IHIgbCA9IHIgOj0gTGlzdC5yZXZfYXBwZW5kIGwgIXJcbmVuZFxuXG4oKiogezIgTW9uYWRpYyBPcGVyYXRpb25zfSAqKVxubW9kdWxlIHR5cGUgTU9OQUQgPSBzaWdcbiAgdHlwZSAnYSB0XG5cbiAgdmFsIHJldHVybiA6ICdhIC0+ICdhIHRcbiAgdmFsICggPj49ICkgOiAnYSB0IC0+ICgnYSAtPiAnYiB0KSAtPiAnYiB0XG5lbmRcblxubW9kdWxlIFRyYXZlcnNlIChNIDogTU9OQUQpID0gc3RydWN0XG4gIG9wZW4gTVxuXG4gIGxldCBtYXBfbSBmIGwgPVxuICAgIGxldCByZWMgYXV4IGYgYWNjIGwgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IHJldHVybiAoTGlzdC5yZXYgYWNjKVxuICAgICAgfCB4IDo6IHRhaWwgLT4gZiB4ID4+PSBmdW4geCcgLT4gYXV4IGYgKHgnIDo6IGFjYykgdGFpbFxuICAgIGluXG4gICAgYXV4IGYgW10gbFxuXG4gIGxldCByZWMgbWFwX21fcGFyIGYgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBNLnJldHVybiBbXVxuICAgIHwgeCA6OiB0bCAtPlxuICAgICAgbGV0IHgnID0gZiB4IGluXG4gICAgICBsZXQgdGwnID0gbWFwX21fcGFyIGYgdGwgaW5cbiAgICAgIHgnID4+PSBmdW4geCcgLT5cbiAgICAgIHRsJyA+Pj0gZnVuIHRsJyAtPiBNLnJldHVybiAoeCcgOjogdGwnKVxuXG4gIGxldCBzZXF1ZW5jZV9tIGwgPSBtYXBfbSAoZnVuIHggLT4geCkgbFxuXG4gIGxldCByZWMgZm9sZF9tIGYgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gcmV0dXJuIGFjY1xuICAgIHwgeCA6OiBsJyAtPiBmIGFjYyB4ID4+PSBmdW4gYWNjJyAtPiBmb2xkX20gZiBhY2MnIGwnXG5lbmRcblxuKCoqIHsyIENvbnZlcnNpb25zfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG50eXBlICdhIHJhbmRvbV9nZW4gPSBSYW5kb20uU3RhdGUudCAtPiAnYVxuXG5sZXQgcmFuZG9tX2xlbiBsZW4gZyBzdCA9IGluaXQgbGVuIChmdW4gXyAtPiBnIHN0KVxuXG5sZXQgcmFuZG9tIGcgc3QgPVxuICBsZXQgbGVuID0gUmFuZG9tLlN0YXRlLmludCBzdCAxXzAwMCBpblxuICByYW5kb21fbGVuIGxlbiBnIHN0XG5cbmxldCByYW5kb21fbm9uX2VtcHR5IGcgc3QgPVxuICBsZXQgbGVuID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBsZW4gZyBzdFxuXG5sZXQgcmFuZG9tX2Nob29zZSBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgXyA6OiBfIC0+XG4gICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgICBmdW4gc3QgLT5cbiAgICAgIGxldCBpID0gUmFuZG9tLlN0YXRlLmludCBzdCBsZW4gaW5cbiAgICAgIExpc3QubnRoIGwgaVxuXG5sZXQgcmFuZG9tX3NlcXVlbmNlIGwgc3QgPSBtYXAgKGZ1biBnIC0+IGcgc3QpIGxcblxubGV0IHRvX3N0cmluZyA/KHN0YXJ0ID0gXCJcIikgPyhzdG9wID0gXCJcIikgPyhzZXAgPSBcIiwgXCIpIGl0ZW1fdG9fc3RyaW5nIGwgPVxuICBsZXQgbCA9IExpc3QubWFwIGl0ZW1fdG9fc3RyaW5nIGwgaW5cbiAgc3RhcnQgXiBTdHJpbmcuY29uY2F0IHNlcCBsIF4gc3RvcFxuXG5sZXQgdG9faXRlciBsIGsgPSBMaXN0Lml0ZXIgayBsXG5cbmxldCByZWMgdG9fc2VxIGwgKCkgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBTZXEuTmlsXG4gIHwgeCA6OiB0bCAtPiBTZXEuQ29ucyAoeCwgdG9fc2VxIHRsKVxuXG5sZXQgb2ZfaXRlciBpID1cbiAgbGV0IGwgPSByZWYgW10gaW5cbiAgaSAoZnVuIHggLT4gbCA6PSB4IDo6ICFsKTtcbiAgTGlzdC5yZXYgIWxcblxubGV0IG9mX3NlcV9yZXYgbCA9XG4gIGxldCByZWMgbG9vcCBhY2MgcyA9XG4gICAgbWF0Y2ggcyAoKSB3aXRoXG4gICAgfCBTZXEuTmlsIC0+IGFjY1xuICAgIHwgU2VxLkNvbnMgKHgsIHRsKSAtPiBsb29wICh4IDo6IGFjYykgdGxcbiAgaW5cbiAgbG9vcCBbXSBsXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCBvZl9zZXEgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgc2VxID1cbiAgICBpZiBpIDw9IDAgdGhlblxuICAgICAgTGlzdC5yZXYgKG9mX3NlcV9yZXYgc2VxKVxuICAgIGVsc2UgKFxuICAgICAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgICAgIHwgU2VxLk5pbCAtPiBbXVxuICAgICAgfCBTZXEuQ29ucyAoeCwgdGwpIC0+IHggOjogZGlyZWN0IChpIC0gMSkgdGxcbiAgICApXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbFxuXG5bQEBAZW5kaWZdXG5cbmxldCB0b19nZW4gbCA9XG4gIGxldCBsID0gcmVmIGwgaW5cbiAgZnVuICgpIC0+XG4gICAgbWF0Y2ggIWwgd2l0aFxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbCA6PSBsJztcbiAgICAgIFNvbWUgeFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgb2ZfZ2VuIGcgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGcgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIHNhZmUgW10gZ1xuICAgIGVsc2UgKFxuICAgICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgICB8IE5vbmUgLT4gW11cbiAgICAgIHwgU29tZSB4IC0+IHggOjogZGlyZWN0IChpIC0gMSkgZ1xuICAgIClcbiAgYW5kIHNhZmUgYWNjIGcgPVxuICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgIHwgTm9uZSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFNvbWUgeCAtPiBzYWZlICh4IDo6IGFjYykgZ1xuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGdcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBvZl9nZW4gZyA9XG4gIG1hdGNoIGcgKCkgd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4geCA6OiBvZl9nZW4gZ1xuXG5bQEBAZW5kaWZdXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXRbQGlubGluZV0gKCA+fD0gKSBsIGYgPSBtYXAgZiBsXG4gIGxldFtAaW5saW5lXSAoID4+PSApIGwgZiA9IGZsYXRfbWFwIGYgbFxuICBsZXQgKCBAICkgPSAoIEAgKVxuICBsZXQgKCA8Kj4gKSA9ICggPCo+IClcbiAgbGV0ICggPCQ+ICkgPSBtYXBcbiAgbGV0ICggLS0gKSA9ICggLS0gKVxuICBsZXQgKCAtLV4gKSA9ICggLS1eIClcbiAgbGV0ICggbGV0KyApID0gKCA+fD0gKVxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG4gIGxldFtAaW5saW5lXSAoIGFuZCsgKSBsMSBsMiA9IHByb2R1Y3QgKGZ1biB4IHkgLT4geCwgeSkgbDEgbDJcbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbiAgbGV0ICggYW5kJiApID0gY29tYmluZV9zaG9ydGVzdFxuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxuKCoqIHsyIElPfSAqKVxuXG5sZXQgcHAgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICA/KHBwX3NlcCA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCIpIHBwX2l0ZW0gZm10IGwgPVxuICBsZXQgcmVjIHByaW50IGZtdCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IHggOjogKF8gOjogXyBhcyBsKSAtPlxuICAgICAgcHBfaXRlbSBmbXQgeDtcbiAgICAgIHBwX3NlcCBmbXQgKCk7XG4gICAgICBwcmludCBmbXQgbFxuICAgIHwgWyB4IF0gLT4gcHBfaXRlbSBmbXQgeFxuICAgIHwgW10gLT4gKClcbiAgaW5cbiAgcHBfc3RhcnQgZm10ICgpO1xuICBwcmludCBmbXQgbDtcbiAgcHBfc3RvcCBmbXQgKClcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBPcHRpb25zfSAqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb25cblxubGV0W0BpbmxpbmVdIG1hcCBmID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHggLT4gU29tZSAoZiB4KVxuXG5sZXQgbWFwX29yIH5kZWZhdWx0IGYgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gZGVmYXVsdFxuICB8IFNvbWUgeCAtPiBmIHhcblxubGV0IG1hcF9sYXp5IGRlZmF1bHRfZm4gZiA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBkZWZhdWx0X2ZuICgpXG4gIHwgU29tZSB4IC0+IGYgeFxuXG5sZXQgaXNfc29tZSA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBmYWxzZVxuICB8IFNvbWUgXyAtPiB0cnVlXG5cbmxldCBpc19ub25lID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IHRydWVcbiAgfCBTb21lIF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgZiBvMSBvMiA9XG4gIG1hdGNoIG8xLCBvMiB3aXRoXG4gIHwgTm9uZSwgTm9uZSAtPiAwXG4gIHwgU29tZSBfLCBOb25lIC0+IDFcbiAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgfCBTb21lIHgsIFNvbWUgeSAtPiBmIHggeVxuXG5sZXQgZXF1YWwgZiBvMSBvMiA9XG4gIG1hdGNoIG8xLCBvMiB3aXRoXG4gIHwgTm9uZSwgTm9uZSAtPiB0cnVlXG4gIHwgU29tZSBfLCBOb25lIHwgTm9uZSwgU29tZSBfIC0+IGZhbHNlXG4gIHwgU29tZSB4LCBTb21lIHkgLT4gZiB4IHlcblxubGV0IHJldHVybiB4ID0gU29tZSB4XG5sZXQgc29tZSA9IHJldHVyblxubGV0IG5vbmUgPSBOb25lXG5cbmxldFtAaW5saW5lXSBmbGF0X21hcCBmIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldFtAaW5saW5lXSBmbGF0X21hcF9sIGYgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldFtAaW5saW5lXSBiaW5kIG8gZiA9IGZsYXRfbWFwIGYgb1xubGV0ICggPj49ICkgPSBiaW5kXG5sZXQgcHVyZSB4ID0gU29tZSB4XG5cbmxldCAoIDwqPiApIGYgeCA9XG4gIG1hdGNoIGYsIHggd2l0aFxuICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIGYsIFNvbWUgeCAtPiBTb21lIChmIHgpXG5cbmxldCBvcl8gfmVsc2VfIGEgPVxuICBtYXRjaCBhIHdpdGhcbiAgfCBOb25lIC0+IGVsc2VfXG4gIHwgU29tZSBfIC0+IGFcblxubGV0IG9yX2xhenkgfmVsc2VfIGEgPVxuICBtYXRjaCBhIHdpdGhcbiAgfCBOb25lIC0+IGVsc2VfICgpXG4gIHwgU29tZSBfIC0+IGFcblxubGV0ICggPCs+ICkgYSBiID0gb3JfIH5lbHNlXzpiIGFcbmxldCBjaG9pY2UgbCA9IExpc3QuZm9sZF9sZWZ0ICggPCs+ICkgTm9uZSBsXG5cbmxldCBtYXAyIGYgbzEgbzIgPVxuICBtYXRjaCBvMSwgbzIgd2l0aFxuICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHgsIFNvbWUgeSAtPiBTb21lIChmIHggeSlcblxubGV0IGZpbHRlciBwID0gZnVuY3Rpb25cbiAgfCBTb21lIHggYXMgbyB3aGVuIHAgeCAtPiBvXG4gIHwgXyAtPiBOb25lXG5cbmxldCBpZl8gcCB4ID1cbiAgaWYgcCB4IHRoZW5cbiAgICBTb21lIHhcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IGZhbHNlXG4gIHwgU29tZSB4IC0+IHAgeFxuXG5sZXQgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IHRydWVcbiAgfCBTb21lIHggLT4gcCB4XG5cbmxldCBpdGVyIGYgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldCBmb2xkIGYgYWNjIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IGFjY1xuICB8IFNvbWUgeCAtPiBmIGFjYyB4XG5cbmxldCBnZXRfb3IgfmRlZmF1bHQgeCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gZGVmYXVsdFxuICB8IFNvbWUgeSAtPiB5XG5cbmxldCB2YWx1ZSB4IH5kZWZhdWx0ID1cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgTm9uZSAtPiBkZWZhdWx0XG4gIHwgU29tZSB5IC0+IHlcblxubGV0IGdldF9leG4gPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB4XG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDT3B0aW9uLmdldF9leG5cIlxuXG5sZXQgZ2V0X2V4bl9vciBtc2cgPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB4XG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBtc2dcblxubGV0IGdldF9sYXp5IGRlZmF1bHRfZm4geCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gZGVmYXVsdF9mbiAoKVxuICB8IFNvbWUgeSAtPiB5XG5cbmxldCBzZXF1ZW5jZV9sIGwgPVxuICBsZXQgcmVjIGF1eCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBTb21lIChMaXN0LnJldiBhY2MpXG4gICAgfCBTb21lIHggOjogbCcgLT4gYXV4ICh4IDo6IGFjYykgbCdcbiAgICB8IE5vbmUgOjogXyAtPiByYWlzZSBFeGl0XG4gIGluXG4gIHRyeSBhdXggW10gbCB3aXRoIEV4aXQgLT4gTm9uZVxuXG5sZXQgd3JhcCA/KGhhbmRsZXIgPSBmdW4gXyAtPiB0cnVlKSBmIHggPVxuICB0cnkgU29tZSAoZiB4KVxuICB3aXRoIGUgLT5cbiAgICBpZiBoYW5kbGVyIGUgdGhlblxuICAgICAgTm9uZVxuICAgIGVsc2VcbiAgICAgIHJhaXNlIGVcblxubGV0IHdyYXAyID8oaGFuZGxlciA9IGZ1biBfIC0+IHRydWUpIGYgeCB5ID1cbiAgdHJ5IFNvbWUgKGYgeCB5KVxuICB3aXRoIGUgLT5cbiAgICBpZiBoYW5kbGVyIGUgdGhlblxuICAgICAgTm9uZVxuICAgIGVsc2VcbiAgICAgIHJhaXNlIGVcblxubGV0IHRvX2xpc3QgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4gWyB4IF1cblxubGV0IG9mX2xpc3QgPSBmdW5jdGlvblxuICB8IHggOjogXyAtPiBTb21lIHhcbiAgfCBbXSAtPiBOb25lXG5cbmxldCB0b19yZXN1bHQgZXJyID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IEVycm9yIGVyclxuICB8IFNvbWUgeCAtPiBPayB4XG5cbmxldCB0b19yZXN1bHRfbGF6eSBlcnJfZm4gPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gRXJyb3IgKGVycl9mbiAoKSlcbiAgfCBTb21lIHggLT4gT2sgeFxuXG5sZXQgb2ZfcmVzdWx0ID0gZnVuY3Rpb25cbiAgfCBFcnJvciBfIC0+IE5vbmVcbiAgfCBPayB4IC0+IFNvbWUgeFxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPnw9ICkgeCBmID0gbWFwIGYgeFxuICBsZXQgKCA+Pj0gKSA9ICggPj49IClcbiAgbGV0ICggPCo+ICkgPSAoIDwqPiApXG4gIGxldCAoIDwkPiApID0gbWFwXG4gIGxldCAoIDwrPiApID0gKCA8Kz4gKVxuICBsZXQgKCBsZXQrICkgPSAoID58PSApXG4gIGxldCAoIGxldCogKSA9ICggPj49IClcblxuICBsZXRbQGlubGluZV0gKCBhbmQrICkgbzEgbzIgPVxuICAgIG1hdGNoIG8xLCBvMiB3aXRoXG4gICAgfCBTb21lIHgsIFNvbWUgeSAtPiBTb21lICh4LCB5KVxuICAgIHwgXyAtPiBOb25lXG5cbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG5cbmxldCByYW5kb20gZyBzdCA9XG4gIGlmIFJhbmRvbS5TdGF0ZS5ib29sIHN0IHRoZW5cbiAgICBTb21lIChnIHN0KVxuICBlbHNlXG4gICAgTm9uZVxuXG5leGNlcHRpb24gRXhpdENob2ljZVxuXG5sZXQgY2hvaWNlX2l0ZXIgcyA9XG4gIGxldCByID0gcmVmIE5vbmUgaW5cbiAgKHRyeVxuICAgICBzIChmdW5jdGlvblxuICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgIHwgU29tZSBfIGFzIG8gLT5cbiAgICAgICAgIHIgOj0gbztcbiAgICAgICAgIHJhaXNlIEV4aXRDaG9pY2UpXG4gICB3aXRoIEV4aXRDaG9pY2UgLT4gKCkpO1xuICAhclxuXG5sZXQgcmVjIGNob2ljZV9zZXEgcyA9XG4gIG1hdGNoIHMgKCkgd2l0aFxuICB8IFNlcS5OaWwgLT4gTm9uZVxuICB8IFNlcS5Db25zIChTb21lIHgsIF8pIC0+IFNvbWUgeFxuICB8IFNlcS5Db25zIChOb25lLCB0bCkgLT4gY2hvaWNlX3NlcSB0bFxuXG5sZXQgdG9fZ2VuIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IGZ1biAoKSAtPiBOb25lXG4gIHwgU29tZSBfIC0+XG4gICAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuIChcbiAgICAgICAgZmlyc3QgOj0gZmFsc2U7XG4gICAgICAgIG9cbiAgICAgICkgZWxzZVxuICAgICAgICBOb25lXG5cbmxldCB0b19pdGVyIG8gayA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHggLT4gayB4XG5cbmxldCB0b19zZXEgbyAoKSA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gU2VxLk5pbFxuICB8IFNvbWUgeCAtPiBTZXEuQ29ucyAoeCwgU2VxLmVtcHR5KVxuXG5sZXQgcHAgcHB4IG91dCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIk5vbmVcIlxuICB8IFNvbWUgeCAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCJAW1NvbWUgJWFAXVwiIHBweCB4XG5cbmxldCBmbGF0dGVuID0gZnVuY3Rpb25cbiAgfCBTb21lIHggLT4geFxuICB8IE5vbmUgLT4gTm9uZVxuXG5sZXQgcmV0dXJuX2lmIGIgeCA9XG4gIGlmIGIgdGhlblxuICAgIFNvbWUgeFxuICBlbHNlXG4gICAgTm9uZVxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIFJhbmRvbSBHZW5lcmF0b3JzfSAqKVxuXG5pbmNsdWRlIFJhbmRvbVxuXG50eXBlIHN0YXRlID0gUmFuZG9tLlN0YXRlLnRcbnR5cGUgJ2EgdCA9IHN0YXRlIC0+ICdhXG50eXBlICdhIHJhbmRvbV9nZW4gPSAnYSB0XG5cbmxldCByZXR1cm4geCBfc3QgPSB4XG5sZXQgZmxhdF9tYXAgZiBnIHN0ID0gZiAoZyBzdCkgc3RcbmxldCAoID4+PSApIGcgZiBzdCA9IGZsYXRfbWFwIGYgZyBzdFxubGV0IG1hcCBmIGcgc3QgPSBmIChnIHN0KVxubGV0ICggPnw9ICkgZyBmIHN0ID0gbWFwIGYgZyBzdFxubGV0IGRlbGF5IGYgc3QgPSBmICgpIHN0XG5cbmxldCBfY2hvb3NlX2FycmF5IGEgc3QgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkNDUmFuZG9tLmNob29zZV9hcnJheVwiO1xuICBhLihSYW5kb20uU3RhdGUuaW50IHN0IChBcnJheS5sZW5ndGggYSkpXG5cbmxldCBjaG9vc2VfYXJyYXkgYSBzdCA9XG4gIHRyeSBTb21lIChfY2hvb3NlX2FycmF5IGEgc3Qgc3QpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcblxubGV0IGNob29zZSBsID1cbiAgbGV0IGEgPSBBcnJheS5vZl9saXN0IGwgaW5cbiAgY2hvb3NlX2FycmF5IGFcblxubGV0IGNob29zZV9leG4gbCA9XG4gIGxldCBhID0gQXJyYXkub2ZfbGlzdCBsIGluXG4gIGZ1biBzdCAtPiBfY2hvb3NlX2FycmF5IGEgc3Qgc3RcblxubGV0IGNob29zZV9yZXR1cm4gbCA9IF9jaG9vc2VfYXJyYXkgKEFycmF5Lm9mX2xpc3QgbClcblxuZXhjZXB0aW9uIFBpY2tfZnJvbV9lbXB0eVxuXG5sZXQgcGlja19saXN0IGwgPVxuICBsZXQgbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgaWYgbiA9IDAgdGhlbiByYWlzZSBQaWNrX2Zyb21fZW1wdHk7XG4gIGZ1biBzdCAtPiBMaXN0Lm50aCBsIChSYW5kb20uU3RhdGUuaW50IHN0IG4pXG5cbmxldCBwaWNrX2FycmF5IGEgPVxuICBsZXQgbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGlmIG4gPSAwIHRoZW4gcmFpc2UgUGlja19mcm9tX2VtcHR5O1xuICBmdW4gc3QgLT4gQXJyYXkuZ2V0IGEgKFJhbmRvbS5TdGF0ZS5pbnQgc3QgbilcblxubGV0IGludCBpIHN0ID0gUmFuZG9tLlN0YXRlLmludCBzdCBpXG5sZXQgc21hbGxfaW50ID0gaW50IDEwMFxubGV0IGludF9yYW5nZSBpIGogc3QgPSBpICsgUmFuZG9tLlN0YXRlLmludCBzdCAoaiAtIGkgKyAxKVxubGV0IGZsb2F0IGYgc3QgPSBSYW5kb20uU3RhdGUuZmxvYXQgc3QgZlxubGV0IHNtYWxsX2Zsb2F0ID0gZmxvYXQgMTAwLjBcbmxldCBmbG9hdF9yYW5nZSBpIGogc3QgPSBpICsuIFJhbmRvbS5TdGF0ZS5mbG9hdCBzdCAoaiAtLiBpKVxuXG4oKiBUT0RPOiBzYW1wbGUgZnVuY3Rpb25zICopXG5cbmxldCByZXBsaWNhdGUgbiBnIHN0ID1cbiAgbGV0IHJlYyBhdXggYWNjIG4gPVxuICAgIGlmIG4gPSAwIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGF1eCAoZyBzdCA6OiBhY2MpIChuIC0gMSlcbiAgaW5cbiAgYXV4IFtdIG5cblxuKCogU2FtcGxlIHdpdGhvdXQgcmVwbGFjZW1lbnQgdXNpbmcgcmVqZWN0aW9uIHNhbXBsaW5nLiAqKVxubGV0IHNhbXBsZV93aXRob3V0X2R1cGxpY2F0ZXMgKHR5cGUgZWx0KSB+Y21wIGsgKHJuZyA6IGVsdCB0KSBzdCA9XG4gIGxldCBtb2R1bGUgUyA9IFNldC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBlbHRcblxuICAgIGxldCBjb21wYXJlID0gY21wXG4gIGVuZCkgaW5cbiAgbGV0IHJlYyBhdXggcyBrID1cbiAgICBpZiBrIDw9IDAgdGhlblxuICAgICAgUy5lbGVtZW50cyBzXG4gICAgZWxzZSAoXG4gICAgICBsZXQgeCA9IHJuZyBzdCBpblxuICAgICAgaWYgUy5tZW0geCBzIHRoZW5cbiAgICAgICAgYXV4IHMga1xuICAgICAgZWxzZVxuICAgICAgICBhdXggKFMuYWRkIHggcykgKGsgLSAxKVxuICAgIClcbiAgaW5cbiAgaWYgayA8PSAwIHRoZW4gaW52YWxpZF9hcmcgXCJzYW1wbGVfd2l0aG91dF9kdXBsaWNhdGVzXCI7XG4gIGF1eCBTLmVtcHR5IGtcblxubGV0IGxpc3Rfc2VxIGwgc3QgPSBMaXN0Lm1hcCAoZnVuIGYgLT4gZiBzdCkgbFxuXG5sZXQgc3BsaXQgaSBzdCA9XG4gIGlmIGkgPCAyIHRoZW5cbiAgICBOb25lXG4gIGVsc2UgKFxuICAgIGxldCBqID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgKGkgLSAxKSBpblxuICAgIFNvbWUgKGosIGkgLSBqKVxuICApXG5cbmxldCBfZGlmZl9saXN0IH5sYXN0IGwgPVxuICBsZXQgcmVjIGRpZmZfbGlzdCBhY2MgPSBmdW5jdGlvblxuICAgIHwgWyBhIF0gLT4gU29tZSAoKGxhc3QgLSBhKSA6OiBhY2MpXG4gICAgfCBhIDo6IChiIDo6IF8gYXMgcikgLT4gZGlmZl9saXN0ICgoYiAtIGEpIDo6IGFjYykgclxuICAgIHwgW10gLT4gTm9uZVxuICBpblxuICBkaWZmX2xpc3QgW10gbFxuXG4oKiBQYXJ0aXRpb24gb2YgYW4gaW50IGludG8gW2xlbl0gaW50ZWdlcnMgdW5pZm9ybWx5LlxuICAgV2UgZmlyc3Qgc2FtcGxlIChsZW4tMSkgcG9pbnRzIGZyb20gdGhlIHNldCB7MSwuLmktMX0gd2l0aG91dCByZXBsYWNlbWVudC5cbiAgIFdlIHNvcnQgdGhlc2UgcG9pbnRzIGFuZCBhZGQgYmFjayAwIGFuZCBpLCB3ZSBoYXZlIHRodXNcbiAgIHhfMCA9IDAgPCB4XzEgPCB4XzIgPCDigKYgPCB4X3tsZW4tMX0gPCBpID0geF97bGVufS5cbiAgIElmIHdlIGRlZmluZSwgeV9rID0geF97aysxfSAtIHhfe2t9IGZvciBrIGluIDAg4oCmIChsZW4tMSksIHRoZW4gYnkgY29uc3RydWN0aW9uXG4gICDiiJFfayB5X2sgPSDiiJFfayAoeF97aysxfSAtIHhfayApID0geF97bGVufSAtIHhfMCA9IGkuICopXG5sZXQgc3BsaXRfbGlzdCBpIH5sZW4gc3QgPVxuICBpZiBsZW4gPD0gMSB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLnNwbGl0X2xpc3RcIjtcbiAgaWYgaSA+PSBsZW4gdGhlbiAoXG4gICAgbGV0IHhzID1cbiAgICAgIHNhbXBsZV93aXRob3V0X2R1cGxpY2F0ZXMgfmNtcDpjb21wYXJlIChsZW4gLSAxKSAoaW50X3JhbmdlIDEgKGkgLSAxKSkgc3RcbiAgICBpblxuICAgIF9kaWZmX2xpc3Qgfmxhc3Q6aSAoMCA6OiB4cylcbiAgKSBlbHNlXG4gICAgTm9uZVxuXG5sZXQgcmV0cnkgPyhtYXggPSAxMCkgZyBzdCA9XG4gIGxldCByZWMgYXV4IG4gPVxuICAgIG1hdGNoIGcgc3Qgd2l0aFxuICAgIHwgTm9uZSB3aGVuIG4gPSAwIC0+IE5vbmVcbiAgICB8IE5vbmUgLT4gYXV4IChuIC0gMSkgKCogcmV0cnkgKilcbiAgICB8IFNvbWUgXyBhcyByZXMgLT4gcmVzXG4gIGluXG4gIGF1eCBtYXhcblxubGV0IHJlYyB0cnlfc3VjY2Vzc2l2ZWx5IGwgc3QgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBOb25lXG4gIHwgZyA6OiBsJyAtPlxuICAgIChtYXRjaCBnIHN0IHdpdGhcbiAgICB8IE5vbmUgLT4gdHJ5X3N1Y2Nlc3NpdmVseSBsJyBzdFxuICAgIHwgU29tZSBfIGFzIHJlcyAtPiByZXMpXG5cbmxldCAoIDw/PiApIGEgYiA9IHRyeV9zdWNjZXNzaXZlbHkgWyBhOyBiIF1cblxuZXhjZXB0aW9uIEJhY2t0cmFja1xuXG5sZXQgX2Nob29zZV9hcnJheV9jYWxsIGEgZiBzdCA9XG4gIHRyeSBmIChfY2hvb3NlX2FycmF5IGEgc3QpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IHJhaXNlIEJhY2t0cmFja1xuXG5sZXQgZml4ID8oc3ViMSA9IFtdKSA/KHN1YjIgPSBbXSkgPyhzdWJuID0gW10pIH5iYXNlIGZ1ZWwgc3QgPVxuICBsZXQgc3ViMSA9IEFycmF5Lm9mX2xpc3Qgc3ViMVxuICBhbmQgc3ViMiA9IEFycmF5Lm9mX2xpc3Qgc3ViMlxuICBhbmQgc3VibiA9IEFycmF5Lm9mX2xpc3Qgc3VibiBpblxuICAoKiByZWN1cnNpdmUgZnVuY3Rpb24gd2l0aCBmdWVsICopXG4gIGxldCByZWMgbWFrZSBmdWVsIHN0ID1cbiAgICBpZiBmdWVsID0gMCB0aGVuXG4gICAgICByYWlzZSBCYWNrdHJhY2tcbiAgICBlbHNlIGlmIGZ1ZWwgPSAxIHRoZW5cbiAgICAgIGJhc2Ugc3RcbiAgICBlbHNlXG4gICAgICBfdHJ5X290aGVyd2lzZSAwXG4gICAgICAgIFt8XG4gICAgICAgICAgX2Nob29zZV9hcnJheV9jYWxsIHN1YjEgKGZ1biBmIC0+IGYgKG1ha2UgKGZ1ZWwgLSAxKSkgc3QpO1xuICAgICAgICAgIF9jaG9vc2VfYXJyYXlfY2FsbCBzdWIyIChmdW4gZiAtPlxuICAgICAgICAgICAgICBtYXRjaCBzcGxpdCBmdWVsIHN0IHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIEJhY2t0cmFja1xuICAgICAgICAgICAgICB8IFNvbWUgKGksIGopIC0+IGYgKG1ha2UgaSkgKG1ha2Ugaikgc3QpO1xuICAgICAgICAgIF9jaG9vc2VfYXJyYXlfY2FsbCBzdWJuIChmdW4gKGxlbiwgZikgLT5cbiAgICAgICAgICAgICAgbGV0IGxlbiA9IGxlbiBzdCBpblxuICAgICAgICAgICAgICBtYXRjaCBzcGxpdF9saXN0IGZ1ZWwgfmxlbiBzdCB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSBCYWNrdHJhY2tcbiAgICAgICAgICAgICAgfCBTb21lIGwnIC0+IGYgKGZ1biBzdCAtPiBMaXN0Lm1hcCAoZnVuIHggLT4gbWFrZSB4IHN0KSBsJykgc3QpO1xuICAgICAgICAgIGJhc2UgKCogYmFzZSBjYXNlIHRoZW4gKik7XG4gICAgICAgIHxdXG4gIGFuZCBfdHJ5X290aGVyd2lzZSBpIGEgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICByYWlzZSBCYWNrdHJhY2tcbiAgICBlbHNlIChcbiAgICAgIHRyeSBhLihpKSBzdCB3aXRoIEJhY2t0cmFjayAtPiBfdHJ5X290aGVyd2lzZSAoaSArIDEpIGFcbiAgICApXG4gIGluXG4gIG1ha2UgKGZ1ZWwgc3QpIHN0XG5cbmxldCBwdXJlIHggX3N0ID0geFxubGV0ICggPCo+ICkgZiBnIHN0ID0gZiBzdCAoZyBzdClcbmxldCAoIGxldCsgKSA9ICggPnw9IClcbmxldCAoIGxldCogKSA9ICggPj49IClcbmxldFtAaW5saW5lXSAoIGFuZCsgKSBhMSBhMiBzdCA9IGExIHN0LCBhMiBzdFxubGV0ICggYW5kKiApID0gKCBhbmQrIClcbmxldCBfX2RlZmF1bHRfc3RhdGUgPSBSYW5kb20uU3RhdGUubWFrZV9zZWxmX2luaXQgKClcbmxldCBydW4gPyhzdCA9IF9fZGVmYXVsdF9zdGF0ZSkgZyA9IGcgc3RcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBFcnJvciBNb25hZH0gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZXF1YWwgPSAnYSAtPiAnYSAtPiBib29sXG50eXBlICdhIG9yZCA9ICdhIC0+ICdhIC0+IGludFxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbigqKiB7MiBCYXNpY3N9ICopXG5cbnR5cGUgbm9ucmVjICgrJ2dvb2QsICsnYmFkKSByZXN1bHQgPSAoJ2dvb2QsICdiYWQpIHJlc3VsdCA9XG4gIHwgT2sgb2YgJ2dvb2RcbiAgfCBFcnJvciBvZiAnYmFkXG5cbnR5cGUgKCsnZ29vZCwgKydiYWQpIHQgPSAoJ2dvb2QsICdiYWQpIHJlc3VsdCA9IE9rIG9mICdnb29kIHwgRXJyb3Igb2YgJ2JhZFxuXG5sZXQgcmV0dXJuIHggPSBPayB4XG5sZXQgZmFpbCBzID0gRXJyb3Igc1xuXG5sZXQgZmFpbF9wcmludGYgZm9ybWF0ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgUHJpbnRmLmticHJpbnRmIChmdW4gYnVmIC0+IGZhaWwgKEJ1ZmZlci5jb250ZW50cyBidWYpKSBidWYgZm9ybWF0XG5cbmxldCBmYWlsX2ZwcmludGYgZm9ybWF0ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IG91dCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIG91dCAtPlxuICAgICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIG91dCAoKTtcbiAgICAgIGZhaWwgKEJ1ZmZlci5jb250ZW50cyBidWYpKVxuICAgIG91dCBmb3JtYXRcblxubGV0IGFkZF9jdHggbXNnIHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBFcnJvciBlIC0+IEVycm9yIChlIF4gXCJcXG5jb250ZXh0OlwiIF4gbXNnKVxuICB8IE9rIHggLT4gT2sgeFxuXG5sZXQgYWRkX2N0eGYgbXNnID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IG91dCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIG91dCBlIC0+XG4gICAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggb3V0ICgpO1xuICAgICAgYWRkX2N0eCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgZSlcbiAgICBvdXQgbXNnXG5cbmxldCBvZl9leG4gZSA9XG4gIGxldCBtc2cgPSBQcmludGV4Yy50b19zdHJpbmcgZSBpblxuICBFcnJvciBtc2dcblxubGV0IG9mX2V4bl90cmFjZSBlID1cbiAgbGV0IHJlcyA9XG4gICAgUHJpbnRmLnNwcmludGYgXCIlc1xcbiVzXCIgKFByaW50ZXhjLnRvX3N0cmluZyBlKSAoUHJpbnRleGMuZ2V0X2JhY2t0cmFjZSAoKSlcbiAgaW5cbiAgRXJyb3IgcmVzXG5cbmxldCBvcHRfbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE5vbmUgLT4gT2sgTm9uZVxuICB8IFNvbWUgeCAtPlxuICAgIChtYXRjaCBmIHggd2l0aFxuICAgIHwgT2sgeCAtPiBPayAoU29tZSB4KVxuICAgIHwgRXJyb3IgZSAtPiBFcnJvciBlKVxuXG5sZXQgbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gT2sgKGYgeClcbiAgfCBFcnJvciBzIC0+IEVycm9yIHNcblxubGV0IG1hcF9lcnIgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgXyBhcyByZXMgLT4gcmVzXG4gIHwgRXJyb3IgeSAtPiBFcnJvciAoZiB5KVxuXG5sZXQgbWFwMiBmIGcgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gT2sgKGYgeClcbiAgfCBFcnJvciBzIC0+IEVycm9yIChnIHMpXG5cbmxldCBpdGVyIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gZiB4XG4gIHwgRXJyb3IgXyAtPiAoKVxuXG5sZXQgaXRlcl9lcnIgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgXyAtPiAoKVxuICB8IEVycm9yIGVyciAtPiBmIGVyclxuXG5leGNlcHRpb24gR2V0X2Vycm9yXG5cbmxldCBnZXRfZXhuID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IHhcbiAgfCBFcnJvciBfIC0+IHJhaXNlIEdldF9lcnJvclxuXG5sZXQgZ2V0X29yIGUgfmRlZmF1bHQgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IHhcbiAgfCBFcnJvciBfIC0+IGRlZmF1bHRcblxubGV0IGdldF9sYXp5IGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIGUgLT4gZiBlXG5cbmxldCBnZXRfb3JfZmFpbHdpdGggPSBmdW5jdGlvblxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIG1zZyAtPiBmYWlsd2l0aCBtc2dcblxubGV0IG1hcF9vciBmIGUgfmRlZmF1bHQgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IGYgeFxuICB8IEVycm9yIF8gLT4gZGVmYXVsdFxuXG5sZXQgY2F0Y2ggZSB+b2sgfmVyciA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gb2sgeFxuICB8IEVycm9yIHkgLT4gZXJyIHlcblxubGV0IGZsYXRfbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gZiB4XG4gIHwgRXJyb3IgcyAtPiBFcnJvciBzXG5cbmxldCBlcXVhbCB+ZXJyIGVxIGEgYiA9XG4gIG1hdGNoIGEsIGIgd2l0aFxuICB8IE9rIHgsIE9rIHkgLT4gZXEgeCB5XG4gIHwgRXJyb3IgcywgRXJyb3IgcycgLT4gZXJyIHMgcydcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIH5lcnIgY21wIGEgYiA9XG4gIG1hdGNoIGEsIGIgd2l0aFxuICB8IE9rIHgsIE9rIHkgLT4gY21wIHggeVxuICB8IE9rIF8sIF8gLT4gMVxuICB8IF8sIE9rIF8gLT4gLTFcbiAgfCBFcnJvciBzLCBFcnJvciBzJyAtPiBlcnIgcyBzJ1xuXG5sZXQgZm9sZCB+b2sgfmVycm9yIHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBPayB4IC0+IG9rIHhcbiAgfCBFcnJvciBzIC0+IGVycm9yIHNcblxubGV0IGZvbGRfb2sgZiBhY2MgciA9XG4gIG1hdGNoIHIgd2l0aFxuICB8IE9rIHggLT4gZiBhY2MgeFxuICB8IEVycm9yIF8gLT4gYWNjXG5cbmxldCBpc19vayA9IGZ1bmN0aW9uXG4gIHwgT2sgXyAtPiB0cnVlXG4gIHwgRXJyb3IgXyAtPiBmYWxzZVxuXG5sZXQgaXNfZXJyb3IgPSBmdW5jdGlvblxuICB8IE9rIF8gLT4gZmFsc2VcbiAgfCBFcnJvciBfIC0+IHRydWVcblxuKCoqIHsyIFdyYXBwZXJzfSAqKVxuXG5sZXQgZ3VhcmQgZiA9IHRyeSBPayAoZiAoKSkgd2l0aCBlIC0+IEVycm9yIGVcbmxldCBndWFyZF9zdHIgZiA9IHRyeSBPayAoZiAoKSkgd2l0aCBlIC0+IG9mX2V4biBlXG5sZXQgZ3VhcmRfc3RyX3RyYWNlIGYgPSB0cnkgT2sgKGYgKCkpIHdpdGggZSAtPiBvZl9leG5fdHJhY2UgZVxubGV0IHdyYXAxIGYgeCA9IHRyeSByZXR1cm4gKGYgeCkgd2l0aCBlIC0+IEVycm9yIGVcbmxldCB3cmFwMiBmIHggeSA9IHRyeSByZXR1cm4gKGYgeCB5KSB3aXRoIGUgLT4gRXJyb3IgZVxubGV0IHdyYXAzIGYgeCB5IHogPSB0cnkgcmV0dXJuIChmIHggeSB6KSB3aXRoIGUgLT4gRXJyb3IgZVxuXG4oKiogezIgQXBwbGljYXRpdmV9ICopXG5cbmxldCBwdXJlID0gcmV0dXJuXG5cbmxldCAoIDwqPiApIGYgeCA9XG4gIG1hdGNoIGYgd2l0aFxuICB8IEVycm9yIHMgLT4gZmFpbCBzXG4gIHwgT2sgZiAtPiBtYXAgZiB4XG5cbmxldCBqb2luIHQgPVxuICBtYXRjaCB0IHdpdGhcbiAgfCBPayAoT2sgbykgLT4gT2sgb1xuICB8IE9rIChFcnJvciBlKSAtPiBFcnJvciBlXG4gIHwgRXJyb3IgXyBhcyBlIC0+IGVcblxubGV0IGJvdGggeCB5ID1cbiAgbWF0Y2ggeCwgeSB3aXRoXG4gIHwgT2sgbywgT2sgbycgLT4gT2sgKG8sIG8nKVxuICB8IE9rIF8sIEVycm9yIGUgLT4gRXJyb3IgZVxuICB8IEVycm9yIGUsIF8gLT4gRXJyb3IgZVxuXG4oKiogezIgQ29sbGVjdGlvbnN9ICopXG5cbmxldCBtYXBfbCBmIGwgPVxuICBsZXQgcmVjIG1hcCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBPayAoTGlzdC5yZXYgYWNjKVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgKG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuICAgICAgfCBPayB5IC0+IG1hcCAoeSA6OiBhY2MpIGwnKVxuICBpblxuICBtYXAgW10gbFxuXG5sZXQgZmxhdHRlbl9sIGwgPVxuICBsZXQgcmVjIGxvb3AgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gT2sgKExpc3QucmV2IGFjYylcbiAgICB8IE9rIHggOjogbCcgLT4gbG9vcCAoeCA6OiBhY2MpIGwnXG4gICAgfCBFcnJvciBlIDo6IF8gLT4gRXJyb3IgZVxuICBpblxuICBsb29wIFtdIGxcblxuZXhjZXB0aW9uIExvY2FsRXhpdFxuXG5sZXQgZm9sZF9pdGVyIGYgYWNjIHNlcSA9XG4gIGxldCBlcnIgPSByZWYgTm9uZSBpblxuICB0cnlcbiAgICBsZXQgYWNjID0gcmVmIGFjYyBpblxuICAgIHNlcSAoZnVuIHggLT5cbiAgICAgICAgbWF0Y2ggZiAhYWNjIHggd2l0aFxuICAgICAgICB8IEVycm9yIHMgLT5cbiAgICAgICAgICBlcnIgOj0gU29tZSBzO1xuICAgICAgICAgIHJhaXNlIExvY2FsRXhpdFxuICAgICAgICB8IE9rIHkgLT4gYWNjIDo9IHkpO1xuICAgIE9rICFhY2NcbiAgd2l0aCBMb2NhbEV4aXQgLT5cbiAgICAobWF0Y2ggIWVyciB3aXRoXG4gICAgfCBOb25lIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgU29tZSBzIC0+IEVycm9yIHMpXG5cbmxldCBmb2xkX2wgZiBhY2MgbCA9IGZvbGRfaXRlciBmIGFjYyAoZnVuIGsgLT4gTGlzdC5pdGVyIGsgbClcblxuKCoqIHsyIE1pc2N9ICopXG5cbmxldCBjaG9vc2UgbCA9XG4gIGxldCByZWMgZmluZF8gPSBmdW5jdGlvblxuICAgIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgfCAoT2sgXyBhcyByZXMpIDo6IF8gLT4gcmVzXG4gICAgfCBFcnJvciBfIDo6IGwnIC0+IGZpbmRfIGwnXG4gIGluXG4gIHRyeSBmaW5kXyBsXG4gIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgbGV0IGwnID1cbiAgICAgIExpc3QubWFwXG4gICAgICAgIChmdW5jdGlvblxuICAgICAgICAgIHwgRXJyb3IgcyAtPiBzXG4gICAgICAgICAgfCBPayBfIC0+IGFzc2VydCBmYWxzZSlcbiAgICAgICAgbFxuICAgIGluXG4gICAgRXJyb3IgbCdcblxubGV0IHJldHJ5IG4gZiA9XG4gIGxldCByZWMgcmV0cnkgbiBhY2MgPVxuICAgIG1hdGNoIG4gd2l0aFxuICAgIHwgMCAtPiBmYWlsIChMaXN0LnJldiBhY2MpXG4gICAgfCBfIC0+XG4gICAgICAobWF0Y2ggZiAoKSB3aXRoXG4gICAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgICAgfCBFcnJvciBlIC0+IHJldHJ5IChuIC0gMSkgKGUgOjogYWNjKSlcbiAgaW5cbiAgcmV0cnkgbiBbXVxuXG4oKiogezIgSW5maXh9ICopXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA8JD4gKSA9IG1hcFxuICBsZXQgKCA+fD0gKSBlIGYgPSBtYXAgZiBlXG4gIGxldCAoID4+PSApIGUgZiA9IGZsYXRfbWFwIGYgZVxuICBsZXQgKCA8Kj4gKSA9ICggPCo+IClcbiAgbGV0ICggbGV0KyApID0gKCA+fD0gKVxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG5cbiAgbGV0W0BpbmxpbmVdICggYW5kKyApIHgxIHgyID1cbiAgICBtYXRjaCB4MSwgeDIgd2l0aFxuICAgIHwgT2sgeCwgT2sgeSAtPiBPayAoeCwgeSlcbiAgICB8IEVycm9yIGUsIF8gLT4gRXJyb3IgZVxuICAgIHwgXywgRXJyb3IgZSAtPiBFcnJvciBlXG5cbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbigqKiB7MiBNb25hZGljIE9wZXJhdGlvbnN9ICopXG5cbm1vZHVsZSB0eXBlIE1PTkFEID0gc2lnXG4gIHR5cGUgJ2EgdFxuXG4gIHZhbCByZXR1cm4gOiAnYSAtPiAnYSB0XG4gIHZhbCAoID4+PSApIDogJ2EgdCAtPiAoJ2EgLT4gJ2IgdCkgLT4gJ2IgdFxuZW5kXG5cbm1vZHVsZSBUcmF2ZXJzZSAoTSA6IE1PTkFEKSA9IHN0cnVjdFxuICBsZXQgKCA+Pj0gKSA9IE0uKCA+Pj0gKVxuXG4gIGxldCBtYXBfbSBmIGUgPVxuICAgIG1hdGNoIGUgd2l0aFxuICAgIHwgRXJyb3IgcyAtPiBNLnJldHVybiAoRXJyb3IgcylcbiAgICB8IE9rIHggLT4gZiB4ID4+PSBmdW4geSAtPiBNLnJldHVybiAoT2sgeSlcblxuICBsZXQgc2VxdWVuY2VfbSBtID0gbWFwX20gKGZ1biB4IC0+IHgpIG1cblxuICBsZXQgZm9sZF9tIGYgYWNjIGUgPVxuICAgIG1hdGNoIGUgd2l0aFxuICAgIHwgRXJyb3IgXyAtPiBNLnJldHVybiBhY2NcbiAgICB8IE9rIHggLT4gZiBhY2MgeCA+Pj0gZnVuIHkgLT4gTS5yZXR1cm4geVxuXG4gIGxldCByZXRyeV9tIG4gZiA9XG4gICAgbGV0IHJlYyByZXRyeSBuIGFjYyA9XG4gICAgICBtYXRjaCBuIHdpdGhcbiAgICAgIHwgMCAtPiBNLnJldHVybiAoZmFpbCAoTGlzdC5yZXYgYWNjKSlcbiAgICAgIHwgXyAtPlxuICAgICAgICBmICgpID4+PSAoIGZ1bmN0aW9uXG4gICAgICAgIHwgT2sgeCAtPiBNLnJldHVybiAoT2sgeClcbiAgICAgICAgfCBFcnJvciBlIC0+IHJldHJ5IChuIC0gMSkgKGUgOjogYWNjKSApXG4gICAgaW5cbiAgICByZXRyeSBuIFtdXG5lbmRcblxuKCoqIHsyIENvbnZlcnNpb25zfSAqKVxuXG5sZXQgdG9fb3B0ID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IFNvbWUgeFxuICB8IEVycm9yIF8gLT4gTm9uZVxuXG5sZXQgb2Zfb3B0ID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IEVycm9yIFwib2Zfb3B0XCJcbiAgfCBTb21lIHggLT4gT2sgeFxuXG5sZXQgdG9fc2VxIGUgKCkgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IFNlcS5Db25zICh4LCBTZXEuZW1wdHkpXG4gIHwgRXJyb3IgXyAtPiBTZXEuTmlsXG5cbmxldCB0b19pdGVyIGUgayA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gayB4XG4gIHwgRXJyb3IgXyAtPiAoKVxuXG50eXBlICgnYSwgJ2IpIGVycm9yID0gWyBgT2sgb2YgJ2EgfCBgRXJyb3Igb2YgJ2IgXVxuXG5sZXQgb2ZfZXJyID0gZnVuY3Rpb25cbiAgfCBgT2sgeCAtPiBPayB4XG4gIHwgYEVycm9yIHkgLT4gRXJyb3IgeVxuXG5sZXQgdG9fZXJyID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IGBPayB4XG4gIHwgRXJyb3IgeSAtPiBgRXJyb3IgeVxuXG4oKiogezIgSU99ICopXG5cbmxldCBwcCBwcF94IGZtdCBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCJAW29rKEAsJWEpQF1cIiBwcF94IHhcbiAgfCBFcnJvciBzIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbZXJyb3IoQCwlcylAXVwiIHNcblxubGV0IHBwJyBwcF94IHBwX2UgZm10IGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbb2soQCwlYSlAXVwiIHBwX3ggeFxuICB8IEVycm9yIHMgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiQFtlcnJvcihALCVhKUBdXCIgcHBfZSBzXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgV3JhcHBlciBhcm91bmQgU2V0fSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbm1vZHVsZSB0eXBlIE9yZGVyZWRUeXBlID0gU2V0Lk9yZGVyZWRUeXBlXG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgaW5jbHVkZSBTZXQuU1xuXG4gIHZhbCBtaW5fZWx0X29wdCA6IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshbWluX2VsdH0uXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIG1heF9lbHRfb3B0IDogdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFtYXhfZWx0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgY2hvb3NlX29wdCA6IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshY2hvb3NlfS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9vcHQgOiBlbHQgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFmaW5kfS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9maXJzdCA6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgKCoqIEZpbmQgbWluaW11bSBlbGVtZW50IHNhdGlzZnlpbmcgcHJlZGljYXRlLlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX2ZpcnN0X29wdCA6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFmaW5kX2ZpcnN0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9maXJzdF9tYXAgOiAoZWx0IC0+ICdhIG9wdGlvbikgLT4gdCAtPiAnYSBvcHRpb25cbiAgKCoqIFtmaW5kX2ZpcnN0X21hcCBmIHNdIGZpbmQgdGhlIG1pbmltdW0gZWxlbWVudCBbeF0gb2YgW3NdIHN1Y2ggdGhhdCBbZiB4ID0gU29tZSB5XVxuICAgICAgYW5kIHJldHVybiBbU29tZSB5XS4gT3RoZXJ3aXNlIHJldHVybnMgW05vbmVdLlxuICAgICAgQHNpbmNlIDMuMTIgKilcblxuICB2YWwgZmluZF9sYXN0IDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdFxuICAoKiogRmluZCBtYXhpbXVtIGVsZW1lbnQgc2F0aXNmeWluZyBwcmVkaWNhdGUuXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIGZpbmRfbGFzdF9vcHQgOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshZmluZF9sYXN0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9sYXN0X21hcCA6IChlbHQgLT4gJ2Egb3B0aW9uKSAtPiB0IC0+ICdhIG9wdGlvblxuICAoKiogW2ZpbmRfbGFzdF9tYXAgZiBzXSBmaW5kIHRoZSBtYXhpbXVtIGVsZW1lbnQgW3hdIG9mIFtzXSBzdWNoIHRoYXQgW2YgeCA9IFNvbWUgeV1cbiAgICAgIGFuZCByZXR1cm4gW1NvbWUgeV0uIE90aGVyd2lzZSByZXR1cm5zIFtOb25lXS5cbiAgICAgIEBzaW5jZSAzLjEyICopXG5cbiAgdmFsIG9mX2l0ZXIgOiBlbHQgaXRlciAtPiB0XG4gICgqKiBCdWlsZCBhIHNldCBmcm9tIHRoZSBnaXZlbiBbaXRlcl0gb2YgZWxlbWVudHMuXG4gICAgICBAc2luY2UgMi44ICopXG5cbiAgdmFsIG9mX3NlcSA6IGVsdCBTZXEudCAtPiB0XG4gICgqKiBCdWlsZCBhIHNldCBmcm9tIHRoZSBnaXZlbiBbc2VxXSBvZiBlbGVtZW50cy5cbiAgICAgIEBzaW5jZSAzLjAgKilcblxuICB2YWwgYWRkX2l0ZXIgOiB0IC0+IGVsdCBpdGVyIC0+IHRcbiAgKCoqIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX3NlcSA6IGVsdCBTZXEudCAtPiB0IC0+IHRcbiAgKCoqIEBzaW5jZSAzLjAgKilcblxuICB2YWwgdG9faXRlciA6IHQgLT4gZWx0IGl0ZXJcbiAgKCoqIFt0b19pdGVyIHRdIGNvbnZlcnRzIHRoZSBzZXQgW3RdIHRvIGEgW2l0ZXJdIG9mIHRoZSBlbGVtZW50cy5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX2xpc3QgOiB0IC0+IGVsdCBsaXN0IC0+IHRcbiAgKCoqIEBzaW5jZSAwLjE0ICopXG5cbiAgdmFsIHRvX2xpc3QgOiB0IC0+IGVsdCBsaXN0XG4gICgqKiBbdG9fbGlzdCB0XSBjb252ZXJ0cyB0aGUgc2V0IFt0XSB0byBhIGxpc3Qgb2YgdGhlIGVsZW1lbnRzLiAqKVxuXG4gIHZhbCB0b19zdHJpbmcgOlxuICAgID9zdGFydDpzdHJpbmcgLT5cbiAgICA/c3RvcDpzdHJpbmcgLT5cbiAgICA/c2VwOnN0cmluZyAtPlxuICAgIChlbHQgLT4gc3RyaW5nKSAtPlxuICAgIHQgLT5cbiAgICBzdHJpbmdcbiAgKCoqICBQcmludCB0aGUgc2V0IGluIGEgc3RyaW5nXG4gICAgICAgQHNpbmNlIDIuNyAqKVxuXG4gIHZhbCBwcCA6XG4gICAgP3BwX3N0YXJ0OnVuaXQgcHJpbnRlciAtPlxuICAgID9wcF9zdG9wOnVuaXQgcHJpbnRlciAtPlxuICAgID9wcF9zZXA6dW5pdCBwcmludGVyIC0+XG4gICAgZWx0IHByaW50ZXIgLT5cbiAgICB0IHByaW50ZXJcbiAgKCoqIFByaW50IHRoZSBzZXQuICopXG5lbmRcblxubW9kdWxlIE1ha2UgKE8gOiBNYXAuT3JkZXJlZFR5cGUpID0gc3RydWN0XG4gIG1vZHVsZSBTID0gU2V0Lk1ha2UgKE8pXG5cbiAgKCogYmFja3BvcnQgZnVuY3Rpb25zIGZyb20gcmVjZW50IHN0ZGxpYi5cbiAgICAgdGhleSB3aWxsIGJlIHNoYWRvd2VkIGJ5IGluY2x1c2lvbiBvZiBbU10gaWYgcHJlc2VudC4gKilcblxuICBbQEBAb2NhbWwud2FybmluZyBcIi0zMlwiXVxuXG4gIGxldCBmaW5kX29wdCB4IHMgPSB0cnkgU29tZSAoUy5maW5kIHggcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuICBsZXQgY2hvb3NlX29wdCBzID0gdHJ5IFNvbWUgKFMuY2hvb3NlIHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbiAgbGV0IG1pbl9lbHRfb3B0IHMgPSB0cnkgU29tZSAoUy5taW5fZWx0IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbiAgbGV0IG1heF9lbHRfb3B0IHMgPSB0cnkgU29tZSAoUy5tYXhfZWx0IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxuICBleGNlcHRpb24gRmluZF9iaW5kaW5nX2V4aXRcblxuICBsZXQgZmluZF9maXJzdF9vcHQgZiBtID1cbiAgICBsZXQgcmVzID0gcmVmIE5vbmUgaW5cbiAgICB0cnlcbiAgICAgIFMuaXRlclxuICAgICAgICAoZnVuIHggLT5cbiAgICAgICAgICBpZiBmIHggdGhlbiAoXG4gICAgICAgICAgICByZXMgOj0gU29tZSB4O1xuICAgICAgICAgICAgcmFpc2UgRmluZF9iaW5kaW5nX2V4aXRcbiAgICAgICAgICApKVxuICAgICAgICBtO1xuICAgICAgTm9uZVxuICAgIHdpdGggRmluZF9iaW5kaW5nX2V4aXQgLT4gIXJlc1xuXG4gIGxldCBmaW5kX2ZpcnN0IGYgbSA9XG4gICAgbWF0Y2ggZmluZF9maXJzdF9vcHQgZiBtIHdpdGhcbiAgICB8IE5vbmUgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgfCBTb21lIHggLT4geFxuXG4gIGxldCBmaW5kX2ZpcnN0X21hcCBmIG0gPVxuICAgIGxldCByZXMgPSByZWYgTm9uZSBpblxuICAgIHRyeVxuICAgICAgUy5pdGVyXG4gICAgICAgIChmdW4geCAtPlxuICAgICAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHkgLT5cbiAgICAgICAgICAgIHJlcyA6PSBTb21lIHk7XG4gICAgICAgICAgICByYWlzZSBGaW5kX2JpbmRpbmdfZXhpdClcbiAgICAgICAgbTtcbiAgICAgIE5vbmVcbiAgICB3aXRoIEZpbmRfYmluZGluZ19leGl0IC0+ICFyZXNcblxuICAoKiBsaW5lYXIgdGltZSwgbXVzdCB0cmF2ZXJzZSB0aGUgd2hvbGUgc2V04oCmICopXG4gIGxldCBmaW5kX2xhc3Rfb3B0IGYgbSA9XG4gICAgbGV0IHJlcyA9IHJlZiBOb25lIGluXG4gICAgUy5pdGVyIChmdW4geCAtPiBpZiBmIHggdGhlbiByZXMgOj0gU29tZSB4KSBtO1xuICAgICFyZXNcblxuICBsZXQgZmluZF9sYXN0IGYgbSA9XG4gICAgbWF0Y2ggZmluZF9sYXN0X29wdCBmIG0gd2l0aFxuICAgIHwgTm9uZSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8IFNvbWUgeCAtPiB4XG5cbiAgW0BAQG9jYW1sLndhcm5pbmcgXCIrMzJcIl1cblxuICBpbmNsdWRlIFNcblxuICAoKiBVc2UgZmluZF9sYXN0IHdoaWNoIGlzIGxpbmVhciB0aW1lIG9uIE9DYW1sIDwgNC4wNSAqKVxuICBsZXQgZmluZF9sYXN0X21hcCBmIG0gPVxuICAgIGxldCByZXMgPSByZWYgTm9uZSBpblxuICAgIGxldCBfID1cbiAgICAgIGZpbmRfbGFzdF9vcHRcbiAgICAgICAgKGZ1biB4IC0+XG4gICAgICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gZmFsc2VcbiAgICAgICAgICB8IFNvbWUgeSAtPlxuICAgICAgICAgICAgcmVzIDo9IFNvbWUgeTtcbiAgICAgICAgICAgIHRydWUpXG4gICAgICAgIG1cbiAgICBpblxuICAgICFyZXNcblxuICBsZXQgYWRkX3NlcSBzZXEgc2V0ID1cbiAgICBsZXQgc2V0ID0gcmVmIHNldCBpblxuICAgIFNlcS5pdGVyIChmdW4geCAtPiBzZXQgOj0gYWRkIHggIXNldCkgc2VxO1xuICAgICFzZXRcblxuICBsZXQgb2Zfc2VxIHMgPSBhZGRfc2VxIHMgZW1wdHlcblxuICBsZXQgYWRkX2l0ZXIgc2V0IGkgPVxuICAgIGxldCBzZXQgPSByZWYgc2V0IGluXG4gICAgaSAoZnVuIHggLT4gc2V0IDo9IGFkZCB4ICFzZXQpO1xuICAgICFzZXRcblxuICBsZXQgb2ZfaXRlciBzID0gYWRkX2l0ZXIgZW1wdHkgc1xuICBsZXQgdG9faXRlciBzIHlpZWxkID0gaXRlciB5aWVsZCBzXG4gIGxldCBhZGRfbGlzdCA9IExpc3QuZm9sZF9sZWZ0IChmdW4gc2V0IHggLT4gYWRkIHggc2V0KVxuICBsZXQgdG9fbGlzdCA9IGVsZW1lbnRzXG5cbiAgbGV0IHRvX3N0cmluZyA/KHN0YXJ0ID0gXCJcIikgPyhzdG9wID0gXCJcIikgPyhzZXAgPSBcIixcIikgZWx0X3RvX3N0cmluZyBoID1cbiAgICB0b19saXN0IGggfD4gQ0NMaXN0LnRvX3N0cmluZyB+c3RhcnQgfnN0b3AgfnNlcCBlbHRfdG9fc3RyaW5nXG5cbiAgbGV0IHBwID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgICA/KHBwX3NlcCA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCIpIHBwX3ggZm10IG0gPVxuICAgIHBwX3N0YXJ0IGZtdCAoKTtcbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIGl0ZXJcbiAgICAgIChmdW4geCAtPlxuICAgICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBwcF9zZXAgZm10ICgpO1xuICAgICAgICBwcF94IGZtdCB4KVxuICAgICAgbTtcbiAgICBwcF9zdG9wIGZtdCAoKVxuZW5kXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgQmFzaWMgU3RyaW5nIFV0aWxzfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxuXG4oKiBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbnMgKilcblxuaW5jbHVkZSBTdHJpbmdcblxubGV0IGNvbXBhcmVfaW50IChhIDogaW50KSBiID0gU3RkbGliLmNvbXBhcmUgYSBiXG5sZXQgY29tcGFyZSA9IFN0cmluZy5jb21wYXJlXG5sZXQgaGFzaCBzID0gSGFzaHRibC5oYXNoIHNcbmxldCBsZW5ndGggPSBTdHJpbmcubGVuZ3RoXG5sZXQgaXNfZW1wdHkgcyA9IGVxdWFsIHMgXCJcIlxuXG5sZXQgcmV2IHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGluaXQgbiAoZnVuIGkgLT4gcy5bbiAtIGkgLSAxXSlcblxubGV0IHJlYyBfdG9fbGlzdCBzIGFjYyBpIGxlbiA9XG4gIGlmIGxlbiA9IDAgdGhlblxuICAgIExpc3QucmV2IGFjY1xuICBlbHNlXG4gICAgX3RvX2xpc3QgcyAocy5baV0gOjogYWNjKSAoaSArIDEpIChsZW4gLSAxKVxuXG5sZXQgX2lzX3N1YiB+c3ViIGkgcyBqIH5sZW4gPVxuICBsZXQgcmVjIGNoZWNrIGsgPVxuICAgIGlmIGsgPSBsZW4gdGhlblxuICAgICAgdHJ1ZVxuICAgIGVsc2VcbiAgICAgIENDQ2hhci5lcXVhbCBzdWIuW2kgKyBrXSBzLltqICsga10gJiYgY2hlY2sgKGsgKyAxKVxuICBpblxuICBqICsgbGVuIDw9IFN0cmluZy5sZW5ndGggcyAmJiBjaGVjayAwXG5cbmxldCBpc19zdWIgfnN1YiBpIHMgaiB+bGVuID1cbiAgaWYgaSArIGxlbiA+IFN0cmluZy5sZW5ndGggc3ViIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5pc19zdWJcIjtcbiAgX2lzX3N1YiB+c3ViIGkgcyBqIH5sZW5cblxudHlwZSBfIGRpcmVjdGlvbiA9XG4gIHwgRGlyZWN0IDogWyBgRGlyZWN0IF0gZGlyZWN0aW9uXG4gIHwgUmV2ZXJzZSA6IFsgYFJldmVyc2UgXSBkaXJlY3Rpb25cblxuKCogd2UgZm9sbG93IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0tudXRo4oCTTW9ycmlz4oCTUHJhdHRfYWxnb3JpdGhtICopXG5tb2R1bGUgRmluZCA9IHN0cnVjdFxuICB0eXBlICdhIGttcF9wYXR0ZXJuID0geyBmYWlsdXJlOiBpbnQgYXJyYXk7IHN0cjogc3RyaW5nIH1cbiAgKCogaW52YXJpYW50OiBbbGVuZ3RoIGZhaWx1cmUgPSBsZW5ndGggc3RyXS5cbiAgICAgV2UgdXNlIGEgcGhhbnRvbSB0eXBlIHRvIGF2b2lkIG1peGluZyB0aGUgZGlyZWN0aW9ucy4gKilcblxuICBsZXQga21wX3BhdHRlcm5fbGVuZ3RoIHAgPSBTdHJpbmcubGVuZ3RoIHAuc3RyXG5cbiAgKCogYWNjZXNzIHRoZSBbaV0tdGggZWxlbWVudCBvZiBbc10gYWNjb3JkaW5nIHRvIGRpcmVjdGlvbiBbZGlyXSAqKVxuICBsZXQgZ2V0XyA6IHR5cGUgYS4gZGlyOmEgZGlyZWN0aW9uIC0+IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9XG4gICBmdW4gfmRpciAtPlxuICAgIG1hdGNoIGRpciB3aXRoXG4gICAgfCBEaXJlY3QgLT4gU3RyaW5nLmdldFxuICAgIHwgUmV2ZXJzZSAtPiBmdW4gcyBpIC0+IHMuW1N0cmluZy5sZW5ndGggcyAtIGkgLSAxXVxuXG4gIGxldCBrbXBfY29tcGlsZV8gOiB0eXBlIGEuIGRpcjphIGRpcmVjdGlvbiAtPiBzdHJpbmcgLT4gYSBrbXBfcGF0dGVybiA9XG4gICBmdW4gfmRpciBzdHIgLT5cbiAgICBsZXQgbGVuID0gbGVuZ3RoIHN0ciBpblxuICAgIGxldCBnZXQgPSBnZXRfIH5kaXIgaW5cbiAgICAoKiBob3cgdG8gcmVhZCBlbGVtZW50cyBvZiB0aGUgc3RyaW5nICopXG4gICAgbWF0Y2ggbGVuIHdpdGhcbiAgICB8IDAgLT4geyBmYWlsdXJlID0gW3x8XTsgc3RyIH1cbiAgICB8IDEgLT4geyBmYWlsdXJlID0gW3wgLTEgfF07IHN0ciB9XG4gICAgfCBfIC0+XG4gICAgICAoKiBhdCBsZWFzdCAyIGVsZW1lbnRzLCB0aGUgYWxnb3JpdGhtIGNhbiB3b3JrICopXG4gICAgICBsZXQgZmFpbHVyZSA9IEFycmF5Lm1ha2UgbGVuIDAgaW5cbiAgICAgIGZhaWx1cmUuKDApIDwtIC0xO1xuICAgICAgKCogaTogY3VycmVudCBpbmRleCBpbiBzdHIgKilcbiAgICAgIGxldCBpID0gcmVmIDIgaW5cbiAgICAgICgqIGo6IGluZGV4IG9mIGNhbmRpZGF0ZSBzdWJzdHJpbmcgKilcbiAgICAgIGxldCBqID0gcmVmIDAgaW5cbiAgICAgIHdoaWxlICFpIDwgbGVuIGRvXG4gICAgICAgIG1hdGNoICFqIHdpdGhcbiAgICAgICAgfCBfIHdoZW4gQ0NDaGFyLmVxdWFsIChnZXQgc3RyICghaSAtIDEpKSAoZ2V0IHN0ciAhaikgLT5cbiAgICAgICAgICAoKiBzdWJzdHJpbmcgc3RhcnRpbmcgYXQgIWogY29udGludWVzIG1hdGNoaW5nIGN1cnJlbnQgY2hhciAqKVxuICAgICAgICAgIGluY3IgajtcbiAgICAgICAgICBmYWlsdXJlLighaSkgPC0gIWo7XG4gICAgICAgICAgaW5jciBpXG4gICAgICAgIHwgMCAtPlxuICAgICAgICAgICgqIGJhY2sgdG8gdGhlIGJlZ2lubmluZyAqKVxuICAgICAgICAgIGZhaWx1cmUuKCFpKSA8LSAwO1xuICAgICAgICAgIGluY3IgaVxuICAgICAgICB8IF8gLT5cbiAgICAgICAgICAoKiBmYWxsYmFjayBmb3IgdGhlIHByZWZpeCBzdHJpbmcgKilcbiAgICAgICAgICBhc3NlcnQgKCFqID4gMCk7XG4gICAgICAgICAgaiA6PSBmYWlsdXJlLighailcbiAgICAgIGRvbmU7XG4gICAgICAoKiBGb3JtYXQucHJpbnRmIFwie0BbZmFpbHVyZTolYSwgc3RyOiVzQF19QC5cIiBDQ0Zvcm1hdC4oYXJyYXkgaW50KSBmYWlsdXJlIHN0cjsgKilcbiAgICAgIHsgZmFpbHVyZTsgc3RyIH1cblxuICBsZXQga21wX2NvbXBpbGUgcyA9IGttcF9jb21waWxlXyB+ZGlyOkRpcmVjdCBzXG4gIGxldCBrbXBfcmNvbXBpbGUgcyA9IGttcF9jb21waWxlXyB+ZGlyOlJldmVyc2Ugc1xuXG4gICgqIHByb3BlciBzZWFyY2ggZnVuY3Rpb24uXG4gICAgIFtpXSBpbmRleCBpbiBbc11cbiAgICAgW2pdIGluZGV4IGluIFtwYXR0ZXJuXVxuICAgICBbbGVuXSBsZW5ndGggb2YgW3NdICopXG4gIGxldCBrbXBfZmluZCB+cGF0dGVybiBzIGlkeCA9XG4gICAgbGV0IGxlbiA9IGxlbmd0aCBzIGluXG4gICAgbGV0IGkgPSByZWYgaWR4IGluXG4gICAgbGV0IGogPSByZWYgMCBpblxuICAgIGxldCBwYXRfbGVuID0ga21wX3BhdHRlcm5fbGVuZ3RoIHBhdHRlcm4gaW5cbiAgICB3aGlsZSAhaiA8IHBhdF9sZW4gJiYgIWkgKyAhaiA8IGxlbiBkb1xuICAgICAgbGV0IGMgPSBTdHJpbmcuZ2V0IHMgKCFpICsgIWopIGluXG4gICAgICBsZXQgZXhwZWN0ZWQgPSBTdHJpbmcuZ2V0IHBhdHRlcm4uc3RyICFqIGluXG4gICAgICBpZiBDQ0NoYXIuZXF1YWwgYyBleHBlY3RlZCB0aGVuXG4gICAgICAgICgqIGNoYXIgbWF0Y2hlcyAqKVxuICAgICAgICBpbmNyIGpcbiAgICAgIGVsc2UgKFxuICAgICAgICBsZXQgZmFpbF9vZmZzZXQgPSBwYXR0ZXJuLmZhaWx1cmUuKCFqKSBpblxuICAgICAgICBpZiBmYWlsX29mZnNldCA+PSAwIHRoZW4gKFxuICAgICAgICAgIGFzc2VydCAoZmFpbF9vZmZzZXQgPCAhaik7XG4gICAgICAgICAgKCogZm9sbG93IHRoZSBmYWlsdXJlIGxpbmsgKilcbiAgICAgICAgICBpIDo9ICFpICsgIWogLSBmYWlsX29mZnNldDtcbiAgICAgICAgICBqIDo9IGZhaWxfb2Zmc2V0XG4gICAgICAgICkgZWxzZSAoXG4gICAgICAgICAgKCogYmVnaW5uaW5nIG9mIHBhdHRlcm4gKilcbiAgICAgICAgICBqIDo9IDA7XG4gICAgICAgICAgaW5jciBpXG4gICAgICAgIClcbiAgICAgIClcbiAgICBkb25lO1xuICAgIGlmICFqID0gcGF0X2xlbiB0aGVuXG4gICAgICAhaVxuICAgIGVsc2VcbiAgICAgIC0xXG5cbiAgKCogcHJvcGVyIHNlYXJjaCBmdW5jdGlvbiwgZnJvbSB0aGUgcmlnaHQuXG4gICAgIFtpXSBpbmRleCBpbiBbc11cbiAgICAgW2pdIGluZGV4IGluIFtwYXR0ZXJuXVxuICAgICBbbGVuXSBsZW5ndGggb2YgW3NdICopXG4gIGxldCBrbXBfcmZpbmQgfnBhdHRlcm4gcyBpZHggPVxuICAgIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICAgIGxldCBpID0gcmVmIChsZW4gLSBpZHggLSAxKSBpblxuICAgIGxldCBqID0gcmVmIDAgaW5cbiAgICBsZXQgcGF0X2xlbiA9IGttcF9wYXR0ZXJuX2xlbmd0aCBwYXR0ZXJuIGluXG4gICAgd2hpbGUgIWogPCBwYXRfbGVuICYmICFpICsgIWogPCBsZW4gZG9cbiAgICAgIGxldCBjID0gU3RyaW5nLmdldCBzIChsZW4gLSAhaSAtICFqIC0gMSkgaW5cbiAgICAgIGxldCBleHBlY3RlZCA9XG4gICAgICAgIFN0cmluZy5nZXQgcGF0dGVybi5zdHIgKFN0cmluZy5sZW5ndGggcGF0dGVybi5zdHIgLSAhaiAtIDEpXG4gICAgICBpblxuICAgICAgaWYgQ0NDaGFyLmVxdWFsIGMgZXhwZWN0ZWQgdGhlblxuICAgICAgICAoKiBjaGFyIG1hdGNoZXMgKilcbiAgICAgICAgaW5jciBqXG4gICAgICBlbHNlIChcbiAgICAgICAgbGV0IGZhaWxfb2Zmc2V0ID0gcGF0dGVybi5mYWlsdXJlLighaikgaW5cbiAgICAgICAgaWYgZmFpbF9vZmZzZXQgPj0gMCB0aGVuIChcbiAgICAgICAgICBhc3NlcnQgKGZhaWxfb2Zmc2V0IDwgIWopO1xuICAgICAgICAgICgqIGZvbGxvdyB0aGUgZmFpbHVyZSBsaW5rICopXG4gICAgICAgICAgaSA6PSAhaSArICFqIC0gZmFpbF9vZmZzZXQ7XG4gICAgICAgICAgaiA6PSBmYWlsX29mZnNldFxuICAgICAgICApIGVsc2UgKFxuICAgICAgICAgICgqIGJlZ2lubmluZyBvZiBwYXR0ZXJuICopXG4gICAgICAgICAgaiA6PSAwO1xuICAgICAgICAgIGluY3IgaVxuICAgICAgICApXG4gICAgICApXG4gICAgZG9uZTtcbiAgICAoKiBhZGp1c3QgcmVzdWx0OiBmaXJzdCwgW3JlcyA9IHN0cmluZy5sZW5ndGggcyAtIHJlcyAtMV0gdG8gY29udmVydFxuICAgICAgIGJhY2sgdG8gcmVhbCBpbmRpY2VzOyB0aGVuLCB3aGF0IHdlIGdvdCBpcyBhY3R1YWxseSB0aGUgcG9zaXRpb25cbiAgICAgICBvZiB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLCBzbyB3ZSBzdWJ0cmFjdCB0aGUgW2xlbmd0aCBvZiB0aGUgcGF0dGVybiAtMV1cbiAgICAgICB0byBvYnRhaW4gdGhlIHJlYWwgcmVzdWx0LiAqKVxuICAgIGlmICFqID0gcGF0X2xlbiB0aGVuXG4gICAgICBsZW4gLSAhaSAtIGttcF9wYXR0ZXJuX2xlbmd0aCBwYXR0ZXJuXG4gICAgZWxzZVxuICAgICAgLTFcblxuICB0eXBlICdhIHBhdHRlcm4gPSBQX2NoYXIgb2YgY2hhciB8IFBfS01QIG9mICdhIGttcF9wYXR0ZXJuXG5cbiAgbGV0IHBhdHRlcm5fbGVuZ3RoID0gZnVuY3Rpb25cbiAgICB8IFBfY2hhciBfIC0+IDFcbiAgICB8IFBfS01QIHAgLT4ga21wX3BhdHRlcm5fbGVuZ3RoIHBcblxuICBsZXQgY29tcGlsZSBzdWIgOiBbIGBEaXJlY3QgXSBwYXR0ZXJuID1cbiAgICBpZiBsZW5ndGggc3ViID0gMSB0aGVuXG4gICAgICBQX2NoYXIgc3ViLlswXVxuICAgIGVsc2VcbiAgICAgIFBfS01QIChrbXBfY29tcGlsZSBzdWIpXG5cbiAgbGV0IHJjb21waWxlIHN1YiA6IFsgYFJldmVyc2UgXSBwYXR0ZXJuID1cbiAgICBpZiBsZW5ndGggc3ViID0gMSB0aGVuXG4gICAgICBQX2NoYXIgc3ViLlswXVxuICAgIGVsc2VcbiAgICAgIFBfS01QIChrbXBfcmNvbXBpbGUgc3ViKVxuXG4gIGxldCBmaW5kID8oc3RhcnQgPSAwKSB+KHBhdHRlcm4gOiBbIGBEaXJlY3QgXSBwYXR0ZXJuKSBzID1cbiAgICBtYXRjaCBwYXR0ZXJuIHdpdGhcbiAgICB8IFBfY2hhciBjIC0+ICh0cnkgU3RyaW5nLmluZGV4X2Zyb20gcyBzdGFydCBjIHdpdGggTm90X2ZvdW5kIC0+IC0xKVxuICAgIHwgUF9LTVAgcGF0dGVybiAtPiBrbXBfZmluZCB+cGF0dGVybiBzIHN0YXJ0XG5cbiAgbGV0IHJmaW5kID9zdGFydCB+KHBhdHRlcm4gOiBbIGBSZXZlcnNlIF0gcGF0dGVybikgcyA9XG4gICAgbGV0IHN0YXJ0ID1cbiAgICAgIG1hdGNoIHN0YXJ0IHdpdGhcbiAgICAgIHwgU29tZSBuIC0+IG5cbiAgICAgIHwgTm9uZSAtPiBTdHJpbmcubGVuZ3RoIHMgLSAxXG4gICAgaW5cbiAgICBtYXRjaCBwYXR0ZXJuIHdpdGhcbiAgICB8IFBfY2hhciBjIC0+ICh0cnkgU3RyaW5nLnJpbmRleF9mcm9tIHMgc3RhcnQgYyB3aXRoIE5vdF9mb3VuZCAtPiAtMSlcbiAgICB8IFBfS01QIHBhdHRlcm4gLT4ga21wX3JmaW5kIH5wYXR0ZXJuIHMgc3RhcnRcbmVuZFxuXG5sZXQgZmluZCA/KHN0YXJ0ID0gMCkgfnN1YiA9XG4gIGxldCBwYXR0ZXJuID0gRmluZC5jb21waWxlIHN1YiBpblxuICBmdW4gcyAtPiBGaW5kLmZpbmQgfnN0YXJ0IH5wYXR0ZXJuIHNcblxubGV0IGZpbmRfYWxsID8oc3RhcnQgPSAwKSB+c3ViID1cbiAgbGV0IHBhdHRlcm4gPSBGaW5kLmNvbXBpbGUgc3ViIGluXG4gIGZ1biBzIC0+XG4gICAgbGV0IGkgPSByZWYgc3RhcnQgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgIGxldCByZXMgPSBGaW5kLmZpbmQgfnN0YXJ0OiFpIH5wYXR0ZXJuIHMgaW5cbiAgICAgIGlmIHJlcyA9IH4tMSB0aGVuXG4gICAgICAgIE5vbmVcbiAgICAgIGVsc2UgKFxuICAgICAgICBpIDo9IHJlcyArIDE7XG4gICAgICAgICgqIHBvc3NpYmxlIG92ZXJsYXAgKilcbiAgICAgICAgU29tZSByZXNcbiAgICAgIClcblxubGV0IGZpbmRfYWxsX2wgP3N0YXJ0IH5zdWIgcyA9XG4gIGxldCByZWMgYXV4IGFjYyBnID1cbiAgICBtYXRjaCBnICgpIHdpdGhcbiAgICB8IE5vbmUgLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBTb21lIGkgLT4gYXV4IChpIDo6IGFjYykgZ1xuICBpblxuICBhdXggW10gKGZpbmRfYWxsID9zdGFydCB+c3ViIHMpXG5cbmxldCBtZW0gP3N0YXJ0IH5zdWIgcyA9IGZpbmQgP3N0YXJ0IH5zdWIgcyA+PSAwXG5cbmxldCByZmluZCB+c3ViID1cbiAgbGV0IHBhdHRlcm4gPSBGaW5kLnJjb21waWxlIHN1YiBpblxuICBmdW4gcyAtPiBGaW5kLnJmaW5kIH5zdGFydDooU3RyaW5nLmxlbmd0aCBzIC0gMSkgfnBhdHRlcm4gc1xuXG4oKiBSZXBsYWNlIHN1YnN0cmluZyBbcy5bcG9zXSDigKYgcy5bcG9zK2xlbi0xXV0gYnkgW2J5XSBpbiBbc10gKilcbmxldCByZXBsYWNlX2F0XyB+cG9zIH5sZW4gfmJ5IHMgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgKGxlbmd0aCBzICsgbGVuZ3RoIGJ5IC0gbGVuKSBpblxuICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHMgMCBwb3M7XG4gIEJ1ZmZlci5hZGRfc3RyaW5nIGIgYnk7XG4gIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyAocG9zICsgbGVuKSAoU3RyaW5nLmxlbmd0aCBzIC0gcG9zIC0gbGVuKTtcbiAgQnVmZmVyLmNvbnRlbnRzIGJcblxubGV0IHJlcGxhY2UgPyh3aGljaCA9IGBBbGwpIH5zdWIgfmJ5IHMgPVxuICBpZiBpc19lbXB0eSBzdWIgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLnJlcGxhY2VcIjtcbiAgbWF0Y2ggd2hpY2ggd2l0aFxuICB8IGBMZWZ0IC0+XG4gICAgbGV0IGkgPSBmaW5kIH5zdGFydDowIH5zdWIgcyBpblxuICAgIGlmIGkgPj0gMCB0aGVuXG4gICAgICByZXBsYWNlX2F0XyB+cG9zOmkgfmxlbjooU3RyaW5nLmxlbmd0aCBzdWIpIH5ieSBzXG4gICAgZWxzZVxuICAgICAgc1xuICB8IGBSaWdodCAtPlxuICAgIGxldCBpID0gcmZpbmQgfnN1YiBzIGluXG4gICAgaWYgaSA+PSAwIHRoZW5cbiAgICAgIHJlcGxhY2VfYXRfIH5wb3M6aSB+bGVuOihTdHJpbmcubGVuZ3RoIHN1YikgfmJ5IHNcbiAgICBlbHNlXG4gICAgICBzXG4gIHwgYEFsbCAtPlxuICAgICgqIGNvbXBpbGUgc2VhcmNoIHBhdHRlcm4gb25seSBvbmNlICopXG4gICAgbGV0IHBhdHRlcm4gPSBGaW5kLmNvbXBpbGUgc3ViIGluXG4gICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gICAgbGV0IHN0YXJ0ID0gcmVmIDAgaW5cbiAgICB3aGlsZSAhc3RhcnQgPCBTdHJpbmcubGVuZ3RoIHMgZG9cbiAgICAgIGxldCBpID0gRmluZC5maW5kIH5zdGFydDohc3RhcnQgfnBhdHRlcm4gcyBpblxuICAgICAgaWYgaSA+PSAwIHRoZW4gKFxuICAgICAgICAoKiBiZXR3ZWVuIGxhc3QgYW5kIGN1ciBvY2N1cnJlbmNlcyAqKVxuICAgICAgICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHMgIXN0YXJ0IChpIC0gIXN0YXJ0KTtcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYiBieTtcbiAgICAgICAgc3RhcnQgOj0gaSArIFN0cmluZy5sZW5ndGggc3ViXG4gICAgICApIGVsc2UgKFxuICAgICAgICAoKiBhZGQgcmVtYWluZGVyICopXG4gICAgICAgIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyAhc3RhcnQgKFN0cmluZy5sZW5ndGggcyAtICFzdGFydCk7XG4gICAgICAgIHN0YXJ0IDo9IFN0cmluZy5sZW5ndGggcyAoKiBzdG9wICopXG4gICAgICApXG4gICAgZG9uZTtcbiAgICBCdWZmZXIuY29udGVudHMgYlxuXG5tb2R1bGUgU3BsaXQgPSBzdHJ1Y3RcbiAgdHlwZSBkcm9wX2lmX2VtcHR5ID0geyBmaXJzdDogYm9vbDsgbGFzdDogYm9vbCB9XG5cbiAgbGV0IG5vX2Ryb3AgPSB7IGZpcnN0ID0gZmFsc2U7IGxhc3QgPSBmYWxzZSB9XG4gIGxldCBkZWZhdWx0X2Ryb3AgPSBub19kcm9wXG5cbiAgdHlwZSBzcGxpdF9zdGF0ZSA9IFNwbGl0U3RvcCB8IFNwbGl0QXQgb2YgaW50ICgqIHByZXZpb3VzICopXG5cbiAgbGV0IHJlYyBfc3BsaXQgfmJ5IHMgc3RhdGUgPVxuICAgIG1hdGNoIHN0YXRlIHdpdGhcbiAgICB8IFNwbGl0U3RvcCAtPiBOb25lXG4gICAgfCBTcGxpdEF0IHByZXYgLT4gX3NwbGl0X3NlYXJjaCB+YnkgcyBwcmV2XG5cbiAgYW5kIF9zcGxpdF9zZWFyY2ggfmJ5IHMgcHJldiA9XG4gICAgbGV0IGogPSBGaW5kLmZpbmQgfnN0YXJ0OnByZXYgfnBhdHRlcm46YnkgcyBpblxuICAgIGlmIGogPCAwIHRoZW5cbiAgICAgIFNvbWUgKFNwbGl0U3RvcCwgcHJldiwgU3RyaW5nLmxlbmd0aCBzIC0gcHJldilcbiAgICBlbHNlXG4gICAgICBTb21lIChTcGxpdEF0IChqICsgRmluZC5wYXR0ZXJuX2xlbmd0aCBieSksIHByZXYsIGogLSBwcmV2KVxuXG4gIGxldCBfdHVwbGUzIHggeSB6ID0geCwgeSwgelxuXG4gIGxldCBfbWtnZW4gfmRyb3AgfmJ5IHMgayA9XG4gICAgbGV0IHN0YXRlID0gcmVmIChTcGxpdEF0IDApIGluXG4gICAgbGV0IGJ5ID0gRmluZC5jb21waWxlIGJ5IGluXG4gICAgbGV0IHJlYyBuZXh0ICgpID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyAhc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IE5vbmVcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT5cbiAgICAgICAgc3RhdGUgOj0gc3RhdGUnO1xuICAgICAgICBuZXh0ICgpXG4gICAgICB8IFNvbWUgKF8sIGksIDApIHdoZW4gZHJvcC5sYXN0ICYmIGkgPSBsZW5ndGggcyAtPiBOb25lXG4gICAgICB8IFNvbWUgKHN0YXRlJywgaSwgbGVuKSAtPlxuICAgICAgICBzdGF0ZSA6PSBzdGF0ZSc7XG4gICAgICAgIFNvbWUgKGsgcyBpIGxlbilcbiAgICBpblxuICAgIG5leHRcblxuICBsZXQgZ2VuID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtnZW4gfmRyb3AgfmJ5IHMgX3R1cGxlM1xuICBsZXQgZ2VuX2NweSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rZ2VuIH5kcm9wIH5ieSBzIFN0cmluZy5zdWJcblxuICBsZXQgX21rbGlzdCB+ZHJvcCB+YnkgcyBrID1cbiAgICBsZXQgYnkgPSBGaW5kLmNvbXBpbGUgYnkgaW5cbiAgICBsZXQgcmVjIGJ1aWxkIGFjYyBzdGF0ZSA9XG4gICAgICBtYXRjaCBfc3BsaXQgfmJ5IHMgc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IExpc3QucmV2IGFjY1xuICAgICAgfCBTb21lIChzdGF0ZScsIDAsIDApIHdoZW4gZHJvcC5maXJzdCAtPiBidWlsZCBhY2Mgc3RhdGUnXG4gICAgICB8IFNvbWUgKF8sIGksIDApIHdoZW4gZHJvcC5sYXN0ICYmIGkgPSBsZW5ndGggcyAtPiBMaXN0LnJldiBhY2NcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+IGJ1aWxkIChrIHMgaSBsZW4gOjogYWNjKSBzdGF0ZSdcbiAgICBpblxuICAgIGJ1aWxkIFtdIChTcGxpdEF0IDApXG5cbiAgbGV0IGxpc3RfID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtsaXN0IH5kcm9wIH5ieSBzIF90dXBsZTNcbiAgbGV0IGxpc3RfY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtsaXN0IH5kcm9wIH5ieSBzIFN0cmluZy5zdWJcblxuICBsZXQgX21rc2VxIH5kcm9wIH5ieSBzIGsgPVxuICAgIGxldCBieSA9IEZpbmQuY29tcGlsZSBieSBpblxuICAgIGxldCByZWMgbWFrZSBzdGF0ZSAoKSA9XG4gICAgICBtYXRjaCBfc3BsaXQgfmJ5IHMgc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IFNlcS5OaWxcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT4gbWFrZSBzdGF0ZScgKClcbiAgICAgIHwgU29tZSAoXywgaSwgMCkgd2hlbiBkcm9wLmxhc3QgJiYgaSA9IGxlbmd0aCBzIC0+IFNlcS5OaWxcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+IFNlcS5Db25zIChrIHMgaSBsZW4sIG1ha2Ugc3RhdGUnKVxuICAgIGluXG4gICAgbWFrZSAoU3BsaXRBdCAwKVxuXG4gIGxldCBzZXEgPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta3NlcSB+ZHJvcCB+YnkgcyBfdHVwbGUzXG4gIGxldCBzZXFfY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtzZXEgfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBfbWtfaXRlciB+ZHJvcCB+YnkgcyBmIGsgPVxuICAgIGxldCBieSA9IEZpbmQuY29tcGlsZSBieSBpblxuICAgIGxldCByZWMgYXV4IHN0YXRlID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyBzdGF0ZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT4gYXV4IHN0YXRlJ1xuICAgICAgfCBTb21lIChfLCBpLCAwKSB3aGVuIGRyb3AubGFzdCAmJiBpID0gbGVuZ3RoIHMgLT4gKClcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+XG4gICAgICAgIGsgKGYgcyBpIGxlbik7XG4gICAgICAgIGF1eCBzdGF0ZSdcbiAgICBpblxuICAgIGF1eCAoU3BsaXRBdCAwKVxuXG4gIGxldCBpdGVyID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtfaXRlciB+ZHJvcCB+YnkgcyBfdHVwbGUzXG4gIGxldCBpdGVyX2NweSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rX2l0ZXIgfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBsZWZ0X2V4biB+YnkgcyA9XG4gICAgbGV0IGkgPSBmaW5kIH5zdWI6YnkgcyBpblxuICAgIGlmIGkgPSB+LTEgdGhlblxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgZWxzZSAoXG4gICAgICBsZXQgcmlnaHQgPSBpICsgU3RyaW5nLmxlbmd0aCBieSBpblxuICAgICAgU3RyaW5nLnN1YiBzIDAgaSwgU3RyaW5nLnN1YiBzIHJpZ2h0IChTdHJpbmcubGVuZ3RoIHMgLSByaWdodClcbiAgICApXG5cbiAgbGV0IGxlZnQgfmJ5IHMgPSB0cnkgU29tZSAobGVmdF9leG4gfmJ5IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxuICBsZXQgcmlnaHRfZXhuIH5ieSBzID1cbiAgICBsZXQgaSA9IHJmaW5kIH5zdWI6YnkgcyBpblxuICAgIGlmIGkgPSB+LTEgdGhlblxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgZWxzZSAoXG4gICAgICBsZXQgcmlnaHQgPSBpICsgU3RyaW5nLmxlbmd0aCBieSBpblxuICAgICAgU3RyaW5nLnN1YiBzIDAgaSwgU3RyaW5nLnN1YiBzIHJpZ2h0IChTdHJpbmcubGVuZ3RoIHMgLSByaWdodClcbiAgICApXG5cbiAgbGV0IHJpZ2h0IH5ieSBzID0gdHJ5IFNvbWUgKHJpZ2h0X2V4biB+Ynkgcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuZW5kXG5cbmxldCBzcGxpdCB+YnkgcyA9IFNwbGl0Lmxpc3RfY3B5IH5ieSBzXG5cbmxldCBjb21wYXJlX3ZlcnNpb25zIGEgYiA9XG4gIGxldCBvZl9pbnQgcyA9IHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpIHdpdGggRmFpbHVyZSBfIC0+IE5vbmUgaW5cbiAgbGV0IHJlYyBjbXBfcmVjIGEgYiA9XG4gICAgbWF0Y2ggYSAoKSwgYiAoKSB3aXRoXG4gICAgfCBOb25lLCBOb25lIC0+IDBcbiAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgICB8IFNvbWUgeCwgU29tZSB5IC0+XG4gICAgICAobWF0Y2ggb2ZfaW50IHgsIG9mX2ludCB5IHdpdGhcbiAgICAgIHwgTm9uZSwgTm9uZSAtPlxuICAgICAgICBsZXQgYyA9IFN0cmluZy5jb21wYXJlIHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiXG4gICAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgICB8IE5vbmUsIFNvbWUgXyAtPiAtMVxuICAgICAgfCBTb21lIHgsIFNvbWUgeSAtPlxuICAgICAgICBsZXQgYyA9IGNvbXBhcmVfaW50IHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiKVxuICBpblxuICBjbXBfcmVjIChTcGxpdC5nZW5fY3B5IH5ieTpcIi5cIiBhKSAoU3BsaXQuZ2VuX2NweSB+Ynk6XCIuXCIgYilcblxudHlwZSBuYXRfY2h1bmsgPSBOQ19jaGFyIG9mIGNoYXIgfCBOQ19pbnQgb2YgaW50XG5cbmxldCBjb21wYXJlX25hdHVyYWwgYSBiID1cbiAgKCogc3RyZWFtIG9mIGNodW5rcyAqKVxuICBsZXQgY2h1bmtzIHMgOiB1bml0IC0+IG5hdF9jaHVuayBvcHRpb24gPVxuICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICBsZXQgcmVjIG5leHQgKCkgPVxuICAgICAgaWYgIWkgPSBsZW5ndGggcyB0aGVuXG4gICAgICAgIE5vbmVcbiAgICAgIGVsc2UgKFxuICAgICAgICBtYXRjaCBTdHJpbmcuZ2V0IHMgIWkgd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgICAgICAgIGluY3IgaTtcbiAgICAgICAgICByZWFkX2ludCAoQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnKVxuICAgICAgICB8IGMgLT5cbiAgICAgICAgICBpbmNyIGk7XG4gICAgICAgICAgU29tZSAoTkNfY2hhciBjKVxuICAgICAgKVxuICAgIGFuZCByZWFkX2ludCBuID1cbiAgICAgIGlmICFpID0gbGVuZ3RoIHMgdGhlblxuICAgICAgICBTb21lIChOQ19pbnQgbilcbiAgICAgIGVsc2UgKFxuICAgICAgICBtYXRjaCBTdHJpbmcuZ2V0IHMgIWkgd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgICAgICAgIGluY3IgaTtcbiAgICAgICAgICByZWFkX2ludCAoKDEwICogbikgKyBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCcpXG4gICAgICAgIHwgXyAtPiBTb21lIChOQ19pbnQgbilcbiAgICAgIClcbiAgICBpblxuICAgIG5leHRcbiAgaW5cbiAgbGV0IHJlYyBjbXBfcmVjIGEgYiA9XG4gICAgbWF0Y2ggYSAoKSwgYiAoKSB3aXRoXG4gICAgfCBOb25lLCBOb25lIC0+IDBcbiAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgICB8IFNvbWUgeCwgU29tZSB5IC0+XG4gICAgICAobWF0Y2ggeCwgeSB3aXRoXG4gICAgICB8IE5DX2NoYXIgeCwgTkNfY2hhciB5IC0+XG4gICAgICAgIGxldCBjID0gQ2hhci5jb21wYXJlIHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiXG4gICAgICB8IE5DX2ludCBfLCBOQ19jaGFyIF8gLT4gMVxuICAgICAgfCBOQ19jaGFyIF8sIE5DX2ludCBfIC0+IC0xXG4gICAgICB8IE5DX2ludCB4LCBOQ19pbnQgeSAtPlxuICAgICAgICBsZXQgYyA9IGNvbXBhcmVfaW50IHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiKVxuICBpblxuICBjbXBfcmVjIChjaHVua3MgYSkgKGNodW5rcyBiKVxuXG5sZXQgZWRpdF9kaXN0YW5jZSA/KGN1dG9mZiA9IG1heF9pbnQpIHMxIHMyID1cbiAgbGV0IG4xID0gbGVuZ3RoIHMxIGluXG4gIGxldCBuMiA9IGxlbmd0aCBzMiBpblxuICBpZiBuMSA9IDAgdGhlblxuICAgIG1pbiBjdXRvZmYgbjJcbiAgZWxzZSBpZiBuMiA9IDAgdGhlblxuICAgIG1pbiBjdXRvZmYgbjFcbiAgZWxzZSBpZiBlcXVhbCBzMSBzMiB0aGVuXG4gICAgMFxuICBlbHNlIGlmIG4xIC0gbjIgPj0gY3V0b2ZmIHx8IG4yIC0gbjEgPj0gY3V0b2ZmIHRoZW5cbiAgICBjdXRvZmZcbiAgKCogYXQgbGVhc3QgY3V0b2ZmIGluc2VydHMgKilcbiAgZWxzZSAoXG4gICAgdHJ5XG4gICAgICAoKiBkaXN0YW5jZSB2ZWN0b3JzICh2MD1wcmV2aW91cywgdjE9Y3VycmVudCkgKilcbiAgICAgIGxldCB2MCA9IEFycmF5Lm1ha2UgKGxlbmd0aCBzMiArIDEpIDAgaW5cbiAgICAgIGxldCB2MSA9IEFycmF5Lm1ha2UgKGxlbmd0aCBzMiArIDEpIDAgaW5cbiAgICAgICgqIGluaXRpYWxpemUgdjA6IHYwKGkpID0gQSgwKShpKSA9IGRlbGV0ZSBpIGNoYXJzIGZyb20gdCAqKVxuICAgICAgbGV0IGxvd2VyX2JvdW5kID0gcmVmIG1heF9pbnQgaW5cbiAgICAgIGZvciBpID0gMCB0byBsZW5ndGggczIgZG9cbiAgICAgICAgdjAuKGkpIDwtIGlcbiAgICAgIGRvbmU7XG4gICAgICAoKiBtYWluIGxvb3AgZm9yIHRoZSBib3R0b20gdXAgZHluYW1pYyBhbGdvcml0aG0gKilcbiAgICAgIGZvciBpID0gMCB0byBsZW5ndGggczEgLSAxIGRvXG4gICAgICAgICgqIGZpcnN0IGVkaXQgZGlzdGFuY2UgaXMgdGhlIGRlbGV0aW9uIG9mIGkrMSBlbGVtZW50cyBmcm9tIHMgKilcbiAgICAgICAgdjEuKDApIDwtIGkgKyAxO1xuXG4gICAgICAgICgqIHRyeSBhZGQvZGVsZXRlL3JlcGxhY2Ugb3BlcmF0aW9ucyAqKVxuICAgICAgICBmb3IgaiA9IDAgdG8gbGVuZ3RoIHMyIC0gMSBkb1xuICAgICAgICAgIGxldCBjb3N0ID1cbiAgICAgICAgICAgIGlmIENoYXIuZXF1YWwgKFN0cmluZy5nZXQgczEgaSkgKFN0cmluZy5nZXQgczIgaikgdGhlblxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICBpblxuICAgICAgICAgIHYxLihqICsgMSkgPC0gbWluICh2MS4oaikgKyAxKSAobWluICh2MC4oaiArIDEpICsgMSkgKHYwLihqKSArIGNvc3QpKVxuICAgICAgICBkb25lO1xuXG4gICAgICAgIGlmXG4gICAgICAgICAgY3V0b2ZmIDwgQXJyYXkubGVuZ3RoIHYxXG4gICAgICAgICAgJiYgaSA8PSAyICogY3V0b2ZmXG4gICAgICAgICAgJiYgKDIgKiBjdXRvZmYpIC0gaSA8IFN0cmluZy5sZW5ndGggczJcbiAgICAgICAgdGhlblxuICAgICAgICAgIGxvd2VyX2JvdW5kIDo9IG1pbiAhbG93ZXJfYm91bmQgdjEuKCgyICogY3V0b2ZmKSAtIGkpO1xuICAgICAgICAoKiBkaWQgd2UgY29tcHV0ZSB1cCB0byB0aGUgZGlhZ29uYWwgMipjdXRvZmYrMT8gKilcbiAgICAgICAgaWYgY3V0b2ZmIDwgQXJyYXkubGVuZ3RoIHYxICYmIGkgPSBjdXRvZmYgKiAyICYmICFsb3dlcl9ib3VuZCA+PSBjdXRvZmZcbiAgICAgICAgdGhlblxuICAgICAgICAgIHJhaXNlX25vdHJhY2UgRXhpdDtcblxuICAgICAgICAoKiBjb3B5IHYxIGludG8gdjAgZm9yIG5leHQgaXRlcmF0aW9uICopXG4gICAgICAgIEFycmF5LmJsaXQgdjEgMCB2MCAwIChsZW5ndGggczIgKyAxKVxuICAgICAgZG9uZTtcbiAgICAgIHYxLihsZW5ndGggczIpXG4gICAgd2l0aCBFeGl0IC0+IGN1dG9mZlxuICApXG5cbmxldCByZXBlYXQgcyBuID1cbiAgYXNzZXJ0IChuID49IDApO1xuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGFzc2VydCAobGVuID4gMCk7XG4gIGluaXQgKGxlbiAqIG4pIChmdW4gaSAtPiBzLltpIG1vZCBsZW5dKVxuXG5sZXQgcHJlZml4IH5wcmUgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHByZSBpblxuICBpZiBsZW4gPiBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgIGZhbHNlXG4gIGVsc2UgKFxuICAgIGxldCByZWMgY2hlY2sgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW5cbiAgICAgICAgdHJ1ZVxuICAgICAgZWxzZSBpZiBTdGRsaWIuKCA8PiApIChTdHJpbmcudW5zYWZlX2dldCBzIGkpIChTdHJpbmcudW5zYWZlX2dldCBwcmUgaSlcbiAgICAgIHRoZW5cbiAgICAgICAgZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgY2hlY2sgKGkgKyAxKVxuICAgIGluXG4gICAgY2hlY2sgMFxuICApXG5cbmxldCBzdWZmaXggfnN1ZiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3VmIGluXG4gIGlmIGxlbiA+IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgZmFsc2VcbiAgZWxzZSAoXG4gICAgbGV0IG9mZiA9IFN0cmluZy5sZW5ndGggcyAtIGxlbiBpblxuICAgIGxldCByZWMgY2hlY2sgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW5cbiAgICAgICAgdHJ1ZVxuICAgICAgZWxzZSBpZlxuICAgICAgICBTdGRsaWIuKCA8PiApIChTdHJpbmcudW5zYWZlX2dldCBzIChvZmYgKyBpKSkgKFN0cmluZy51bnNhZmVfZ2V0IHN1ZiBpKVxuICAgICAgdGhlblxuICAgICAgICBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBjaGVjayAoaSArIDEpXG4gICAgaW5cbiAgICBjaGVjayAwXG4gIClcblxubGV0IHRha2UgbiBzID1cbiAgaWYgbiA8IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgU3RyaW5nLnN1YiBzIDAgblxuICBlbHNlXG4gICAgc1xuXG5sZXQgZHJvcCBuIHMgPVxuICBpZiBuIDwgU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICBTdHJpbmcuc3ViIHMgbiAoU3RyaW5nLmxlbmd0aCBzIC0gbilcbiAgZWxzZVxuICAgIFwiXCJcblxubGV0IHRha2VfZHJvcCBuIHMgPSB0YWtlIG4gcywgZHJvcCBuIHNcblxubGV0IGNob3Bfc3VmZml4IH5zdWYgcyA9XG4gIGlmIHN1ZmZpeCB+c3VmIHMgdGhlblxuICAgIFNvbWUgKFN0cmluZy5zdWIgcyAwIChTdHJpbmcubGVuZ3RoIHMgLSBTdHJpbmcubGVuZ3RoIHN1ZikpXG4gIGVsc2VcbiAgICBOb25lXG5cbmxldCBjaG9wX3ByZWZpeCB+cHJlIHMgPVxuICBpZiBwcmVmaXggfnByZSBzIHRoZW5cbiAgICBTb21lXG4gICAgICAoU3RyaW5nLnN1YiBzIChTdHJpbmcubGVuZ3RoIHByZSkgKFN0cmluZy5sZW5ndGggcyAtIFN0cmluZy5sZW5ndGggcHJlKSlcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IGJsaXQgPSBTdHJpbmcuYmxpdFxuXG5sZXQgZm9sZCBmIGFjYyBzID1cbiAgbGV0IHJlYyBmb2xkX3JlYyBmIGFjYyBzIGkgPVxuICAgIGlmIGkgPSBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgZm9sZF9yZWMgZiAoZiBhY2Mgcy5baV0pIHMgKGkgKyAxKVxuICBpblxuICBmb2xkX3JlYyBmIGFjYyBzIDBcblxubGV0IGZvbGRpIGYgYWNjIHMgPVxuICBsZXQgcmVjIGZvbGRfcmVjIGYgYWNjIHMgaSA9XG4gICAgaWYgaSA9IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBmb2xkX3JlYyBmIChmIGFjYyBpIHMuW2ldKSBzIChpICsgMSlcbiAgaW5cbiAgZm9sZF9yZWMgZiBhY2MgcyAwXG5cbmxldCBwYWQgPyhzaWRlID0gYExlZnQpID8oYyA9ICcgJykgbiBzID1cbiAgbGV0IGxlbl9zID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGlmIGxlbl9zID49IG4gdGhlblxuICAgIHNcbiAgZWxzZSAoXG4gICAgbGV0IHBhZF9sZW4gPSBuIC0gbGVuX3MgaW5cbiAgICBtYXRjaCBzaWRlIHdpdGhcbiAgICB8IGBMZWZ0IC0+XG4gICAgICBpbml0IG4gKGZ1biBpIC0+XG4gICAgICAgICAgaWYgaSA8IHBhZF9sZW4gdGhlblxuICAgICAgICAgICAgY1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHMuW2kgLSBwYWRfbGVuXSlcbiAgICB8IGBSaWdodCAtPlxuICAgICAgaW5pdCBuIChmdW4gaSAtPlxuICAgICAgICAgIGlmIGkgPCBsZW5fcyB0aGVuXG4gICAgICAgICAgICBzLltpXVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGMpXG4gIClcblxubGV0IF90b19nZW4gcyBpMCBsZW4gPVxuICBsZXQgaSA9IHJlZiBpMCBpblxuICBmdW4gKCkgLT5cbiAgICBpZiAhaSA9IGkwICsgbGVuIHRoZW5cbiAgICAgIE5vbmVcbiAgICBlbHNlIChcbiAgICAgIGxldCBjID0gU3RyaW5nLnVuc2FmZV9nZXQgcyAhaSBpblxuICAgICAgaW5jciBpO1xuICAgICAgU29tZSBjXG4gICAgKVxuXG5sZXQgdG9fZ2VuIHMgPSBfdG9fZ2VuIHMgMCAoU3RyaW5nLmxlbmd0aCBzKVxubGV0IG9mX2NoYXIgYyA9IFN0cmluZy5tYWtlIDEgY1xuXG5sZXQgb2ZfZ2VuIGcgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgbGV0IHJlYyBhdXggKCkgPVxuICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgIHwgTm9uZSAtPiBCdWZmZXIuY29udGVudHMgYlxuICAgIHwgU29tZSBjIC0+XG4gICAgICBCdWZmZXIuYWRkX2NoYXIgYiBjO1xuICAgICAgYXV4ICgpXG4gIGluXG4gIGF1eCAoKVxuXG5sZXQgdG9faXRlciBzIGsgPSBTdHJpbmcuaXRlciBrIHNcblxubGV0IHJlYyBfdG9fc2VxIHMgaSBsZW4gKCkgPVxuICBpZiBsZW4gPSAwIHRoZW5cbiAgICBTZXEuTmlsXG4gIGVsc2VcbiAgICBTZXEuQ29ucyAocy5baV0sIF90b19zZXEgcyAoaSArIDEpIChsZW4gLSAxKSlcblxubGV0IHRvX3NlcSBzID0gX3RvX3NlcSBzIDAgKFN0cmluZy5sZW5ndGggcylcblxubGV0IG9mX2l0ZXIgaSA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAzMiBpblxuICBpIChCdWZmZXIuYWRkX2NoYXIgYik7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cbmxldCBvZl9zZXEgc2VxID1cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gIFNlcS5pdGVyIChCdWZmZXIuYWRkX2NoYXIgYikgc2VxO1xuICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgdG9fbGlzdCBzID0gX3RvX2xpc3QgcyBbXSAwIChTdHJpbmcubGVuZ3RoIHMpXG5cbmxldCBvZl9saXN0IGwgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoTGlzdC5sZW5ndGggbCkgaW5cbiAgTGlzdC5pdGVyIChCdWZmZXIuYWRkX2NoYXIgYnVmKSBsO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBvZl9hcnJheSBhID0gaW5pdCAoQXJyYXkubGVuZ3RoIGEpIChmdW4gaSAtPiBhLihpKSlcbmxldCB0b19hcnJheSBzID0gQXJyYXkuaW5pdCAoU3RyaW5nLmxlbmd0aCBzKSAoZnVuIGkgLT4gcy5baV0pXG5cbmxldCBsaW5lc19nZW4gcyA9XG4gIFNwbGl0Lmdlbl9jcHkgfmRyb3A6eyBTcGxpdC5maXJzdCA9IGZhbHNlOyBsYXN0ID0gdHJ1ZSB9IH5ieTpcIlxcblwiIHNcblxubGV0IGxpbmVzX2l0ZXIgcyA9XG4gIFNwbGl0Lml0ZXJfY3B5IH5kcm9wOnsgU3BsaXQuZmlyc3QgPSBmYWxzZTsgbGFzdCA9IHRydWUgfSB+Ynk6XCJcXG5cIiBzXG5cbmxldCBsaW5lc19zZXEgcyA9XG4gIFNwbGl0LnNlcV9jcHkgfmRyb3A6eyBTcGxpdC5maXJzdCA9IGZhbHNlOyBsYXN0ID0gdHJ1ZSB9IH5ieTpcIlxcblwiIHNcblxubGV0IGxpbmVzIHMgPVxuICBTcGxpdC5saXN0X2NweSB+ZHJvcDp7IFNwbGl0LmZpcnN0ID0gZmFsc2U7IGxhc3QgPSB0cnVlIH0gfmJ5OlwiXFxuXCIgc1xuXG5sZXQgY29uY2F0X2dlbl9idWYgfnNlcCBnIDogQnVmZmVyLnQgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCByZWMgYXV4IH5maXJzdCAoKSA9XG4gICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgfCBOb25lIC0+IGJcbiAgICB8IFNvbWUgcyAtPlxuICAgICAgaWYgbm90IGZpcnN0IHRoZW4gQnVmZmVyLmFkZF9zdHJpbmcgYiBzZXA7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBiIHM7XG4gICAgICBhdXggfmZpcnN0OmZhbHNlICgpXG4gIGluXG4gIGF1eCB+Zmlyc3Q6dHJ1ZSAoKVxuXG5sZXQgY29uY2F0X2dlbiB+c2VwIGcgPVxuICBsZXQgYnVmID0gY29uY2F0X2dlbl9idWYgfnNlcCBnIGluXG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IGNvbmNhdF9pdGVyX2J1ZiB+c2VwIGkgOiBCdWZmZXIudCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICBpIChmdW4gcyAtPlxuICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgZmlyc3QgOj0gZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHNlcDtcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzKTtcbiAgYnVmXG5cbmxldCBjb25jYXRfaXRlciB+c2VwIGkgPVxuICBsZXQgYnVmID0gY29uY2F0X2l0ZXJfYnVmIH5zZXAgaSBpblxuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBjb25jYXRfc2VxX2J1ZiB+c2VwIHNlcSA6IEJ1ZmZlci50ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIFNlcS5pdGVyXG4gICAgKGZ1biBzIC0+XG4gICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgc2VwO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHMpXG4gICAgc2VxO1xuICBidWZcblxubGV0IGNvbmNhdF9zZXEgfnNlcCBzZXEgPVxuICBsZXQgYnVmID0gY29uY2F0X3NlcV9idWYgfnNlcCBzZXEgaW5cbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgdW5saW5lcyBsID1cbiAgbGV0IGxlbiA9IExpc3QuZm9sZF9sZWZ0IChmdW4gbiBzIC0+IG4gKyAxICsgU3RyaW5nLmxlbmd0aCBzKSAwIGwgaW5cbiAgbGV0IGJ1ZiA9IEJ5dGVzLmNyZWF0ZSBsZW4gaW5cbiAgbGV0IHJlYyBhdXhfYmxpdCBpIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT5cbiAgICAgIGFzc2VydCAoaSA9IGxlbik7XG4gICAgICBCeXRlcy50b19zdHJpbmcgYnVmXG4gICAgfCBzIDo6IHRhaWwgLT5cbiAgICAgIGxldCBsZW5fcyA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgICAgQnl0ZXMuYmxpdF9zdHJpbmcgcyAwIGJ1ZiBpIGxlbl9zO1xuICAgICAgQnl0ZXMuc2V0IGJ1ZiAoaSArIGxlbl9zKSAnXFxuJztcbiAgICAgIGF1eF9ibGl0IChpICsgbGVuX3MgKyAxKSB0YWlsXG4gIGluXG4gIGF1eF9ibGl0IDAgbFxuXG5sZXQgdW5saW5lc19nZW4gZyA9XG4gIGxldCBidWYgPSBjb25jYXRfZ2VuX2J1ZiB+c2VwOlwiXFxuXCIgZyBpblxuICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCB1bmxpbmVzX2l0ZXIgaSA9XG4gIGxldCBidWYgPSBjb25jYXRfaXRlcl9idWYgfnNlcDpcIlxcblwiIGkgaW5cbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgdW5saW5lc19zZXEgc2VxID1cbiAgbGV0IGJ1ZiA9IGNvbmNhdF9zZXFfYnVmIH5zZXA6XCJcXG5cIiBzZXEgaW5cbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgc2V0IHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBTdHJpbmcubGVuZ3RoIHMgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLnNldFwiO1xuICBpbml0IChTdHJpbmcubGVuZ3RoIHMpIChmdW4gaiAtPlxuICAgICAgaWYgaSA9IGogdGhlblxuICAgICAgICBjXG4gICAgICBlbHNlXG4gICAgICAgIHMuW2pdKVxuXG5sZXQgaXRlciA9IFN0cmluZy5pdGVyXG5cbmxldCBmaWx0ZXJfbWFwIGYgcyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gIGl0ZXJcbiAgICAoZnVuIGMgLT5cbiAgICAgIG1hdGNoIGYgYyB3aXRoXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSBjJyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmIGMnKVxuICAgIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IGZpbHRlciBmIHMgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICBpdGVyIChmdW4gYyAtPiBpZiBmIGMgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYnVmIGMpIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHVuaXEgZXEgcyA9XG4gIGlmIFN0cmluZy5sZW5ndGggcyA9IDAgdGhlblxuICAgIHNcbiAgZWxzZSAoXG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIHMuWzBdO1xuICAgIGxldCBfID1cbiAgICAgIGZvbGRcbiAgICAgICAgKGZ1biBwcmV2aW91c19jIGMgLT5cbiAgICAgICAgICBpZiBub3QgKGVxIHByZXZpb3VzX2MgYykgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYnVmIGM7XG4gICAgICAgICAgYylcbiAgICAgICAgcy5bMF0gc1xuICAgIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICApXG5cbmxldCBmbGF0X21hcCA/c2VwIGYgcyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gIGl0ZXJpXG4gICAgKGZ1biBpIGMgLT5cbiAgICAgIChtYXRjaCBzZXAgd2l0aFxuICAgICAgfCBTb21lIF8gd2hlbiBpID0gMCAtPiAoKVxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgc2VwIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzZXApO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChmIGMpKVxuICAgIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxuZXhjZXB0aW9uIE15RXhpdFxuXG5sZXQgZm9yX2FsbCBwIHMgPVxuICB0cnlcbiAgICBpdGVyIChmdW4gYyAtPiBpZiBub3QgKHAgYykgdGhlbiByYWlzZSBNeUV4aXQpIHM7XG4gICAgdHJ1ZVxuICB3aXRoIE15RXhpdCAtPiBmYWxzZVxuXG5sZXQgZXhpc3RzIHAgcyA9XG4gIHRyeVxuICAgIGl0ZXIgKGZ1biBjIC0+IGlmIHAgYyB0aGVuIHJhaXNlIE15RXhpdCkgcztcbiAgICBmYWxzZVxuICB3aXRoIE15RXhpdCAtPiB0cnVlXG5cbmxldCBkcm9wX3doaWxlIGYgcyA9XG4gIGxldCBpID0gcmVmIDAgaW5cbiAgd2hpbGUgIWkgPCBsZW5ndGggcyAmJiBmICh1bnNhZmVfZ2V0IHMgIWkpIGRvXG4gICAgaW5jciBpXG4gIGRvbmU7XG4gIGlmICFpID4gMCB0aGVuXG4gICAgc3ViIHMgIWkgKGxlbmd0aCBzIC0gIWkpXG4gIGVsc2VcbiAgICBzXG5cbmxldCByZHJvcF93aGlsZSBmIHMgPVxuICBsZXQgaSA9IHJlZiAobGVuZ3RoIHMgLSAxKSBpblxuICB3aGlsZSAhaSA+PSAwICYmIGYgKHVuc2FmZV9nZXQgcyAhaSkgZG9cbiAgICBkZWNyIGlcbiAgZG9uZTtcbiAgaWYgIWkgPCBsZW5ndGggcyAtIDEgdGhlblxuICAgIHN1YiBzIDAgKCFpICsgMSlcbiAgZWxzZVxuICAgIHNcblxuKCogbm90aW9uIG9mIHdoaXRlc3BhY2UgZm9yIHRyaW0gKilcbmxldCBpc19zcGFjZV8gPSBmdW5jdGlvblxuICB8ICcgJyB8ICdcXDAxMicgfCAnXFxuJyB8ICdcXHInIHwgJ1xcdCcgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxubGV0IGx0cmltIHMgPSBkcm9wX3doaWxlIGlzX3NwYWNlXyBzXG5sZXQgcnRyaW0gcyA9IHJkcm9wX3doaWxlIGlzX3NwYWNlXyBzXG5cbmxldCBtYXAyIGYgczEgczIgPVxuICBpZiBsZW5ndGggczEgPD4gbGVuZ3RoIHMyIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5tYXAyXCI7XG4gIGluaXQgKFN0cmluZy5sZW5ndGggczEpIChmdW4gaSAtPiBmIHMxLltpXSBzMi5baV0pXG5cbmxldCBpdGVyMiBmIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuaXRlcjJcIjtcbiAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggczEgLSAxIGRvXG4gICAgZiBzMS5baV0gczIuW2ldXG4gIGRvbmVcblxubGV0IGl0ZXJpMiBmIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuaXRlcmkyXCI7XG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMxIC0gMSBkb1xuICAgIGYgaSBzMS5baV0gczIuW2ldXG4gIGRvbmVcblxubGV0IGZvbGQyIGYgYWNjIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuZm9sZDJcIjtcbiAgbGV0IHJlYyBmb2xkJyBhY2MgczEgczIgaSA9XG4gICAgaWYgaSA9IFN0cmluZy5sZW5ndGggczEgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgZm9sZCcgKGYgYWNjIHMxLltpXSBzMi5baV0pIHMxIHMyIChpICsgMSlcbiAgaW5cbiAgZm9sZCcgYWNjIHMxIHMyIDBcblxubGV0IGZvcl9hbGwyIHAgczEgczIgPVxuICB0cnlcbiAgICBpdGVyMiAoZnVuIGMxIGMyIC0+IGlmIG5vdCAocCBjMSBjMikgdGhlbiByYWlzZSBNeUV4aXQpIHMxIHMyO1xuICAgIHRydWVcbiAgd2l0aCBNeUV4aXQgLT4gZmFsc2VcblxubGV0IGV4aXN0czIgcCBzMSBzMiA9XG4gIHRyeVxuICAgIGl0ZXIyIChmdW4gYzEgYzIgLT4gaWYgcCBjMSBjMiB0aGVuIHJhaXNlIE15RXhpdCkgczEgczI7XG4gICAgZmFsc2VcbiAgd2l0aCBNeUV4aXQgLT4gdHJ1ZVxuXG4oKiogezIgQXNjaWkgZnVuY3Rpb25zfSAqKVxuXG5sZXQgZXF1YWxfY2FzZWxlc3MgczEgczIgOiBib29sID1cbiAgU3RyaW5nLmxlbmd0aCBzMSA9IFN0cmluZy5sZW5ndGggczJcbiAgJiYgZm9yX2FsbDJcbiAgICAgICAoZnVuIGMxIGMyIC0+XG4gICAgICAgICBDQ0NoYXIuZXF1YWwgKENDQ2hhci5sb3dlcmNhc2VfYXNjaWkgYzEpIChDQ0NoYXIubG93ZXJjYXNlX2FzY2lpIGMyKSlcbiAgICAgICBzMSBzMlxuXG5sZXQgdG9faGV4IChzIDogc3RyaW5nKSA6IHN0cmluZyA9XG4gIGxldCBpX3RvX2hleCAoaSA6IGludCkgPVxuICAgIGlmIGkgPCAxMCB0aGVuXG4gICAgICBDaGFyLmNociAoaSArIENoYXIuY29kZSAnMCcpXG4gICAgZWxzZVxuICAgICAgQ2hhci5jaHIgKGkgLSAxMCArIENoYXIuY29kZSAnYScpXG4gIGluXG5cbiAgbGV0IHJlcyA9IEJ5dGVzLmNyZWF0ZSAoMiAqIGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvXG4gICAgbGV0IG4gPSBDaGFyLmNvZGUgKGdldCBzIGkpIGluXG4gICAgQnl0ZXMuc2V0IHJlcyAoMiAqIGkpIChpX3RvX2hleCAoKG4gbGFuZCAweGYwKSBsc3IgNCkpO1xuICAgIEJ5dGVzLnNldCByZXMgKCgyICogaSkgKyAxKSAoaV90b19oZXggKG4gbGFuZCAweDBmKSlcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxubGV0IG9mX2hleF9leG4gKHMgOiBzdHJpbmcpIDogc3RyaW5nID1cbiAgbGV0IG5fb2ZfYyA9IGZ1bmN0aW9uXG4gICAgfCAnMCcgLi4gJzknIGFzIGMgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnXG4gICAgfCAnYScgLi4gJ2YnIGFzIGMgLT4gMTAgKyBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnYSdcbiAgICB8ICdBJyAuLiAnRicgYXMgYyAtPiAxMCArIENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdBJ1xuICAgIHwgXyAtPiBpbnZhbGlkX2FyZyBcInN0cmluZzogaW52YWxpZCBoZXhcIlxuICBpblxuICBpZiBTdHJpbmcubGVuZ3RoIHMgbW9kIDIgPD4gMCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJzdHJpbmc6IGhleCBzZXF1ZW5jZSBtdXN0IGJlIG9mIGV2ZW4gbGVuZ3RoXCI7XG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChTdHJpbmcubGVuZ3RoIHMgLyAyKSAnXFx4MDAnIGluXG4gIGZvciBpID0gMCB0byAoU3RyaW5nLmxlbmd0aCBzIC8gMikgLSAxIGRvXG4gICAgbGV0IG4xID0gbl9vZl9jIChTdHJpbmcuZ2V0IHMgKDIgKiBpKSkgaW5cbiAgICBsZXQgbjIgPSBuX29mX2MgKFN0cmluZy5nZXQgcyAoKDIgKiBpKSArIDEpKSBpblxuICAgIGxldCBuID0gKG4xIGxzbCA0KSBsb3IgbjIgaW5cbiAgICBCeXRlcy5zZXQgcmVzIGkgKENoYXIuY2hyIG4pXG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbmxldCBvZl9oZXggcyA9IHRyeSBTb21lIChvZl9oZXhfZXhuIHMpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcblxubGV0IHBwX2J1ZiBidWYgcyA9XG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJztcbiAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHM7XG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJ1xuXG5sZXQgcHAgZm10IHMgPSBGb3JtYXQuZnByaW50ZiBmbXQgXCJcXFwiJXNcXFwiXCIgc1xuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPSApID0gZXF1YWxcbiAgbGV0ICggPD4gKSBhIGIgPSBub3QgKGVxdWFsIGEgYilcbiAgbGV0ICggPiApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+IClcbiAgbGV0ICggPj0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPj0gKVxuICBsZXQgKCA8ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDwgKVxuICBsZXQgKCA8PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8PSApXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuIiwib3BlbiBMZXhpbmdcblxuZXhjZXB0aW9uIExleF9lcnJvciBvZiBzdHJpbmdcblxubGV0IGxleF9lcnJvciBlcnIgPSByYWlzZSAoTGV4X2Vycm9yIGVycilcblxubGV0IGVycm9yX3BvcyBsZXhidWYgPSBcbiAgbGV0IHN0YXJ0ID0gbGV4YnVmLmxleF9zdGFydF9wIGluXG4gIGxldCBjbnVtID0gbGV4YnVmLmxleF9sYXN0X3BvcyAtIHN0YXJ0LnBvc19ib2wgaW5cbiAgbGV0IGVudW0gPSBsZXhidWYubGV4X2N1cnJfcG9zIC0gc3RhcnQucG9zX2JvbCBpblxuICAoc3RhcnQucG9zX2xudW0sIGNudW0sIGVudW0pXG5cbmxldCBlcnJvcl9wb3NfbXNnIChsZXhidWYgOiBMZXhpbmcubGV4YnVmKSA9XG4gIGxldCAobGluZSwgY251bSwgZW51bSkgPSBlcnJvcl9wb3MgbGV4YnVmIGluXG4gICAgUHJpbnRmLnNwcmludGYgXCJsaW5lICVkIGNoYXJzICVkLSVkXCIgbGluZSBjbnVtIGVudW1cblxubGV0IHN0cmluZzJudW0gcyA9XG4gIHRyeSAoVG9rZW5zLklOVCAoaW50X29mX3N0cmluZyBzKSkgd2l0aFxuICB8IEZhaWx1cmUgXyAtPiBUb2tlbnMuTEFSR0VJTlQgc1xuXG5sZXQgdXBkYXRlX3BvcyBsZXhidWYgPVxuICBsZXQgcG9zID0gbGV4YnVmLmxleF9zdGFydF9wIGluXG4gIGxleGJ1Zi5sZXhfc3RhcnRfcCA8LVxuICAgIHsgcG9zIHdpdGggcG9zX2JvbCA9IGxleGJ1Zi5sZXhfc3RhcnRfcG9zO1xuICAgICAgICAgICAgICAgcG9zX2xudW0gPSBwb3MucG9zX2xudW0gKyAxXG4gICAgfVxuXG5sZXQgaW50X29mX2hleGNoYXIgYyA9XG4gIG1hdGNoIGMgd2l0aFxuICB8ICcwJy4uJzknIC0+IGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnMCdcbiAgfCAnYScuLidmJyAtPiBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJ2EnICsgMTBcbiAgfCAnQScuLidGJyAtPiBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJ0EnICsgMTBcbiAgfCBjIC0+IGxleF9lcnJvciAoXCJpbnZhbGlkIGhleCBjaGFyIGluIHVuaWNvZGUgZXNjYXBlOiAnXCIgXiAoU3RyaW5nLm1ha2UgMSBjKSBeIFwiJ1wiKVxuXG5cbmxldCB1dGY4X29mX2NvZGUgYnVmIGlkeCB1ID1cbiAgbGV0IGkgPSByZWYgaWR4IGluXG5cbiAgbGV0IGFkZF9jaGFyIGIgYyA9IEJ5dGVzLnVuc2FmZV9zZXQgYiAhaSBjOyBpIDo9ICFpICsgMSBpblxuXG4gIGxldCBtYXhfdXNlZF9iaXRzIG4gdSA9ICh1IGxzciBuKSA9IDAgaW5cblxuICBpZiBtYXhfdXNlZF9iaXRzIDcgdSB0aGVuXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociB1KVxuICBlbHNlIGlmIG1heF91c2VkX2JpdHMgMTEgdSB0aGVuIGJlZ2luXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMTAwMDAwMCBsb3IgKCh1IGxzciA2KSBsYW5kIDBiMDAwMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICBsYW5kIDBiMDAxMTExMTEpKSlcbiAgZW5kXG4gIGVsc2UgaWYgbWF4X3VzZWRfYml0cyAxNiB1IHRoZW4gYmVnaW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjExMTAwMDAwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDBiMDAwMDExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICh1ICAgICAgICAgIGxhbmQgMGIwMDExMTExMSkpKVxuICBlbmRcbiAgZWxzZSBpZiBtYXhfdXNlZF9iaXRzIDIxIHUgdGhlbiBiZWdpblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTExMTAwMDAgbG9yICgodSBsc3IgMTgpIGxhbmQgMGIwMDAwMDExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICh1ICAgICAgICAgIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgZW5kXG4gIGVsc2UgaWYgbWF4X3VzZWRfYml0cyAyNiB1IHRoZW4gYmVnaW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjExMTExMDAwIGxvciAoKHUgbHNyIDI0KSBsYW5kIDBiMDAwMDAwMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAxOCkgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMTIpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyICA2KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICAgbGFuZCAwYjAwMTExMTExKSkpO1xuICBlbmRcbiAgZWxzZSBiZWdpblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTExMTExMDAgbG9yICgodSBsc3IgMzApIGxhbmQgMGIwMDAwMDAwMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDI0KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAxOCkgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMTIpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyICA2KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICAgbGFuZCAwYjAwMTExMTExKSkpO1xuICBlbmQ7XG4gICFpXG5cbmxldCB1dGY4X29mX3N1cnJvZ2F0ZV9wYWlyIGJ1ZiBpZHggaGlnaCBsb3cgPVxuICBsZXQgaGlnaCA9IGhpZ2ggLSAweEQ4MDAgaW5cbiAgbGV0IGxvdyA9IGxvdyAtIDB4REMwMCBpblxuICBsZXQgY29kZSA9IDB4MTAwMDAgKyAoKGhpZ2ggbHNsIDEwKSBsb3IgbG93KSBpblxuICAgIHV0Zjhfb2ZfY29kZSBidWYgaWR4IGNvZGVcblxubGV0IGVzY2FwaW5nX2Vycm9yIG1zZyBzIGMgb2ZmID1cbiAgbGV0IG9mZnMgPSBzdHJpbmdfb2ZfaW50IG9mZiBpblxuICBsZXQgY3MgPVxuICAgIG1hdGNoIGMgd2l0aFxuICAgIHwgU29tZSBjIC0+IFwiICdcIiBeIChTdHJpbmcubWFrZSAxIGMpIF4gXCInIFwiXG4gICAgfCBOb25lIC0+IFwiXCJcbiAgaW5cbiAgICBsZXhfZXJyb3IgKG1zZyBeIFwiIGF0IG9mZnNldCBcIiBeIG9mZnMgXiBjcyBeIFwiOiBcIiBeIHMpXG5cbmxldCB1bmVzY2FwZV9zdHJpbmcgcyA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBzJyA9IEJ5dGVzLmNyZWF0ZSBsIGluXG4gIGxldCBqID0gcmVmIDAgaW5cbiAgbGV0IHUxID0gcmVmIDAgaW5cbiAgbGV0IHUyID0gcmVmIDAgaW5cbiAgbGV0IHN0YXRlID0gcmVmIGBDaGFyIGluXG5cbiAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgbWF0Y2ggIXN0YXRlIHdpdGhcbiAgICB8IGBDaGFyIC0+IGJlZ2luXG4gICAgICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICAgICB8ICdcXFxcJyAtPiBzdGF0ZSA6PSBgRXNjYXBlXG4gICAgICAgICB8IGMgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiBjOyBqIDo9ICFqICsgMVxuICAgICAgIGVuZDtcbiAgICB8IGBFc2NhcGUgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgICB8ICdcIicgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJ1wiJzsgICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAnXFxcXCcgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxcXCc7ICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAnLycgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJy8nOyAgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdiJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxiJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdmJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFwwMTInOyBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICduJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxuJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdyJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxyJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICd0JyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFx0JzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICd1JyAgLT4gc3RhdGUgOj0gYFUxX2gxXG4gICAgICAgfCBfICAgIC0+IGVzY2FwaW5nX2Vycm9yIFwiaW52YWxpZCBlc2NhcGUgaW4gc3RyaW5nXCIgcyAoU29tZSBzLltpXSkgaVxuICAgICAgZW5kO1xuICAgIHwgYFUxX2gxIC0+IHUxIDo9IGludF9vZl9oZXhjaGFyIHMuW2ldOyAgc3RhdGUgOj0gYFUxX2gyXG4gICAgfCBgVTFfaDIgLT4gdTEgOj0gKCF1MSBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7ICBzdGF0ZSA6PSBgVTFfaDNcbiAgICB8IGBVMV9oMyAtPiB1MSA6PSAoIXUxIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTsgIHN0YXRlIDo9IGBVMV9oNFxuICAgIHwgYFUxX2g0IC0+XG4gICAgICB1MSA6PSAoIXUxIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTtcbiAgICAgIGlmICF1MSA+PSAweEQ4MDAgJiYgIXUxIDw9IDB4REJGRiB0aGVuXG4gICAgICAgIHN0YXRlIDo9IGBVMl9ic1xuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBqIDo9IHV0Zjhfb2ZfY29kZSBzJyAhaiAhdTE7XG4gICAgICAgIHN0YXRlIDo9IGBDaGFyXG4gICAgICBlbmRcbiAgICB8IGBVMl9icyAtPlxuICAgICAgaWYgcy5baV0gPD4gJ1xcXFwnIHRoZW5cbiAgICAgICAgZXNjYXBpbmdfZXJyb3IgXCJleHBlY3RlZCBsb3cgc3Vycm9nYXRlIGVzY2FwZSBjaGFyIChcXFxcKVwiIHMgKFNvbWUgcy5baV0pIGlcbiAgICAgIGVsc2VcbiAgICAgICAgc3RhdGUgOj0gYFUyX3VcbiAgICB8IGBVMl91IC0+XG4gICAgICBpZiBzLltpXSA8PiAndScgdGhlblxuICAgICAgICBlc2NhcGluZ19lcnJvciBcImV4cGVjdGVkIGxvdyBzdXJyb2dhdGUgZXNjYXBlIHNlcXVlbmNlICh1KVwiIHMgKFNvbWUgcy5baV0pIGlcbiAgICAgIGVsc2VcbiAgICAgICAgc3RhdGUgOj0gYFUyX2gxXG4gICAgfCBgVTJfaDEgLT4gdTIgOj0gaW50X29mX2hleGNoYXIgcy5baV07ICBzdGF0ZSA6PSBgVTJfaDJcbiAgICB8IGBVMl9oMiAtPiB1MiA6PSAoIXUyIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTsgIHN0YXRlIDo9IGBVMl9oM1xuICAgIHwgYFUyX2gzIC0+IHUyIDo9ICghdTIgbHNsIDQpIGxvciAoaW50X29mX2hleGNoYXIgcy5baV0pOyAgc3RhdGUgOj0gYFUyX2g0XG4gICAgfCBgVTJfaDQgLT5cbiAgICAgIHN0YXRlIDo9IGBDaGFyO1xuICAgICAgdTIgOj0gKCF1MiBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7XG4gICAgICBpZiAhdTIgPj0gMHhEQzAwICYmICF1MiA8PSAweERGRkYgdGhlblxuICAgICAgICBqIDo9IHV0Zjhfb2Zfc3Vycm9nYXRlX3BhaXIgcycgIWogIXUxICF1MiBcbiAgICAgIGVsc2VcbiAgICAgICAgZXNjYXBpbmdfZXJyb3IgXCJpbnZhbGlkIGxvdyBzdXJyb2dhdGUgZm9yIGNvZGUgcG9pbnQgYmV5b25kIFUrRkZGRidcIiBzIE5vbmUgaVxuICBkb25lO1xuICBiZWdpblxuICAgIG1hdGNoICFzdGF0ZSB3aXRoXG4gICAgfCBgQ2hhciAtPiAoKVxuICAgIHwgXyAtPiBlc2NhcGluZ19lcnJvciBcImVuZCBvZiBzdHJpbmcgaW4gZXNjYXBlIHNlcXVlbmNlXCIgcyBOb25lIGxcbiAgZW5kO1xuICBpZiAhaiA8PiBsIHRoZW4gQnl0ZXMudW5zYWZlX3RvX3N0cmluZyAoQnl0ZXMuc3ViIHMnIDAgIWopIGVsc2Ugc1xuXG4iLCIoKiBjb250YWlucyB0aGUgbGluZSBhbmQgY2hhcmFjdGVyIHNwYW4gb2Ygd2hlcmUgdGhlIGVycm9yIG9jY3VyZWQgKilcblxudHlwZSB0ID0ge1xuICBsaW5lIDogaW50XG47IHN0YXJ0X2NoYXIgOiBpbnRcbjsgZW5kX2NoYXIgOiBpbnRcbjsgbXNnIDogc3RyaW5nXG59XG5cbmV4Y2VwdGlvbiBKc29uX2Vycm9yX2luZm8gb2YgdFxuXG5sZXQgY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBlbXNnID1cbiAgbGV0IChlbGluZSwgc2NoYXIsIGVjaGFyKSA9IExleHhlcl91dGlscy5lcnJvcl9wb3MgbGV4YnVmIGluXG4gIHsgbGluZSA9IGVsaW5lOyBzdGFydF9jaGFyID0gc2NoYXI7IGVuZF9jaGFyID0gZWNoYXI7IG1zZyA9IGVtc2cgfVxuXG5sZXQgdG9fc3RyaW5nIGluZm8gPVxuICBsZXQgbG9jID0gUHJpbnRmLnNwcmludGYgXCJsaW5lICVkIGNoYXJzICVkLSVkXCIgaW5mby5saW5lIGluZm8uc3RhcnRfY2hhciBpbmZvLmVuZF9jaGFyIGluXG4gIGluZm8ubXNnIF4gXCIgYXQgXCIgXiBsb2NcbiIsImV4dGVybmFsIGZvcm1hdF9mbG9hdCA6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcblxuKCogRGV0ZXJtaW5lIHRoZSBzaXplIG9mIGFuIGludGVnZXIsIGhhbmRsZXMgMzBiaXQsIDYyYml0IGFuZCBKc29vIHVzaW5nIDMyYml0IGludHMgKilcbmxldCBtYXhfanNvbl9pbnQgPVxuICBsZXQgcmVjIGxvZzIgbiA9IGlmIG4gPD0gMSB0aGVuIDAgZWxzZSAxICsgbG9nMihuIGFzciAxKSBpblxuICBsZXQgYml0cyBuID0gbG9nMiBuICsgMSBpblxuICBpZiBiaXRzIG1heF9pbnQgPiA1MyB0aGVuICgxIGxzbCA1MykgLSAxIGVsc2UgbWF4X2ludFxuXG5sZXQgbWF4X2pzb25faW50X2FzX2Zsb2F0ID0gZmxvYXRfb2ZfaW50IG1heF9qc29uX2ludFxuXG5sZXQgc3RyaW5nX29mX2Zsb2F0X2pzb24gZiA9XG4gIGxldCBpc19pbnQgPSAoZmxvYXRfb2ZfaW50IChpbnRfb2ZfZmxvYXQgZikpID0gZiBpblxuICBpZiBpc19pbnQgJiYgYWJzX2Zsb2F0IGYgPD0gbWF4X2pzb25faW50X2FzX2Zsb2F0IHRoZW4gYmVnaW4gKCogSUVFRSBtYXggaW50IGluIGEgZmxvYXQgd2hlbiBpbiA2NGJpdCBpbnQgbW9kZSopXG4gICAgbGV0IGludF92YWx1ZSA9IGludF9vZl9mbG9hdCBmIGluIChzdHJpbmdfb2ZfaW50IGludF92YWx1ZSkgXiBcIi4wXCJcbiAgZW5kXG4gIGVsc2UgYmVnaW5cbiAgICAoKiAlLjE3ZyBvZnRlbiBjcmVhdGVzIG92ZXJseSBsb25nIG91dHB1dCwgYXR0ZW1wdCB0byBjb252ZXJ0IGF0IGxvd2VyIHByZWNlc3Npb24gZmlyc3QgKilcbiAgICBsZXQgcyA9IGZvcm1hdF9mbG9hdCBcIiUuMTZnXCIgZiBpblxuICAgIGxldCBzID0gaWYgZmxvYXRfb2Zfc3RyaW5nIHMgPSBmIHRoZW4gcyBlbHNlIGZvcm1hdF9mbG9hdCBcIiUuMTdnXCIgZiBpblxuICAgIGlmIG5vdCAoU3RyaW5nLmNvbnRhaW5zIHMgJy4nIHx8IFN0cmluZy5jb250YWlucyBzICdlJykgdGhlbiBzIF4gXCIuMFwiXG4gICAgZWxzZSBzXG4gIGVuZFxuIiwiXG5sZXQgdG9rZW5fZXJyb3IgdG9rID1cbiAgbGV0IG9wZW4gVG9rZW5zIGluXG4gIGxldCBlcnIgPSBtYXRjaCB0b2sgd2l0aFxuICAgIHwgU1RSSU5HIHMgLT4gXCJ1bmV4cGVjdGVkIHN0cmluZyAnXCIgXiBzIF4gXCInXCJcbiAgICB8IE9TIC0+IFwidW5leHBlY3RlZCAneydcIlxuICAgIHwgT0UgLT4gXCJ1bmV4cGVjdGVkICd9J1wiXG4gICAgfCBOVUxMIC0+IFwidW5leHBlY3RlZCBudWxsIHZhbHVlXCJcbiAgICB8IE5FR0lORklOSVRZIC0+IFwidW5leHBlY3RlZCBuZWdhdGl2ZSBpbmZpbml0eVwiXG4gICAgfCBOQU4gLT4gXCJ1bmV4cGVjdGVkIE5vdC1hLU51bWJlclwiXG4gICAgfCBMRVhfRVJST1IgcyAtPiBzXG4gICAgfCBMQVJHRUlOVCBzIC0+IFwidW5leHBlY3RlZCBsYXJnZSBpbnRlZ2VyICdcIiBeIHMgXiBcIidcIlxuICAgIHwgSU5UIGkgLT4gXCJ1bmV4cGVjdGVkIGludGVnZXIgJ1wiIF4gKHN0cmluZ19vZl9pbnQgaSkgXiBcIidcIlxuICAgIHwgSU5GSU5JVFkgLT4gXCJ1bmV4cGVjdGVkIGluZmluaXR5XCJcbiAgICB8IEZMT0FUIGYgLT4gXCJ1bmV4cGVjdGVkIGZsb2F0ICdcIiBeIChzdHJpbmdfb2ZfZmxvYXQgZikgXiBcIidcIlxuICAgIHwgRU9GIC0+IFwidW5leHBlY3RlZCBlbmQtb2YtaW5wdXRcIlxuICAgIHwgQ09NUExJQU5DRV9FUlJPUiBzIC0+IFwiY29tcGxpYW5jZSBlcnJvciAnXCIgXiBzIF4gXCInXCJcbiAgICB8IENPTU1BIC0+IFwidW5leHBlY3RlZCAnLCdcIlxuICAgIHwgQ09MT04gLT4gXCJ1bmV4cGVjdGVkICc6J1wiXG4gICAgfCBCT09MIGIgLT4gXCJ1bmV4cGVjdGVkIGJvb2xlYW4gJ1wiIF4gKGlmIGIgdGhlbiBcInRydWVcIiBlbHNlIFwiZmFsc2VcIikgXiBcIidcIlxuICAgIHwgQVMgLT4gXCJ1bmV4cGVjdGVkICdbJ1wiXG4gICAgfCBBRSAtPiBcInVuZXhwZWN0ZWQgJ10nXCJcbiAgICB8IFRTIC0+IFwidW5leHBlY3RlZCAnKCdcIlxuICAgIHwgVEUgLT4gXCJ1bmV4cGVjdGVkICcpJ1wiXG4gICAgfCBWUyAtPiBcInVuZXhwZWN0ZWQgJzwnXCJcbiAgICB8IFZFIC0+IFwidW5leHBlY3RlZCAnPidcIlxuICBpblxuICAgIGBTeW50YXhfZXJyb3IgZXJyXG4iLCJtb2R1bGUgdHlwZSBQYXJzZXIgPSBzaWdcbiAgbW9kdWxlIENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlNcblxuICB2YWwgZGVjb2RlXG4gICAgOiAgcmVhZGVyIDogKHVuaXQgLT4gVG9rZW5zLnRva2VuKVxuICAgIC0+IChDb21wbGlhbmNlLmpzb24gb3B0aW9uLCBzdHJpbmcpIHJlc3VsdFxuZW5kXG5cbm1vZHVsZSBNYWtlIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA6IFBhcnNlclxuICB3aXRoIG1vZHVsZSBDb21wbGlhbmNlID0gQ29tcGxpYW5jZVxuPSBzdHJ1Y3RcblxuICBtb2R1bGUgQ29tcGxpYW5jZSA9IENvbXBsaWFuY2VcblxuICBleGNlcHRpb24gUGFyc2VfZXJyb3Igb2YgW2BFb2YgfCBgU3ludGF4X2Vycm9yIG9mIHN0cmluZ11cblxuICBsZXQganNvbl92YWx1ZSB+cmVhZGVyID0gXG4gICAgbGV0IG9wZW4gVG9rZW5zIGluXG4gICAgbGV0IG9wZW4gUGFyc2VyX3Rvb2xzIGluXG4gICAgbGV0IHJlYyB0b2tlbl92YWx1ZSB0b2sgPSBiZWdpblxuICAgICAgbWF0Y2ggdG9rIHdpdGhcbiAgICAgIHwgSU5UIGkgLT4gQ29tcGxpYW5jZS5pbnRlZ2VyIGlcbiAgICAgIHwgU1RSSU5HIHMgLT4gQ29tcGxpYW5jZS5zdHJpbmcgc1xuICAgICAgfCBCT09MIGIgLT4gQ29tcGxpYW5jZS5ib29sIGJcbiAgICAgIHwgRkxPQVQgZiAtPiBDb21wbGlhbmNlLm51bWJlciAoYEZsb2F0IGYpXG4gICAgICB8IElORklOSVRZIC0+IENvbXBsaWFuY2UubnVtYmVyIGBJbmZpbml0eVxuICAgICAgfCBORUdJTkZJTklUWSAtPiBDb21wbGlhbmNlLm51bWJlciBgTmVnaW5maW5pdHlcbiAgICAgIHwgTkFOIC0+IENvbXBsaWFuY2UubnVtYmVyIGBOYW5cbiAgICAgIHwgTlVMTCAtPiBDb21wbGlhbmNlLm51bGxcbiAgICAgIHwgTEFSR0VJTlQgcyAtPiBDb21wbGlhbmNlLmxhcmdlaW50IHNcbiAgICAgIHwgRU9GIC0+IHJhaXNlIChQYXJzZV9lcnJvciBgRW9mKVxuICAgICAgfCBDT01NQSB8IENPTE9OIHwgQUUgfCBPRSB8IFRFIHwgVkUgfCBMRVhfRVJST1IgXyB8IENPTVBMSUFOQ0VfRVJST1IgXyAtPlxuICAgICAgICByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgICB8IEFTIC0+IGFycmF5X3ZhbHVlX3N0YXJ0ICgpXG4gICAgICB8IE9TIC0+IG9iamVjdF92YWx1ZV9zdGFydCAoKVxuICAgICAgfCBUUyAtPiB0dXBsZV92YWx1ZV9zdGFydCAoKVxuICAgICAgfCBWUyAtPiB2YXJpYW50X3ZhbHVlX3N0YXJ0ICgpXG4gICAgZW5kXG4gICAgYW5kIHZhbHVlICgpID0gdG9rZW5fdmFsdWUgKHJlYWRlciAoKSlcbiAgICBhbmQgYXJyYXlfdmFsdWVfc3RhcnQgKCkgPSBiZWdpblxuICAgICAgbGV0IHRvayA9IHJlYWRlciAoKSBpblxuICAgICAgbWF0Y2ggdG9rIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IFtdXG4gICAgICB8IF8gLT4gYXJyYXlfdmFsdWVzX3N0YXJ0IHRvayBbXVxuICAgIGVuZFxuICAgIGFuZCBhcnJheV92YWx1ZXNfc3RhcnQgdG9rIGFjYyA9IGJlZ2luXG4gICAgICBsZXQgdiA9IHRva2VuX3ZhbHVlIHRvayBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gYXJyYXlfdmFsdWVzICh2OjphY2MpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIGFycmF5X3ZhbHVlcyBhY2MgPSBiZWdpblxuICAgICAgbGV0IHYgPSB2YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gYXJyYXlfdmFsdWVzICh2OjphY2MpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIG9iamVjdF92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBsZXQgdG9rID0gcmVhZGVyICgpIGluXG4gICAgICBtYXRjaCB0b2sgd2l0aFxuICAgICAgfCBPRSAtPiBDb21wbGlhbmNlLmFzc29jIFtdXG4gICAgICB8IF8gLT4gb2JqZWN0X3ZhbHVlc19zdGFydCB0b2sgW11cbiAgICBlbmRcbiAgICBhbmQgb2JqZWN0X3ZhbHVlc19zdGFydCB0b2sgYWNjID0gYmVnaW5cbiAgICAgIGxldCB2ID0gY29sb25fdmFsdWUgdG9rICgpIGluXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBPRSAtPiBDb21wbGlhbmNlLmFzc29jIChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gb2JqZWN0X3ZhbHVlcyAodjo6YWNjKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCBvYmplY3RfdmFsdWVzIGFjYyA9IGJlZ2luXG4gICAgICBsZXQgdiA9IGtleV9jb2xvbl92YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgT0UgLT4gQ29tcGxpYW5jZS5hc3NvYyAoTGlzdC5yZXYgKHY6OmFjYykpXG4gICAgICB8IENPTU1BIC0+IG9iamVjdF92YWx1ZXMgKHY6OmFjYylcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgY29sb25fdmFsdWUgdiAoKSA9IGJlZ2luXG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgU1RSSU5HIGsgLT4gYmVnaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBDT0xPTiAtPiAoaywgdmFsdWUgKCkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IHRvayAtPiAgcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCBrZXlfY29sb25fdmFsdWUgKCkgPSBiZWdpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgU1RSSU5HIGsgLT4gYmVnaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBDT0xPTiAtPiAoaywgdmFsdWUgKCkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IHRvayAtPiAgcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB0dXBsZV92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBsZXQgdjEgPSB2YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQ09NTUEgLT4gYmVnaW5cbiAgICAgICAgbGV0IHYyID0gdmFsdWUgKCkgaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBURSAtPiBDb21wbGlhbmNlLnR1cGxlIFt2MTsgdjJdXG4gICAgICAgIHwgQ09NTUEgLT4gdHVwbGVfdmFsdWVzIFt2MjsgdjFdXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IFRFIC0+IHJhaXNlIChQYXJzZV9lcnJvciAoYFN5bnRheF9lcnJvciBcInR1cGxlIG11c3QgaGF2ZSBhdCBsZWFzdCAyIGVsZW1lbnRzXCIpKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB0dXBsZV92YWx1ZXMgYWNjID0gYmVnaW5cbiAgICAgIGxldCB2ID0gdmFsdWUgKCkgaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IFRFIC0+IENvbXBsaWFuY2UudHVwbGUgKExpc3QucmV2ICh2OjphY2MpKVxuICAgICAgfCBDT01NQSAtPiB0dXBsZV92YWx1ZXMgKHY6OmFjYylcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgdmFyaWFudF92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBTVFJJTkcgayAtPiBiZWdpblxuICAgICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgICB8IFZFIC0+IENvbXBsaWFuY2UudmFyaWFudCBrIE5vbmVcbiAgICAgICAgfCBDT0xPTiAtPiB2YXJpYW50X2VuZCBrIChTb21lICh2YWx1ZSAoKSkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IFZFIC0+IHJhaXNlIChQYXJzZV9lcnJvciAoYFN5bnRheF9lcnJvciBcInZhcmlhbnQgbXVzdCBoYXZlIGF0IGxlYXN0IGEgc3RyaW5nXCIpKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB2YXJpYW50X2VuZCBrIHYgPSBiZWdpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgVkUgLT4gQ29tcGxpYW5jZS52YXJpYW50IGsgdlxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGluXG4gICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICB8IGV4Y2VwdGlvbiAoUGFyc2VfZXJyb3IgYEVvZikgLT4gTm9uZVxuICAgIHwgZXhjZXB0aW9uIGV4bl8gLT4gcmFpc2UgZXhuX1xuICAgIHwgRU9GIC0+IE5vbmVcbiAgICB8IHRvayAtPiBTb21lICh0b2tlbl92YWx1ZSB0b2spXG5cbiAgbGV0IGRlY29kZSB+cmVhZGVyID0gXG4gICAgbWF0Y2gganNvbl92YWx1ZSB+cmVhZGVyIHdpdGhcbiAgICB8IGV4Y2VwdGlvbiAoUGFyc2VfZXJyb3IgYEVvZikgLT4gRXJyb3IgXCJVbmV4cGVjdGVkIGVuZC1vZi1pbnB1dFwiXG4gICAgfCBleGNlcHRpb24gKFBhcnNlX2Vycm9yIChgU3ludGF4X2Vycm9yIGVycikpIC0+IEVycm9yIGVyclxuICAgIHwgZXhjZXB0aW9uIChMZXh4ZXJfdXRpbHMuTGV4X2Vycm9yIGVycikgLT4gRXJyb3IgZXJyXG4gICAgfCByZXMgLT4gT2sgcmVzXG5cbmVuZFxuIiwibGV0IG5pYmJsZV90b19oZXggaSA9IGNoYXJfb2ZfaW50IChpZiBpID4gOSB0aGVuIDY1ICsgaSAtIDEwIGVsc2UgNDggKyBpKVxuXG5sZXQgYWRkX2hleF9ieXRlIH5hZGRfY2hhciBpID1cbiAgYWRkX2NoYXIgKG5pYmJsZV90b19oZXggKChpIGxzciA0KSBsYW5kIDB4MGYpKTtcbiAgYWRkX2NoYXIgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxubGV0IGVzY2FwZSB+YWRkX2NoYXIgfmFkZF9zdHJpbmcgcyA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICB8ICdcIicgICAgLT4gYWRkX3N0cmluZyBcIlxcXFxcXFwiXCJcbiAgICB8ICdcXFxcJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcXFwiXG4gICAgfCAnXFxiJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcYlwiXG4gICAgfCAnXFwwMTInIC0+IGFkZF9zdHJpbmcgXCJcXFxcZlwiXG4gICAgfCAnXFxuJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcblwiXG4gICAgfCAnXFxyJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcclwiXG4gICAgfCAnXFx0JyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcdFwiXG4gICAgfCAnXFx4MDAnLi4nXFx4MUYnXG4gICAgfCAnXFx4N0YnIGFzIGMgLT5cbiAgICAgIGFkZF9zdHJpbmcgXCJcXFxcdTAwXCI7ICBhZGRfaGV4X2J5dGUgfmFkZF9jaGFyIChpbnRfb2ZfY2hhciBjKVxuICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gIGRvbmVcbiBcbiIsIm1vZHVsZSB0eXBlIEludGYgPSBzaWdcbiAgdmFsIHByZXR0eV9wcmludCA6IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBwcmV0dHlfcHJpbnRfdG9fc3RyaW5nIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiBzdHJpbmdcbiAgdmFsIHByZXR0eV9wcmludF90b19jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG5lbmRcblxubW9kdWxlIE1ha2UoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgPSBzdHJ1Y3RcbiAgbGV0IHRvX2pzb25fc3RyaW5nIHMgPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDEwMCBpblxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBVdGlscy5lc2NhcGUgfmFkZF9jaGFyIH5hZGRfc3RyaW5nIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBhZGRfcXVvdGVfc3RyaW5nIHM7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBwcF9saXN0IHNlcCBwcHggb3V0IGwgPVxuICAgIGxldCBwcF9zZXAgb3V0ICgpID0gRm9ybWF0LmZwcmludGYgb3V0IFwiJXNAIFwiIHNlcCBpblxuICAgIEZvcm1hdC5wcF9wcmludF9saXN0IH5wcF9zZXAgcHB4IG91dCBsXG5cbiAgbGV0IHJlYyBmb3JtYXQgKG91dDpGb3JtYXQuZm9ybWF0dGVyKSBqc29uIDogdW5pdCA9XG4gICAgbWF0Y2gganNvbiB3aXRoXG4gICAgICB8IGBOdWxsIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gRm9ybWF0LnBwX3ByaW50X2Jvb2wgb3V0IGJcbiAgICAgIHwgYEludCBpIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IChzdHJpbmdfb2ZfaW50IGkpXG4gICAgICB8IGBGbG9hdCBmIC0+XG4gICAgICAgIGxldCBzID0gQ29tcGxpYW5jZS5udW1iZXJfdG9fc3RyaW5nIGYgaW5cbiAgICAgICAgRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgKHRvX2pzb25fc3RyaW5nIHMpXG4gICAgICB8IGBJbnRsaXQgc1xuICAgICAgfCBgRmxvYXRsaXQgc1xuICAgICAgfCBgU3RyaW5nbGl0IHMgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgc1xuICAgICAgfCBgTGlzdCBbXSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIltdXCJcbiAgICAgIHwgYExpc3QgbCAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCJbQDs8MSAwPkBbPGhvdj4lYUBdQDs8MSAtMj5dXCIgKHBwX2xpc3QgXCIsXCIgZm9ybWF0KSBsXG4gICAgICB8IGBBc3NvYyBbXSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcInt9XCJcbiAgICAgIHwgYEFzc29jIGwgLT5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwie0A7PDEgMD4lYUA7PDEgLTI+fVwiIChwcF9saXN0IFwiLFwiIGZvcm1hdF9maWVsZCkgbFxuICAgICAgfCBgVHVwbGUgbCAtPlxuICAgICAgICBpZiBsID0gW10gdGhlbiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIigpXCJcbiAgICAgICAgZWxzZSBGb3JtYXQuZnByaW50ZiBvdXQgXCIoQCwlYUA7PDAgLTI+KVwiIChwcF9saXN0IFwiLFwiIGZvcm1hdCkgbFxuICAgICAgfCBgVmFyaWFudCAocywgTm9uZSkgLT5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwiPCVzPlwiICh0b19qc29uX3N0cmluZyBzKVxuICAgICAgfCBgVmFyaWFudCAocywgU29tZSBqc29uKSAtPlxuICAgICAgICBsZXQgcyA9IHRvX2pzb25fc3RyaW5nIHMgaW5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwiPEBbPGh2Mj4lczogJWFAXT5cIiBzIGZvcm1hdCBqc29uXG5cbiAgYW5kIGZvcm1hdF9maWVsZCBvdXQgKG5hbWUsIGpzb24pID1cbiAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCJAWzxodjI+JXM6ICVhQF1cIiAodG9fanNvbl9zdHJpbmcgbmFtZSkgZm9ybWF0IGpzb25cblxuICBsZXQgcHJldHR5X3ByaW50IG91dCBqc29uID1cbiAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCJAWzxodjI+JWFAXVwiIGZvcm1hdCBqc29uXG5cbiAgbGV0IHByZXR0eV9wcmludF90b19zdHJpbmcganNvbiA9XG4gICAgRm9ybWF0LmFzcHJpbnRmIFwiJWFcIiBwcmV0dHlfcHJpbnQganNvblxuXG4gIGxldCBwcmV0dHlfcHJpbnRfdG9fY2hhbm5lbCBvYyBqc29uID1cbiAgICBsZXQgZm10ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBvYyBpblxuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVhQD9cIiBwcmV0dHlfcHJpbnQganNvblxuXG5lbmRcbiIsImxldCBlcnJvciBtc2cgX2pzb24gPSByYWlzZSAoRmFpbHVyZSBtc2cpXG5cbm1vZHVsZSBJbnRlcm5hbCA9IHN0cnVjdFxuICBtb2R1bGUgdHlwZSBTID0gc2lnXG4gICAgdHlwZSBqc29uXG4gICAgdmFsIG51bGwgOiB1bml0IC0+IGpzb25cbiAgZW5kXG5cbiAgbW9kdWxlIHR5cGUgSW50ZXJuYWxfc3RyaWN0X2ludGYgPSBzaWdcbiAgICB0eXBlIGpzb25cblxuICAgIHZhbCBtZW1iZXIgOiBzdHJpbmcgLT4gWz4gYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0IF0gLT4ganNvblxuICAgIHZhbCBpbmRleCA6IGludCAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSAtPiBqc29uXG4gICAgdmFsIG1hcCA6IChqc29uIC0+IGpzb24pIC0+IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdIC0+IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdXG4gICAgdmFsIHRvX2Fzc29jIDogWz4gYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0IF0gLT4gKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICB2YWwgdG9fYm9vbCA6IFs+IGBCb29sIG9mIGJvb2wgXSAtPiBib29sXG4gICAgdmFsIHRvX2Zsb2F0IDogWz4gYEZsb2F0IG9mIGZsb2F0IF0gLT4gZmxvYXRcbiAgICB2YWwgdG9fc3RyaW5nIDogWz4gYFN0cmluZyBvZiBzdHJpbmcgXSAtPiBzdHJpbmdcbiAgICB2YWwgdG9fc3RyaW5nX29wdGlvbiA6IFs+IGBTdHJpbmcgb2Ygc3RyaW5nIHwgYE51bGwgXSAtPiBzdHJpbmcgb3B0aW9uXG4gICAgdmFsIHRvX29wdGlvbiA6ICgoWz4gYE51bGwgXSBhcyAnYSkgLT4ganNvbikgLT4gJ2EgLT4ganNvbiBvcHRpb25cbiAgICB2YWwgdG9fbGlzdCA6IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdIC0+IGpzb24gbGlzdFxuICAgIHZhbCB0b19ib29sX29wdGlvbiA6IFs+IGBCb29sIG9mIGJvb2wgfCBgTnVsbCBdIC0+IGJvb2wgb3B0aW9uXG4gICAgdmFsIHRvX2Zsb2F0X29wdGlvbiA6IFs+IGBGbG9hdCBvZiBmbG9hdCB8IGBOdWxsIF0gLT4gZmxvYXQgb3B0aW9uXG4gICAgdmFsIHRvX251bWJlciA6IFs+IGBGbG9hdCBvZiBmbG9hdCBdIC0+IGZsb2F0XG4gICAgdmFsIHRvX251bWJlcl9vcHRpb24gOiBbPiBgRmxvYXQgb2YgZmxvYXQgfCBgTnVsbCBdIC0+IGZsb2F0IG9wdGlvblxuICAgIHZhbCBjb252ZXJ0X2VhY2ggOiAoanNvbiAtPiBqc29uKSAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSAtPiBqc29uIGxpc3RcbiAgICB2YWwgcmV2X2ZpbHRlcl9tYXAgOiAoJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSBsaXN0IC0+ICdhIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCBmaWx0ZXJfbWFwIDogKCdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIHJldl9mbGF0dGVuIDogJ2EgbGlzdCAtPiBbPiBgTGlzdCBvZiAnYSBsaXN0IF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZsYXR0ZW4gOiBbPiBgTGlzdCBvZiAnYSBsaXN0IF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZpbHRlcl9pbmRleCA6IGludCAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSBsaXN0IC0+IGpzb24gbGlzdFxuICAgIHZhbCBmaWx0ZXJfbGlzdCA6IFs+IGBMaXN0IG9mICdhIF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZpbHRlcl9hc3NvYyA6IFs+IGBBc3NvYyBvZiAnYSBdIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCBmaWx0ZXJfYm9vbCA6IFs+IGBCb29sIG9mIGJvb2wgXSBsaXN0IC0+IGJvb2wgbGlzdFxuICAgIHZhbCBmaWx0ZXJfZmxvYXQgOiBbPiBgRmxvYXQgb2YgZmxvYXQgXSBsaXN0IC0+IGZsb2F0IGxpc3RcbiAgICB2YWwgZmlsdGVyX3N0cmluZyAgOiBbPiBgU3RyaW5nIG9mIHN0cmluZyBdIGxpc3QgLT4gc3RyaW5nIGxpc3RcbiAgICB2YWwgZmlsdGVyX21lbWJlciA6IHN0cmluZyAtPiBbPiBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3QgXSBsaXN0IC0+IGpzb24gbGlzdFxuICAgIHZhbCBmaWx0ZXJfbnVtYmVyIDogWz4gYEZsb2F0IG9mIGZsb2F0IF0gbGlzdCAtPiBmbG9hdCBsaXN0XG4gICAgdmFsIGtleXMgOiBbPiBgQXNzb2Mgb2YgKHN0cmluZyAqICdhKSBsaXN0IF0gLT4gc3RyaW5nIGxpc3RcbiAgICB2YWwgdmFsdWVzIDogWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCBdIC0+ICdhIGxpc3RcbiAgICB2YWwgY29tYmluZSA6IFs+IGBBc3NvYyBvZiAnYSBsaXN0IF0gLT4gWz4gYEFzc29jIG9mICdhIGxpc3QgXSAtPiBbPiBgQXNzb2Mgb2YgJ2EgbGlzdCBdXG4gICAgdmFsIHNvcnQgOiAoWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCB8IGBMaXN0IG9mICdhIGxpc3QgXSBhcyAnYSkgLT4gJ2FcbiAgZW5kXG5cbiAgbW9kdWxlIFNoYXJlZCA9IHN0cnVjdFxuICAgIGxldCByZWMgcmV2X2ZpbHRlcl9tYXAgZiBhY2MgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gYWNjXG4gICAgICB8IGhkOjp0bCAtPlxuICAgICAgICBtYXRjaCBmIGhkIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IHJldl9maWx0ZXJfbWFwIGYgYWNjIHRsXG4gICAgICAgIHwgU29tZSB2IC0+IHJldl9maWx0ZXJfbWFwIGYgKHY6OmFjYykgdGxcblxuICAgIGxldCBmaWx0ZXJfbWFwIGYgbCA9IExpc3QucmV2IChyZXZfZmlsdGVyX21hcCBmIFtdIGwpXG5cbiAgICBsZXQgcmVjIHJldl9mbGF0dGVuIGFjYyBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiBhY2NcbiAgICAgIHwgaGQ6OnRsIC0+XG4gICAgICAgIG1hdGNoIGhkIHdpdGhcbiAgICAgICAgfCBgTGlzdCBsMiAtPiByZXZfZmxhdHRlbiAoTGlzdC5yZXZfYXBwZW5kIGwyIGFjYykgdGxcbiAgICAgICAgfCBfIC0+IHJldl9mbGF0dGVuIGFjYyB0bFxuXG4gICAgbGV0IGZsYXR0ZW4gbCA9IExpc3QucmV2IChyZXZfZmxhdHRlbiBbXSBsKVxuXG4gIGVuZFxuXG4gIG1vZHVsZSBTdHJpY3QoTSA6IFMpIDogSW50ZXJuYWxfc3RyaWN0X2ludGZcbiAgICB3aXRoIHR5cGUganNvbiA9IE0uanNvblxuICA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IE0uanNvblxuXG4gICAgbGV0IGFzc29jIG5hbWUgb2JqIDoganNvbiA9IHRyeSBMaXN0LmFzc29jIG5hbWUgb2JqIHdpdGggTm90X2ZvdW5kIC0+IE0ubnVsbCAoKVxuXG4gICAgbGV0IG1lbWJlciBuYW1lIHYgOiBqc29uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgQXNzb2Mgb2JqIC0+IGFzc29jIG5hbWUgb2JqXG4gICAgICB8IGpzb24gLT4gZXJyb3IgKFwiRXhwZWN0ZWQgYEFzc29jIHRvIGZpbmQgbmFtZSAnXCIgXiBuYW1lIF4gXCInIGluXCIpIGpzb25cblxuICAgIGxldCBpbmRleCBpIHYgOiBqc29uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgICAgICAgICBsZXQgaScgPSBpZiBpIDwgMCB0aGVuIGxlbiArIGkgZWxzZSBpIGluXG4gICAgICAgICAgaWYgaScgPCAwIHx8IGknID49IGxlbiB0aGVuIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IChzdHJpbmdfb2ZfaW50IGkgXiBcIiBvdXQgb2YgYm91bmRzXCIpKVxuICAgICAgICAgIGVsc2UgTGlzdC5udGggbCBpJ1xuICAgICAgfCBqc29uIC0+IGVycm9yIFwiQ2FuJ3QgaW5kZXggbm9uZSBgTGlzdCB0eXBlIFwiIGpzb25cblxuICAgIGxldCBtYXAgZiB2ID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTGlzdCBsIC0+IGBMaXN0IChMaXN0Lm1hcCBmIGwpXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJDYW4ndCBtYXAgb3ZlciBub25lIGBMaXN0IHR5cGUgXCIganNvblxuXG4gICAgbGV0IHRvX2Fzc29jID0gZnVuY3Rpb24gfCBgQXNzb2Mgb2JqIC0+IG9iaiB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgQXNzb2NcIiBqc29uXG4gICAgbGV0IHRvX2Jvb2wgPSBmdW5jdGlvbiB8IGBCb29sIGIgLT4gYiB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgQm9vbFwiIGpzb25cbiAgICBsZXQgdG9fZmxvYXQgPSBmdW5jdGlvbiB8IGBGbG9hdCBmIC0+IGYgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0XCIganNvblxuXG4gICAgbGV0IHRvX3N0cmluZyA9IGZ1bmN0aW9uXG4gICAgICB8IGBTdHJpbmcgcyAtPiBzXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgU3RyaW5nXCIganNvblxuXG4gICAgbGV0IHRvX3N0cmluZ19vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgU3RyaW5nIHMgLT4gU29tZSBzXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBTdHJpbmcgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9fb3B0aW9uIGYgdiA6IGpzb24gb3B0aW9uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IHYgLT4gU29tZSAoZiB2KVxuXG4gICAgbGV0IHRvX2xpc3QgdiA6IGpzb24gbGlzdCA9XG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgYExpc3QgbCAtPiBsXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgTGlzdFwiIGpzb25cblxuICAgIGxldCB0b19mbG9hdF9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0IG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IHRvX2Jvb2xfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYEJvb2wgYiAtPiBTb21lIGJcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEJvb2wgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9fbnVtYmVyID0gZnVuY3Rpb25cbiAgICAgIHwgYEZsb2F0IGYgLT4gZlxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0XCIganNvblxuXG4gICAgbGV0IHRvX251bWJlcl9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0IG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IGNvbnZlcnRfZWFjaCBmID0gZnVuY3Rpb25cbiAgICAgIHwgYExpc3QgbCAtPiBMaXN0Lm1hcCBmIGxcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBMaXN0XCIganNvblxuXG4gICAgbGV0IHJldl9maWx0ZXJfbWFwID0gU2hhcmVkLnJldl9maWx0ZXJfbWFwXG4gICAgbGV0IGZpbHRlcl9tYXAgPSBTaGFyZWQuZmlsdGVyX21hcFxuXG4gICAgbGV0IHJldl9mbGF0dGVuID0gU2hhcmVkLnJldl9mbGF0dGVuXG4gICAgbGV0IGZsYXR0ZW4gPSBTaGFyZWQuZmxhdHRlblxuXG4gICAgbGV0IGZpbHRlcl9pbmRleCBpIGwgPVxuICAgICAgZmlsdGVyX21hcCAoZnVuY3Rpb24gfCBgTGlzdCBsIC0+ICh0cnkgU29tZSAoTGlzdC5udGggbCBpKSB3aXRoIF8gLT4gTm9uZSkgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbGlzdCBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYExpc3QgbCAtPiBTb21lIGwgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX2Fzc29jIGwgPSBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgQXNzb2MgbCAtPiBTb21lIGwgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX2Jvb2wgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBCb29sIGIgLT4gU29tZSBiIHwgXyAtPiBOb25lKSBsXG4gICAgbGV0IGZpbHRlcl9mbG9hdCBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYEZsb2F0IGYgLT4gU29tZSBmIHwgXyAtPiBOb25lKSBsXG4gICAgbGV0IGZpbHRlcl9zdHJpbmcgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBTdHJpbmcgcyAtPiBTb21lIHMgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbWVtYmVyIGsgbCA9XG4gICAgICBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgQXNzb2MgbCAtPiAodHJ5IFNvbWUgKExpc3QuYXNzb2MgayBsKSB3aXRoIF8gLT4gTm9uZSkgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbnVtYmVyIGwgPVxuICAgICAgZmlsdGVyX21hcCAoXG4gICAgICAgIGZ1bmN0aW9uXG4gICAgICAgIHwgYEZsb2F0IGYgLT4gU29tZSBmXG4gICAgICAgIHwgXyAtPiBOb25lXG4gICAgICApIGxcblxuICAgIGxldCBrZXlzIG8gPSB0b19hc3NvYyBvIHw+IExpc3QubWFwIChmdW4gKGtleSwgXykgLT4ga2V5KVxuXG4gICAgbGV0IHZhbHVlcyBvID0gdG9fYXNzb2MgbyB8PiBMaXN0Lm1hcCAoZnVuIChfLCB2YWx1ZSkgLT4gdmFsdWUpXG5cbiAgICBsZXQgY29tYmluZSBmaXJzdCBzZWNvbmQgPVxuICAgICAgbWF0Y2ggKGZpcnN0LCBzZWNvbmQpIHdpdGhcbiAgICAgIHwgKGBBc3NvYyBhLCBgQXNzb2MgYikgLT4gYEFzc29jIChhIEAgYilcbiAgICAgIHwgKF8sIF8pIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiRXhwZWN0ZWQgdHdvIG9iamVjdHNcIilcblxuICAgIGxldCByZWMgc29ydCBqc29uID1cbiAgICAgIG1hdGNoIGpzb24gd2l0aFxuICAgICAgfCBgQXNzb2MgbyAtPlxuICAgICAgICBsZXQgbyA9IExpc3QucmV2IChMaXN0LnJldl9tYXAgKGZ1biAoaywgdikgLT4gKGssIHNvcnQgdikpIG8pIGluXG4gICAgICAgIGBBc3NvYyAoKExpc3Quc3RhYmxlX3NvcnQgKGZ1biAoazEsIF8pIChrMiwgXykgLT4gU3RyaW5nLmNvbXBhcmUgazEgazIpKSBvKVxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgIGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIHNvcnQgbCkpXG4gICAgICB8IGVsIC0+ICBlbFxuICBlbmRcblxuICBtb2R1bGUgdHlwZSBJbnRlcm5hbF9iYXNpY19pbnRmID0gc2lnXG5cbiAgICB2YWwgdG9fbnVtYmVyIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgXSAtPiBmbG9hdFxuICAgIHZhbCB0b19udW1iZXJfb3B0aW9uIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgfCBgTnVsbCBdIC0+IGZsb2F0IG9wdGlvblxuICAgIHZhbCB0b19pbnQgOiBbPiBgSW50IG9mIGludCBdIC0+IGludFxuICAgIHZhbCB0b19pbnRfb3B0aW9uIDogWz4gYEludCBvZiBpbnQgfCBgTnVsbCBdIC0+IGludCBvcHRpb25cbiAgICB2YWwgZmlsdGVyX2ludCA6IFs+IGBJbnQgb2YgaW50IF0gbGlzdCAtPiBpbnQgbGlzdFxuICAgIHZhbCBmaWx0ZXJfbnVtYmVyIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgXSBsaXN0IC0+IGZsb2F0IGxpc3RcbiAgZW5kXG5cbiAgbW9kdWxlIEJhc2ljKE0gOiBTKSA6IEludGVybmFsX2Jhc2ljX2ludGYgPSBzdHJ1Y3RcblxuICAgIGxldCB0b19udW1iZXIgPSBmdW5jdGlvblxuICAgICAgfCBgSW50IGkgLT4gZmxvYXQgaVxuICAgICAgfCBgRmxvYXQgZiAtPiBmXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50IG9yIGBGbG9hdFwiIGpzb25cblxuICAgIGxldCB0b19udW1iZXJfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYEludCBpIC0+IFNvbWUgKGZsb2F0IGkpXG4gICAgICB8IGBGbG9hdCBmIC0+IFNvbWUgZlxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50LCBgRmxvYXQgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9faW50ID0gZnVuY3Rpb24gfCBgSW50IGkgLT4gaSB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50XCIganNvblxuXG4gICAgbGV0IHRvX2ludF9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgSW50IGkgLT4gU29tZSBpXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBJbnQgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgZmlsdGVyX2ludCBsID0gU2hhcmVkLmZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBJbnQgaSAtPiBTb21lIGkgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX251bWJlciBsID1cbiAgICAgIFNoYXJlZC5maWx0ZXJfbWFwIChcbiAgICAgICAgZnVuY3Rpb25cbiAgICAgICAgfCBgSW50IGkgLT4gU29tZSAoZmxvYXQgaSlcbiAgICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgICAgfCBfIC0+IE5vbmVcbiAgICAgICkgbFxuICBlbmRcblxuICBtb2R1bGUgdHlwZSBJbnRlcm5hbF9leHRlbmRlZF9pbnRmID0gc2lnXG4gICAgdmFsIHNvcnQgOiAoWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCB8IGBMaXN0IG9mICdhIGxpc3QgfFxuICAgICAgICAgICAgICAgICAgIGBUdXBsZSBvZiAnYSBsaXN0IHwgYFZhcmlhbnQgb2YgJ2IgKiAnYSBvcHRpb24gXSBhcyAnYSkgLT4gJ2FcbiAgZW5kXG5cbiAgbW9kdWxlIEV4dGVuZGVkKE0gOiBTKSA6IEludGVybmFsX2V4dGVuZGVkX2ludGYgPSBzdHJ1Y3RcblxuICAgIGxldCByZWMgc29ydCBqc29uID1cbiAgICAgIG1hdGNoIGpzb24gd2l0aFxuICAgICAgfCBgQXNzb2MgbyAtPlxuICAgICAgICBsZXQgbyA9IExpc3QucmV2IChMaXN0LnJldl9tYXAgKGZ1biAoaywgdikgLT4gKGssIHNvcnQgdikpIG8pIGluXG4gICAgICAgIGBBc3NvYyAoKExpc3Quc3RhYmxlX3NvcnQgKGZ1biAoazEsIF8pIChrMiwgXykgLT4gU3RyaW5nLmNvbXBhcmUgazEgazIpKSBvKVxuICAgICAgfCBgVHVwbGUgbFxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgIGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIHNvcnQgbCkpXG4gICAgICB8IGBWYXJpYW50IChrLCBTb21lIHYpIGFzIHYxIC0+XG4gICAgICAgIGxldCB2JyA9IHNvcnQgdiBpbiBpZiB2JyA9PSB2IHRoZW4gdjEgZWxzZSBgVmFyaWFudCAoaywgU29tZSB2JylcbiAgICAgIHwgZWwgLT4gIGVsXG4gIGVuZFxuXG5lbmRcblxubW9kdWxlIFN0cmljdCA9IHN0cnVjdFxuICBtb2R1bGUgTSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uU3RyaWN0Lmpzb25cbiAgICBsZXQgbnVsbCAoKSA9IGBOdWxsXG4gIGVuZFxuICBpbmNsdWRlIEludGVybmFsLlN0cmljdChNKVxuZW5kXG5cbm1vZHVsZSBCYXNpYyA9IHN0cnVjdFxuICBtb2R1bGUgTSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uQmFzaWMuanNvblxuICAgIGxldCBudWxsICgpID0gYE51bGxcbiAgZW5kXG4gIGluY2x1ZGUgSW50ZXJuYWwuU3RyaWN0KE0pXG4gIGluY2x1ZGUgSW50ZXJuYWwuQmFzaWMoTSlcbmVuZFxuXG5tb2R1bGUgRXh0ZW5kZWQgPSBzdHJ1Y3RcbiAgbW9kdWxlIE0gPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPSBKc29uLkV4dGVuZGVkLmpzb25cbiAgICBsZXQgbnVsbCAoKSA9IGBOdWxsXG4gIGVuZFxuICBpbmNsdWRlIEludGVybmFsLlN0cmljdChNKVxuICBpbmNsdWRlIEludGVybmFsLkJhc2ljKE0pXG4gIGluY2x1ZGUgSW50ZXJuYWwuRXh0ZW5kZWQoTSlcbmVuZFxuXG5tb2R1bGUgWW9qc29uX3NhZmUgPSBzdHJ1Y3RcbiAgbW9kdWxlIE0gPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPVxuICAgICAgW1xuICAgICAgfCBgTnVsbFxuICAgICAgfCBgQm9vbCBvZiBib29sXG4gICAgICB8IGBJbnQgb2YgaW50XG4gICAgICB8IGBJbnRsaXQgb2Ygc3RyaW5nXG4gICAgICB8IGBGbG9hdCBvZiBmbG9hdFxuICAgICAgfCBgU3RyaW5nIG9mIHN0cmluZ1xuICAgICAgfCBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICAgIHwgYExpc3Qgb2YganNvbiBsaXN0XG4gICAgICB8IGBUdXBsZSBvZiBqc29uIGxpc3RcbiAgICAgIHwgYFZhcmlhbnQgb2YgKHN0cmluZyAqIGpzb24gb3B0aW9uKVxuICAgICAgXVxuXG4gICAgbGV0IG51bGwgKCkgPSBgTnVsbFxuICBlbmRcbiAgaW5jbHVkZSBJbnRlcm5hbC5TdHJpY3QoTSlcbiAgaW5jbHVkZSBJbnRlcm5hbC5CYXNpYyhNKVxuICBpbmNsdWRlIEludGVybmFsLkV4dGVuZGVkKE0pXG5lbmRcbiIsImxldCB0b2tlbl90b19zdHJpbmcgKHRvazpUb2tlbnMudG9rZW4pID1cbiAgbWF0Y2ggdG9rIHdpdGhcbiAgfCBTVFJJTkcgcyAtPiBzXG4gIHwgT1MgLT4gXCJ7XCJcbiAgfCBPRSAtPiBcIn1cIlxuICB8IE5VTEwgLT4gXCJOdWxsXCJcbiAgfCBORUdJTkZJTklUWSAtPiBcIi1JbmZpbml0eVwiXG4gIHwgTkFOIC0+IFwiTkFOXCJcbiAgfCBMRVhfRVJST1IgZXJyIC0+IFwiaW5wdXQgZXJyb3IgJ1wiIF4gZXJyIF4gXCInXCJcbiAgfCBMQVJHRUlOVCBzIC0+IHNcbiAgfCBJTlQgaSAtPiBzdHJpbmdfb2ZfaW50IGlcbiAgfCBJTkZJTklUWSAtPiBcIkluZmluaXR5XCJcbiAgfCBGTE9BVCBmIC0+IHN0cmluZ19vZl9mbG9hdCBmXG4gIHwgRU9GIC0+IFwiZW5kLW9mLWZpbGVcIlxuICB8IENPTVBMSUFOQ0VfRVJST1IgZXJyIC0+IGVyclxuICB8IENPTU1BIC0+IFwiLFwiXG4gIHwgQ09MT04gLT4gXCI6XCJcbiAgfCBCT09MIGIgLT4gaWYgYiB0aGVuIFwidHJ1ZVwiIGVsc2UgXCJmYWxzZVwiXG4gIHwgQVMgLT4gXCJbXCJcbiAgfCBBRSAtPiBcIl1cIlxuICB8IFZTIC0+IFwiPFwiXG4gIHwgVkUgLT4gXCI+XCJcbiAgfCBUUyAtPiBcIihcIlxuICB8IFRFIC0+IFwiKVwiXG4iLCJtb2R1bGUgdHlwZSBSZWFkZXJfc3RyaW5nX2ZpbGUgPSBzaWdcbiAgdHlwZSBqc29uXG5cbiAgdmFsIGpzb25fb2Zfc3RyaW5nIDogc3RyaW5nIC0+IChqc29uLCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl9vZl9zdHJpbmdfZXhuIDogc3RyaW5nIC0+IGpzb25cbiAgdmFsIGpzb25fb2ZfZmlsZSA6IHN0cmluZyAtPiAoanNvbiwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfZmlsZV9leG4gOiBzdHJpbmcgLT4ganNvblxuICB2YWwganNvbl9vZl9jaGFubmVsIDogaW5fY2hhbm5lbCAtPiAoanNvbiwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfY2hhbm5lbF9leG4gOiBpbl9jaGFubmVsIC0+IGpzb25cbiAgdmFsIGpzb25fb2ZfZnVuY3Rpb24gOiAoYnl0ZXMgLT4gaW50IC0+IGludCkgLT4gKGpzb24sIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX29mX2Z1bmN0aW9uX2V4biA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiBqc29uXG4gIHZhbCBqc29uX29mX2xleGJ1ZiA6IExleGluZy5sZXhidWYgLT4gKGpzb24sIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX29mX2xleGJ1Zl9leG4gOiBMZXhpbmcubGV4YnVmIC0+IGpzb25cbiAgdmFsIG9mX3N0cmluZyA6IHN0cmluZyAtPiBqc29uXG4gIHZhbCBvZl9maWxlIDogc3RyaW5nIC0+IGpzb25cbiAgdmFsIG9mX2NoYW5uZWwgOiBpbl9jaGFubmVsIC0+IGpzb25cbiAgdmFsIG9mX2Z1bmN0aW9uIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IGpzb25cblxuICB2YWwganNvbl9vZl9zdHJpbmdfZXJyb3JfaW5mbyA6IHN0cmluZyAtPiAoanNvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfZmlsZV9lcnJvcl9pbmZvIDogc3RyaW5nIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gOiBpbl9jaGFubmVsIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9mdW5jdGlvbl9lcnJvcl9pbmZvIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9sZXhidWZfZXJyb3JfaW5mbyA6IExleGluZy5sZXhidWYgLT4gKGpzb24sIEVycm9yX2luZm8udCkgcmVzdWx0XG4gIHZhbCBqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvX2NvbXBhdCA6ID9zdHJlYW06Ym9vbCAtPiBMZXhpbmcubGV4YnVmIC0+IChqc29uIG9wdGlvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcblxuICB2YWwgc3RyZWFtX2Zyb21fc3RyaW5nIDogc3RyaW5nIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2NoYW5uZWwgOiA/ZmluOih1bml0IC0+IHVuaXQpIC0+IGluX2NoYW5uZWwgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fZmlsZSA6IHN0cmluZyAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9mdW5jdGlvbiA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9sZXhidWYgOiBMZXhpbmcubGV4YnVmIC0+IGpzb24gU3RyZWFtLnRcblxuICB2YWwgc3RyZWFtX2Zyb21fc3RyaW5nX2Vycm9yX2luZm8gOiBzdHJpbmcgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fY2hhbm5lbF9lcnJvcl9pbmZvIDogP2ZpbjoodW5pdCAtPiB1bml0KSAtPiBpbl9jaGFubmVsIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyA6IHN0cmluZyAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9mdW5jdGlvbl9lcnJvcl9pbmZvIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIDogTGV4aW5nLmxleGJ1ZiAtPiBqc29uIFN0cmVhbS50XG5lbmRcblxubW9kdWxlIE1ha2UgKExleHhlciA6IENvbXBsaWFudF9sZXh4ZXIuTGV4ICkgKFBhcnNlciA6IFBhcnNlci5QYXJzZXIpIDogUmVhZGVyX3N0cmluZ19maWxlXG4gIHdpdGggdHlwZSBqc29uID0gUGFyc2VyLkNvbXBsaWFuY2UuanNvblxuPSBzdHJ1Y3RcbiAgdHlwZSBqc29uID0gUGFyc2VyLkNvbXBsaWFuY2UuanNvblxuXG4gIGxldCByZWFkX2pzb24nIH5sZXhidWYgPVxuICAgIGxldCByZWFkZXIgKCkgPSBMZXh4ZXIucmVhZCBsZXhidWYgaW5cbiAgICBtYXRjaCBQYXJzZXIuZGVjb2RlIH5yZWFkZXIgd2l0aFxuICAgIHwgT2sgTm9uZSAtPiBFcnJvciBcImVtcHR5IGlucHV0XCJcbiAgICB8IE9rIChTb21lIHJlcykgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IEVPRiAtPiBPayByZXNcbiAgICAgIHwgZXhjZXB0aW9uIExleHhlcl91dGlscy5MZXhfZXJyb3IgZXJyIC0+IEVycm9yIGVyclxuICAgICAgfCB0b2sgLT4gRXJyb3IgKFwianVuayBhZnRlciBlbmQgb2YgSlNPTiB2YWx1ZTogXCIgXiAoVG9rZW5fdXRpbHMudG9rZW5fdG9fc3RyaW5nIHRvaykpXG4gICAgICBlbmRcbiAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuXG4gIGxldCByZWFkX2pzb24gfmxleGJ1ZiA9XG4gICAgbWF0Y2ggcmVhZF9qc29uJyB+bGV4YnVmIHdpdGhcbiAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPlxuICAgICAgbGV0IGVycl9pbmZvID0gRXJyb3JfaW5mby5jcmVhdGVfZnJvbV9sZXhidWYgbGV4YnVmIHMgaW5cbiAgICAgIEVycm9yIChFcnJvcl9pbmZvLnRvX3N0cmluZyBlcnJfaW5mbylcblxuICBsZXQganNvbl9vZl9zdHJpbmcgcyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX3N0cmluZyBzIGluXG4gICAgcmVhZF9qc29uIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9zdHJpbmdfZXhuIHMgPVxuICAgIG1hdGNoIGpzb25fb2Zfc3RyaW5nIHMgd2l0aFxuICAgIHwgT2sgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPiByYWlzZSAoRmFpbHVyZSBzKVxuXG4gIGxldCBvZl9zdHJpbmcgcyA9IGpzb25fb2Zfc3RyaW5nX2V4biBzXG5cbiAgbGV0IGpzb25fb2ZfZmlsZSBmaWxlbmFtZSA9XG4gICAgdHJ5IGJlZ2luXG4gICAgICBsZXQgaW5jID0gb3Blbl9pbiBmaWxlbmFtZSBpblxuICAgICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2NoYW5uZWwgaW5jIGluXG4gICAgICBsZXQgcmVzID0gcmVhZF9qc29uIH5sZXhidWYgaW5cbiAgICAgICAgY2xvc2VfaW4gaW5jO1xuICAgICAgICByZXNcbiAgICBlbmRcbiAgICB3aXRoIFN5c19lcnJvciBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fb2ZfZmlsZV9leG4gZmlsZW5hbWUgPVxuICAgIG1hdGNoIGpzb25fb2ZfZmlsZSBmaWxlbmFtZSB3aXRoXG4gICAgfCBPayByZXMgLT4gcmVzXG4gICAgfCBFcnJvciBzIC0+IHJhaXNlIChGYWlsdXJlIHMpXG5cbiAgbGV0IGpzb25fb2ZfY2hhbm5lbCBpbmMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGluYyBpblxuICAgIHJlYWRfanNvbiB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfY2hhbm5lbF9leG4gaW5jID1cbiAgICBtYXRjaCBqc29uX29mX2NoYW5uZWwgaW5jIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQganNvbl9vZl9mdW5jdGlvbiBmID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fZnVuY3Rpb24gZiBpblxuICAgIHJlYWRfanNvbiB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfbGV4YnVmIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9sZXhidWZfZXhuIGxleGJ1ZiA9XG4gICAgbWF0Y2gganNvbl9vZl9sZXhidWYgbGV4YnVmIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQganNvbl9vZl9mdW5jdGlvbl9leG4gZiA9XG4gICAgbWF0Y2gganNvbl9vZl9mdW5jdGlvbiBmIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQgb2ZfZmlsZSA9IGpzb25fb2ZfZmlsZV9leG5cbiAgbGV0IG9mX2NoYW5uZWwgPSBqc29uX29mX2NoYW5uZWxfZXhuXG4gIGxldCBvZl9mdW5jdGlvbiA9IGpzb25fb2ZfZnVuY3Rpb25fZXhuXG5cbiAgKCogRXJyb3JfaW5mby50IHJldHVybmluZyBmdW5jdGlvbnMgKilcblxuICBsZXQgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZiA9XG4gICAgbWF0Y2ggcmVhZF9qc29uJyB+bGV4YnVmIHdpdGhcbiAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgZXJyIC0+XG4gICAgICBsZXQgZXJyX2luZm8gPSBFcnJvcl9pbmZvLmNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgZXJyIGluXG4gICAgICBFcnJvciBlcnJfaW5mb1xuXG4gIGxldCBqc29uX29mX3N0cmluZ19lcnJvcl9pbmZvIHMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9zdHJpbmcgcyBpblxuICAgIHJlYWRfanNvbl9lcnJvcl9pbmZvIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gaW5jID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpbmMgaW5cbiAgICByZWFkX2pzb25fZXJyb3JfaW5mbyB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfZmlsZV9lcnJvcl9pbmZvIGZpbGVuYW1lID1cbiAgICB0cnkgYmVnaW5cbiAgICAgIGxldCBpbmMgPSBvcGVuX2luIGZpbGVuYW1lIGluXG4gICAgICBsZXQgcmVzID0ganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gaW5jIGluXG4gICAgICAgIGNsb3NlX2luIGluYztcbiAgICAgICAgcmVzXG4gICAgZW5kXG4gICAgd2l0aCBTeXNfZXJyb3IgZXJyIC0+IEVycm9yIHsgRXJyb3JfaW5mby5saW5lID0gMDsgc3RhcnRfY2hhciA9IDA7IGVuZF9jaGFyID0gMDsgbXNnID0gZXJyIH1cblxuICBsZXQganNvbl9vZl9mdW5jdGlvbl9lcnJvcl9pbmZvIGYgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9mdW5jdGlvbiBmIGluXG4gICAgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZlxuXG4gIGxldCBqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZlxuXG4gICgqIEludGVybmFsIGNvbXBhdGliaWxpdHkgZnVuY3Rpb24gc3VwcG9ydGluZyB0aGUgc3RyZWFtIGZsYWcgKilcblxuICBsZXQganNvbl9vZl9sZXhidWZfZXJyb3JfaW5mb19jb21wYXQgPyhzdHJlYW0gPSBmYWxzZSkgbGV4YnVmID1cbiAgICBsZXQgcmVhZGVyICgpID0gTGV4eGVyLnJlYWQgbGV4YnVmIGluXG4gICAgbGV0IHJlcyA9IG1hdGNoIFBhcnNlci5kZWNvZGUgfnJlYWRlciB3aXRoXG4gICAgfCBPayBOb25lIC0+IGlmIHN0cmVhbSB0aGVuIE9rIE5vbmUgZWxzZSBFcnJvciBcImVtcHR5IGlucHV0XCJcbiAgICB8IE9rIChTb21lIHJlcykgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHN0cmVhbSB3aXRoXG4gICAgICB8IHRydWUgLT4gT2sgKFNvbWUgcmVzKVxuICAgICAgfCBmYWxzZSAtPiBiZWdpblxuICAgICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgICB8IEVPRiAtPiBPayAoU29tZSByZXMpXG4gICAgICAgIHwgZXhjZXB0aW9uIExleHhlcl91dGlscy5MZXhfZXJyb3IgZXJyIC0+IEVycm9yIGVyclxuICAgICAgICB8IHRvayAtPiBFcnJvciAoXCJqdW5rIGFmdGVyIGVuZCBvZiBKU09OIHZhbHVlOiBcIiBeIChUb2tlbl91dGlscy50b2tlbl90b19zdHJpbmcgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICBlbmRcbiAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuICAgIGluXG4gICAgbWF0Y2ggcmVzIHdpdGhcbiAgICB8IE9rIHJlcyAtPiBPayByZXNcbiAgICB8IEVycm9yIHMgLT5cbiAgICAgIGxldCBlcnJfaW5mbyA9IEVycm9yX2luZm8uY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBzIGluXG4gICAgICBFcnJvciBlcnJfaW5mb1xuXG5cbiAgKCogU3RyZWFtLnQgcmV0dXJuaW5nIGZ1bmN0aW9ucyAqKVxuXG4gIGxldCByZWFkX2pzb25fc3RyZWFtIH5maW4gfmxleGJ1ZiA9XG4gICAgbGV0IHJlYWRlciAoKSA9IExleHhlci5yZWFkIGxleGJ1ZiBpblxuICAgIGxldCBmIF9pID1cbiAgICAgIG1hdGNoIFBhcnNlci5kZWNvZGUgfnJlYWRlciB3aXRoXG4gICAgICB8IE9rIE5vbmUgLT4gZmluICgpOyBOb25lXG4gICAgICB8IE9rIChTb21lIHJlcykgLT4gU29tZSByZXNcbiAgICAgIHwgRXJyb3IgZXJyIC0+XG4gICAgICAgIGxldCAoKSA9IGZpbiAoKSBpblxuICAgICAgICBsZXQgZXJyX2luZm8gPSBFcnJvcl9pbmZvLmNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgZXJyIGluXG4gICAgICAgIGxldCBtc2cgPSBFcnJvcl9pbmZvLnRvX3N0cmluZyBlcnJfaW5mbyBpblxuICAgICAgICByYWlzZSAoRmFpbHVyZSBtc2cpXG4gICAgaW5cbiAgICBTdHJlYW0uZnJvbSBmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX3N0cmluZyBzID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fc3RyaW5nIHMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9jaGFubmVsID8oZmluID0gZnVuICgpIC0+ICgpKSBpbmMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGluYyBpblxuICAgIHJlYWRfanNvbl9zdHJlYW0gfmZpbiB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2Z1bmN0aW9uIGYgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9mdW5jdGlvbiBmIGluXG4gICAgcmVhZF9qc29uX3N0cmVhbSB+ZmluOihmdW4gKCkgLT4gKCkpIH5sZXhidWZcblxuICBsZXQgc3RyZWFtX2Zyb21fZmlsZSBmaWxlbmFtZSA9XG4gICAgbGV0IGluYyA9IG9wZW5faW4gZmlsZW5hbWUgaW5cbiAgICBzdHJlYW1fZnJvbV9jaGFubmVsIH5maW46KGZ1biAoKSAtPiBjbG9zZV9pbiBpbmMpIGluY1xuXG4gIGxldCBzdHJlYW1fZnJvbV9sZXhidWYgbGV4YnVmID1cbiAgICByZWFkX2pzb25fc3RyZWFtIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG4gICgqIFN0cmVhbS50IEpzb25fZXJyb3JfaW5mbyByYWlzaW5nIGZ1bmN0aW9ucyAqKVxuXG4gIGxldCByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbiB+bGV4YnVmID1cbiAgICBsZXQgcmVhZGVyICgpID0gTGV4eGVyLnJlYWQgbGV4YnVmIGluXG4gICAgbGV0IGYgX2kgPVxuICAgICAgbWF0Y2ggUGFyc2VyLmRlY29kZSB+cmVhZGVyIHdpdGhcbiAgICAgIHwgT2sgTm9uZSAtPiBmaW4gKCk7IE5vbmVcbiAgICAgIHwgT2sgKFNvbWUgcmVzKSAtPiBTb21lIHJlc1xuICAgICAgfCBFcnJvciBlcnIgLT5cbiAgICAgICAgbGV0ICgpID0gZmluICgpIGluXG4gICAgICAgIGxldCBlcnJfaW5mbyA9IEVycm9yX2luZm8uY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBlcnIgaW5cbiAgICAgICAgcmFpc2UgKEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9zdHJpbmdfZXJyb3JfaW5mbyBzID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fc3RyaW5nIHMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgaW5jID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpbmMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbiB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2Z1bmN0aW9uX2Vycm9yX2luZm8gZiA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2Z1bmN0aW9uIGYgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSA9XG4gICAgbGV0IGluYyA9IG9wZW5faW4gZmlsZW5hbWUgaW5cbiAgICBzdHJlYW1fZnJvbV9jaGFubmVsX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+IGNsb3NlX2luIGluYykgaW5jXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG5lbmRcbiIsIm1vZHVsZSB0eXBlIEludGYgPSBzaWdcbiAgdmFsIGpzb25fdG9fZmlsZSA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19maWxlX2V4biA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fY2hhbm5lbCA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19jaGFubmVsX2V4biA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fZmlsZV9odW0gOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAodW5pdCwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fZmlsZV9odW1fZXhuIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwganNvbl90b19jaGFubmVsX2h1bSA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19jaGFubmVsX2h1bV9leG4gOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19maWxlIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fZmlsZV9odW0gOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19jaGFubmVsIDogIG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fY2hhbm5lbF9odW0gOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBzdHJlYW1fdG9fY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgU3RyZWFtLnQgLT4gdW5pdFxuICB2YWwgc3RyZWFtX3RvX2ZpbGUgOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCBTdHJlYW0udCAtPiB1bml0XG5lbmRcblxubW9kdWxlIE1ha2UgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpIDogSW50ZiA9IHN0cnVjdFxuXG4gIGxldCBuaWJibGVfdG9faGV4IGkgPSBjaGFyX29mX2ludCAoaWYgaSA+IDkgdGhlbiA2NSArIGkgLSAxMCBlbHNlIDQ4ICsgaSlcblxuICBsZXQgYWRkX2hleF9ieXRlIG9jIGkgPVxuICAgIG91dHB1dF9jaGFyIG9jIChuaWJibGVfdG9faGV4ICgoaSBsc3IgNCkgbGFuZCAweDBmKSk7XG4gICAgb3V0cHV0X2NoYXIgb2MgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxuICBsZXQgZXNjYXBlIG9jIHMgPVxuICAgIGxldCBhZGRfY2hhciA9IG91dHB1dF9jaGFyIG9jIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBvdXRwdXRfc3RyaW5nIG9jIGluXG4gICAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJ1wiJyAgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXCJcIlxuICAgICAgfCAnXFxcXCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXFxcIlxuICAgICAgfCAnXFxiJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcYlwiXG4gICAgICB8ICdcXDAxMicgLT4gYWRkX3N0cmluZyBcIlxcXFxmXCJcbiAgICAgIHwgJ1xcbicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXG5cIlxuICAgICAgfCAnXFxyJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcclwiXG4gICAgICB8ICdcXHQnICAgLT4gYWRkX3N0cmluZyBcIlxcXFx0XCJcbiAgICAgIHwgJ1xceDAwJy4uJ1xceDFGJ1xuICAgICAgfCAnXFx4N0YnIGFzIGMgLT5cbiAgICAgICAgYWRkX3N0cmluZyBcIlxcXFx1MDBcIjsgIGFkZF9oZXhfYnl0ZSBvYyAoaW50X29mX2NoYXIgYylcbiAgICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gICAgZG9uZVxuICAgXG4gIGxldCBqc29uX3RvX2NoYW5uZWxfZm10IG9jIGpzb24gfmVvbCB+aW5jciB+cHNlcCA9IFxuICAgIGxldCBhZGRfY2hhciA9IG91dHB1dF9jaGFyIG9jIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBvdXRwdXRfc3RyaW5nIG9jIGluXG4gICAgbGV0IGFkZF9xdW90ZV9zdHJpbmcgcyA9IGFkZF9jaGFyICdcIic7IGVzY2FwZSBvYyBzOyBhZGRfY2hhciAnXCInIGluXG4gICAgbGV0IGFkZF9pbnQgaSA9IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9pbnQgaSkgaW5cbiAgICBsZXQgYWRkX2Zsb2F0IGYgPSBhZGRfc3RyaW5nIChDb21wbGlhbmNlLm51bWJlcl90b19zdHJpbmcgZikgaW5cbiAgICBsZXQgcHNlcCA9IFwiOlwiIF4gcHNlcCBpblxuICAgIGxldCByZWMgZm10IG9mZiB2YWx1ZSA9XG4gICAgICBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICB8IGBBc3NvYyBvIC0+XG4gICAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICAgIGFkZF9jaGFyICd7JzsgYWRkX3N0cmluZyBlb2w7IGpzb25fYXNzb2MgKG9mZiArIGluY3IpIG87XG4gICAgICAgIGFkZF9zdHJpbmcgZW9sOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJ30nXG4gICAgICB8IGBMaXN0IGwgLT5cbiAgICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgICAgYWRkX2NoYXIgJ1snOyBhZGRfc3RyaW5nIGVvbDsganNvbl9saXN0IChvZmYgKyBpbmNyKSBsO1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICddJ1xuICAgICAgfCBgTnVsbCAtPiBhZGRfc3RyaW5nIFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gYWRkX3N0cmluZyAoc3RyaW5nX29mX2Jvb2wgYilcbiAgICAgIHwgYEludCBpIC0+IGFkZF9pbnQgaVxuICAgICAgfCBgSW50bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBGbG9hdCBmIC0+IGFkZF9mbG9hdCBmXG4gICAgICB8IGBGbG9hdGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gYWRkX3F1b3RlX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmdsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFR1cGxlIHQgLT5cbiAgICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgICAgYWRkX2NoYXIgJygnOyBhZGRfc3RyaW5nIGVvbDsganNvbl9saXN0IChvZmYgKyBpbmNyKSB0O1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICcpJ1xuICAgICAgfCBgVmFyaWFudCB2IC0+XG4gICAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICAgIGFkZF9jaGFyICc8JzsgYWRkX3N0cmluZyBlb2w7ICB2YXJpYW50IChvZmYgKyBpbmNyKSB2O1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICc+J1xuICAgIGFuZCBqc29uX2Fzc29jIG9mZiBvID1cbiAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICBsZXQgc2VwID0gcmVmIGxkciBpblxuICAgICAgbGV0IG5ld3NlcCA9IFwiLFwiIF4gZW9sIF4gbGRyIGluXG4gICAgICBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IG5ld3NlcDsgcGFpciBvZmYgdiApIG9cbiAgICBhbmQgcGFpciBvZmYgKGssIHYpID0gYWRkX3F1b3RlX3N0cmluZyBrOyBhZGRfc3RyaW5nIHBzZXA7IGZtdCBvZmYgdlxuICAgIGFuZCBqc29uX2xpc3Qgb2ZmIGwgPVxuICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgIGxldCBzZXAgPSByZWYgbGRyIGluXG4gICAgICBsZXQgbmV3c2VwID0gXCIsXCIgXiBlb2wgXiBsZHIgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuIHYgLT4gYWRkX3N0cmluZyAhc2VwOyBzZXAgOj0gbmV3c2VwOyBmbXQgb2ZmIHYgKSBsXG4gICAgYW5kIHZhcmlhbnQgb2ZmIChrLCBqKSA9XG4gICAgICBhZGRfcXVvdGVfc3RyaW5nIGs7XG4gICAgICBtYXRjaCBqIHdpdGhcbiAgICAgIHwgU29tZSBqIC0+IGFkZF9zdHJpbmcgcHNlcDsgZm10IChvZmYgKyBpbmNyKSBqXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICBpblxuICAgIGZtdCAwIGpzb247XG4gICAgYWRkX3N0cmluZyBlb2xcblxuICBsZXQganNvbl90b19jaGFubmVsJyA9IGpzb25fdG9fY2hhbm5lbF9mbXQgfmVvbDpcIlwiIH5pbmNyOjAgfnBzZXA6XCJcIlxuICBsZXQganNvbl90b19jaGFubmVsX2h1bScgPSBqc29uX3RvX2NoYW5uZWxfZm10IH5lb2w6XCJcXG5cIiB+aW5jcjoyIH5wc2VwOlwiIFwiXG5cbiAgbGV0IGpzb25fdG9fY2hhbm5lbCBvYyBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fY2hhbm5lbCcgb2MganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fY2hhbm5lbF9odW0gb2MganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX2NoYW5uZWxfaHVtJyBvYyBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19jaGFubmVsX2V4biA9IGpzb25fdG9fY2hhbm5lbCdcbiAgbGV0IGpzb25fdG9fY2hhbm5lbF9odW1fZXhuID0ganNvbl90b19jaGFubmVsX2h1bSdcblxuICBsZXQganNvbl90b19maWxlIGZpbGUganNvbiA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZSBpblxuICAgIGxldCByZXMgPSBqc29uX3RvX2NoYW5uZWwgb2MganNvbiBpblxuICAgIGNsb3NlX291dCBvYztcbiAgICByZXNcblxuICBsZXQganNvbl90b19maWxlX2h1bSBmaWxlIGpzb24gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICBsZXQgcmVzID0ganNvbl90b19jaGFubmVsX2h1bSBvYyBqc29uIGluXG4gICAgY2xvc2Vfb3V0IG9jO1xuICAgIHJlc1xuXG4gIGxldCBqc29uX3RvX2ZpbGVfZXhuIGZpbGUganNvbiA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZSBpblxuICAgIHRyeSAoanNvbl90b19jaGFubmVsJyBvYyBqc29uOyBjbG9zZV9vdXQgb2MpIHdpdGhcbiAgICB8IGV4biAtPiBjbG9zZV9vdXQgb2M7IHJhaXNlIGV4blxuXG4gIGxldCBqc29uX3RvX2ZpbGVfaHVtX2V4biBmaWxlIGpzb24gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICB0cnkgKGpzb25fdG9fY2hhbm5lbF9odW0nIG9jIGpzb247IGNsb3NlX291dCBvYykgd2l0aFxuICAgIHwgZXhuIC0+IGNsb3NlX291dCBvYzsgcmFpc2UgZXhuXG5cbiAgbGV0IHRvX2ZpbGUgPSBqc29uX3RvX2ZpbGVfZXhuXG4gIGxldCB0b19maWxlX2h1bSA9IGpzb25fdG9fZmlsZV9odW1fZXhuXG4gIGxldCB0b19jaGFubmVsID0ganNvbl90b19jaGFubmVsX2V4blxuICBsZXQgdG9fY2hhbm5lbF9odW0gPSBqc29uX3RvX2NoYW5uZWxfaHVtX2V4blxuXG4gIGxldCBzdHJlYW1fdG9fY2hhbm5lbCBvYyBzdHJlYW0gPVxuICAgIFN0cmVhbS5pdGVyIChmdW4ganNvbiAtPiBqc29uX3RvX2NoYW5uZWxfZXhuIG9jIGpzb247IG91dHB1dF9jaGFyIG9jICdcXG4nKSBzdHJlYW1cblxuICBsZXQgc3RyZWFtX3RvX2ZpbGUgZmlsZSBzdHJlYW0gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICB0cnkgKHN0cmVhbV90b19jaGFubmVsIG9jIHN0cmVhbTsgY2xvc2Vfb3V0IG9jKSB3aXRoXG4gICAgfCBleG4gLT4gY2xvc2Vfb3V0IG9jOyByYWlzZSBleG5cbmVuZFxuIiwibW9kdWxlIHR5cGUgSW50ZiA9IHNpZ1xuICB2YWwganNvbl90b19zdHJpbmcgOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IChzdHJpbmcsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX3N0cmluZ19leG4gOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHN0cmluZ1xuICB2YWwgdG9fc3RyaW5nIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiBzdHJpbmdcbiAgdmFsIGpzb25fdG9fc3RyaW5nX2h1bSA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHN0cmluZywgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fc3RyaW5nX2h1bV9leG4gOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHN0cmluZ1xuICB2YWwgdG9fc3RyaW5nX2h1bSA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gc3RyaW5nXG4gIHZhbCBqc29uX3RvX2J1ZmZlciA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2J1ZmZlcl9leG4gOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fYnVmZmVyX2h1bSA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2J1ZmZlcl9odW1fZXhuIDogQnVmZmVyLnQgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19idWZmZXIgOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHRvX2J1ZmZlcl9odW0gOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHN0cmVhbV90b19zdHJpbmcgOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIFN0cmVhbS50IC0+IHN0cmluZ1xuICB2YWwgc3RyZWFtX3RvX2J1ZmZlciA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgU3RyZWFtLnQgLT4gdW5pdFxuZW5kXG5cbm1vZHVsZSBNYWtlIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA6IEludGYgPSBzdHJ1Y3RcblxuICBsZXQgbmliYmxlX3RvX2hleCBpID0gY2hhcl9vZl9pbnQgKGlmIGkgPiA5IHRoZW4gNjUgKyBpIC0gMTAgZWxzZSA0OCArIGkpXG5cbiAgbGV0IGFkZF9oZXhfYnl0ZSBidWYgaSA9XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAobmliYmxlX3RvX2hleCAoKGkgbHNyIDQpIGxhbmQgMHgwZikpO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxuICBsZXQgZXNjYXBlIGJ1ZiBzID1cbiAgICBsZXQgYWRkX2NoYXIgPSBCdWZmZXIuYWRkX2NoYXIgYnVmIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBCdWZmZXIuYWRkX3N0cmluZyBidWYgaW5cbiAgICBsZXQgbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgfCAnXCInICAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcIlwiXG4gICAgICB8ICdcXFxcJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcXFwiXG4gICAgICB8ICdcXGInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxiXCJcbiAgICAgIHwgJ1xcMDEyJyAtPiBhZGRfc3RyaW5nIFwiXFxcXGZcIlxuICAgICAgfCAnXFxuJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcblwiXG4gICAgICB8ICdcXHInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxyXCJcbiAgICAgIHwgJ1xcdCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXHRcIlxuICAgICAgfCAnXFx4MDAnLi4nXFx4MUYnXG4gICAgICB8ICdcXHg3RicgYXMgYyAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwiXFxcXHUwMFwiOyAgYWRkX2hleF9ieXRlIGJ1ZiAoaW50X29mX2NoYXIgYylcbiAgICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gICAgZG9uZVxuICAgXG4gIGxldCBqc29uX3RvX2J1ZmZlcicgYnVmIGpzb24gPVxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBlc2NhcGUgYnVmIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBsZXQgYWRkX2ludCBpID0gYWRkX3N0cmluZyAoc3RyaW5nX29mX2ludCBpKSBpblxuICAgIGxldCBhZGRfZmxvYXQgZiA9IGFkZF9zdHJpbmcgKENvbXBsaWFuY2UubnVtYmVyX3RvX3N0cmluZyBmKSBpblxuICAgIGxldCByZWMgZm10IHZhbHVlID1cbiAgICAgIG1hdGNoIHZhbHVlIHdpdGhcbiAgICAgIHwgYEFzc29jIG8gLT4gYWRkX2NoYXIgJ3snOyBqc29uX2Fzc29jIG87IGFkZF9jaGFyICd9J1xuICAgICAgfCBgTGlzdCBsIC0+IGFkZF9jaGFyICdbJzsganNvbl9saXN0IGw7IGFkZF9jaGFyICddJ1xuICAgICAgfCBgTnVsbCAtPiBhZGRfc3RyaW5nIFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gYWRkX3N0cmluZyAoc3RyaW5nX29mX2Jvb2wgYilcbiAgICAgIHwgYEludCBpIC0+IGFkZF9pbnQgaVxuICAgICAgfCBgSW50bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBGbG9hdCBmIC0+IGFkZF9mbG9hdCBmXG4gICAgICB8IGBGbG9hdGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gYWRkX3F1b3RlX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmdsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFR1cGxlIHQgLT4gYWRkX2NoYXIgJygnOyBqc29uX2xpc3QgdDsgYWRkX2NoYXIgJyknXG4gICAgICB8IGBWYXJpYW50IHYgLT4gYWRkX2NoYXIgJzwnOyAgdmFyaWFudCB2OyBhZGRfY2hhciAnPidcbiAgICBhbmQganNvbl9hc3NvYyBvID1cbiAgICAgIGxldCBzZXAgPSByZWYgXCJcIiBpbiBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IFwiLFwiOyBwYWlyIHYgKSBvXG4gICAgYW5kIHBhaXIgKGssIHYpID0gYWRkX3F1b3RlX3N0cmluZyBrOyBhZGRfY2hhciAnOic7IGZtdCB2XG4gICAgYW5kIGpzb25fbGlzdCBsID1cbiAgICAgIGxldCBzZXAgPSByZWYgXCJcIiBpbiBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IFwiLFwiOyBmbXQgdiApIGxcbiAgICBhbmQgdmFyaWFudCAoaywgaikgPVxuICAgICAgYWRkX3F1b3RlX3N0cmluZyBrO1xuICAgICAgbWF0Y2ggaiB3aXRoXG4gICAgICB8IFNvbWUgaiAtPiBhZGRfY2hhciAnOic7IGZtdCBqXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICBpblxuICAgIGZtdCBqc29uXG5cbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bScgYnVmIGpzb24gPVxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBlc2NhcGUgYnVmIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBsZXQgYWRkX2ludCBpID0gYWRkX3N0cmluZyAoc3RyaW5nX29mX2ludCBpKSBpblxuICAgIGxldCBhZGRfZmxvYXQgZiA9IGFkZF9zdHJpbmcgKENvbXBsaWFuY2UubnVtYmVyX3RvX3N0cmluZyBmKSBpblxuICAgIGxldCByZWMgZm10IGxkciB2YWx1ZSA9XG4gICAgICBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICB8IGBBc3NvYyBvIC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCJ7XFxuXCI7IGpzb25fYXNzb2MgKGxkciBeIFwiICBcIikgbztcbiAgICAgICAgYWRkX2NoYXIgJ1xcbic7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnfSdcbiAgICAgIHwgYExpc3QgbCAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwiW1xcblwiOyBqc29uX2xpc3QgKGxkciBeIFwiICBcIikgbDtcbiAgICAgICAgYWRkX2NoYXIgJ1xcbic7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnXSdcbiAgICAgIHwgYE51bGwgLT4gYWRkX3N0cmluZyBcIm51bGxcIlxuICAgICAgfCBgQm9vbCBiIC0+IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9ib29sIGIpXG4gICAgICB8IGBJbnQgaSAtPiBhZGRfaW50IGlcbiAgICAgIHwgYEludGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgRmxvYXQgZiAtPiBhZGRfZmxvYXQgZlxuICAgICAgfCBgRmxvYXRsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFN0cmluZyBzIC0+IGFkZF9xdW90ZV9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nbGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBUdXBsZSB0IC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCIoXFxuXCI7IGpzb25fbGlzdCAobGRyIF4gXCIgIFwiKSB0O1xuICAgICAgICBhZGRfY2hhciAnXFxuJzsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICcpJ1xuICAgICAgfCBgVmFyaWFudCB2IC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCI8XCI7ICB2YXJpYW50IChsZHIgXiBcIiAgXCIpIHY7XG4gICAgICAgIGFkZF9jaGFyICdcXG4nOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJz4nXG4gICAgYW5kIGpzb25fYXNzb2MgbGRyIG8gPVxuICAgICAgbGV0IHNlcCA9IHJlZiBsZHIgaW5cbiAgICAgIGxldCBuZXdzZXAgPSBcIixcXG5cIiBeIGxkciBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBuZXdzZXA7IHBhaXIgbGRyIHYgKSBvXG4gICAgYW5kIHBhaXIgbGRyIChrLCB2KSA9IGFkZF9xdW90ZV9zdHJpbmcgazsgYWRkX3N0cmluZyBcIjogXCI7IGZtdCBsZHIgdlxuICAgIGFuZCBqc29uX2xpc3QgbGRyIGwgPVxuICAgICAgbGV0IHNlcCA9IHJlZiBsZHIgaW5cbiAgICAgIGxldCBuZXdzZXAgPSBcIixcXG5cIiBeIGxkciBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBuZXdzZXA7IGZtdCBsZHIgIHYgKSBsXG4gICAgYW5kIHZhcmlhbnQgbGRyIChrLCBqKSA9XG4gICAgICBhZGRfcXVvdGVfc3RyaW5nIGs7XG4gICAgICBtYXRjaCBqIHdpdGhcbiAgICAgIHwgU29tZSBqIC0+IGFkZF9zdHJpbmcgXCI6IFwiOyBmbXQgKGxkciBeIFwiICBcIikgalxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgaW5cbiAgICBmbXQgXCJcIiBqc29uO1xuICAgIGFkZF9jaGFyICdcXG4nXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nJyBqc29uID1cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxMDAgaW5cbiAgICBqc29uX3RvX2J1ZmZlcicgYnVmIGpzb247XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBqc29uX3RvX3N0cmluZyBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fc3RyaW5nJyBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19idWZmZXIgYnVmIGpzb24gPVxuICAgIHRyeSBPayAoanNvbl90b19idWZmZXInIGJ1ZiBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19zdHJpbmdfZXhuID0ganNvbl90b19zdHJpbmcnXG4gIGxldCB0b19zdHJpbmcgPSBqc29uX3RvX3N0cmluZydcbiAgbGV0IGpzb25fdG9fYnVmZmVyX2V4biA9IGpzb25fdG9fYnVmZmVyJ1xuICBsZXQgdG9fYnVmZmVyID0ganNvbl90b19idWZmZXInXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nX2h1bScganNvbiA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAganNvbl90b19idWZmZXJfaHVtJyBidWYganNvbjtcbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nX2h1bSBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fc3RyaW5nX2h1bScganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bSBidWYganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX2J1ZmZlcicgYnVmIGpzb24pIHdpdGhcbiAgICB8IEZhaWx1cmUgZXJyIC0+IEVycm9yIGVyclxuXG4gIGxldCBqc29uX3RvX3N0cmluZ19odW1fZXhuID0ganNvbl90b19zdHJpbmdfaHVtJ1xuICBsZXQgdG9fc3RyaW5nX2h1bSA9IGpzb25fdG9fc3RyaW5nX2h1bSdcbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bV9leG4gPSBqc29uX3RvX2J1ZmZlcl9odW0nXG4gIGxldCB0b19idWZmZXJfaHVtID0ganNvbl90b19idWZmZXJfaHVtJ1xuXG4gIGxldCBzdHJlYW1fdG9fc3RyaW5nIHN0cmVhbSA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAgbGV0ICgpID0gU3RyZWFtLml0ZXIgKGZ1biBqc29uIC0+IHRvX2J1ZmZlciBidWYganNvbjsgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJykgc3RyZWFtIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBzdHJlYW1fdG9fYnVmZmVyIGJ1ZiBzdHJlYW0gPVxuICAgIFN0cmVhbS5pdGVyIChmdW4ganNvbiAtPiB0b19idWZmZXIgYnVmIGpzb247IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuXG5lbmRcbiIsImV4Y2VwdGlvbiBKc29uX2Vycm9yIG9mIHN0cmluZ1xuXG5sZXQganNvbl9lcnJvciBtc2cgPSByYWlzZSAoSnNvbl9lcnJvciBtc2cpXG5cbnR5cGUgbGV4ZXJfc3RhdGUgPSB7XG4gIGJ1ZiA6IEJ1ZmZlci50O1xuICBtdXRhYmxlIGxudW0gOiBpbnQ7XG4gIG11dGFibGUgYm9sIDogaW50O1xuICBtdXRhYmxlIGZuYW1lIDogc3RyaW5nIG9wdGlvbjtcbn1cblxubGV0IGluaXRfbGV4ZXIgP2J1ZjpfID9mbmFtZSA/KGxudW0gPSAxKSAoKSA9XG4gIHtcbiAgICBidWYgPSBCdWZmZXIuY3JlYXRlIDE2ICAoKiB1bnVzZWQgKilcbiAgOyBsbnVtID0gbG51bVxuICA7IGJvbCA9IDBcbiAgOyBmbmFtZSA9IGZuYW1lXG4gIH1cblxubW9kdWxlIENvbW1vbl9yZWFkZXIgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpID0gc3RydWN0XG4gIG1vZHVsZSBJbnRlcm5hbF9yZWFkZXIgPSBzdHJ1Y3RcbiAgICBtb2R1bGUgTGV4eGVyID0gQ29tcGxpYW50X2xleHhlci5NYWtlKENvbXBsaWFuY2UpXG4gICAgbW9kdWxlIFBhcnNlciA9IFBhcnNlci5NYWtlKENvbXBsaWFuY2UpXG4gICAgaW5jbHVkZSBSZWFkZXJfc3RyaW5nX2ZpbGUuTWFrZSAoTGV4eGVyKSAoUGFyc2VyKVxuICBlbmRcblxuICB0eXBlIGpzb24gPSBJbnRlcm5hbF9yZWFkZXIuanNvblxuICB0eXBlIHQgPSBqc29uXG4gIHR5cGUganNvbl9saW5lID0gWyBgSnNvbiBvZiB0IHwgYEV4biBvZiBleG4gXVxuXG4gICgqIEhlbHBlciBmdW5jdGlvbnMgKilcbiAgbGV0IGVycm9yX3RvX3N0cmluZyAoZXJyb3JfaW5mbzpFcnJvcl9pbmZvLnQpIGZuYW1lIGxudW0gPVxuICAgIGxldCBsbnVtID0gbWF0Y2ggbG51bSB3aXRoIFNvbWUgbG51bSAtPiBsbnVtIHwgTm9uZSAtPiAxIGluXG4gICAgbGV0IGluZm8gPSB7IGVycm9yX2luZm8gd2l0aCBsaW5lID0gbG51bSArIGVycm9yX2luZm8ubGluZSAtIDEgfSBpblxuICAgIGxldCBmbmFtZSA9IG1hdGNoIGZuYW1lIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBcIkxpbmVcIlxuICAgICAgfCBTb21lIG5hbWUgLT4gXCJGaWxlIFwiIF4gbmFtZSBeIFwiLCBsaW5lXCJcbiAgICBpblxuICAgIGxldCBsb2MgPSBQcmludGYuc3ByaW50ZiBcIiVzICVkIGNoYXJzICVkLSVkOiBcIiBmbmFtZSBpbmZvLmxpbmUgaW5mby5zdGFydF9jaGFyIGluZm8uZW5kX2NoYXIgaW5cbiAgICBsb2MgXiBpbmZvLm1zZ1xuXG4gIGxldCBhcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBmIGEgZm5hbWUgbG51bSA9XG4gICAgbWF0Y2ggZiBhIHdpdGhcbiAgICB8IE9rIGpzb24gLT4ganNvblxuICAgIHwgRXJyb3IgZXJyb3JfaW5mbyAtPiBqc29uX2Vycm9yIChlcnJvcl90b19zdHJpbmcgZXJyb3JfaW5mbyBmbmFtZSBsbnVtKVxuXG4gICgqIFJlYWRlcnMgKilcbiAgbGV0IGZyb21fc3RyaW5nID9idWY6XyA/Zm5hbWUgP2xudW0gcyA9XG4gICAgYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLmpzb25fb2Zfc3RyaW5nX2Vycm9yX2luZm8gcyBmbmFtZSBsbnVtXG5cbiAgbGV0IGZyb21fY2hhbm5lbCA/YnVmOl8gP2ZuYW1lID9sbnVtIGluX2NoYW5uZWwgPVxuICAgIGFwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIEludGVybmFsX3JlYWRlci5qc29uX29mX2NoYW5uZWxfZXJyb3JfaW5mbyBpbl9jaGFubmVsIGZuYW1lIGxudW1cblxuICBsZXQgZnJvbV9maWxlID9idWY6XyA/Zm5hbWUgP2xudW0gZmlsZW5hbWUgPVxuICAgIGFwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIEludGVybmFsX3JlYWRlci5qc29uX29mX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSBmbmFtZSBsbnVtXG5cbiAgbGV0IGZyb21fbGV4YnVmIGxleHN0YXRlID9zdHJlYW0gbGV4YnVmID1cbiAgICBsZXQgZm5hbWUgPSBsZXhzdGF0ZS5mbmFtZSBpblxuICAgIGxldCBsbnVtID0gU29tZSBsZXhzdGF0ZS5sbnVtIGluXG4gICAgbWF0Y2ggSW50ZXJuYWxfcmVhZGVyLmpzb25fb2ZfbGV4YnVmX2Vycm9yX2luZm9fY29tcGF0ID9zdHJlYW0gbGV4YnVmIHdpdGhcbiAgICB8IE9rIChTb21lIGpzb24pIC0+IGpzb25cbiAgICB8IE9rIE5vbmUgLT4ganNvbl9lcnJvciBcIkJsYW5rIGlucHV0IGRhdGFcIlxuICAgIHwgRXJyb3IgZXJyb3JfaW5mbyAtPiBqc29uX2Vycm9yIChlcnJvcl90b19zdHJpbmcgZXJyb3JfaW5mbyBmbmFtZSBsbnVtKVxuXG4gIGxldCByZWFkX3QgbGV4c3RhdGUgbGV4YnVmID0gZnJvbV9sZXhidWYgbGV4c3RhdGUgbGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9hcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBzdHJlYW1fZiBhIGZuYW1lIGxudW0gPVxuICAgIGxldCBzdHJlYW0gPSBzdHJlYW1fZiBhIGluXG4gICAgbGV0IGYgX2kgPVxuICAgICAgbWF0Y2ggU3RyZWFtLm5leHQgc3RyZWFtIHdpdGhcbiAgICAgIHwgdiAtPiBTb21lIHZcbiAgICAgIHwgZXhjZXB0aW9uIFN0cmVhbS5GYWlsdXJlIC0+IE5vbmVcbiAgICAgIHwgZXhjZXB0aW9uIEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvIC0+XG4gICAgICAgIGpzb25fZXJyb3IgKGVycm9yX3RvX3N0cmluZyBlcnJfaW5mbyBmbmFtZSBsbnVtKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9zdHJpbmcgP2J1ZjpfID9mbmFtZSA/bG51bSBzID1cbiAgICBzdHJlYW1fYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX3N0cmluZ19lcnJvcl9pbmZvIHMgZm5hbWUgbG51bVxuXG4gIGxldCBzdHJlYW1fZnJvbV9jaGFubmVsID9idWY6XyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgP2ZuYW1lID9sbnVtIGluX2NoYW5uZWwgPVxuICAgIHN0cmVhbV9hcHBseV9hbmRfaGFuZGxlX2Vycm9ycyAoSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyB+ZmluKSBpbl9jaGFubmVsIGZuYW1lIGxudW1cblxuICBsZXQgc3RyZWFtX2Zyb21fZmlsZSA/YnVmOl8gP2ZuYW1lID9sbnVtIGZpbGVuYW1lID1cbiAgICBzdHJlYW1fYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSBmbmFtZSBsbnVtXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2xleGJ1ZiBsZXhzdGF0ZSA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgbGV4YnVmID1cbiAgICBsZXQgc3RyZWFtID0gSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiBpblxuICAgIGxldCBmIF9pID1cbiAgICAgIG1hdGNoIFN0cmVhbS5uZXh0IHN0cmVhbSB3aXRoXG4gICAgICB8IHYgLT4gU29tZSB2XG4gICAgICB8IGV4Y2VwdGlvbiBTdHJlYW0uRmFpbHVyZSAtPiBmaW4gKCk7IE5vbmVcbiAgICAgIHwgZXhjZXB0aW9uIEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvIC0+XG4gICAgICAgIGZpbiAoKTsganNvbl9lcnJvciAoZXJyb3JfdG9fc3RyaW5nIGVycl9pbmZvIGxleHN0YXRlLmZuYW1lIChTb21lIGxleHN0YXRlLmxudW0pKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG5cbiAgbGV0IGxpbmVzdHJlYW1fZnJvbV9jaGFubmVsID9idWY6XyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgP2ZuYW1lID8obG51bSA9IDEpIGljID1cbiAgICBsZXQgZiBpID1cbiAgICAgIHRyeVxuICAgICAgICBsZXQgbG51bSA9IGxudW0gKyBpIGluXG4gICAgICAgIGxldCBsaW5lID0gaW5wdXRfbGluZSBpYyBpbiBTb21lIChgSnNvbiAoZnJvbV9zdHJpbmcgP2ZuYW1lIH5sbnVtIGxpbmUpKVxuICAgICAgd2l0aFxuICAgICAgICB8IEVuZF9vZl9maWxlIC0+IGZpbiAoKTsgTm9uZVxuICAgICAgICB8IGV4bl8gLT4gZmluICgpOyBTb21lIChgRXhuIGV4bl8pXG4gICAgaW5cbiAgICBTdHJlYW0uZnJvbSBmXG5cbiAgbGV0IGxpbmVzdHJlYW1fZnJvbV9maWxlID9idWY6XyA/Zm5hbWU6XyA/bG51bTpfIGZpbGVuYW1lID1cbiAgICBsZXQgaWMgPSBvcGVuX2luIGZpbGVuYW1lIGluXG4gICAgbGluZXN0cmVhbV9mcm9tX2NoYW5uZWwgfmZpbjooZnVuICgpIC0+IGNsb3NlX2luIGljKSBpY1xuZW5kXG5cbm1vZHVsZSBDb21tb25fd3JpdGVyIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA9IHN0cnVjdFxuICBtb2R1bGUgSW50ZXJuYWxfd3JpdGVyID0gc3RydWN0XG4gICAgaW5jbHVkZSBXcml0ZXJfc3RyaW5nLk1ha2UoQ29tcGxpYW5jZSlcbiAgICBpbmNsdWRlIFdyaXRlcl9maWxlLk1ha2UoQ29tcGxpYW5jZSlcbiAgICBpbmNsdWRlIFByZXR0eS5NYWtlKENvbXBsaWFuY2UpXG4gIGVuZFxuXG4gIGxldCB0b19zdGFuZGFyZCBqc29uID1cbiAgICBsZXQgcmVjIG1hcCBub2RlID1cbiAgICAgIG1hdGNoIG5vZGUgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBgTnVsbFxuICAgICAgfCBgQm9vbCBfIGFzIHYgLT4gdlxuICAgICAgfCBgSW50IF8gYXMgdiAtPiB2ICAoKiBpbnQgaXMgb2sgb24gb3V0cHV0ICopXG4gICAgICB8IGBJbnRsaXQgdiAtPiBgU3RyaW5nIHZcbiAgICAgIHwgYEZsb2F0IF8gYXMgdiAtPiB2XG4gICAgICB8IGBGbG9hdGxpdCB2IC0+IGBGbG9hdCAoZmxvYXRfb2Zfc3RyaW5nIHYpXG4gICAgICB8IGBTdHJpbmcgXyBhcyB2IC0+IHZcbiAgICAgIHwgYFN0cmluZ2xpdCBzIC0+IGJlZ2luXG4gICAgICAgIG1hdGNoIFN0cmluZy5sZW5ndGggcyB3aXRoXG4gICAgICAgIHwgMCB8IDEgLT4gYFN0cmluZyBzICAgICAgICAgKCogbWFsZm9ybWVkLCBzaG91bGQgaGF2ZSBkb3VibGUtcXVvdGVzIGF0IHN0YXJ0IGFuZCBlbmQgKilcbiAgICAgICAgfCBfIC0+IGBTdHJpbmcgKFN0cmluZy5zdWIgcyAxIChTdHJpbmcubGVuZ3RoIHMgLSAyKSlcbiAgICAgICAgZW5kXG4gICAgICB8IGBMaXN0IGwgLT4gYExpc3QgKExpc3QubWFwIG1hcCBsKVxuICAgICAgfCBgQXNzb2MgYSAtPiBgQXNzb2MgKExpc3QubWFwIChmdW4gKGlkLCB2KSAtPiAoaWQsIG1hcCB2KSkgYSlcbiAgICAgIHwgYFR1cGxlIHRwbCAtPiBgTGlzdCAoTGlzdC5tYXAgbWFwIHRwbClcbiAgICAgIHwgYFZhcmlhbnQgKG5hbWUsIGpvcHQpIC0+IGJlZ2luXG4gICAgICAgICBtYXRjaCBqb3B0IHdpdGhcbiAgICAgICAgIHwgTm9uZSAtPiBgU3RyaW5nIG5hbWVcbiAgICAgICAgIHwgU29tZSB2IC0+IGBMaXN0IFsgYFN0cmluZyBuYW1lOyAobWFwIHYpIF1cbiAgICAgICAgZW5kXG4gICAgaW5cbiAgICBtYXAganNvblxuXG4gICgqIFdyaXRlcnMgKilcblxuICBsZXQgdG9fc3RyaW5nID9idWY6XyA/bGVuOl8gPyhzdGQgPSBmYWxzZSkganNvbiA9XG4gICAgaWYgc3RkIHRoZW4gSW50ZXJuYWxfd3JpdGVyLnRvX3N0cmluZyAodG9fc3RhbmRhcmQganNvbikgZWxzZSBJbnRlcm5hbF93cml0ZXIudG9fc3RyaW5nIGpzb25cblxuICBsZXQgdG9fY2hhbm5lbCA/YnVmOl8gP2xlbjpfID8oc3RkID0gZmFsc2UpIG91dF9jaGFubmVsIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci50b19jaGFubmVsIG91dF9jaGFubmVsICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnRvX2NoYW5uZWwgb3V0X2NoYW5uZWwganNvblxuXG4gIGxldCB0b19maWxlID9sZW46XyA/KHN0ZCA9IGZhbHNlKSBmaWxlbmFtZSBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIudG9fZmlsZSBmaWxlbmFtZSAodG9fc3RhbmRhcmQganNvbilcbiAgICBlbHNlIEludGVybmFsX3dyaXRlci50b19maWxlIGZpbGVuYW1lIGpzb25cblxuICBsZXQgdG9fb3V0YnVmID8oc3RkID0gZmFsc2UpIGJ1ZiBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIudG9fYnVmZmVyIGJ1ZiAodG9fc3RhbmRhcmQganNvbikgZWxzZSBJbnRlcm5hbF93cml0ZXIudG9fYnVmZmVyIGJ1ZiBqc29uXG5cbiAgbGV0IHRvX291dHB1dCA/YnVmOl8gP2xlbjpfID9zdGQgb3V0IGpzb24gPVxuICAgIGxldCBzdHIgPSB0b19zdHJpbmcgP3N0ZCBqc29uIGluXG4gICAgb3V0I291dHB1dCBzdHIgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbiAgbGV0IHN0cmVhbV90b19zdHJpbmcgP2J1ZjpfID9sZW46XyA/c3RkIHN0cmVhbSA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAgbGV0ICgpID0gU3RyZWFtLml0ZXJcbiAgICAgIChmdW4ganNvbiAtPiB0b19vdXRidWYgP3N0ZCBidWYganNvbjsgIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuICAgIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBzdHJlYW1fdG9fY2hhbm5lbCA/YnVmOl8gP2xlbjpfID9zdGQgb2Mgc3RyZWFtID1cbiAgICBTdHJlYW0uaXRlciAoZnVuIGpzb24gLT4gdG9fY2hhbm5lbCA/c3RkIG9jIGpzb247IG91dHB1dF9jaGFyIG9jICdcXG4nKSBzdHJlYW1cblxuICBsZXQgc3RyZWFtX3RvX2ZpbGUgP2xlbjpfID9zdGQgZmlsZW5hbWUgc3RyZWFtID1cbiAgICBsZXQgb2MgPSBvcGVuX291dCBmaWxlbmFtZSBpblxuICAgIHRyeSAoc3RyZWFtX3RvX2NoYW5uZWwgP3N0ZCBvYyBzdHJlYW07IGNsb3NlX291dCBvYykgd2l0aFxuICAgIHwgZXhuIC0+IGNsb3NlX291dCBvYzsgcmFpc2UgZXhuXG5cbiAgbGV0IHN0cmVhbV90b19vdXRidWYgP3N0ZCBidWYgc3RyZWFtID1cbiAgICBTdHJlYW0uaXRlciAoZnVuIGpzb24gLT4gdG9fb3V0YnVmID9zdGQgYnVmIGpzb247IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuXG4gIGxldCB3cml0ZV90IGJ1ZiBqc29uID0gdG9fb3V0YnVmIGJ1ZiBqc29uXG5cbiAgKCogUHJldHR5IHByaW50ZXJzICopXG4gIGxldCBwcmV0dHlfcHJpbnQgPyhzdGQgPSBmYWxzZSkgb3V0IGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnQgb3V0ICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludCBvdXQganNvblxuXG4gIGxldCBwcmV0dHlfdG9fc3RyaW5nID8oc3RkID0gZmFsc2UpIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnRfdG9fc3RyaW5nICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludF90b19zdHJpbmcganNvblxuXG4gIGxldCBwcmV0dHlfdG9fY2hhbm5lbCA/KHN0ZCA9IGZhbHNlKSBvYyBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50X3RvX2NoYW5uZWwgb2MgKHRvX3N0YW5kYXJkIGpzb24pXG4gICAgZWxzZSBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50X3RvX2NoYW5uZWwgb2MganNvblxuXG4gICgqIFV0aWxpdGllcyAqKVxuICBsZXQgc2hvdyBqc29uID0gVXRpbGl0aWVzLmpzb25fdG9fc3RyaW5nX3JlcHIganNvblxuICBsZXQgcHAgb3V0IGpzb24gPSBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCAoc2hvdyBqc29uKVxuZW5kXG5cbm1vZHVsZSBCYXNpYyA9IHN0cnVjdFxuICBtb2R1bGUgQ29tcGxpYW5jZSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uQmFzaWMuanNvblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5CYXNpYy5qc29uXG5cbiAgICBvcGVuIFRva2Vuc1xuXG4gICAgbGV0IGxleF9zdHJpbmcgcyA9IExleHhlcl91dGlscy51bmVzY2FwZV9zdHJpbmcgc1xuICAgIGxldCBsZXhfbnVtYmVyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2ludGVnZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfbGFyZ2VpbnQgXyA9IENPTVBMSUFOQ0VfRVJST1IgXCJJbnRlZ2VyIG91dCBvZiBib3VuZHNcIlxuXG4gICAgbGV0IGxleF92YXJpYW50IF8gPSBmYWxzZVxuICAgIGxldCBsZXhfdHVwbGUgXyA9IGZhbHNlXG5cbiAgICBsZXQgY29tbWVudF9jaGVjayAoKSA9IE9rICgpXG5cbiAgICBsZXQgbnVtYmVyX3RvX3N0cmluZyBmID1cbiAgICAgIG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IGYgd2l0aFxuICAgICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+XG4gICAgICAgIEpzb25fZmxvYXQuc3RyaW5nX29mX2Zsb2F0X2pzb24gZlxuICAgICAgfCBGUF9pbmZpbml0ZSAtPlxuICAgICAgICBpZiBmIDwgMC4gdGhlbiBcIi1JbmZpbml0eVwiIGVsc2UgXCJJbmZpbml0eVwiXG4gICAgICB8IEZQX25hbiAtPlxuICAgICAgICBcIk5hTlwiXG5cbiAgICBsZXQgbGFyZ2VpbnQgcyA9IGBGbG9hdCAoZmxvYXRfb2Zfc3RyaW5nIHMpXG4gICAgbGV0IGludGVnZXIgaSA9IGBJbnQgaVxuICAgIGxldCBudWxsID0gYE51bGxcbiAgICBsZXQgc3RyaW5nIHMgPSBgU3RyaW5nIHNcbiAgICBsZXQgYm9vbCBiID0gYEJvb2wgYlxuICAgIGxldCBhc3NvYyBhID0gYEFzc29jIGFcbiAgICBsZXQgbGlzdCBsID0gYExpc3QgbFxuICAgIGxldCB0dXBsZSBfbCA9IHJhaXNlIChGYWlsdXJlIFwidHVwbGVzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcbiAgICBsZXQgdmFyaWFudCBfbCA9IHJhaXNlIChGYWlsdXJlIFwidmFyaWFudHMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuXG4gICAgbGV0IG51bWJlciA9IGZ1bmN0aW9uXG4gICAgfCBgRmxvYXQgZiAtPiAgICAgYEZsb2F0IGZcbiAgICB8IGBJbmZpbml0eSAtPiAgICBgRmxvYXQgKDEuMCAvLiAwLjApXG4gICAgfCBgTmVnaW5maW5pdHkgLT4gYEZsb2F0ICgtMS4wIC8uIDAuMClcbiAgICB8IGBOYW4gLT4gICAgICAgICBgRmxvYXQgKDAuMCAvLiAwLjApXG4gICAgfCBgRmxvYXRsaXQgXyAtPiAgcmFpc2UgKEZhaWx1cmUgXCJmbG9hdGxpdCBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG5cbiAgICBtb2R1bGUgU3RyZWFtID0gc3RydWN0XG4gICAgICBsZXQgbnVtYmVyID0gbnVtYmVyXG4gICAgICBsZXQgbGFyZ2VpbnQgPSBsYXJnZWludFxuICAgICAgbGV0IGludGVnZXIgPSBpbnRlZ2VyXG4gICAgICBsZXQgbnVsbCA9IG51bGxcbiAgICAgIGxldCBzdHJpbmcgPSBzdHJpbmdcbiAgICAgIGxldCBib29sID0gYm9vbFxuXG4gICAgICBsZXQgYXJyYXlfc3RhcnQgKCkgPSBgQXNcbiAgICAgIGxldCBhcnJheV9lbmQgKCkgPSBgQWVcbiAgICAgIGxldCBvYmplY3Rfc3RhcnQgKCkgPSBgT3NcbiAgICAgIGxldCBvYmplY3RfZW5kICgpID0gYE9lXG4gICAgICBsZXQgdHVwbGVfc3RhcnQgKCkgPSByYWlzZSAoRmFpbHVyZSBcInR1cGxlcyBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gcmFpc2UgKEZhaWx1cmUgXCJ0dXBsZXMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuICAgICAgbGV0IHZhcmlhbnRfc3RhcnQgKCkgPSByYWlzZSAoRmFpbHVyZSBcInZhcmlhbnRzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcbiAgICAgIGxldCB2YXJpYW50X2VuZCAoKSA9IHJhaXNlIChGYWlsdXJlIFwidmFyaWFudHMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuICAgICAgbGV0IG5hbWUgcyA9IGBOYW1lIHNcbiAgICBlbmRcbiAgZW5kXG5cbiAgaW5jbHVkZSBDb21tb25fcmVhZGVyKENvbXBsaWFuY2UpXG4gIGluY2x1ZGUgQ29tbW9uX3dyaXRlcihDb21wbGlhbmNlKVxuXG4gIGxldCBwcmV0dGlmeSA/c3RkIGluc3RyID0gZnJvbV9zdHJpbmcgaW5zdHIgfD4gcHJldHR5X3RvX3N0cmluZyA/c3RkXG4gIGxldCBjb21wYWN0ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiB0b19zdHJpbmcgP3N0ZFxuXG4gIGxldCBlcXVhbCA9IFV0aWxpdGllcy5lcXVhbFxuICBsZXQgc29ydCA9IFByb2Nlc3MuQmFzaWMuc29ydFxuXG4gIG1vZHVsZSBVdGlsID0gc3RydWN0XG4gICAgaW5jbHVkZSBQcm9jZXNzLkJhc2ljXG4gIGVuZFxuZW5kXG5cbm1vZHVsZSBTYWZlID0gc3RydWN0XG4gIG1vZHVsZSBDb21wbGlhbmNlID0gc3RydWN0XG4gICAgdHlwZSBqc29uID1cbiAgICAgIFtcbiAgICAgIHwgYE51bGxcbiAgICAgIHwgYEJvb2wgb2YgYm9vbFxuICAgICAgfCBgSW50IG9mIGludFxuICAgICAgfCBgSW50bGl0IG9mIHN0cmluZ1xuICAgICAgfCBgRmxvYXQgb2YgZmxvYXRcbiAgICAgIHwgYFN0cmluZyBvZiBzdHJpbmdcbiAgICAgIHwgYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0XG4gICAgICB8IGBMaXN0IG9mIGpzb24gbGlzdFxuICAgICAgfCBgVHVwbGUgb2YganNvbiBsaXN0XG4gICAgICB8IGBWYXJpYW50IG9mIChzdHJpbmcgKiBqc29uIG9wdGlvbilcbiAgICAgIF1cblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5FeHRlbmRlZC5qc29uICAoKiB5b2pzb24gaW50ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQgc3RyZWFtaW5nICopXG5cbiAgICBsZXQgbGV4X3N0cmluZyBzID0gTGV4eGVyX3V0aWxzLnVuZXNjYXBlX3N0cmluZyBzXG4gICAgbGV0IGxleF9udW1iZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfaW50ZWdlciB0b2tlbiA9IHRva2VuXG4gICAgbGV0IGxleF9sYXJnZWludCB0b2tlbiA9IHRva2VuXG5cbiAgICBsZXQgbGV4X3ZhcmlhbnQgXyA9IHRydWVcbiAgICBsZXQgbGV4X3R1cGxlIF8gPSB0cnVlXG5cbiAgICBsZXQgY29tbWVudF9jaGVjayAoKSA9IE9rICgpXG5cbiAgICBsZXQgbnVtYmVyX3RvX3N0cmluZyBmID1cbiAgICAgIG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IGYgd2l0aFxuICAgICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+XG4gICAgICAgIEpzb25fZmxvYXQuc3RyaW5nX29mX2Zsb2F0X2pzb24gZlxuICAgICAgfCBGUF9pbmZpbml0ZSAtPlxuICAgICAgICBpZiBmIDwgMC4gdGhlbiBcIi1JbmZpbml0eVwiIGVsc2UgXCJJbmZpbml0eVwiXG4gICAgICB8IEZQX25hbiAtPlxuICAgICAgICBcIk5hTlwiXG5cbiAgICBsZXQgbGFyZ2VpbnQgcyA9IGBJbnRsaXQgc1xuICAgIGxldCBpbnRlZ2VyIGkgPSBgSW50IGlcbiAgICBsZXQgbnVsbCA9IGBOdWxsXG4gICAgbGV0IHN0cmluZyBzID0gYFN0cmluZyBzXG4gICAgbGV0IGJvb2wgYiA9IGBCb29sIGJcbiAgICBsZXQgYXNzb2MgYSA9IGBBc3NvYyBhXG4gICAgbGV0IGxpc3QgbCA9IGBMaXN0IGxcbiAgICBsZXQgdHVwbGUgbCA9IGBUdXBsZSBsXG4gICAgbGV0IHZhcmlhbnQgayB2ID0gYFZhcmlhbnQgKGssIHYpXG5cbiAgICBsZXQgbnVtYmVyID0gZnVuY3Rpb25cbiAgICB8IGBGbG9hdCBmIC0+ICAgICBgRmxvYXQgZlxuICAgIHwgYEluZmluaXR5IC0+ICAgIGBGbG9hdCAoMS4wIC8uIDAuMClcbiAgICB8IGBOZWdpbmZpbml0eSAtPiBgRmxvYXQgKC0xLjAgLy4gMC4wKVxuICAgIHwgYE5hbiAtPiAgICAgICAgIGBGbG9hdCAoMC4wIC8uIDAuMClcbiAgICB8IGBGbG9hdGxpdCBfIC0+ICByYWlzZSAoRmFpbHVyZSBcImZsb2F0bGl0IG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIHNhZmUgbW9kZVwiKVxuXG4gICAgbW9kdWxlIFN0cmVhbSA9IHN0cnVjdFxuICAgICAgbGV0IG51bWJlciA9IG51bWJlclxuICAgICAgbGV0IGxhcmdlaW50ID0gbGFyZ2VpbnRcbiAgICAgIGxldCBpbnRlZ2VyID0gaW50ZWdlclxuICAgICAgbGV0IG51bGwgPSBudWxsXG4gICAgICBsZXQgc3RyaW5nID0gc3RyaW5nXG4gICAgICBsZXQgYm9vbCA9IGJvb2xcblxuICAgICAgbGV0IGFycmF5X3N0YXJ0ICgpID0gYEFzXG4gICAgICBsZXQgYXJyYXlfZW5kICgpID0gYEFlXG4gICAgICBsZXQgb2JqZWN0X3N0YXJ0ICgpID0gYE9zXG4gICAgICBsZXQgb2JqZWN0X2VuZCAoKSA9IGBPZVxuICAgICAgbGV0IHR1cGxlX3N0YXJ0ICgpID0gYFRzXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gYFRlXG4gICAgICBsZXQgdmFyaWFudF9zdGFydCAoKSA9IGBWc1xuICAgICAgbGV0IHZhcmlhbnRfZW5kICgpID0gYFZlXG4gICAgICBsZXQgbmFtZSBzID0gYE5hbWUgc1xuICAgIGVuZFxuICBlbmRcblxuICBpbmNsdWRlIENvbW1vbl9yZWFkZXIoQ29tcGxpYW5jZSlcbiAgaW5jbHVkZSBDb21tb25fd3JpdGVyKENvbXBsaWFuY2UpXG5cbiAgbGV0IHByZXR0aWZ5ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiBwcmV0dHlfdG9fc3RyaW5nID9zdGRcbiAgbGV0IGNvbXBhY3QgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHRvX3N0cmluZyA/c3RkXG5cbiAgbGV0IGVxdWFsID0gVXRpbGl0aWVzLmVxdWFsXG4gIGxldCBzb3J0ID0gUHJvY2Vzcy5FeHRlbmRlZC5zb3J0XG5cbiAgbGV0IHRvX2Jhc2ljIGpzb24gOiBCYXNpYy5qc29uID1cbiAgICBsZXQgcmVjIG1hcCBub2RlID1cbiAgICAgIG1hdGNoIG5vZGUgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBgTnVsbFxuICAgICAgfCBgQm9vbCBfIGFzIHYgLT4gdlxuICAgICAgfCBgSW50IF8gYXMgdiAtPiB2XG4gICAgICB8IGBJbnRsaXQgdiAtPiBgU3RyaW5nIHZcbiAgICAgIHwgYEZsb2F0IF8gYXMgdiAtPiB2XG4gICAgICB8IGBTdHJpbmcgXyBhcyB2IC0+IHZcbiAgICAgIHwgYExpc3QgbCAtPiBgTGlzdCAoTGlzdC5tYXAgbWFwIGwpXG4gICAgICB8IGBBc3NvYyBhIC0+IGBBc3NvYyAoTGlzdC5tYXAgKGZ1biAoaWQsIHYpIC0+IChpZCwgbWFwIHYpKSBhKVxuICAgICAgfCBgVHVwbGUgdHBsIC0+IGBMaXN0IChMaXN0Lm1hcCBtYXAgdHBsKVxuICAgICAgfCBgVmFyaWFudCAobmFtZSwgam9wdCkgLT5cbiAgICAgICAgIG1hdGNoIGpvcHQgd2l0aFxuICAgICAgICAgfCBOb25lIC0+IGBTdHJpbmcgbmFtZVxuICAgICAgICAgfCBTb21lIHYgLT4gYExpc3QgWyBgU3RyaW5nIG5hbWU7IChtYXAgdikgXVxuICAgIGluXG4gICAgbWFwIGpzb25cblxuICBtb2R1bGUgVXRpbCA9IHN0cnVjdFxuICAgIGluY2x1ZGUgUHJvY2Vzcy5Zb2pzb25fc2FmZVxuICBlbmRcbmVuZFxuXG5tb2R1bGUgUmF3ID0gc3RydWN0XG4gIG1vZHVsZSBDb21wbGlhbmNlID0gc3RydWN0XG5cbiAgdHlwZSBqc29uID1cbiAgICBbXG4gICAgfCBgTnVsbFxuICAgIHwgYEJvb2wgb2YgYm9vbFxuICAgIHwgYEludGxpdCBvZiBzdHJpbmdcbiAgICB8IGBGbG9hdGxpdCBvZiBzdHJpbmdcbiAgICB8IGBTdHJpbmdsaXQgb2Ygc3RyaW5nXG4gICAgfCBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICB8IGBMaXN0IG9mIGpzb24gbGlzdFxuICAgIHwgYFR1cGxlIG9mIGpzb24gbGlzdFxuICAgIHwgYFZhcmlhbnQgb2YgKHN0cmluZyAqIGpzb24gb3B0aW9uKVxuICAgIF1cblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5FeHRlbmRlZC5qc29uICgqIHlvanNvbiBpbnRlcmZhY2UgZG9lcyBub3Qgc3VwcG9ydCBzdHJlYW1pbmcgKilcblxuICAgIGxldCBsZXhfc3RyaW5nIHMgPSBcIlxcXCJcIiBeIHMgXiBcIlxcXCJcIlxuICAgIGxldCBsZXhfbnVtYmVyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2ludGVnZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfbGFyZ2VpbnQgdG9rZW4gPSB0b2tlblxuXG4gICAgbGV0IGxleF92YXJpYW50IF8gPSB0cnVlXG4gICAgbGV0IGxleF90dXBsZSBfID0gdHJ1ZVxuXG4gICAgbGV0IGNvbW1lbnRfY2hlY2sgKCkgPSBPayAoKVxuXG4gICAgbGV0IG51bWJlcl90b19zdHJpbmcgZiA9XG4gICAgICBtYXRjaCBjbGFzc2lmeV9mbG9hdCBmIHdpdGhcbiAgICAgIHwgRlBfbm9ybWFsIHwgRlBfc3Vibm9ybWFsIHwgRlBfemVybyAtPlxuICAgICAgICBKc29uX2Zsb2F0LnN0cmluZ19vZl9mbG9hdF9qc29uIGZcbiAgICAgIHwgRlBfaW5maW5pdGUgLT5cbiAgICAgICAgaWYgZiA8IDAuIHRoZW4gXCItSW5maW5pdHlcIiBlbHNlIFwiSW5maW5pdHlcIlxuICAgICAgfCBGUF9uYW4gLT5cbiAgICAgICAgXCJOYU5cIlxuXG4gICAgbGV0IGxhcmdlaW50IHMgPSBgSW50bGl0IHNcbiAgICBsZXQgaW50ZWdlciBpID0gYEludGxpdCAoc3RyaW5nX29mX2ludCBpKVxuICAgIGxldCBudWxsID0gYE51bGxcbiAgICBsZXQgc3RyaW5nIHMgPSBgU3RyaW5nbGl0IHNcbiAgICBsZXQgYm9vbCBiID0gYEJvb2wgYlxuICAgIGxldCBhc3NvYyBhID0gYEFzc29jIGFcbiAgICBsZXQgbGlzdCBsID0gYExpc3QgbFxuICAgIGxldCB0dXBsZSBsID0gYFR1cGxlIGxcbiAgICBsZXQgdmFyaWFudCBrIHYgPSBgVmFyaWFudCAoaywgdilcblxuICAgIGxldCBudW1iZXIgPSBmdW5jdGlvblxuICAgIHwgYEZsb2F0IGYgLT4gICAgIGBGbG9hdGxpdCAoc3RyaW5nX29mX2Zsb2F0IGYpXG4gICAgfCBgSW5maW5pdHkgLT4gICAgYEZsb2F0bGl0IFwiSW5maW5pdHlcIlxuICAgIHwgYE5lZ2luZmluaXR5IC0+IGBGbG9hdGxpdCBcIi1JbmZpbml0eVwiXG4gICAgfCBgTmFuIC0+ICAgICAgICAgYEZsb2F0bGl0IFwiTmFOXCJcbiAgICB8IGBGbG9hdGxpdCBmIC0+ICBgRmxvYXRsaXQgZlxuXG4gICAgbW9kdWxlIFN0cmVhbSA9IHN0cnVjdFxuICAgICAgbGV0IG51bWJlciA9IG51bWJlclxuICAgICAgbGV0IGxhcmdlaW50ID0gbGFyZ2VpbnRcbiAgICAgIGxldCBpbnRlZ2VyID0gaW50ZWdlclxuICAgICAgbGV0IG51bGwgPSBudWxsXG4gICAgICBsZXQgc3RyaW5nID0gc3RyaW5nXG4gICAgICBsZXQgYm9vbCA9IGJvb2xcblxuICAgICAgbGV0IGFycmF5X3N0YXJ0ICgpID0gYEFzXG4gICAgICBsZXQgYXJyYXlfZW5kICgpID0gYEFlXG4gICAgICBsZXQgb2JqZWN0X3N0YXJ0ICgpID0gYE9zXG4gICAgICBsZXQgb2JqZWN0X2VuZCAoKSA9IGBPZVxuICAgICAgbGV0IHR1cGxlX3N0YXJ0ICgpID0gYFRzXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gYFRlXG4gICAgICBsZXQgdmFyaWFudF9zdGFydCAoKSA9IGBWc1xuICAgICAgbGV0IHZhcmlhbnRfZW5kICgpID0gYFZlXG4gICAgICBsZXQgbmFtZSBzID0gYE5hbWUgc1xuICAgIGVuZFxuICBlbmRcblxuICBpbmNsdWRlIENvbW1vbl9yZWFkZXIoQ29tcGxpYW5jZSlcbiAgaW5jbHVkZSBDb21tb25fd3JpdGVyKENvbXBsaWFuY2UpXG5cbiAgbGV0IHByZXR0aWZ5ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiBwcmV0dHlfdG9fc3RyaW5nID9zdGRcbiAgbGV0IGNvbXBhY3QgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHRvX3N0cmluZyA/c3RkXG5cbiAgbGV0IGVxdWFsID0gVXRpbGl0aWVzLmVxdWFsXG4gIGxldCBzb3J0ID0gUHJvY2Vzcy5FeHRlbmRlZC5zb3J0XG5lbmRcbiIsImluY2x1ZGUgQ29udGFpbmVyc0xhYmVsc1xuXG5tb2R1bGUgU3RyaW5nID0gc3RydWN0XG4gIGluY2x1ZGUgU3RyaW5nXG4gIG1vZHVsZSBTZXQgPSBTZXQuTWFrZSAoU3RyaW5nKVxuZW5kXG5cbm1vZHVsZSBZb2pzb24gPSBzdHJ1Y3RcbiAgaW5jbHVkZSBKc29ueHQuWW9qc29uXG5lbmRcblxubW9kdWxlIEVuY29kaW5ncyA9IHN0cnVjdFxuICBsZXQgdG9fanN0ciB0ID0gSnYucmVwciB0IHw+IEJyci5Kc29uLmVuY29kZVxuICBsZXQgdG9fanYgdCA9IHRvX2pzdHIgdCB8PiBKdi5vZl9qc3RyXG5cbiAgbGV0IG9mX2pzdHIganN0ciA9XG4gICAgbWF0Y2ggQnJyLkpzb24uZGVjb2RlIGpzdHIgd2l0aFxuICAgIHwgT2sgdiAtPiBPayAoT2JqLm1hZ2ljIHYpXG4gICAgfCBFcnJvciBlcnIgLT5cbiAgICAgICAgQnJyLkNvbnNvbGUuZXJyb3IgWyBlcnIgXTtcbiAgICAgICAgRXJyb3IgKGBNc2cgXCJGYWlsZWQgdG8gdW5tYXJzaGFsIGRhdGFcIilcblxuICBsZXQgb2ZfanYganYgPSBKdi50b19qc3RyIGp2IHw+IG9mX2pzdHJcbmVuZFxuXG5sZXQgcmFuZG9tX3N0YXRlID0gUmFuZG9tLmdldF9zdGF0ZSAoKVxubGV0IG5ld191dWlkX3Y0ICgpID0gVXVpZG0udjRfZ2VuIHJhbmRvbV9zdGF0ZSAoKVxuXG4oKiogW3RlZSBmIHhdIGFwcGxpZXMgW2ZdIHRvIFt4XSBhbmQgcmV0dXJucyBbeF0gKilcbmxldCB0ZWUgZiB4ID1cbiAgbGV0ICgpID0gZiB4IGluXG4gIHhcbiIsIm9wZW4gU3RkTGFiZWxzXG5vcGVuIE1vcmVMYWJlbHNcbm9wZW4hIFlvanNvblxuXG50eXBlIHQgPSBZb2pzb24uU2FmZS50XG5cbmxldCB5b2pzb25fb2ZfdW5pdCAoKSA6IHQgPSBgTnVsbFxubGV0IHlvanNvbl9vZl9ib29sIGIgOiB0ID0gYEJvb2wgYlxubGV0IHlvanNvbl9vZl9zdHJpbmcgc3RyIDogdCA9IGBTdHJpbmcgc3RyXG5sZXQgeW9qc29uX29mX2J5dGVzIGJ5dGVzIDogdCA9IGBTdHJpbmcgKEJ5dGVzLnRvX3N0cmluZyBieXRlcylcbmxldCB5b2pzb25fb2ZfY2hhciBjIDogdCA9IGBTdHJpbmcgKFN0cmluZy5tYWtlIDEgYylcbmxldCB5b2pzb25fb2ZfaW50IG4gOiB0ID0gYEludCBuXG5sZXQgeW9qc29uX29mX2Zsb2F0IG4gOiB0ID0gYEZsb2F0IG5cbmxldCB5b2pzb25fb2ZfaW50MzIgKG4gOiBJbnQzMi50KSA6IHQgPSBgSW50bGl0IChJbnQzMi50b19zdHJpbmcgbilcbmxldCB5b2pzb25fb2ZfaW50NjQgKG4gOiBJbnQ2NC50KSA6IHQgPSBgSW50bGl0IChJbnQ2NC50b19zdHJpbmcgbilcbmxldCB5b2pzb25fb2ZfbmF0aXZlaW50IG4gOiB0ID0gYEludGxpdCAoTmF0aXZlaW50LnRvX3N0cmluZyBuKVxubGV0IHlvanNvbl9vZl9yZWYgeW9qc29uX29mX19hIHJmID0geW9qc29uX29mX19hICFyZlxubGV0IHlvanNvbl9vZl9sYXp5X3QgeW9qc29uX29mX19hIGx2ID0geW9qc29uX29mX19hIChMYXp5LmZvcmNlIGx2KVxuXG5sZXQgeW9qc29uX29mX29wdGlvbiB5b2pzb25fb2ZfX2EgPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB5b2pzb25fb2ZfX2EgeFxuICB8IE5vbmUgLT4gYE51bGxcbjs7XG5cbmxldCB5b2pzb25fb2ZfcGFpciB5b2pzb25fb2ZfX2EgeW9qc29uX29mX19iIChhLCBiKSA9XG4gIGBMaXN0IFsgeW9qc29uX29mX19hIGE7IHlvanNvbl9vZl9fYiBiIF1cbjs7XG5cbmxldCB5b2pzb25fb2ZfdHJpcGxlIHlvanNvbl9vZl9fYSB5b2pzb25fb2ZfX2IgeW9qc29uX29mX19jIChhLCBiLCBjKSA9XG4gIGBMaXN0IFsgeW9qc29uX29mX19hIGE7IHlvanNvbl9vZl9fYiBiOyB5b2pzb25fb2ZfX2MgYyBdXG47O1xuXG4oKiBMaXN0LnJldiAoTGlzdC5yZXZfbWFwIC4uLikgaXMgdGFpbCByZWN1cnNpdmUsIHRoZSBPQ2FtbCBzdGFuZGFyZFxuICAgbGlicmFyeSBMaXN0Lm1hcCBpcyBOT1QuICopXG5sZXQgeW9qc29uX29mX2xpc3QgeW9qc29uX29mX19hIGxzdCA9IGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIH5mOnlvanNvbl9vZl9fYSBsc3QpKVxuXG5sZXQgeW9qc29uX29mX2FycmF5IHlvanNvbl9vZl9fYSBhciA9XG4gIGxldCBsc3RfcmVmID0gcmVmIFtdIGluXG4gIGZvciBpID0gQXJyYXkubGVuZ3RoIGFyIC0gMSBkb3dudG8gMCBkb1xuICAgIGxzdF9yZWYgOj0geW9qc29uX29mX19hIGFyLihpKSA6OiAhbHN0X3JlZlxuICBkb25lO1xuICBgTGlzdCAhbHN0X3JlZlxuOztcblxubGV0IHlvanNvbl9vZl9oYXNodGJsIHlvanNvbl9vZl9rZXkgeW9qc29uX29mX3ZhbCBodGJsID1cbiAgbGV0IGNvbGwgfmtleTprIH5kYXRhOnYgYWNjID0gYExpc3QgWyB5b2pzb25fb2Zfa2V5IGs7IHlvanNvbl9vZl92YWwgdiBdIDo6IGFjYyBpblxuICBgTGlzdCAoSGFzaHRibC5mb2xkIGh0YmwgfmluaXQ6W10gfmY6Y29sbClcbjs7XG5cbmxldCB5b2pzb25fb2Zfb3BhcXVlIF8gPSBgU3RyaW5nIFwiPG9wYXF1ZT5cIlxubGV0IHlvanNvbl9vZl9mdW4gXyA9IGBTdHJpbmcgXCI8ZnVuPlwiXG5cbmV4Y2VwdGlvbiBPZl95b2pzb25fZXJyb3Igb2YgZXhuICogdFxuXG5sZXQgcmVjb3JkX2NoZWNrX2V4dHJhX2ZpZWxkcyA9IHJlZiB0cnVlXG5sZXQgb2ZfeW9qc29uX2Vycm9yX2V4biBleGMgeW9qc29uID0gcmFpc2UgKE9mX3lvanNvbl9lcnJvciAoZXhjLCB5b2pzb24pKVxubGV0IG9mX3lvanNvbl9lcnJvciB3aGF0IHlvanNvbiA9IHJhaXNlIChPZl95b2pzb25fZXJyb3IgKEZhaWx1cmUgd2hhdCwgeW9qc29uKSlcblxubGV0IHVuaXRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYE51bGwgLT4gKClcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcInVuaXRfb2ZfeW9qc29uOiBgTnVsbCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBib29sX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBCb29sIHYgLT4gdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiYm9vbF9vZl95b2pzb246IHRydWUvZmFsc2UgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgc3RyaW5nX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBTdHJpbmcgc3RyIC0+IHN0clxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwic3RyaW5nX29mX3lvanNvbjogc3RyaW5nIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGJ5dGVzX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBTdHJpbmcgc3RyIC0+IEJ5dGVzLm9mX3N0cmluZyBzdHJcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImJ5dGVzX29mX3lvanNvbjogc3RyaW5nIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGNoYXJfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYFN0cmluZyBzdHIgLT5cbiAgICBpZiBTdHJpbmcubGVuZ3RoIHN0ciA8PiAxXG4gICAgdGhlbiBvZl95b2pzb25fZXJyb3IgXCJjaGFyX29mX3lvanNvbjogc3RyaW5nIG11c3QgY29udGFpbiBvbmUgY2hhcmFjdGVyIG9ubHlcIiB5b2pzb247XG4gICAgc3RyLlswXVxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiY2hhcl9vZl95b2pzb246IHN0cmluZyBvZiBzaXplIG9uZSBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBpbnRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEludCB2IC0+IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImludF9vZl95b2pzb246IGludGVnZXIgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgZmxvYXRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEZsb2F0IHYgLT4gdlxuICB8IGBJbnQgaSAtPiBmbG9hdF9vZl9pbnQgaVxuICB8IGBJbnRsaXQgc3RyIC0+IGZsb2F0X29mX3N0cmluZyBzdHJcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImZsb2F0X29mX3lvanNvbjogZmxvYXQgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgaW50MzJfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEludGxpdCBzdHIgLT4gSW50MzIub2Zfc3RyaW5nIHN0clxuICB8IGBJbnQgdiAtPiBJbnQzMi5vZl9pbnQgdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaW50MzJfb2ZfeW9qc29uOiBpbnRlZ2VyIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGludDY0X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBJbnRsaXQgc3RyIC0+IEludDY0Lm9mX3N0cmluZyBzdHJcbiAgfCBgSW50IHYgLT4gSW50NjQub2ZfaW50IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImludDY0X29mX3lvanNvbjogaW50ZWdlciBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBuYXRpdmVpbnRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEludGxpdCBzdHIgLT4gTmF0aXZlaW50Lm9mX3N0cmluZyBzdHJcbiAgfCBgSW50IHYgLT4gTmF0aXZlaW50Lm9mX2ludCB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJuYXRpdmVpbnRfb2ZfeW9qc29uOiBpbnRlZ2VyIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IHJlZl9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9IHJlZiAoYV9fb2ZfeW9qc29uIHlvanNvbilcbmxldCBsYXp5X3Rfb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPSBMYXp5LmZyb21fdmFsIChhX19vZl95b2pzb24geW9qc29uKVxuXG5sZXQgb3B0aW9uX29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTnVsbCAtPiBOb25lXG4gIHwgZWwgLT4gU29tZSAoYV9fb2ZfeW9qc29uIGVsKVxuOztcblxubGV0IHBhaXJfb2ZfeW9qc29uIGFfX29mX3lvanNvbiBiX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBbIGFfeW9qc29uOyBiX3lvanNvbiBdIC0+XG4gICAgbGV0IGEgPSBhX19vZl95b2pzb24gYV95b2pzb24gaW5cbiAgICBsZXQgYiA9IGJfX29mX3lvanNvbiBiX3lvanNvbiBpblxuICAgIGEsIGJcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcInBhaXJfb2ZfeW9qc29uOiBpbnZhbGlkIGZvcm1hdFwiIHlvanNvblxuOztcblxubGV0IHRyaXBsZV9vZl95b2pzb24gYV9fb2ZfeW9qc29uIGJfX29mX3lvanNvbiBjX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBbIGFfeW9qc29uOyBiX3lvanNvbjsgY195b2pzb24gXSAtPlxuICAgIGxldCBhID0gYV9fb2ZfeW9qc29uIGFfeW9qc29uIGluXG4gICAgbGV0IGIgPSBiX19vZl95b2pzb24gYl95b2pzb24gaW5cbiAgICBsZXQgYyA9IGNfX29mX3lvanNvbiBjX3lvanNvbiBpblxuICAgIGEsIGIsIGNcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcInRyaXBsZV9vZl95b2pzb246IGludmFsaWQgZm9ybWF0XCIgeW9qc29uXG47O1xuXG5sZXQgbGlzdF9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgbHN0IC0+XG4gICAgbGV0IHJldl9sc3QgPSBMaXN0LnJldl9tYXAgbHN0IH5mOmFfX29mX3lvanNvbiBpblxuICAgIExpc3QucmV2IHJldl9sc3RcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImxpc3Rfb2ZfeW9qc29uOiBsaXN0IG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGFycmF5X29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBbXSAtPiBbfHxdXG4gIHwgYExpc3QgKGggOjogdCkgLT5cbiAgICBsZXQgbGVuID0gTGlzdC5sZW5ndGggdCArIDEgaW5cbiAgICBsZXQgcmVzID0gQXJyYXkubWFrZSBsZW4gKGFfX29mX3lvanNvbiBoKSBpblxuICAgIGxldCByZWMgbG9vcCBpID0gZnVuY3Rpb25cbiAgICAgIHwgW10gLT4gcmVzXG4gICAgICB8IGggOjogdCAtPlxuICAgICAgICByZXMuKGkpIDwtIGFfX29mX3lvanNvbiBoO1xuICAgICAgICBsb29wIChpICsgMSkgdFxuICAgIGluXG4gICAgbG9vcCAxIHRcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImFycmF5X29mX3lvanNvbjogbGlzdCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBoYXNodGJsX29mX3lvanNvbiBrZXlfb2ZfeW9qc29uIHZhbF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBsc3QgLT5cbiAgICBsZXQgaHRibCA9IEhhc2h0YmwuY3JlYXRlIDAgaW5cbiAgICBsZXQgYWN0ID0gZnVuY3Rpb25cbiAgICAgIHwgYExpc3QgWyBrX3lvanNvbjsgdl95b2pzb24gXSAtPlxuICAgICAgICBIYXNodGJsLmFkZCBodGJsIH5rZXk6KGtleV9vZl95b2pzb24ga195b2pzb24pIH5kYXRhOih2YWxfb2ZfeW9qc29uIHZfeW9qc29uKVxuICAgICAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImhhc2h0Ymxfb2ZfeW9qc29uOiB0dXBsZSBsaXN0IG5lZWRlZFwiIHlvanNvblxuICAgIGluXG4gICAgTGlzdC5pdGVyIGxzdCB+ZjphY3Q7XG4gICAgaHRibFxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaGFzaHRibF9vZl95b2pzb246IGxpc3QgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgb3BhcXVlX29mX3lvanNvbiB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgXCJvcGFxdWVfb2ZfeW9qc29uOiBjYW5ub3QgY29udmVydCBvcGFxdWUgdmFsdWVzXCIgeW9qc29uXG47O1xuXG5sZXQgZnVuX29mX3lvanNvbiB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgXCJmdW5fb2ZfeW9qc29uOiBjYW5ub3QgY29udmVydCBmdW5jdGlvbiB2YWx1ZXNcIiB5b2pzb25cbjs7XG5cbm1vZHVsZSBQcmltaXRpdmVzID0gc3RydWN0XG4gIGxldCB5b2pzb25fb2ZfYXJyYXkgPSB5b2pzb25fb2ZfYXJyYXlcbiAgbGV0IGFycmF5X29mX3lvanNvbiA9IGFycmF5X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2Jvb2wgPSB5b2pzb25fb2ZfYm9vbFxuICBsZXQgYm9vbF9vZl95b2pzb24gPSBib29sX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2NoYXIgPSB5b2pzb25fb2ZfY2hhclxuICBsZXQgY2hhcl9vZl95b2pzb24gPSBjaGFyX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2Zsb2F0ID0geW9qc29uX29mX2Zsb2F0XG4gIGxldCBmbG9hdF9vZl95b2pzb24gPSBmbG9hdF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9pbnQgPSB5b2pzb25fb2ZfaW50XG4gIGxldCBpbnRfb2ZfeW9qc29uID0gaW50X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2ludDMyID0geW9qc29uX29mX2ludDMyXG4gIGxldCBpbnQzMl9vZl95b2pzb24gPSBpbnQzMl9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9pbnQ2NCA9IHlvanNvbl9vZl9pbnQ2NFxuICBsZXQgaW50NjRfb2ZfeW9qc29uID0gaW50NjRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfbGlzdCA9IHlvanNvbl9vZl9saXN0XG4gIGxldCBsaXN0X29mX3lvanNvbiA9IGxpc3Rfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfbmF0aXZlaW50ID0geW9qc29uX29mX25hdGl2ZWludFxuICBsZXQgbmF0aXZlaW50X29mX3lvanNvbiA9IG5hdGl2ZWludF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9vcHRpb24gPSB5b2pzb25fb2Zfb3B0aW9uXG4gIGxldCBvcHRpb25fb2ZfeW9qc29uID0gb3B0aW9uX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX3JlZiA9IHlvanNvbl9vZl9yZWZcbiAgbGV0IHJlZl9vZl95b2pzb24gPSByZWZfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2Zfc3RyaW5nID0geW9qc29uX29mX3N0cmluZ1xuICBsZXQgc3RyaW5nX29mX3lvanNvbiA9IHN0cmluZ19vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9ieXRlcyA9IHlvanNvbl9vZl9ieXRlc1xuICBsZXQgYnl0ZXNfb2ZfeW9qc29uID0gYnl0ZXNfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfdW5pdCA9IHlvanNvbl9vZl91bml0XG4gIGxldCB1bml0X29mX3lvanNvbiA9IHVuaXRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfbGF6eV90ID0geW9qc29uX29mX2xhenlfdFxuICBsZXQgbGF6eV90X29mX3lvanNvbiA9IGxhenlfdF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9oYXNodGJsID0geW9qc29uX29mX2hhc2h0YmxcbiAgbGV0IGhhc2h0Ymxfb2ZfeW9qc29uID0gaGFzaHRibF9vZl95b2pzb25cbmVuZFxuIiwibW9kdWxlIFlvanNvbl9jb252X2Vycm9yID0gWW9qc29uX2NvbnZfZXJyb3Jcbm1vZHVsZSBZb2pzb25fY29udiA9IFlvanNvbl9jb252XG5tb2R1bGUgWW9qc29uYWJsZSA9IFlvanNvbmFibGVfaW50ZlxubW9kdWxlIFlvanNvbiA9IFlvanNvblxuXG5tb2R1bGUgT3B0aW9uID0gc3RydWN0XG4gIHR5cGUgJ2EgdCA9ICdhIG9wdGlvbiA9XG4gICAgfCBOb25lXG4gICAgfCBTb21lIG9mICdhXG5lbmRcblxuZXh0ZXJuYWwgaWdub3JlIDogXyAtPiB1bml0ID0gXCIlaWdub3JlXCJcbmV4dGVybmFsIHBvbHlfZXF1YWwgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXF1YWxcIlxuXG5sZXQgKCAhICkgOiAnYSByZWYgLT4gJ2EgPSBmdW4geCAtPiAheFxuIiwibW9kdWxlIEFwaSA9IEplbGx5ZmluX2FwaVxuXG50eXBlIGNyZWRlbnRpYWxzID0geyBiYXNlX3VybCA6IHN0cmluZzsgdXNlcm5hbWUgOiBzdHJpbmc7IHBhc3N3b3JkIDogc3RyaW5nIH1cblxudHlwZSBjb25uZXhpb24gPSB7XG4gIGJhc2VfdXJsIDogc3RyaW5nO1xuICBhdXRoX3Jlc3BvbnNlIDogQXBpLkF1dGhlbnRpY2F0ZV9ieV9uYW1lLnJlc3BvbnNlO1xufVxuXG5sZXQgZ2V0X3Rva2VuIHQgPSB0LmF1dGhfcmVzcG9uc2UuQXBpLkF1dGhlbnRpY2F0ZV9ieV9uYW1lLmFjY2Vzc190b2tlblxuXG5sZXQgY29ubmVjdCBjcmVkZW50aWFscyA9XG4gIGxldCBtb2R1bGUgQXV0aCA9IEFwaS5BdXRoZW50aWNhdGVfYnlfbmFtZSBpblxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQgeyBiYXNlX3VybDsgdXNlcm5hbWU7IHBhc3N3b3JkIH0gPSBjcmVkZW50aWFscyBpblxuICBsZXQgYXV0aCA9IHsgQXBpLkF1dGhlbnRpY2F0ZV9ieV9uYW1lLnVzZXJuYW1lOyBwdyA9IHBhc3N3b3JkIH0gaW5cbiAgbGV0KyBhdXRoX3Jlc3BvbnNlID0gQXBpLnJlcXVlc3QgfmJhc2VfdXJsIChtb2R1bGUgQXV0aCkgYXV0aCAoKSBpblxuICB7IGJhc2VfdXJsOyBhdXRoX3Jlc3BvbnNlIH1cblxubGV0IHF1ZXJ5IHQgPVxuICBsZXQgdG9rZW4gPSBnZXRfdG9rZW4gdCBpblxuICBsZXQgYmFzZV91cmwgPSB0LmJhc2VfdXJsIGluXG4gIEplbGx5ZmluX2FwaS5yZXF1ZXN0IH5iYXNlX3VybCB+dG9rZW5cbiIsIm9wZW4gU3RkXG5vcGVuIEJyclxuXG50eXBlIHRhZyA9IEJsb2NrIG9mIGludCB8IEludCBvZiBpbnRcblxubGV0IHRhZ19vZiB2ID1cbiAgKCogd293IHdvdyB3b3cuIGlzIHRoYXQgb2theXlpc2ggPyopXG4gIGxldCBvYmogPSBPYmoucmVwciB2IGluXG4gIGlmIE9iai5pc19ibG9jayBvYmogdGhlbiBCbG9jayAoT2JqLnRhZyBvYmopIGVsc2UgSW50IChPYmoubWFnaWMgb2JqKVxuXG5tb2R1bGUgdHlwZSBRdWVyaWVzID0gc2lnXG4gIHR5cGUgJ2EgcXVlcnlcbiAgdHlwZSAnYSBldmVudFxuZW5kXG5cbm1vZHVsZSBNYWtlIChRIDogUXVlcmllcykgPSBzdHJ1Y3RcbiAgdHlwZSBlcnJvciA9IFsgYEp2IG9mIEp2LkVycm9yLnQgfCBgTXNnIG9mIHN0cmluZyBdXG4gIHR5cGUgJ2EgcXVlcnkgPSAnYSBRLnF1ZXJ5XG4gIHR5cGUgJ2EgZXZlbnQgPSAnYSBRLmV2ZW50XG4gIHR5cGUgJ2Egd2l0aF91dWlkID0geyB1dWlkIDogc3RyaW5nOyBkYXRhIDogJ2EgfVxuICB0eXBlICdhIG1lc3NhZ2UgPSBBbnN3ZXIgb2YgJ2Egd2l0aF91dWlkIHwgRXZlbnQgb2YgKCdhIGV2ZW50ICogJ2EpXG4gIHR5cGUgbGlzdGVuZXIgPSBzdHJpbmdcblxuICAoKiB0b2RvOmNoZWNrIHRoYXQgdGhlIHdvcmtlciBhbmQgdGhlIGNsaWVudCBzaGFyZSB0aGUgc2FtZSBhcGk/ICopXG5cbiAgbW9kdWxlIFN0YXJ0X2NsaWVudCAoUCA6IHNpZ1xuICAgIHZhbCB1cmwgOiBzdHJpbmdcbiAgZW5kKSA9XG4gIHN0cnVjdFxuICAgIGxldCBmdXR1cmVzIDogKHN0cmluZywgSnYudCAtPiB1bml0KSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSA2NFxuICAgIGxldCBsaXN0ZW5lcnMgOiAodGFnLCBKdi50IC0+IHVuaXQpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDY0XG4gICAgbGV0IHdvcmtlciA9IEJycl93ZWJ3b3JrZXJzLldvcmtlci5jcmVhdGUgQEAgSnN0ci5vZl9zdHJpbmcgUC51cmxcblxuICAgIGxldCBxdWVyeSAodHlwZSBhKSAocXVlcnkgOiBhIHF1ZXJ5KSA6IChhLCBlcnJvcikgRnV0LnJlc3VsdCA9XG4gICAgICBsZXQgdXVpZCA9IG5ld191dWlkX3Y0ICgpIHw+IFV1aWRtLnRvX3N0cmluZyBpblxuICAgICAgbGV0IGZ1dCwgc2V0ID0gRnV0LmNyZWF0ZSAoKSBpblxuICAgICAgbGV0IHNldCBqdiA9IHNldCBAQCBFbmNvZGluZ3Mub2ZfanYganYgaW5cbiAgICAgIGxldCBxdWVyeSA9IHsgdXVpZDsgZGF0YSA9IHF1ZXJ5IH0gfD4gRW5jb2RpbmdzLnRvX2pzdHIgaW5cbiAgICAgIEJycl93ZWJ3b3JrZXJzLldvcmtlci5wb3N0IHdvcmtlciAoSnYub2ZfanN0ciBxdWVyeSk7XG4gICAgICBIYXNodGJsLmFkZCBmdXR1cmVzIHV1aWQgc2V0O1xuICAgICAgZnV0XG5cbiAgICBsZXQgbGlzdGVuICh0eXBlIGEpIChldmVudCA6IGEgZXZlbnQpIH4oZiA6IGEgLT4gdW5pdCkgOiBsaXN0ZW5lciA9XG4gICAgICBsZXQgdXVpZCA9IG5ld191dWlkX3Y0ICgpIHw+IFV1aWRtLnRvX3N0cmluZyBpblxuICAgICAgbGV0IHNldCBqdiA9IGYgKE9iai5tYWdpYyBqdikgaW5cbiAgICAgIEhhc2h0YmwuYWRkIGxpc3RlbmVycyAodGFnX29mIGV2ZW50KSBzZXQ7XG4gICAgICB1dWlkXG5cbiAgICBsZXQgb25fbWVzc2FnZSBldiA9XG4gICAgICBsZXQgbWVzc2FnZSA9IEV2LmFzX3R5cGUgZXYgaW5cbiAgICAgIGxldCBvcGVuIFJlc3VsdCBpblxuICAgICAgaWdub3JlICgqIFRPRE86IGhhbmRsZXIgZXJyb3JzICopXG4gICAgICBAQFxuICAgICAgbGV0KyBtZXNzYWdlID1cbiAgICAgICAgQnJyX2lvLk1lc3NhZ2UuRXYuZGF0YSBtZXNzYWdlIHw+IEp2LnRvX2pzdHIgfD4gRW5jb2RpbmdzLm9mX2pzdHJcbiAgICAgIGluXG4gICAgICBtYXRjaCBtZXNzYWdlIHdpdGhcbiAgICAgIHwgRXZlbnQgKGUsIHYpIC0+XG4gICAgICAgICAgSGFzaHRibC5maW5kX2FsbCBsaXN0ZW5lcnMgKHRhZ19vZiBlKSB8PiBMaXN0Lml0ZXIgfmY6KGZ1biBmIC0+IGYgdilcbiAgICAgIHwgQW5zd2VyIHsgdXVpZDsgZGF0YSB9IC0+XG4gICAgICAgICAgbGV0IGYgPSBIYXNodGJsLmZpbmQgZnV0dXJlcyB1dWlkIGluXG4gICAgICAgICAgSGFzaHRibC5yZW1vdmUgZnV0dXJlcyB1dWlkO1xuICAgICAgICAgIGYgZGF0YVxuXG4gICAgbGV0IF8gPVxuICAgICAgRXYubGlzdGVuIEJycl9pby5NZXNzYWdlLkV2Lm1lc3NhZ2Ugb25fbWVzc2FnZVxuICAgICAgQEAgQnJyX3dlYndvcmtlcnMuV29ya2VyLmFzX3RhcmdldCB3b3JrZXJcbiAgZW5kXG5cbiAgbW9kdWxlIHR5cGUgV29ya2VyX2ltcGwgPSBmdW5jdG9yICgpIC0+IHNpZ1xuICAgIHZhbCBvbl9xdWVyeSA6ICdhIHF1ZXJ5IC0+ICgnYSwgZXJyb3IpIEZ1dC5yZXN1bHRcbiAgZW5kXG5cbiAgbGV0IGRpc3BhdGNoX2V2ZW50ICh0eXBlIGEpIChlIDogYSBldmVudCkgKHYgOiBhKSA9XG4gICAgKCogbGV0IGRhdGEgPSBFbmNvZGluZ3MubWFyc2hhbF90b19qc3RyIHw+IEp2Lm9mX2pzdHIgaW4gKilcbiAgICBCcnJfd2Vid29ya2Vycy5Xb3JrZXIuRy5wb3N0IChFbmNvZGluZ3MudG9fanN0ciAoRXZlbnQgKGUsIHYpKSB8PiBKdi5vZl9qc3RyKVxuXG4gICgqKiBFeGVjdXRlIFcncyBib2R5IGFuZCBjb25maWd1cmUgbWVzc2FnaW5nICopXG4gIG1vZHVsZSBNYWtlX3dvcmtlciAoVyA6IFdvcmtlcl9pbXBsKSA9IHN0cnVjdFxuICAgIG9wZW4gQnJyXG4gICAgbW9kdWxlIFcgPSBXICgpXG5cbiAgICBsZXQgb25fbWVzc2FnZSBldiA9XG4gICAgICBsZXQgbWVzc2FnZSA9IEV2LmFzX3R5cGUgZXYgaW5cbiAgICAgIGxldCBvcGVuIFJlc3VsdCBpblxuICAgICAgaWdub3JlICgqIFRPRE86IGhhbmRsZXIgZXJyb3JzICopXG4gICAgICBAQFxuICAgICAgbGV0KyAoeyB1dWlkOyBkYXRhIH0gOiAnYSBxdWVyeSB3aXRoX3V1aWQpID1cbiAgICAgICAgQnJyX2lvLk1lc3NhZ2UuRXYuZGF0YSBtZXNzYWdlIHw+IEp2LnRvX2pzdHIgfD4gRW5jb2RpbmdzLm9mX2pzdHJcbiAgICAgIGluXG4gICAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgICAgbGV0KyByZXN1bHQgPSBXLm9uX3F1ZXJ5IGRhdGEgaW5cbiAgICAgIGxldCBkYXRhID0gRW5jb2RpbmdzLnRvX2pzdHIgcmVzdWx0IHw+IEp2Lm9mX2pzdHIgaW5cbiAgICAgIEJycl93ZWJ3b3JrZXJzLldvcmtlci5HLnBvc3RcbiAgICAgICAgKEVuY29kaW5ncy50b19qc3RyIChBbnN3ZXIgeyB1dWlkOyBkYXRhIH0pIHw+IEp2Lm9mX2pzdHIpXG5cbiAgICBsZXQgXyA9IEV2Lmxpc3RlbiBCcnJfaW8uTWVzc2FnZS5Fdi5tZXNzYWdlIG9uX21lc3NhZ2UgRy50YXJnZXRcbiAgZW5kXG5lbmRcbiIsIm9wZW4gU3RkXG5cbm1vZHVsZSBTb3J0ID0gc3RydWN0XG4gIHR5cGUgY3JpdGVyaWEgPSBEYXRlX2FkZGVkXG4gIHR5cGUgZGlyZWN0aW9uID0gQXNjIHwgRGVzY1xuICB0eXBlIHQgPSBTb21lIG9mIGNyaXRlcmlhICogZGlyZWN0aW9uIHwgUmFuZG9tXG5lbmRcblxuKCoqIFNvbWUgc29ydHMgcmVxdWlyZSBhIGN1c3RvbSBvcmRlcmluZyB3aGljaCBpcyBkb25lIHVzaW5nIGEgdGFibGUgb2YgaW5kZXhlcy4gRm9yIGV4YW1wbGUsIHRvIGdldCBhIHJhbmRvbSBzb3J0IHdlIHNpbXBsZSBzaHVmZmxlIGFuIGFycmF5IHdoaWNoIHNpemUgaXMgdGhlIG9uZSBvZiB0aGUgcmVzdWx0LiAqKVxubW9kdWxlIE9yZGVyID0gc3RydWN0XG4gIHR5cGUgdCA9IEluaXRpYWwgfCBDdXN0b20gb2YgaW50IGFycmF5XG5cbiAgbGV0IG9mX3NvcnQgfnNpemUgPSBmdW5jdGlvblxuICAgIHwgU29ydC5SYW5kb20gLT5cbiAgICAgICAgbGV0IHRibCA9IEFycmF5LmluaXQgc2l6ZSB+ZjpGdW4uaWQgaW5cbiAgICAgICAgbGV0ICgpID0gQXJyYXkuc2h1ZmZsZSB0YmwgaW5cbiAgICAgICAgQ3VzdG9tIHRibFxuICAgIHwgXyAtPiBJbml0aWFsXG5cbiAgbGV0IGFwcGx5IHQgaSA9XG4gICAgbWF0Y2ggdCB3aXRoIEluaXRpYWwgLT4gaSB8IEN1c3RvbSBhIC0+ICgqIHRvZG8gY2hlY2sgYm91bmRzICopIGEuKGkpXG5lbmRcblxudHlwZSAnYSBzZWxlY3Rpb24gPSBBbGwgfCBPbmx5IG9mICdhIGxpc3RcbnR5cGUga2luZCA9IEF1ZGlvXG50eXBlIGZpbHRlciA9IFNlYXJjaCBvZiBzdHJpbmdcblxudHlwZSByZXEgPSB7XG4gIGtpbmQgOiBraW5kO1xuICBzcmNfdmlld3MgOiBzdHJpbmcgc2VsZWN0aW9uO1xuICBzb3J0IDogU29ydC50O1xuICBmaWx0ZXJzIDogZmlsdGVyIGxpc3Q7XG59XG5cbnR5cGUgdCA9IHtcbiAgdXVpZCA6IFV1aWRtLnQ7XG4gIHJlcXVlc3QgOiByZXE7XG4gIG9yZGVyIDogT3JkZXIudDtcbiAgc3RhcnRfb2Zmc2V0IDogaW50O1xuICBpdGVtX2NvdW50IDogaW50O1xufVxuXG5sZXQgaXRlbV9jb3VudCB0ID0gdC5pdGVtX2NvdW50IC0gdC5zdGFydF9vZmZzZXRcblxubGV0IHJlcSBraW5kID8oc3JjX3ZpZXdzID0gQWxsKSA/KHNvcnQgPSBTb3J0LihTb21lIChEYXRlX2FkZGVkLCBEZXNjKSkpXG4gICAgPyhmaWx0ZXJzID0gW10pICgpID1cbiAgeyBraW5kOyBzcmNfdmlld3M7IHNvcnQ7IGZpbHRlcnMgfVxuXG5sZXQgaGFzaCByZXEgPSBIYXNodGJsLmhhc2ggKHJlcS5zcmNfdmlld3MsIHJlcS5maWx0ZXJzKVxuIiwib3BlbiEgU3RkXG5tb2R1bGUgRFMgPSBEYXRhX3NvdXJjZS5KZWxseWZpblxubW9kdWxlIEFwaSA9IERTLkFwaVxuXG50eXBlIHNlcnZlciA9IHN0cmluZyAqIERTLmNvbm5leGlvblxuXG5tb2R1bGUgUXVlcmllcyA9IHN0cnVjdFxuICB0eXBlICdhIHF1ZXJ5ID1cbiAgICB8IEFkZF9zZXJ2ZXJzIDogc2VydmVyIGxpc3QgLT4gdW5pdCBxdWVyeVxuICAgIHwgR2V0X2FsbCA6IHVuaXQgLT4gQXBpLkl0ZW0udCBsaXN0IHF1ZXJ5XG4gICAgfCBHZXRfbGlicmFyaWVzIDogdW5pdCAtPiBTdG9yZXMuSXRlbXMudCBsaXN0IHF1ZXJ5XG4gICAgfCBHZXRfc2VydmVyX2xpYnJhcmllcyA6IHN0cmluZyAtPiBTdG9yZXMuSXRlbXMudCBsaXN0IHF1ZXJ5XG4gICAgfCBDcmVhdGVfdmlldyA6IFZpZXcucmVxIC0+IFZpZXcudCBxdWVyeVxuICAgIHwgR2V0IDogVmlldy50ICogaW50IGFycmF5IC0+IFN0b3Jlcy5JdGVtcy50IG9wdGlvbiBhcnJheSBxdWVyeVxuXG4gIHR5cGUgJ2EgZXZlbnQgPSBTZXJ2ZXJzX3N0YXR1c191cGRhdGUgOiAoc3RyaW5nICogU3luYy5yZXBvcnQpIGV2ZW50XG5lbmRcblxuaW5jbHVkZSBXb3JrZXJfYXBpLk1ha2UgKFF1ZXJpZXMpXG4iLCJtb2R1bGUgU3RvcmVzID0gU3RvcmVzXG5tb2R1bGUgU3luYyA9IFN5bmNcbm1vZHVsZSBWaWV3ID0gVmlld1xub3BlbiBCcnJlclxub3BlbiBCcnJcbm1vZHVsZSBPSSA9IFN0b3Jlcy5PcmRlcnJlZF9pdGVtc19zdG9yZVxubW9kdWxlIEkgPSBTdG9yZXMuSXRlbXNfc3RvcmVcbm1vZHVsZSBWRiA9IFN0b3Jlcy5WaXJ0dWFsX2ZvbGRlcl9zdG9yZVxubW9kdWxlIFdvcmtlcl9hcGkgPSBEYl93b3JrZXJfYXBpXG5cbm1vZHVsZSBJdGVtX3N0b3JlID0gc3RydWN0XG4gIGluY2x1ZGUgU3RvcmVzLkl0ZW1zX3N0b3JlXG5cbiAgbW9kdWxlIEluZGV4ID0gc3RydWN0XG4gICAgbW9kdWxlIElkID0gU3RvcmVzLkl0ZW1zQnlJZFxuICAgIG1vZHVsZSBUeXBlX05hbWUgPSBTdG9yZXMuSXRlbXNCeVR5cGVBbmROYW1lXG4gICAgbW9kdWxlIEtpbmRfVmlldyA9IFN0b3Jlcy5JdGVtc0J5Vmlld0FuZEtpbmRcbiAgZW5kXG5lbmRcblxubGV0IG9uX3VwZ3JhZGVfbmVlZGVkIGUgcSA9XG4gIGxldCBvcGVuIEJycl9pby5JbmRleGVkX2RiIGluXG4gIGxldCBvbGRfdmVyc2lvbiwgbmV3X3ZlcnNpb24gPVxuICAgIGxldCB2ID0gRXYuYXNfdHlwZSBlIGluXG4gICAgRXZlbnRzLlZlcnNpb25fY2hhbmdlLihvbGRfdmVyc2lvbiB2LCBuZXdfdmVyc2lvbiB2KVxuICBpblxuICBDb25zb2xlLmluZm9cbiAgICBbXG4gICAgICBcIlVwZ3JhZGluZyBpbmRleGVkX2RiIHNjaGVtYSBmcm9tIHZlcnNpb25cIjsgb2xkX3ZlcnNpb247IFwidG9cIjsgbmV3X3ZlcnNpb247XG4gICAgXTtcbiAgbGV0IGRiID0gUmVxdWVzdC5yZXN1bHQgcSBpblxuICBsZXQgbGlzdCA9XG4gICAgRGF0YWJhc2UuY3JlYXRlX29iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB+YXV0b19pbmNyZW1lbnQ6ZmFsc2UgZGJcbiAgaW5cbiAgbGV0IGl0ZW1zID1cbiAgICBEYXRhYmFzZS5jcmVhdGVfb2JqZWN0X3N0b3JlIChtb2R1bGUgSSkgfmF1dG9faW5jcmVtZW50OmZhbHNlIGRiXG4gIGluXG4gIGxldCB2aXJ0dWFsX2ZvbGRlcnMgPVxuICAgIERhdGFiYXNlLmNyZWF0ZV9vYmplY3Rfc3RvcmUgKG1vZHVsZSBWRikgfmF1dG9faW5jcmVtZW50OmZhbHNlIGRiXG4gIGluXG4gIGxldCBpbmRleF9kYXRlX2FkZGVkID1cbiAgICBJLmNyZWF0ZV9pbmRleCAobW9kdWxlIFN0b3Jlcy5JdGVtc0J5RGF0ZUFkZGVkKSBpdGVtc1xuICBpblxuICBsZXQgXyA9IEkuY3JlYXRlX2luZGV4IChtb2R1bGUgU3RvcmVzLkl0ZW1zQnlUeXBlQW5kTmFtZSkgaXRlbXMgaW5cbiAgbGV0IF8gPSBJLmNyZWF0ZV9pbmRleCAobW9kdWxlIFN0b3Jlcy5JdGVtc0J5Vmlld0FuZEtpbmQpIGl0ZW1zIGluXG4gIGxldCBfID0gSS5jcmVhdGVfaW5kZXggKG1vZHVsZSBTdG9yZXMuSXRlbXNCeUlkKSBpdGVtcyBpblxuICBDb25zb2xlLmluZm9cbiAgICBbIFwiU3RvcmVzIGNyZWF0ZWQ6XCI7IGxpc3Q7IGl0ZW1zOyBpbmRleF9kYXRlX2FkZGVkOyB2aXJ0dWFsX2ZvbGRlcnMgXVxuXG5sZXQgd2l0aF9pZGIgP3ZlcnNpb24gfm5hbWUgZiA9XG4gIGxldCBvcGVuIEJycl9pby5JbmRleGVkX2RiIGluXG4gIGxldCBmIF9ldiBkYnIgPVxuICAgIGxldCBkYiA9IFJlcXVlc3QucmVzdWx0IGRiciBpblxuICAgIGYgZGJcbiAgaW5cbiAgZ2V0X2ZhY3RvcnkgKClcbiAgfD4gRmFjdG9yeS5vcGVuJyB+bmFtZSA/dmVyc2lvblxuICB8PiBPcGVuX2RiX3JlcXVlc3Qub25fdXBncmFkZV9uZWVkZWQgfmY6b25fdXBncmFkZV9uZWVkZWRcbiAgfD4gUmVxdWVzdC5vbl9zdWNjZXNzIH5mIHw+IGlnbm9yZVxuIiwib3BlbiEgU3RkXG5vcGVuIERiLldvcmtlcl9hcGlcbm9wZW4gQnJyZXJcbm9wZW4hIEJyclxubW9kdWxlIElEQiA9IEJycl9pby5JbmRleGVkX2RiXG5tb2R1bGUgSVMgPSBEYi5JdGVtX3N0b3JlXG5cbmxldCAoKSA9IFJhbmRvbS5zZWxmX2luaXQgKClcblxubGV0IG1hcF9lcnJvciBmID1cbiAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICBsZXQrIGYgPSBmIGluXG4gIFJlc3VsdC5tYXBfZXJyIChmdW4ganYgLT4gYEp2IGp2KSBmXG5cbmxldCBhc19mdXQgcSA9IElEQi5SZXF1ZXN0LmZ1dCBxIHw+IG1hcF9lcnJvclxuXG5sZXQgZnV0X29mX2FycmF5IChmcyA6ICdhIEZ1dC50IGFycmF5KSA6ICdhIGFycmF5IEZ1dC50ID1cbiAgbGV0IGZ1dCBwID0gSnYub2JqIFt8IChcImZ1dFwiLCBwKSB8XSBpblxuICBsZXQgcHJvbWlzZScgZiA9IEp2LmdldCAoSnYucmVwciBmKSBcImZ1dFwiIGluXG4gIGxldCBhcnIgPSBKdi5vZl9hcnJheSBwcm9taXNlJyBmcyBpblxuICBsZXQgYWxsID0gSnYuUHJvbWlzZS5hbGwgYXJyIGluXG4gIGxldCB0b19hcnJheSBsID0gSnYuUHJvbWlzZS5yZXNvbHZlIChKdi50b19hcnJheSBPYmoubWFnaWMgbCkgaW5cbiAgT2JqLm1hZ2ljIEBAIGZ1dCBAQCBKdi5Qcm9taXNlLmJpbmQgYWxsIHRvX2FycmF5XG5cbm1vZHVsZSBXb3JrZXIgKCkgPSBzdHJ1Y3RcbiAgbGV0IGNoZWNrX2RiIGlkYiBzb3VyY2UgPVxuICAgIGxldCBzZXJ2ZXJfaWQsIHNvdXJjZSA9IHNvdXJjZSBpblxuICAgIGxldCByZXBvcnQgc3RhdHVzID1cbiAgICAgIGRpc3BhdGNoX2V2ZW50IFNlcnZlcnNfc3RhdHVzX3VwZGF0ZSAoc2VydmVyX2lkLCBzdGF0dXMpXG4gICAgaW5cbiAgICBEYi5TeW5jLmNoZWNrX2FuZF9zeW5jIH5yZXBvcnQgfnNvdXJjZSBpZGJcblxuICBsZXQgaWRiID1cbiAgICBsZXQgaWRiLCBzZXRfaWRiID0gRnV0LmNyZWF0ZSAoKSBpblxuICAgIGxldCBfID1cbiAgICAgIERiLndpdGhfaWRiIH5uYW1lOlwidHJhY2tzXCIgfnZlcnNpb246MSBAQCBmdW4gaWRiIC0+XG4gICAgICBpZ25vcmUgKHNldF9pZGIgQEAgT2sgaWRiKVxuICAgIGluXG4gICAgaWRiXG5cbiAgbGV0IHJlYWRfb25seV9zdG9yZSAoKSA9XG4gICAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICBsZXQrIGlkYiA9IGlkYiBpblxuICAgIElEQi5EYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgRGIuSSkgXSB+bW9kZTpSZWFkb25seSBpZGJcbiAgICB8PiBJREIuVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgRGIuSSlcblxuICBsZXQgZ2V0X3ZpZXdfa2V5cyA9XG4gICAgbGV0IHZpZXdfbWVtbyA6IChzdHJpbmcgRGIuVmlldy5zZWxlY3Rpb24sIElTLkNvbnRlbnQuS2V5LnQgYXJyYXkpIEhhc2h0YmwudFxuICAgICAgICA9XG4gICAgICBIYXNodGJsLmNyZWF0ZSA2NFxuICAgIGluXG4gICAgbGV0IGxhc3RfdmlldyA6IChpbnQgKiBJUy5Db250ZW50LktleS50IGFycmF5KSByZWYgPSByZWYgKC0xLCBbfHxdKSBpblxuICAgIGZ1biBzdG9yZSB7IERiLlZpZXcua2luZCA9IF87IHNyY192aWV3czsgc29ydCA9IF87IGZpbHRlcnMgfSAtPlxuICAgICAgKCogdG9kbzogc3RhZ2VkIG1lbW9pemF0aW9uICsgc3BlY2lhbGl6ZWQgcXVlcmllcyB1c2luZyBpbmRleGVzICopXG4gICAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgICAgbGV0IGhhc2ggPSBIYXNodGJsLmhhc2ggKHNyY192aWV3cywgZmlsdGVycykgaW5cbiAgICAgIGlmIEludC5lcXVhbCAoZnN0ICFsYXN0X3ZpZXcpIGhhc2ggdGhlbiBGdXQub2sgKHNuZCAhbGFzdF92aWV3KVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgaWR4ID0gSVMuaW5kZXggKG1vZHVsZSBJUy5JbmRleC5LaW5kX1ZpZXcpIHN0b3JlIGluXG4gICAgICAgIGxldCsga2V5cyA9XG4gICAgICAgICAgdHJ5IEZ1dC5vayBAQCBIYXNodGJsLmZpbmQgdmlld19tZW1vIHNyY192aWV3c1xuICAgICAgICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICAgICAgICBsZXQrIGFsbF9rZXlzID1cbiAgICAgICAgICAgICAgbGV0IGxvd2VyID0gSnYub2ZfYXJyYXkgSnYub2Zfc3RyaW5nIFt8IFwiQXVkaW9cIiB8XSBpblxuICAgICAgICAgICAgICBsZXQgdXBwZXIgPSBKdi5vZl9hcnJheSBKdi5vZl9zdHJpbmcgW3wgXCJBdWRpb1xcdXswfVwiIHxdIGluXG4gICAgICAgICAgICAgIGxldCBxdWVyeSA9XG4gICAgICAgICAgICAgICAgSURCLktleV9yYW5nZS5ib3VuZCB+bG93ZXIgfnVwcGVyIH5sb3dlcl9vcGVuOnRydWVcbiAgICAgICAgICAgICAgICAgIH51cHBlcl9vcGVuOmZhbHNlICgpXG4gICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgIElTLkluZGV4LktpbmRfVmlldy5nZXRfYWxsX2tleXMgfnF1ZXJ5IGlkeCB8PiBhc19mdXRcbiAgICAgICAgICAgIGluXG4gICAgICAgICAgICBsZXQga2V5cyA9XG4gICAgICAgICAgICAgIG1hdGNoIHNyY192aWV3cyB3aXRoXG4gICAgICAgICAgICAgIHwgQWxsIC0+IGFsbF9rZXlzXG4gICAgICAgICAgICAgIHwgT25seSBzcmNfdmlld3MgLT5cbiAgICAgICAgICAgICAgICAgIEFycmF5LmZpbHRlciBhbGxfa2V5cyB+ZjooZnVuIChfLCBfc24sIHZpZXdzKSAtPlxuICAgICAgICAgICAgICAgICAgICAgIExpc3QuZXhpc3RzIHZpZXdzIH5mOihmdW4gdiAtPiBMaXN0Lm1lbXEgdiB+c2V0OnNyY192aWV3cykpXG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgSGFzaHRibC5hZGQgdmlld19tZW1vIHNyY192aWV3cyBrZXlzO1xuICAgICAgICAgICAga2V5c1xuICAgICAgICBpblxuICAgICAgICBsZXQga2V5cyA9XG4gICAgICAgICAgbWF0Y2ggZmlsdGVycyB3aXRoXG4gICAgICAgICAgfCBbIFNlYXJjaCBzdWIgXSB3aGVuIG5vdCAoU3RyaW5nLmlzX2VtcHR5IHN1YikgLT5cbiAgICAgICAgICAgICAgbGV0IHN1YiA9IFN0cmluZy5sb3dlcmNhc2VfYXNjaWkgc3ViIGluXG4gICAgICAgICAgICAgIEFycmF5LmZpbHRlciBrZXlzIH5mOihmdW4gKF8sIHNvcnRfbmFtZSwgXykgLT5cbiAgICAgICAgICAgICAgICAgIGxldCBzb3J0X25hbWUgPSBTdHJpbmcubG93ZXJjYXNlX2FzY2lpIHNvcnRfbmFtZSBpblxuICAgICAgICAgICAgICAgICAgbGV0IHBhdHRlcm4gPSBTdHJpbmcuRmluZC5jb21waWxlIChQcmludGYuc3ByaW50ZiBcIiVzXCIgc3ViKSBpblxuICAgICAgICAgICAgICAgICAgU3RyaW5nLkZpbmQuZmluZCB+cGF0dGVybiBzb3J0X25hbWUgPj0gMClcbiAgICAgICAgICB8IF8gLT4ga2V5c1xuICAgICAgICBpblxuICAgICAgICBsYXN0X3ZpZXcgOj0gKGhhc2gsIGtleXMpO1xuICAgICAgICBrZXlzXG5cbiAgbGV0IG9uX3F1ZXJ5ICh0eXBlIGEpIChxIDogYSBxdWVyeSkgOiAoYSwgZXJyb3IpIEZ1dC5yZXN1bHQgPVxuICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgbWF0Y2ggcSB3aXRoXG4gICAgfCBBZGRfc2VydmVycyBsIC0+XG4gICAgICAgIGxldCogaWRiID0gaWRiIGluXG4gICAgICAgIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgICAgICAgbGV0KyByZXMgPSBjaGVja19kYiBpZGIgKExpc3QuaGQgbCkgaW5cbiAgICAgICAgUmVzdWx0Lm1hcF9lcnIgKGZ1biBqdiAtPiBgSnYganYpIHJlc1xuICAgIHwgR2V0X2FsbCAoKSAtPlxuICAgICAgICBsZXQqIHN0b3JlID0gcmVhZF9vbmx5X3N0b3JlICgpIGluXG4gICAgICAgIGxldCsgcmVxID0gRGIuSS5nZXRfYWxsIHN0b3JlIHw+IGFzX2Z1dCBpblxuICAgICAgICBBcnJheS5tYXAgfmY6KGZ1biBpIC0+IGkuRGIuU3RvcmVzLkl0ZW1zLml0ZW0pIHJlcSB8PiBBcnJheS50b19saXN0XG4gICAgfCBHZXRfc2VydmVyX2xpYnJhcmllcyBzZXJ2ZXJfaWQnIC0+XG4gICAgICAgIGxldCogc3RvcmUgPSByZWFkX29ubHlfc3RvcmUgKCkgaW5cbiAgICAgICAgbGV0IGluZGV4ID0gSVMuKGluZGV4IChtb2R1bGUgSVMuSW5kZXguVHlwZV9OYW1lKSBzdG9yZSkgaW5cbiAgICAgICAgbGV0IGxvd2VyID0gSnYub2ZfYXJyYXkgSnYub2Zfc3RyaW5nIFt8IFwibXVzaWNcIiB8XSBpblxuICAgICAgICBsZXQgdXBwZXIgPSBKdi5vZl9hcnJheSBKdi5vZl9zdHJpbmcgW3wgXCJtdXNpY1xcdXswfVwiIHxdIGluXG4gICAgICAgIGxldCBxdWVyeSA9XG4gICAgICAgICAgSURCLktleV9yYW5nZS5ib3VuZCB+bG93ZXIgfnVwcGVyIH5sb3dlcl9vcGVuOnRydWUgfnVwcGVyX29wZW46ZmFsc2VcbiAgICAgICAgICAgICgpXG4gICAgICAgIGluXG4gICAgICAgIGxldCoga2V5cyA9IElTLkluZGV4LlR5cGVfTmFtZS5nZXRfYWxsX2tleXMgfnF1ZXJ5IGluZGV4IHw+IGFzX2Z1dCBpblxuICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgIGxldCsgaXRlbXMgPVxuICAgICAgICAgIExpc3QubWFwIChBcnJheS50b19saXN0IGtleXMpIH5mOihmdW4gayAtPiBJUy5nZXQgayBzdG9yZSB8PiBhc19mdXQpXG4gICAgICAgICAgfD4gRnV0Lm9mX2xpc3RcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGl0ZW1zID1cbiAgICAgICAgICBSZXN1bHQuZmxhdHRlbl9sIGl0ZW1zXG4gICAgICAgICAgfD4gUmVzdWx0Lm1hcFxuICAgICAgICAgICAgICAgKExpc3QuZmlsdGVyX21hcCB+ZjooZnVuY3Rpb25cbiAgICAgICAgICAgICAgICAgfCBTb21lICh7IERiLlN0b3Jlcy5JdGVtcy5pdGVtID0geyBzZXJ2ZXJfaWQ7IF8gfTsgXyB9IGFzIGl0ZW0pXG4gICAgICAgICAgICAgICAgICAgd2hlbiBTdHJpbmcuZXF1YWwgc2VydmVyX2lkIHNlcnZlcl9pZCcgLT5cbiAgICAgICAgICAgICAgICAgICAgIFNvbWUgaXRlbVxuICAgICAgICAgICAgICAgICB8IFNvbWUgXyB8IE5vbmUgLT4gTm9uZSkpXG4gICAgICAgIGluXG4gICAgICAgIGl0ZW1zXG4gICAgfCBHZXRfbGlicmFyaWVzICgpIC0+XG4gICAgICAgIGxldCogc3RvcmUgPSByZWFkX29ubHlfc3RvcmUgKCkgaW5cbiAgICAgICAgbGV0IGluZGV4ID0gSVMuKGluZGV4IChtb2R1bGUgSVMuSW5kZXguVHlwZV9OYW1lKSBzdG9yZSkgaW5cbiAgICAgICAgbGV0IGxvd2VyID0gSnYub2ZfYXJyYXkgSnYub2Zfc3RyaW5nIFt8IFwibXVzaWNcIiB8XSBpblxuICAgICAgICBsZXQgdXBwZXIgPSBKdi5vZl9hcnJheSBKdi5vZl9zdHJpbmcgW3wgXCJtdXNpY1xcdXswfVwiIHxdIGluXG4gICAgICAgIGxldCBxdWVyeSA9XG4gICAgICAgICAgSURCLktleV9yYW5nZS5ib3VuZCB+bG93ZXIgfnVwcGVyIH5sb3dlcl9vcGVuOnRydWUgfnVwcGVyX29wZW46ZmFsc2VcbiAgICAgICAgICAgICgpXG4gICAgICAgIGluXG4gICAgICAgIGxldCoga2V5cyA9IElTLkluZGV4LlR5cGVfTmFtZS5nZXRfYWxsX2tleXMgfnF1ZXJ5IGluZGV4IHw+IGFzX2Z1dCBpblxuICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgIGxldCsgaXRlbXMgPVxuICAgICAgICAgIExpc3QubWFwIChBcnJheS50b19saXN0IGtleXMpIH5mOihmdW4gayAtPiBJUy5nZXQgayBzdG9yZSB8PiBhc19mdXQpXG4gICAgICAgICAgfD4gRnV0Lm9mX2xpc3RcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGl0ZW1zID1cbiAgICAgICAgICBSZXN1bHQuZmxhdHRlbl9sIGl0ZW1zXG4gICAgICAgICAgfD4gUmVzdWx0Lm1hcCAoZnVuIGwgLT5cbiAgICAgICAgICAgICAgICAgTGlzdC5tYXAgbCB+ZjooT3B0aW9uLmdldF9leG5fb3IgXCJJdGVtIHNob3VsZCBleGlzdHMuXCIpKVxuICAgICAgICBpblxuICAgICAgICBpdGVtc1xuICAgIHwgQ3JlYXRlX3ZpZXcgcmVxdWVzdCAtPlxuICAgICAgICBsZXQgdXVpZCA9IG5ld191dWlkX3Y0ICgpIGluXG4gICAgICAgIGxldCogc3RvcmUgPSByZWFkX29ubHlfc3RvcmUgKCkgaW5cbiAgICAgICAgbGV0KyBrZXlzID0gZ2V0X3ZpZXdfa2V5cyBzdG9yZSByZXF1ZXN0IGluXG4gICAgICAgIGxldCBpdGVtX2NvdW50ID0gQXJyYXkubGVuZ3RoIGtleXMgaW5cbiAgICAgICAgbGV0IG9yZGVyID0gRGIuVmlldy5PcmRlci5vZl9zb3J0IH5zaXplOml0ZW1fY291bnQgcmVxdWVzdC5zb3J0IGluXG4gICAgICAgIHsgRGIuVmlldy51dWlkOyByZXF1ZXN0OyBvcmRlcjsgc3RhcnRfb2Zmc2V0ID0gMDsgaXRlbV9jb3VudCB9XG4gICAgfCBHZXQgKHZpZXcsIGluZGV4ZXMpIC0+XG4gICAgICAgICgqIFRoaXMgcmVxdWVzdCBpcyBjcml0aWNhbCB0byB2aXJ0dWFsIGxpc3RzIHBlcmZvcm1hbmNlcyBhbmQgc2hvdWxkXG4gICAgICAgICAgIGJlIGFzIGZhc3QgYXMgcG9zc2libGUuICopXG4gICAgICAgIGxldCogc3RvcmUgPSByZWFkX29ubHlfc3RvcmUgKCkgaW5cbiAgICAgICAgbGV0KiBrZXlzID0gZ2V0X3ZpZXdfa2V5cyBzdG9yZSB2aWV3LnJlcXVlc3QgaW5cbiAgICAgICAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICAgICAgICBsZXQrIHJlc3VsdHMgPVxuICAgICAgICAgIEFycmF5Lm1hcCBpbmRleGVzIH5mOihmdW4gaW5kZXggLT5cbiAgICAgICAgICAgICAgdHJ5XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gaW5kZXggKyB2aWV3LnN0YXJ0X29mZnNldCBpblxuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IERiLlZpZXcuT3JkZXIuYXBwbHkgdmlldy5vcmRlciBpbmRleCBpblxuICAgICAgICAgICAgICAgICgqIFRoaXMgY291bGQgYmUgb3B0aW1pemUgd2hlbiBhY2Nlc3MgaXMgc2VxdWVudGlhbCAqKVxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzLihpbmRleCkgaW5cbiAgICAgICAgICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgICAgICAgICAgbGV0KyByZXN1bHQgPSBJUy5nZXQga2V5IHN0b3JlIHw+IElEQi5SZXF1ZXN0LmZ1dCBpblxuICAgICAgICAgICAgICAgIG1hdGNoIHJlc3VsdCB3aXRoXG4gICAgICAgICAgICAgICAgfCBPayBOb25lIC0+IE5vbmVcbiAgICAgICAgICAgICAgICB8IEVycm9yIGVyciAtPlxuICAgICAgICAgICAgICAgICAgICBDb25zb2xlLmVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgWyBcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgbG9hZGluZyBpdGVtXCI7IGtleTsgZXJyIF07XG4gICAgICAgICAgICAgICAgICAgIE5vbmVcbiAgICAgICAgICAgICAgICB8IE9rIChTb21lIHYpIC0+IFNvbWUgdlxuICAgICAgICAgICAgICB3aXRoIF8gLT4gRnV0LnJldHVybiBOb25lKVxuICAgICAgICAgIHw+IGZ1dF9vZl9hcnJheVxuICAgICAgICBpblxuICAgICAgICBPayByZXN1bHRzXG5lbmRcblxuaW5jbHVkZSBNYWtlX3dvcmtlciAoV29ya2VyKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFbnN1cmUgdGhhdCBbYXRfZXhpdF0gZnVuY3Rpb25zIGFyZSBjYWxsZWQgYXQgdGhlIGVuZCBvZiBldmVyeSBwcm9ncmFtICopXG5cbmxldCBfID0gZG9fYXRfZXhpdCgpXG4iXX0= diff --git a/main.bc.js b/main.bc.js index e0a18e4..ab0cb20 100644 --- a/main.bc.js +++ b/main.bc.js @@ -1,4683 +1,18138 @@ // Generated by js_of_ocaml //# buildInfo:effects=false, kind=exe, use-js-string=true, version=5.7.2+5.7.2 -(function(a){typeof -globalThis!=="object"&&(this?b():(a.defineProperty(a.prototype,"_T_",{configurable:true,get:b}),_T_));function -b(){var -b=this||self;b.globalThis=b;delete -a.prototype._T_}}(Object));(function(v){"use strict";var -av="0",de="unexpected character '",nB="console",oj="duration",fp="int_of_string",mS="%u",nA="ImageBlurHashes",o5="%a",o6="%ni",bh=0xff,mR="Series",nz=240,mP="LiveTvProgram",mQ=0x7ff0,o4=218,mO="End_of_file",o1=19067,o2="Pw",o3="Out_of_memory",E=963043957,bX=870828711,oi="AlbumId",h3="Failure",ny=19279,fo="Unix.Unix_error",og=NaN,oh="^",fn="\\b",mN="text",nx="length",of="Audio",fa=-375152890,hr="null",hS="ENOTDIR",o0="Program",hR=17732,ct="+",h2="false",oZ=", characters ",cm=726928360,oe=308570827,h1=869834347,nw="SortName",mM=858694086,nv="MusicArtist",aM=928231259,od="",hQ=125,oc="Pervasives.do_at_exit",nu="ChannelFolderItem",hq=65536,mL=945120947,hP=0xf,nt="closedir",oY="Match_failure",ns=-32,oX="%s",nr="MusicAlbum",e="",nq="Year",ob="Photo",mK="infinity",mJ="CollectionFolder",oa="fd ",np="append",fg="Id",bW=": ",fk=874173192,mI="Playlist",mH="em",no=0xe0,hO='\\"',n$=0xf0,mF="5rem",mG="Sys_error",aL=0x80,n_=297481262,oW="EEXIST",n9="PhotoAlbum",mE=1073741823,nn="px",hN="e",hM="ENOENT",oV="Locations",nm="Undefined_recursive_module",e$="NaN",nl=2147483647,n8=-Infinity,ff="\\t",cs="item",oU=224,a0=0x8000,mD=0x800,n7="playbackRate",mC="@{",n6="Division_by_zero",mA="MusicGenre",mB="(Program not linked with -g, cannot print stack backtrace)\n",n4="track.png",n5="Channel",hL="variants not supported in yojson basic mode",bA=0x3f,nk=297481260,mz=110,hp=" : file already exists",n3=101,oT=297481263,aF="'",Q=128,oS="<",fm=": No such file or directory",my="vendor/lwd/lib/brr-lwd/elwd.ml",_=255,bV=256,bT="id",dd=100,d=-976970511,l=848054398,nj="height: ",fj="click",dh="Infinity",oR=383,h0=":",c$="true",ni=")",oQ="grid-column:1/-1",mx=102,n2="box",hK=-97,oP="Printexc.handle_uncaught_exception",oO="Type",hZ=" : flags Open_rdonly and Open_wronly are not compatible",hA=123,oN="item.Id",hz=148000204,mw=199,hY="sorts",oM="LiveTvChannel",oL="Genre",hy=">",n1="([^/]+)",cp="Name",n0=759637122,ho="sort_name",co=127,a2=0xffff,mv="documentElement",nh="Sys_blocked_io",nZ=308570829,nY="MusicVideo",ng=Infinity,nX="Form submitted:",oJ="ServerName",oK="_",aD=748194550,fi="\\n",oI="AggregateFolder",fe="_bigarr02",cr=3850876,hx="\\f",aE=" ",hX="compare: functional value",hw="mkdir",dg=1000,ai="vendor/lwd/lib/lwd/lwd_seq.pp.ml",nf="@[",fl="\\\\",oG="window",oH="Primary",hn="fs",nd=308570828,ne="BoxSet",hW=14596,oF="/static/",oE="empty input",nW="%i",df="lib/db/stores.ml",nc="Assert_failure",oD=18847,fd=3900603,nV="0x",hm=14610,oC="Movie",nU=0xdfff,ar=365180284,oB="OCAMLRUNPARAM",nT=": closedir failed",hJ=17718,cl="ServerId",nR="pouet",nS="Not_found",oA=".0",hI="\\u00",nP="style",nQ="Studio",hH="button",hV="views",nb="src",cw="",hG="tuples not supported in yojson basic mode",m$=18833,na="Lwd_seq.rank: node is marked",nO="%Li",oz="Recording",mu="Invalid_argument",fh=254,fc="Set.bal",bg=0xffffff,m_=120,m9=1027,cn=1024,m7=246,m8="(",mt="Trailer",m6="Season",nN="Video",ms="submit",oy=3456156,mr=308570830,e_=512,bU=-752863768,hF=", ",ox="AccessToken",ow=297481261,mp="%li",mq=1026,nM="Cover",m5="%s/Items/%s/Images/Primary?width=500&format=Jpg",nL="BasePluginFolder",hl="/Items/",mo="b",mn="Person",e9="\\r",hk="nan",hj="rmdir",hv="Fatal error: exception ",V="camlinternalFormat.ml",ov="@;<1 -2>",cv=708012133,m4=308569555,mm=174,z=248,cu=24029,ml="User",hu="ItemId",ht="date_added",ou="ENOTEMPTY",hU=1255,hi="value",hE=" : flags Open_text and Open_binary are not compatible",m2="Book",m3="Stack_overflow",hD=": Not a directory",nK="Nothing playing",da="-Infinity",ot="junk after end of JSON value: ",m1="Path",os="@;<1 0>",hT=-48,mk=" : is a directory",hC="error",hh="classList",bz=".",or="TvProgram",nJ="/Images/Primary?width=500&format=Jpg",mj="CollectionType",dc="name",oq="Folder",bS=737456202,fb=-10,hB="server_id",m0="UserView",op=193,e8="lwd-to-remove",bf=",",mi="checked",mZ="ParentId",hg="index out of bounds",a1="/",db=252,oo="body",hf="%d",bB=3654863,on="Episode",nH="PlaylistsFolder",nI=": file descriptor already closed",bY="-",he="EBADF",mY=19293,om="Title",nG=12520,a="vendor/lwd/lib/lwd/lwd_table.ml",nF="Username",mh="items_by_date_added",mX="Fatal error: exception %s\n",ol="sorts.views",c_=250,mW="input",hs="jsError",hd=103,cq='"',nE=0xdc00,H="vendor/lwd/lib/lwd/lwd.ml",nD="TvChannel",mV="UserRootFolder",nC="buffer.ml",ok="AudioBook",mg="target",mT="ManualPlaylistsFolder",mU="rem";function -Io(a,b,c,d,e){if(d<=b)for(var -f=1;f<=e;f++)c[d+f]=a[b+f];else -for(var -f=e;f>=1;f--)c[d+f]=a[b+f];return 0}function -Ip(a,b,c,d){for(var -e=0;e=c.l||c.t==2&&e>=c.c.length)){c.c=a.t==4?dy(a.c,b,e):b==0&&a.c.length==e?a.c:a.c.substr(b,e);c.t=c.c.length==c.l?0:2}else if(c.t==2&&d==c.c.length){c.c+=a.t==4?dy(a.c,b,e):b==0&&a.c.length==e?a.c:a.c.substr(b,e);c.t=c.c.length==c.l?0:2}else{if(c.t!=4)fs(c);var -g=a.c,h=c.c;if(a.t==4)if(d<=b)for(var -f=0;f=0;f--)h[d+f]=g[b+f];else{var -i=Math.min(e,g.length-b);for(var -f=0;f>=1;if(a==0)return d;b+=b;c++;if(c==9)b.slice(0,1)}}function -dm(a){if(a.t==2)a.c+=cA(a.l-a.c.length,"\0");else -a.c=dy(a.c,0,a.c.length);a.t=0}function -ip(a){if(a.length<24){for(var -b=0;bco)return false;return true}else -return!/[^\x00-\x7f]/.test(a)}function -py(a){for(var -k=e,d=e,h,g,i,b,c=0,j=a.length;ce_){d.substr(0,1);k+=d;d=e;k+=a.slice(c,f)}else -d+=a.slice(c,f);if(f==j)break;c=f}b=1;if(++c=0xd7ff&&b<0xe000)b=2}else{b=3;if(++c0x10ffff)b=3}}}}}if(b<4){c-=b;d+="\ufffd"}else if(b>a2)d+=String.fromCharCode(0xd7c0+(b>>10),nE+(b&0x3FF));else -d+=String.fromCharCode(b);if(d.length>cn){d.substr(0,1);k+=d;d=e}}return k+d}function -bi(a,b,c){this.t=a;this.c=b;this.l=c}bi.prototype.toString=function(){switch(this.t){case -9:return this.c;default:dm(this);case -0:if(ip(this.c)){this.t=9;return this.c}this.t=8;case -8:return this.c}};bi.prototype.toUtf16=function(){var -a=this.toString();if(this.t==9)return a;return py(a)};bi.prototype.slice=function(){var -a=this.t==4?this.c.slice():this.c;return new -bi(this.t,a,this.l)};function -pc(a){return new -bi(0,a,a.length)}function -aU(a){return a}function -bD(a){return pc(aU(a))}function -a3(a,b,c,d,e){bj(bD(a),b,c,d,e);return 0}function -pA(a){var -b=v.process;if(b&&b.env&&b.env[a]!=undefined)return b.env[a];if(v.jsoo_static_env&&v.jsoo_static_env[a])return v.jsoo_static_env[a]}var -il=0;(function(){var -c=pA(oB);if(c!==undefined){var -b=c.split(bf);for(var -a=0;a>>0>=a.l)Iu();return x(a,b,c)}function -h6(a,b){switch(a.t&6){default:if(b>=a.c.length)return 0;case -0:return a.c.charCodeAt(b);case -4:return a.c[b]}}function -bk(d,c){var -f=d.l>=0?d.l:d.l=d.length,e=c.length,b=f-e;if(b==0)return d.apply(null,c);else if(b<0){var -a=d.apply(null,c.slice(0,f));if(typeof -a!=="function")return a;return bk(a,c.slice(f))}else{switch(b){case -1:{var -a=function(a){var -f=new -Array(e+1);for(var -b=0;b>>0>=a.length-1)dj();return a}function -dk(a){if(isFinite(a)){if(Math.abs(a)>=2.2250738585072014e-308)return 0;if(a!=0)return 1;return 2}return isNaN(a)?4:3}function -pl(a){return 0}var -Jt=Math.log2&&Math.log2(1.1235582092889474E+307)==1020;function -Js(a){if(Jt)return Math.floor(Math.log2(a));var -b=0;if(a==0)return-Infinity;if(a>=1)while(a>=2){a/=2;b++}else -while(a<1){a*=2;b--}return b}function -h$(a){var -b=new -Float32Array(1);b[0]=a;var -c=new -Int32Array(b.buffer);return c[0]|0}var -pi=Math.pow(2,-24);function -pt(a){throw a}function -ik(){pt(aa.Division_by_zero)}function -o(a,b,c){this.lo=a&bg;this.mi=b&bg;this.hi=c&a2}o.prototype.caml_custom="_j";o.prototype.copy=function(){return new -o(this.lo,this.mi,this.hi)};o.prototype.ucompare=function(a){if(this.hi>a.hi)return 1;if(this.hia.mi)return 1;if(this.mia.lo)return 1;if(this.loc)return 1;if(ba.mi)return 1;if(this.mia.lo)return 1;if(this.lo>24),c=-this.hi+(b>>24);return new -o(a,b,c)};o.prototype.add=function(a){var -b=this.lo+a.lo,c=this.mi+a.mi+(b>>24),d=this.hi+a.hi+(c>>24);return new -o(b,c,d)};o.prototype.sub=function(a){var -b=this.lo-a.lo,c=this.mi-a.mi+(b>>24),d=this.hi-a.hi+(c>>24);return new -o(b,c,d)};o.prototype.mul=function(a){var -b=this.lo*a.lo,c=(b*pi|0)+this.mi*a.lo+this.lo*a.mi,d=(c*pi|0)+this.hi*a.lo+this.mi*a.mi+this.lo*a.hi;return new -o(b,c,d)};o.prototype.isZero=function(){return(this.lo|this.mi|this.hi)==0};o.prototype.isNeg=function(){return this.hi<<16<0};o.prototype.and=function(a){return new -o(this.lo&a.lo,this.mi&a.mi,this.hi&a.hi)};o.prototype.or=function(a){return new -o(this.lo|a.lo,this.mi|a.mi,this.hi|a.hi)};o.prototype.xor=function(a){return new -o(this.lo^a.lo,this.mi^a.mi,this.hi^a.hi)};o.prototype.shift_left=function(a){a=a&63;if(a==0)return this;if(a<24)return new -o(this.lo<>24-a,this.hi<>24-a);if(a<48)return new -o(0,this.lo<>48-a);return new -o(0,0,this.lo<>a|this.mi<<24-a,this.mi>>a|this.hi<<24-a,this.hi>>a);if(a<48)return new -o(this.mi>>a-24|this.hi<<48-a,this.hi>>a-24,0);return new -o(this.hi>>a-48,0,0)};o.prototype.shift_right=function(a){a=a&63;if(a==0)return this;var -c=this.hi<<16>>16;if(a<24)return new -o(this.lo>>a|this.mi<<24-a,this.mi>>a|c<<24-a,this.hi<<16>>a>>>16);var -b=this.hi<<16>>31;if(a<48)return new -o(this.mi>>a-24|this.hi<<48-a,this.hi<<16>>a-24>>16,b&a2);return new -o(this.hi<<16>>a-32,b,b)};o.prototype.lsl1=function(){this.hi=this.hi<<1|this.mi>>23;this.mi=(this.mi<<1|this.lo>>23)&bg;this.lo=this.lo<<1&bg};o.prototype.lsr1=function(){this.lo=(this.lo>>>1|this.mi<<23)&bg;this.mi=(this.mi>>>1|this.hi<<23)&bg;this.hi=this.hi>>>1};o.prototype.udivmod=function(a){var -d=0,c=this.copy(),b=a.copy(),e=new -o(0,0,0);while(c.ucompare(b)>0){d++;b.lsl1()}while(d>=0){d--;e.lsl1();if(c.ucompare(b)>=0){e.lo++;c=c.sub(b)}b.lsr1()}return{quotient:e,modulus:c}};o.prototype.div=function(a){var -b=this;if(a.isZero())ik();var -d=b.hi^a.hi;if(b.hi&a0)b=b.neg();if(a.hi&a0)a=a.neg();var -c=b.udivmod(a).quotient;if(d&a0)c=c.neg();return c};o.prototype.mod=function(a){var -b=this;if(a.isZero())ik();var -d=b.hi;if(b.hi&a0)b=b.neg();if(a.hi&a0)a=a.neg();var -c=b.udivmod(a).modulus;if(d&a0)c=c.neg();return c};o.prototype.toInt=function(){return this.lo|this.mi<<24};o.prototype.toFloat=function(){return(this.hi<<16)*Math.pow(2,32)+this.mi*Math.pow(2,24)+this.lo};o.prototype.toArray=function(){return[this.hi>>8,this.hi&bh,this.mi>>16,this.mi>>8&bh,this.mi&bh,this.lo>>16,this.lo>>8&bh,this.lo&bh]};o.prototype.lo32=function(){return this.lo|(this.mi&bh)<<24};o.prototype.hi32=function(){return this.mi>>>8&a2|this.hi<<16};function -fv(a,b,c){return new -o(a,b,c)}function -fu(a){if(!isFinite(a)){if(isNaN(a))return fv(1,0,mQ);return a>0?fv(0,0,mQ):fv(0,0,0xfff0)}var -f=a==0&&1/a==-Infinity?a0:a>=0?0:a0;if(f)a=-a;var -b=Js(a)+1023;if(b<=0){b=0;a/=Math.pow(2,-mq)}else{a/=Math.pow(2,b-m9);if(a<16){a*=2;b-=1}if(b==0)a/=2}var -d=Math.pow(2,24),c=a|0;a=(a-c)*d;var -e=a|0;a=(a-e)*d;var -g=a|0;c=c&hP|f|b<<4;return fv(g,e,c)}function -dt(a){return a.toArray()}function -pb(a,b,c){a.write(32,b.dims.length);a.write(32,b.kind|b.layout<<8);if(b.caml_custom==fe)for(var -d=0;d>4;if(d==2047)return(f|g|c&hP)==0?c&a0?-Infinity:Infinity:NaN;var -e=Math.pow(2,-24),b=(f*e+g)*e+(c&hP);if(d>0){b+=16;b*=Math.pow(2,d-m9)}else -b*=Math.pow(2,-mq);if(c&a0)b=-b;return b}function -h4(a){var -d=a.length,c=1;for(var -b=0;b>>24&bh|(b&a2)<<8,b>>>16&a2)}function -ic(a){return a.hi32()}function -id(a){return a.lo32()}var -Is=fe;function -bC(a,b,c,d){this.kind=a;this.layout=b;this.dims=c;this.data=d}bC.prototype.caml_custom=Is;bC.prototype.offset=function(a){var -c=0;if(typeof -a==="number")a=[a];if(!(a -instanceof -Array))S("bigarray.js: invalid offset");if(this.dims.length!=a.length)S("Bigarray.get/set: bad number of dimensions");if(this.layout==0)for(var -b=0;b=this.dims[b])dj();c=c*this.dims[b]+a[b]}else -for(var -b=this.dims.length-1;b>=0;b--){if(a[b]<1||a[b]>this.dims[b])dj();c=c*this.dims[b]+(a[b]-1)}return c};bC.prototype.get=function(a){switch(this.kind){case -7:var -d=this.data[a*2+0],b=this.data[a*2+1];return IO(d,b);case -10:case -11:var -e=this.data[a*2+0],c=this.data[a*2+1];return[fh,e,c];default:return this.data[a]}};bC.prototype.set=function(a,b){switch(this.kind){case -7:this.data[a*2+0]=id(b);this.data[a*2+1]=ic(b);break;case -10:case -11:this.data[a*2+0]=b[1];this.data[a*2+1]=b[2];break;default:this.data[a]=b;break}return 0};bC.prototype.fill=function(a){switch(this.kind){case -7:var -c=id(a),e=ic(a);if(c==e)this.data.fill(c);else -for(var -b=0;be)return 1;if(d!=e){if(!b)return NaN;if(d==d)return 1;if(e==e)return-1}}break;case -7:for(var -c=0;ca.data[c+1])return 1;if(this.data[c]>>>0>>0)return-1;if(this.data[c]>>>0>a.data[c]>>>0)return 1}break;case -2:case -3:case -4:case -5:case -6:case -8:case -9:case -12:for(var -c=0;ca.data[c])return 1}break}return 0};function -cx(a,b,c,d){this.kind=a;this.layout=b;this.dims=c;this.data=d}cx.prototype=new -bC();cx.prototype.offset=function(a){if(typeof -a!=="number")if(a -instanceof -Array&&a.length==1)a=a[0];else -S("Ml_Bigarray_c_1_1.offset");if(a<0||a>=this.dims[0])dj();return a};cx.prototype.get=function(a){return this.data[a]};cx.prototype.set=function(a,b){this.data[a]=b;return 0};cx.prototype.fill=function(a){this.data.fill(a);return 0};function -o9(a,b,c,d){var -e=o$(a);if(h4(c)*e!=d.length)S("length doesn't match dims");if(b==0&&c.length==1&&e==1)return new -cx(a,b,c,d);return new -bC(a,b,c,d)}function -aw(a){if(!aa.Failure)aa.Failure=[z,aH(h3),-3];ij(aa.Failure,a)}function -o_(a,b,c){var -k=a.read32s();if(k<0||k>16)aw("input_value: wrong number of bigarray dimensions");var -r=a.read32s(),l=r&bh,q=r>>8&1,j=[];if(c==fe)for(var -d=0;d>>32-15;b=fz(b,0x1b873593);a^=b;a=a<<13|a>>>32-13;return(a+(a<<2)|0)+(0xe6546b64|0)|0}function -IJ(a,b){a=ab(a,id(b));a=ab(a,ic(b));return a}function -h9(a,b){return IJ(a,fu(b))}function -pa(a){var -c=h4(a.dims),d=0;switch(a.kind){case -2:case -3:case -12:if(c>bV)c=bV;var -e=0,b=0;for(b=0;b+4<=a.data.length;b+=4){e=a.data[b+0]|a.data[b+1]<<8|a.data[b+2]<<16|a.data[b+3]<<24;d=ab(d,e)}e=0;switch(c&3){case -3:e=a.data[b+2]<<16;case -2:e|=a.data[b+1]<<8;case -1:e|=a.data[b+0];d=ab(d,e)}break;case -4:case -5:if(c>Q)c=Q;var -e=0,b=0;for(b=0;b+2<=a.data.length;b+=2){e=a.data[b+0]|a.data[b+1]<<16;d=ab(d,e)}if((c&1)!=0)d=ab(d,a.data[b]);break;case -6:if(c>64)c=64;for(var -b=0;b64)c=64;for(var -b=0;b32)c=32;c*=2;for(var -b=0;b64)c=64;for(var -b=0;b32)c=32;for(var -b=0;b0?f(b,a,d):f(a,b,d);if(d&&e!=e)return c;if(+e!=+e)return+e;if((e|0)!=0)return e|0}return c}function -fx(a){return typeof -a==="string"&&!/[^\x00-\xff]/.test(a)}function -fw(a){return a -instanceof -bi}function -pe(a){if(typeof -a==="number")return dg;else if(fw(a))return db;else if(fx(a))return 1252;else if(a -instanceof -Array&&a[0]===a[0]>>>0&&a[0]<=_){var -b=a[0]|0;return b==fh?0:b}else if(a -instanceof -String)return nG;else if(typeof -a=="string")return nG;else if(a -instanceof -Number)return dg;else if(a&&a.caml_custom)return hU;else if(a&&a.compare)return 1256;else if(typeof -a=="function")return 1247;else if(typeof -a=="symbol")return 1251;return 1001}function -pj(a,b){if(ab?1:0}function -Iv(a,b){a.t&6&&dm(a);b.t&6&&dm(b);return a.cb.c?1:0}function -dl(a,b,c){var -f=[];for(;;){if(!(c&&a===b)){var -e=pe(a);if(e==c_){a=a[1];continue}var -g=pe(b);if(g==c_){b=b[1];continue}if(e!==g){if(e==dg){if(g==hU)return pd(a,b,-1,c);return-1}if(g==dg){if(e==hU)return pd(b,a,1,c);return 1}return eb)return 1;if(a!=b){if(!c)return NaN;if(a==a)return 1;if(b==b)return-1}break;case -1001:if(ab)return 1;if(a!=b){if(!c)return NaN;if(a==a)return 1;if(b==b)return-1}break;case -1251:if(a!==b){if(!c)return NaN;return 1}break;case -1252:var -a=aU(a),b=aU(b);if(a!==b){if(ab)return 1}break;case -12520:var -a=a.toString(),b=b.toString();if(a!==b){if(ab)return 1}break;case -246:case -254:default:if(pl(e)){S("compare: continuation value");break}if(a.length!=b.length)return a.length1)f.push(a,b,1);break}}if(f.length==0)return 0;var -h=f.pop();b=f.pop();a=f.pop();if(h+10)if(b==0&&(c>=a.l||a.t==2&&c>=a.c.length))if(d==0){a.c=e;a.t=2}else{a.c=cA(c,String.fromCharCode(d));a.t=c==a.l?0:2}else{if(a.t!=4)fs(a);for(c+=b;b0&&b===b)return b;a=a.replace(/_/g,e);b=+a;if(a.length>0&&b===b||/^[+-]?nan$/i.test(a))return b;var -c=/^ *([+-]?)0x([0-9a-f]+)\.?([0-9a-f]*)(p([+-]?[0-9]+))?/i.exec(a);if(c){var -d=c[3].replace(/0+$/,e),g=parseInt(c[1]+c[2]+d,16),f=(c[5]|0)-4*d.length;b=g*Math.pow(2,f);return b}if(/^\+?inf(inity)?$/i.test(a))return Infinity;if(/^-inf(inity)?$/i.test(a))return-Infinity;aw("float_of_string")}function -ii(a){a=aU(a);var -e=a.length;if(e>31)S("format_int: format too long");var -b={justify:ct,signstyle:bY,filler:aE,alternate:false,base:0,signedconv:false,width:0,uppercase:false,sign:1,prec:-1,conv:"f"};for(var -d=0;d=0&&c<=9){b.width=b.width*10+c;d++}d--;break;case".":b.prec=0;d++;while(c=a.charCodeAt(d)-48,c>=0&&c<=9){b.prec=b.prec*10+c;d++}d--;case"d":case"i":b.signedconv=true;case"u":b.base=10;break;case"x":b.base=16;break;case"X":b.base=16;b.uppercase=true;break;case"o":b.base=8;break;case"e":case"f":case"g":b.signedconv=true;b.conv=c;break;case"E":case"F":case"G":b.signedconv=true;b.uppercase=true;b.conv=c.toLowerCase();break}}return b}function -h8(a,b){if(a.uppercase)b=b.toUpperCase();var -f=b.length;if(a.signedconv&&(a.sign<0||a.signstyle!=bY))f++;if(a.alternate){if(a.base==8)f+=1;if(a.base==16)f+=2}var -c=e;if(a.justify==ct&&a.filler==aE)for(var -d=f;d20){c-=20;a/=Math.pow(10,c);a+=new -Array(c+1).join(av);if(b>0)a=a+bz+new -Array(b+1).join(av);return a}else -return a.toFixed(b)}}var -c,f=ii(a),e=f.prec<0?6:f.prec;if(b<0||b==0&&1/b==-Infinity){f.sign=-1;b=-b}if(isNaN(b)){c=hk;f.filler=aE}else if(!isFinite(b)){c="inf";f.filler=aE}else -switch(f.conv){case"e":var -c=b.toExponential(e),d=c.length;if(c.charAt(d-3)==hN)c=c.slice(0,d-1)+av+c.slice(d-1);break;case"f":c=j(b,e);break;case"g":e=e?e:1;c=b.toExponential(e-1);var -i=c.indexOf(hN),h=+c.slice(i+1);if(h<-4||b>=1e21||b.toFixed(0).length>e){var -d=i-1;while(c.charAt(d)==av)d--;if(c.charAt(d)==bz)d--;c=c.slice(0,d+1)+c.slice(i);d=c.length;if(c.charAt(d-3)==hN)c=c.slice(0,d-1)+av+c.slice(d-1);break}else{var -g=e;if(h<0){g-=h+1;c=b.toFixed(g)}else -while(c=b.toFixed(g),c.length>e+1)g--;if(g){var -d=c.length-1;while(c.charAt(d)==av)d--;if(c.charAt(d)==bz)d--;c=c.slice(0,d+1)}}break}return h8(f,c)}function -ft(a,b){if(aU(a)==hf)return aH(e+b);var -c=ii(a);if(b<0)if(c.signedconv){c.sign=-1;b=-b}else -b>>>=0;var -d=b.toString(c.base);if(c.prec>=0){c.filler=aE;var -f=c.prec-d.length;if(f>0)d=cA(f,av)+d}return h8(c,d)}var -Je=0;function -aG(){return Je++}function -D(a){if(ip(a))return a;return py(a)}function -dA(){return typeof -v.process!=="undefined"&&typeof -v.process.versions!=="undefined"&&typeof -v.process.versions.node!=="undefined"}function -Ju(){function -a(a){if(a.charAt(0)===a1)return[e,a.substring(1)];return}function -b(a){var -h=/^([a-zA-Z]:|[\\/]{2}[^\\/]+[\\/]+[^\\/]+)?([\\/])?([\s\S]*?)$/,b=h.exec(a),c=b[1]||e,f=Boolean(c&&c.charAt(1)!==h0);if(Boolean(b[2]||f)){var -d=b[1]||e,g=b[2]||e;return[d,a.substring(d.length+g.length)]}return}return dA()&&v.process&&v.process.platform?v.process.platform==="win32"?b:a:a}var -iq=Ju();function -px(a){return a.slice(-1)!==a1?a+a1:a}if(dA()&&v.process&&v.process.cwd)var -dn=v.process.cwd().replace(/\\/g,a1);else -var -dn="/static";dn=px(dn);function -I3(a){a=D(a);if(!iq(a))a=dn+a;var -e=iq(a),d=e[1].split(a1),b=[];for(var -c=0;c1)b.pop();break;case".":break;case"":break;default:b.push(d[c]);break}b.unshift(e[0]);b.orig=a;return b}function -Jr(a){for(var -g=e,c=g,b,i,d=0,h=a.length;de_){c.substr(0,1);g+=c;c=e;g+=a.slice(d,f)}else -c+=a.slice(d,f);if(f==h)break;d=f}if(b>6);c+=String.fromCharCode(aL|b&bA)}else if(b<0xd800||b>=nU)c+=String.fromCharCode(no|b>>12,aL|b>>6&bA,aL|b&bA);else if(b>=0xdbff||d+1==h||(i=a.charCodeAt(d+1))nU)c+="\xef\xbf\xbd";else{d++;b=(b<<10)+i-0x35fdc00;c+=String.fromCharCode(n$|b>>18,aL|b>>12&bA,aL|b>>6&bA,aL|b&bA)}if(c.length>cn){c.substr(0,1);g+=c;c=e}}return g+c}function -ax(a){return ip(a)?aH(a):aH(Jr(a))}var -Jv=["E2BIG","EACCES","EAGAIN",he,"EBUSY","ECHILD","EDEADLK","EDOM",oW,"EFAULT","EFBIG","EINTR","EINVAL","EIO","EISDIR","EMFILE","EMLINK","ENAMETOOLONG","ENFILE","ENODEV",hM,"ENOEXEC","ENOLCK","ENOMEM","ENOSPC","ENOSYS",hS,ou,"ENOTTY","ENXIO","EPERM","EPIPE","ERANGE","EROFS","ESPIPE","ESRCH","EXDEV","EWOULDBLOCK","EINPROGRESS","EALREADY","ENOTSOCK","EDESTADDRREQ","EMSGSIZE","EPROTOTYPE","ENOPROTOOPT","EPROTONOSUPPORT","ESOCKTNOSUPPORT","EOPNOTSUPP","EPFNOSUPPORT","EAFNOSUPPORT","EADDRINUSE","EADDRNOTAVAIL","ENETDOWN","ENETUNREACH","ENETRESET","ECONNABORTED","ECONNRESET","ENOBUFS","EISCONN","ENOTCONN","ESHUTDOWN","ETOOMANYREFS","ETIMEDOUT","ECONNREFUSED","EHOSTDOWN","EHOSTUNREACH","ELOOP","EOVERFLOW"];function -bo(a,b,c,d){var -f=Jv.indexOf(a);if(f<0){if(d==null)d=-9999;f=[0,d]}var -g=[f,ax(b||e),ax(c||e)];return g}var -pr={};function -bG(a){return pr[a]}function -bm(a,b){throw h([0,a].concat(b))}function -h5(a){if(!(a -instanceof -Uint8Array))a=new -Uint8Array(a);return new -bi(4,a,a.length)}function -r(a){ij(aa.Sys_error,a)}function -pu(a){r(a+fm)}function -dz(a){if(a.t!=4)fs(a);return a.c}function -ac(a){return a.l}function -o7(){}function -aj(a){this.data=a}aj.prototype=new -o7();aj.prototype.constructor=aj;aj.prototype.truncate=function(a){var -b=this.data;this.data=G(a|0);bj(b,0,this.data,0,a)};aj.prototype.length=function(){return ac(this.data)};aj.prototype.write=function(a,b,c,d){var -e=this.length();if(a+d>=e){var -f=G(a+d),g=this.data;this.data=f;bj(g,0,this.data,0,e)}bj(h5(b),c,this.data,a,d);return 0};aj.prototype.read=function(a,b,c,d){var -e=this.length();if(a+d>=e)d=e-a;if(d){var -f=G(d|0);bj(this.data,a,f,0,d);b.set(dz(f),c)}return d};function -bZ(a,b,c){this.file=b;this.name=a;this.flags=c}bZ.prototype.err_closed=function(){r(this.name+nI)};bZ.prototype.length=function(){if(this.file)return this.file.length();this.err_closed()};bZ.prototype.write=function(a,b,c,d){if(this.file)return this.file.write(a,b,c,d);this.err_closed()};bZ.prototype.read=function(a,b,c,d){if(this.file)return this.file.read(a,b,c,d);this.err_closed()};bZ.prototype.close=function(){this.file=undefined};function -X(a,b){this.content={};this.root=a;this.lookupFun=b}X.prototype.nm=function(a){return this.root+a};X.prototype.create_dir_if_needed=function(a){var -d=a.split(a1),c=e;for(var -b=0;b=0)}function -h_(a,b){var -e=b.length,c,d;for(c=0;c+4<=e;c+=4){d=b.charCodeAt(c)|b.charCodeAt(c+1)<<8|b.charCodeAt(c+2)<<16|b.charCodeAt(c+3)<<24;a=ab(a,d)}d=0;switch(e&3){case -3:d=b.charCodeAt(c+2)<<16;case -2:d|=b.charCodeAt(c+1)<<8;case -1:d|=b.charCodeAt(c);a=ab(a,d)}a^=e;return a}function -IK(a,b){return h_(a,aU(b))}function -IH(a,b){var -e=b.length,c,d;for(c=0;c+4<=e;c+=4){d=b[c]|b[c+1]<<8|b[c+2]<<16|b[c+3]<<24;a=ab(a,d)}d=0;switch(e&3){case -3:d=b[c+2]<<16;case -2:d|=b[c+1]<<8;case -1:d|=b[c];a=ab(a,d)}a^=e;return a}function -I6(a){switch(a.t&6){default:dm(a);case -0:return a.c;case -4:return a.c}}function -IG(a,b){var -c=I6(b);return typeof -c==="string"?h_(a,c):IH(a,c)}function -II(a){a^=a>>>16;a=fz(a,0x85ebca6b|0);a^=a>>>13;a=fz(a,0xc2b2ae35|0);a^=a>>>16;return a}function -IF(a,b,c,d){var -j,k,l,h,g,f,e,i,m;h=b;if(h<0||h>bV)h=bV;g=a;f=c;j=[d];k=0;l=1;while(k0){e=j[k++];if(e&&e.caml_custom){if(dp[e.caml_custom]&&dp[e.caml_custom].hash){var -n=dp[e.caml_custom].hash(e);f=ab(f,n);g--}}else if(e -instanceof -Array&&e[0]===(e[0]|0))switch(e[0]){case -248:f=ab(f,e[2]);g--;break;case -250:j[--k]=e[1];break;default:if(pl(e[0]))break;var -o=e.length-1<<10|e[0];f=ab(f,o);for(i=1,m=e.length;i=h)break;j[l++]=e[i]}break}else if(fw(e)){f=IG(f,e);g--}else if(fx(e)){f=IK(f,e);g--}else if(typeof -e==="string"){f=h_(f,e);g--}else if(e===(e|0)){f=ab(f,e+e+1);g--}else if(typeof -e==="number"){f=h9(f,e);g--}}f=II(f);return f&0x3FFFFFFF}function -IL(a,b,c){if(!isFinite(a)){if(isNaN(a))return ax(hk);return ax(a>0?mK:"-infinity")}var -k=a==0&&1/a==-Infinity?1:a>=0?0:1;if(k)a=-a;var -f=0;if(a==0);else if(a<1)while(a<1&&f>-1022){a*=2;f--}else -while(a>=2){a/=2;f++}var -l=f<0?e:ct,g=e;if(k)g=bY;else -switch(c){case -43:g=ct;break;case -32:g=aE;break;default:break}if(b>=0&&b<13){var -i=Math.pow(2,b*4);a=Math.round(a*i)/i}var -d=a.toString(16);if(b>=0){var -j=d.indexOf(bz);if(j<0)d+=bz+cA(b,av);else{var -h=j+1+b;if(d.length>24&bg,a>>31&a2)}function -IW(a){return a.toInt()}function -IR(a){return+a.isNeg()}function -IU(a){return a.neg()}function -IP(a,b){var -c=ii(a);if(c.signedconv&&IR(b)){c.sign=-1;b=IU(b)}var -d=e,i=IV(c.base),h="0123456789abcdef";do{var -g=b.udivmod(i);b=g.quotient;d=h.charAt(IW(g.modulus))+d}while(!IS(b));if(c.prec>=0){c.filler=aE;var -f=c.prec-d.length;if(f>0)d=cA(f,av)+d}return h8(c,d)}function -Jf(a){var -b=0,e=m(a),c=10,d=1;if(e>0)switch(aI(a,b)){case -45:b++;d=-1;break;case -43:b++;d=1;break}if(b+1=48&&a<=57)return a-48;if(a>=65&&a<=90)return a-55;if(a>=97&&a<=122)return a-87;return-1}function -pk(a){var -h=Jf(a),d=h[0],i=h[1],e=h[2],g=m(a),j=-1>>>0,f=d=e)aw(fp);var -b=c;for(d++;d=e)break;b=e*b+c;if(b>j)aw(fp)}if(d!=g)aw(fp);b=i*b;if(e==10&&(b|0)!=b)aw(fp);return b|0}function -ie(a){return a.slice(1)}function -cy(a,b,c){return a[D(b)].apply(a,ie(c))}function -IZ(a,b){switch(b.length){case -1:return new -a;case -2:return new -a(b[1]);case -3:return new -a(b[1],b[2]);case -4:return new -a(b[1],b[2],b[3]);case -5:return new -a(b[1],b[2],b[3],b[4]);case -6:return new -a(b[1],b[2],b[3],b[4],b[5]);case -7:return new -a(b[1],b[2],b[3],b[4],b[5],b[6]);case -8:return new -a(b[1],b[2],b[3],b[4],b[5],b[6],b[7])}function -c(){return a.apply(this,ie(b))}c.prototype=a.prototype;return new -c}function -pm(a){var -c={};for(var -b=1;b>16;return c}function -I1(a,b,c){var -o=2,p=3,s=5,e=6,i=7,h=8,k=9,n=1,m=2,r=3,t=4,q=5;if(!a.lex_default){a.lex_base=du(a[n]);a.lex_backtrk=du(a[m]);a.lex_check=du(a[q]);a.lex_trans=du(a[t]);a.lex_default=du(a[r])}var -f,d=b,l=dz(c[o]);if(d>=0){c[i]=c[s]=c[e];c[h]=-1}else -d=-d-1;for(;;){var -g=a.lex_base[d];if(g<0)return-g-1;var -j=a.lex_backtrk[d];if(j>=0){c[i]=c[e];c[h]=j}if(c[e]>=c[p])if(c[k]==0)return-d-1;else -f=bV;else{f=l[c[e]];c[e]++}if(a.lex_check[g+f]==d)d=a.lex_trans[g+f];else -d=a.lex_default[d];if(d<0){c[e]=c[i];if(c[h]==-1)aw("lexing: empty token");else -return c[h]}else if(f==bV)c[k]=0}}function -I2(a){var -b=[];for(;a!==0;a=a[2])b.push(a[1]);return b}function -a4(a,b){if(a<0)dj();var -a=a+1|0,c=new -Array(a);c[0]=0;for(var -d=1;d>>32-e,c)}function -g(a,b,c,d,e,f,g){return l(b&c|~b&d,a,b,e,f,g)}function -h(a,b,c,d,e,f,g){return l(b&d|c&~d,a,b,e,f,g)}function -i(a,b,c,d,e,f,g){return l(b^c^d,a,b,e,f,g)}function -j(a,b,c,d,e,f,g){return l(c^(b|~d),a,b,e,f,g)}return function(a,b){var -c=a[0],d=a[1],e=a[2],f=a[3];c=g(c,d,e,f,b[0],7,0xD76AA478);f=g(f,c,d,e,b[1],12,0xE8C7B756);e=g(e,f,c,d,b[2],17,0x242070DB);d=g(d,e,f,c,b[3],22,0xC1BDCEEE);c=g(c,d,e,f,b[4],7,0xF57C0FAF);f=g(f,c,d,e,b[5],12,0x4787C62A);e=g(e,f,c,d,b[6],17,0xA8304613);d=g(d,e,f,c,b[7],22,0xFD469501);c=g(c,d,e,f,b[8],7,0x698098D8);f=g(f,c,d,e,b[9],12,0x8B44F7AF);e=g(e,f,c,d,b[10],17,0xFFFF5BB1);d=g(d,e,f,c,b[11],22,0x895CD7BE);c=g(c,d,e,f,b[12],7,0x6B901122);f=g(f,c,d,e,b[13],12,0xFD987193);e=g(e,f,c,d,b[14],17,0xA679438E);d=g(d,e,f,c,b[15],22,0x49B40821);c=h(c,d,e,f,b[1],5,0xF61E2562);f=h(f,c,d,e,b[6],9,0xC040B340);e=h(e,f,c,d,b[11],14,0x265E5A51);d=h(d,e,f,c,b[0],20,0xE9B6C7AA);c=h(c,d,e,f,b[5],5,0xD62F105D);f=h(f,c,d,e,b[10],9,0x02441453);e=h(e,f,c,d,b[15],14,0xD8A1E681);d=h(d,e,f,c,b[4],20,0xE7D3FBC8);c=h(c,d,e,f,b[9],5,0x21E1CDE6);f=h(f,c,d,e,b[14],9,0xC33707D6);e=h(e,f,c,d,b[3],14,0xF4D50D87);d=h(d,e,f,c,b[8],20,0x455A14ED);c=h(c,d,e,f,b[13],5,0xA9E3E905);f=h(f,c,d,e,b[2],9,0xFCEFA3F8);e=h(e,f,c,d,b[7],14,0x676F02D9);d=h(d,e,f,c,b[12],20,0x8D2A4C8A);c=i(c,d,e,f,b[5],4,0xFFFA3942);f=i(f,c,d,e,b[8],11,0x8771F681);e=i(e,f,c,d,b[11],16,0x6D9D6122);d=i(d,e,f,c,b[14],23,0xFDE5380C);c=i(c,d,e,f,b[1],4,0xA4BEEA44);f=i(f,c,d,e,b[4],11,0x4BDECFA9);e=i(e,f,c,d,b[7],16,0xF6BB4B60);d=i(d,e,f,c,b[10],23,0xBEBFBC70);c=i(c,d,e,f,b[13],4,0x289B7EC6);f=i(f,c,d,e,b[0],11,0xEAA127FA);e=i(e,f,c,d,b[3],16,0xD4EF3085);d=i(d,e,f,c,b[6],23,0x04881D05);c=i(c,d,e,f,b[9],4,0xD9D4D039);f=i(f,c,d,e,b[12],11,0xE6DB99E5);e=i(e,f,c,d,b[15],16,0x1FA27CF8);d=i(d,e,f,c,b[2],23,0xC4AC5665);c=j(c,d,e,f,b[0],6,0xF4292244);f=j(f,c,d,e,b[7],10,0x432AFF97);e=j(e,f,c,d,b[14],15,0xAB9423A7);d=j(d,e,f,c,b[5],21,0xFC93A039);c=j(c,d,e,f,b[12],6,0x655B59C3);f=j(f,c,d,e,b[3],10,0x8F0CCC92);e=j(e,f,c,d,b[10],15,0xFFEFF47D);d=j(d,e,f,c,b[1],21,0x85845DD1);c=j(c,d,e,f,b[8],6,0x6FA87E4F);f=j(f,c,d,e,b[15],10,0xFE2CE6E0);e=j(e,f,c,d,b[6],15,0xA3014314);d=j(d,e,f,c,b[13],21,0x4E0811A1);c=j(c,d,e,f,b[4],6,0xF7537E82);f=j(f,c,d,e,b[11],10,0xBD3AF235);e=j(e,f,c,d,b[2],15,0x2AD7D2BB);d=j(d,e,f,c,b[9],21,0xEB86D391);a[0]=k(c,a[0]);a[1]=k(d,a[1]);a[2]=k(e,a[2]);a[3]=k(f,a[3])}}();function -In(a,b,c){var -e=a.len&bA,d=0;a.len+=c;if(e){var -f=64-e;if(c=64){a.b8.set(b.subarray(d,d+64),0);fq(a.w,a.b32);c-=64;d+=64}if(c)a.b8.set(b.subarray(d,d+c),0)}function -Il(a){var -c=a.len&bA;a.b8[c]=aL;c++;if(c>56){for(var -b=c;b<64;b++)a.b8[b]=0;fq(a.w,a.b32);for(var -b=0;b<56;b++)a.b8[b]=0}else -for(var -b=c;b<56;b++)a.b8[b]=0;a.b32[14]=a.len<<3;a.b32[15]=a.len>>29&0x1FFFFFFF;fq(a.w,a.b32);var -e=new -Uint8Array(16);for(var -d=0;d<4;d++)for(var -b=0;b<4;b++)e[d*4+b]=a.w[d]>>8*b&0xFF;return e}function -Jl(a){return aH(dy(a,0,a.length))}function -I4(a,b,c){var -d=Im(),e=dz(a);In(d,e.subarray(b,b+c),c);return Jl(Il(d))}function -I5(a,b,c){return I4(bD(a),b,c)}var -cB=new -Array(3);function -Jm(a){var -b=cB[a];if(b)b.close();delete -cB[a];return 0}var -aN=new -Array();function -bF(a){var -b=aN[a];if(!b.opened)r("Cannot flush a closed channel");if(!b.buffer||b.buffer_curr==0)return 0;if(b.output)b.output(dy(b.buffer,0,b.buffer_curr));else -b.file.write(b.offset,b.buffer,0,b.buffer_curr);b.offset+=b.buffer_curr;b.buffer_curr=0;return 0}function -pn(a){var -b=aN[a];if(b.opened){b.opened=false;Jm(b.fd);b.fd=-1;b.buffer=new -Uint8Array(0);b.buffer_curr=0;b.buffer_max=0}return 0}function -I7(){return 0}function -Ji(a){if(a.refill!=null){var -e=a.refill(),b=Jq(e);if(b.length==0)a.refill=null;else{if(a.buffer.length0){b.set(e.buffer.subarray(e.buffer_curr,e.buffer_curr+f),c);e.buffer_curr+=f;g=f}else{e.buffer_curr=0;e.buffer_max=0;Ji(e);var -f=e.buffer_max-e.buffer_curr;if(g>f)g=f;b.set(e.buffer.subarray(e.buffer_curr,e.buffer_curr+g),c);e.buffer_curr+=g}return g|0}function -I8(a,b,c,d){var -e=dz(b);return I9(a,e,c,d)}function -Jo(a,b){if(b.name)try{var -d=require(hn),c=d.openSync(b.name,"rs");return new -aT(c,b)}catch(f){}return new -aT(a,b)}function -di(a,b){aj.call(this,G(0));this.log=function(a){return 0};if(a==1&&typeof -console.log=="function")this.log=console.log;else if(a==2&&typeof -console.error=="function")this.log=console.error;else if(typeof -console.log=="function")this.log=console.log;this.flags=b}di.prototype.length=function(){return 0};di.prototype.write=function(a,b,c,d){if(this.log){if(d>0&&c>=0&&c+d<=b.length&&b[c+d-1]==10)d--;var -e=G(d);bj(h5(b),c,e,0,d);this.log(e.toUtf16());return 0}r(this.fd+nI)};di.prototype.read=function(a,b,c,d){r(this.fd+": file descriptor is write only")};di.prototype.close=function(){this.log=undefined};function -fB(a,b){if(b==undefined)b=cB.length;cB[b]=a;return b|0}function -pw(a,b,c){var -d={};while(b){switch(b[1]){case -0:d.rdonly=1;break;case -1:d.wronly=1;break;case -2:d.append=1;break;case -3:d.create=1;break;case -4:d.truncate=1;break;case -5:d.excl=1;break;case -6:d.binary=1;break;case -7:d.text=1;break;case -8:d.nonblock=1;break}b=b[2]}if(d.rdonly&&d.wronly)r(aU(a)+hZ);if(d.text&&d.binary)r(aU(a)+hE);var -e=pB(a),f=e.device.open(e.rest,d);return fB(f,undefined)}(function(){function -a(a,b){return dA()?Jo(a,b):new -di(a,b)}fB(a(0,{rdonly:1,altname:"/dev/stdin",isCharacterDevice:true}),0);fB(a(1,{buffered:2,wronly:1,isCharacterDevice:true}),1);fB(a(2,{buffered:2,wronly:1,isCharacterDevice:true}),2)}());function -po(a){var -b=cB[a];if(b.flags.wronly)r(oa+a+" is writeonly");var -d=null,c={file:b,offset:b.flags.append?b.length():0,fd:a,opened:true,out:false,buffer_curr:0,buffer_max:0,buffer:new -Uint8Array(hq),refill:d};aN[c.fd]=c;return c.fd}function -ig(a){var -b=cB[a];if(b.flags.rdonly)r(oa+a+" is readonly");var -d=b.flags.buffered!==undefined?b.flags.buffered:1,c={file:b,offset:b.flags.append?b.length():0,fd:a,opened:true,out:true,buffer_curr:0,buffer:new -Uint8Array(hq),buffered:d};aN[c.fd]=c;return c.fd}function -I_(){var -b=0;for(var -a=0;ae.buffer.length){var -g=new -Uint8Array(e.buffer_curr+b.length);g.set(e.buffer);e.buffer=g}switch(e.buffered){case -0:e.buffer.set(b,e.buffer_curr);e.buffer_curr+=b.length;bF(a);break;case -1:e.buffer.set(b,e.buffer_curr);e.buffer_curr+=b.length;if(e.buffer_curr>=e.buffer.length)bF(a);break;case -2:var -f=b.lastIndexOf(10);if(f<0){e.buffer.set(b,e.buffer_curr);e.buffer_curr+=b.length;if(e.buffer_curr>=e.buffer.length)bF(a)}else{e.buffer.set(b.subarray(0,f+1),e.buffer_curr);e.buffer_curr+=f+1;bF(a);e.buffer.set(b.subarray(f+1),e.buffer_curr);e.buffer_curr+=b.length-f-1}break}return 0}function -I$(a,b,c,d){var -b=dz(b);return Ja(a,b,c,d)}function -ih(a,b,c,d){return I$(a,bD(b),c,d)}function -pp(a,b){var -c=aH(String.fromCharCode(b));ih(a,c,0,1);return 0}function -pq(a,b){var -c=aN[a];c.name=b;return 0}function -Jb(a,b){if(b==0)ik();return a%b}function -dv(a,b){return+(dl(a,b,false)!=0)}function -Jd(a,b){a[0]=c_;a[1]=b;return 0}function -cz(a){if(a -instanceof -Array&&a[0]==a[0]>>>0)return a[0];else if(fw(a))return db;else if(fx(a))return db;else if(a -instanceof -Function||typeof -a=="function")return 247;else if(a&&a.caml_custom)return _;else -return dg}function -It(a){var -c={};if(a)for(var -b=1;b=0)a=e;else -aw("caml_register_global: cannot locate "+d)}}aa[a+1]=b;if(c)aa[c]=b}function -im(a,b){pr[aU(a)]=b;return 0}function -io(a,b){if(a===b)return 1;return 0}function -Jk(){S(hg)}function -p(a,b){if(b>>>0>=m(a))Jk();return aI(a,b)}function -c(a,b){return 1-io(a,b)}function -dx(a){a.t&6&&dm(a);return aH(a.c)}function -Jn(){return 0x7FFFFFFF/4|0}function -Jg(){pt(aa.Not_found)}function -pv(a){var -b=pA(D(a));if(b===undefined)Jg();return ax(b)}function -Jp(){if(v.crypto)if(v.crypto.getRandomValues){var -a=v.crypto.getRandomValues(new -Int32Array(4));return[0,a[0],a[1],a[2],a[3]]}else if(v.crypto.randomBytes){var -a=new -Int32Array(v.crypto.randomBytes(16).buffer);return[0,a[0],a[1],a[2],a[3]]}var -b=new -Date().getTime(),c=b^0xffffffff*Math.random();return[0,c]}function -bn(a){var -b=1;while(a&&a.joo_tramp){a=a.joo_tramp.apply(null,a.joo_args);b++}return a}function -s(a,b){return{joo_tramp:a,joo_args:b}}function -I(a){{if(a -instanceof -Array)return a;var -b;if(v.RangeError&&a -instanceof -v.RangeError&&a.message&&a.message.match(/maximum call stack/i))b=aa.Stack_overflow;else if(v.InternalError&&a -instanceof -v.InternalError&&a.message&&a.message.match(/too much recursion/i))b=aa.Stack_overflow;else if(a -instanceof -v.Error&&bG(hs))b=[0,bG(hs),a];else -b=[0,aa.Failure,ax(String(a))];if(a -instanceof -v.Error)b.js_error=a;return b}}function -IY(a){switch(a[2]){case-8:case-11:case-12:return 1;default:return 0}}function -IB(a){var -b=e;if(a[0]==0){b+=a[1][1];if(a.length==3&&a[2][0]==0&&IY(a[1]))var -f=a[2],g=1;else -var -g=2,f=a;b+=m8;for(var -d=g;dg)b+=hF;var -c=f[d];if(typeof -c=="number")b+=c.toString();else if(c -instanceof -bi)b+=cq+c.toString()+cq;else if(typeof -c=="string")b+=cq+c.toString()+cq;else -b+=oK}b+=ni}else if(a[0]==z)b+=a[1];return b}function -pf(a){if(a -instanceof -Array&&(a[0]==0||a[0]==z)){var -c=bG(oP);if(c)fr(c,[a,false]);else{var -d=IB(a),b=bG(oc);if(b)fr(b,[0]);console.error(hv+d);if(a.js_error)throw a.js_error}}else -throw a}function -Jj(){var -c=v.process;if(c&&c.on)c.on("uncaughtException",function(a,b){pf(a);c.exit(2)});else if(v.addEventListener)v.addEventListener(hC,function(a){if(a.error)pf(a.error)})}Jj();function -g(a,b){return(a.l>=0?a.l:a.l=a.length)==1?a(b):bk(a,[b])}function -i(a,b,c){return(a.l>=0?a.l:a.l=a.length)==2?a(b,c):bk(a,[b,c])}function -aZ(a,b,c,d){return(a.l>=0?a.l:a.l=a.length)==3?a(b,c,d):bk(a,[b,c,d])}function -Ik(a,b,c,d,e){return(a.l>=0?a.l:a.l=a.length)==4?a(b,c,d,e):bk(a,[b,c,d,e])}function -hc(a,b,c,d,e,f){return(a.l>=0?a.l:a.l=a.length)==5?a(b,c,d,e,f):bk(a,[b,c,d,e,f])}function -Ij(a,b,c,d,e,f,g,h){return(a.l>=0?a.l:a.l=a.length)==7?a(b,c,d,e,f,g,h):bk(a,[b,c,d,e,f,g,h])}var -Jw=undefined;IC();var -fE=[z,o3,-1],fF=[z,mG,-2],ak=[z,h3,-3],ir=[z,mu,-4],al=[z,nS,-7],is=[z,oY,-8],it=[z,m3,-9],f=[z,nc,-11],iu=[z,nm,-12],dK=[0,e,0,0,-1],dL=[0,e,1,0,0],Ii=[4,0,0,0,[12,45,[4,0,0,0,0]]],f1=[0,[11,'File "',[2,0,[11,'", line ',[4,0,0,0,[11,oZ,[4,0,0,0,[12,45,[4,0,0,0,[11,bW,[2,0,0]]]]]]]]]],'File "%s", line %d, characters %d-%d: %s'],kK=[0,"\0\0\xe5\xff\x11\0\xe8\xff\x03\0\xea\xff~\0\0\0q\0\0\0\x01\0\x01\0\x02\0{\0\xf3\xff\xf4\xff\xf5\xff\xf6\xff\xf7\xff\xf8\xff\xf9\xff\xfa\xff\xfb\xff\xfc\xff\x01\0\x02\0\0\0\0\0\x02\0\xff\xff\0\0\0\0\x03\0\xfe\xff\x03\0\x01\0\x0b\0\xfd\xff\xef\xff\x03\0\n\0\x0b\0\x05\0\xf2\xff\x14\0\x13\x000\0L\0C\0?\0K\0T\0\xf1\xffU\0S\0O\0U\0K\0G\0S\0T\0]\0\xf0\xff_\0]\0Y\0_\0U\0Q\0\x01\0 \0\x9b\0\xba\0\xd1\0\xdb\0\xe5\0\xf0\0\xfa\0\x12\x01B\x01\xec\xff\xeb\xff^\x01u\x01\x9b\x01\xb2\x015\0\xe7\xffX\x01\xfc\xff\xfd\xff\xfe\xff\x0e\0\xff\xff","\xff\xff\xff\xff\x1a\0\xff\xff\x16\0\xff\xff\x1a\0\x11\0\x11\0\x1a\0\x1a\0\x1a\0\x1a\0\x1a\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\0\x1a\0\x1a\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\0\xff\xff\x12\0\xff\xff\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff","\x01\0\0\0\xff\xff\0\0\xff\xff\0\0O\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffO\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xffV\0\0\0Y\0\0\0\0\0\0\0\xff\xff\0\0","\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\x03\0\0\0\x04\0\x04\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\x06\0\x04\0\0\0\0\0\0\0\0\0\x13\0\x12\0\0\0\n\0\x0f\0\r\0G\0\x02\0\x07\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\x0e\0W\0\x11\0]\0\x10\0\xff\xffV\0\0\0\0\0\0\0\0\0F\0\0\0\0\0\0\0\x0b\0;\0M\0\0\0M\0\t\0&\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0\0\0\x15\0\0\0\x14\0\0\0\0\0\0\0E\0\"\0\x1e\x002\0F\0\x19\0\x1d\0!\0\f\0<\0+\0\x1f\0$\0\x18\x005\x003\0&\0\x1b\0 \0\x1a\0\x1c\0#\0%\0,\0*\0-\0\x17\0.\0\x16\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff/\0G\0P\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\x07\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\x000\0F\x001\0+\0&\x004\x006\x007\x008\x009\0:\x004\0?\0=\0>\0(\0@\0A\0B\0C\0D\0>\0H\0H\0H\0H\0H\0H\0H\0H\0H\0H\0\0\0F\0\0\0\0\0\0\0N\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\0\0\0\0\0\0\0\0\0'\0H\0H\0H\0H\0H\0H\0H\0H\0H\0H\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0K\0\0\0K\0I\0\x05\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0I\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0O\0\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0O\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff[\0\0\0Q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0O\0\0\0\0\0\0\0\0\0\0\0O\0\0\0\0\0\0\0O\0\0\0\0\0\0\0\0\0\0\0\xff\xff\0\0O\0\0\0\\\0\0\0O\0\0\0O\0R\0\0\0\0\0\0\0\0\0\0\0\0\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0\0\0\0\0\0\0\0\0\0\0\0\0N\0S\0S\0S\0S\0S\0S\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0T\0T\0T\0T\0T\0T\0\0\0\0\0\0\0S\0S\0S\0S\0S\0S\0\0\0\0\0\0\0\0\0\0\0\0\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0\0\0T\0T\0T\0T\0T\0T\0U\0U\0U\0U\0U\0U\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0O\0O\0O\0O\0O\0O\0\0\0\0\0\0\0U\0U\0U\0U\0U\0U\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0O\0O\0O\0O\0O\0O\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0","\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\x04\0\0\0\xff\xff\xff\xff\x04\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\0\0\x04\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\0\0\0\0\0\0\x07\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x02\0\0\0\\\0\0\0V\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\xff\xff\xff\xff\xff\xff\0\0\n\0F\0\xff\xffF\0\0\0E\0F\0F\0F\0F\0F\0F\0F\0F\0F\0F\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\t\0\x18\0\x19\0'\0\x07\0\0\0\x1c\0 \0\0\0\n\0*\0\x1e\0#\0\0\0\x0b\0\f\0\"\0\x1a\0\x1f\0\0\0\x1b\0\x18\0$\0(\0)\0,\0\0\0-\0\0\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0.\0\b\0\x06\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0/\0\b\x000\x001\x002\x003\x005\x006\x007\x008\x009\0:\0;\0<\0=\0\r\0?\0@\0A\0B\0C\0D\0G\0G\0G\0G\0G\0G\0G\0G\0G\0G\0\xff\xff\b\0\xff\xff\xff\xff\xff\xff\x06\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\r\0\xff\xff\xff\xff\xff\xff\xff\xff\r\0H\0H\0H\0H\0H\0H\0H\0H\0H\0H\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffI\0\xff\xffI\0H\0\0\0I\0I\0I\0I\0I\0I\0I\0I\0I\0I\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0K\0K\0K\0K\0K\0K\0K\0K\0K\0K\0H\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0M\0M\0M\0M\0M\0M\0M\0M\0M\0M\0N\0V\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffN\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0X\0\xff\xffO\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffN\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffN\0\xff\xff\xff\xff\xff\xffN\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x06\0\xff\xffN\0\xff\xffX\0\xff\xffN\0\xff\xffN\0N\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffR\0R\0R\0R\0R\0R\0R\0R\0R\0R\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffO\0R\0R\0R\0R\0R\0R\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffS\0S\0S\0S\0S\0S\0\xff\xff\xff\xff\xff\xffR\0R\0R\0R\0R\0R\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffT\0T\0T\0T\0T\0T\0T\0T\0T\0T\0\xff\xffS\0S\0S\0S\0S\0S\0T\0T\0T\0T\0T\0T\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffU\0U\0U\0U\0U\0U\0\xff\xff\xff\xff\xff\xffT\0T\0T\0T\0T\0T\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffU\0U\0U\0U\0U\0U\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffO\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffX\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",e,e,e,e,e,e],eY="lib/data_source/jellyfin_api.ml.user",eZ="lib/data_source/jellyfin_api.ml.Authenticate_by_name.params",e0="lib/data_source/jellyfin_api.ml.Authenticate_by_name.response",g4="lib/data_source/jellyfin_api.ml.Item.image_blur_hashes",q="lib/data_source/jellyfin_api.ml.Item.type_",e1="lib/data_source/jellyfin_api.ml.Item.t",e2="lib/data_source/jellyfin_api.ml.Virtual_folders.virtual_folder",e3="lib/db/stores.ml.Orderred_items.t",e4="lib/db/stores.ml.Items.sorts",e5="lib/db/stores.ml.Items.t",c0="items";aO(11,iu,nm);aO(10,f,nc);aO(9,[z,nh,fb],nh);aO(8,it,m3);aO(7,is,oY);aO(6,al,nS);aO(5,[z,n6,-6],n6);aO(4,[z,mO,-5],mO);aO(3,ir,mu);aO(2,ak,h3);aO(1,fF,mG);aO(0,fE,o3);var -pR=mW,pP=[0,0,[0,7,0]],pN="output_substring",pL=[0,1,[0,3,[0,4,[0,7,0]]]],pH=bz,pE=c$,pF=h2,pD="char_of_int",pT="CamlinternalLazy.Undefined",pZ="option is None",p0="result is Error _",p4=fl,p5="\\'",p6=fn,p7=ff,p8=fi,p9=e9,p2="Char.chr",qf="List.init",qc="hd",qp="String.blit / Bytes.blit_string",qo="Bytes.blit",qn="String.sub / Bytes.sub",qB="String.contains_from / Bytes.contains_from",qx=e,qu="String.concat",qJ="Array.iter2: arrays must have the same length",qH="Array.blit",qG="Array.fill",qE="Array.sub",qP="Lexing.lex_refill: cannot grow buffer",qX="Set.remove_min_elt",qY=[0,0,0,0],qZ=[0,"set.ml",570,18],qT=fc,qU=fc,qV=fc,qW=fc,q2="Stdlib.Queue.Empty",rf="Buffer.add_substring/add_subbytes",rd="Buffer.add: cannot grow buffer",rc=[0,nC,93,2],rb=[0,nC,94,2],q_="Buffer.sub",rq="%c",rr=oX,rs=nW,rt=mp,ru=o6,rv=nO,rw="%f",rx="%B",ry="%{",rz="%}",rA="%(",rB="%)",rC=o5,rD="%t",rE="%?",rF="%r",rG="%_r",rH=[0,V,850,23],rS=[0,V,814,21],rK=[0,V,815,21],rT=[0,V,818,21],rL=[0,V,819,21],rU=[0,V,822,19],rM=[0,V,823,19],rV=[0,V,826,22],rN=[0,V,827,22],rW=[0,V,831,30],rO=[0,V,832,30],rQ=[0,V,836,26],rI=[0,V,837,26],rR=[0,V,846,28],rJ=[0,V,847,28],rP=[0,V,851,23],s8=[0,V,1558,4],s9="Printf: bad conversion %[",s_=[0,V,1626,39],s$=[0,V,1649,31],ta=[0,V,1650,31],tb="Printf: bad conversion %_",tc=mC,td=nf,te=mC,tf=nf,tj=[0,[11,"invalid box description ",[3,0,0]],"invalid box description %S"],ti=[0,0,4],s3=hk,s1="neg_infinity",s2=mK,s0=bz,sV=[0,hd],sJ="%+nd",sK="% nd",sM="%+ni",sN="% ni",sO="%nx",sP="%#nx",sQ="%nX",sR="%#nX",sS="%no",sT="%#no",sI="%nd",sL=o6,sU="%nu",sv="%+ld",sw="% ld",sy="%+li",sz="% li",sA="%lx",sB="%#lx",sC="%lX",sD="%#lX",sE="%lo",sF="%#lo",su="%ld",sx=mp,sG="%lu",sh="%+Ld",si="% Ld",sk="%+Li",sl="% Li",sm="%Lx",sn="%#Lx",so="%LX",sp="%#LX",sq="%Lo",sr="%#Lo",sg="%Ld",sj=nO,ss="%Lu",r5="%+d",r6="% d",r8="%+i",r9="% i",r_="%x",r$="%#x",sa="%X",sb="%#X",sc="%o",sd="%#o",r4=hf,r7=nW,se=mS,ri="@]",rj="@}",rk="@?",rl="@\n",rm="@.",rn="@@",ro="@%",rp="@",rX="CamlinternalFormat.Type_mismatch",tp=e,tq=[0,[11,hF,[2,0,[2,0,0]]],", %s%s"],tY=[0,[11,hv,[2,0,[12,10,0]]],mX],tZ=[0,[11,"Fatal error in uncaught exception handler: exception ",[2,0,[12,10,0]]],"Fatal error in uncaught exception handler: exception %s\n"],tX="Fatal error: out of memory in uncaught exception handler",tU=[0,[11,hv,[2,0,[12,10,0]]],mX],tO=[0,[2,0,[12,10,0]],"%s\n"],tP=[0,[11,mB,0],mB],tF="Raised at",tG="Re-raised at",tH="Raised by primitive operation at",tI="Called from",tJ=" (inlined)",tL=e,tK=[0,[2,0,[12,32,[2,0,[11,' in file "',[2,0,[12,34,[2,0,[11,", line ",[4,0,0,0,[11,oZ,Ii]]]]]]]]]],'%s %s in file "%s"%s, line %d, characters %d-%d'],tM=[0,[2,0,[11," unknown location",0]],"%s unknown location"],ty="Out of memory",tz="Stack overflow",tA="Pattern matching failed",tB="Assertion failed",tC="Undefined recursive module",ts=[0,[12,40,[2,0,[2,0,[12,41,0]]]],"(%s%s)"],tt=e,tu=e,tv=[0,[12,40,[2,0,[12,41,0]]],"(%s)"],to=[0,[4,0,0,0,0],hf],tm=[0,[3,0,0],"%S"],tn=oK,tR=[0,e,"(Cannot print locations:\n bytecode executable program file not found)","(Cannot print locations:\n bytecode executable program file appears to be corrupt)","(Cannot print locations:\n bytecode executable program file has wrong magic number)","(Cannot print locations:\n bytecode executable program file cannot be opened;\n -- too many open files. Try running with OCAMLRUNPARAM=b=2)"],t3="Fun.Finally_raised: ",t1="Stdlib.Fun.Finally_raised",t7="x",t_=[0,987910699,495797812,364182224,414272206,318284740,990407751,383018966,270373319,840823159,24560019,536292337,512266505,189156120,730249596,143776328,51606627,140166561,366354223,1003410265,700563762,981890670,913149062,526082594,1021425055,784300257,667753350,630144451,949649812,48546892,415514493,258888527,511570777,89983870,283659902,308386020,242688715,482270760,865188196,1027664170,207196989,193777847,619708188,671350186,149669678,257044018,87658204,558145612,183450813,28133145,901332182,710253903,510646120,652377910,409934019,801085050],ui="Hashtbl: unsupported hash table format",uc=e,u3=[3,0,3],u4=bz,uX=hy,uY="<\/",uZ=e,uT=hy,uU=oS,uV=e,uR="\n",uL=e,uM=e,uN=e,uO=e,uB=[0,e],uw=e,ux=e,uy=e,uz=e,us=[0,e,0,e],uo="Stdlib.Format.String_tag",ve="Jsoo_runtime.Error.Exn",vf=hs,vy=[0,"src/fut.ml",34,25],wm="info",wl="warn",wj=hC,wh="log",v6="scrollTop",vM="search",wq="isSecureContext",wy="cache",wz="credentials",wA="headers",wB="integrity",wC="keepalive",wD="method",wE="mode",wF="redirect",wG="referrer",wH="referrerPolicy",wY="content-box",wZ="border-box",w0="device-pixel-content-box",w9=oj,w_=n7,w$="position",w5="Set metadata",xm="open",xh="autoIncrement",xi="keyPath",xj="new object store with options:",xt=[0,H,157,10],xv=[0,H,179,10],xx=[0,H,191,10],xA=[0,H,o4,17],xK=[0,H,367,16],xL=[0,H,368,18],xM=[0,H,372,15],xN=[0,H,377,15],xO=[0,H,oR,15],xP=[0,H,386,10],xQ=[0,H,362,16],xR=[0,H,517,12],xS=[0,H,459,14],x3=[0,H,686,27],x2=[0,H,651,27],xW=[0,H,560,16],xT=[0,H,550,23],xU=[0,H,544,14],xJ=[0,H,334,9],xE=[0,H,309,9],xD=[0,H,305,9],xC=[0,[11,"Lwd: unsafe mutation (variable invalidated during evaluation) at\n",[15,0]],"Lwd: unsafe mutation (variable invalidated during evaluation) at\n%a"],xz=[0,H,mw,14],xw=[0,H,186,14],xu=[0,H,169,14],xs=[0,H,152,14],xX="Lwd.Release_failure",x_=[0,a,64,12],yk=[0,a,205,18],yj=[0,a,o4,9],ym=[0,a,oU,18],yl=[0,a,237,9],yn=[0,a,nz,21],yo=[0,a,c_,21],yp=[0,a,260,21],yr=[0,a,296,14],yK=[0,a,492,29],yJ=[0,a,499,29],yH=[0,a,462,21],yC=[0,a,420,10],yD=[0,a,423,15],yE=[0,a,435,10],yF=[0,a,457,2],yx=[0,a,371,24],yy=[0,a,391,16],yz=[0,a,394,2],yu=[0,a,315,18],yt=[0,a,317,9],yg=[0,a,op,4],yf=[0,a,mw,21],yd=[0,a,mm,4],ye=[0,a,177,14],yc=[0,a,113,14],ya=[0,a,82,21],x8=[0,a,32,14],zb=[0,ai,571,12],yY=[0,ai,321,37],yZ=[0,ai,322,37],y1=[0,ai,346,10],y2=[0,ai,357,42],y0=[0,ai,337,37],y4=[0,ai,375,10],y5=[0,ai,oR,42],y3=[0,ai,338,37],y8=[0,ai,425,16],y$=[0,ai,513,50],y9=[0,ai,480,6],y7=[0,ai,395,14],yQ=[0,ai,mm,57],yR=[0,ai,182,57],yS=[0,ai,238,11],yL=na,yM=na,zp=[0,my,233,16],zn=[0,my,201,16],zi=[0,0,0],zg=[0,0,0],zw=hF,zG="CCResult.Get_error",zZ="expected low surrogate escape sequence (u)",z0="invalid low surrogate for code point beyond U+FFFF'",z1="expected low surrogate escape char (\\)",z2="invalid escape in string",zY="end of string in escape sequence",zT="' ",zU=" '",zX=e,zV=bW,zW=" at offset ",zQ=aF,zR="invalid hex char in unicode escape: '",zN="Jsonxt__Lexxer_utils.Lex_error",z4=[6,1],z5=[6,0],z6=aF,z7=de,z8=aF,z9=de,z_=aF,z$=de,Aa=aF,Ab=de,Ac=[0,e],Ad=aF,Ae=de,Af="unexpected EOF in comment",Ag="Jsonxt__Error_info.Json_error_info",Aj=oA,Ak=oA,Al="unexpected '{'",Am="unexpected '}'",An="unexpected null value",Ao="unexpected negative infinity",Ap="unexpected Not-a-Number",Aq="unexpected infinity",Ar="unexpected end-of-input",As="unexpected ','",At="unexpected ':'",Au="unexpected '['",Av="unexpected ']'",Aw="unexpected '<'",Ax="unexpected '>'",Ay="unexpected '('",Az="unexpected ')'",AA=aF,AB="unexpected string '",AC=aF,AD="unexpected large integer '",AE=aF,AF="unexpected integer '",AG=aF,AH="unexpected float '",AI=aF,AJ="compliance error '",AK=aF,AL=c$,AN=h2,AM="unexpected boolean '",AS=[1,"Unexpected end-of-input"],AQ=[0,hz,"tuple must have at least 2 elements"],AR=[0,hz,"variant must have at least a string"],AP="Jsonxt__Parser.Make(Compliance).Parse_error",AX=fn,AY=ff,AZ=fi,A0=hx,A1=e9,A2=hO,AV=fl,AW=hI,A5=hr,A6=bf,A7=[0,[12,hA,[17,[0,os,1,0],[15,[17,[0,ov,1,-2],[12,hQ,0]]]]],"{@;<1 0>%a@;<1 -2>}"],A8="{}",A9=bf,A_=[0,[12,91,[17,[0,os,1,0],[18,[1,[0,[11,od,0],od]],[15,[17,0,[17,[0,ov,1,-2],[12,93,0]]]]]]],"[@;<1 0>@[%a@]@;<1 -2>]"],A$="[]",Ba="()",Bb=bf,Bc=[0,[12,40,[17,[0,"@,",0,0],[15,[17,[0,"@;<0 -2>",0,-2],[12,41,0]]]]],"(@,%a@;<0 -2>)"],Bd=[0,[12,60,[18,[1,[0,[11,cw,0],cw]],[2,0,[11,bW,[15,[17,0,[12,62,0]]]]]]],"<@[%s: %a@]>"],Be=[0,[12,60,[2,0,[12,62,0]]],"<%s>"],Bf=[0,[18,[1,[0,[11,cw,0],cw]],[2,0,[11,bW,[15,[17,0,0]]]]],"@[%s: %a@]"],Bi=[0,[15,[17,2,0]],"%a@?"],Bh=[0,[15,0],o5],Bg=[0,[18,[1,[0,[11,cw,0],cw]],[15,[17,0,0]]],"@[%a@]"],A4=[0,[2,0,[17,[0,"@ ",1,0],0]],"%s@ "],Bl="Expected `String",Bk="Expected `Assoc",Bn="{",Bo="}",Bp="Null",Bq=da,Br="NAN",Bs=dh,Bt="end-of-file",Bu=bf,Bv=h0,Bw="[",Bx="]",By=oS,Bz=hy,BA=m8,BB=ni,BC=aF,BD="input error '",BE=c$,BF=h2,BJ=ot,BK=[0,0],BL=[1,oE],BH=ot,BI=[1,oE],BZ=e,B0=e,BW=hr,BX=bf,BY=bf,BV=h0,BP=fn,BQ=ff,BR=fi,BS=hx,BT=e9,BU=hO,BN=fl,BO=hI,B_=hr,Ca=bf,B$=e,Cc=bf,Cb=e,B4=fn,B5=ff,B6=fi,B7=hx,B8=e9,B9=hO,B2=fl,B3=hI,CI=[0,aM,dh],CJ=[0,aM,da],CH=[0,aM,e$],CG=e$,CE=da,CF=dh,CD=[0,0],CB=cq,CC=cq,CA="floatlit not supported in yojson safe mode",Cz=e$,Cx=da,Cy=dh,Cw=[0,0],Cv=hL,Cu=hL,Ct=hG,Cs=hG,Cr="floatlit not supported in yojson basic mode",Cq=hL,Cp=hG,Co=e$,Cm=da,Cn=dh,Cl=[0,0],Ck=[5,"Integer out of bounds"],Cg=", line",Ch="File ",Cj="Line",Ci=[0,[2,0,[12,32,[4,0,0,0,[11," chars ",[4,0,0,0,[12,45,[4,0,0,0,[11,bW,0]]]]]]]],"%s %d chars %d-%d: "],Cd="Jsonxt__Yojson.Json_error",CN="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",CO=[1,[0,3854881,"Failed to unmarshal data"]],CX="TODO not implemented",C6=[0,"lib/brr_lwd_ui/utils.ml",40,61],C3=[0,[8,[0,0,0],0,0,[11,nn,0]],"%fpx"],C4=[0,[8,[0,0,0],0,0,[11,mU,0]],"%frem"],C5=[0,[8,[0,0,0],0,0,[11,mH,0]],"%fem"],C0=nn,C1=mU,C2=mH,Dd=[0,[11,nj,[2,0,0]],"height: %s"],Db=aE,C9=[0,aE],C_="grid-template-columns",C$=[0,[2,0,[11,bW,[2,0,[12,59,0]]]],"%s: %s;"],De=[1,4.],Di=[0,80,"row"],Dg=[0,[11,"height: calc(",[2,0,[11," * ",[4,3,0,0,[11,");",0]]]]],"height: calc(%s * %i);"],Dh=[0,[11,nj,[2,0,[11," !important;",0]]],"height: %s !important;"],Dj=[0,"lwdui-lazy-table",0],Dk=[0,"lwdui-lazy-table-wrapper",0],Dp=[1,-358247754],Dn=[0,[11,"Multiple persitent var are using the key ",[2,0,0]],"Multiple persitent var are using the key %s"],Dy=ms,Dw="password",Du=mN,DD=[0,80,mN],DA=[0,[2,0,[11,"--id",0]],"%s--id"],DB=[0,[2,0,0],oX],DH=[0,80,"checkbox"],DE=[0,[2,0,[12,45,[4,3,0,0,[12,45,[4,3,0,0,[11,"-id",0]]]]]],"%s-%i-%i-id"],DF=[0,[2,0,[12,45,[4,3,0,0,[12,45,[4,3,0,0,0]]]]],"%s-%i-%i"],DJ=[0,80,hH],DT="list_of_yojson: list needed",DS="int_of_yojson: integer needed",DR="string_of_yojson: string needed",DP="Ppx_yojson_conv_lib__Yojson_conv.Of_yojson_error",D6=aE,D8="_of_yojson: list instead of atom for record expected",D7=[0,[2,0,[11,"_of_yojson: the following record elements were undefined: ",[2,0,0]]],"%s_of_yojson: the following record elements were undefined: %s"],D4="extra fields",D3="duplicate fields",D1=aE,D2=[0,[2,0,[11,"_of_yojson: ",[2,0,[11,bW,[2,0,0]]]]],"%s_of_yojson: %s: %s"],D0="_of_yojson: unexpected variant constructor",DY="_of_yojson: expected a variant type, saw an empty list",DW="_of_yojson: expected a variant type, saw a nested list",DU="_of_yojson: this constructor does not take arguments",FM="An error occured while decoding response: ",FH=[0,[11,", Token=",[3,0,0]],", Token=%S"],FK=e,FI="abcdef",FJ=[0,[11,'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="',[2,0,[11,'", Version="0.1"',[2,0,0]]]],'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="%s", Version="0.1"%s'],FD=hu,FE=oV,FF=cp,Fz="item_id",FA="locations",FB=dc,Fx=mj,Fo=oO,Fp=nA,Fq=cl,Fr=mZ,Fs=oi,Ft=m1,Fu=fg,Fv=nw,Fw=cp,Fi="type_",Fj="image_blur_hashes",Fk=hB,Fl=bT,Fm=dc,Fg=[0,"lib/data_source/jellyfin_api.ml",op,64],EF=[0,l,[0,[0,d,oI],0]],EG=[0,l,[0,[0,d,of],0]],EH=[0,l,[0,[0,d,ok],0]],EI=[0,l,[0,[0,d,nL],0]],EJ=[0,l,[0,[0,d,m2],0]],EK=[0,l,[0,[0,d,ne],0]],EL=[0,l,[0,[0,d,n5],0]],EM=[0,l,[0,[0,d,nu],0]],EN=[0,l,[0,[0,d,mJ],0]],EO=[0,l,[0,[0,d,on],0]],EP=[0,l,[0,[0,d,oq],0]],EQ=[0,l,[0,[0,d,oL],0]],ER=[0,l,[0,[0,d,oM],0]],ES=[0,l,[0,[0,d,mP],0]],ET=[0,l,[0,[0,d,mT],0]],EU=[0,l,[0,[0,d,oC],0]],EV=[0,l,[0,[0,d,nr],0]],EW=[0,l,[0,[0,d,nv],0]],EX=[0,l,[0,[0,d,mA],0]],EY=[0,l,[0,[0,d,nY],0]],EZ=[0,l,[0,[0,d,mn],0]],E0=[0,l,[0,[0,d,ob],0]],E1=[0,l,[0,[0,d,n9],0]],E2=[0,l,[0,[0,d,mI],0]],E3=[0,l,[0,[0,d,nH],0]],E4=[0,l,[0,[0,d,o0],0]],E5=[0,l,[0,[0,d,oz],0]],E6=[0,l,[0,[0,d,m6],0]],E7=[0,l,[0,[0,d,mR],0]],E8=[0,l,[0,[0,d,nQ],0]],E9=[0,l,[0,[0,d,mt],0]],E_=[0,l,[0,[0,d,nD],0]],E$=[0,l,[0,[0,d,or],0]],Fa=[0,l,[0,[0,d,mV],0]],Fb=[0,l,[0,[0,d,m0],0]],Fc=[0,l,[0,[0,d,nN],0]],Fd=[0,l,[0,[0,d,nq],0]],EC=oH,Ex="/Users/AuthenticateByName",Es=cl,Et=ox,Eu=ml,Eo=hB,Ep="access_token",Eq="user",El=o2,Em=nF,Ei="pw",Ej="username",Ed=fg,Ee=oJ,Ef=cl,Eg=cp,D$=bT,Ea=hB,Eb=dc,FS=[0,0,1],Gp=[0,df,119,13],Go=[0,df,mz,19],Gl=[0,df,mx,13],Gk=[0,df,96,19],Ge=[0,df,66,13],Gb=cs,Gc=hY,F_=cs,F$=hY,F6=ho,F7=hV,F8=ht,F2=ho,F3=hV,F4=ht,FX=cs,FY=bT,FU=cs,FV=bT,FZ=[0,bT],F0=mh,Gf=[0,ol],Gg=[0,"item.Name"],Gh=[0,oN],Gi=[0,"sorts.date_added"],Gj=[0,oN],Gm=[0,ol],Gn=[0,"item.Type"],Gq=[0,"sorts.sort_name"],Gr=[0,"item.CollectionType"],Gs=[0,hu],Gt="virtual_folders",Gx=mh,GB="items_by_view_and_kind",GF="items_by_id",GJ="items_by_type_and_name",GM=[0,0,0],GP="to",GQ="Upgrading indexed_db schema from version",GR=[0,0],GS=[0,0],GT=[0,0],GU="Stores created:",GZ=[0,[0,[0,0,fj],"Cliquez sur le bouton !"],[0,[0,[0,1,fj],"Click on the Button !"],0]],G1="./db_worker.bc.js",Hk="Synchronized",Hi=[0,[11,"Sync in progress: ",[4,3,0,0,[12,47,[4,3,0,0,0]]]],"Sync in progress: %i/%i"],Hj="Desynchronized",Hf=nX,Hg=nX,G3="ui_servers",G6=[0,0,0,0],G7=[0,"http://localhost:8096"],G8=[0,1],G_=[0,1],Ha=[0,1],Hc=[0,80,"Connect"],HD=nK,Hz=[0,[2,0,[11,hl,[2,0,[11,nJ,0]]]],m5],HB=n4,HA=[0,[11,"background-image: url(",[3,0,[12,41,0]]],"background-image: url(%S)"],Hx="A playback error happened. This is probably due to a codec unsupported by the browser.",Hy=[0,80,"NEXT"],HC=[0,80,"now-playing-cover"],HE=[0,80,n2],HF=[0,80,"now-playing-display"],HG=[0,80,"player-wrapper"],HH=[0,80,n2],Hr="Now playing:",Hs=[0,[2,0,[11,hl,[2,0,[11,nJ,0]]]],m5],Ht=e,Hu=e,Hv="image/jpeg",Hw="500x500",Hp=[0,[2,0,[11,"/Audio/",[2,0,[11,"/universal?api_key=",[2,0,[11,"&audioCodec=aac&container=opus,mp3,aac,m4a,m4b,flac,wav,ogg&transcodingContainer=ts&transcodingProtocol=hls",0]]]]]],"%s/Audio/%s/universal?api_key=%s&audioCodec=aac&container=opus,mp3,aac,m4a,m4b,flac,wav,ogg&transcodingContainer=ts&transcodingProtocol=hls"],HL=[0,"off",0],HM=[0,"on",0],HI=[0,hH,0],HO=[0,"draggable-table",0],H1="|>",H0=[0,[2,0,[11,hl,[2,0,[11,"/Images/Primary?width=50",0]]]],"%s/Items/%s/Images/Primary?width=50"],HZ="server-error.png",H2=[2,4.],HQ=om,HR="1fr",HS=om,HT=nM,HU=mF,HV=nM,HW="#",HX=mF,HY="Order",Id="Persist ?",Ie="tracks",If=[0,1],Ia=nK,H9='""',H_="Updating main view:",H$=[0,0],H5=fj,H4="toto1",H6="Welcome to OCAMIX",H7=nR,H8=nR,Ib=[0,"main-layout"];function -J(a){if(typeof -a==="number")return 0;switch(a[0]){case -0:return[0,J(a[1])];case -1:return[1,J(a[1])];case -2:return[2,J(a[1])];case -3:return[3,J(a[1])];case -4:return[4,J(a[1])];case -5:return[5,J(a[1])];case -6:return[6,J(a[1])];case -7:return[7,J(a[1])];case -8:var -c=a[1];return[8,c,J(a[2])];case -9:var -b=a[1];return[9,b,b,J(a[3])];case -10:return[10,J(a[1])];case -11:return[11,J(a[1])];case -12:return[12,J(a[1])];case -13:return[13,J(a[1])];default:return[14,J(a[1])]}}function -ad(a,b){if(typeof -a==="number")return b;switch(a[0]){case -0:return[0,ad(a[1],b)];case -1:return[1,ad(a[1],b)];case -2:return[2,ad(a[1],b)];case -3:return[3,ad(a[1],b)];case -4:return[4,ad(a[1],b)];case -5:return[5,ad(a[1],b)];case -6:return[6,ad(a[1],b)];case -7:return[7,ad(a[1],b)];case -8:var -c=a[1];return[8,c,ad(a[2],b)];case -9:var -d=a[2],e=a[1];return[9,e,d,ad(a[3],b)];case -10:return[10,ad(a[1],b)];case -11:return[11,ad(a[1],b)];case -12:return[12,ad(a[1],b)];case -13:return[13,ad(a[1],b)];default:return[14,ad(a[1],b)]}}function -F(a,b){if(typeof -a==="number")return b;switch(a[0]){case -0:return[0,F(a[1],b)];case -1:return[1,F(a[1],b)];case -2:var -c=a[1];return[2,c,F(a[2],b)];case -3:var -d=a[1];return[3,d,F(a[2],b)];case -4:var -e=a[3],f=a[2],g=a[1];return[4,g,f,e,F(a[4],b)];case -5:var -h=a[3],i=a[2],j=a[1];return[5,j,i,h,F(a[4],b)];case -6:var -k=a[3],l=a[2],m=a[1];return[6,m,l,k,F(a[4],b)];case -7:var -n=a[3],o=a[2],p=a[1];return[7,p,o,n,F(a[4],b)];case -8:var -q=a[3],r=a[2],s=a[1];return[8,s,r,q,F(a[4],b)];case -9:var -t=a[1];return[9,t,F(a[2],b)];case -10:return[10,F(a[1],b)];case -11:var -u=a[1];return[11,u,F(a[2],b)];case -12:var -v=a[1];return[12,v,F(a[2],b)];case -13:var -w=a[2],x=a[1];return[13,x,w,F(a[3],b)];case -14:var -y=a[2],z=a[1];return[14,z,y,F(a[3],b)];case -15:return[15,F(a[1],b)];case -16:return[16,F(a[1],b)];case -17:var -A=a[1];return[17,A,F(a[2],b)];case -18:var -B=a[1];return[18,B,F(a[2],b)];case -19:return[19,F(a[1],b)];case -20:var -C=a[2],D=a[1];return[20,D,C,F(a[3],b)];case -21:var -E=a[1];return[21,E,F(a[2],b)];case -22:return[22,F(a[1],b)];case -23:var -G=a[1];return[23,G,F(a[2],b)];default:var -H=a[2],I=a[1];return[24,I,H,F(a[3],b)]}}function -fC(a){return[0,a]}function -dB(a){return a[1]}function -fD(a,b,c){return a[1]===b?(a[1]=c,1):0}function -b0(a){throw h([0,ak,a],1)}function -B(a){throw h([0,ir,a],1)}function -iv(a,b){return IE(a,b)?a:b}function -dC(a){return 0<=a?a:-a|0}var -dD=nl;function -j(a,b){var -c=m(a),e=m(b),d=G(c+e|0);a3(a,0,d,0,c);a3(b,0,d,c,e);return dx(d)}function -fG(a){if(0<=a&&_>=a)return a;return B(pD)}function -dE(a){return a?pE:pF}function -aP(a){return e+a}function -pG(b){var -e=m(b);return function(a){var -c=a;for(;;){if(e<=c)return j(b,pH);var -d=p(b,c);a:{if(48<=d){if(58>d)break a}else if(45===d)break a;return b}var -c=c+1|0}}(0)}function -dF(a){return pG(dr("%.12g",a))}function -iw(a,b){if(!a)return b;var -c=a[1];return[0,c,iw(a[2],b)]}po(0);var -pI=ig(1),aQ=ig(2);function -pJ(a,b,c){var -d=ig(pw(c,a,b));pq(d,c);return d}function -bH(a,b){return ih(a,b,0,m(b))}function -ix(a){bF(a);pn(a);return}function -pO(a,b,c){var -d=po(pw(c,a,b));pq(d,c);return d}function -iy(a){return pO(pP,0,a)}function -iz(a){bH(aQ,a);pp(aQ,10);return bF(aQ)}var -fH=fC(function(a){return function(a){var -b=a;for(;;){if(!b)return 0;var -d=b[2],e=b[1];try{bF(e)}catch(f){var -c=I(f);if(c[1]!==fF)throw h(c,0)}var -b=d}}(I_(0))});function -fI(a){return g(dB(fH),0)}im(oc,fI);function -pC(a){return a^-1}function -pK(a){return pJ(pL,438,a)}function -pM(a,b,c,d){if(0<=c&&0<=d&&(m(b)-d|0)>=c)return ih(a,b,c,d);return B(pN)}function -pQ(a,b,c,d){if(0<=c&&0<=d&&(ac(b)-d|0)>=c)return I8(a,b,c,d);return B(pR)}function -pS(c){for(;;){var -d=fC(1),a=dB(fH);let -e=d,f=a;var -b=1-fD(fH,a,function(a){if(fD(e,1,0))g(c,0);return g(f,0)});if(!b)return b}}function -iA(a){return pn(a)}function -cD(a,b){return pp(a,b)}function -dG(a){return bF(a)}var -fJ=Jn(0),b1=(4*fJ|0)-1|0;function -iB(a){return 1-(typeof -a==="number"?1:0)}var -pU=[z,pT,aG(0)];function -pV(a){throw h(pU,1)}function -pW(a){var -d=a[1];a[1]=pV;try{var -c=g(d,0);Jd(a,c);return c}catch(f){var -b=I(f);a[1]=function(a){throw h(b,0)};throw h(b,0)}}function -fK(a,b){return b?[0,g(a,b[1])]:0}function -iC(a){return a?1:0}function -pX(a,b){return a?a[1]:b}function -pY(a){return a?a[1]:B(pZ)}function -iD(a){return 0===a[0]?a[1]:B(p0)}function -p1(a,b){return 0===b[0]?[0,g(a,b[1])]:b}function -N(a){if(0<=a&&_>=a)return a;return B(p2)}function -p3(a){a:{if(40<=a){if(92===a)return p4;if(co>a)break a}else{if(32<=a){if(39<=a)return p5;break a}if(14>a)switch(a){case -8:return p6;case -9:return p7;case -10:return p8;case -13:return p9}}var -b=G(4);x(b,0,92);x(b,1,48+(a/dd|0)|0);x(b,2,48+((a/10|0)%10|0)|0);x(b,3,48+(a%10|0)|0);return dx(b)}var -c=G(1);x(c,0,a);return dx(c)}function -p_(a){return 25>>0?a:a+ns|0}function -p$(a,b){var -d=a,c=b;for(;;){if(!c)return d;var -d=d+1|0,c=c[2]}}function -fL(a){return p$(0,a)}function -bI(a,b){var -c=a,d=b;for(;;){if(!c)return d;var -e=[0,c[1],d],c=c[2],d=e}}function -ae(a){return bI(a,0)}function -iE(a,b,c){if(b<=a)return 0;var -d=g(c,a);return[0,d,iE(a+1|0,b,c)]}function -qa(a,b){return[0,a,b]}function -qb(a){return a?a[1]:b0(qc)}function -qd(a,b,c,d){var -f=a,e=b;for(;;){if(c<=e)return f;var -f=[0,g(d,e),f],e=e+1|0}}function -fM(a){if(!a)return 0;var -b=a[1];return iw(b,fM(a[2]))}function -a5(a,b){if(!b)return 0;var -c=b[2],d=g(a,b[1]);return[0,d,a5(a,c)]}function -iF(e,b){return function(a,b){var -d=a,c=b;for(;;){if(!c)return d;var -f=c[2],d=[0,g(e,c[1]),d],c=f}}(0,b)}function -ay(a,b){var -c=b;for(;;){if(!c)return 0;var -d=c[2];g(a,c[1]);var -c=d}}function -iG(a,b,c){var -e=b,d=c;for(;;){if(!d)return e;var -f=d[2],e=i(a,e,d[1]),d=f}}function -fN(a,b){var -c=b;for(;;){if(!c)throw h(al,1);var -d=c[1],e=c[2],f=d[2];if(d[1]===a)return f;var -c=e}}function -qe(a,b){return 0<=a?50>1,s=p(r,b),D=s[1],t=p(a-r|0,s[2]),E=t[2];return[0,B(D,t[1],0),E]}function -p(a,b){if(2===a){if(b){var -j=b[2];if(j){var -k=j[1],g=b[1],B=j[2],q=i(d,g,k),C=0===q?[0,g,0]:0>1,s=h(r,b),D=s[1],t=h(a-r|0,s[2]),E=t[2];return[0,A(D,t[1],0),E]}var -a=fL(b);return 2<=a?h(a,b)[1]:b}function -iH(a,b){return a<=b?a:b}function -iI(a,b){return b<=a?a:b}function -iJ(a){return e+a}function -qm(a,b){return pj(a,b)}function -bJ(a,b){var -c=G(a);IA(c,0,a,b);return c}function -iK(a){var -b=ac(a),c=G(b);bj(a,0,c,0,b);return c}function -iL(a){return iK(bD(a))}function -fO(a,b,c){if(0<=b&&0<=c&&(ac(a)-c|0)>=b){var -d=G(c);bj(a,b,d,0,c);return d}return B(qn)}function -cE(a,b,c){return dx(fO(a,b,c))}function -cF(a,b,c,d,e){if(0<=e&&0<=b&&(ac(a)-e|0)>=b&&0<=d&&(ac(c)-e|0)>=d){bj(a,b,c,d,e);return}return B(qo)}function -a6(a,b,c,d,e){if(0<=e&&0<=b&&(m(a)-e|0)>=b&&0<=d&&(ac(c)-e|0)>=d){a3(a,b,c,d,e);return}return B(qp)}function -qr(a,b){var -d=ac(b);if(0===d)return b;var -e=G(d),f=d-1|0,h=0;if(f>=0){var -c=h;for(;;){x(e,c,g(a,h6(b,c)));var -i=c+1|0;if(f===c)break;var -c=i}}return e}function -fP(a){return bD(a)}function -am(a){return dx(a)}function -qq(a){var -b=[0,0],j=ac(a)-1|0,l=0;if(j>=0){var -g=l;for(;;){var -e=h6(a,g);a:{b:{c:{if(32<=e){var -h=e-34|0;if(58>>0){if(93<=h)break c}else if(56>>0)break b;var -i=1;break a}if(11<=e){if(13===e)break b}else if(8<=e)break b}var -i=4;break a}var -i=2}b[1]=b[1]+i|0;var -o=g+1|0;if(j===g)break;var -g=o}}if(b[1]===ac(a))return iK(a);var -c=G(b[1]);b[1]=0;var -k=ac(a)-1|0,m=0;if(k>=0){var -f=m;for(;;){var -d=h6(a,f);a:{b:{c:{if(35<=d){if(92!==d){if(co<=d)break c;break b}}else{if(32>d){if(14<=d)break c;switch(d){case -8:x(c,b[1],92);b[1]++;x(c,b[1],98);break a;case -9:x(c,b[1],92);b[1]++;x(c,b[1],116);break a;case -10:x(c,b[1],92);b[1]++;x(c,b[1],mz);break a;case -13:x(c,b[1],92);b[1]++;x(c,b[1],114);break a;default:break c}}if(34>d)break b}x(c,b[1],92);b[1]++;x(c,b[1],d);break a}x(c,b[1],92);b[1]++;x(c,b[1],48+(d/dd|0)|0);b[1]++;x(c,b[1],48+((d/10|0)%10|0)|0);b[1]++;x(c,b[1],48+(d%10|0)|0);break a}x(c,b[1],d)}b[1]++;var -n=f+1|0;if(k===f)break;var -f=n}}return c}function -qs(a){return qr(p_,a)}function -aJ(a,b){return am(bJ(a,b))}function -dH(a,b,c){return am(fO(fP(a),b,c))}function -qt(a,b){return b<=a?a:B(qu)}function -qv(a,b,c){var -e=a,d=c;for(;;){if(!d)return e;var -f=d[1];if(!d[2])return m(f)+e|0;var -g=d[2],e=qt((m(f)+b|0)+e|0,e),d=g}}function -qw(a,b,c,d,e){var -h=b,g=e;for(;;){if(!g)return a;var -f=g[1];if(!g[2]){a3(f,0,a,h,m(f));return a}var -i=g[2];a3(f,0,a,h,m(f));a3(c,0,a,h+m(f)|0,d);var -h=(h+m(f)|0)+d|0,g=i}}function -dI(a,b){if(!b)return qx;var -c=m(a);return am(qw(G(qv(0,c,b)),0,a,c,b))}function -qz(a,b,c,d){var -e=c;for(;;){if(b<=e)throw h(al,1);if(aI(a,e)===d)return e;var -e=e+1|0}}function -qA(a,b,c){var -d=m(a);if(0<=b&&d>=b)try{qz(a,d,b,c);var -f=1;return f}catch(f){var -e=I(f);if(e===al)return 0;throw h(e,0)}return B(qB)}function -fQ(a,b){return qA(a,0,b)}function -fR(a,b){return dw(a,b)}function -iM(a,b){return io(a,b)}function -qy(a){return function(a,b,c){var -d=c;for(;;){if(b<=d)return a;var -e=aI(a,d)+ns|0;a:{if(59>>0){if(33>>0)break a}else if(2===e)break a;var -d=d+1|0;continue}return am(qq(fP(a)))}}(a,m(a),0)}function -qC(a){return am(qs(fP(a)))}function -iN(a,b,c,d,e){if(0<=e&&0<=b&&(a.length-1-e|0)>=b&&0<=d&&(c.length-1-e|0)>=d){Io(a,b,c,d,e);return}return B(qH)}function -qM(a,b){var -d=a,c=b;for(;;){if(!c)return d;var -d=d+1|0,c=c[2]}}function -dJ(a){if(!a)return[0];var -b=a[2],c=a[1],e=a4(qM(0,a),c);return function(a,b){var -d=a,c=b;for(;;){if(!c)return e;var -f=c[2];e[1+d]=c[1];var -d=d+1|0,c=f}}(1,b)}function -qD(a,b,c){if(0<=b&&0<=c&&(a.length-1-c|0)>=b)return Iq(a,b,c);return B(qE)}function -qF(a,b,c,d){if(0<=b&&0<=c&&(a.length-1-c|0)>=b){Ip(a,b,c,d);return}return B(qG)}function -qI(a,b,c){if(b.length-1!==c.length-1)return B(qJ);var -e=b.length-1-1|0,f=0;if(e>=0){var -d=f;for(;;){i(a,b[1+d],c[1+d]);var -g=d+1|0;if(e===d)break;var -d=g}}return 0}function -qK(a,b){var -d=b.length-1;if(0===d)return[0];var -e=a4(d,g(a,b[1])),f=d-1|0,h=1;if(f>=1){var -c=h;for(;;){e[1+c]=g(a,b[1+c]);var -i=c+1|0;if(f===c)break;var -c=i}}return e}function -qL(e){return function(a,b){var -c=a,d=b;for(;;){if(0>c)return d;var -f=[0,e[1+c],d],c=c-1|0,d=f}}(e.length-1-1|0,0)}function -qN(a,b,c){var -e=[0,c],f=b.length-1-1|0;if(f>=0){var -d=f;for(;;){e[1]=i(a,b[1+d],e[1]);var -g=d-1|0;if(0===d)break;var -d=g}}return e[1]}function -qO(a,b,c){var -h=i(a,b,ac(b)),e=0=0){var -d=o;for(;;){var -l=k(g,d)[1+d];if(0<=l)k(g,d)[1+d]=l-f|0;var -p=d+1|0;if(j===d)break;var -d=p}}}cF(b,0,c[2],c[3],e);c[3]=c[3]+e|0;return 0}function -qQ(a,b){var -c=a?a[1]:1,d=c?dL:dK,e=c?dL:dK,f=G(e_);return[0,function(a){return qO(b,f,a)},G(cn),0,0,0,0,0,0,0,[0],e,d]}function -iO(a,c){return qQ(a,function(a,b){return pQ(c,a,0,b)})}function -iP(a,b){var -c=a?a[1]:1,d=c?dL:dK,e=c?dL:dK;return[0,function(a){a[9]=1;return 0},iL(b),m(b),0,0,0,0,0,1,[0],e,d]}function -bK(a){return cE(a[2],a[5],a[6]-a[5]|0)}function -qR(a,b,c){return cE(a[2],b,c-b|0)}function -qS(k){function -q(a){return a?a[4]:0}function -d(a,b,c){var -d=a?a[4]:0,e=c?c[4]:0,f=e<=d?d+1|0:e+1|0;return[0,a,b,c,f]}function -e(a,b,c){var -g=a?a[4]:0,h=c?c[4]:0;if((h+2|0)=h){var -v=h<=g?g+1|0:h+1|0;return[0,a,b,c,v]}if(!c)return B(qW);var -j=c[3],l=c[2],f=c[1],r=q(f);if(r<=q(j))return d(d(a,b,f),l,j);if(!f)return B(qV);var -s=f[2],t=f[1],u=d(f[3],l,j);return d(d(a,b,t),s,u)}function -c(a,b){if(!b)return[0,0,a,0,1];var -d=b[3],f=b[2],g=b[1],h=i(k[1],a,f);if(0===h)return b;if(0<=h){var -j=c(a,d);return d===j?b:e(g,f,j)}var -l=c(a,g);return g===l?b:e(l,f,d)}function -l(a){return[0,0,a,0,1]}function -v(a,b){if(!b)return l(a);var -c=b[3],d=b[2];return e(v(a,b[1]),d,c)}function -w(a,b){if(!b)return l(a);var -c=b[2],d=b[1];return e(d,c,w(a,b[3]))}function -j(a,b,c){if(!a)return v(b,c);if(!c)return w(b,a);var -f=c[4],g=a[4],h=c[3],i=c[2],k=c[1],l=a[3],m=a[2],n=a[1];return(f+2|0)=a>>>0)switch(a){case -0:return[0,0,b];case -1:if(b)return[0,[0,0,b[1],0,1],b[2]];break;case -2:if(b){var -g=b[2];if(g)return[0,[0,[0,0,b[1],0,1],g[1],0,2],g[2]]}break;default:if(b){var -i=b[2];if(i){var -j=i[2];if(j)return[0,[0,[0,0,b[1],0,1],i[1],[0,0,j[1],0,1],2],j[2]]}}}var -k=a/2|0,l=c(k,b),e=l[2],n=l[1];if(!e)throw h([0,f,qZ],1);var -o=e[1],m=c((a-k|0)-1|0,e[2]),p=m[2];return[0,d(n,o,m[1]),p]}return c(fL(a),a)[1]}return[0,,,,c,,,,,,,,,,,,,z,function(a){return a?0:1},function(a,b){var -c=b;for(;;){if(!c)return 0;var -f=c[3],g=c[1],d=i(k[1],a,c[2]),e=0===d?1:0;if(e)return e;var -h=0<=d?f:g,c=h}},u,n,o,,,p,,,A,function(a,b){return 0===A(a,b)?1:0},s,C,D,,,,,b,,function(a){return E(0,a)},,,,,,,,,,,function(a,b){var -c=b;for(;;){if(!c)return;var -d=c[2],e=c[3],f=c[1];if(g(a,d))return H(d,a,e);var -c=f}},,,,,,,function(a){if(!a)return z;var -e=a[2],b=a[1];if(!e)return l(b);var -f=e[2],d=e[1];if(!f)return c(d,l(b));var -g=f[2],h=f[1];if(!g)return c(h,c(d,l(b)));var -i=g[2],j=g[1];if(!i)return c(j,c(h,c(d,l(b))));if(i[2])return I(ql(k[1],a));var -m=i[1];return c(m,c(j,c(h,c(d,l(b)))))}]}function -q0(a){var -b=qS(a);return[0,b[17],b[18],b[19],b[4],,b[20],b[21],b[22],,b[25],b[28],b[29],b[30],b[31],,b[32],,,,,,b[37],b[39],,,,,,,,,,,,,b[50],b[57]]}function -cG(a){return[0,0,0]}function -cH(a){a[1]=0;a[2]=0;return}function -bL(a,b){b[1]=[0,a,b[1]];b[2]=b[2]+1|0;return 0}function -b2(a){var -b=a[1];if(!b)return 0;var -c=b[1];a[1]=b[2];a[2]=a[2]-1|0;return[0,c]}function -b3(a){var -b=a[1];return b?[0,b[1]]:0}function -q1(a,b){return ay(a,b[1])}var -iQ=[z,q2,aG(0)];function -cI(a){return[0,0,0,0]}function -fS(a){a[1]=0;a[2]=0;a[3]=0;return}function -b4(a,b){var -c=[0,a,0],d=b[3];return d?(b[1]=b[1]+1|0,d[2]=c,b[3]=c,0):(b[1]=1,b[2]=c,b[3]=c,0)}function -fT(a){var -b=a[2];if(!b)throw h(iQ,1);var -c=b[1];if(b[2]){var -d=b[2];a[1]=a[1]-1|0;a[2]=d;return c}fS(a);return c}function -fU(a){return 0===a[1]?1:0}function -q6(a,b){var -c=b;for(;;){if(!c)return;var -d=c[2];g(a,c[1]);var -c=d}}function -q3(a){var -b=a[2];return b?[0,b[1]]:0}function -q4(a){var -b=a[2];if(!b)return 0;var -c=b[1];if(b[2]){var -d=b[2];a[1]=a[1]-1|0;a[2]=d;return[0,c]}fS(a);return[0,c]}function -q5(a){return a[1]}function -q7(a,b){return q6(a,b[2])}function -q8(a){return[0,[0,0,[3,[0,0,a]]]]}function -b5(a){var -b=1<=a?a:1,c=b1=(d+b|0))break;c[1]=2*c[1]|0}if(b1a[3])throw h([0,f,rc],1);if((d+b|0)<=a[3])return;throw h([0,f,rb],1)}function -b7(a,b){var -c=a[2];if(a[3]<=c)fV(a,1);x(a[1],c,b);a[2]=c+1|0;return 0}function -bp(a,b){var -c=m(b),d=a[2]+c|0;if(a[3]=b)return cE(a[1],b,c);return B(q_)}function -q$(a){return a[2]}function -ra(a){a[2]=0;a[1]=a[4];a[3]=ac(a[1]);return}function -re(a,b,c,d){var -e=c<0?1:0;if(e)var -f=e;else -var -h=d<0?1:0,f=h||((m(b)-d|0)e){if(32!==e){if(43>e)break a;switch(e-43|0){case -5:c:if(c<(d+2|0)&&1=(d+1|0))break a;var -f=bJ(d+1|0,48);K(f,0,e);a6(b,1,f,(d-c|0)+2|0,c-1|0);return am(f)}if(71<=e){if(5>>0)break a}else if(65>e)break a}if(ca)return b;var -h=[0,0],i=m(b)-1|0,o=0;if(i>=0){var -d=o;for(;;){if(9>=aI(b,d)+hT>>>0)h[1]++;var -r=d+1|0;if(i===d)break;var -d=r}}var -j=h[1],k=G(m(b)+((j-1|0)/3|0)|0),l=[0,0];function -e(a){K(k,l[1],a);l[1]++;return}var -f=[0,((j-1|0)%3|0)+1|0],n=m(b)-1|0,p=0;if(n>=0){var -c=p;for(;;){var -g=aI(b,c);if(9>>0)e(g);else{if(0===f[1]){e(95);f[1]=3}f[1]+=-1;e(g)}var -q=c+1|0;if(n===c)break;var -c=q}}return am(k)}function -sW(a,b){return dN(a,ft(r3(a),b))}function -sX(a,b){return dN(a,ft(st(a),b))}function -sY(a,b){return dN(a,ft(sH(a),b))}function -sZ(a,b){return dN(a,IP(sf(a),b))}function -a7(d,b,c){function -a(a){switch(d[1]){case -0:var -e=45;break;case -1:var -e=43;break;default:var -e=32}return IL(c,b,e)}function -e(a){var -b=dk(c);return 3===b?c<0.?s1:s2:4<=b?s3:a}function -f(b){var -e=m(b);return function(a){var -c=a;for(;;){if(c===e)return 0;var -d=p(b,c)-46|0;a:{if(23>>0){if(55===d)break a}else if(21>>0)break a;var -c=c+1|0;continue}return 1}}(0)?b:j(b,s0)}switch(d[2]){case -5:return e(f(dr(iV(d,b),c)));case -6:return a(0);case -7:return qC(a(0));case -8:return e(a(0));default:return dr(iV(d,b),c)}}function -s4(a){var -b=p3(a),c=m(b),d=bJ(c+2|0,39);a3(b,0,d,1,c);return am(d)}function -s5(a){var -b=iR(16);fX(b,a);return iT(b)}function -c8(a,b,c,d){var -k=b,j=c,e=d;for(;;){if(typeof -e==="number")return g(k,j);switch(e[0]){case -0:var -r=e[1];return function(a){return t(k,[5,j,a],r)};case -1:var -u=e[1];return function(a){return t(k,[4,j,s4(a)],u)};case -2:return fY(k,j,e[2],e[1],function(a){return a});case -3:return fY(k,j,e[2],e[1],r2);case -4:return dO(k,j,e[4],e[2],e[3],sW,e[1]);case -5:return dO(k,j,e[4],e[2],e[3],sX,e[1]);case -6:return dO(k,j,e[4],e[2],e[3],sY,e[1]);case -7:return dO(k,j,e[4],e[2],e[3],sZ,e[1]);case -8:return s6(k,j,e[4],e[2],e[3],e[1]);case -9:return fY(k,j,e[2],e[1],dE);case -10:var -j=[7,j],e=e[1];break;case -11:var -j=[2,j,e[1]],e=e[2];break;case -12:var -j=[3,j,e[1]],e=e[2];break;case -13:var -v=e[3],w=s5(e[2]);return function(a){return t(k,[4,j,w],v)};case -14:var -x=e[3],y=e[2];return function(a){return t(k,j,F(r1(a[1],y),x))};case -15:var -z=e[1];return function(c,b){return t(k,[6,j,function(a){return i(c,a,b)}],z)};case -16:var -A=e[1];return function(a){return t(k,[6,j,a],A)};case -17:var -j=[0,j,e[1]],e=e[2];break;case -18:var -l=e[1];if(0===l[0]){let -b=j,c=k,d=e[2];var -k=function(a){return t(c,[1,b,[0,a]],d)},j=0,e=l[1][1]}else{let -b=j,c=k,d=e[2];var -k=function(a){return t(c,[1,b,[1,a]],d)},j=0,e=l[1][1]}break;case -19:throw h([0,f,s8],1);case -20:var -B=e[3],C=[8,j,s9];return function(a){return t(k,C,B)};case -21:var -D=e[2];return function(a){return t(k,[4,j,ft(mS,a)],D)};case -22:var -E=e[1];return function(a){return t(k,[5,j,a],E)};case -23:var -m=e[2],n=e[1];return a<50?mc(a+1|0,k,j,n,m):s(mc,[0,k,j,n,m]);default:var -o=e[3],p=e[1],q=g(e[2],0);return a<50?g_(a+1|0,k,j,o,p,q):s(g_,[0,k,j,o,p,q])}}}function -t(a,b,c){return bn(c8(0,a,b,c))}function -mc(a,b,c,d,e){if(typeof -d==="number")switch(d){case -0:return a<50?A(a+1|0,b,c,e):s(A,[0,b,c,e]);case -1:return a<50?A(a+1|0,b,c,e):s(A,[0,b,c,e]);case -2:throw h([0,f,s_],1);default:return a<50?A(a+1|0,b,c,e):s(A,[0,b,c,e])}switch(d[0]){case -0:return a<50?A(a+1|0,b,c,e):s(A,[0,b,c,e]);case -1:return a<50?A(a+1|0,b,c,e):s(A,[0,b,c,e]);case -2:return a<50?A(a+1|0,b,c,e):s(A,[0,b,c,e]);case -3:return a<50?A(a+1|0,b,c,e):s(A,[0,b,c,e]);case -4:return a<50?A(a+1|0,b,c,e):s(A,[0,b,c,e]);case -5:return a<50?A(a+1|0,b,c,e):s(A,[0,b,c,e]);case -6:return a<50?A(a+1|0,b,c,e):s(A,[0,b,c,e]);case -7:return a<50?A(a+1|0,b,c,e):s(A,[0,b,c,e]);case -8:return a<50?A(a+1|0,b,c,e):s(A,[0,b,c,e]);case -9:var -g=d[2];return a<50?g$(a+1|0,b,c,g,e):s(g$,[0,b,c,g,e]);case -10:return a<50?A(a+1|0,b,c,e):s(A,[0,b,c,e]);default:return a<50?A(a+1|0,b,c,e):s(A,[0,b,c,e])}}function -g$(a,g,c,d,e){if(typeof -d==="number")return a<50?A(a+1|0,g,c,e):s(A,[0,g,c,e]);switch(d[0]){case -0:var -b=d[1];return function(a){return az(g,c,b,e)};case -1:var -i=d[1];return function(a){return az(g,c,i,e)};case -2:var -j=d[1];return function(a){return az(g,c,j,e)};case -3:var -k=d[1];return function(a){return az(g,c,k,e)};case -4:var -l=d[1];return function(a){return az(g,c,l,e)};case -5:var -m=d[1];return function(a){return az(g,c,m,e)};case -6:var -n=d[1];return function(a){return az(g,c,n,e)};case -7:var -o=d[1];return function(a){return az(g,c,o,e)};case -8:var -p=d[2];return function(a){return az(g,c,p,e)};case -9:var -q=d[3],r=d[2],t=T(O(d[1]),r);return function(a){return az(g,c,ad(t,q),e)};case -10:var -u=d[1];return function(a,b){return az(g,c,u,e)};case -11:var -v=d[1];return function(a){return az(g,c,v,e)};case -12:var -w=d[1];return function(a){return az(g,c,w,e)};case -13:throw h([0,f,s$],1);default:throw h([0,f,ta],1)}}function -az(a,b,c,d){return bn(g$(0,a,b,c,d))}function -A(a,b,c,d){var -e=[8,c,tb];return a<50?c8(a+1|0,b,e,d):s(c8,[0,b,e,d])}function -fY(h,f,c,d,e){if(typeof -d==="number")return function(a){return t(h,[4,f,g(e,a)],c)};if(0===d[0]){var -b=d[2],i=d[1];return function(a){return t(h,[4,f,at(i,b,g(e,a))],c)}}var -j=d[1];return function(a,b){return t(h,[4,f,at(j,a,g(e,b))],c)}}function -dO(k,j,h,d,e,f,g){if(typeof -d==="number"){if(typeof -e==="number")return e?function(a,b){return t(k,[4,j,b9(a,i(f,g,b))],h)}:function(a){return t(k,[4,j,i(f,g,a)],h)};var -b=e[1];return function(a){return t(k,[4,j,b9(b,i(f,g,a))],h)}}if(0===d[0]){var -c=d[2],l=d[1];if(typeof -e==="number")return e?function(a,b){return t(k,[4,j,at(l,c,b9(a,i(f,g,b)))],h)}:function(a){return t(k,[4,j,at(l,c,i(f,g,a))],h)};var -n=e[1];return function(a){return t(k,[4,j,at(l,c,b9(n,i(f,g,a)))],h)}}var -m=d[1];if(typeof -e==="number")return e?function(a,b,c){return t(k,[4,j,at(m,a,b9(b,i(f,g,c)))],h)}:function(a,b){return t(k,[4,j,at(m,a,i(f,g,b))],h)};var -o=e[1];return function(a,b){return t(k,[4,j,at(m,a,b9(o,i(f,g,b)))],h)}}function -s6(i,h,g,d,e,f){if(typeof -d==="number"){if(typeof -e==="number")return e?function(a,b){return t(i,[4,h,a7(f,a,b)],g)}:function(a){return t(i,[4,h,a7(f,fW(f),a)],g)};var -b=e[1];return function(a){return t(i,[4,h,a7(f,b,a)],g)}}if(0===d[0]){var -c=d[2],j=d[1];if(typeof -e==="number")return e?function(a,b){return t(i,[4,h,at(j,c,a7(f,a,b))],g)}:function(a){return t(i,[4,h,at(j,c,a7(f,fW(f),a))],g)};var -l=e[1];return function(a){return t(i,[4,h,at(j,c,a7(f,l,a))],g)}}var -k=d[1];if(typeof -e==="number")return e?function(a,b,c){return t(i,[4,h,at(k,a,a7(f,b,c))],g)}:function(a,b){return t(i,[4,h,at(k,a,a7(f,fW(f),b))],g)};var -m=e[1];return function(a,b){return t(i,[4,h,at(k,a,a7(f,m,b))],g)}}function -g_(a,b,c,d,e,f){if(e){var -i=e[1];return function(a){return s7(b,c,d,i,g(f,a))}}var -h=[4,c,f];return a<50?c8(a+1|0,b,h,d):s(c8,[0,b,h,d])}function -s7(a,b,c,d,e){return bn(g_(0,a,b,c,d,e))}function -a8(a,b){var -c=b;for(;;){if(typeof -c==="number")return;switch(c[0]){case -0:var -f=c[1],h=iU(c[2]);a8(a,f);return bH(a,h);case -1:var -d=c[2],e=c[1];if(0===d[0]){var -i=d[1];a8(a,e);bH(a,tc);var -c=i}else{var -j=d[1];a8(a,e);bH(a,td);var -c=j}break;case -6:var -m=c[2];a8(a,c[1]);return g(m,a);case -7:a8(a,c[1]);return dG(a);case -8:var -n=c[2];a8(a,c[1]);return B(n);case -2:case -4:var -k=c[2];a8(a,c[1]);return bH(a,k);default:var -l=c[2];a8(a,c[1]);return cD(a,l)}}}function -a9(a,b){var -c=b;for(;;){if(typeof -c==="number")return;switch(c[0]){case -0:var -f=c[1],h=iU(c[2]);a9(a,f);return bp(a,h);case -1:var -d=c[2],e=c[1];if(0===d[0]){var -i=d[1];a9(a,e);bp(a,te);var -c=i}else{var -j=d[1];a9(a,e);bp(a,tf);var -c=j}break;case -6:var -m=c[2];a9(a,c[1]);return bp(a,g(m,0));case -7:var -c=c[1];break;case -8:var -n=c[2];a9(a,c[1]);return B(n);case -2:case -4:var -k=c[2];a9(a,c[1]);return bp(a,k);default:var -l=c[2];a9(a,c[1]);return b7(a,l)}}}function -tg(a){var -c=a[1],b=b5(bV);return t(function(a){a9(b,a);return b0(b6(b))},0,c)}function -th(d){if(io(d,e))return ti;var -i=m(d);function -k(a){return g(tg(tj),d)}function -l(a){var -b=a;for(;;){if(b===i)return b;var -c=p(d,b);if(9!==c&&32!==c)return b;var -b=b+1|0}}var -j=l(0),q=function(a,b){var -c=b;for(;;){if(c===i)return c;if(25>>0)return c;var -c=c+1|0}}(j,j),a=dH(d,j,q-j|0),f=l(q),n=function(a,b){var -c=b;for(;;){if(c===i)return c;var -e=p(d,c);a:{if(48<=e){if(58>e)break a}else if(45===e)break a;return c}var -c=c+1|0}}(f,f);if(f===n)var -o=0;else -try{var -t=pk(dH(d,f,n-f|0)),o=t}catch(f){var -r=I(f);if(r[1]!==ak)throw h(r,0);var -s=k(0),o=s}if(l(n)!==i)k(0);a:{if(c(a,e)&&c(a,mo)){if(!c(a,"h")){var -b=0;break a}if(!c(a,"hov")){var -b=3;break a}if(!c(a,"hv")){var -b=2;break a}if(c(a,"v")){var -b=k(0);break a}var -b=1;break a}var -b=4}return[0,o,b]}function -tk(d,b,c){return t(function(a){a8(b,a);return g(d,b)},0,c[1])}function -dP(a,b){return tk(function(a){return 0},a,b)}function -fZ(a){return dP(aQ,a)}function -tl(c,b){return t(function(a){var -b=b5(64);a9(b,a);return g(c,b6(b))},0,b[1])}function -w(a){return tl(function(a){return a},a)}var -f0=fC(0);function -f2(a,b){var -c=a[1+b];return iB(c)?cz(c)===db?g(w(tm),c):cz(c)===253?dF(c):tn:g(w(to),c)}function -iW(a,b){if(a.length-1<=b)return tp;var -c=iW(a,b+1|0),d=f2(a,b);return i(w(tq),d,c)}function -tr(a){var -b=a.length-1;if(2>=b>>>0)switch(b){case -0:return tt;case -1:return tu;default:var -e=f2(a,1);return g(w(tv),e)}var -c=iW(a,2),d=f2(a,1);return i(w(ts),d,c)}function -tw(d){return function(a){var -b=a;for(;;){if(!b)return 0;var -e=b[2],f=b[1];a:{try{var -c=g(f,d)}catch(f){break a}if(c)return[0,c[1]]}var -b=e}}(dB(f0))}function -tx(a){if(a===fE)return ty;if(a===it)return tz;if(a[1]===is){var -b=a[2],e=b[3],i=b[2],k=b[1];return hc(w(f1),k,i,e,e+5|0,tA)}if(a[1]===f){var -c=a[2],g=c[3],l=c[2],m=c[1];return hc(w(f1),m,l,g,g+6|0,tB)}if(a[1]===iu){var -d=a[2],h=d[3],n=d[2],o=d[1];return hc(w(f1),o,n,h,h+6|0,tC)}if(0!==cz(a))return a[1];var -p=a[1][1];return j(p,tr(a))}function -dQ(a){var -b=tw(a);return b?b[1]:tx(a)}function -tD(a){var -b=[0,Iw(a)];return b}function -tE(c,b){function -a(a){return a?0===c?tF:tG:0===c?tH:tI}if(0===b[0]){var -d=b[5],e=b[4],f=b[3],h=b[6]?tJ:tL,i=b[2],j=b[7],k=a(b[1]);return[0,Ij(w(tK),k,j,i,h,f,e,d)]}if(b[1])return 0;var -l=a(0);return[0,g(w(tM),l)]}function -tN(a,b){if(!b)return dP(a,tP);var -d=b[1],e=d.length-1-1|0,h=0;if(e>=0){var -c=h;for(;;){var -f=tE(c,k(d,c)[1+c]);if(f){var -i=f[1];g(dP(a,tO),i)}var -j=c+1|0;if(e===c)break;var -c=j}}return 0}function -dR(a,b){return tN(a,tD(b))}var -tS=tR.slice();function -tT(a,b){var -e=dQ(a);g(fZ(tU),e);dR(aQ,b);var -c=I7(0);if(c<0){var -d=dC(c);iz(k(tS,d)[1+d])}return dG(aQ)}var -tV=[0];function -iX(a){var -b=pg(0);return b}function -tW(a,b){try{var -d=b?tV:iX(0);try{fI(0)}catch(f){}try{var -f=tT(a,d),e=f}catch(f){var -i=I(f),j=iX(0),k=dQ(a);g(fZ(tY),k);dR(aQ,d);var -l=dQ(i);g(fZ(tZ),l);dR(aQ,j);var -e=dG(aQ)}return e}catch(f){var -c=I(f);if(c===fE)return iz(tX);throw h(c,0)}}im(oP,function(a,b){try{var -c=tW(a,b);return c}catch(f){return 0}});function -tQ(a){for(;;){var -b=dB(f0),c=1-fD(f0,b,[0,a,b]);if(!c)return c}}function -t0(a){return pg(a)}var -t2=[z,t1,aG(0)];tQ(function(a){return a[1]===t2?[0,j(t3,dQ(a[2]))]:0});function -t4(a){return I5(a,0,m(a))}function -iY(a){return[0,a4(55,0),0]}function -t5(a,b){iN(b[1],0,a[1],0,55);a[2]=b[2];return}function -t6(a,b){function -m(a,b){return t4(j(a,iJ(b)))}function -n(a){var -b=p(a,3)<<24,c=p(a,2)<<16,d=p(a,1)<<8;return((p(a,0)+d|0)+c|0)+b|0}var -g=0===b.length-1?[0,0]:b,h=g.length-1,c=0;for(;;){k(a[1],c)[1+c]=c;var -u=c+1|0;if(54===c)break;var -c=u}var -f=[0,t7],i=54+iI(55,h)|0,o=0;if(i>=0){var -d=o;for(;;){var -e=d%55|0,l=Jb(d,h),q=k(g,l)[1+l];f[1]=m(f[1],q);var -r=n(f[1]),s=(k(a[1],e)[1+e]^r)&mE;k(a[1],e)[1+e]=s;var -t=d+1|0;if(i===d)break;var -d=t}}a[2]=0;return}function -t8(a){var -b=iY(0);t6(b,a);return b}function -f3(a){return t8(Jp(0))}function -iZ(a){a[2]=(a[2]+1|0)%55|0;var -b=a[2],c=k(a[1],b)[1+b],d=(a[2]+24|0)%55|0,e=(k(a[1],d)[1+d]+(c^(c>>>25|0)&31)|0)&mE,f=a[2];k(a[1],f)[1+f]=e;return e}function -t9(a){var -b=iY(0);t5(b,a);return b}var -t$=[0,t_.slice(),0];function -ua(a){return t9(t$)}function -ub(a){var -b=a.length-1<4?1:0,c=b||(a[4]<0?1:0);return c}try{var -Ih=pv(oB),i3=Ih}catch(f){var -i0=I(f);if(i0!==al)throw h(i0,0);try{var -Ig=pv("CAMLRUNPARAM"),i2=Ig}catch(f){var -i1=I(f);if(i1!==al)throw h(i1,0);var -i2=uc}var -i3=i2}var -dS=[m7,function(a){return f3(0)}],ud=fQ(i3,82);function -ue(a,b){var -c=a;for(;;){if(b<=c)return c;if(fJ<(c*2|0))return c;var -c=c*2|0}}function -dT(a,b){var -f=a?a[1]:ud,c=ue(16,b);if(f)var -d=cz(dS),g=c_===d?dS[1]:m7===d?pW(dS):dS,e=iZ(g);else -var -e=0;return[0,0,a4(c,0),e,c]}function -ug(m,b,c,d){var -h=d.length-1,f=a4(h,0),i=c.length-1-1|0;function -n(a){var -c=a;for(;;){if(!c)return;var -i=c[1],l=c[2],n=c[3],h=b?c:[0,i,l,0],e=g(m,i),j=k(f,e)[1+e];if(j)j[3]=h;else -k(d,e)[1+e]=h;k(f,e)[1+e]=h;var -c=n}}var -o=0;if(i>=0){var -e=o;for(;;){n(k(c,e)[1+e]);var -r=e+1|0;if(i===e)break;var -e=r}}if(b){var -j=h-1|0,p=0;if(j>=0){var -a=p;for(;;){var -l=k(f,a)[1+a];if(l)l[3]=0;var -q=a+1|0;if(j===a)break;var -a=q}}}return}function -uh(a,b){var -c=b[2],d=(c.length-1)*2|0,e=d>>0)return;return i9(a,d)}function -uu(a){var -b=q4(a[28]);if(!b)return;var -c=b[1],d=c[1];a[12]=a[12]-c[3]|0;var -e=aA(d);a[9]=a[9]+e|0;return}function -uv(a,b,c){if(typeof -c==="number")switch(c){case -0:var -j=b3(a[3]);if(!j)return;var -k=j[1][1],l=function(a,b){if(!b)return[0,a,0];var -c=b[1],d=b[2];return I0(a,c)?[0,a,b]:[0,c,l(a,d)]};k[1]=l(a[6]-a[9]|0,k[1]);return;case -1:b2(a[2]);return;case -2:b2(a[3]);return;case -3:var -n=b3(a[2]);return n?i9(a,n[1][2]):dW(a);case -4:var -o=a[10]!==(a[6]-a[9]|0)?1:0;return o?uu(a):o;default:var -p=b2(a[5]);if(p)return f5(a,g(a[25],p[1]));return}switch(c[0]){case -0:return i8(a,b,c[1]);case -1:var -d=c[2],f=c[1],q=d[1],z=d[2],r=b3(a[2]);if(!r)return;var -s=r[1],e=s[2];switch(s[1]){case -0:return b$(a,f);case -1:return bM(a,d,e);case -2:return bM(a,d,e);case -3:return a[9]<(b+m(q)|0)?bM(a,d,e):b$(a,f);case -4:return a[11]?b$(a,f):a[9]<(b+m(q)|0)?bM(a,d,e):((a[6]-e|0)+z|0)=a[14]){a[13]=i7;i_(a);if(b)dW(a);return uF(a)}jd(a,0)}}function -f9(a,b,c){var -d=a[14]=c)return aZ(a[17],jh,0,c);aZ(a[17],jh,0,80);var -c=c-80|0}}function -uS(a){return a[1]===f4?j(uU,j(a[2],uT)):uV}function -uW(a){return a[1]===f4?j(uY,j(a[2],uX)):uZ}function -u0(a){return 0}function -u1(a){return 0}function -u2(a,b,c,d,e){var -g=cI(0),h=[0,i5,u3,0];b4(h,g);var -f=cG(0);f6(f);bL([0,1,h],f);var -i=78,j=cG(0),k=cG(0),l=cG(0);return[0,f,cG(0),l,k,j,i,10,68,i,0,1,1,1,1,dD,u4,a,b,c,d,e,0,0,uS,uW,u0,u1,g]}function -jj(a,b){var -c=u2(a,b,function(a){return 0},function(a){return 0},function(a){return 0});c[19]=function(a){return uQ(c,a)};c[20]=function(a){return ji(c,a)};c[21]=function(a){return ji(c,a)};return c}function -f_(d){return jj(function(a,b,c){return pM(d,a,b,c)},function(a){return dG(d)})}function -f$(d){return jj(function(a,b,c){return re(d,a,b,c)},function(a){return 0})}var -u5=e_;function -jk(a){return b5(u5)}var -u6=jk(0),u7=f_(pI),u8=f_(aQ);f$(u6);function -uD(a,b){if(a[22]){bL(b,a[4]);g(a[26],b)}var -c=a[23];return c?cK(a,[0,dV,[5,b],0]):c}function -uI(a,b){f8(a,1);return g(a[18],0)}function -uJ(a,b){var -c=a[14]=0){var -c=h;for(;;){e[c]=g(a,k(b,c)[1+c]);var -i=c+1|0;if(f===c)break;var -c=i}}return e}function -vt(a){return new -jr(bl(2,function(c,b){return i(a,function(a){return c(a)},function(a){return b(a)})}))}function -vu(a,b){a.then(bl(1,b));return 0}function -vv(a,b){return a.then(bl(1,b))}function -vw(a,b,c){return a.then(bl(1,b),bl(1,c))}function -d1(a){return{fut:a}}function -gh(a){return a["fut"]}function -js(a,b){return vu(gh(a),b)}function -gi(a){return d1(gg(a))}function -jt(a,b){return d1(vv(gh(a),function(a){return gh(g(b,a))}))}function -d2(c,b){return jt(b,function(a){return gi(g(c,a))})}function -ju(a){return gi([0,a])}function -vz(d,b,c){return d1(vw(c,function(a){return gg([0,g(d,a)])},function(a){return gg([1,g(b,a)])}))}function -gj(a,b){return vz(a,function(a){return a},b)}function -jv(a,b){return d2(b,a)}function -jw(c,b){return function(a){return jt(c,a)}(function(a){return 0===a[0]?g(b,a[1]):gi(a)})}function -br(a,b){return d2(function(a){return p1(b,a)},a)}function -vx(a){var -c=[0,function(a){throw h([0,f,vy],1)}];function -b(a){return jq(0,"The future is already set")}return[0,d1(vt(function(a,b){c[1]=a;return 0})),function(a){g(c[1],a);c[1]=b;return 0}]}n["Event"];function -d3(a){return a[mg]}function -jx(a){a.preventDefault();return 0}function -a$(a,b,c,d){var -e=a?a[1]:{},f=bl(1,c);d.addEventListener(b,f,e);return function(a){d.removeEventListener(b,f,e);return 0}}function -jy(a){return g(a,0)}var -jz="change",gk=fj,gl="keyup";n["ArrayBuffer"];n["DataView"];n["Blob"];n["File"];var -jA=n["JSON"];function -jB(a){return jA.stringify(a)}function -gm(a){try{var -c=jA.parse(a)}catch(f){var -b=I(f);if(b[1]===dY)return[1,b[2]];throw h(b,0)}return[0,c]}n["encodeURI"];n["decodeURI"];n["encodeURIComponent"];n["decodeURIComponent"];var -gn=n["URL"];function -vH(a,b){return a?new -gn(b,a[1]):new -gn(b)}var -vI=n["URLSearchParams"];function -vJ(a){return a.toString()}function -jC(a){return a.toString()}function -aB(a,b){return[0,a,b]}function -jD(a){return[0,a,bN]}function -jE(a){return a}var -aW="class",go=bT,jF=dc,jG="placeholder",gp=nP,d4="type",d5=hi,vQ="for";function -cO(a){return aB(aW,a)}function -jH(a){return aB(vQ,a)}var -vT=jD(mi);function -vP(a,b){return[0,a,vh(0,b)]}var -vR=nb,vS="width";function -jI(a){return aB(vR,a)}function -cb(a){return aB(gp,a)}var -vV=jD("required"),bP=n["document"];function -vA(a){return a["currentTarget"]}function -vB(a){a.stopImmediatePropagation();return}var -vC="DOMContentLoaded",vD="ended",vE=hC,vF="play",vG="scroll";function -vK(a){return new -vI(a)}function -vL(a,b){var -c=new -gn(a);jp(c,vM,vJ(b));return c}function -vN(a,b){try{var -d=vH(a,b)}catch(f){var -c=I(f);if(c[1]===dY)return[1,c[2]];throw h(c,0)}return[0,d]}var -vO=[0,bN,bN];function -vU(a){return aB(go,a)}function -vW(a){return aB(d4,a)}function -vX(a){return aB(d5,a)}function -vY(a){return vP(vS,a)}function -vZ(a){return a["ownerDocument"]}if(!d0(bP))bP[mv];function -v0(a,b){a.appendChild(b);return 0}function -v1(a,b,c){var -e=b,d=c;for(;;){if(!d){if(0!==e)a.setAttribute(nP,vi([0,";"],ae(e)));return}var -f=d[2],i=d[1],g=i[2],h=i[1];if(ga(h))var -d=f;else if(dZ(h,gp))var -e=[0,g,e],d=f;else if(dZ(h,aW)){if(1-ga(g))a[hh].add(g);var -d=f}else{a.setAttribute(h,g);var -d=f}}}function -jJ(a,b,c,d){var -f=a?a[1]:bP,g=b?b[1]:0,e=f.createElement(c);v1(e,0,g);ay(function(a){return v0(e,a)},d);return e}function -ao(a,b){var -c=a?a[1]:bP;return c.createTextNode(P(b))}function -gq(a,b,c){return ga(a)?0:b?(c.setAttribute(a,b[1]),0):(c.removeAttribute(a),0)}function -v3(a){return jm(a)?0.:a}function -gr(a){return[0,a,v3,function(a){return a}]}function -gs(a,b){var -c=b[a[1]];return g(a[2],c)}function -jK(a,b,c){return b?(c[hh].add(a),0):(c[hh].remove(a),0)}var -jL="div",jM="span",v7="audio",v_="h1";function -d6(a,b,c,d){return jJ(b,c,a,d)}function -d7(a,b,c){return d6(jL,a,b,c)}function -jN(a){return a[mv]}function -d8(a,b,c){cy(a,b,c);return 0}var -d9=n[nB];function -d_(a){return fy(function(a,b,c){var -e=b,d=c;for(;;){if(!d)return a;var -f=d[2];a[e]=d[1];var -e=e+1|0,d=f}}(gd(0),0,a))}function -aR(a){return d8(d9,wh,d_(a))}function -gt(a){return d8(d9,wm,d_(a))}n[nB];var -gu=n["navigator"],wp=n["performance"],jO=n[oG];vl(n,wq);function -v2(a,b){cy(a,np,dJ(b));return}function -v4(a,b,c){var -e=a?a[1]:n[oG],d=e.getComputedStyle(c)[b];return d0(d)?bN:d}function -v5(a){return vo(a,v6)}var -v8=hH,v9="form",v$="img",wa=mW,wb="label";function -wc(a,b,c){return d6(v7,a,b,c)}function -wd(a,b,c){return d6(v_,a,b,c)}function -we(a,b,c){return d6(jM,a,b,c)}function -wf(a){var -b=a[oo];return jn(b)?b:jq(0,"Document body is null. Try to defer your script execution.")}function -wg(a){return jo(function(a){return a},a["activeElement"])}function -wi(a){return d8(d9,wj,d_(a))}function -wk(a){return d8(d9,wl,d_(a))}function -wn(a){return a}function -wo(a){return a.now()}function -wr(a,b){return n.setTimeout(bl(1,b),a)}function -ws(a){n.clearTimeout(a);return}function -wt(a){n.requestAnimationFrame(bl(1,a));return}n["ClipboardItem"];n["FormData"];var -ww=n["Headers"];function -jP(a,b,c,d,e,f,g,h,i,j,k,l,m){var -n={};n[oo]=gc(ca,function(a){return a},a);bq(n,wy,b);bq(n,wz,c);vj(n,wA,fK(function(a){return a},d));bq(n,wB,e);vn(n,wC,f);bq(n,wD,g);bq(n,wE,h);bq(n,wF,i);bq(n,wG,j);bq(n,wH,k);n["signal"]=gc(ca,function(a){return a},l);return n}var -wI=n["Request"];n["Response"];var -wK=n["fetch"];n["MediaStream"];n["MediaRecorder"];n["MessageChannel"];n["BroadcastChannel"];var -jQ="message";function -jR(a){return a["data"]}n["Notification"];n["WebSocket"];function -wu(a){return a}function -wv(a){return gj(function(a){return a},a.text())}function -wx(a,b){var -d=a?[0,a[1]]:[0],c=IZ(ww,d);function -e(a,b){a.append(b[1],b[2]);return 0}ay(function(a){return e(c,a)},b);return c}function -wJ(a,b){var -c=a?a[1]:{};return new -wI(b,c)}function -wL(a){function -b(a){return a}return function(a){return gj(b,a)}(wK(a))}function -wM(a){return a["localStorage"]}function -wN(a,b){function -c(a){return a}return function(a){return jo(c,a)}(a.getItem(b))}function -wO(a,b,c){try{a.setItem(b,c);return}catch(f){var -d=I(f);if(d[1]===dY)return;throw h(d,0)}}var -wP=n["Worker"];n["SharedWorker"];n["clients"];n["registration"];n["serviceWorker"];function -wQ(a,b){var -c=a?a[1]:ca;return new -wP(b,c)}function -wR(a,b,c){var -d=a?a[1]:ca;b.postMessage(c,d);return}function -wS(a,b){var -c=a?a[1]:ca;n.postMessage(b,c);return 0}function -wT(a){return a["height"]}function -wU(a){return a}function -wX(a){switch(a){case -0:return wY;case -1:return wZ;default:return w0}}function -wV(a){return wU(a["contentRect"])}function -wW(a){return a[mg]}function -w1(a,b,c){var -d=b?[0,c,{box:P(wX(b[1]))}]:[0,c];cy(a,"observe",d);return 0}function -w2(c){return new -n["ResizeObserver"](function(a,b){return i(c,ge(function(a){return a},a),b)})}function -jS(a){return a["mediaSession"]}function -w3(a){var -b=P(a[3]),c=P(a[2]);return{src:P(a[1]),sizes:c,type:b}}function -jT(a){var -b=gf(w3,a[4]),c=P(a[3]),d=P(a[2]);return{title:P(a[1]),artist:d,album:c,artwork:b}}function -jU(a,b,c){a.setActionHandler(b,bl(1,c));return}function -w4(a,b){aR([0,w5,[0,jT(b),0]]);var -c=jT(b);a["metadata"]=new -n["MediaMetadata"](c);return}var -w6="nexttrack",w7="previoustrack";function -w8(a,b,c,d){function -e(c,b){return fK(function(a){return[0,c,a]},b)}var -h=e(w9,a),i=e(w_,b),j=[0,h,[0,i,[0,e(w$,c),0]]],f=qj(function(a){return a})(j),g=f?[0,pm(dJ(f))]:[0];aR([0,g,0]);cy(d,"setPositionState",g);return 0}function -gv(a){return 0===a[0]?P(a[1]):vr(gv,a[1])}var -xc="upgradeneeded",xd="success";function -jV(a,b){return[0,b,a]}function -jW(a){var -b=a[1]["result"];return g(a[2],b)}function -xf(a,b,c){return[0,,c,,,,,,,,,,a[1]]}function -xg(a){return[0,a,,,,,,,,,,,function(b){return function(a){var -c=gv(b[3][1]),d=a.createIndex(P(b[2]),c);return g(b[1],d)}}]}function -gw(c){return function(a,b){var -e=a?a[1]:0,d=pm(dJ([0,[0,xi,gv(c[2][1][1])],[0,[0,xh,!!e],0]]));gt([0,xj,[0,d,0]]);var -f=b.createObjectStore(P(c[2][2]),d);return g(c[1],f)}}function -gx(a){var -b=xg(a);return[0,b[1],,,,,,,,,,,b[12]]}function -d$(a,b,c){var -d=xf(a,b,c);return[0,,d[2],,,,,,,,,,d[12]]}function -xa(a){return a["oldVersion"]}function -xb(a){return a["newVersion"]}function -xe(c,b){a$(0,xd,function(a){return i(c,a,b)},b[1]);return b}function -xk(c,b){a$(0,xc,function(a){function -b(a){return a}return i(c,a,function(a){return jV(b,a)}(vA(a)))},b[1]);return b}function -xl(a,b,c){var -d=b?[0,a,aP(b[1])]:[0,a];function -e(a,b,c){return cy(a,b,c)}function -f(a){return a}return function(a){return jV(f,a)}(function(a){return e(c,xm,a)}(qK(P,d)))}function -xn(a,b){var -c=a?a[1]:n;return c["indexedDB"]}var -xo=ms,xp="pattern";function -xq(a){function -b(a){return a|0}return function(a){return gj(b,a)}(a.persist())}function -xr(a){return a["storage"]}function -ea(a){return[0,a]}function -ap(a){return[0,a]}function -eb(a){return 0===a[0]?[0,a[1]]:0}var -cc=[0,function(a){return a}(0)];function -cP(a){return[1,0,0,0,a]}function -y(a,b){return 0===a[0]?[0,g(b,a[1])]:cP([0,a,b])}function -cd(a,b,c){if(0===a[0]){var -d=a[1];if(0===b[0])return[0,i(c,d,b[1])]}return cP([1,a,b,c])}function -ec(a){return 0===a[0]?a[1]:cP([4,a,0])}function -jX(a,b){return ec(y(a,b))}function -jY(a,b,c){switch(c[0]){case -0:throw h([0,f,xs],1);case -1:c[3]=[0,b,a,c[3]];return;default:c[2]=[0,b,a,c[2]];return}}function -gy(a,b){if(!b)throw h([0,f,xt],1);if(b[2]===a)return[0,b[1],b[3]];var -c=gy(a,b[3]),d=c[1];b[3]=c[2];return[0,d,b]}function -cQ(a,b){switch(b[0]){case -0:throw h([0,f,xu],1);case -1:var -c=gy(a,b[3]),e=c[1];b[3]=c[2];return e;default:var -d=gy(a,b[2]),g=d[1];b[2]=d[2];return g}}function -jZ(a,b,c,d){var -e=d;for(;;){if(!e)throw h([0,f,xv],1);if(e[1]===b&&e[2]===a){e[1]=c;return}var -e=e[3]}}function -gz(a,b,c,d){switch(d[0]){case -0:throw h([0,f,xw],1);case -1:return jZ(a,b,c,d[3]);default:return jZ(a,b,c,d[2])}}function -j0(a,b){var -c=b;for(;;){if(!c)throw h([0,f,xx],1);if(c[2]===a)return c[1];var -c=c[3]}}function -xy(a,b){switch(b[0]){case -0:throw h([0,f,xz],1);case -1:return j0(a,b[3]);default:return j0(a,b[2])}}function -be(a,b,c,d){switch(d[0]){case -0:throw h([0,f,xA],1);case -1:var -j=d[1];if(typeof -j==="number"&&!j){if(!c)return;if(b[1])return;b[1]=1;return}var -k=d[4];if(7===k[0]){var -n=k[2];if(1===n[0]){var -o=n[1];if(typeof -o==="number"){if(!o&&c){if(b[1])return;b[1]=1;return}}else if(c)return}}var -l=d[1];a:{if(typeof -l==="number"&&l){var -e=1;break a}var -e=c}d[1]=0;var -m=d[2];return a<50?md(a+1|0,b,e,m):s(md,[0,b,e,m]);default:var -i=d[1];d[1]=0;if(typeof -i==="number"){if(!i)return;b[1]=2;return}var -p=i[1];if(c)b[1]=2;return g(d[3],p)}}function -bs(a,b,c){return bn(be(0,a,b,c))}function -md(a,b,c,d){if(typeof -d==="number")return;switch(d[0]){case -0:var -f=d[1];return a<50?be(a+1|0,b,c,f):s(be,[0,b,c,f]);case -1:var -g=d[2];bs(b,c,d[1]);return a<50?be(a+1|0,b,c,g):s(be,[0,b,c,g]);case -2:var -h=d[3],l=d[2];bs(b,c,d[1]);bs(b,c,l);return a<50?be(a+1|0,b,c,h):s(be,[0,b,c,h]);case -3:var -i=d[4],m=d[3],n=d[2];bs(b,c,d[1]);bs(b,c,n);bs(b,c,m);return a<50?be(a+1|0,b,c,i):s(be,[0,b,c,i]);default:var -o=d[1];d[1]=0;var -j=o-1|0,p=0;if(j>=0){var -e=p;for(;;){bs(b,c,k(d[3],e)[1+e]);var -q=e+1|0;if(j===e)break;var -e=q}}return}}function -xB(a){return i(dP(aQ,xC),dR,ID(20))}function -ed(a,b){var -c=[0,0];bs(c,a,b);var -d=2<=c[1]?1:0;return d?xB(0):d}function -aS(a){return cP([5,a])}function -af(a){return a}function -$(a,b){if(1===a[0]){var -c=a[4];if(5===c[0]){c[1]=b;return ed(0,a)}}throw h([0,f,xD],1)}function -aC(a){if(1===a[0]){var -b=a[4];if(5===b[0])return b[1]}throw h([0,f,xE],1)}function -ce(a,b,c){var -j=a,g=b,d=c;for(;;)switch(d[0]){case -0:return j;case -1:var -e=d[2];if(typeof -e==="number")throw h([0,f,xK],1);switch(e[0]){case -0:if(e[1]!==g)throw h([0,f,xL],1);var -o=0;break;case -1:var -B=e[2],C=e[1];if(C===g)var -D=[0,B];else{if(B!==g)throw h([0,f,xM],1);var -D=[0,C]}var -o=D;break;case -2:var -u=e[3],v=e[2],w=e[1];if(w===g)var -x=[1,v,u];else if(v===g)var -x=[1,w,u];else{if(u!==g)throw h([0,f,xN],1);var -x=[1,w,v]}var -o=x;break;case -3:var -p=e[4],q=e[3],r=e[2],s=e[1];if(s===g)var -t=[2,r,q,p];else if(r===g)var -t=[2,s,q,p];else if(q===g)var -t=[2,s,r,p];else{if(p!==g)throw h([0,f,xO],1);var -t=[2,s,r,q]}var -o=t;break;default:var -n=cQ(d,g);if(k(e[3],n)[1+n]!==g)throw h([0,f,xP],1);var -m=e[2]-1|0;e[2]=m;if(n>>2|0))var -U=qD(e[3],0,L>>>1|0),M=[4,e[1],e[2],U];else -var -M=e;var -K=M}var -o=K}d[2]=o;if(typeof -o!=="number")return j;var -y=d[1];d[1]=1;var -l=d[4];switch(l[0]){case -0:var -g=d,d=l[1];break;case -1:var -N=l[2],j=ce(j,d,l[1]),g=d,d=N;break;case -2:var -O=l[2],j=ce(j,d,l[1]),g=d,d=O;break;case -3:var -P=l[2],j=ce(j,d,l[1]),g=d,d=P;break;case -4:var -z=l[2],A=ce(j,d,l[1]);if(!z)return A;var -Q=z[1];l[2]=0;var -j=A,g=d,d=Q;break;case -5:return j;case -6:if(typeof -y==="number")return j;var -R=y[1];try{i(l[2],d,R);return j}catch(f){var -S=I(f);return[0,[0,S,t0(0)],j]}default:var -T=l[1],j=ce(j,d,l[2]),g=d,d=T}break;default:throw h([0,f,xQ],1)}}function -bt(a,b){var -e=a,c=b;for(;;)switch(c[0]){case -0:return;case -1:var -n=typeof -c[2]==="number"?1:0,d=c[2];if(typeof -d==="number")var -j=[0,e];else -switch(d[0]){case -0:var -j=[1,e,d[1]];break;case -1:var -j=[2,e,d[1],d[2]];break;case -2:var -j=[3,e,d[1],d[2],d[3]];break;case -3:var -o=[0,d[1],d[2],d[3],d[4],e,cc,cc,cc],l=0;for(;;){jY(c,l,k(o,l)[1+l]);var -w=l+1|0;if(4===l)break;var -l=w}var -j=[4,5,5,o];break;default:var -i=d[2];if(i>>1|0)}function -j9(a,b,c){if(typeof -a!=="number"){if(0!==a[0]){if(a[2]!==b)throw h([0,f,yg],1);a[2]=c;return}if(a[2]===b){a[2]=c;return}if(a[4]===b){a[4]=c;return}}throw h([0,f,yf],1)}function -hb(a,b,c){if(typeof -c!=="number"&&0===c[0]){var -d=c[4];if(typeof -d!=="number"&&1!==d[0]){var -g=c[5],e=d[2];if(typeof -e==="number")var -i=0;else{if(0!==e[0])throw h([0,f,yk],1);e[5]=c;var -i=e}d[2]=c;c[4]=i;c[5]=d;d[5]=g;j9(g,c,d);gD(b,c);return a<50?c9(a+1|0,b,d):s(c9,[0,b,d])}}throw h([0,f,yj],1)}function -yh(a,b){return bn(hb(0,a,b))}function -ha(a,b,c){if(typeof -c!=="number"&&0===c[0]){var -d=c[2];if(typeof -d!=="number"&&1!==d[0]){var -g=c[5],e=d[4];if(typeof -e==="number")var -i=0;else{if(0!==e[0])throw h([0,f,ym],1);e[5]=c;var -i=e}d[4]=c;c[2]=i;c[5]=d;d[5]=g;j9(g,c,d);gD(b,c);return a<50?c9(a+1|0,b,d):s(c9,[0,b,d])}}throw h([0,f,yl],1)}function -yi(a,b){return bn(ha(0,a,b))}function -mf(a,b,c){if(typeof -c!=="number"&&0===c[0]){var -d=c[4];a:if(typeof -d!=="number"&&0===d[0]){var -e=cf(d[2]);if(gC(cf(d[4]),e)){yi(b,d);break a}}return a<50?hb(a+1|0,b,c):s(hb,[0,b,c])}throw h([0,f,yn],1)}function -me(a,b,c){if(typeof -c!=="number"&&0===c[0]){var -d=c[2];a:if(typeof -d!=="number"&&0===d[0]){var -e=cf(d[4]);if(gC(cf(d[2]),e)){yh(b,d);break a}}return a<50?ha(a+1|0,b,c):s(ha,[0,b,c])}throw h([0,f,yo],1)}function -c9(a,b,c){if(typeof -c!=="number"&&0===c[0]){var -d=cf(c[2]),e=cf(c[4]);return d>>2|0}function -aX(a,b){if(typeof -a==="number")var -c=b;else{if(typeof -b!=="number"){var -d=ei(b);return[1,(ka(ei(a),d)+1|0)<<2,a,b]}var -c=a}return c}function -gE(a){return typeof -a==="number"?0:0===a[0]?[0,a[2]]:[1,a[2],a[3]]}var -gF=1,gG=2,yN=3;function -kb(a){return-1===a?1:0}function -gH(a){return-1!==a?1:0}function -cg(a){return(a&3)===3?1:0}function -kc(a){return(a&3)===1?1:0}function -kd(a){return(a&3)===2?1:0}function -ke(a){return a|3}function -yO(a){return a>>>2|0}function -kf(a){return a<<2|2}function -cR(a){return a&pC(yN)}function -kg(a){return a[2]}function -kh(a){return a[3]}function -ki(a){return[0,0,0,0]}function -ej(a){a[1]=a[1]+1|0;return}function -ek(a){a[2]=a[2]+1|0;return}function -el(a){a[3]=a[3]+1|0;return}function -gI(a,b,c){var -d=c;for(;;){if(typeof -d==="number")return;if(0===d[0]){var -e=d[1],i=(e&3)!==3?1:0,l=i?0!==(e&3)?1:0:i;if(l){if(0!==(e&b))throw h([0,f,yQ],1);ej(a);el(a);d[1]=e|3}return}var -g=d[1],j=(g&3)!==3?1:0,k=j?0!==(g&3)?1:0:j;if(!k)return k;if(0!==(g&b))throw h([0,f,yR],1);ej(a);el(a);d[1]=g|3;gI(a,b,d[2]);var -d=d[3]}}function -em(a,b,c,d){if(typeof -d==="number")return;if(0===d[0]){var -e=d[1];if(0===(e&c)){ej(a);if(0===(e&3))d[1]=e|c;else{d[1]=-1;el(a);ek(a)}}var -g=-1!==e?1:0,h=g?(e&3)===3?1:0:g;return h?(d[1]=-1,ek(a)):h}var -f=d[1];if(0===(f&c)){ej(a);if(0===(f&3)){d[1]=f|c;b4(d,b)}else{d[1]=-1;el(a);ek(a);gI(a,c,d[2]);gI(a,c,d[3])}}var -i=-1!==f?1:0,j=i?(f&3)===3?1:0:i;return j?(d[1]=-1,ek(a)):j}function -gJ(a,b,c){var -d=fT(b);if(typeof -d!=="number"&&1===d[0]){var -e=(d[1]&3)===c?1:0;return e?(em(a,b,c,d[2]),em(a,b,c,d[3])):e}throw h([0,f,yS],1)}function -kj(a,b,c){for(;;){if(fU(b))return;gJ(a,b,c)}}function -yT(a,b,c,d){for(;;){if(fU(c))return kj(b,d,gG);if(fU(d))return kj(a,c,gF);gJ(a,c,gF);gJ(b,d,gG)}}function -gK(a){var -b=a[6];a[6]=b+1|0;return b}function -gL(a){var -b=a;for(;;){if(typeof -b==="number")return;if(0===b[0]){var -c=b[1];if(typeof -c!=="number"&&0===c[0]){var -e=c[1],i=gH(e),l=i?cg(e):i;if(l)c[1]=cR(e);return}throw h([0,f,yY],1)}var -d=b[1];if(typeof -d!=="number"&&1===d[0]){var -g=d[1],m=b[4],n=b[3],j=gH(g),k=j?cg(g):j;if(!k)return k;d[1]=cR(g);gL(n);var -b=m;continue}throw h([0,f,yZ],1)}}function -kk(a,b){var -c=b;for(;;){if(typeof -c==="number")return;if(0===c[0]){var -d=c[1];if(typeof -d!=="number"&&0===d[0]){var -e=d[1],u=c[2];if(!kc(e)){if(kb(e)){var -j=gK(a);k(a[4],j)[1+j]=d;k(a[5],j)[1+j]=[0,c,0];d[1]=kf(j);return}if(kd(e)){var -n=yO(e),v=[0,c,k(a[5],n)[1+n]];k(a[5],n)[1+n]=v;return}var -q=cg(e);if(q)throw h([0,f,y2],1);return q}var -m=a[2];if(-1a[3])throw h([0,f,y1],1)}d[1]=cR(e);return}throw h([0,f,y0],1)}var -g=c[1];if(typeof -g!=="number"&&1===g[0]){var -r=c[4],s=c[3],i=g[1],w=c[2];if(kb(i)){var -l=gK(a);k(a[4],l)[1+l]=g;k(a[5],l)[1+l]=[0,c,0];g[1]=kf(l);gL(s);return gL(r)}if(!kc(i)){if(kd(i)){var -o=i>>>2|0,x=[0,c,k(a[5],o)[1+o]];k(a[5],o)[1+o]=x;return}var -t=cg(i);if(t)throw h([0,f,y5],1);return t}if(-1a[3])throw h([0,f,y4],1)}g[1]=cR(i);kk(a,s);var -c=r;continue}throw h([0,f,y3],1)}}function -cS(a,b){if(typeof -b==="number")return 0;if(0!==b[0]){var -i=b[1];if(-1===i){var -l=gK(a);b[1]=0;k(a[4],l)[1+l]=b;var -p=cS(a,b[2]);return[1,b,0,p,cS(a,b[3])]}if(!cg(i)){b[1]=cR(b[1]);var -r=cS(a,b[2]);return[1,b,0,r,cS(a,b[3])]}var -d=i>>>2|0,j=k(a[5],d)[1+d];if(!j)throw h([0,f,y8],1);var -m=j[2],q=j[1];k(a[5],d)[1+d]=m;if(0===m)b[1]=0;return q}var -e=b[1];if(gH(e)&&cg(e)){var -c=e>>>2|0,g=k(a[5],c)[1+c];if(!g)return[0,b,0];var -n=g[2],o=g[1];k(a[5],c)[1+c]=n;return o}b[1]=0;return[0,b,0]}var -gM=[0,0,[0],0,0];function -yP(a){return a[1]}function -yU(a){return a[1]}function -yV(a){return a[2]}function -yW(a,b){var -c=ki(0),d=ki(0),e=cI(0),f=cI(0);em(c,e,gF,a);em(d,f,gG,b);yT(c,d,e,f);return[0,c,d]}function -yX(a){if(typeof -a==="number")return;if(0===a[0]){a[1]=0;return}var -b=ei(a[3]);a[1]=(ka(ei(a[2]),b)+1|0)<<2;return}function -y6(a){var -e=a[6]-1|0,g=0;if(e>=0){var -b=g;for(;;){var -c=k(a[4],b)[1+b];if(typeof -c!=="number")if(0===c[0])c[1]=ke(c[1]);else -c[1]=ke(c[1]);var -d=k(a[5],b)[1+b];if(!d)throw h([0,f,y7],1);if(d[2]){var -i=ae(d);k(a[5],b)[1+b]=i}var -j=b+1|0;if(e===b)break;var -b=j}}return}function -kl(a,b,c){if(typeof -b==="number"){if(typeof -c==="number")return[0,gM,0]}else if(b[1]===c)return[0,gM,b];var -t=typeof -b==="number"?ba:b[1],m=yW(t,c),i=yU(m),n=yV(m),u=kh(n),v=kh(i)+u|0,o=yP(i)-v|0,w=kg(n),p=kg(i)+w|0,x=0,y=a4(p,0),z=a4(p,0),A=a?o:-1,B=a?0:-1,C=a?a4(o,0):[0],d=[0,C,B,A,z,y,x];kk(d,b);if(d[2]!==d[3])throw h([0,f,y9],1);y6(d);var -q=cS(d,c),r=d[6]-1|0;if(r>=0){var -g=r;for(;;){yX(k(d[4],g)[1+g]);var -F=g-1|0;if(0===g)break;var -g=F}}if(!a)return[0,gM,q];var -j=[0,0],l=[0,0],s=d[6]-1|0,D=0;if(s>=0){var -e=D;for(;;){ay(function(a){if(typeof -a!=="number")if(0===a[0]){var -b=a[2];if(b){j[1]=[0,b[1],j[1]];return 0}}else{var -c=a[2];if(c){l[1]=[0,c[1],l[1]];return 0}}return 0},k(d[5],e)[1+e]);var -E=e+1|0;if(s===e)break;var -e=E}}return[0,[0,d[2],d[1],j[1],l[1]],q]}function -y_(d,b){if(typeof -b==="number")return 0;function -c(a){a:if(typeof -a!=="number"){b:{if(0===a[0]){var -b=a[1];if(typeof -b!=="number"&&0===b[0]){var -e=a[2];if(e){var -j=e[1];break b}var -k=g(d[1],b[2]);a[2]=[0,k];return k}break a}var -l=a[2];if(!l){var -n=c(a[3]),o=c(a[4]),m=i(d[2],n,o);a[2]=[0,m];return m}var -j=l[1]}return j}throw h([0,f,y$],1)}return[0,c(b)]}function -en(a,b){return[0,[0,a,b],0]}function -eo(a){return y_(a[1],a[2])}function -za(a,b){var -c=a[1];return[0,c,kl(0,a[2],b)[2]]}function -gN(a,b){var -d=a[1],c=kl(1,a[2],b);return[0,c[1],[0,d,c[2]]]}function -ep(a,b,c,d){var -e=[0,d];if(cr===a)var -h=c[1],g=0;else if(mM<=a)var -h=c[2].length-1,g=c[1];else -var -h=c[2].length-1,g=0;var -j=h-1|0;if(j>=g){var -f=g;for(;;){var -l=k(c[2],f)[1+f];if(l)e[1]=i(b,l[1],e[1]);var -m=f+1|0;if(j===f)break;var -f=m}}if(mM>a)ay(function(a){e[1]=i(b,a,e[1]);return 0},c[3]);if(cr!==a)ay(function(a){e[1]=i(b,a,e[1]);return 0},c[4]);return}function -gO(a,b,c){if(typeof -c==="number")throw h([0,f,zb],1);if(0===c[0])return g(a,c[2]);var -d=gO(a,b,c[3]);return i(b,gO(a,b,c[2]),d)}function -ch(a,b,c){var -d=b[2],e=b[1],f=eb(c);if(f){var -g=f[1];return typeof -g==="number"?ap(e):ap(gO(a,d,g))}var -h=[0,en(a,d)];return y(c,function(a){var -b=za(h[1],a);h[1]=b;var -c=eo(b);return c?c[1]:e})}var -eq=[0,ba,aX];function -km(a,b){return eg(b,eq,a)}function -ci(a){function -e(a,b){var -c=a,d=b;for(;;){if(typeof -c==="number")return d;if(0===c[0])return[0,c[2],d];var -f=e(c[3],d),c=c[2],d=f}}return e(a,0)}var -kn=[0,ap(0),function(a,b){return cd(a,b,aX)}];function -cj(c,b){return ch(function(a){return ag(g(c,a))},eq,b)}function -ze(a,b){return ec(ch(b,kn,a))}function -bQ(a){return ze(a,function(a){return y(a,ag)})}function -zc(a){return km(a,ag)}function -zd(c,b){return ch(function(a){var -b=g(c,a);return b?ag(b[1]):ba},eq,b)}function -bv(a,b,c){return[0,a,b,c]}function -ko(a){var -b=a[1];return 82===b?iC(eb(a[2])):83<=b?iC(eb(a[2])):1}function -er(a){return pY(eb(a))}function -zf(a){return fM(a5(function(a){var -b=a[1];return 82===b?[0,er(a[2]),0]:83<=b?ci(er(a[2])):[0,a[2],0]},a))}function -kp(a){if(!a)return zg;var -b=qk(ko,a),c=b[2];return[0,zf(b[1]),c]}var -kq=np,gP="before";function -zj(a){return[0,a]}function -zk(a,b){return[1,gb,a,b]}var -zl="remove",zm="contains";function -kr(a){var -b=wg(vZ(a));return b?bO(a,zm,[0,b[1]])|0:0}function -ks(e,b){var -c=[0,en(zj,zk)];return y(b,function(a){var -b=gN(c[1],a),d=b[2],g=b[1];c[1]=d;ep(cr,function(a,b){return 0===a[0]?a[1][e8]=vk:0},g,0);var -h=kr(e),i=eo(d);if(i){var -f=function(d,b){if(0!==b[0]){if(!cN(b[1]))return b[1];var -l=f(d,b[3]),k=f(l,b[2]);b[1]=k;return k}var -c=b[1];delete -c[e8];if(c.parentNode!==e)if(cN(d))bO(e,kq,[0,c]);else -bO(d,gP,[0,c]);else{var -a=c.nextSibling!==d?1:0;if(a){if(h)var -g=kr(c),i=g?function(a){for(;;){var -b=c.nextSibling;if(b===d)return 1;if(cN(b))return 0;bO(c,gP,[0,b])}}(0):g;else -var -i=h;var -j=1-i}else -var -j=a;if(j)if(cN(d))bO(e,kq,[0,c]);else -bO(d,gP,[0,c])}return c};f(gb,i[1])}ep(cr,function(a,b){if(0!==a[0])return 0;var -c=a[1],d=jn(c[e8]),e=d?(delete -c[e8],bO(c,zl,[0]),0):d;return e},g,0);return e})}var -es=ap(0),gQ=[0,bN,bN];function -zh(a){if(!a)return zi;var -b=a[1],c=b[1];if(82===c){if(!a[2])return[0,0,[0,y(b[2],ag)]]}else -if(83<=c){if(!a[2])return[0,0,[0,b[2]]]}else if(!a[2])return[0,[0,b[2],0],0];return qg(ko,a)?[0,fM(a5(function(a){var -b=a[1];return 82===b?[0,er(a[2]),0]:83<=b?ci(er(a[2])):[0,a[2],0]},a)),0]:[0,0,[0,eg(function(a){var -b=a[1];return 82===b?y(a[2],ag):83<=b?a[2]:ap(ag(a[2]))},kn,a)]]}function -kt(c,b){function -d(a){var -b=a[2],d=a[1];return dZ(d,aW)?jK(b,1,c):gq(d,[0,b],c)}function -e(a){var -b=a[1],d=a[2];return dZ(b,aW)?jK(d,0,c):gq(b,0,c)}function -g(a){var -b=[0,gQ];return function(a){if(b[1]!==gQ)e(b[1]);var -c=jE(a);d(c);b[1]=c;return 0}}return eg(function(a){var -b=a[1];if(82===b){var -i=a[2];return y(i,g(0))}if(83>b)throw h([0,f,zn],1);var -j=a[2],c=[0,en(function(a){var -b=jE(a);d(b);return b},function(a,b){return gQ})];return y(j,function(a){var -b=gN(c[1],a),d=b[2],f=b[1];c[1]=d;ep(cr,function(a,b){return e(a)},f,0);eo(d);return 0})},[0,es,function(a,b){return es}],b)}function -gR(a,b){return a$(b[1],b[2],b[3],a)}function -zo(c,b){return eg(function(a){var -b=a[1];if(82===b){var -d=[0,0];return y(a[2],function(a){var -b=d[1];if(b)jy(b[1]);d[1]=[0,gR(c,a)];return 0})}if(83>b)throw h([0,f,zp],1);var -g=a[2],e=[0,en(function(a){return gR(c,a)},function(a,b){return a})];return y(g,function(a){var -b=gN(e[1],a),c=b[2],d=b[1];e[1]=c;ep(cr,function(a,b){return jy(a)},d,0);eo(c);return 0})},[0,es,function(a,b){return es}],b)}function -ku(a,b,c,d,e){var -n=b?b[1]:0,o=c?c[1]:0,j=kp(n),i=j[2],p=j[1],k=kp(o),l=k[2],q=k[1],m=zh(e),g=m[2],f=jJ(a,[0,p],d,m[1]);if(i)if(g)var -r=ks(f,g[1]),h=cd(kt(f,i),r,function(a,b){return b});else -var -h=y(kt(f,i),function(a){return f});else -var -h=g?ks(f,g[1]):ap(f);ay(function(a){gR(f,a);return 0},q);var -s=l?cd(zo(f,l),h,function(a,b){return b}):h;return s}function -cT(a,b,c,d,e){return ku(b,c,d,a,e)}function -kv(a,b,c,d,e){return ku(b,c,d,a,0)}function -U(a,b,c,d){return cT(jL,a,b,c,d)}function -et(a,b,c,d){return kv(wa,a,b,c,d)}function -kw(a,b,c,d){return cT(wb,a,b,c,d)}function -zq(a,b,c,d){return cT(v8,a,b,c,d)}function -zr(a,b,c,d){return cT(v9,a,b,c,d)}function -zs(a,b,c,d){return kv(v$,a,b,c,d)}function -zt(a,b,c,d){return cT(jM,a,b,c,d)}function -gS(a,b){return a===b?1:0}function -kx(a,b){return a!==b?1:0}function -cU(a,b){return ba)return(a-97|0)+10|0}else if(71>a)return(a-65|0)+10|0}else if(9>=a+hT>>>0)return a-48|0;return bw(j(zR,j(aJ(1,a),zQ)))}function -kI(a,b,c){var -f=[0,b];function -d(a,b){x(a,f[1],b);f[1]=f[1]+1|0;return}function -e(a,b){return 0===(b>>>a|0)?1:0}if(e(7,c))d(a,N(c));else if(e(11,c)){d(a,N(192|(c>>>6|0)&31));d(a,N(Q|c&63))}else if(e(16,c)){d(a,N(oU|(c>>>12|0)&15));d(a,N(Q|(c>>>6|0)&63));d(a,N(Q|c&63))}else if(e(21,c)){d(a,N(nz|(c>>>18|0)&7));d(a,N(Q|(c>>>12|0)&63));d(a,N(Q|(c>>>6|0)&63));d(a,N(Q|c&63))}else if(e(26,c)){d(a,N(z|(c>>>24|0)&3));d(a,N(Q|(c>>>18|0)&63));d(a,N(Q|(c>>>12|0)&63));d(a,N(Q|(c>>>6|0)&63));d(a,N(Q|c&63))}else{d(a,N(db|(c>>>30|0)&1));d(a,N(Q|(c>>>24|0)&63));d(a,N(Q|(c>>>18|0)&63));d(a,N(Q|(c>>>12|0)&63));d(a,N(Q|(c>>>6|0)&63));d(a,N(Q|c&63))}return f[1]}function -zS(a,b,c,d){return kI(a,b,hq+((c-55296|0)<<10|d-56320|0)|0)}function -cV(a,b,c,d){var -e=aP(d),f=c?j(zU,j(aJ(1,c[1]),zT)):zX;return bw(j(a,j(zW,j(e,j(f,j(zV,b))))))}function -gW(a){var -j=m(a),e=G(j),b=[0,0],f=[0,0],h=[0,0],c=[0,aD],k=j-1|0,n=0;if(k>=0){var -d=n;for(;;){var -g=c[1];a:if(oe<=g)if(nZ<=g)if(aD<=g)if(mL<=g)if(117===p(a,d))c[1]=oe;else -cV(zZ,a,[0,p(a,d)],d);else{var -l=p(a,d);if(92===l)c[1]=258914209;else{x(e,b[1],l);b[1]=b[1]+1|0}}else if(mr<=g){c[1]=aD;var -q=bx(p(a,d));h[1]=h[1]<<4|q;if(56320<=h[1]&&57343>=h[1]){b[1]=zS(e,b[1],f[1],h[1]);break a}cV(z0,a,0,d)}else{var -r=bx(p(a,d));h[1]=h[1]<<4|r;c[1]=mr}else if(nd<=g){var -s=bx(p(a,d));h[1]=h[1]<<4|s;c[1]=nZ}else{h[1]=bx(p(a,d));c[1]=nd}else if(ow<=g)if(oT<=g)if(m4<=g)if(92===p(a,d))c[1]=mL;else -cV(z1,a,[0,p(a,d)],d);else{var -t=bx(p(a,d));f[1]=f[1]<<4|t;if(55296<=f[1]&&56319>=f[1]){c[1]=m4;break a}b[1]=kI(e,b[1],f[1]);c[1]=aD}else if(n_<=g){var -u=bx(p(a,d));f[1]=f[1]<<4|u;c[1]=oT}else{var -v=bx(p(a,d));f[1]=f[1]<<4|v;c[1]=n_}else if(nk<=g){f[1]=bx(p(a,d));c[1]=ow}else{var -i=p(a,d);b:if(34===i){x(e,b[1],34);c[1]=aD;b[1]=b[1]+1|0}else{c:if(92<=i){if(118>i){switch(i-92|0){case -0:x(e,b[1],92);c[1]=aD;b[1]=b[1]+1|0;break;case -6:x(e,b[1],8);c[1]=aD;b[1]=b[1]+1|0;break;case -10:x(e,b[1],12);c[1]=aD;b[1]=b[1]+1|0;break;case -18:x(e,b[1],10);c[1]=aD;b[1]=b[1]+1|0;break;case -22:x(e,b[1],13);c[1]=aD;b[1]=b[1]+1|0;break;case -24:x(e,b[1],9);c[1]=aD;b[1]=b[1]+1|0;break;case -25:c[1]=nk;break;default:break c}break b}}else if(47===i){x(e,b[1],47);c[1]=aD;b[1]=b[1]+1|0;break b}cV(z2,a,[0,p(a,d)],d)}}var -o=d+1|0;if(k===d)break;var -d=o}}if(aD!==c[1])cV(zY,a,0,j);return b[1]!==j?am(fO(e,0,b[1])):a}function -zO(a){var -b=a[11];return[0,b[2],a[7]-b[3]|0,a[6]-b[3]|0]}function -zP(a){try{var -c=[3,pk(a)];return c}catch(f){var -b=I(f);if(b[1]===ak)return[2,a];throw h(b,0)}}function -kJ(a,b,c){return I1(a,b,c)}function -z3(d){function -e(a,b){var -c=0;return a<50?i(a+1|0,b,c):s(i,[0,b,c])}function -i(a,b,c){var -i=c;for(;;){var -h=kJ(kK,i,b);if(26>=h>>>0)switch(h){case -0:return z4;case -1:return z5;case -2:return 2;case -3:return 0;case -4:return 1;case -5:return 9;case -6:return 10;case -7:return g(d[5],13)?13:bw(j(z7,j(bK(b),z6)));case -8:return g(d[5],14)?14:bw(j(z9,j(bK(b),z8)));case -9:return g(d[6],11)?11:bw(j(z$,j(bK(b),z_)));case -10:return g(d[6],12)?12:bw(j(Ab,j(bK(b),Aa)));case -11:return 7;case -12:return 8;case -13:return g(d[2],3);case -14:return g(d[2],5);case -15:return g(d[2],5);case -16:return g(d[2],4);case -17:var -f=zP(bK(b));if(typeof -f!=="number")switch(f[0]){case -2:return g(d[4],f);case -3:return g(d[3],f)}return f;case -18:var -n=[4,dq(bK(b))];return g(d[2],n);case -19:return Ac;case -20:return[0,gW(qR(b,b[5]+1|0,b[6]-1|0))];case -21:return 6;case -22:return a<50?e(a+1|0,b):s(e,[0,b]);case -23:kH(b);return a<50?e(a+1|0,b):s(e,[0,b]);case -24:var -k=g(d[7],0);return 0===k[0]?(m(b),a<50?e(a+1|0,b):s(e,[0,b])):[5,k[1]];case -25:var -l=g(d[7],0);return 0===l[0]?a<50?e(a+1|0,b):s(e,[0,b]):[5,l[1]];default:return bw(j(Ae,j(bK(b),Ad)))}g(b[1],b);var -i=h}}function -f(a,b){var -c=88;return a<50?h(a+1|0,b,c):s(h,[0,b,c])}function -m(a){return bn(f(0,a))}function -h(a,b,c){var -e=c;for(;;){var -d=kJ(kK,e,b);if(3>=d>>>0)switch(d){case -0:return;case -1:kH(b);return a<50?f(a+1|0,b):s(f,[0,b]);case -2:return bw(Af);default:return a<50?f(a+1|0,b):s(f,[0,b])}g(b[1],b);var -e=d}}return[0,function(a){return bn(e(0,a))}]}function -gX(a,b){var -c=zO(a);return[0,c[1],c[2],c[3],b]}var -Ah=[z,Ag,aG(0)];function -kL(a){return 1>1)|0:0}var -Ai=53>>4|0)&15));return g(a,kM(b&15))}function -AU(a,b,c){var -f=m(c)-1|0,h=0;if(f>=0){var -e=h;for(;;){var -d=p(c,e);a:if(92===d)g(b,AV);else{b:{c:{if(35>d){if(8>d)break b;switch(d-8|0){case -0:g(b,AX);break;case -1:g(b,AY);break;case -2:g(b,AZ);break;case -4:g(b,A0);break;case -5:g(b,A1);break;case -26:g(b,A2);break;case -24:case -25:break c;default:break b}break a}if(co===d)break b}g(a,p(c,e));break a}g(b,AW);AT(a,d)}var -i=e+1|0;if(f===e)break;var -e=i}}return}function -A3(p){function -e(a){var -b=b5(dd);function -c(a){return b7(b,a)}function -d(a){return bp(b,a)}(function(a){c(34);AU(c,d,a);return c(34)}(a));return b6(b)}function -f(e,b,c,d){return u_([0,function(a,b){return g(a_(a)(A4),e)}],b,c,d)}function -d(a,b){if(typeof -b==="number")return aV(a,A5);var -c=b[1];if(cm<=c){if(bS===c)return uH(a,b[2]);if(aM>c){if(l<=c){var -j=b[2];return j?i(a_(a)(A_),function(a,b){return f(A9,d,a,b)},j):aV(a,A$)}var -k=b[2];return 0===k?aV(a,Ba):i(a_(a)(Bc),function(a,b){return f(Bb,d,a,b)},k)}if(E<=c){var -h=b[2];return h?i(a_(a)(A7),function(a,b){return f(A6,q,a,b)},h):aV(a,A8)}}else{if(bB===c)return aV(a,aP(b[2]));if(ar<=c){if(cv>c)return aV(a,g(p[8],b[2]));var -m=b[2],n=m[2],o=m[1];if(n){var -r=n[1],s=e(o);return aZ(a_(a)(Bd),s,d,r)}var -t=e(o);return g(a_(a)(Be),t)}if(bU>c)return aV(a,e(b[2]))}return aV(a,b[2])}function -q(a,b){var -c=b[2],f=e(b[1]);return aZ(a_(a)(Bf),f,d,c)}function -c(a,b){return i(a_(a)(Bg),d,b)}return[0,,,,,c,function(a){return i(vc(Bh),c,a)},function(a,b){return i(a_(f_(a))(Bi),c,b)}]}function -Bj(a){var -b=A3(a);return[0,b[5],b[6],b[7]]}function -kN(a,b){throw h([0,ak,a],1)}var -kO=function(a){return[0,,,,function(a){if(typeof -a!=="number"&&E===a[1])return a[2];return kN(Bk,a)},,,function(a){if(typeof -a!=="number"&&d===a[1])return a[2];return kN(Bl,a)}]}([0,function(a){return bX}]),kP=kO[7],Bm=kO[4];function -kQ(a){if(typeof -a==="number")switch(a){case -0:return Bn;case -1:return Bo;case -2:return Bp;case -3:return Bq;case -4:return Br;case -5:return Bs;case -6:return Bt;case -7:return Bu;case -8:return Bv;case -9:return Bw;case -10:return Bx;case -11:return By;case -12:return Bz;case -13:return BA;default:return BB}switch(a[0]){case -0:return a[1];case -1:return j(BD,j(a[1],BC));case -2:return a[1];case -3:return aP(a[1]);case -4:return dF(a[1]);case -5:return a[1];default:return a[1]?BE:BF}}function -BG(e,d){function -k(k){function -f(a){return g(e[1],k)}var -a=g(d[2],f);if(0!==a[0])return[1,a[1]];var -i=a[1];if(!i)return BI;var -l=i[1];try{var -c=f(0)}catch(f){var -b=I(f);if(b[1]===ev)return[1,b[2]];throw h(b,0)}if(typeof -c==="number"&&6===c)return[0,l];return[1,j(BH,kQ(c))]}function -b(a){var -b=k(a);return 0===b[0]?b:[1,gX(a,b[1])]}function -f(a){return b(iO(0,a))}function -c(f,b){function -i(a){return g(e[1],b)}return q8(function(a){var -c=g(d[2],i);if(0===c[0]){var -e=c[1];return e?[0,e[1]]:(g(f,0),0)}var -j=c[1];g(f,0);throw h([0,Ah,gX(b,j)],1)})}function -i(a,b){var -d=a?a[1]:function(a){return 0};return c(d,iO(0,b))}return[0,,,,,,,,,,,,,,,function(a){return b(iP(0,a))},function(a){try{var -c=iy(a),d=f(c);iA(c);return d}catch(f){var -b=I(f);if(b[1]===fF)return[1,[0,0,0,0,b[2]]];throw h(b,0)}},f,,,function(a,b){var -m=a?a[1]:0;function -n(a){return g(e[1],b)}var -f=g(d[2],n);if(0===f[0]){var -o=f[1];if(o){var -p=o[1];a:if(m)var -i=[0,[0,p]];else{try{var -l=n(0)}catch(f){var -k=I(f);if(k[1]!==ev)throw h(k,0);var -s=[1,k[2]],i=s;break a}b:{if(typeof -l==="number"&&6===l){var -r=[0,[0,p]];break b}var -r=[1,j(BJ,kQ(l))]}var -i=r}var -q=i}else -var -q=m?BK:BL;var -c=q}else -var -c=[1,f[1]];return 0===c[0]?[0,c[1]]:[1,gX(b,c[1])]},,,,,,function(a){return c(function(a){return 0},iP(0,a))},i,function(a){var -b=iy(a);return i([0,function(a){return iA(b)}],b)},,function(a){return c(function(a){return 0},a)}]}function -BM(q){function -c(a){var -b=9>>4|0)&15));return cD(a,c(b&15))}function -r(e,b){function -a(a){return bH(e,a)}var -f=m(b)-1|0;function -g(a){return cD(e,a)}var -h=0;if(f>=0){var -d=h;for(;;){var -c=p(b,d);a:if(92===c)a(BN);else{b:{c:{if(35>c){if(8>c)break b;switch(c-8|0){case -0:a(BP);break;case -1:a(BQ);break;case -2:a(BR);break;case -4:a(BS);break;case -5:a(BT);break;case -26:a(BU);break;case -24:case -25:break c;default:break b}break a}if(co===c)break b}g(p(b,d));break a}a(BO);i(e,c)}var -j=d+1|0;if(f===d)break;var -d=j}}return}function -e(k,b,c,d,e){function -h(a){return cD(k,a)}function -f(a){return bH(k,a)}function -m(a){h(34);r(k,a);return h(34)}var -n=j(BV,e);function -p(a){return f(aP(a))}function -s(a){return f(g(q[8],a))}function -i(a,b){if(typeof -b==="number")return f(BW);var -e=b[1];if(cv>e)return bU===e?f(b[2]):bB<=e?ar<=e?s(b[2]):p(b[2]):fa<=e?f(b[2]):m(b[2]);if(bS>e){if(cm<=e){var -n=b[2],q=aJ(a,32);h(40);f(c);o(a+d|0,n);f(c);f(q);return h(41)}var -r=b[2],u=aJ(a,32);h(60);f(c);v(a+d|0,r);f(c);f(u);return h(62)}if(aM<=e){if(E>e)return f(b[2]);var -g=b[2],i=aJ(a,32);h(hA);f(c);t(a+d|0,g);f(c);f(i);return h(hQ)}if(l>e)return f(dE(b[2]));var -j=b[2],k=aJ(a,32);h(91);f(c);o(a+d|0,j);f(c);f(k);return h(93)}function -t(d,b){var -a=aJ(d,32),e=[0,a],g=j(BX,j(c,a));return ay(function(a){f(e[1]);e[1]=g;return u(d,a)},b)}function -u(a,b){var -c=b[2];m(b[1]);f(n);return i(a,c)}function -o(d,b){var -a=aJ(d,32),e=[0,a],g=j(BY,j(c,a));return ay(function(a){f(e[1]);e[1]=g;return i(d,a)},b)}function -v(a,b){var -c=b[2];m(b[1]);if(!c)return;var -e=c[1];f(n);return i(a+d|0,e)}i(0,b);return f(c)}function -d(f){function -b(a,b,c,d){return e(f,a,b,c,d)}return function(a){return b(a,B0,0,BZ)}}return[0,,,,,,,,,function(a,b){var -c=pK(a);try{d(c)(b);ix(c);return}catch(f){var -e=I(f);ix(c);throw h(e,0)}},,d]}function -B1(j){function -c(a){var -b=9>>4|0)&15));return b7(a,c(b&15))}function -k(e,b){function -a(a){return bp(e,a)}var -f=m(b)-1|0;function -g(a){return b7(e,a)}var -i=0;if(f>=0){var -d=i;for(;;){var -c=p(b,d);a:if(92===c)a(B2);else{b:{c:{if(35>c){if(8>c)break b;switch(c-8|0){case -0:a(B4);break;case -1:a(B5);break;case -2:a(B6);break;case -4:a(B7);break;case -5:a(B8);break;case -26:a(B9);break;case -24:case -25:break c;default:break b}break a}if(co===c)break b}g(p(b,d));break a}a(B3);h(e,c)}var -j=d+1|0;if(f===d)break;var -d=j}}return}function -b(f,b){function -c(a){return b7(f,a)}function -d(a){return bp(f,a)}function -h(a){c(34);k(f,a);return c(34)}function -m(a){return d(aP(a))}function -n(a){return d(g(j[8],a))}function -e(a){if(typeof -a==="number")return d(B_);var -b=a[1];if(cv>b)return bU===b?d(a[2]):bB<=b?ar<=b?n(a[2]):m(a[2]):fa<=b?d(a[2]):h(a[2]);if(bS>b){if(cm<=b){var -g=a[2];c(40);i(g);return c(41)}var -j=a[2];c(60);q(j);return c(62)}if(aM<=b){if(E>b)return d(a[2]);var -e=a[2];c(hA);o(e);return c(hQ)}if(l>b)return d(dE(a[2]));var -f=a[2];c(91);i(f);return c(93)}function -o(a){var -b=[0,B$];return ay(function(a){d(b[1]);b[1]=Ca;return p(a)},a)}function -p(a){var -b=a[2];h(a[1]);c(58);return e(b)}function -i(a){var -b=[0,Cb];return ay(function(a){d(b[1]);b[1]=Cc;return e(a)},a)}function -q(a){var -b=a[2];h(a[1]);if(!b)return;var -d=b[1];c(58);return e(d)}return e(b)}return[0,,,function(a){var -c=b5(dd);b(c,a);return b6(c)},,,,,,,,b]}var -Ce=[z,Cd,aG(0)];function -Cf(a){throw h([0,Ce,a],1)}function -gZ(a){var -c=z3(a),b=function(a){return BG(c,a)}(AO(a)),e=[0,,,,,,,,,,,,,,,,,b[15],b[16],b[17],,,b[20],,,,,,b[26],b[27],b[28],,b[30]];function -f(a,b,c){var -d=c?c[1]:1,e=a[4],f=a[3],g=a[2],h=(d+a[1]|0)-1|0,i=b?j(Ch,j(b[1],Cg)):Cj;return j(Ik(w(Ci),i,h,g,f),e)}function -h(a,b,c,d){var -e=g(a,b);return 0===e[0]?e[1]:Cf(f(e[1],c,d))}return[0,,,,function(a,b,c,d){return h(e[17],d,b,c)}]}function -g0(a){var -c=B1(a),g=c[3],h=c[11],e=BM(a),i=e[9],j=e[11],b=Bj(a),f=[0,,,g,,,,,,,,h,,,,,,,,,,,,i,,j,,,,b[1],b[2],b[3]];function -k(a){function -c(a){if(typeof -a==="number")return bX;var -b=a[1];if(cv<=b){if(bS<=b)return aM<=b?E<=b?[0,E,a5(function(a){var -b=a[1];return[0,b,c(a[2])]},a[2])]:[0,ar,dq(a[2])]:l<=b?[0,l,a5(c,a[2])]:a;if(cm<=b)return[0,l,a5(c,a[2])];var -f=a[2],g=f[2],h=f[1];return g?[0,l,[0,[0,d,h],[0,c(g[1]),0]]]:[0,d,h]}if(bU===b)return[0,d,a[2]];if(bB<=b)return ar<=b?a:a;if(fa>b)return a;var -e=a[2];return 1>>0?[0,d,dH(e,1,m(e)-2|0)]:[0,d,e]}return c(a)}return[0,,,function(a,b,c,d){var -e=c?c[1]:0;if(!e)return f[3].call(null,d);var -g=k(d);return f[3].call(null,g)}]}function -kR(a){return gW(a)}function -kS(a){return a}function -kT(a){return a}function -kU(a){return Ck}function -kV(a){return 0}function -kW(a){return 0}function -kX(a){return Cl}function -kY(a){var -b=dk(a);return 3===b?a<0.?Cm:Cn:4<=b?Co:gY(a)}function -ew(a){return[0,ar,dq(a)]}function -ex(a){return[0,bB,a]}var -ey=bX;function -ez(a){return[0,d,a]}function -eA(a){return[0,bS,a]}function -kZ(a){return[0,E,a]}function -k0(a){return[0,l,a]}function -k1(a){throw h([0,ak,Cp],1)}function -k2(a){throw h([0,ak,Cq],1)}function -eB(a){if(typeof -a==="number")return fd===a?[0,ar,og]:fk<=a?[0,ar,ng]:[0,ar,n8];if(aM<=a[1])throw h([0,ak,Cr],1);return[0,ar,a[2]]}function -k3(a){return hm}function -k4(a){return hW}function -k5(a){return hR}function -k6(a){return hJ}function -k7(a){throw h([0,ak,Cs],1)}function -k8(a){throw h([0,ak,Ct],1)}function -k9(a){throw h([0,ak,Cu],1)}function -k_(a){throw h([0,ak,Cv],1)}function -k$(a){return[0,h1,a]}gZ([0,kR,kS,kT,kU,kW,kV,kX,kY,eB,ex,ew,ey,ez,eA,kZ,k0,k1,k2,[0,eB,ex,ew,ey,ez,eA,k3,k4,k5,k6,k7,k8,k9,k_,k$]]);g0([0,kR,kS,kT,kU,kW,kV,kX,kY,eB,ex,ew,ey,ez,eA,kZ,k0,k1,k2,[0,eB,ex,ew,ey,ez,eA,k3,k4,k5,k6,k7,k8,k9,k_,k$]]);function -la(a){return gW(a)}function -lb(a){return a}function -lc(a){return a}function -ld(a){return a}function -le(a){return 1}function -lf(a){return 1}function -lg(a){return Cw}function -lh(a){var -b=dk(a);return 3===b?a<0.?Cx:Cy:4<=b?Cz:gY(a)}function -eC(a){return[0,bU,a]}function -eD(a){return[0,bB,a]}var -eE=bX;function -eF(a){return[0,d,a]}function -eG(a){return[0,bS,a]}function -li(a){return[0,E,a]}function -lj(a){return[0,l,a]}function -lk(a){return[0,cm,a]}function -ll(a,b){return[0,cv,[0,a,b]]}function -eH(a){if(typeof -a==="number")return fd===a?[0,ar,og]:fk<=a?[0,ar,ng]:[0,ar,n8];if(aM<=a[1])throw h([0,ak,CA],1);return[0,ar,a[2]]}function -lm(a){return hm}function -ln(a){return hW}function -lo(a){return hR}function -lp(a){return hJ}function -lq(a){return oD}function -lr(a){return m$}function -ls(a){return mY}function -lt(a){return ny}function -lu(a){return[0,h1,a]}var -lv=gZ([0,la,lb,lc,ld,lf,le,lg,lh,eH,eD,eC,eE,eF,eG,li,lj,lk,ll,[0,eH,eD,eC,eE,eF,eG,lm,ln,lo,lp,lq,lr,ls,lt,lu]])[4],g1=g0([0,la,lb,lc,ld,lf,le,lg,lh,eH,eD,eC,eE,eF,eG,li,lj,lk,ll,[0,eH,eD,eC,eE,eF,eG,lm,ln,lo,lp,lq,lr,ls,lt,lu]])[3];function -lw(a){return j(CC,j(a,CB))}function -lx(a){return a}function -ly(a){return a}function -lz(a){return a}function -lA(a){return 1}function -lB(a){return 1}function -lC(a){return CD}function -lD(a){var -b=dk(a);return 3===b?a<0.?CE:CF:4<=b?CG:gY(a)}function -eI(a){return[0,bU,a]}function -eJ(a){return[0,bU,aP(a)]}var -eK=bX;function -eL(a){return[0,fa,a]}function -eM(a){return[0,bS,a]}function -lE(a){return[0,E,a]}function -lF(a){return[0,l,a]}function -lG(a){return[0,cm,a]}function -lH(a,b){return[0,cv,[0,a,b]]}function -eN(a){return typeof -a==="number"?fd===a?CH:fk<=a?CI:CJ:aM<=a[1]?[0,aM,a[2]]:[0,aM,dF(a[2])]}function -lI(a){return hm}function -lJ(a){return hW}function -lK(a){return hR}function -lL(a){return hJ}function -lM(a){return oD}function -lN(a){return m$}function -lO(a){return mY}function -lP(a){return ny}function -lQ(a){return[0,h1,a]}gZ([0,lw,lx,ly,lz,lB,lA,lC,lD,eN,eJ,eI,eK,eL,eM,lE,lF,lG,lH,[0,eN,eJ,eI,eK,eL,eM,lI,lJ,lK,lL,lM,lN,lO,lP,lQ]]);g0([0,lw,lx,ly,lz,lB,lA,lC,lD,eN,eJ,eI,eK,eL,eM,lE,lF,lG,lH,[0,eN,eJ,eI,eK,eL,eM,lI,lJ,lK,lL,lM,lN,lO,lP,lQ]]);f3(0);function -CK(a,b){return iZ(a)}function -CL(a){var -e=g(a,0),c=g(a,0),d=g(a,0),f=g(a,0),h=g(a,0),b=G(16),i=0;function -j(a,b,c){K(a,b,c);return}(function(a){return j(b,i,a)}(e&_));var -k=1;function -l(a,b,c){K(a,b,c);return}(function(a){return l(b,k,a)}((e>>>8|0)&_));var -m=2;function -n(a,b,c){K(a,b,c);return}(function(a){return n(b,m,a)}((e>>>16|0)&_));var -o=3;function -p(a,b,c){K(a,b,c);return}(function(a){return p(b,o,a)}(c&_));var -q=4;function -r(a,b,c){K(a,b,c);return}(function(a){return r(b,q,a)}((c>>>8|0)&_));var -s=5;function -t(a,b,c){K(a,b,c);return}(function(a){return t(b,s,a)}((c>>>16|0)&_));var -u=6;function -v(a,b,c){K(a,b,c);return}(function(a){return v(b,u,a)}(64|(c>>>24|0)&15));var -w=7;function -x(a,b,c){K(a,b,c);return}(function(a){return x(b,w,a)}(d&_));var -y=8;function -z(a,b,c){K(a,b,c);return}(function(a){return z(b,y,a)}(Q|(d>>>24|0)&63));var -A=9;function -B(a,b,c){K(a,b,c);return}(function(a){return B(b,A,a)}((d>>>8|0)&_));var -C=10;function -D(a,b,c){K(a,b,c);return}(function(a){return D(b,C,a)}((d>>>16|0)&_));var -E=11;function -F(a,b,c){K(a,b,c);return}(function(a){return F(b,E,a)}(f&_));var -H=12;function -I(a,b,c){K(a,b,c);return}(function(a){return I(b,H,a)}((f>>>8|0)&_));var -J=13;function -L(a,b,c){K(a,b,c);return}(function(a){return L(b,J,a)}((f>>>16|0)&_));var -M=14;function -N(a,b,c){K(a,b,c);return}(function(a){return N(b,M,a)}(h&_));var -O=15;function -P(a,b,c){K(a,b,c);return}(function(a){return P(b,O,a)}((h>>>8|0)&_));return am(b)}function -lR(a,b){var -i=a?a[1]:0,g=i?55:87;function -h(a,b){return 10<=b?a+b|0:48+b|0}var -e=iL(CN),c=[0,0],d=[0,0];function -f(d,b,c){function -e(a,b,c){K(a,b,c);return}(function(a){return e(d,b,a)}(h(g,c>>>4|0)));var -f=b+1|0;function -i(a,b,c){K(a,b,c);return}return function(a){return i(d,f,a)}(h(g,c&15))}for(;;){if(4<=d[1])break;var -n=p(b,d[1]);f(e,c[1],n);c[1]=c[1]+2|0;d[1]++}c[1]++;for(;;){if(6<=d[1])break;var -m=p(b,d[1]);f(e,c[1],m);c[1]=c[1]+2|0;d[1]++}c[1]++;for(;;){if(8<=d[1])break;var -l=p(b,d[1]);f(e,c[1],l);c[1]=c[1]+2|0;d[1]++}c[1]++;for(;;){if(10<=d[1])break;var -k=p(b,d[1]);f(e,c[1],k);c[1]=c[1]+2|0;d[1]++}c[1]++;for(;;){if(16<=d[1])return am(e);var -j=p(b,d[1]);f(e,c[1],j);c[1]=c[1]+2|0;d[1]++}}function -CM(b){function -c(a){return CK(b,a)}return function(a){return CL(c)}}var -eO=kG([0,fR]);function -eP(a){return jB(a)}function -eQ(a){var -b=gm(a);return 0===b[0]?[0,b[1]]:(wi([0,b[1],0]),CO)}var -CQ=ua(0);function -lS(a){return CM(CQ)(0)}function -CP(a){return eQ(a)}function -CR(a,b){g(a,b);return b}var -CU=eO[49],lT=[0,eO[1],0],CS=eO[7],CT=eO[29];function -CV(a){return kA(function(a){return[0,80,cO(D(a))]},CU(a))}function -eR(a,b){var -d=CV(b[1]),e=b[2],c=function(a){return bI(e,a)}(d);return a?[0,[0,80,vU(D(a[1]))],c]:c}function -bR(a){var -b=lT[2];return[0,CT(a),b]}function -ah(d,b,c){var -a=b[1],e=82===a?[0,82,y(b[2],function(a){return function(a){return aB(d,a)}(D(a))})]:83<=a?b0(CX):[0,80,function(a){return aB(d,a)}(D(b[2]))];return[0,e,c]}function -eS(d,b,c){return b?[0,[0,80,function(a){return aB(d,a)}(D(b[1]))],c]:c}function -CW(a,b){var -c=b[1],d=a[1],e=bI(a[2],b[2]);return[0,CS(d,c),e]}function -CY(a,b,c){return b?[0,[0,80,a],c]:c}function -CZ(a){var -b=gV(C0,a);if(b){var -e=function(a){return[0,a]};return function(a){return ck(e,a)}(gT(b[1]))}var -c=gV(C1,a);if(c){var -f=function(a){return[1,a]};return function(a){return ck(f,a)}(gT(c[1]))}var -d=gV(C2,a);if(!d)return 0;function -g(a){return[1,a]}return function(a){return ck(g,a)}(gT(d[1]))}function -lU(a){switch(a[0]){case -0:var -b=a[1];return g(w(C3),b);case -1:var -c=a[1];return g(w(C4),c);default:var -d=a[1];return g(w(C5),d)}}function -lV(a){var -c=a?a[1]:jN(bP);function -b(a){var -b=CZ(ax(v4(0,"font-size",a)));if(b){var -c=b[1];if(0===c[0])return c[1]}throw h([0,f,C6],1)}return function(a){switch(a[0]){case -0:return a[1];case -1:var -d=a[1];return d*b(jN(bP));default:var -e=a[1];return e*b(c)}}}function -g2(a,b,c){return[0,a,b,c]}function -C7(a){return qN(function(a,b){return[0,[0,82,U(0,0,0,a[3])],b]},a,0)}function -C8(a){var -b=zv(C9,function(a){return a[2]},a);return i(w(C$),C_,b)}lV(0)(De);function -Da(a){return dI(Db,[0,C8(a[1][1]),0])}function -Dc(a){var -b=lU(a[2]),c=[0,[0,80,cb(D(g(w(Dd),b)))],0],e=[0,c],d=C7(a[1][1]);return function(c){return function(a,b){return U(c,e,a,b)}}(0)(0,d)}var -cW=function(f){var -d=kG(f);function -b(a){var -b=cI(0);return[0,b,d[1]]}return[0,,b,function(c,b){var -a=1-d[3].call(null,c,b[2]);if(a){b4(c,b[1]);b[2]=d[4].call(null,c,b[2])}else{var -e=cI(0);q7(function(a){var -b=1-zy(i(f[1],c,a),0);return b?b4(a,e):b},b[1]);b4(c,e);b[1]=e}return a},function(a){var -b=fT(a[1]);a[2]=d[6].call(null,b,a[2]);return b},function(a){return q5(a[1])},function(a){var -c=b(0);a[1]=c[1];a[2]=c[2];return}]}([0,zz]);function -Df(d,b,c){var -n=lU(d[2]),p=g(w(Dh),n),k=x7(0),e=dT(0,2048),f=cW[2].call(null,0),j=aS(0);function -q(a,b,c){var -d=b?b[1]:200;function -j(a){kC(kz(e,a),function(b){return kD(j5(b),function(a){return j7(b,[0,a[1],0,a[3]])})});return}(function(b){br(g(a,b),function(a){return qI(function(a,b){kC(kz(e,a),function(c){return kD(j5(c),function(a){if(!b)throw h(al,1);var -d=b[1];return j7(c,[0,a[1],[0,d],a[3]])})});return 0},b,a)});return}(dJ(zB(function(a){return cW[3].call(null,a,f)},c))));return function(a){var -b=cW[5].call(null,f),e=cU(b,d);if(e){if(b>=d){var -c=d;for(;;){try{j(cW[4].call(null,f))}catch(f){var -i=I(f);if(i!==iQ)throw h(i,0)}var -k=c+1|0;if(b===c)break;var -c=k}}var -g=0}else -var -g=e;return g}(0)}function -r(a,b){var -e=v5(b);function -j(a){return a["offsetHeight"]}var -g=ky(e,a[1])?n0:o1;a[1]=e;var -k=j(b),l=d[2],f=lV([0,b])(l),c=k/f|0,h=((e-f)/f|0)+1|0,m=h+c|0,n=o1===g?c:c/2|0,o=0,i=function(a){return iv(o,a)}(h-n|0),p=n0===g?c:c/2|0;return zD((m+p|0)-i|0,function(a){return i+a|0})}function -s(a,b){gB(k);uf(e);cW[6].call(null,f);var -d=a-1|0,g=0;if(d>=0){var -c=g;for(;;){let -f=c;(function(a){return dU(e,f,a)}(x$([0,[0,c,0,b]],k)));var -h=c+1|0;if(d===c)break;var -c=h}}return}var -a=y(c,function(a){var -c=a[2],b=a[3];function -d(a,b){return q(c,a,b)}var -e=[0,0.];function -f(a){var -b=r(e,a);return d([0,4*fL(b)|0],b)}return jv(a[1],function(a){return 0===a[0]?(s(a[1],b),f):function(a){return 0}})}),t=y(a,function(b){return bv(0,vG,function(a){jv(b,function(c){var -d=[0,0.],b=[0,-1];function -e(e){var -a=25,f=wo(wp);if(zu(b[1],0))ws(b[1]);b[1]=wr(a,function(a){return g(c,e)});var -h=ky(f-d[1],a);return h?(d[1]=f,g(c,e)):h}return function(a){return e(a)}(d3(a))});return 0})}),l=ee(0,cd(a,af(j),function(a,b){return[0,a,b]}));ef(l,function(a){var -b=bu(l),c=b[2];if(!c)return 0;var -d=c[1][2];return js(b[1],function(a){return g(a,d)})});bu(l);function -o(a){return i(w(Dg),n,a)}function -m(a){var -b=[0,cO("row_spacer"),0];return d7(0,[0,[0,cb(D(o(a))),b]],0)}var -u=y(yI(function(a,b){var -c=b[2],d=b[3],e=b[1],f=ah(aW,Di,0),g=[0,80,cb(D(p))];return c?[0,0,ag(U(0,[0,[0,g,f]],0,i(d,e,c[1]))),0]:[0,1,ba,0]},[0,[0,0,ba,0],function(a,b){var -f=b[3],g=b[2],c=b[1],d=a[3],e=a[2],h=a[1],j=gE(e),i=gE(g);if(typeof -j==="number")return typeof -i==="number"?[0,((h+d|0)+c|0)+f|0,e,0]:[0,(h+d|0)+c|0,g,f];if(typeof -i==="number")return[0,h,e,(d+c|0)+f|0];var -k=cU(d+c|0,0)?function(a){return aX(e,a)}(aX(ag(ap(m(d+c|0))),g)):aX(e,g);return[0,h,k,f]}],k),function(a){var -b=a[3],c=a[2],d=a[1],e=cU(d,0)?aX(ag(ap(m(d))),c):c;return cU(b,0)?aX(e,ag(ap(m(b)))):e}),v=Dc(d),x=w2(function(a,b){var -d=qb(a),e=wW(d),c=wT(wV(d)),f=aC(j);return f?kx(f[1][1],c)?$(j,[0,[0,c,e]]):0:$(j,[0,[0,c,e]])}),z=eR(0,bR(Dj)),A=[0,[0,80,cb(D(Da(d)))],z];function -B(a,b){return w1(x,a,b)}function -C(a){return B(0,a)}function -E(a){return CR(C,a)}var -F=[0,[0,82,function(a){return y(a,E)}(U(0,[0,A],[0,[0,[0,82,t],0]],[0,[0,82,v],[0,[0,83,bQ(u)],0]]))],0];return U(0,[0,eR(0,bR(Dk))],0,F)}function -Dl(b){return[0,function(a){return $(b[1],a)}]}var -lW=dT(0,64),lX=wM(jO);function -Dm(a){return un(lW,a)?b0(g(w(Dn),a)):dU(lW,a,0)}function -lY(c,b){return function(a){return wO(lX,c,a)}(eP(b))}function -Do(a){var -b=wN(lX,a);function -c(a){return eQ(a)}var -d=b?[0,b[1]]:Dp;return zK(d,c)}function -Dq(a,b){var -c=Do(a);if(0===c[0])return c[1];var -d=c[1];return typeof -d==="number"?g(b,0):(wk([0,d[2],0]),g(b,0))}function -Dr(d,b){lY(d,b);var -a=aS(b),c=ee(0,af(a));ef(c,function(a){lY(d,bu(c));return 0});bu(c);return a}function -Ds(a,b){Dm(a);var -c=D(a);return Dr(c,Dq(c,b))}function -eT(a,b){return Ds(a,function(a){return b})}function -Dt(e,b,c){var -d=aS(c);return[0,bv(0,b,function(a){return $(d,[0,g(e,d3(a)[hi])])}),d]}function -g3(a,b,c,d,e,f,g,h,i,j){var -l=d?d[1]:0,m=f?f[1]:0,n=function(a){return eS(xp,h,a)}(function(a){return CY(vV,m,a)}([0,[0,80,vW(D(i))],l])),o=gU(b,function(a){return[0,a]}),k=Dt(a,g,j),p=k[2],q=k[1];return[0,et(c,[0,n],[0,[0,[0,80,q],zF(e)]],0),p,o]}function -lZ(a,b,c,d,e,f,g,h){var -i=c?c[1]:0;return g3(aK,a,b,[0,function(a){return eS(d5,h,a)}(function(a){return eS(jG,g,a)}(i))],d,e,gl,f,Du,h)}function -Dv(a,b,c,d,e,f,g,h){var -i=c?c[1]:0;return g3(aK,a,b,[0,function(a){return eS(jG,g,a)}(i)],d,e,gl,f,Dw,0)}function -Dx(a,b,c,d){var -e=b?b[1]:0;return g3(function(a){return 0},0,a,[0,ah(d5,d,e)],c,0,jz,0,Dy,0)}function -eU(a,b){return y(a,function(a){return[0,a,b]})}function -Dz(a,b,c,d){return function(h){var -i=[0,[0,ba,function(a){return a}],function(a,b){var -c=b[2],d=a[2];return[0,aX(a[1],b[1]),function(a){return g(c,g(d,a))}]}];function -j(a){var -b=a[1],c=a[2];function -d(a){var -c=aC(b[2]);return c?g(b[3],c[1]):0}return[0,ag(b[1]),function(a){var -b=d(0);return g(g(c,a),b)}]}var -e=function(a){return ch(j,i,a)}(bQ(d[2])),f=[0,82,y(e,function(a){var -b=a[2];return bv(0,xo,function(a){g(h,g(b,d[1]));return jx(a)})})],k=y(e,function(a){return a[1]}),l=kB([0,f,0],function(a){return qa(f,a)},c);return zr(a,b,[0,l],[0,[0,83,bQ(k)],0])}}function -l0(a,b){return a?g(w(DA),b):g(w(DB),b)}function -DC(a){var -b=l0(1,a[1]),f=l0(0,a[1]),c=eT(b,a[2]),g=a[3][2];kw(0,[0,[0,[0,80,jH(D(b))],0]],0,g);var -h=[0,80,f],d=function(a){return ah(d4,DD,a)}(function(a){return ah(jF,h,a)}(ah(go,[0,80,b],0))),e=aC(c),i=e?[0,[0,80,vX(D(e[1]))],d]:d,j=U(0,0,0,[0,[0,82,et(0,[0,i],[0,[0,[0,80,bv(0,gl,function(a){return $(c,[0,aK(d3(a)[hi])])})],0]],0)],0]);return[0,j,,af(c)]}function -l1(a,b,c,d){return c?aZ(w(DE),d,a,b):aZ(w(DF),d,a,b)}function -DG(f){function -d(a,b,c,d,e){var -g=l1(a,b,1,f[1]);function -i(a){return a?[0,c]:0}var -j=l1(a,b,0,f[1]),h=eT(g,i(e)),k=kw(0,[0,[0,[0,80,jH(D(g))],0]],0,d),l=[0,80,j],m=function(a){return ah(d4,DH,a)}(function(a){return ah(jF,l,a)}(ah(go,[0,80,g],0))),n=[0,[0,82,y(af(h),function(a){return a?vT:vO})],m],o=[0,[0,80,bv(0,jz,function(a){return $(h,i(d3(a)[mi]|0))})],0],p=af(h);return[0,U(0,0,0,[0,[0,82,et(0,[0,n],[0,o],0)],[0,[0,82,k],0]]),p]}var -a=function(e,b){var -c=[0,0];return cj(function(a){var -b=d(e,c[1],a[1],a[2],a[3]),f=b[2],g=b[1];c[1]++;return[0,g,f]},b)}(0,f[2]),b=cj(function(a){return a[1]},a);function -c(a){return a}var -e=function(a){return y(a,ci)}(function(a){return zd(c,a)}(bQ(ch(function(a){return ag(a[2])},eq,a))));return[0,U(0,0,0,[0,[0,83,bQ(b)],0]),e]}function -DL(a,b){return g(b,a)}function -DM(a,h){var -j=a?a[1]:lT;return function(a,k,c){var -l=a?a[1]:h[1];return function(a,b){var -d=aS(l);function -f(a){return af(d)}function -e(a){return $(d,a)}return[0,x4(f(0),function(d){function -f(a){var -c=a[3];return bv(a[1],a[2],function(a){var -b=i(c,d,a);return typeof -b==="number"?b?e(g(h[2],d)):0:e(b[1])})}function -m(a){var -b=a[1];return 82===b?[0,82,y(a[2],f)]:83<=b?[0,83,cj(f,a[2])]:[0,80,f(a[2])]}var -l=eR(0,kB(j,function(a){return function(a){return CW(j,a)}(DL(d,a))},c)),n=ck(function(a){return kA(m,a)},a);return zq(k,[0,l],n,g(b,d))}),f,e]}}}var -DN=[0,0,function(a){return a?0:1}];function -DI(a,b,c,d){var -e=b?b[1]:0;return et(a,[0,function(a){return ah(d5,d,a)}(ah(d4,DJ,e))],c,0)}function -DK(a,b,c){return[0,a,b,c]}function -DO(a){return DM(a,DN)}function -L(a){return[0,d,a]}function -l2(a){return[0,bB,a]}function -eV(a,b){return b?g(a,b[1]):bX}function -l3(a,b){return[0,l,ae(iF(a,b))]}var -eW=[0,1],DQ=[z,DP,aG(0)];function -aY(a,b){throw h([0,DQ,[0,ak,a],b],1)}function -M(a){if(typeof -a!=="number"&&d===a[1])return a[2];return aY(DR,a)}function -l4(a){if(typeof -a!=="number"&&bB===a[1])return a[2];return aY(DS,a)}function -eX(a,b){return bX===b?0:[0,g(a,b)]}function -l5(a,b){if(typeof -b!=="number"&&l===b[1])return ae(iF(a,b[2]));return aY(DT,b)}function -u(a,b){return aY(j(a,DU),b)}function -l6(a,b,c,d){var -e=dI(D1,ae(c));return aY(aZ(w(D2),b,a,e),d)}function -bb(a,b,c){return l6(D3,a,b,c)}function -bc(a,b,c){return l6(D4,a,b,c)}function -D5(a,b){var -d=a,c=b;for(;;){if(!c)return dI(D6,ae(d));var -e=c[1];if(e[1])var -d=[0,e[2],d],c=c[2];else -var -c=c[2]}}function -by(a,b,c){var -d=D5(0,c);return aY(i(w(D7),a,d),b)}function -bd(a,b){return aY(j(a,D8),b)}function -DV(a,b){return aY(j(a,DW),b)}function -DX(a,b){return aY(j(a,DY),b)}function -DZ(a,b){return aY(j(a,D0),b)}function -b(a){return a[1]}function -D_(a){if(typeof -a!=="number"&&E===a[1]){var -f=[0,0],g=[0,0],k=[0,0],h=[0,0],d=[0,0],e=[0,0];(function(a){var -i=a;for(;;){if(!i)return;var -l=i[1],j=l[2],e=l[1],m=i[2];if(c(e,fg))if(c(e,cp))if(c(e,cl)){if(!c(e,oJ))if(b(k))d[1]=[0,e,b(d)];else -k[1]=[0,eX(M,j)]}else if(b(g))d[1]=[0,e,b(d)];else -g[1]=[0,M(j)];else if(b(f))d[1]=[0,e,b(d)];else -f[1]=[0,M(j)];else if(b(h))d[1]=[0,e,b(d)];else -h[1]=[0,M(j)];var -i=m}}(a[2]));if(b(d))return bb(eY,b(d),a);if(b(e))return bc(eY,b(e),a);var -i=b(f),j=b(g),l=b(k),m=b(h);if(i&&j&&m){var -n=m[1],o=j[1],p=i[1],q=l?l[1]:0;return[0,p,o,q,n]}var -r=[0,[0,0===b(h)?1:0,D$],0],s=[0,[0,0===b(g)?1:0,Ea],r];return by(eY,a,[0,[0,0===b(f)?1:0,Eb],s])}return bd(eY,a)}function -Ec(a){var -b=a[3],c=a[2],d=a[1],e=[0,[0,Ed,L(a[4])],0],f=[0,[0,Ee,eV(L,b)],e],g=[0,[0,Ef,L(c)],f];return[0,E,[0,[0,Eg,L(d)],g]]}function -D9(a){return a?"POST":"GET"}function -Ey(a){return a5(function(a){var -b=a[1];return[0,b,kP(a[2])]},Bm(a))}function -Ez(a){return[0,E,a5(function(a){return[0,a[1],[0,d,a[2]]]},a)]}function -EA(a){if(typeof -a!=="number"&&E===a[1]){var -f=[0,0],d=[0,0],e=[0,0];(function(a){var -e=a;for(;;){if(!e)return;var -g=e[1],h=g[1],i=e[2],j=g[2];if(!c(h,oH))if(b(f))d[1]=[0,h,b(d)];else -f[1]=[0,Ey(j)];var -e=i}}(a[2]));return b(d)?bb(g4,b(d),a):b(e)?bc(g4,b(e),a):[0,b(f)]}return bd(g4,a)}function -EB(a){var -b=a[1],c=0,d=b?[0,[0,EC,Ez(b[1])],c]:c;return[0,E,d]}function -ED(a){if(typeof -a!=="number"&&l===a[1]){var -b=a[2];if(!b)return DX(q,a);var -f=b[1];if(typeof -f!=="number"){var -g=f[1];if(d===g){var -e=f[2],h=dw(e,mA);if(0<=h){if(0>=h)return b[2]?u(q,a):18;var -i=dw(e,mR);if(0<=i){if(0>=i)return b[2]?u(q,a):28;if(!c(e,nQ))return b[2]?u(q,a):29;if(!c(e,mt))return b[2]?u(q,a):30;if(!c(e,nD))return b[2]?u(q,a):31;if(!c(e,or))return b[2]?u(q,a):32;if(!c(e,mV))return b[2]?u(q,a):33;if(!c(e,m0))return b[2]?u(q,a):34;if(!c(e,nN))return b[2]?u(q,a):35;if(!c(e,nq))return b[2]?u(q,a):36}else{if(!c(e,nY))return b[2]?u(q,a):19;if(!c(e,mn))return b[2]?u(q,a):20;if(!c(e,ob))return b[2]?u(q,a):21;if(!c(e,n9))return b[2]?u(q,a):22;if(!c(e,mI))return b[2]?u(q,a):23;if(!c(e,nH))return b[2]?u(q,a):24;if(!c(e,o0))return b[2]?u(q,a):25;if(!c(e,oz))return b[2]?u(q,a):26;if(!c(e,m6))return b[2]?u(q,a):27}}else{var -j=dw(e,on);if(0<=j){if(0>=j)return b[2]?u(q,a):9;if(!c(e,oq))return b[2]?u(q,a):10;if(!c(e,oL))return b[2]?u(q,a):11;if(!c(e,oM))return b[2]?u(q,a):12;if(!c(e,mP))return b[2]?u(q,a):13;if(!c(e,mT))return b[2]?u(q,a):14;if(!c(e,oC))return b[2]?u(q,a):15;if(!c(e,nr))return b[2]?u(q,a):16;if(!c(e,nv))return b[2]?u(q,a):17}else{if(!c(e,oI))return b[2]?u(q,a):0;if(!c(e,of))return b[2]?u(q,a):1;if(!c(e,ok))return b[2]?u(q,a):2;if(!c(e,nL))return b[2]?u(q,a):3;if(!c(e,m2))return b[2]?u(q,a):4;if(!c(e,ne))return b[2]?u(q,a):5;if(!c(e,n5))return b[2]?u(q,a):6;if(!c(e,nu))return b[2]?u(q,a):7;if(!c(e,mJ))return b[2]?u(q,a):8}}}else if(l===g)return DV(q,a)}}return DZ(q,a)}function -EE(a){switch(a){case -0:return EF;case -1:return EG;case -2:return EH;case -3:return EI;case -4:return EJ;case -5:return EK;case -6:return EL;case -7:return EM;case -8:return EN;case -9:return EO;case -10:return EP;case -11:return EQ;case -12:return ER;case -13:return ES;case -14:return ET;case -15:return EU;case -16:return EV;case -17:return EW;case -18:return EX;case -19:return EY;case -20:return EZ;case -21:return E0;case -22:return E1;case -23:return E2;case -24:return E3;case -25:return E4;case -26:return E5;case -27:return E6;case -28:return E7;case -29:return E8;case -30:return E9;case -31:return E_;case -32:return E$;case -33:return Fa;case -34:return Fb;case -35:return Fc;default:return Fd}}function -Fe(a){return ED([0,l,[0,[0,d,kP(a)],0]])}function -Ff(a){var -b=EE(a);if(typeof -b!=="number"&&l===b[1]){var -c=b[2];if(c&&!c[2])return c[1]}throw h([0,f,Fg],1)}function -FG(a,b){if(a)var -d=a[1],c=g(w(FH),d);else -var -c=FK;return i(w(FJ),FI,c)}function -Eh(a){if(typeof -a!=="number"&&E===a[1]){var -f=[0,0],g=[0,0],d=[0,0],h=[0,0];(function(a){var -i=a;for(;;){if(!i)return;var -j=i[1],k=j[2],e=j[1],l=i[2];if(c(e,o2))if(c(e,nF)){if(b(eW))h[1]=[0,e,b(h)]}else if(b(f))d[1]=[0,e,b(d)];else -f[1]=[0,M(k)];else if(b(g))d[1]=[0,e,b(d)];else -g[1]=[0,M(k)];var -i=l}}(a[2]));if(b(d))return bb(eZ,b(d),a);if(b(h))return bc(eZ,b(h),a);var -e=b(f),i=b(g);if(e&&i)return[0,e[1],i[1]];var -j=[0,[0,0===b(g)?1:0,Ei],0];return by(eZ,a,[0,[0,0===b(f)?1:0,Ej],j])}return bd(eZ,a)}function -Ek(a){var -b=a[1],c=[0,[0,El,L(a[2])],0];return[0,E,[0,[0,Em,L(b)],c]]}function -En(a){if(typeof -a!=="number"&&E===a[1]){var -f=[0,0],g=[0,0],h=[0,0],d=[0,0],e=[0,0];(function(a){var -i=a;for(;;){if(!i)return;var -k=i[1],j=k[2],e=k[1],l=i[2];if(c(e,ox))if(c(e,cl)){if(!c(e,ml))if(b(f))d[1]=[0,e,b(d)];else -f[1]=[0,D_(j)]}else if(b(h))d[1]=[0,e,b(d)];else -h[1]=[0,M(j)];else if(b(g))d[1]=[0,e,b(d)];else -g[1]=[0,M(j)];var -i=l}}(a[2]));if(b(d))return bb(e0,b(d),a);if(b(e))return bc(e0,b(e),a);var -i=b(f),j=b(g),k=b(h);if(i&&j&&k)return[0,i[1],j[1],k[1]];var -l=[0,[0,0===b(h)?1:0,Eo],0],m=[0,[0,0===b(g)?1:0,Ep],l];return by(e0,a,[0,[0,0===b(f)?1:0,Eq],m])}return bd(e0,a)}function -Er(a){var -b=a[2],c=a[1],d=[0,[0,Es,L(a[3])],0],e=[0,[0,Et,L(b)],d];return[0,E,[0,[0,Eu,Ec(c)],e]]}var -Ev=1;function -Ew(a){return Ex}function -Fh(a){if(typeof -a!=="number"&&E===a[1]){var -g=[0,0],m=[0,0],h=[0,0],n=[0,0],o=[0,0],p=[0,0],i=[0,0],j=[0,0],k=[0,0],q=[0,0],d=[0,0],e=[0,0];(function(a){var -l=a;for(;;){if(!l)return;var -r=l[1],f=r[2],e=r[1],s=dw(e,mZ);a:b:{var -t=l[2];if(0<=s)if(0= 1; j--) a2[i2 + j] = a1[i1 + j]; + return 0; + } + function caml_array_fill(array, ofs, len, v){ + for(var i = 0; i < len; i++) array[ofs + i + 1] = v; + return 0; + } + function caml_array_sub(a, i, len){ + var a2 = new Array(len + 1); + a2[0] = 0; + for(var i2 = 1, i1 = i + 1; i2 <= len; i2++, i1++) a2[i2] = a[i1]; + return a2; + } + function caml_subarray_to_jsbytes(a, i, len){ + var f = String.fromCharCode; + if(i == 0 && len <= 4096 && len == a.length) return f.apply(null, a); + var s = ""; + for(; 0 < len; i += 1024, len -= 1024) + s += f.apply(null, a.slice(i, i + Math.min(len, 1024))); + return s; + } + function caml_convert_bytes_to_array(s){ + var a = new Uint8Array(s.l), b = s.c, l = b.length, i = 0; + for(; i < l; i++) a[i] = b.charCodeAt(i); + for(l = s.l; i < l; i++) a[i] = 0; + s.c = a; + s.t = 4; + return a; + } + function caml_blit_bytes(s1, i1, s2, i2, len){ + if(len == 0) return 0; + if(i2 == 0 && (len >= s2.l || s2.t == 2 && len >= s2.c.length)){ + s2.c = + s1.t == 4 + ? caml_subarray_to_jsbytes(s1.c, i1, len) + : i1 == 0 && s1.c.length == len ? s1.c : s1.c.substr(i1, len); + s2.t = s2.c.length == s2.l ? 0 : 2; + } + else if(s2.t == 2 && i2 == s2.c.length){ + s2.c += + s1.t == 4 + ? caml_subarray_to_jsbytes(s1.c, i1, len) + : i1 == 0 && s1.c.length == len ? s1.c : s1.c.substr(i1, len); + s2.t = s2.c.length == s2.l ? 0 : 2; + } + else{ + if(s2.t != 4) caml_convert_bytes_to_array(s2); + var c1 = s1.c, c2 = s2.c; + if(s1.t == 4) + if(i2 <= i1) + for(var i = 0; i < len; i++) c2[i2 + i] = c1[i1 + i]; + else + for(var i = len - 1; i >= 0; i--) c2[i2 + i] = c1[i1 + i]; + else{ + var l = Math.min(len, c1.length - i1); + for(var i = 0; i < l; i++) c2[i2 + i] = c1.charCodeAt(i1 + i); + for(; i < len; i++) c2[i2 + i] = 0; + } + } + return 0; + } + function caml_str_repeat(n, s){ + if(n == 0) return ""; + if(s.repeat) return s.repeat(n); + var r = "", l = 0; + for(;;){ + if(n & 1) r += s; + n >>= 1; + if(n == 0) return r; + s += s; + l++; + if(l == 9) s.slice(0, 1); + } + } + function caml_convert_string_to_bytes(s){ + if(s.t == 2) + s.c += caml_str_repeat(s.l - s.c.length, "\0"); + else + s.c = caml_subarray_to_jsbytes(s.c, 0, s.c.length); + s.t = 0; + } + function jsoo_is_ascii(s){ + if(s.length < 24){ + for(var i = 0; i < s.length; i++) if(s.charCodeAt(i) > 127) return false; + return true; + } + else + return ! /[^\x00-\x7f]/.test(s); + } + function caml_utf16_of_utf8(s){ + for(var b = "", t = "", c, c1, c2, v, i = 0, l = s.length; i < l; i++){ + c1 = s.charCodeAt(i); + if(c1 < 0x80){ + for(var j = i + 1; j < l && (c1 = s.charCodeAt(j)) < 0x80; j++) ; + if(j - i > 512){ + t.substr(0, 1); + b += t; + t = ""; + b += s.slice(i, j); + } + else + t += s.slice(i, j); + if(j == l) break; + i = j; + } + v = 1; + if(++i < l && ((c2 = s.charCodeAt(i)) & - 64) == 128){ + c = c2 + (c1 << 6); + if(c1 < 0xe0){ + v = c - 0x3080; + if(v < 0x80) v = 1; + } + else{ + v = 2; + if(++i < l && ((c2 = s.charCodeAt(i)) & - 64) == 128){ + c = c2 + (c << 6); + if(c1 < 0xf0){ + v = c - 0xe2080; + if(v < 0x800 || v >= 0xd7ff && v < 0xe000) v = 2; + } + else{ + v = 3; + if(++i < l && ((c2 = s.charCodeAt(i)) & - 64) == 128 && c1 < 0xf5){ + v = c2 - 0x3c82080 + (c << 6); + if(v < 0x10000 || v > 0x10ffff) v = 3; + } + } + } + } + } + if(v < 4){ + i -= v; + t += "\ufffd"; + } + else if(v > 0xffff) + t += String.fromCharCode(0xd7c0 + (v >> 10), 0xdc00 + (v & 0x3FF)); + else + t += String.fromCharCode(v); + if(t.length > 1024){t.substr(0, 1); b += t; t = "";} + } + return b + t; + } + function MlBytes(tag, contents, length){ + this.t = tag; + this.c = contents; + this.l = length; + } + MlBytes.prototype.toString = + function(){ + switch(this.t){ + case 9: + return this.c; + default: caml_convert_string_to_bytes(this); + case 0: + if(jsoo_is_ascii(this.c)){this.t = 9; return this.c;} this.t = 8; + case 8: + return this.c; + } + }; + MlBytes.prototype.toUtf16 = + function(){ + var r = this.toString(); + if(this.t == 9) return r; + return caml_utf16_of_utf8(r); + }; + MlBytes.prototype.slice = + function(){ + var content = this.t == 4 ? this.c.slice() : this.c; + return new MlBytes(this.t, content, this.l); + }; + function caml_bytes_of_jsbytes(s){return new MlBytes(0, s, s.length);} + function caml_jsbytes_of_string(x){return x;} + function caml_bytes_of_string(s){ + return caml_bytes_of_jsbytes(caml_jsbytes_of_string(s)); + } + function caml_blit_string(a, b, c, d, e){ + caml_blit_bytes(caml_bytes_of_string(a), b, c, d, e); + return 0; + } + function jsoo_sys_getenv(n){ + var process = globalThis.process; + if(process && process.env && process.env[n] != undefined) + return process.env[n]; + if(globalThis.jsoo_static_env && globalThis.jsoo_static_env[n]) + return globalThis.jsoo_static_env[n]; + } + var caml_record_backtrace_flag = 0; + (function(){ + var r = jsoo_sys_getenv("OCAMLRUNPARAM"); + if(r !== undefined){ + var l = r.split(","); + for(var i = 0; i < l.length; i++) + if(l[i] == "b"){ + caml_record_backtrace_flag = 1; + break; + } + else if(l[i].startsWith("b=")) + caml_record_backtrace_flag = + l[i].slice(2); + else + continue; + } + } + ()); + var caml_global_data = [0]; + function caml_exn_with_js_backtrace(exn, force){ + if(! exn.js_error || force || exn[0] == 248) + exn.js_error = new globalThis.Error("Js exception containing backtrace"); + return exn; + } + function caml_maybe_attach_backtrace(exn, force){ + return caml_record_backtrace_flag + ? caml_exn_with_js_backtrace(exn, force) + : exn; + } + function caml_raise_with_arg(tag, arg){ + throw caml_maybe_attach_backtrace([0, tag, arg]); + } + function caml_string_of_jsbytes(x){return x;} + function caml_raise_with_string(tag, msg){ + caml_raise_with_arg(tag, caml_string_of_jsbytes(msg)); + } + function caml_invalid_argument(msg){ + caml_raise_with_string(caml_global_data.Invalid_argument, msg); + } + function caml_bytes_bound_error(){ + caml_invalid_argument("index out of bounds"); + } + function caml_bytes_unsafe_set(s, i, c){ + c &= 0xff; + if(s.t != 4){ + if(i == s.c.length){ + s.c += String.fromCharCode(c); + if(i + 1 == s.l) s.t = 0; + return 0; + } + caml_convert_bytes_to_array(s); + } + s.c[i] = c; + return 0; + } + function caml_bytes_set(s, i, c){ + if(i >>> 0 >= s.l) caml_bytes_bound_error(); + return caml_bytes_unsafe_set(s, i, c); + } + function caml_bytes_unsafe_get(s, i){ + switch(s.t & 6){ + default: if(i >= s.c.length) return 0; + case 0: + return s.c.charCodeAt(i); + case 4: + return s.c[i]; + } + } + function caml_call_gen(f, args){ + var + n = f.l >= 0 ? f.l : f.l = f.length, + argsLen = args.length, + d = n - argsLen; + if(d == 0) + return f.apply(null, args); + else if(d < 0){ + var g = f.apply(null, args.slice(0, n)); + if(typeof g !== "function") return g; + return caml_call_gen(g, args.slice(n)); + } + else{ + switch(d){ + case 1: + { + var + g = + function(x){ + var nargs = new Array(argsLen + 1); + for(var i = 0; i < argsLen; i++) nargs[i] = args[i]; + nargs[argsLen] = x; + return f.apply(null, nargs); + }; + break; + } + case 2: + { + var + g = + function(x, y){ + var nargs = new Array(argsLen + 2); + for(var i = 0; i < argsLen; i++) nargs[i] = args[i]; + nargs[argsLen] = x; + nargs[argsLen + 1] = y; + return f.apply(null, nargs); + }; + break; + } + default: + var + g = + function(){ + var + extra_args = arguments.length == 0 ? 1 : arguments.length, + nargs = new Array(args.length + extra_args); + for(var i = 0; i < args.length; i++) nargs[i] = args[i]; + for(var i = 0; i < arguments.length; i++) + nargs[args.length + i] = arguments[i]; + return caml_call_gen(f, nargs); + }; + } + g.l = d; + return g; + } + } + function caml_array_bound_error(){ + caml_invalid_argument("index out of bounds"); + } + function caml_check_bound(array, index){ + if(index >>> 0 >= array.length - 1) caml_array_bound_error(); + return array; + } + function caml_classify_float(x){ + if(isFinite(x)){ + if(Math.abs(x) >= 2.2250738585072014e-308) return 0; + if(x != 0) return 1; + return 2; + } + return isNaN(x) ? 4 : 3; + } + function caml_is_continuation_tag(t){return 0;} + var log2_ok = Math.log2 && Math.log2(1.1235582092889474E+307) == 1020; + function jsoo_floor_log2(x){ + if(log2_ok) return Math.floor(Math.log2(x)); + var i = 0; + if(x == 0) return - Infinity; + if(x >= 1) while(x >= 2){x /= 2; i++;} else while(x < 1){x *= 2; i--;} + return i; + } + function caml_int32_bits_of_float(x){ + var float32a = new Float32Array(1); + float32a[0] = x; + var int32a = new Int32Array(float32a.buffer); + return int32a[0] | 0; + } + var caml_int64_offset = Math.pow(2, - 24); + function caml_raise_constant(tag){throw tag;} + function caml_raise_zero_divide(){ + caml_raise_constant(caml_global_data.Division_by_zero); + } + function MlInt64(lo, mi, hi){ + this.lo = lo & 0xffffff; + this.mi = mi & 0xffffff; + this.hi = hi & 0xffff; + } + MlInt64.prototype.caml_custom = "_j"; + MlInt64.prototype.copy = + function(){return new MlInt64(this.lo, this.mi, this.hi);}; + MlInt64.prototype.ucompare = + function(x){ + if(this.hi > x.hi) return 1; + if(this.hi < x.hi) return - 1; + if(this.mi > x.mi) return 1; + if(this.mi < x.mi) return - 1; + if(this.lo > x.lo) return 1; + if(this.lo < x.lo) return - 1; + return 0; + }; + MlInt64.prototype.compare = + function(x){ + var hi = this.hi << 16, xhi = x.hi << 16; + if(hi > xhi) return 1; + if(hi < xhi) return - 1; + if(this.mi > x.mi) return 1; + if(this.mi < x.mi) return - 1; + if(this.lo > x.lo) return 1; + if(this.lo < x.lo) return - 1; + return 0; + }; + MlInt64.prototype.neg = + function(){ + var + lo = - this.lo, + mi = - this.mi + (lo >> 24), + hi = - this.hi + (mi >> 24); + return new MlInt64(lo, mi, hi); + }; + MlInt64.prototype.add = + function(x){ + var + lo = this.lo + x.lo, + mi = this.mi + x.mi + (lo >> 24), + hi = this.hi + x.hi + (mi >> 24); + return new MlInt64(lo, mi, hi); + }; + MlInt64.prototype.sub = + function(x){ + var + lo = this.lo - x.lo, + mi = this.mi - x.mi + (lo >> 24), + hi = this.hi - x.hi + (mi >> 24); + return new MlInt64(lo, mi, hi); + }; + MlInt64.prototype.mul = + function(x){ + var + lo = this.lo * x.lo, + mi = (lo * caml_int64_offset | 0) + this.mi * x.lo + this.lo * x.mi, + hi = + (mi * caml_int64_offset | 0) + this.hi * x.lo + this.mi * x.mi + + this.lo * x.hi; + return new MlInt64(lo, mi, hi); + }; + MlInt64.prototype.isZero = + function(){return (this.lo | this.mi | this.hi) == 0;}; + MlInt64.prototype.isNeg = function(){return this.hi << 16 < 0;}; + MlInt64.prototype.and = + function(x){ + return new MlInt64(this.lo & x.lo, this.mi & x.mi, this.hi & x.hi); + }; + MlInt64.prototype.or = + function(x){ + return new MlInt64(this.lo | x.lo, this.mi | x.mi, this.hi | x.hi); + }; + MlInt64.prototype.xor = + function(x){ + return new MlInt64(this.lo ^ x.lo, this.mi ^ x.mi, this.hi ^ x.hi); + }; + MlInt64.prototype.shift_left = + function(s){ + s = s & 63; + if(s == 0) return this; + if(s < 24) + return new + MlInt64 + (this.lo << s, + this.mi << s | this.lo >> 24 - s, + this.hi << s | this.mi >> 24 - s); + if(s < 48) + return new + MlInt64 + (0, this.lo << s - 24, this.mi << s - 24 | this.lo >> 48 - s); + return new MlInt64(0, 0, this.lo << s - 48); + }; + MlInt64.prototype.shift_right_unsigned = + function(s){ + s = s & 63; + if(s == 0) return this; + if(s < 24) + return new + MlInt64 + (this.lo >> s | this.mi << 24 - s, + this.mi >> s | this.hi << 24 - s, + this.hi >> s); + if(s < 48) + return new + MlInt64 + (this.mi >> s - 24 | this.hi << 48 - s, this.hi >> s - 24, 0); + return new MlInt64(this.hi >> s - 48, 0, 0); + }; + MlInt64.prototype.shift_right = + function(s){ + s = s & 63; + if(s == 0) return this; + var h = this.hi << 16 >> 16; + if(s < 24) + return new + MlInt64 + (this.lo >> s | this.mi << 24 - s, + this.mi >> s | h << 24 - s, + this.hi << 16 >> s >>> 16); + var sign = this.hi << 16 >> 31; + if(s < 48) + return new + MlInt64 + (this.mi >> s - 24 | this.hi << 48 - s, + this.hi << 16 >> s - 24 >> 16, + sign & 0xffff); + return new MlInt64(this.hi << 16 >> s - 32, sign, sign); + }; + MlInt64.prototype.lsl1 = + function(){ + this.hi = this.hi << 1 | this.mi >> 23; + this.mi = (this.mi << 1 | this.lo >> 23) & 0xffffff; + this.lo = this.lo << 1 & 0xffffff; + }; + MlInt64.prototype.lsr1 = + function(){ + this.lo = (this.lo >>> 1 | this.mi << 23) & 0xffffff; + this.mi = (this.mi >>> 1 | this.hi << 23) & 0xffffff; + this.hi = this.hi >>> 1; + }; + MlInt64.prototype.udivmod = + function(x){ + var + offset = 0, + modulus = this.copy(), + divisor = x.copy(), + quotient = new MlInt64(0, 0, 0); + while(modulus.ucompare(divisor) > 0){offset++; divisor.lsl1();} + while(offset >= 0){ + offset--; + quotient.lsl1(); + if(modulus.ucompare(divisor) >= 0){ + quotient.lo++; + modulus = modulus.sub(divisor); + } + divisor.lsr1(); + } + return {quotient: quotient, modulus: modulus}; + }; + MlInt64.prototype.div = + function(y){ + var x = this; + if(y.isZero()) caml_raise_zero_divide(); + var sign = x.hi ^ y.hi; + if(x.hi & 0x8000) x = x.neg(); + if(y.hi & 0x8000) y = y.neg(); + var q = x.udivmod(y).quotient; + if(sign & 0x8000) q = q.neg(); + return q; + }; + MlInt64.prototype.mod = + function(y){ + var x = this; + if(y.isZero()) caml_raise_zero_divide(); + var sign = x.hi; + if(x.hi & 0x8000) x = x.neg(); + if(y.hi & 0x8000) y = y.neg(); + var r = x.udivmod(y).modulus; + if(sign & 0x8000) r = r.neg(); + return r; + }; + MlInt64.prototype.toInt = function(){return this.lo | this.mi << 24;}; + MlInt64.prototype.toFloat = + function(){ + return (this.hi << 16) * Math.pow(2, 32) + this.mi * Math.pow(2, 24) + + this.lo; + }; + MlInt64.prototype.toArray = + function(){ + return [this.hi >> 8, + this.hi & 0xff, + this.mi >> 16, + this.mi >> 8 & 0xff, + this.mi & 0xff, + this.lo >> 16, + this.lo >> 8 & 0xff, + this.lo & 0xff]; + }; + MlInt64.prototype.lo32 = + function(){return this.lo | (this.mi & 0xff) << 24;}; + MlInt64.prototype.hi32 = + function(){return this.mi >>> 8 & 0xffff | this.hi << 16;}; + function caml_int64_create_lo_mi_hi(lo, mi, hi){return new MlInt64(lo, mi, hi); + } + function caml_int64_bits_of_float(x){ + if(! isFinite(x)){ + if(isNaN(x)) return caml_int64_create_lo_mi_hi(1, 0, 0x7ff0); + return x > 0 + ? caml_int64_create_lo_mi_hi(0, 0, 0x7ff0) + : caml_int64_create_lo_mi_hi(0, 0, 0xfff0); + } + var sign = x == 0 && 1 / x == - Infinity ? 0x8000 : x >= 0 ? 0 : 0x8000; + if(sign) x = - x; + var exp = jsoo_floor_log2(x) + 1023; + if(exp <= 0){ + exp = 0; + x /= Math.pow(2, - 1026); + } + else{ + x /= Math.pow(2, exp - 1027); + if(x < 16){x *= 2; exp -= 1;} + if(exp == 0) x /= 2; + } + var k = Math.pow(2, 24), r3 = x | 0; + x = (x - r3) * k; + var r2 = x | 0; + x = (x - r2) * k; + var r1 = x | 0; + r3 = r3 & 0xf | sign | exp << 4; + return caml_int64_create_lo_mi_hi(r1, r2, r3); + } + function caml_int64_to_bytes(x){return x.toArray();} + function caml_ba_serialize(writer, ba, sz){ + writer.write(32, ba.dims.length); + writer.write(32, ba.kind | ba.layout << 8); + if(ba.caml_custom == "_bigarr02") + for(var i = 0; i < ba.dims.length; i++) + if(ba.dims[i] < 0xffff) + writer.write(16, ba.dims[i]); + else{ + writer.write(16, 0xffff); + writer.write(32, 0); + writer.write(32, ba.dims[i]); + } + else + for(var i = 0; i < ba.dims.length; i++) writer.write(32, ba.dims[i]); + switch(ba.kind){ + case 2: + case 3: + case 12: + for(var i = 0; i < ba.data.length; i++) writer.write(8, ba.data[i]); + break; + case 4: + case 5: + for(var i = 0; i < ba.data.length; i++) writer.write(16, ba.data[i]); + break; + case 6: + for(var i = 0; i < ba.data.length; i++) writer.write(32, ba.data[i]); + break; + case 8: + case 9: + writer.write(8, 0); + for(var i = 0; i < ba.data.length; i++) writer.write(32, ba.data[i]); + break; + case 7: + for(var i = 0; i < ba.data.length / 2; i++){ + var b = caml_int64_to_bytes(ba.get(i)); + for(var j = 0; j < 8; j++) writer.write(8, b[j]); + } + break; + case 1: + for(var i = 0; i < ba.data.length; i++){ + var b = caml_int64_to_bytes(caml_int64_bits_of_float(ba.get(i))); + for(var j = 0; j < 8; j++) writer.write(8, b[j]); + } + break; + case 0: + for(var i = 0; i < ba.data.length; i++){ + var b = caml_int32_bits_of_float(ba.get(i)); + writer.write(32, b); + } + break; + case 10: + for(var i = 0; i < ba.data.length / 2; i++){ + var j = ba.get(i); + writer.write(32, caml_int32_bits_of_float(j[1])); + writer.write(32, caml_int32_bits_of_float(j[2])); + } + break; + case 11: + for(var i = 0; i < ba.data.length / 2; i++){ + var + complex = ba.get(i), + b = caml_int64_to_bytes(caml_int64_bits_of_float(complex[1])); + for(var j = 0; j < 8; j++) writer.write(8, b[j]); + var b = caml_int64_to_bytes(caml_int64_bits_of_float(complex[2])); + for(var j = 0; j < 8; j++) writer.write(8, b[j]); + } + break; + } + sz[0] = (4 + ba.dims.length) * 4; + sz[1] = (4 + ba.dims.length) * 8; + } + function caml_ba_get_size_per_element(kind){ + switch(kind){case 7:case 10:case 11: return 2;default: return 1; + } + } + function caml_ba_create_buffer(kind, size){ + var view; + switch(kind){ + case 0: + view = Float32Array; break; + case 1: + view = Float64Array; break; + case 2: + view = Int8Array; break; + case 3: + view = Uint8Array; break; + case 4: + view = Int16Array; break; + case 5: + view = Uint16Array; break; + case 6: + view = Int32Array; break; + case 7: + view = Int32Array; break; + case 8: + view = Int32Array; break; + case 9: + view = Int32Array; break; + case 10: + view = Float32Array; break; + case 11: + view = Float64Array; break; + case 12: + view = Uint8Array; break; + } + if(! view) caml_invalid_argument("Bigarray.create: unsupported kind"); + var data = new view(size * caml_ba_get_size_per_element(kind)); + return data; + } + function caml_int32_float_of_bits(x){ + var int32a = new Int32Array(1); + int32a[0] = x; + var float32a = new Float32Array(int32a.buffer); + return float32a[0]; + } + function caml_int64_of_bytes(a){ + return new + MlInt64 + (a[7] << 0 | a[6] << 8 | a[5] << 16, + a[4] << 0 | a[3] << 8 | a[2] << 16, + a[1] << 0 | a[0] << 8); + } + function caml_int64_float_of_bits(x){ + var lo = x.lo, mi = x.mi, hi = x.hi, exp = (hi & 0x7fff) >> 4; + if(exp == 2047) + return (lo | mi | hi & 0xf) == 0 + ? hi & 0x8000 ? - Infinity : Infinity + : NaN; + var k = Math.pow(2, - 24), res = (lo * k + mi) * k + (hi & 0xf); + if(exp > 0){ + res += 16; + res *= Math.pow(2, exp - 1027); + } + else + res *= Math.pow(2, - 1026); + if(hi & 0x8000) res = - res; + return res; + } + function caml_ba_get_size(dims){ + var n_dims = dims.length, size = 1; + for(var i = 0; i < n_dims; i++){ + if(dims[i] < 0) + caml_invalid_argument("Bigarray.create: negative dimension"); + size = size * dims[i]; + } + return size; + } + function caml_int64_create_lo_hi(lo, hi){ + return new + MlInt64 + (lo & 0xffffff, + lo >>> 24 & 0xff | (hi & 0xffff) << 8, + hi >>> 16 & 0xffff); + } + function caml_int64_hi32(v){return v.hi32();} + function caml_int64_lo32(v){return v.lo32();} + var caml_ba_custom_name = "_bigarr02"; + function Ml_Bigarray(kind, layout, dims, buffer){ + this.kind = kind; + this.layout = layout; + this.dims = dims; + this.data = buffer; + } + Ml_Bigarray.prototype.caml_custom = caml_ba_custom_name; + Ml_Bigarray.prototype.offset = + function(arg){ + var ofs = 0; + if(typeof arg === "number") arg = [arg]; + if(! (arg instanceof Array)) + caml_invalid_argument("bigarray.js: invalid offset"); + if(this.dims.length != arg.length) + caml_invalid_argument("Bigarray.get/set: bad number of dimensions"); + if(this.layout == 0) + for(var i = 0; i < this.dims.length; i++){ + if(arg[i] < 0 || arg[i] >= this.dims[i]) caml_array_bound_error(); + ofs = ofs * this.dims[i] + arg[i]; + } + else + for(var i = this.dims.length - 1; i >= 0; i--){ + if(arg[i] < 1 || arg[i] > this.dims[i]) caml_array_bound_error(); + ofs = ofs * this.dims[i] + (arg[i] - 1); + } + return ofs; + }; + Ml_Bigarray.prototype.get = + function(ofs){ + switch(this.kind){ + case 7: + var l = this.data[ofs * 2 + 0], h = this.data[ofs * 2 + 1]; + return caml_int64_create_lo_hi(l, h); + case 10: + case 11: + var r = this.data[ofs * 2 + 0], i = this.data[ofs * 2 + 1]; + return [254, r, i]; + default: return this.data[ofs]; + } + }; + Ml_Bigarray.prototype.set = + function(ofs, v){ + switch(this.kind){ + case 7: + this.data[ofs * 2 + 0] = caml_int64_lo32(v); + this.data[ofs * 2 + 1] = caml_int64_hi32(v); + break; + case 10: + case 11: + this.data[ofs * 2 + 0] = v[1]; this.data[ofs * 2 + 1] = v[2]; break; + default: this.data[ofs] = v; break; + } + return 0; + }; + Ml_Bigarray.prototype.fill = + function(v){ + switch(this.kind){ + case 7: + var a = caml_int64_lo32(v), b = caml_int64_hi32(v); + if(a == b) + this.data.fill(a); + else + for(var i = 0; i < this.data.length; i++) + this.data[i] = i % 2 == 0 ? a : b; + break; + case 10: + case 11: + var im = v[1], re = v[2]; + if(im == re) + this.data.fill(im); + else + for(var i = 0; i < this.data.length; i++) + this.data[i] = i % 2 == 0 ? im : re; + break; + default: this.data.fill(v); break; + } + }; + Ml_Bigarray.prototype.compare = + function(b, total){ + if(this.layout != b.layout || this.kind != b.kind){ + var k1 = this.kind | this.layout << 8, k2 = b.kind | b.layout << 8; + return k2 - k1; + } + if(this.dims.length != b.dims.length) + return b.dims.length - this.dims.length; + for(var i = 0; i < this.dims.length; i++) + if(this.dims[i] != b.dims[i]) return this.dims[i] < b.dims[i] ? - 1 : 1; + switch(this.kind){ + case 0: + case 1: + case 10: + case 11: + var x, y; + for(var i = 0; i < this.data.length; i++){ + x = this.data[i]; + y = b.data[i]; + if(x < y) return - 1; + if(x > y) return 1; + if(x != y){ + if(! total) return NaN; + if(x == x) return 1; + if(y == y) return - 1; + } + } + break; + case 7: + for(var i = 0; i < this.data.length; i += 2){ + if(this.data[i + 1] < b.data[i + 1]) return - 1; + if(this.data[i + 1] > b.data[i + 1]) return 1; + if(this.data[i] >>> 0 < b.data[i] >>> 0) return - 1; + if(this.data[i] >>> 0 > b.data[i] >>> 0) return 1; + } + break; + case 2: + case 3: + case 4: + case 5: + case 6: + case 8: + case 9: + case 12: + for(var i = 0; i < this.data.length; i++){ + if(this.data[i] < b.data[i]) return - 1; + if(this.data[i] > b.data[i]) return 1; + } + break; + } + return 0; + }; + function Ml_Bigarray_c_1_1(kind, layout, dims, buffer){ + this.kind = kind; + this.layout = layout; + this.dims = dims; + this.data = buffer; + } + Ml_Bigarray_c_1_1.prototype = new Ml_Bigarray(); + Ml_Bigarray_c_1_1.prototype.offset = + function(arg){ + if(typeof arg !== "number") + if(arg instanceof Array && arg.length == 1) + arg = arg[0]; + else + caml_invalid_argument("Ml_Bigarray_c_1_1.offset"); + if(arg < 0 || arg >= this.dims[0]) caml_array_bound_error(); + return arg; + }; + Ml_Bigarray_c_1_1.prototype.get = function(ofs){return this.data[ofs];}; + Ml_Bigarray_c_1_1.prototype.set = + function(ofs, v){this.data[ofs] = v; return 0;}; + Ml_Bigarray_c_1_1.prototype.fill = + function(v){this.data.fill(v); return 0;}; + function caml_ba_create_unsafe(kind, layout, dims, data){ + var size_per_element = caml_ba_get_size_per_element(kind); + if(caml_ba_get_size(dims) * size_per_element != data.length) + caml_invalid_argument("length doesn't match dims"); + if(layout == 0 && dims.length == 1 && size_per_element == 1) + return new Ml_Bigarray_c_1_1(kind, layout, dims, data); + return new Ml_Bigarray(kind, layout, dims, data); + } + function caml_failwith(msg){ + if(! caml_global_data.Failure) + caml_global_data.Failure = [248, caml_string_of_jsbytes("Failure"), - 3]; + caml_raise_with_string(caml_global_data.Failure, msg); + } + function caml_ba_deserialize(reader, sz, name){ + var num_dims = reader.read32s(); + if(num_dims < 0 || num_dims > 16) + caml_failwith("input_value: wrong number of bigarray dimensions"); + var + tag = reader.read32s(), + kind = tag & 0xff, + layout = tag >> 8 & 1, + dims = []; + if(name == "_bigarr02") + for(var i = 0; i < num_dims; i++){ + var size_dim = reader.read16u(); + if(size_dim == 0xffff){ + var size_dim_hi = reader.read32u(), size_dim_lo = reader.read32u(); + if(size_dim_hi != 0) + caml_failwith("input_value: bigarray dimension overflow in 32bit"); + size_dim = size_dim_lo; + } + dims.push(size_dim); + } + else + for(var i = 0; i < num_dims; i++) dims.push(reader.read32u()); + var + size = caml_ba_get_size(dims), + data = caml_ba_create_buffer(kind, size), + ba = caml_ba_create_unsafe(kind, layout, dims, data); + switch(kind){ + case 2: + for(var i = 0; i < size; i++) data[i] = reader.read8s(); break; + case 3: + case 12: + for(var i = 0; i < size; i++) data[i] = reader.read8u(); break; + case 4: + for(var i = 0; i < size; i++) data[i] = reader.read16s(); break; + case 5: + for(var i = 0; i < size; i++) data[i] = reader.read16u(); break; + case 6: + for(var i = 0; i < size; i++) data[i] = reader.read32s(); break; + case 8: + case 9: + var sixty = reader.read8u(); + if(sixty) + caml_failwith + ("input_value: cannot read bigarray with 64-bit OCaml ints"); + for(var i = 0; i < size; i++) data[i] = reader.read32s(); + break; + case 7: + var t = new Array(8); + for(var i = 0; i < size; i++){ + for(var j = 0; j < 8; j++) t[j] = reader.read8u(); + var int64 = caml_int64_of_bytes(t); + ba.set(i, int64); + } + break; + case 1: + var t = new Array(8); + for(var i = 0; i < size; i++){ + for(var j = 0; j < 8; j++) t[j] = reader.read8u(); + var f = caml_int64_float_of_bits(caml_int64_of_bytes(t)); + ba.set(i, f); + } + break; + case 0: + for(var i = 0; i < size; i++){ + var f = caml_int32_float_of_bits(reader.read32s()); + ba.set(i, f); + } + break; + case 10: + for(var i = 0; i < size; i++){ + var + re = caml_int32_float_of_bits(reader.read32s()), + im = caml_int32_float_of_bits(reader.read32s()); + ba.set(i, [254, re, im]); + } + break; + case 11: + var t = new Array(8); + for(var i = 0; i < size; i++){ + for(var j = 0; j < 8; j++) t[j] = reader.read8u(); + var re = caml_int64_float_of_bits(caml_int64_of_bytes(t)); + for(var j = 0; j < 8; j++) t[j] = reader.read8u(); + var im = caml_int64_float_of_bits(caml_int64_of_bytes(t)); + ba.set(i, [254, re, im]); + } + break; + } + sz[0] = (4 + num_dims) * 4; + return caml_ba_create_unsafe(kind, layout, dims, data); + } + function caml_ba_compare(a, b, total){return a.compare(b, total);} + function caml_mul(a, b){return Math.imul(a, b);} + function caml_hash_mix_int(h, d){ + d = caml_mul(d, 0xcc9e2d51 | 0); + d = d << 15 | d >>> 32 - 15; + d = caml_mul(d, 0x1b873593); + h ^= d; + h = h << 13 | h >>> 32 - 13; + return (h + (h << 2) | 0) + (0xe6546b64 | 0) | 0; + } + function caml_hash_mix_int64(h, v){ + h = caml_hash_mix_int(h, caml_int64_lo32(v)); + h = caml_hash_mix_int(h, caml_int64_hi32(v)); + return h; + } + function caml_hash_mix_float(h, v0){ + return caml_hash_mix_int64(h, caml_int64_bits_of_float(v0)); + } + function caml_ba_hash(ba){ + var num_elts = caml_ba_get_size(ba.dims), h = 0; + switch(ba.kind){ + case 2: + case 3: + case 12: + if(num_elts > 256) num_elts = 256; + var w = 0, i = 0; + for(i = 0; i + 4 <= ba.data.length; i += 4){ + w = + ba.data[i + 0] | ba.data[i + 1] << 8 | ba.data[i + 2] << 16 + | ba.data[i + 3] << 24; + h = caml_hash_mix_int(h, w); + } + w = 0; + switch(num_elts & 3){ + case 3: + w = ba.data[i + 2] << 16; + case 2: + w |= ba.data[i + 1] << 8; + case 1: + w |= ba.data[i + 0]; h = caml_hash_mix_int(h, w); + } + break; + case 4: + case 5: + if(num_elts > 128) num_elts = 128; + var w = 0, i = 0; + for(i = 0; i + 2 <= ba.data.length; i += 2){ + w = ba.data[i + 0] | ba.data[i + 1] << 16; + h = caml_hash_mix_int(h, w); + } + if((num_elts & 1) != 0) h = caml_hash_mix_int(h, ba.data[i]); + break; + case 6: + if(num_elts > 64) num_elts = 64; + for(var i = 0; i < num_elts; i++) h = caml_hash_mix_int(h, ba.data[i]); + break; + case 8: + case 9: + if(num_elts > 64) num_elts = 64; + for(var i = 0; i < num_elts; i++) h = caml_hash_mix_int(h, ba.data[i]); + break; + case 7: + if(num_elts > 32) num_elts = 32; + num_elts *= 2; + for(var i = 0; i < num_elts; i++) h = caml_hash_mix_int(h, ba.data[i]); + break; + case 10: + num_elts *= 2; + case 0: + if(num_elts > 64) num_elts = 64; + for(var i = 0; i < num_elts; i++) + h = caml_hash_mix_float(h, ba.data[i]); + break; + case 11: + num_elts *= 2; + case 1: + if(num_elts > 32) num_elts = 32; + for(var i = 0; i < num_elts; i++) + h = caml_hash_mix_float(h, ba.data[i]); + break; + } + return h; + } + function caml_int32_unmarshal(reader, size){size[0] = 4; return reader.read32s(); + } + function caml_nativeint_unmarshal(reader, size){ + switch(reader.read8u()){ + case 1: + size[0] = 4; return reader.read32s(); + case 2: + caml_failwith("input_value: native integer value too large"); + default: caml_failwith("input_value: ill-formed native integer"); + } + } + function caml_int64_unmarshal(reader, size){ + var t = new Array(8); + for(var j = 0; j < 8; j++) t[j] = reader.read8u(); + size[0] = 8; + return caml_int64_of_bytes(t); + } + function caml_int64_marshal(writer, v, sizes){ + var b = caml_int64_to_bytes(v); + for(var i = 0; i < 8; i++) writer.write(8, b[i]); + sizes[0] = 8; + sizes[1] = 8; + } + function caml_int64_compare(x, y, total){return x.compare(y);} + function caml_int64_hash(v){return v.lo32() ^ v.hi32();} + var + caml_custom_ops = + {"_j": + {deserialize: caml_int64_unmarshal, + serialize: caml_int64_marshal, + fixed_length: 8, + compare: caml_int64_compare, + hash: caml_int64_hash}, + "_i": {deserialize: caml_int32_unmarshal, fixed_length: 4}, + "_n": {deserialize: caml_nativeint_unmarshal, fixed_length: 4}, + "_bigarray": + {deserialize: + function(reader, sz){ + return caml_ba_deserialize(reader, sz, "_bigarray"); + }, + serialize: caml_ba_serialize, + compare: caml_ba_compare, + hash: caml_ba_hash}, + "_bigarr02": + {deserialize: + function(reader, sz){ + return caml_ba_deserialize(reader, sz, "_bigarr02"); + }, + serialize: caml_ba_serialize, + compare: caml_ba_compare, + hash: caml_ba_hash}}; + function caml_compare_val_get_custom(a){ + return caml_custom_ops[a.caml_custom] + && caml_custom_ops[a.caml_custom].compare; + } + function caml_compare_val_number_custom(num, custom, swap, total){ + var comp = caml_compare_val_get_custom(custom); + if(comp){ + var x = swap > 0 ? comp(custom, num, total) : comp(num, custom, total); + if(total && x != x) return swap; + if(+ x != + x) return + x; + if((x | 0) != 0) return x | 0; + } + return swap; + } + function caml_is_ml_string(s){ + return typeof s === "string" && ! /[^\x00-\xff]/.test(s); + } + function caml_is_ml_bytes(s){return s instanceof MlBytes;} + function caml_compare_val_tag(a){ + if(typeof a === "number") + return 1000; + else if(caml_is_ml_bytes(a)) + return 252; + else if(caml_is_ml_string(a)) + return 1252; + else if(a instanceof Array && a[0] === a[0] >>> 0 && a[0] <= 255){var tag = a[0] | 0; return tag == 254 ? 0 : tag;} + else if(a instanceof String) + return 12520; + else if(typeof a == "string") + return 12520; + else if(a instanceof Number) + return 1000; + else if(a && a.caml_custom) + return 1255; + else if(a && a.compare) + return 1256; + else if(typeof a == "function") + return 1247; + else if(typeof a == "symbol") return 1251; + return 1001; + } + function caml_int_compare(a, b){ + if(a < b) return - 1; + if(a == b) return 0; + return 1; + } + function caml_string_compare(s1, s2){ + return s1 < s2 ? - 1 : s1 > s2 ? 1 : 0; + } + function caml_bytes_compare(s1, s2){ + s1.t & 6 && caml_convert_string_to_bytes(s1); + s2.t & 6 && caml_convert_string_to_bytes(s2); + return s1.c < s2.c ? - 1 : s1.c > s2.c ? 1 : 0; + } + function caml_compare_val(a, b, total){ + var stack = []; + for(;;){ + if(! (total && a === b)){ + var tag_a = caml_compare_val_tag(a); + if(tag_a == 250){a = a[1]; continue;} + var tag_b = caml_compare_val_tag(b); + if(tag_b == 250){b = b[1]; continue;} + if(tag_a !== tag_b){ + if(tag_a == 1000){ + if(tag_b == 1255) + return caml_compare_val_number_custom(a, b, - 1, total); + return - 1; + } + if(tag_b == 1000){ + if(tag_a == 1255) + return caml_compare_val_number_custom(b, a, 1, total); + return 1; + } + return tag_a < tag_b ? - 1 : 1; + } + switch(tag_a){ + case 247: + caml_invalid_argument("compare: functional value"); break; + case 248: + var x = caml_int_compare(a[2], b[2]); if(x != 0) return x | 0; break; + case 249: + caml_invalid_argument("compare: functional value"); break; + case 250: + caml_invalid_argument("equal: got Forward_tag, should not happen"); + break; + case 251: + caml_invalid_argument("equal: abstract value"); break; + case 252: + if(a !== b){ + var x = caml_bytes_compare(a, b); + if(x != 0) return x | 0; + } + break; + case 253: + caml_invalid_argument("equal: got Double_tag, should not happen"); + break; + case 254: + caml_invalid_argument + ("equal: got Double_array_tag, should not happen"); + break; + case 255: + caml_invalid_argument("equal: got Custom_tag, should not happen"); + break; + case 1247: + caml_invalid_argument("compare: functional value"); break; + case 1255: + var comp = caml_compare_val_get_custom(a); + if(comp != caml_compare_val_get_custom(b)) + return a.caml_custom < b.caml_custom ? - 1 : 1; + if(! comp) caml_invalid_argument("compare: abstract value"); + var x = comp(a, b, total); + if(x != x) return total ? - 1 : x; + if(x !== (x | 0)) return - 1; + if(x != 0) return x | 0; + break; + case 1256: + var x = a.compare(b, total); + if(x != x) return total ? - 1 : x; + if(x !== (x | 0)) return - 1; + if(x != 0) return x | 0; + break; + case 1000: + a = + a; + b = + b; + if(a < b) return - 1; + if(a > b) return 1; + if(a != b){ + if(! total) return NaN; + if(a == a) return 1; + if(b == b) return - 1; + } + break; + case 1001: + if(a < b) return - 1; + if(a > b) return 1; + if(a != b){ + if(! total) return NaN; + if(a == a) return 1; + if(b == b) return - 1; + } + break; + case 1251: + if(a !== b){if(! total) return NaN; return 1;} break; + case 1252: + var a = caml_jsbytes_of_string(a), b = caml_jsbytes_of_string(b); + if(a !== b){if(a < b) return - 1; if(a > b) return 1;} + break; + case 12520: + var a = a.toString(), b = b.toString(); + if(a !== b){if(a < b) return - 1; if(a > b) return 1;} + break; + case 246: + case 254: + default: + if(caml_is_continuation_tag(tag_a)){ + caml_invalid_argument("compare: continuation value"); + break; + } + if(a.length != b.length) return a.length < b.length ? - 1 : 1; + if(a.length > 1) stack.push(a, b, 1); + break; + } + } + if(stack.length == 0) return 0; + var i = stack.pop(); + b = stack.pop(); + a = stack.pop(); + if(i + 1 < a.length) stack.push(a, b, i + 1); + a = a[i]; + b = b[i]; + } + } + function caml_compare(a, b){return caml_compare_val(a, b, true);} + function caml_convert_raw_backtrace(){return [0];} + function caml_create_bytes(len){ + if(len < 0) caml_invalid_argument("Bytes.create"); + return new MlBytes(len ? 2 : 9, "", len); + } + function caml_equal(x, y){return + (caml_compare_val(x, y, false) == 0);} + function caml_fill_bytes(s, i, l, c){ + if(l > 0) + if(i == 0 && (l >= s.l || s.t == 2 && l >= s.c.length)) + if(c == 0){ + s.c = ""; + s.t = 2; + } + else{ + s.c = caml_str_repeat(l, String.fromCharCode(c)); + s.t = l == s.l ? 0 : 2; + } + else{ + if(s.t != 4) caml_convert_bytes_to_array(s); + for(l += i; i < l; i++) s.c[i] = c; + } + return 0; + } + function caml_float_of_string(s){ + var res; + s = caml_jsbytes_of_string(s); + res = + s; + if(s.length > 0 && res === res) return res; + s = s.replace(/_/g, ""); + res = + s; + if(s.length > 0 && res === res || /^[+-]?nan$/i.test(s)) return res; + var m = /^ *([+-]?)0x([0-9a-f]+)\.?([0-9a-f]*)(p([+-]?[0-9]+))?/i.exec(s); + if(m){ + var + m3 = m[3].replace(/0+$/, ""), + mantissa = parseInt(m[1] + m[2] + m3, 16), + exponent = (m[5] | 0) - 4 * m3.length; + res = mantissa * Math.pow(2, exponent); + return res; + } + if(/^\+?inf(inity)?$/i.test(s)) return Infinity; + if(/^-inf(inity)?$/i.test(s)) return - Infinity; + caml_failwith("float_of_string"); + } + function caml_parse_format(fmt){ + fmt = caml_jsbytes_of_string(fmt); + var len = fmt.length; + if(len > 31) caml_invalid_argument("format_int: format too long"); + var + f = + {justify: "+", + signstyle: "-", + filler: " ", + alternate: false, + base: 0, + signedconv: false, + width: 0, + uppercase: false, + sign: 1, + prec: - 1, + conv: "f"}; + for(var i = 0; i < len; i++){ + var c = fmt.charAt(i); + switch(c){ + case "-": + f.justify = "-"; break; + case "+": + case " ": + f.signstyle = c; break; + case "0": + f.filler = "0"; break; + case "#": + f.alternate = true; break; + case "1": + case "2": + case "3": + case "4": + case "5": + case "6": + case "7": + case "8": + case "9": + f.width = 0; + while(c = fmt.charCodeAt(i) - 48, c >= 0 && c <= 9){f.width = f.width * 10 + c; i++;} + i--; + break; + case ".": + f.prec = 0; + i++; + while(c = fmt.charCodeAt(i) - 48, c >= 0 && c <= 9){f.prec = f.prec * 10 + c; i++;} + i--; + case "d": + case "i": + f.signedconv = true; + case "u": + f.base = 10; break; + case "x": + f.base = 16; break; + case "X": + f.base = 16; f.uppercase = true; break; + case "o": + f.base = 8; break; + case "e": + case "f": + case "g": + f.signedconv = true; f.conv = c; break; + case "E": + case "F": + case "G": + f.signedconv = true; + f.uppercase = true; + f.conv = c.toLowerCase(); + break; + } + } + return f; + } + function caml_finish_formatting(f, rawbuffer){ + if(f.uppercase) rawbuffer = rawbuffer.toUpperCase(); + var len = rawbuffer.length; + if(f.signedconv && (f.sign < 0 || f.signstyle != "-")) len++; + if(f.alternate){if(f.base == 8) len += 1; if(f.base == 16) len += 2;} + var buffer = ""; + if(f.justify == "+" && f.filler == " ") + for(var i = len; i < f.width; i++) buffer += " "; + if(f.signedconv) + if(f.sign < 0) + buffer += "-"; + else if(f.signstyle != "-") buffer += f.signstyle; + if(f.alternate && f.base == 8) buffer += "0"; + if(f.alternate && f.base == 16) buffer += f.uppercase ? "0X" : "0x"; + if(f.justify == "+" && f.filler == "0") + for(var i = len; i < f.width; i++) buffer += "0"; + buffer += rawbuffer; + if(f.justify == "-") for(var i = len; i < f.width; i++) buffer += " "; + return caml_string_of_jsbytes(buffer); + } + function caml_format_float(fmt, x){ + function toFixed(x, dp){ + if(Math.abs(x) < 1.0) + return x.toFixed(dp); + else{ + var e = parseInt(x.toString().split("+")[1]); + if(e > 20){ + e -= 20; + x /= Math.pow(10, e); + x += new Array(e + 1).join("0"); + if(dp > 0) x = x + "." + new Array(dp + 1).join("0"); + return x; + } + else + return x.toFixed(dp); + } + } + var s, f = caml_parse_format(fmt), prec = f.prec < 0 ? 6 : f.prec; + if(x < 0 || x == 0 && 1 / x == - Infinity){f.sign = - 1; x = - x;} + if(isNaN(x)){ + s = "nan"; + f.filler = " "; + } + else if(! isFinite(x)){ + s = "inf"; + f.filler = " "; + } + else + switch(f.conv){ + case "e": + var s = x.toExponential(prec), i = s.length; + if(s.charAt(i - 3) == "e") + s = s.slice(0, i - 1) + "0" + s.slice(i - 1); + break; + case "f": + s = toFixed(x, prec); break; + case "g": + prec = prec ? prec : 1; + s = x.toExponential(prec - 1); + var j = s.indexOf("e"), exp = + s.slice(j + 1); + if(exp < - 4 || x >= 1e21 || x.toFixed(0).length > prec){ + var i = j - 1; + while(s.charAt(i) == "0") i--; + if(s.charAt(i) == ".") i--; + s = s.slice(0, i + 1) + s.slice(j); + i = s.length; + if(s.charAt(i - 3) == "e") + s = s.slice(0, i - 1) + "0" + s.slice(i - 1); + break; + } + else{ + var p = prec; + if(exp < 0){ + p -= exp + 1; + s = x.toFixed(p); + } + else + while(s = x.toFixed(p), s.length > prec + 1) p--; + if(p){ + var i = s.length - 1; + while(s.charAt(i) == "0") i--; + if(s.charAt(i) == ".") i--; + s = s.slice(0, i + 1); + } + } + break; + } + return caml_finish_formatting(f, s); + } + function caml_format_int(fmt, i){ + if(caml_jsbytes_of_string(fmt) == "%d") + return caml_string_of_jsbytes("" + i); + var f = caml_parse_format(fmt); + if(i < 0) if(f.signedconv){f.sign = - 1; i = - i;} else i >>>= 0; + var s = i.toString(f.base); + if(f.prec >= 0){ + f.filler = " "; + var n = f.prec - s.length; + if(n > 0) s = caml_str_repeat(n, "0") + s; + } + return caml_finish_formatting(f, s); + } + var caml_oo_last_id = 0; + function caml_fresh_oo_id(){return caml_oo_last_id++;} + function caml_jsstring_of_string(s){ + if(jsoo_is_ascii(s)) return s; + return caml_utf16_of_utf8(s); + } + function fs_node_supported(){ + return typeof globalThis.process !== "undefined" + && typeof globalThis.process.versions !== "undefined" + && typeof globalThis.process.versions.node !== "undefined"; + } + function make_path_is_absolute(){ + function posix(path){ + if(path.charAt(0) === "/") return ["", path.substring(1)]; + return; + } + function win32(path){ + var + splitDeviceRe = + /^([a-zA-Z]:|[\\/]{2}[^\\/]+[\\/]+[^\\/]+)?([\\/])?([\s\S]*?)$/, + result = splitDeviceRe.exec(path), + device = result[1] || "", + isUnc = Boolean(device && device.charAt(1) !== ":"); + if(Boolean(result[2] || isUnc)){ + var root = result[1] || "", sep = result[2] || ""; + return [root, path.substring(root.length + sep.length)]; + } + return; + } + return fs_node_supported() && globalThis.process + && globalThis.process.platform + ? globalThis.process.platform === "win32" ? win32 : posix + : posix; + } + var path_is_absolute = make_path_is_absolute(); + function caml_trailing_slash(name){ + return name.slice(- 1) !== "/" ? name + "/" : name; + } + if(fs_node_supported() && globalThis.process && globalThis.process.cwd) + var caml_current_dir = globalThis.process.cwd().replace(/\\/g, "/"); + else + var caml_current_dir = "/static"; + caml_current_dir = caml_trailing_slash(caml_current_dir); + function caml_make_path(name){ + name = caml_jsstring_of_string(name); + if(! path_is_absolute(name)) name = caml_current_dir + name; + var + comp0 = path_is_absolute(name), + comp = comp0[1].split("/"), + ncomp = []; + for(var i = 0; i < comp.length; i++) + switch(comp[i]){ + case "..": + if(ncomp.length > 1) ncomp.pop(); break; + case ".": break; + case "": break; + default: ncomp.push(comp[i]); break; + } + ncomp.unshift(comp0[0]); + ncomp.orig = name; + return ncomp; + } + function caml_utf8_of_utf16(s){ + for(var b = "", t = b, c, d, i = 0, l = s.length; i < l; i++){ + c = s.charCodeAt(i); + if(c < 0x80){ + for(var j = i + 1; j < l && (c = s.charCodeAt(j)) < 0x80; j++) ; + if(j - i > 512){ + t.substr(0, 1); + b += t; + t = ""; + b += s.slice(i, j); + } + else + t += s.slice(i, j); + if(j == l) break; + i = j; + } + if(c < 0x800){ + t += String.fromCharCode(0xc0 | c >> 6); + t += String.fromCharCode(0x80 | c & 0x3f); + } + else if(c < 0xd800 || c >= 0xdfff) + t += + String.fromCharCode + (0xe0 | c >> 12, 0x80 | c >> 6 & 0x3f, 0x80 | c & 0x3f); + else if + (c >= 0xdbff || i + 1 == l || (d = s.charCodeAt(i + 1)) < 0xdc00 + || d > 0xdfff) + t += "\xef\xbf\xbd"; + else{ + i++; + c = (c << 10) + d - 0x35fdc00; + t += + String.fromCharCode + (0xf0 | c >> 18, + 0x80 | c >> 12 & 0x3f, + 0x80 | c >> 6 & 0x3f, + 0x80 | c & 0x3f); + } + if(t.length > 1024){t.substr(0, 1); b += t; t = "";} + } + return b + t; + } + function caml_string_of_jsstring(s){ + return jsoo_is_ascii(s) + ? caml_string_of_jsbytes(s) + : caml_string_of_jsbytes(caml_utf8_of_utf16(s)); + } + var + unix_error = + ["E2BIG", + "EACCES", + "EAGAIN", + "EBADF", + "EBUSY", + "ECHILD", + "EDEADLK", + "EDOM", + "EEXIST", + "EFAULT", + "EFBIG", + "EINTR", + "EINVAL", + "EIO", + "EISDIR", + "EMFILE", + "EMLINK", + "ENAMETOOLONG", + "ENFILE", + "ENODEV", + "ENOENT", + "ENOEXEC", + "ENOLCK", + "ENOMEM", + "ENOSPC", + "ENOSYS", + "ENOTDIR", + "ENOTEMPTY", + "ENOTTY", + "ENXIO", + "EPERM", + "EPIPE", + "ERANGE", + "EROFS", + "ESPIPE", + "ESRCH", + "EXDEV", + "EWOULDBLOCK", + "EINPROGRESS", + "EALREADY", + "ENOTSOCK", + "EDESTADDRREQ", + "EMSGSIZE", + "EPROTOTYPE", + "ENOPROTOOPT", + "EPROTONOSUPPORT", + "ESOCKTNOSUPPORT", + "EOPNOTSUPP", + "EPFNOSUPPORT", + "EAFNOSUPPORT", + "EADDRINUSE", + "EADDRNOTAVAIL", + "ENETDOWN", + "ENETUNREACH", + "ENETRESET", + "ECONNABORTED", + "ECONNRESET", + "ENOBUFS", + "EISCONN", + "ENOTCONN", + "ESHUTDOWN", + "ETOOMANYREFS", + "ETIMEDOUT", + "ECONNREFUSED", + "EHOSTDOWN", + "EHOSTUNREACH", + "ELOOP", + "EOVERFLOW"]; + function make_unix_err_args(code, syscall, path, errno){ + var variant = unix_error.indexOf(code); + if(variant < 0){if(errno == null) errno = - 9999; variant = [0, errno];} + var + args = + [variant, + caml_string_of_jsstring(syscall || ""), + caml_string_of_jsstring(path || "")]; + return args; + } + var caml_named_values = {}; + function caml_named_value(nm){return caml_named_values[nm];} + function caml_raise_with_args(tag, args){ + throw caml_maybe_attach_backtrace([0, tag].concat(args)); + } + function caml_bytes_of_array(a){ + if(! (a instanceof Uint8Array)) a = new Uint8Array(a); + return new MlBytes(4, a, a.length); + } + function caml_raise_sys_error(msg){ + caml_raise_with_string(caml_global_data.Sys_error, msg); + } + function caml_raise_no_such_file(name){ + caml_raise_sys_error(name + ": No such file or directory"); + } + function caml_uint8_array_of_bytes(s){ + if(s.t != 4) caml_convert_bytes_to_array(s); + return s.c; + } + function caml_ml_bytes_length(s){return s.l;} + function MlFile(){} + function MlFakeFile(content){this.data = content;} + MlFakeFile.prototype = new MlFile(); + MlFakeFile.prototype.constructor = MlFakeFile; + MlFakeFile.prototype.truncate = + function(len){ + var old = this.data; + this.data = caml_create_bytes(len | 0); + caml_blit_bytes(old, 0, this.data, 0, len); + }; + MlFakeFile.prototype.length = + function(){return caml_ml_bytes_length(this.data);}; + MlFakeFile.prototype.write = + function(offset, buf, pos, len){ + var clen = this.length(); + if(offset + len >= clen){ + var new_str = caml_create_bytes(offset + len), old_data = this.data; + this.data = new_str; + caml_blit_bytes(old_data, 0, this.data, 0, clen); + } + caml_blit_bytes(caml_bytes_of_array(buf), pos, this.data, offset, len); + return 0; + }; + MlFakeFile.prototype.read = + function(offset, buf, pos, len){ + var clen = this.length(); + if(offset + len >= clen) len = clen - offset; + if(len){ + var data = caml_create_bytes(len | 0); + caml_blit_bytes(this.data, offset, data, 0, len); + buf.set(caml_uint8_array_of_bytes(data), pos); + } + return len; + }; + function MlFakeFd(name, file, flags){ + this.file = file; + this.name = name; + this.flags = flags; + } + MlFakeFd.prototype.err_closed = + function(){ + caml_raise_sys_error(this.name + ": file descriptor already closed"); + }; + MlFakeFd.prototype.length = + function(){if(this.file) return this.file.length(); this.err_closed();}; + MlFakeFd.prototype.write = + function(offset, buf, pos, len){ + if(this.file) return this.file.write(offset, buf, pos, len); + this.err_closed(); + }; + MlFakeFd.prototype.read = + function(offset, buf, pos, len){ + if(this.file) return this.file.read(offset, buf, pos, len); + this.err_closed(); + }; + MlFakeFd.prototype.close = function(){this.file = undefined;}; + function MlFakeDevice(root, f){ + this.content = {}; + this.root = root; + this.lookupFun = f; + } + MlFakeDevice.prototype.nm = function(name){return this.root + name;}; + MlFakeDevice.prototype.create_dir_if_needed = + function(name){ + var comp = name.split("/"), res = ""; + for(var i = 0; i < comp.length - 1; i++){ + res += comp[i] + "/"; + if(this.content[res]) continue; + this.content[res] = Symbol("directory"); + } + }; + MlFakeDevice.prototype.slash = + function(name){return /\/$/.test(name) ? name : name + "/";}; + MlFakeDevice.prototype.lookup = + function(name){ + if(! this.content[name] && this.lookupFun){ + var + res = + this.lookupFun + (caml_string_of_jsbytes(this.root), caml_string_of_jsbytes(name)); + if(res !== 0){ + this.create_dir_if_needed(name); + this.content[name] = new MlFakeFile(caml_bytes_of_string(res[1])); + } + } + }; + MlFakeDevice.prototype.exists = + function(name){ + if(name == "") return 1; + var name_slash = this.slash(name); + if(this.content[name_slash]) return 1; + this.lookup(name); + return this.content[name] ? 1 : 0; + }; + MlFakeDevice.prototype.isFile = + function(name){return this.exists(name) && ! this.is_dir(name) ? 1 : 0;}; + MlFakeDevice.prototype.mkdir = + function(name, mode, raise_unix){ + var unix_error = raise_unix && caml_named_value("Unix.Unix_error"); + if(this.exists(name)) + if(unix_error) + caml_raise_with_args + (unix_error, make_unix_err_args("EEXIST", "mkdir", this.nm(name))); + else + caml_raise_sys_error(name + ": File exists"); + var parent = /^(.*)\/[^/]+/.exec(name); + parent = parent && parent[1] || ""; + if(! this.exists(parent)) + if(unix_error) + caml_raise_with_args + (unix_error, make_unix_err_args("ENOENT", "mkdir", this.nm(parent))); + else + caml_raise_sys_error(parent + ": No such file or directory"); + if(! this.is_dir(parent)) + if(unix_error) + caml_raise_with_args + (unix_error, make_unix_err_args("ENOTDIR", "mkdir", this.nm(parent))); + else + caml_raise_sys_error(parent + ": Not a directory"); + this.create_dir_if_needed(this.slash(name)); + }; + MlFakeDevice.prototype.rmdir = + function(name, raise_unix){ + var + unix_error = raise_unix && caml_named_value("Unix.Unix_error"), + name_slash = name == "" ? "" : this.slash(name), + r = new RegExp("^" + name_slash + "([^/]+)"); + if(! this.exists(name)) + if(unix_error) + caml_raise_with_args + (unix_error, make_unix_err_args("ENOENT", "rmdir", this.nm(name))); + else + caml_raise_sys_error(name + ": No such file or directory"); + if(! this.is_dir(name)) + if(unix_error) + caml_raise_with_args + (unix_error, make_unix_err_args("ENOTDIR", "rmdir", this.nm(name))); + else + caml_raise_sys_error(name + ": Not a directory"); + for(var n in this.content) + if(n.match(r)) + if(unix_error) + caml_raise_with_args + (unix_error, make_unix_err_args("ENOTEMPTY", "rmdir", this.nm(name))); + else + caml_raise_sys_error(this.nm(name) + ": Directory not empty"); + delete this.content[name_slash]; + }; + MlFakeDevice.prototype.readdir = + function(name){ + var name_slash = name == "" ? "" : this.slash(name); + if(! this.exists(name)) + caml_raise_sys_error(name + ": No such file or directory"); + if(! this.is_dir(name)) caml_raise_sys_error(name + ": Not a directory"); + var r = new RegExp("^" + name_slash + "([^/]+)"), seen = {}, a = []; + for(var n in this.content){ + var m = n.match(r); + if(m && ! seen[m[1]]){seen[m[1]] = true; a.push(m[1]);} + } + return a; + }; + MlFakeDevice.prototype.opendir = + function(name, raise_unix){ + var + unix_error = raise_unix && caml_named_value("Unix.Unix_error"), + a = this.readdir(name), + c = false, + i = 0; + return {readSync: + function(){ + if(c) + if(unix_error) + caml_raise_with_args + (unix_error, + make_unix_err_args("EBADF", "closedir", this.nm(name))); + else + caml_raise_sys_error(name + ": closedir failed"); + if(i == a.length) return null; + var entry = a[i]; + i++; + return {name: entry}; + }, + closeSync: + function(){ + if(c) + if(unix_error) + caml_raise_with_args + (unix_error, + make_unix_err_args("EBADF", "closedir", this.nm(name))); + else + caml_raise_sys_error(name + ": closedir failed"); + c = true; + a = []; + }}; + }; + MlFakeDevice.prototype.is_dir = + function(name){ + if(name == "") return true; + var name_slash = this.slash(name); + return this.content[name_slash] ? 1 : 0; + }; + MlFakeDevice.prototype.unlink = + function(name){ + var ok = this.content[name] ? true : false; + delete this.content[name]; + return ok; + }; + MlFakeDevice.prototype.open = + function(name, f){ + var file; + if(f.rdonly && f.wronly) + caml_raise_sys_error + (this.nm(name) + + " : flags Open_rdonly and Open_wronly are not compatible"); + if(f.text && f.binary) + caml_raise_sys_error + (this.nm(name) + + " : flags Open_text and Open_binary are not compatible"); + this.lookup(name); + if(this.content[name]){ + if(this.is_dir(name)) + caml_raise_sys_error(this.nm(name) + " : is a directory"); + if(f.create && f.excl) + caml_raise_sys_error(this.nm(name) + " : file already exists"); + file = this.content[name]; + if(f.truncate) file.truncate(); + } + else if(f.create){ + this.create_dir_if_needed(name); + this.content[name] = new MlFakeFile(caml_create_bytes(0)); + file = this.content[name]; + } + else + caml_raise_no_such_file(this.nm(name)); + return new MlFakeFd(this.nm(name), file, f); + }; + MlFakeDevice.prototype.open = + function(name, f){ + var file; + if(f.rdonly && f.wronly) + caml_raise_sys_error + (this.nm(name) + + " : flags Open_rdonly and Open_wronly are not compatible"); + if(f.text && f.binary) + caml_raise_sys_error + (this.nm(name) + + " : flags Open_text and Open_binary are not compatible"); + this.lookup(name); + if(this.content[name]){ + if(this.is_dir(name)) + caml_raise_sys_error(this.nm(name) + " : is a directory"); + if(f.create && f.excl) + caml_raise_sys_error(this.nm(name) + " : file already exists"); + file = this.content[name]; + if(f.truncate) file.truncate(); + } + else if(f.create){ + this.create_dir_if_needed(name); + this.content[name] = new MlFakeFile(caml_create_bytes(0)); + file = this.content[name]; + } + else + caml_raise_no_such_file(this.nm(name)); + return new MlFakeFd(this.nm(name), file, f); + }; + MlFakeDevice.prototype.register = + function(name, content){ + var file; + if(this.content[name]) + caml_raise_sys_error(this.nm(name) + " : file already exists"); + if(caml_is_ml_bytes(content)) file = new MlFakeFile(content); + if(caml_is_ml_string(content)) + file = new MlFakeFile(caml_bytes_of_string(content)); + else if(content instanceof Array) + file = new MlFakeFile(caml_bytes_of_array(content)); + else if(typeof content === "string") + file = new MlFakeFile(caml_bytes_of_jsbytes(content)); + else if(content.toString){ + var + bytes = + caml_bytes_of_string(caml_string_of_jsstring(content.toString())); + file = new MlFakeFile(bytes); + } + if(file){ + this.create_dir_if_needed(name); + this.content[name] = file; + } + else + caml_raise_sys_error + (this.nm(name) + " : registering file with invalid content type"); + }; + MlFakeDevice.prototype.constructor = MlFakeDevice; + function caml_ml_string_length(s){return s.length;} + function caml_string_unsafe_get(s, i){return s.charCodeAt(i);} + function caml_uint8_array_of_string(s){ + var l = caml_ml_string_length(s), a = new Uint8Array(l), i = 0; + for(; i < l; i++) a[i] = caml_string_unsafe_get(s, i); + return a; + } + function MlNodeFd(fd, flags){ + this.fs = require("fs"); + this.fd = fd; + this.flags = flags; + } + MlNodeFd.prototype = new MlFile(); + MlNodeFd.prototype.constructor = MlNodeFd; + MlNodeFd.prototype.truncate = + function(len){ + try{this.fs.ftruncateSync(this.fd, len | 0);} + catch(err){caml_raise_sys_error(err.toString());} + }; + MlNodeFd.prototype.length = + function(){ + try{return this.fs.fstatSync(this.fd).size;} + catch(err){caml_raise_sys_error(err.toString());} + }; + MlNodeFd.prototype.write = + function(offset, buf, buf_offset, len){ + try{ + if(this.flags.isCharacterDevice) + this.fs.writeSync(this.fd, buf, buf_offset, len); + else + this.fs.writeSync(this.fd, buf, buf_offset, len, offset); + } + catch(err){caml_raise_sys_error(err.toString());} + return 0; + }; + MlNodeFd.prototype.read = + function(offset, a, buf_offset, len){ + try{ + if(this.flags.isCharacterDevice) + var read = this.fs.readSync(this.fd, a, buf_offset, len); + else + var read = this.fs.readSync(this.fd, a, buf_offset, len, offset); + return read; + } + catch(err){caml_raise_sys_error(err.toString());} + }; + MlNodeFd.prototype.close = + function(){ + try{this.fs.closeSync(this.fd); return 0;} + catch(err){caml_raise_sys_error(err.toString());} + }; + function MlNodeDevice(root){this.fs = require("fs"); this.root = root;} + MlNodeDevice.prototype.nm = function(name){return this.root + name;}; + MlNodeDevice.prototype.exists = + function(name){ + try{return this.fs.existsSync(this.nm(name)) ? 1 : 0;} + catch(err){return 0;} + }; + MlNodeDevice.prototype.isFile = + function(name){ + try{return this.fs.statSync(this.nm(name)).isFile() ? 1 : 0;} + catch(err){caml_raise_sys_error(err.toString());} + }; + MlNodeDevice.prototype.mkdir = + function(name, mode, raise_unix){ + try{this.fs.mkdirSync(this.nm(name), {mode: mode}); return 0;} + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.rmdir = + function(name, raise_unix){ + try{this.fs.rmdirSync(this.nm(name)); return 0;} + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.readdir = + function(name, raise_unix){ + try{return this.fs.readdirSync(this.nm(name));} + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.is_dir = + function(name){ + try{return this.fs.statSync(this.nm(name)).isDirectory() ? 1 : 0;} + catch(err){caml_raise_sys_error(err.toString());} + }; + MlNodeDevice.prototype.unlink = + function(name, raise_unix){ + try{ + var b = this.fs.existsSync(this.nm(name)) ? 1 : 0; + this.fs.unlinkSync(this.nm(name)); + return b; + } + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.open = + function(name, f, raise_unix){ + var consts = require("constants"), res = 0; + for(var key in f) + switch(key){ + case "rdonly": + res |= consts.O_RDONLY; break; + case "wronly": + res |= consts.O_WRONLY; break; + case "append": + res |= consts.O_WRONLY | consts.O_APPEND; break; + case "create": + res |= consts.O_CREAT; break; + case "truncate": + res |= consts.O_TRUNC; break; + case "excl": + res |= consts.O_EXCL; break; + case "binary": + res |= consts.O_BINARY; break; + case "text": + res |= consts.O_TEXT; break; + case "nonblock": + res |= consts.O_NONBLOCK; break; + } + try{ + var + fd = this.fs.openSync(this.nm(name), res), + isCharacterDevice = + this.fs.lstatSync(this.nm(name)).isCharacterDevice(); + f.isCharacterDevice = isCharacterDevice; + return new MlNodeFd(fd, f); + } + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.rename = + function(o, n, raise_unix){ + try{this.fs.renameSync(this.nm(o), this.nm(n));} + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.stat = + function(name, raise_unix){ + try{ + var js_stats = this.fs.statSync(this.nm(name)); + return this.stats_from_js(js_stats); + } + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.lstat = + function(name, raise_unix){ + try{ + var js_stats = this.fs.lstatSync(this.nm(name)); + return this.stats_from_js(js_stats); + } + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.symlink = + function(to_dir, target, path, raise_unix){ + try{ + this.fs.symlinkSync + (this.nm(target), this.nm(path), to_dir ? "dir" : "file"); + return 0; + } + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.readlink = + function(name, raise_unix){ + try{ + var link = this.fs.readlinkSync(this.nm(name), "utf8"); + return caml_string_of_jsstring(link); + } + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.opendir = + function(name, raise_unix){ + try{return this.fs.opendirSync(this.nm(name));} + catch(err){this.raise_nodejs_error(err, raise_unix);} + }; + MlNodeDevice.prototype.raise_nodejs_error = + function(err, raise_unix){ + var unix_error = caml_named_value("Unix.Unix_error"); + if(raise_unix && unix_error){ + var + args = make_unix_err_args(err.code, err.syscall, err.path, err.errno); + caml_raise_with_args(unix_error, args); + } + else + caml_raise_sys_error(err.toString()); + }; + MlNodeDevice.prototype.stats_from_js = + function(js_stats){ + var file_kind; + if(js_stats.isFile()) + file_kind = 0; + else if(js_stats.isDirectory()) + file_kind = 1; + else if(js_stats.isCharacterDevice()) + file_kind = 2; + else if(js_stats.isBlockDevice()) + file_kind = 3; + else if(js_stats.isSymbolicLink()) + file_kind = 4; + else if(js_stats.isFIFO()) + file_kind = 5; + else if(js_stats.isSocket()) file_kind = 6; + return [0, + js_stats.dev, + js_stats.ino, + file_kind, + js_stats.mode, + js_stats.nlink, + js_stats.uid, + js_stats.gid, + js_stats.rdev, + js_stats.size, + js_stats.atimeMs, + js_stats.mtimeMs, + js_stats.ctimeMs]; + }; + MlNodeDevice.prototype.constructor = MlNodeDevice; + function caml_get_root(path){ + var x = path_is_absolute(path); + if(! x) return; + return x[0] + "/"; + } + var + caml_root = + caml_get_root(caml_current_dir) + || caml_failwith("unable to compute caml_root"), + jsoo_mount_point = []; + if(fs_node_supported()) + jsoo_mount_point.push + ({path: caml_root, device: new MlNodeDevice(caml_root)}); + else + jsoo_mount_point.push + ({path: caml_root, device: new MlFakeDevice(caml_root)}); + jsoo_mount_point.push + ({path: "/static/", device: new MlFakeDevice("/static/")}); + function resolve_fs_device(name){ + var + path = caml_make_path(name), + name = path.join("/"), + name_slash = caml_trailing_slash(name), + res; + for(var i = 0; i < jsoo_mount_point.length; i++){ + var m = jsoo_mount_point[i]; + if + (name_slash.search(m.path) == 0 + && (! res || res.path.length < m.path.length)) + res = + {path: m.path, + device: m.device, + rest: name.substring(m.path.length, name.length)}; + } + if(! res && fs_node_supported()){ + var root = caml_get_root(name); + if(root && root.match(/^[a-zA-Z]:\/$/)){ + var m = {path: root, device: new MlNodeDevice(root)}; + jsoo_mount_point.push(m); + res = + {path: m.path, + device: m.device, + rest: name.substring(m.path.length, name.length)}; + } + } + if(res) return res; + caml_raise_sys_error("no device found for " + name_slash); + } + function caml_create_file(name, content){ + var root = resolve_fs_device(name); + if(! root.device.register) caml_failwith("cannot register file"); + root.device.register(root.rest, content); + return 0; + } + function jsoo_create_file(name, content){ + var + name = caml_string_of_jsbytes(name), + content = caml_string_of_jsbytes(content); + return caml_create_file(name, content); + } + function caml_fs_init(){ + var tmp = globalThis.caml_fs_tmp; + if(tmp) + for(var i = 0; i < tmp.length; i++) + jsoo_create_file(tmp[i].name, tmp[i].content); + globalThis.jsoo_create_file = jsoo_create_file; + globalThis.caml_fs_tmp = []; + return 0; + } + function caml_get_current_callstack(){return [0];} + function caml_get_exception_raw_backtrace(){return [0];} + function caml_greaterequal(x, y){ + return + (caml_compare_val(x, y, false) >= 0); + } + function caml_hash_mix_jsbytes(h, s){ + var len = s.length, i, w; + for(i = 0; i + 4 <= len; i += 4){ + w = + s.charCodeAt(i) | s.charCodeAt(i + 1) << 8 | s.charCodeAt(i + 2) << 16 + | s.charCodeAt(i + 3) << 24; + h = caml_hash_mix_int(h, w); + } + w = 0; + switch(len & 3){ + case 3: + w = s.charCodeAt(i + 2) << 16; + case 2: + w |= s.charCodeAt(i + 1) << 8; + case 1: + w |= s.charCodeAt(i); h = caml_hash_mix_int(h, w); + } + h ^= len; + return h; + } + function caml_hash_mix_string(h, v){ + return caml_hash_mix_jsbytes(h, caml_jsbytes_of_string(v)); + } + function caml_hash_mix_bytes_arr(h, s){ + var len = s.length, i, w; + for(i = 0; i + 4 <= len; i += 4){ + w = s[i] | s[i + 1] << 8 | s[i + 2] << 16 | s[i + 3] << 24; + h = caml_hash_mix_int(h, w); + } + w = 0; + switch(len & 3){ + case 3: + w = s[i + 2] << 16; + case 2: + w |= s[i + 1] << 8; + case 1: + w |= s[i]; h = caml_hash_mix_int(h, w); + } + h ^= len; + return h; + } + function caml_ml_bytes_content(s){ + switch(s.t & 6){ + default: caml_convert_string_to_bytes(s); + case 0: + return s.c; + case 4: + return s.c; + } + } + function caml_hash_mix_bytes(h, v){ + var content = caml_ml_bytes_content(v); + return typeof content === "string" + ? caml_hash_mix_jsbytes(h, content) + : caml_hash_mix_bytes_arr(h, content); + } + function caml_hash_mix_final(h){ + h ^= h >>> 16; + h = caml_mul(h, 0x85ebca6b | 0); + h ^= h >>> 13; + h = caml_mul(h, 0xc2b2ae35 | 0); + h ^= h >>> 16; + return h; + } + function caml_hash(count, limit, seed, obj){ + var queue, rd, wr, sz, num, h, v, i, len; + sz = limit; + if(sz < 0 || sz > 256) sz = 256; + num = count; + h = seed; + queue = [obj]; + rd = 0; + wr = 1; + while(rd < wr && num > 0){ + v = queue[rd++]; + if(v && v.caml_custom){ + if + (caml_custom_ops[v.caml_custom] && caml_custom_ops[v.caml_custom].hash){ + var hh = caml_custom_ops[v.caml_custom].hash(v); + h = caml_hash_mix_int(h, hh); + num--; + } + } + else if(v instanceof Array && v[0] === (v[0] | 0)) + switch(v[0]){ + case 248: + h = caml_hash_mix_int(h, v[2]); num--; break; + case 250: + queue[--rd] = v[1]; break; + default: + if(caml_is_continuation_tag(v[0])) break; + var tag = v.length - 1 << 10 | v[0]; + h = caml_hash_mix_int(h, tag); + for(i = 1, len = v.length; i < len; i++){if(wr >= sz) break; queue[wr++] = v[i]; + } + break; + } + else if(caml_is_ml_bytes(v)){ + h = caml_hash_mix_bytes(h, v); + num--; + } + else if(caml_is_ml_string(v)){ + h = caml_hash_mix_string(h, v); + num--; + } + else if(typeof v === "string"){ + h = caml_hash_mix_jsbytes(h, v); + num--; + } + else if(v === (v | 0)){ + h = caml_hash_mix_int(h, v + v + 1); + num--; + } + else if(typeof v === "number"){h = caml_hash_mix_float(h, v); num--;} + } + h = caml_hash_mix_final(h); + return h & 0x3FFFFFFF; + } + function caml_hexstring_of_float(x, prec, style){ + if(! isFinite(x)){ + if(isNaN(x)) return caml_string_of_jsstring("nan"); + return caml_string_of_jsstring(x > 0 ? "infinity" : "-infinity"); + } + var sign = x == 0 && 1 / x == - Infinity ? 1 : x >= 0 ? 0 : 1; + if(sign) x = - x; + var exp = 0; + if(x == 0) + ; + else if(x < 1) + while(x < 1 && exp > - 1022){x *= 2; exp--;} + else + while(x >= 2){x /= 2; exp++;} + var exp_sign = exp < 0 ? "" : "+", sign_str = ""; + if(sign) + sign_str = "-"; + else + switch(style){ + case 43: + sign_str = "+"; break; + case 32: + sign_str = " "; break; + default: break; + } + if(prec >= 0 && prec < 13){ + var cst = Math.pow(2, prec * 4); + x = Math.round(x * cst) / cst; + } + var x_str = x.toString(16); + if(prec >= 0){ + var idx = x_str.indexOf("."); + if(idx < 0) + x_str += "." + caml_str_repeat(prec, "0"); + else{ + var size = idx + 1 + prec; + if(x_str.length < size) + x_str += caml_str_repeat(size - x_str.length, "0"); + else + x_str = x_str.substr(0, size); + } + } + return caml_string_of_jsstring + (sign_str + "0x" + x_str + "p" + exp_sign + exp.toString(10)); + } + function caml_int64_is_zero(x){return + x.isZero();} + function caml_int64_of_int32(x){ + return new MlInt64(x & 0xffffff, x >> 24 & 0xffffff, x >> 31 & 0xffff); + } + function caml_int64_to_int32(x){return x.toInt();} + function caml_int64_is_negative(x){return + x.isNeg();} + function caml_int64_neg(x){return x.neg();} + function caml_int64_format(fmt, x){ + var f = caml_parse_format(fmt); + if(f.signedconv && caml_int64_is_negative(x)){f.sign = - 1; x = caml_int64_neg(x);} + var + buffer = "", + wbase = caml_int64_of_int32(f.base), + cvtbl = "0123456789abcdef"; + do{ + var p = x.udivmod(wbase); + x = p.quotient; + buffer = cvtbl.charAt(caml_int64_to_int32(p.modulus)) + buffer; + } + while + (! caml_int64_is_zero(x)); + if(f.prec >= 0){ + f.filler = " "; + var n = f.prec - buffer.length; + if(n > 0) buffer = caml_str_repeat(n, "0") + buffer; + } + return caml_finish_formatting(f, buffer); + } + function caml_parse_sign_and_base(s){ + var i = 0, len = caml_ml_string_length(s), base = 10, sign = 1; + if(len > 0) + switch(caml_string_unsafe_get(s, i)){ + case 45: + i++; sign = - 1; break; + case 43: + i++; sign = 1; break; + } + if(i + 1 < len && caml_string_unsafe_get(s, i) == 48) + switch(caml_string_unsafe_get(s, i + 1)){ + case 120: + case 88: + base = 16; i += 2; break; + case 111: + case 79: + base = 8; i += 2; break; + case 98: + case 66: + base = 2; i += 2; break; + case 117: + case 85: + i += 2; break; + } + return [i, sign, base]; + } + function caml_parse_digit(c){ + if(c >= 48 && c <= 57) return c - 48; + if(c >= 65 && c <= 90) return c - 55; + if(c >= 97 && c <= 122) return c - 87; + return - 1; + } + function caml_int_of_string(s){ + var + r = caml_parse_sign_and_base(s), + i = r[0], + sign = r[1], + base = r[2], + len = caml_ml_string_length(s), + threshold = - 1 >>> 0, + c = i < len ? caml_string_unsafe_get(s, i) : 0, + d = caml_parse_digit(c); + if(d < 0 || d >= base) caml_failwith("int_of_string"); + var res = d; + for(i++; i < len; i++){ + c = caml_string_unsafe_get(s, i); + if(c == 95) continue; + d = caml_parse_digit(c); + if(d < 0 || d >= base) break; + res = base * res + d; + if(res > threshold) caml_failwith("int_of_string"); + } + if(i != len) caml_failwith("int_of_string"); + res = sign * res; + if(base == 10 && (res | 0) != res) caml_failwith("int_of_string"); + return res | 0; + } + function caml_js_from_array(a){return a.slice(1);} + function caml_js_meth_call(o, f, args){ + return o[caml_jsstring_of_string(f)].apply(o, caml_js_from_array(args)); + } + function caml_js_new(c, a){ + switch(a.length){ + case 1: + return new c; + case 2: + return new c(a[1]); + case 3: + return new c(a[1], a[2]); + case 4: + return new c(a[1], a[2], a[3]); + case 5: + return new c(a[1], a[2], a[3], a[4]); + case 6: + return new c(a[1], a[2], a[3], a[4], a[5]); + case 7: + return new c(a[1], a[2], a[3], a[4], a[5], a[6]); + case 8: + return new c(a[1], a[2], a[3], a[4], a[5], a[6], a[7]); + } + function F(){return c.apply(this, caml_js_from_array(a));} + F.prototype = c.prototype; + return new F; + } + function caml_js_object(a){ + var o = {}; + for(var i = 1; i < a.length; i++){ + var p = a[i]; + o[caml_jsstring_of_string(p[1])] = p[2]; + } + return o; + } + function caml_js_to_array(a){ + var len = a.length, b = new Array(len + 1); + b[0] = 0; + for(var i = 0; i < len; i++) b[i + 1] = a[i]; + return b; + } + var caml_callback = caml_call_gen; + function caml_js_wrap_callback_strict(arity, f){ + return function(){ + var + n = arguments.length, + args = new Array(arity), + len = Math.min(arguments.length, arity); + for(var i = 0; i < len; i++) args[i] = arguments[i]; + return caml_callback(f, args);}; + } + function caml_lessthan(x, y){return + (caml_compare_val(x, y, false) < 0);} + function caml_lex_array(s){ + s = caml_jsbytes_of_string(s); + var l = s.length / 2, a = new Array(l); + for(var i = 0; i < l; i++) + a[i] = (s.charCodeAt(2 * i) | s.charCodeAt(2 * i + 1) << 8) << 16 >> 16; + return a; + } + function caml_lex_engine(tbl, start_state, lexbuf){ + var + lex_buffer = 2, + lex_buffer_len = 3, + lex_start_pos = 5, + lex_curr_pos = 6, + lex_last_pos = 7, + lex_last_action = 8, + lex_eof_reached = 9, + lex_base = 1, + lex_backtrk = 2, + lex_default = 3, + lex_trans = 4, + lex_check = 5; + if(! tbl.lex_default){ + tbl.lex_base = caml_lex_array(tbl[lex_base]); + tbl.lex_backtrk = caml_lex_array(tbl[lex_backtrk]); + tbl.lex_check = caml_lex_array(tbl[lex_check]); + tbl.lex_trans = caml_lex_array(tbl[lex_trans]); + tbl.lex_default = caml_lex_array(tbl[lex_default]); + } + var + c, + state = start_state, + buffer = caml_uint8_array_of_bytes(lexbuf[lex_buffer]); + if(state >= 0){ + lexbuf[lex_last_pos] = lexbuf[lex_start_pos] = lexbuf[lex_curr_pos]; + lexbuf[lex_last_action] = - 1; + } + else + state = - state - 1; + for(;;){ + var base = tbl.lex_base[state]; + if(base < 0) return - base - 1; + var backtrk = tbl.lex_backtrk[state]; + if(backtrk >= 0){ + lexbuf[lex_last_pos] = lexbuf[lex_curr_pos]; + lexbuf[lex_last_action] = backtrk; + } + if(lexbuf[lex_curr_pos] >= lexbuf[lex_buffer_len]) + if(lexbuf[lex_eof_reached] == 0) return - state - 1; else c = 256; + else{c = buffer[lexbuf[lex_curr_pos]]; lexbuf[lex_curr_pos]++;} + if(tbl.lex_check[base + c] == state) + state = tbl.lex_trans[base + c]; + else + state = tbl.lex_default[state]; + if(state < 0){ + lexbuf[lex_curr_pos] = lexbuf[lex_last_pos]; + if(lexbuf[lex_last_action] == - 1) + caml_failwith("lexing: empty token"); + else + return lexbuf[lex_last_action]; + } + else if(c == 256) lexbuf[lex_eof_reached] = 0; + } + } + function caml_list_to_js_array(l){ + var a = []; + for(; l !== 0; l = l[2]) a.push(l[1]); + return a; + } + function caml_make_vect(len, init){ + if(len < 0) caml_array_bound_error(); + var len = len + 1 | 0, b = new Array(len); + b[0] = 0; + for(var i = 1; i < len; i++) b[i] = init; + return b; + } + function caml_MD5Init(){ + var + buffer = new ArrayBuffer(64), + b32 = new Uint32Array(buffer), + b8 = new Uint8Array(buffer); + return {len: 0, + w: + new Uint32Array([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476]), + b32: b32, + b8: b8}; + } + var + caml_MD5Transform = + function(){ + function add(x, y){return x + y | 0;} + function xx(q, a, b, x, s, t){ + a = add(add(a, q), add(x, t)); + return add(a << s | a >>> 32 - s, b); + } + function ff(a, b, c, d, x, s, t){ + return xx(b & c | ~ b & d, a, b, x, s, t); + } + function gg(a, b, c, d, x, s, t){ + return xx(b & d | c & ~ d, a, b, x, s, t); + } + function hh(a, b, c, d, x, s, t){return xx(b ^ c ^ d, a, b, x, s, t);} + function ii(a, b, c, d, x, s, t){ + return xx(c ^ (b | ~ d), a, b, x, s, t); + } + return function(w, buffer){ + var a = w[0], b = w[1], c = w[2], d = w[3]; + a = ff(a, b, c, d, buffer[0], 7, 0xD76AA478); + d = ff(d, a, b, c, buffer[1], 12, 0xE8C7B756); + c = ff(c, d, a, b, buffer[2], 17, 0x242070DB); + b = ff(b, c, d, a, buffer[3], 22, 0xC1BDCEEE); + a = ff(a, b, c, d, buffer[4], 7, 0xF57C0FAF); + d = ff(d, a, b, c, buffer[5], 12, 0x4787C62A); + c = ff(c, d, a, b, buffer[6], 17, 0xA8304613); + b = ff(b, c, d, a, buffer[7], 22, 0xFD469501); + a = ff(a, b, c, d, buffer[8], 7, 0x698098D8); + d = ff(d, a, b, c, buffer[9], 12, 0x8B44F7AF); + c = ff(c, d, a, b, buffer[10], 17, 0xFFFF5BB1); + b = ff(b, c, d, a, buffer[11], 22, 0x895CD7BE); + a = ff(a, b, c, d, buffer[12], 7, 0x6B901122); + d = ff(d, a, b, c, buffer[13], 12, 0xFD987193); + c = ff(c, d, a, b, buffer[14], 17, 0xA679438E); + b = ff(b, c, d, a, buffer[15], 22, 0x49B40821); + a = gg(a, b, c, d, buffer[1], 5, 0xF61E2562); + d = gg(d, a, b, c, buffer[6], 9, 0xC040B340); + c = gg(c, d, a, b, buffer[11], 14, 0x265E5A51); + b = gg(b, c, d, a, buffer[0], 20, 0xE9B6C7AA); + a = gg(a, b, c, d, buffer[5], 5, 0xD62F105D); + d = gg(d, a, b, c, buffer[10], 9, 0x02441453); + c = gg(c, d, a, b, buffer[15], 14, 0xD8A1E681); + b = gg(b, c, d, a, buffer[4], 20, 0xE7D3FBC8); + a = gg(a, b, c, d, buffer[9], 5, 0x21E1CDE6); + d = gg(d, a, b, c, buffer[14], 9, 0xC33707D6); + c = gg(c, d, a, b, buffer[3], 14, 0xF4D50D87); + b = gg(b, c, d, a, buffer[8], 20, 0x455A14ED); + a = gg(a, b, c, d, buffer[13], 5, 0xA9E3E905); + d = gg(d, a, b, c, buffer[2], 9, 0xFCEFA3F8); + c = gg(c, d, a, b, buffer[7], 14, 0x676F02D9); + b = gg(b, c, d, a, buffer[12], 20, 0x8D2A4C8A); + a = hh(a, b, c, d, buffer[5], 4, 0xFFFA3942); + d = hh(d, a, b, c, buffer[8], 11, 0x8771F681); + c = hh(c, d, a, b, buffer[11], 16, 0x6D9D6122); + b = hh(b, c, d, a, buffer[14], 23, 0xFDE5380C); + a = hh(a, b, c, d, buffer[1], 4, 0xA4BEEA44); + d = hh(d, a, b, c, buffer[4], 11, 0x4BDECFA9); + c = hh(c, d, a, b, buffer[7], 16, 0xF6BB4B60); + b = hh(b, c, d, a, buffer[10], 23, 0xBEBFBC70); + a = hh(a, b, c, d, buffer[13], 4, 0x289B7EC6); + d = hh(d, a, b, c, buffer[0], 11, 0xEAA127FA); + c = hh(c, d, a, b, buffer[3], 16, 0xD4EF3085); + b = hh(b, c, d, a, buffer[6], 23, 0x04881D05); + a = hh(a, b, c, d, buffer[9], 4, 0xD9D4D039); + d = hh(d, a, b, c, buffer[12], 11, 0xE6DB99E5); + c = hh(c, d, a, b, buffer[15], 16, 0x1FA27CF8); + b = hh(b, c, d, a, buffer[2], 23, 0xC4AC5665); + a = ii(a, b, c, d, buffer[0], 6, 0xF4292244); + d = ii(d, a, b, c, buffer[7], 10, 0x432AFF97); + c = ii(c, d, a, b, buffer[14], 15, 0xAB9423A7); + b = ii(b, c, d, a, buffer[5], 21, 0xFC93A039); + a = ii(a, b, c, d, buffer[12], 6, 0x655B59C3); + d = ii(d, a, b, c, buffer[3], 10, 0x8F0CCC92); + c = ii(c, d, a, b, buffer[10], 15, 0xFFEFF47D); + b = ii(b, c, d, a, buffer[1], 21, 0x85845DD1); + a = ii(a, b, c, d, buffer[8], 6, 0x6FA87E4F); + d = ii(d, a, b, c, buffer[15], 10, 0xFE2CE6E0); + c = ii(c, d, a, b, buffer[6], 15, 0xA3014314); + b = ii(b, c, d, a, buffer[13], 21, 0x4E0811A1); + a = ii(a, b, c, d, buffer[4], 6, 0xF7537E82); + d = ii(d, a, b, c, buffer[11], 10, 0xBD3AF235); + c = ii(c, d, a, b, buffer[2], 15, 0x2AD7D2BB); + b = ii(b, c, d, a, buffer[9], 21, 0xEB86D391); + w[0] = add(a, w[0]); + w[1] = add(b, w[1]); + w[2] = add(c, w[2]); + w[3] = add(d, w[3]);}; + } + (); + function caml_MD5Update(ctx, input, input_len){ + var in_buf = ctx.len & 0x3f, input_pos = 0; + ctx.len += input_len; + if(in_buf){ + var missing = 64 - in_buf; + if(input_len < missing){ + ctx.b8.set(input.subarray(0, input_len), in_buf); + return; + } + ctx.b8.set(input.subarray(0, missing), in_buf); + caml_MD5Transform(ctx.w, ctx.b32); + input_len -= missing; + input_pos += missing; + } + while(input_len >= 64){ + ctx.b8.set(input.subarray(input_pos, input_pos + 64), 0); + caml_MD5Transform(ctx.w, ctx.b32); + input_len -= 64; + input_pos += 64; + } + if(input_len) + ctx.b8.set(input.subarray(input_pos, input_pos + input_len), 0); + } + function caml_MD5Final(ctx){ + var in_buf = ctx.len & 0x3f; + ctx.b8[in_buf] = 0x80; + in_buf++; + if(in_buf > 56){ + for(var j = in_buf; j < 64; j++) ctx.b8[j] = 0; + caml_MD5Transform(ctx.w, ctx.b32); + for(var j = 0; j < 56; j++) ctx.b8[j] = 0; + } + else + for(var j = in_buf; j < 56; j++) ctx.b8[j] = 0; + ctx.b32[14] = ctx.len << 3; + ctx.b32[15] = ctx.len >> 29 & 0x1FFFFFFF; + caml_MD5Transform(ctx.w, ctx.b32); + var t = new Uint8Array(16); + for(var i = 0; i < 4; i++) + for(var j = 0; j < 4; j++) t[i * 4 + j] = ctx.w[i] >> 8 * j & 0xFF; + return t; + } + function caml_string_of_array(a){ + return caml_string_of_jsbytes(caml_subarray_to_jsbytes(a, 0, a.length)); + } + function caml_md5_bytes(s, ofs, len){ + var ctx = caml_MD5Init(), a = caml_uint8_array_of_bytes(s); + caml_MD5Update(ctx, a.subarray(ofs, ofs + len), len); + return caml_string_of_array(caml_MD5Final(ctx)); + } + function caml_md5_string(s, ofs, len){ + return caml_md5_bytes(caml_bytes_of_string(s), ofs, len); + } + var caml_sys_fds = new Array(3); + function caml_sys_close(fd){ + var file = caml_sys_fds[fd]; + if(file) file.close(); + delete caml_sys_fds[fd]; + return 0; + } + var caml_ml_channels = new Array(); + function caml_ml_flush(chanid){ + var chan = caml_ml_channels[chanid]; + if(! chan.opened) caml_raise_sys_error("Cannot flush a closed channel"); + if(! chan.buffer || chan.buffer_curr == 0) return 0; + if(chan.output) + chan.output(caml_subarray_to_jsbytes(chan.buffer, 0, chan.buffer_curr)); + else + chan.file.write(chan.offset, chan.buffer, 0, chan.buffer_curr); + chan.offset += chan.buffer_curr; + chan.buffer_curr = 0; + return 0; + } + function caml_ml_close_channel(chanid){ + var chan = caml_ml_channels[chanid]; + if(chan.opened){ + chan.opened = false; + caml_sys_close(chan.fd); + chan.fd = - 1; + chan.buffer = new Uint8Array(0); + chan.buffer_curr = 0; + chan.buffer_max = 0; + } + return 0; + } + function caml_ml_debug_info_status(){return 0;} + function caml_refill(chan){ + if(chan.refill != null){ + var str = chan.refill(), str_a = caml_uint8_array_of_string(str); + if(str_a.length == 0) + chan.refill = null; + else{ + if(chan.buffer.length < chan.buffer_max + str_a.length){ + var b = new Uint8Array(chan.buffer_max + str_a.length); + b.set(chan.buffer); + chan.buffer = b; + } + chan.buffer.set(str_a, chan.buffer_max); + chan.offset += str_a.length; + chan.buffer_max += str_a.length; + } + } + else{ + var + nread = + chan.file.read + (chan.offset, + chan.buffer, + chan.buffer_max, + chan.buffer.length - chan.buffer_max); + chan.offset += nread; + chan.buffer_max += nread; + } + } + function caml_ml_input_block(chanid, ba, i, l){ + var + chan = caml_ml_channels[chanid], + n = l, + avail = chan.buffer_max - chan.buffer_curr; + if(l <= avail){ + ba.set(chan.buffer.subarray(chan.buffer_curr, chan.buffer_curr + l), i); + chan.buffer_curr += l; + } + else if(avail > 0){ + ba.set + (chan.buffer.subarray(chan.buffer_curr, chan.buffer_curr + avail), i); + chan.buffer_curr += avail; + n = avail; + } + else{ + chan.buffer_curr = 0; + chan.buffer_max = 0; + caml_refill(chan); + var avail = chan.buffer_max - chan.buffer_curr; + if(n > avail) n = avail; + ba.set(chan.buffer.subarray(chan.buffer_curr, chan.buffer_curr + n), i); + chan.buffer_curr += n; + } + return n | 0; + } + function caml_ml_input(chanid, b, i, l){ + var ba = caml_uint8_array_of_bytes(b); + return caml_ml_input_block(chanid, ba, i, l); + } + function caml_sys_open_for_node(fd, flags){ + if(flags.name) + try{ + var fs = require("fs"), fd2 = fs.openSync(flags.name, "rs"); + return new MlNodeFd(fd2, flags); + } + catch(e){} + return new MlNodeFd(fd, flags); + } + function MlFakeFd_out(fd, flags){ + MlFakeFile.call(this, caml_create_bytes(0)); + this.log = function(s){return 0;}; + if(fd == 1 && typeof console.log == "function") + this.log = console.log; + else if(fd == 2 && typeof console.error == "function") + this.log = console.error; + else if(typeof console.log == "function") this.log = console.log; + this.flags = flags; + } + MlFakeFd_out.prototype.length = function(){return 0;}; + MlFakeFd_out.prototype.write = + function(offset, buf, pos, len){ + if(this.log){ + if + (len > 0 && pos >= 0 && pos + len <= buf.length + && buf[pos + len - 1] == 10) + len--; + var src = caml_create_bytes(len); + caml_blit_bytes(caml_bytes_of_array(buf), pos, src, 0, len); + this.log(src.toUtf16()); + return 0; + } + caml_raise_sys_error(this.fd + ": file descriptor already closed"); + }; + MlFakeFd_out.prototype.read = + function(offset, buf, pos, len){ + caml_raise_sys_error(this.fd + ": file descriptor is write only"); + }; + MlFakeFd_out.prototype.close = function(){this.log = undefined;}; + function caml_sys_open_internal(file, idx){ + if(idx == undefined) idx = caml_sys_fds.length; + caml_sys_fds[idx] = file; + return idx | 0; + } + function caml_sys_open(name, flags, _perms){ + var f = {}; + while(flags){ + switch(flags[1]){ + case 0: + f.rdonly = 1; break; + case 1: + f.wronly = 1; break; + case 2: + f.append = 1; break; + case 3: + f.create = 1; break; + case 4: + f.truncate = 1; break; + case 5: + f.excl = 1; break; + case 6: + f.binary = 1; break; + case 7: + f.text = 1; break; + case 8: + f.nonblock = 1; break; + } + flags = flags[2]; + } + if(f.rdonly && f.wronly) + caml_raise_sys_error + (caml_jsbytes_of_string(name) + + " : flags Open_rdonly and Open_wronly are not compatible"); + if(f.text && f.binary) + caml_raise_sys_error + (caml_jsbytes_of_string(name) + + " : flags Open_text and Open_binary are not compatible"); + var root = resolve_fs_device(name), file = root.device.open(root.rest, f); + return caml_sys_open_internal(file, undefined); + } + (function(){ + function file(fd, flags){ + return fs_node_supported() + ? caml_sys_open_for_node(fd, flags) + : new MlFakeFd_out(fd, flags); + } + caml_sys_open_internal + (file(0, {rdonly: 1, altname: "/dev/stdin", isCharacterDevice: true}), + 0); + caml_sys_open_internal + (file(1, {buffered: 2, wronly: 1, isCharacterDevice: true}), 1); + caml_sys_open_internal + (file(2, {buffered: 2, wronly: 1, isCharacterDevice: true}), 2); + } + ()); + function caml_ml_open_descriptor_in(fd){ + var file = caml_sys_fds[fd]; + if(file.flags.wronly) caml_raise_sys_error("fd " + fd + " is writeonly"); + var + refill = null, + channel = + {file: file, + offset: file.flags.append ? file.length() : 0, + fd: fd, + opened: true, + out: false, + buffer_curr: 0, + buffer_max: 0, + buffer: new Uint8Array(65536), + refill: refill}; + caml_ml_channels[channel.fd] = channel; + return channel.fd; + } + function caml_ml_open_descriptor_out(fd){ + var file = caml_sys_fds[fd]; + if(file.flags.rdonly) caml_raise_sys_error("fd " + fd + " is readonly"); + var + buffered = file.flags.buffered !== undefined ? file.flags.buffered : 1, + channel = + {file: file, + offset: file.flags.append ? file.length() : 0, + fd: fd, + opened: true, + out: true, + buffer_curr: 0, + buffer: new Uint8Array(65536), + buffered: buffered}; + caml_ml_channels[channel.fd] = channel; + return channel.fd; + } + function caml_ml_out_channels_list(){ + var l = 0; + for(var c = 0; c < caml_ml_channels.length; c++) + if + (caml_ml_channels[c] && caml_ml_channels[c].opened + && caml_ml_channels[c].out) + l = [0, caml_ml_channels[c].fd, l]; + return l; + } + function caml_ml_output_ta(chanid, buffer, offset, len){ + var chan = caml_ml_channels[chanid]; + if(! chan.opened) + caml_raise_sys_error("Cannot output to a closed channel"); + buffer = buffer.subarray(offset, offset + len); + if(chan.buffer_curr + buffer.length > chan.buffer.length){ + var b = new Uint8Array(chan.buffer_curr + buffer.length); + b.set(chan.buffer); + chan.buffer = b; + } + switch(chan.buffered){ + case 0: + chan.buffer.set(buffer, chan.buffer_curr); + chan.buffer_curr += buffer.length; + caml_ml_flush(chanid); + break; + case 1: + chan.buffer.set(buffer, chan.buffer_curr); + chan.buffer_curr += buffer.length; + if(chan.buffer_curr >= chan.buffer.length) caml_ml_flush(chanid); + break; + case 2: + var id = buffer.lastIndexOf(10); + if(id < 0){ + chan.buffer.set(buffer, chan.buffer_curr); + chan.buffer_curr += buffer.length; + if(chan.buffer_curr >= chan.buffer.length) caml_ml_flush(chanid); + } + else{ + chan.buffer.set(buffer.subarray(0, id + 1), chan.buffer_curr); + chan.buffer_curr += id + 1; + caml_ml_flush(chanid); + chan.buffer.set(buffer.subarray(id + 1), chan.buffer_curr); + chan.buffer_curr += buffer.length - id - 1; + } + break; + } + return 0; + } + function caml_ml_output_bytes(chanid, buffer, offset, len){ + var buffer = caml_uint8_array_of_bytes(buffer); + return caml_ml_output_ta(chanid, buffer, offset, len); + } + function caml_ml_output(chanid, buffer, offset, len){ + return caml_ml_output_bytes + (chanid, caml_bytes_of_string(buffer), offset, len); + } + function caml_ml_output_char(chanid, c){ + var s = caml_string_of_jsbytes(String.fromCharCode(c)); + caml_ml_output(chanid, s, 0, 1); + return 0; + } + function caml_ml_set_channel_name(chanid, name){ + var chan = caml_ml_channels[chanid]; + chan.name = name; + return 0; + } + function caml_mod(x, y){if(y == 0) caml_raise_zero_divide(); return x % y;} + function caml_notequal(x, y){ + return + (caml_compare_val(x, y, false) != 0); + } + function caml_obj_make_forward(b, v){b[0] = 250; b[1] = v; return 0;} + function caml_obj_tag(x){ + if(x instanceof Array && x[0] == x[0] >>> 0) + return x[0]; + else if(caml_is_ml_bytes(x)) + return 252; + else if(caml_is_ml_string(x)) + return 252; + else if(x instanceof Function || typeof x == "function") + return 247; + else if(x && x.caml_custom) return 255; else return 1000; + } + function caml_build_symbols(symb){ + var r = {}; + if(symb) + for(var i = 1; i < symb.length; i++) + r[caml_jsstring_of_string(symb[i][1])] = symb[i][2]; + return r; + } + function caml_register_global(n, v, name_opt){ + if(name_opt){ + var name = name_opt; + if(globalThis.toplevelReloc) + n = caml_callback(globalThis.toplevelReloc, [name]); + else if(caml_global_data.symbols){ + if(! caml_global_data.symidx) + caml_global_data.symidx = caml_build_symbols(caml_global_data.symbols); + var nid = caml_global_data.symidx[name]; + if(nid >= 0) + n = nid; + else + caml_failwith("caml_register_global: cannot locate " + name); + } + } + caml_global_data[n + 1] = v; + if(name_opt) caml_global_data[name_opt] = v; + } + function caml_register_named_value(nm, v){ + caml_named_values[caml_jsbytes_of_string(nm)] = v; + return 0; + } + function caml_string_equal(s1, s2){if(s1 === s2) return 1; return 0;} + function caml_string_bound_error(){ + caml_invalid_argument("index out of bounds"); + } + function caml_string_get(s, i){ + if(i >>> 0 >= caml_ml_string_length(s)) caml_string_bound_error(); + return caml_string_unsafe_get(s, i); + } + function caml_string_notequal(s1, s2){ + return 1 - caml_string_equal(s1, s2); + } + function caml_string_of_bytes(s){ + s.t & 6 && caml_convert_string_to_bytes(s); + return caml_string_of_jsbytes(s.c); + } + function caml_sys_const_max_wosize(){return 0x7FFFFFFF / 4 | 0;} + function caml_raise_not_found(){ + caml_raise_constant(caml_global_data.Not_found); + } + function caml_sys_getenv(name){ + var r = jsoo_sys_getenv(caml_jsstring_of_string(name)); + if(r === undefined) caml_raise_not_found(); + return caml_string_of_jsstring(r); + } + function caml_sys_random_seed(){ + if(globalThis.crypto) + if(globalThis.crypto.getRandomValues){ + var a = globalThis.crypto.getRandomValues(new Int32Array(4)); + return [0, a[0], a[1], a[2], a[3]]; + } + else if(globalThis.crypto.randomBytes){ + var a = new Int32Array(globalThis.crypto.randomBytes(16).buffer); + return [0, a[0], a[1], a[2], a[3]]; + } + var now = new Date().getTime(), x = now ^ 0xffffffff * Math.random(); + return [0, x]; + } + function caml_trampoline(res){ + var c = 1; + while(res && res.joo_tramp){ + res = res.joo_tramp.apply(null, res.joo_args); + c++; + } + return res; + } + function caml_trampoline_return(f, args){return {joo_tramp: f, joo_args: args}; + } + function caml_wrap_exception(e){ + { + if(e instanceof Array) return e; + var exn; + if + (globalThis.RangeError && e instanceof globalThis.RangeError + && e.message + && e.message.match(/maximum call stack/i)) + exn = caml_global_data.Stack_overflow; + else if + (globalThis.InternalError && e instanceof globalThis.InternalError + && e.message + && e.message.match(/too much recursion/i)) + exn = caml_global_data.Stack_overflow; + else if(e instanceof globalThis.Error && caml_named_value("jsError")) + exn = [0, caml_named_value("jsError"), e]; + else + exn = [0, caml_global_data.Failure, caml_string_of_jsstring(String(e))]; + if(e instanceof globalThis.Error) exn.js_error = e; + return exn; + } + } + function caml_is_special_exception(exn){ + switch(exn[2]){case - 8:case - 11:case - 12: return 1;default: return 0; + } + } + function caml_format_exception(exn){ + var r = ""; + if(exn[0] == 0){ + r += exn[1][1]; + if + (exn.length == 3 && exn[2][0] == 0 && caml_is_special_exception(exn[1])) + var bucket = exn[2], start = 1; + else + var start = 2, bucket = exn; + r += "("; + for(var i = start; i < bucket.length; i++){ + if(i > start) r += ", "; + var v = bucket[i]; + if(typeof v == "number") + r += v.toString(); + else if(v instanceof MlBytes) + r += '"' + v.toString() + '"'; + else if(typeof v == "string") + r += '"' + v.toString() + '"'; + else + r += "_"; + } + r += ")"; + } + else if(exn[0] == 248) r += exn[1]; + return r; + } + function caml_fatal_uncaught_exception(err){ + if(err instanceof Array && (err[0] == 0 || err[0] == 248)){ + var handler = caml_named_value("Printexc.handle_uncaught_exception"); + if(handler) + caml_callback(handler, [err, false]); + else{ + var + msg = caml_format_exception(err), + at_exit = caml_named_value("Pervasives.do_at_exit"); + if(at_exit) caml_callback(at_exit, [0]); + console.error("Fatal error: exception " + msg); + if(err.js_error) throw err.js_error; + } + } + else + throw err; + } + function caml_setup_uncaught_exception_handler(){ + var process = globalThis.process; + if(process && process.on) + process.on + ("uncaughtException", + function(err, origin){ + caml_fatal_uncaught_exception(err); + process.exit(2); + }); + else if(globalThis.addEventListener) + globalThis.addEventListener + ("error", + function(event){ + if(event.error) caml_fatal_uncaught_exception(event.error); + }); + } + caml_setup_uncaught_exception_handler(); + var + cst$1 = "", + cst$13 = " ", + cst$12 = '"', + cst_Li = "%Li", + cst_a = "%a", + cst_d = "%d", + cst_i = "%i", + cst_li = "%li", + cst_ni = "%ni", + cst_s = "%s", + cst_s_Items_s_Images_Primary_w = + "%s/Items/%s/Images/Primary?width=500&format=Jpg", + cst_u = "%u", + cst$8 = "'", + cst_Program_not_linked_with_g_ = + "(Program not linked with -g, cannot print stack backtrace)\n", + cst$10 = ",", + cst$4 = ", ", + cst_characters = ", characters ", + cst_Infinity = "-Infinity", + cst = ".", + cst_0 = ".0", + cst_Images_Primary_width_500_f = "/Images/Primary?width=500&format=Jpg", + cst_Items = "/Items/", + cst_5rem = "5rem", + cst$11 = ":", + cst$5 = ": ", + cst$7 = "<", + cst_hov = "", + cst_hv2 = "", + cst$6 = ">", + cst_1_2 = "@;<1 -2>", + cst_1_0 = "@;<1 0>", + cst$3 = "@[", + cst$2 = "@{", + cst_AccessToken = "AccessToken", + cst_AggregateFolder = "AggregateFolder", + cst_AlbumId = "AlbumId", + cst_Assert_failure = "Assert_failure", + cst_Audio = "Audio", + cst_AudioBook = "AudioBook", + cst_BasePluginFolder = "BasePluginFolder", + cst_Book = "Book", + cst_BoxSet = "BoxSet", + cst_Channel = "Channel", + cst_ChannelFolderItem = "ChannelFolderItem", + cst_CollectionFolder = "CollectionFolder", + cst_CollectionType = "CollectionType", + cst_Cover = "Cover", + cst_Division_by_zero = "Division_by_zero", + cst_End_of_file = "End_of_file", + cst_Episode = "Episode", + cst_Failure = "Failure", + cst_Fatal_error_exception = "Fatal error: exception ", + cst_Fatal_error_exception_s = "Fatal error: exception %s\n", + cst_Folder = "Folder", + cst_Form_submitted = "Form submitted:", + cst_Genre = "Genre", + cst_Id = "Id", + cst_ImageBlurHashes = "ImageBlurHashes", + cst_Infinity$0 = "Infinity", + cst_Invalid_argument = "Invalid_argument", + cst_ItemId = "ItemId", + cst_LiveTvChannel = "LiveTvChannel", + cst_LiveTvProgram = "LiveTvProgram", + cst_Locations = "Locations", + cst_Lwd_seq_rank_node_is_marke = "Lwd_seq.rank: node is marked", + cst_ManualPlaylistsFolder = "ManualPlaylistsFolder", + cst_Match_failure = "Match_failure", + cst_Movie = "Movie", + cst_MusicAlbum = "MusicAlbum", + cst_MusicArtist = "MusicArtist", + cst_MusicGenre = "MusicGenre", + cst_MusicVideo = "MusicVideo", + cst_NaN = "NaN", + cst_Name = "Name", + cst_Not_found = "Not_found", + cst_Nothing_playing = "Nothing playing", + cst_Out_of_memory = "Out_of_memory", + cst_ParentId = "ParentId", + cst_Path = "Path", + cst_Person = "Person", + cst_Photo = "Photo", + cst_PhotoAlbum = "PhotoAlbum", + cst_Playlist = "Playlist", + cst_PlaylistsFolder = "PlaylistsFolder", + cst_Primary = "Primary", + cst_Program = "Program", + cst_Pw = "Pw", + cst_Recording = "Recording", + cst_Season = "Season", + cst_Series = "Series", + cst_ServerId = "ServerId", + cst_ServerName = "ServerName", + cst_Set_bal = "Set.bal", + cst_SortName = "SortName", + cst_Stack_overflow = "Stack_overflow", + cst_Studio = "Studio", + cst_Sys_blocked_io = "Sys_blocked_io", + cst_Sys_error = "Sys_error", + cst_Title = "Title", + cst_Trailer = "Trailer", + cst_TvChannel = "TvChannel", + cst_TvProgram = "TvProgram", + cst_Type = "Type", + cst_Undefined_recursive_module = "Undefined_recursive_module", + cst_User = "User", + cst_UserRootFolder = "UserRootFolder", + cst_UserView = "UserView", + cst_Username = "Username", + cst_Video = "Video", + cst_Year = "Year", + cst$9 = '\\"', + cst$0 = "\\\\", + cst_b = "\\b", + cst_f = "\\f", + cst_n = "\\n", + cst_r = "\\r", + cst_t = "\\t", + cst_u00 = "\\u00", + cst_append = "append", + cst_body = "body", + cst_box = "box", + cst_buffer_ml = "buffer.ml", + cst_button = "button", + cst_camlinternalFormat_ml = "camlinternalFormat.ml", + cst_checked = "checked", + cst_classList = "classList", + cst_click = "click", + cst_console = "console", + cst_date_added = "date_added", + cst_documentElement = "documentElement", + cst_duration = "duration", + cst_em = "em", + cst_empty_input = "empty input", + cst_error = "error", + cst_false = "false", + cst_fut = "fut", + cst_grid_column_1_1 = "grid-column:1/-1", + cst_height = "height: ", + cst_id = "id", + cst_input = "input", + cst_item = "item", + cst_item_Id = "item.Id", + cst_items_by_date_added = "items_by_date_added", + cst_junk_after_end_of_JSON_val = "junk after end of JSON value: ", + cst_length = "length", + cst_lib_db_stores_ml = "lib/db/stores.ml", + cst_lwd_to_remove = "lwd-to-remove", + cst_name = "name", + cst_null = "null", + cst_playbackRate = "playbackRate", + cst_pouet = "pouet", + cst_px = "px", + cst_rem = "rem", + cst_remove = "remove", + cst_server_id = "server_id", + cst_sort_name = "sort_name", + cst_sorts = "sorts", + cst_sorts_views = "sorts.views", + cst_src = "src", + cst_style = "style", + cst_submit = "submit", + cst_target = "target", + cst_text = "text", + cst_track_png = "track.png", + cst_true = "true", + cst_tuples_not_supported_in_yo = + "tuples not supported in yojson basic mode", + cst_type = "type", + cst_unexpected_character = "unexpected character '", + cst_value = "value", + cst_variants_not_supported_in_ = + "variants not supported in yojson basic mode", + cst_vendor_lwd_lib_brr_lwd_elw = "vendor/lwd/lib/brr-lwd/elwd.ml", + cst_vendor_lwd_lib_lwd_lwd_ml = "vendor/lwd/lib/lwd/lwd.ml", + cst_vendor_lwd_lib_lwd_lwd_seq = "vendor/lwd/lib/lwd/lwd_seq.pp.ml", + cst_vendor_lwd_lib_lwd_lwd_tab = "vendor/lwd/lib/lwd/lwd_table.ml", + cst_views = "views", + cst_window = "window"; + function caml_call1(f, a0){ + return (f.l >= 0 ? f.l : f.l = f.length) == 1 + ? f(a0) + : caml_call_gen(f, [a0]); + } + function caml_call2(f, a0, a1){ + return (f.l >= 0 ? f.l : f.l = f.length) == 2 + ? f(a0, a1) + : caml_call_gen(f, [a0, a1]); + } + function caml_call3(f, a0, a1, a2){ + return (f.l >= 0 ? f.l : f.l = f.length) == 3 + ? f(a0, a1, a2) + : caml_call_gen(f, [a0, a1, a2]); + } + function caml_call4(f, a0, a1, a2, a3){ + return (f.l >= 0 ? f.l : f.l = f.length) == 4 + ? f(a0, a1, a2, a3) + : caml_call_gen(f, [a0, a1, a2, a3]); + } + function caml_call5(f, a0, a1, a2, a3, a4){ + return (f.l >= 0 ? f.l : f.l = f.length) == 5 + ? f(a0, a1, a2, a3, a4) + : caml_call_gen(f, [a0, a1, a2, a3, a4]); + } + function caml_call7(f, a0, a1, a2, a3, a4, a5, a6){ + return (f.l >= 0 ? f.l : f.l = f.length) == 7 + ? f(a0, a1, a2, a3, a4, a5, a6) + : caml_call_gen(f, [a0, a1, a2, a3, a4, a5, a6]); + } + var undef = undefined; + caml_fs_init(); + var + Out_of_memory = [248, cst_Out_of_memory, -1], + Sys_error = [248, cst_Sys_error, -2], + Failure = [248, cst_Failure, -3], + Invalid_argument = [248, cst_Invalid_argument, -4], + End_of_file = [248, cst_End_of_file, -5], + Division_by_zero = [248, cst_Division_by_zero, -6], + Not_found = [248, cst_Not_found, -7], + Match_failure = [248, cst_Match_failure, -8], + Stack_overflow = [248, cst_Stack_overflow, -9], + Sys_blocked_io = [248, cst_Sys_blocked_io, -10], + Assert_failure = [248, cst_Assert_failure, -11], + Undefined_recursive_module = [248, cst_Undefined_recursive_module, -12], + dummy_pos = [0, cst$1, 0, 0, -1], + zero_pos = [0, cst$1, 1, 0, 0], + partial = [4, 0, 0, 0, [12, 45, [4, 0, 0, 0, 0]]], + locfmt = + [0, + [11, + 'File "', + [2, + 0, + [11, + '", line ', + [4, + 0, + 0, + 0, + [11, + cst_characters, + [4, 0, 0, 0, [12, 45, [4, 0, 0, 0, [11, cst$5, [2, 0, 0]]]]]]]]]], + 'File "%s", line %d, characters %d-%d: %s'], + ocaml_lex_tables = + [0, + "\0\0\xe5\xff\x11\0\xe8\xff\x03\0\xea\xff~\0\0\0q\0\0\0\x01\0\x01\0\x02\0{\0\xf3\xff\xf4\xff\xf5\xff\xf6\xff\xf7\xff\xf8\xff\xf9\xff\xfa\xff\xfb\xff\xfc\xff\x01\0\x02\0\0\0\0\0\x02\0\xff\xff\0\0\0\0\x03\0\xfe\xff\x03\0\x01\0\x0b\0\xfd\xff\xef\xff\x03\0\n\0\x0b\0\x05\0\xf2\xff\x14\0\x13\x000\0L\0C\0?\0K\0T\0\xf1\xffU\0S\0O\0U\0K\0G\0S\0T\0]\0\xf0\xff_\0]\0Y\0_\0U\0Q\0\x01\0 \0\x9b\0\xba\0\xd1\0\xdb\0\xe5\0\xf0\0\xfa\0\x12\x01B\x01\xec\xff\xeb\xff^\x01u\x01\x9b\x01\xb2\x015\0\xe7\xffX\x01\xfc\xff\xfd\xff\xfe\xff\x0e\0\xff\xff", + "\xff\xff\xff\xff\x1a\0\xff\xff\x16\0\xff\xff\x1a\0\x11\0\x11\0\x1a\0\x1a\0\x1a\0\x1a\0\x1a\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\0\x1a\0\x1a\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\0\xff\xff\x12\0\xff\xff\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff", + "\x01\0\0\0\xff\xff\0\0\xff\xff\0\0O\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffO\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xffV\0\0\0Y\0\0\0\0\0\0\0\xff\xff\0\0", + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\x03\0\0\0\x04\0\x04\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\x06\0\x04\0\0\0\0\0\0\0\0\0\x13\0\x12\0\0\0\n\0\x0f\0\r\0G\0\x02\0\x07\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\x0e\0W\0\x11\0]\0\x10\0\xff\xffV\0\0\0\0\0\0\0\0\0F\0\0\0\0\0\0\0\x0b\0;\0M\0\0\0M\0\t\0&\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0\0\0\x15\0\0\0\x14\0\0\0\0\0\0\0E\0\"\0\x1e\x002\0F\0\x19\0\x1d\0!\0\f\0<\0+\0\x1f\0$\0\x18\x005\x003\0&\0\x1b\0 \0\x1a\0\x1c\0#\0%\0,\0*\0-\0\x17\0.\0\x16\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff/\0G\0P\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\x07\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\x000\0F\x001\0+\0&\x004\x006\x007\x008\x009\0:\x004\0?\0=\0>\0(\0@\0A\0B\0C\0D\0>\0H\0H\0H\0H\0H\0H\0H\0H\0H\0H\0\0\0F\0\0\0\0\0\0\0N\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\0\0\0\0\0\0\0\0\0'\0H\0H\0H\0H\0H\0H\0H\0H\0H\0H\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0K\0\0\0K\0I\0\x05\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0I\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0O\0\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0O\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff[\0\0\0Q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0O\0\0\0\0\0\0\0\0\0\0\0O\0\0\0\0\0\0\0O\0\0\0\0\0\0\0\0\0\0\0\xff\xff\0\0O\0\0\0\\\0\0\0O\0\0\0O\0R\0\0\0\0\0\0\0\0\0\0\0\0\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0\0\0\0\0\0\0\0\0\0\0\0\0N\0S\0S\0S\0S\0S\0S\0T\0T\0T\0T\0T\0T\0T\0T\0T\0T\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0T\0T\0T\0T\0T\0T\0\0\0\0\0\0\0S\0S\0S\0S\0S\0S\0\0\0\0\0\0\0\0\0\0\0\0\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0\0\0T\0T\0T\0T\0T\0T\0U\0U\0U\0U\0U\0U\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0O\0O\0O\0O\0O\0O\0\0\0\0\0\0\0U\0U\0U\0U\0U\0U\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0O\0O\0O\0O\0O\0O\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\x04\0\0\0\xff\xff\xff\xff\x04\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\0\0\x04\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\0\0\0\0\0\0\x07\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x02\0\0\0\\\0\0\0V\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\xff\xff\xff\xff\xff\xff\0\0\n\0F\0\xff\xffF\0\0\0E\0F\0F\0F\0F\0F\0F\0F\0F\0F\0F\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\t\0\x18\0\x19\0'\0\x07\0\0\0\x1c\0 \0\0\0\n\0*\0\x1e\0#\0\0\0\x0b\0\f\0\"\0\x1a\0\x1f\0\0\0\x1b\0\x18\0$\0(\0)\0,\0\0\0-\0\0\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0\x06\0.\0\b\0\x06\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\b\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0/\0\b\x000\x001\x002\x003\x005\x006\x007\x008\x009\0:\0;\0<\0=\0\r\0?\0@\0A\0B\0C\0D\0G\0G\0G\0G\0G\0G\0G\0G\0G\0G\0\xff\xff\b\0\xff\xff\xff\xff\xff\xff\x06\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\r\0\xff\xff\xff\xff\xff\xff\xff\xff\r\0H\0H\0H\0H\0H\0H\0H\0H\0H\0H\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffI\0\xff\xffI\0H\0\0\0I\0I\0I\0I\0I\0I\0I\0I\0I\0I\0J\0J\0J\0J\0J\0J\0J\0J\0J\0J\0K\0K\0K\0K\0K\0K\0K\0K\0K\0K\0H\0L\0L\0L\0L\0L\0L\0L\0L\0L\0L\0M\0M\0M\0M\0M\0M\0M\0M\0M\0M\0N\0V\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffN\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0X\0\xff\xffO\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffN\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffN\0\xff\xff\xff\xff\xff\xffN\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x06\0\xff\xffN\0\xff\xffX\0\xff\xffN\0\xff\xffN\0N\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffR\0R\0R\0R\0R\0R\0R\0R\0R\0R\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffO\0R\0R\0R\0R\0R\0R\0S\0S\0S\0S\0S\0S\0S\0S\0S\0S\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffS\0S\0S\0S\0S\0S\0\xff\xff\xff\xff\xff\xffR\0R\0R\0R\0R\0R\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffT\0T\0T\0T\0T\0T\0T\0T\0T\0T\0\xff\xffS\0S\0S\0S\0S\0S\0T\0T\0T\0T\0T\0T\0U\0U\0U\0U\0U\0U\0U\0U\0U\0U\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffU\0U\0U\0U\0U\0U\0\xff\xff\xff\xff\xff\xffT\0T\0T\0T\0T\0T\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffU\0U\0U\0U\0U\0U\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffO\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffX\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", + cst$1, + cst$1, + cst$1, + cst$1, + cst$1, + cst$1], + tp_loc = "lib/data_source/jellyfin_api.ml.user", + tp_loc$0 = "lib/data_source/jellyfin_api.ml.Authenticate_by_name.params", + tp_loc$1 = "lib/data_source/jellyfin_api.ml.Authenticate_by_name.response", + tp_loc$2 = "lib/data_source/jellyfin_api.ml.Item.image_blur_hashes", + tp_loc$3 = "lib/data_source/jellyfin_api.ml.Item.type_", + tp_loc$4 = "lib/data_source/jellyfin_api.ml.Item.t", + tp_loc$5 = + "lib/data_source/jellyfin_api.ml.Virtual_folders.virtual_folder", + tp_loc$6 = "lib/db/stores.ml.Orderred_items.t", + path = [0, cst_id], + name$5 = cst_items_by_date_added, + tp_loc$7 = "lib/db/stores.ml.Items.sorts", + tp_loc$8 = "lib/db/stores.ml.Items.t", + path$1 = [0, "sorts.date_added"], + path$2 = [0, cst_item_Id], + name$6 = "items", + path$5 = [0, cst_ItemId], + name$7 = "virtual_folders", + name$8 = cst_items_by_date_added, + name$9 = "items_by_view_and_kind", + name$10 = "items_by_id", + name$11 = "items_by_type_and_name", + initial_report = [0, 0, 0], + strings = + [0, + [0, [0, 0, cst_click], "Cliquez sur le bouton !"], + [0, [0, [0, 1, cst_click], "Click on the Button !"], 0]], + url$0 = "./db_worker.bc.js", + default$1 = [0, 0, 0, 0], + album = cst$1, + artist = cst$1; + caml_register_global + (11, Undefined_recursive_module, cst_Undefined_recursive_module); + caml_register_global(10, Assert_failure, cst_Assert_failure); + caml_register_global(9, Sys_blocked_io, cst_Sys_blocked_io); + caml_register_global(8, Stack_overflow, cst_Stack_overflow); + caml_register_global(7, Match_failure, cst_Match_failure); + caml_register_global(6, Not_found, cst_Not_found); + caml_register_global(5, Division_by_zero, cst_Division_by_zero); + caml_register_global(4, End_of_file, cst_End_of_file); + caml_register_global(3, Invalid_argument, cst_Invalid_argument); + caml_register_global(2, Failure, cst_Failure); + caml_register_global(1, Sys_error, cst_Sys_error); + caml_register_global(0, Out_of_memory, cst_Out_of_memory); + var + _h_ = cst_input, + _g_ = [0, 0, [0, 7, 0]], + _f_ = "output_substring", + _e_ = [0, 1, [0, 3, [0, 4, [0, 7, 0]]]], + _d_ = cst, + _b_ = cst_true, + _c_ = cst_false, + _a_ = "char_of_int", + _l_ = "CamlinternalLazy.Undefined", + _m_ = "option is None", + _n_ = "result is Error _", + _p_ = cst$0, + _q_ = "\\'", + _r_ = cst_b, + _s_ = cst_t, + _t_ = cst_n, + _u_ = cst_r, + _o_ = "Char.chr", + _w_ = "List.init", + _v_ = "hd", + _z_ = "String.blit / Bytes.blit_string", + _y_ = "Bytes.blit", + _x_ = "String.sub / Bytes.sub", + _C_ = "String.contains_from / Bytes.contains_from", + _B_ = cst$1, + _A_ = "String.concat", + _G_ = "Array.iter2: arrays must have the same length", + _F_ = "Array.blit", + _E_ = "Array.fill", + _D_ = "Array.sub", + _H_ = "Lexing.lex_refill: cannot grow buffer", + _M_ = "Set.remove_min_elt", + _N_ = [0, 0, 0, 0], + _O_ = [0, "set.ml", 570, 18], + _I_ = cst_Set_bal, + _J_ = cst_Set_bal, + _K_ = cst_Set_bal, + _L_ = cst_Set_bal, + _Q_ = "Stdlib.Queue.Empty", + _W_ = "Buffer.add_substring/add_subbytes", + _V_ = "Buffer.add: cannot grow buffer", + _U_ = [0, cst_buffer_ml, 93, 2], + _S_ = [0, cst_buffer_ml, 94, 2], + _R_ = "Buffer.sub", + _ad_ = "%c", + _ae_ = cst_s, + _af_ = cst_i, + _ag_ = cst_li, + _ah_ = cst_ni, + _ai_ = cst_Li, + _aj_ = "%f", + _ak_ = "%B", + _al_ = "%{", + _am_ = "%}", + _an_ = "%(", + _ao_ = "%)", + _ap_ = cst_a, + _aq_ = "%t", + _ar_ = "%?", + _as_ = "%r", + _at_ = "%_r", + _au_ = [0, cst_camlinternalFormat_ml, 850, 23], + _aF_ = [0, cst_camlinternalFormat_ml, 814, 21], + _ax_ = [0, cst_camlinternalFormat_ml, 815, 21], + _aG_ = [0, cst_camlinternalFormat_ml, 818, 21], + _ay_ = [0, cst_camlinternalFormat_ml, 819, 21], + _aH_ = [0, cst_camlinternalFormat_ml, 822, 19], + _az_ = [0, cst_camlinternalFormat_ml, 823, 19], + _aI_ = [0, cst_camlinternalFormat_ml, 826, 22], + _aA_ = [0, cst_camlinternalFormat_ml, 827, 22], + _aJ_ = [0, cst_camlinternalFormat_ml, 831, 30], + _aB_ = [0, cst_camlinternalFormat_ml, 832, 30], + _aD_ = [0, cst_camlinternalFormat_ml, 836, 26], + _av_ = [0, cst_camlinternalFormat_ml, 837, 26], + _aE_ = [0, cst_camlinternalFormat_ml, 846, 28], + _aw_ = [0, cst_camlinternalFormat_ml, 847, 28], + _aC_ = [0, cst_camlinternalFormat_ml, 851, 23], + _bE_ = [0, cst_camlinternalFormat_ml, 1558, 4], + _bF_ = "Printf: bad conversion %[", + _bG_ = [0, cst_camlinternalFormat_ml, 1626, 39], + _bH_ = [0, cst_camlinternalFormat_ml, 1649, 31], + _bI_ = [0, cst_camlinternalFormat_ml, 1650, 31], + _bJ_ = "Printf: bad conversion %_", + _bK_ = cst$2, + _bL_ = cst$3, + _bM_ = cst$2, + _bN_ = cst$3, + _bP_ = + [0, + [11, "invalid box description ", [3, 0, 0]], + "invalid box description %S"], + _bO_ = [0, 0, 4], + _bD_ = "nan", + _bB_ = "neg_infinity", + _bC_ = "infinity", + _bA_ = cst, + _bz_ = [0, 103], + _bn_ = "%+nd", + _bo_ = "% nd", + _bq_ = "%+ni", + _br_ = "% ni", + _bs_ = "%nx", + _bt_ = "%#nx", + _bu_ = "%nX", + _bv_ = "%#nX", + _bw_ = "%no", + _bx_ = "%#no", + _bm_ = "%nd", + _bp_ = cst_ni, + _by_ = "%nu", + _ba_ = "%+ld", + _bb_ = "% ld", + _bd_ = "%+li", + _be_ = "% li", + _bf_ = "%lx", + _bg_ = "%#lx", + _bh_ = "%lX", + _bi_ = "%#lX", + _bj_ = "%lo", + _bk_ = "%#lo", + _a$_ = "%ld", + _bc_ = cst_li, + _bl_ = "%lu", + _aZ_ = "%+Ld", + _a0_ = "% Ld", + _a2_ = "%+Li", + _a3_ = "% Li", + _a4_ = "%Lx", + _a5_ = "%#Lx", + _a6_ = "%LX", + _a7_ = "%#LX", + _a8_ = "%Lo", + _a9_ = "%#Lo", + _aY_ = "%Ld", + _a1_ = cst_Li, + _a__ = "%Lu", + _aM_ = "%+d", + _aN_ = "% d", + _aP_ = "%+i", + _aQ_ = "% i", + _aR_ = "%x", + _aS_ = "%#x", + _aT_ = "%X", + _aU_ = "%#X", + _aV_ = "%o", + _aW_ = "%#o", + _aL_ = cst_d, + _aO_ = cst_i, + _aX_ = cst_u, + _X_ = "@]", + _Y_ = "@}", + _Z_ = "@?", + ___ = "@\n", + _$_ = "@.", + _aa_ = "@@", + _ab_ = "@%", + _ac_ = "@", + _aK_ = "CamlinternalFormat.Type_mismatch", + _bT_ = cst$1, + _bU_ = [0, [11, cst$4, [2, 0, [2, 0, 0]]], ", %s%s"], + _cf_ = + [0, + [11, cst_Fatal_error_exception, [2, 0, [12, 10, 0]]], + cst_Fatal_error_exception_s], + _cg_ = + [0, + [11, + "Fatal error in uncaught exception handler: exception ", + [2, 0, [12, 10, 0]]], + "Fatal error in uncaught exception handler: exception %s\n"], + _ce_ = "Fatal error: out of memory in uncaught exception handler", + _cd_ = + [0, + [11, cst_Fatal_error_exception, [2, 0, [12, 10, 0]]], + cst_Fatal_error_exception_s], + _ca_ = [0, [2, 0, [12, 10, 0]], "%s\n"], + _cb_ = + [0, + [11, cst_Program_not_linked_with_g_, 0], + cst_Program_not_linked_with_g_], + _b4_ = "Raised at", + _b5_ = "Re-raised at", + _b6_ = "Raised by primitive operation at", + _b7_ = "Called from", + _b8_ = " (inlined)", + _b__ = cst$1, + _b9_ = + [0, + [2, + 0, + [12, + 32, + [2, + 0, + [11, + ' in file "', + [2, + 0, + [12, + 34, + [2, + 0, + [11, ", line ", [4, 0, 0, 0, [11, cst_characters, partial]]]]]]]]]], + '%s %s in file "%s"%s, line %d, characters %d-%d'], + _b$_ = [0, [2, 0, [11, " unknown location", 0]], "%s unknown location"], + _bZ_ = "Out of memory", + _b0_ = "Stack overflow", + _b1_ = "Pattern matching failed", + _b2_ = "Assertion failed", + _b3_ = "Undefined recursive module", + _bV_ = [0, [12, 40, [2, 0, [2, 0, [12, 41, 0]]]], "(%s%s)"], + _bW_ = cst$1, + _bX_ = cst$1, + _bY_ = [0, [12, 40, [2, 0, [12, 41, 0]]], "(%s)"], + _bS_ = [0, [4, 0, 0, 0, 0], cst_d], + _bQ_ = [0, [3, 0, 0], "%S"], + _bR_ = "_", + _cc_ = + [0, + cst$1, + "(Cannot print locations:\n bytecode executable program file not found)", + "(Cannot print locations:\n bytecode executable program file appears to be corrupt)", + "(Cannot print locations:\n bytecode executable program file has wrong magic number)", + "(Cannot print locations:\n bytecode executable program file cannot be opened;\n -- too many open files. Try running with OCAMLRUNPARAM=b=2)"], + _cj_ = "Fun.Finally_raised: ", + _ci_ = "Stdlib.Fun.Finally_raised", + _ck_ = "x", + _cl_ = + [0, + 987910699, + 495797812, + 364182224, + 414272206, + 318284740, + 990407751, + 383018966, + 270373319, + 840823159, + 24560019, + 536292337, + 512266505, + 189156120, + 730249596, + 143776328, + 51606627, + 140166561, + 366354223, + 1003410265, + 700563762, + 981890670, + 913149062, + 526082594, + 1021425055, + 784300257, + 667753350, + 630144451, + 949649812, + 48546892, + 415514493, + 258888527, + 511570777, + 89983870, + 283659902, + 308386020, + 242688715, + 482270760, + 865188196, + 1027664170, + 207196989, + 193777847, + 619708188, + 671350186, + 149669678, + 257044018, + 87658204, + 558145612, + 183450813, + 28133145, + 901332182, + 710253903, + 510646120, + 652377910, + 409934019, + 801085050], + _cq_ = "Hashtbl: unsupported hash table format", + _co_ = cst$1, + _cJ_ = [3, 0, 3], + _cK_ = cst, + _cG_ = cst$6, + _cH_ = "<\/", + _cI_ = cst$1, + _cD_ = cst$6, + _cE_ = cst$7, + _cF_ = cst$1, + _cC_ = "\n", + _cy_ = cst$1, + _cz_ = cst$1, + _cA_ = cst$1, + _cB_ = cst$1, + _cx_ = [0, cst$1], + _ct_ = cst$1, + _cu_ = cst$1, + _cv_ = cst$1, + _cw_ = cst$1, + _cs_ = [0, cst$1, 0, cst$1], + _cr_ = "Stdlib.Format.String_tag", + _cL_ = "Jsoo_runtime.Error.Exn", + _cM_ = "jsError", + _cO_ = [0, "src/fut.ml", 34, 25], + _cW_ = "info", + _cV_ = "warn", + _cU_ = cst_error, + _cT_ = "log", + _cR_ = "scrollTop", + _cP_ = "search", + _cX_ = "isSecureContext", + _cY_ = "cache", + _cZ_ = "credentials", + _c0_ = "headers", + _c1_ = "integrity", + _c2_ = "keepalive", + _c3_ = "method", + _c4_ = "mode", + _c5_ = "redirect", + _c6_ = "referrer", + _c7_ = "referrerPolicy", + _c9_ = "content-box", + _c__ = "border-box", + _c$_ = "device-pixel-content-box", + _db_ = cst_duration, + _dc_ = cst_playbackRate, + _dd_ = "position", + _da_ = "Set metadata", + _dh_ = "open", + _de_ = "autoIncrement", + _df_ = "keyPath", + _dg_ = "new object store with options:", + _dl_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 157, 10], + _dn_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 179, 10], + _dp_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 191, 10], + _dr_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 218, 17], + _dw_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 367, 16], + _dx_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 368, 18], + _dy_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 372, 15], + _dz_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 377, 15], + _dA_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 383, 15], + _dB_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 386, 10], + _dC_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 362, 16], + _dD_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 517, 12], + _dE_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 459, 14], + _dK_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 686, 27], + _dJ_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 651, 27], + _dH_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 560, 16], + _dF_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 550, 23], + _dG_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 544, 14], + _dv_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 334, 9], + _du_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 309, 9], + _dt_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 305, 9], + _ds_ = + [0, + [11, + "Lwd: unsafe mutation (variable invalidated during evaluation) at\n", + [15, 0]], + "Lwd: unsafe mutation (variable invalidated during evaluation) at\n%a"], + _dq_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 199, 14], + _do_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 186, 14], + _dm_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 169, 14], + _dk_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 152, 14], + _dI_ = "Lwd.Release_failure", + _dM_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 64, 12], + _dU_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 205, 18], + _dT_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 218, 9], + _dW_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 224, 18], + _dV_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 237, 9], + _dX_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 240, 21], + _dY_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 250, 21], + _dZ_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 260, 21], + _d0_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 296, 14], + _ea_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 492, 29], + _d$_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 499, 29], + _d__ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 462, 21], + _d6_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 420, 10], + _d7_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 423, 15], + _d8_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 435, 10], + _d9_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 457, 2], + _d3_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 371, 24], + _d4_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 391, 16], + _d5_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 394, 2], + _d2_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 315, 18], + _d1_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 317, 9], + _dS_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 193, 4], + _dR_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 199, 21], + _dP_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 174, 4], + _dQ_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 177, 14], + _dO_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 113, 14], + _dN_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 82, 21], + _dL_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 32, 14], + _es_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 571, 12], + _eg_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 321, 37], + _eh_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 322, 37], + _ej_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 346, 10], + _ek_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 357, 42], + _ei_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 337, 37], + _em_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 375, 10], + _en_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 383, 42], + _el_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 338, 37], + _ep_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 425, 16], + _er_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 513, 50], + _eq_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 480, 6], + _eo_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 395, 14], + _ed_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 174, 57], + _ee_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 182, 57], + _ef_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 238, 11], + _eb_ = cst_Lwd_seq_rank_node_is_marke, + _ec_ = cst_Lwd_seq_rank_node_is_marke, + _ew_ = [0, cst_vendor_lwd_lib_brr_lwd_elw, 233, 16], + _ev_ = [0, cst_vendor_lwd_lib_brr_lwd_elw, 201, 16], + _eu_ = [0, 0, 0], + _et_ = [0, 0, 0], + _ex_ = cst$4, + _ey_ = "CCResult.Get_error", + _eJ_ = "expected low surrogate escape sequence (u)", + _eK_ = "invalid low surrogate for code point beyond U+FFFF'", + _eL_ = "expected low surrogate escape char (\\)", + _eM_ = "invalid escape in string", + _eI_ = "end of string in escape sequence", + _eD_ = "' ", + _eE_ = " '", + _eH_ = cst$1, + _eF_ = cst$5, + _eG_ = " at offset ", + _eB_ = cst$8, + _eC_ = "invalid hex char in unicode escape: '", + _eA_ = "Jsonxt__Lexxer_utils.Lex_error", + _eN_ = [6, 1], + _eO_ = [6, 0], + _eP_ = cst$8, + _eQ_ = cst_unexpected_character, + _eR_ = cst$8, + _eS_ = cst_unexpected_character, + _eT_ = cst$8, + _eU_ = cst_unexpected_character, + _eV_ = cst$8, + _eW_ = cst_unexpected_character, + _eX_ = [0, cst$1], + _eY_ = cst$8, + _eZ_ = cst_unexpected_character, + _e0_ = "unexpected EOF in comment", + _e1_ = "Jsonxt__Error_info.Json_error_info", + _e2_ = cst_0, + _e3_ = cst_0, + _e4_ = "unexpected '{'", + _e5_ = "unexpected '}'", + _e6_ = "unexpected null value", + _e7_ = "unexpected negative infinity", + _e8_ = "unexpected Not-a-Number", + _e9_ = "unexpected infinity", + _e__ = "unexpected end-of-input", + _e$_ = "unexpected ','", + _fa_ = "unexpected ':'", + _fb_ = "unexpected '['", + _fc_ = "unexpected ']'", + _fd_ = "unexpected '<'", + _fe_ = "unexpected '>'", + _ff_ = "unexpected '('", + _fg_ = "unexpected ')'", + _fh_ = cst$8, + _fi_ = "unexpected string '", + _fj_ = cst$8, + _fk_ = "unexpected large integer '", + _fl_ = cst$8, + _fm_ = "unexpected integer '", + _fn_ = cst$8, + _fo_ = "unexpected float '", + _fp_ = cst$8, + _fq_ = "compliance error '", + _fr_ = cst$8, + _fs_ = cst_true, + _fu_ = cst_false, + _ft_ = "unexpected boolean '", + _fy_ = [1, "Unexpected end-of-input"], + _fw_ = [0, 148000204, "tuple must have at least 2 elements"], + _fx_ = [0, 148000204, "variant must have at least a string"], + _fv_ = "Jsonxt__Parser.Make(Compliance).Parse_error", + _fB_ = cst_b, + _fC_ = cst_t, + _fD_ = cst_n, + _fE_ = cst_f, + _fF_ = cst_r, + _fG_ = cst$9, + _fz_ = cst$0, + _fA_ = cst_u00, + _fI_ = cst_null, + _fJ_ = cst$10, + _fK_ = + [0, + [12, + 123, + [17, + [0, cst_1_0, 1, 0], + [15, [17, [0, cst_1_2, 1, -2], [12, 125, 0]]]]], + "{@;<1 0>%a@;<1 -2>}"], + _fL_ = "{}", + _fM_ = cst$10, + _fN_ = + [0, + [12, + 91, + [17, + [0, cst_1_0, 1, 0], + [18, + [1, [0, [11, cst_hov, 0], cst_hov]], + [15, [17, 0, [17, [0, cst_1_2, 1, -2], [12, 93, 0]]]]]]], + "[@;<1 0>@[%a@]@;<1 -2>]"], + _fO_ = "[]", + _fP_ = "()", + _fQ_ = cst$10, + _fR_ = + [0, + [12, + 40, + [17, [0, "@,", 0, 0], [15, [17, [0, "@;<0 -2>", 0, -2], [12, 41, 0]]]]], + "(@,%a@;<0 -2>)"], + _fS_ = + [0, + [12, + 60, + [18, + [1, [0, [11, cst_hv2, 0], cst_hv2]], + [2, 0, [11, cst$5, [15, [17, 0, [12, 62, 0]]]]]]], + "<@[%s: %a@]>"], + _fT_ = [0, [12, 60, [2, 0, [12, 62, 0]]], "<%s>"], + _fU_ = + [0, + [18, + [1, [0, [11, cst_hv2, 0], cst_hv2]], + [2, 0, [11, cst$5, [15, [17, 0, 0]]]]], + "@[%s: %a@]"], + _fX_ = [0, [15, [17, 2, 0]], "%a@?"], + _fW_ = [0, [15, 0], cst_a], + _fV_ = + [0, + [18, [1, [0, [11, cst_hv2, 0], cst_hv2]], [15, [17, 0, 0]]], + "@[%a@]"], + _fH_ = [0, [2, 0, [17, [0, "@ ", 1, 0], 0]], "%s@ "], + _f0_ = "Expected `String", + _fZ_ = "Expected `Assoc", + _f2_ = "{", + _f3_ = "}", + _f4_ = "Null", + _f5_ = cst_Infinity, + _f6_ = "NAN", + _f7_ = cst_Infinity$0, + _f8_ = "end-of-file", + _f9_ = cst$10, + _f__ = cst$11, + _f$_ = "[", + _ga_ = "]", + _gb_ = cst$7, + _gc_ = cst$6, + _gd_ = "(", + _ge_ = ")", + _gf_ = cst$8, + _gg_ = "input error '", + _gh_ = cst_true, + _gi_ = cst_false, + _gl_ = cst_junk_after_end_of_JSON_val, + _gm_ = [0, 0], + _gn_ = [1, cst_empty_input], + _gj_ = cst_junk_after_end_of_JSON_val, + _gk_ = [1, cst_empty_input], + _gA_ = cst$1, + _gB_ = cst$1, + _gx_ = cst_null, + _gy_ = cst$10, + _gz_ = cst$10, + _gw_ = cst$11, + _gq_ = cst_b, + _gr_ = cst_t, + _gs_ = cst_n, + _gt_ = cst_f, + _gu_ = cst_r, + _gv_ = cst$9, + _go_ = cst$0, + _gp_ = cst_u00, + _gK_ = cst_null, + _gM_ = cst$10, + _gL_ = cst$1, + _gO_ = cst$10, + _gN_ = cst$1, + _gE_ = cst_b, + _gF_ = cst_t, + _gG_ = cst_n, + _gH_ = cst_f, + _gI_ = cst_r, + _gJ_ = cst$9, + _gC_ = cst$0, + _gD_ = cst_u00, + _hg_ = [0, 928231259, cst_Infinity$0], + _hh_ = [0, 928231259, cst_Infinity], + _hf_ = [0, 928231259, cst_NaN], + _he_ = cst_NaN, + _hc_ = cst_Infinity, + _hd_ = cst_Infinity$0, + _hb_ = [0, 0], + _g$_ = cst$12, + _ha_ = cst$12, + _g__ = "floatlit not supported in yojson safe mode", + _g9_ = cst_NaN, + _g7_ = cst_Infinity, + _g8_ = cst_Infinity$0, + _g6_ = [0, 0], + _g5_ = cst_variants_not_supported_in_, + _g4_ = cst_variants_not_supported_in_, + _g3_ = cst_tuples_not_supported_in_yo, + _g2_ = cst_tuples_not_supported_in_yo, + _g1_ = "floatlit not supported in yojson basic mode", + _g0_ = cst_variants_not_supported_in_, + _gZ_ = cst_tuples_not_supported_in_yo, + _gY_ = cst_NaN, + _gW_ = cst_Infinity, + _gX_ = cst_Infinity$0, + _gV_ = [0, 0], + _gU_ = [5, "Integer out of bounds"], + _gQ_ = ", line", + _gR_ = "File ", + _gT_ = "Line", + _gS_ = + [0, + [2, + 0, + [12, + 32, + [4, + 0, + 0, + 0, + [11, + " chars ", + [4, 0, 0, 0, [12, 45, [4, 0, 0, 0, [11, cst$5, 0]]]]]]]], + "%s %d chars %d-%d: "], + _gP_ = "Jsonxt__Yojson.Json_error", + _hi_ = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", + _hj_ = [1, [0, 3854881, "Failed to unmarshal data"]], + _hk_ = "TODO not implemented", + _hr_ = [0, "lib/brr_lwd_ui/utils.ml", 40, 61], + _ho_ = [0, [8, [0, 0, 0], 0, 0, [11, cst_px, 0]], "%fpx"], + _hp_ = [0, [8, [0, 0, 0], 0, 0, [11, cst_rem, 0]], "%frem"], + _hq_ = [0, [8, [0, 0, 0], 0, 0, [11, cst_em, 0]], "%fem"], + _hl_ = cst_px, + _hm_ = cst_rem, + _hn_ = cst_em, + _hw_ = [0, [11, cst_height, [2, 0, 0]], "height: %s"], + _hv_ = cst$13, + _hs_ = [0, cst$13], + _ht_ = "grid-template-columns", + _hu_ = [0, [2, 0, [11, cst$5, [2, 0, [12, 59, 0]]]], "%s: %s;"], + _hx_ = [1, 4.], + _hA_ = [0, 80, "row"], + _hy_ = + [0, + [11, "height: calc(", [2, 0, [11, " * ", [4, 3, 0, 0, [11, ");", 0]]]]], + "height: calc(%s * %i);"], + _hz_ = + [0, + [11, cst_height, [2, 0, [11, " !important;", 0]]], + "height: %s !important;"], + _hB_ = [0, "lwdui-lazy-table", 0], + _hC_ = [0, "lwdui-lazy-table-wrapper", 0], + _hE_ = [1, -358247754], + _hD_ = + [0, + [11, "Multiple persitent var are using the key ", [2, 0, 0]], + "Multiple persitent var are using the key %s"], + _hH_ = cst_submit, + _hG_ = "password", + _hF_ = cst_text, + _hK_ = [0, 80, cst_text], + _hI_ = [0, [2, 0, [11, "--id", 0]], "%s--id"], + _hJ_ = [0, [2, 0, 0], cst_s], + _hN_ = [0, 80, "checkbox"], + _hL_ = + [0, + [2, 0, [12, 45, [4, 3, 0, 0, [12, 45, [4, 3, 0, 0, [11, "-id", 0]]]]]], + "%s-%i-%i-id"], + _hM_ = + [0, + [2, 0, [12, 45, [4, 3, 0, 0, [12, 45, [4, 3, 0, 0, 0]]]]], + "%s-%i-%i"], + _hO_ = [0, 80, cst_button], + _hS_ = "list_of_yojson: list needed", + _hR_ = "int_of_yojson: integer needed", + _hQ_ = "string_of_yojson: string needed", + _hP_ = "Ppx_yojson_conv_lib__Yojson_conv.Of_yojson_error", + _h1_ = cst$13, + _h3_ = "_of_yojson: list instead of atom for record expected", + _h2_ = + [0, + [2, + 0, + [11, + "_of_yojson: the following record elements were undefined: ", + [2, 0, 0]]], + "%s_of_yojson: the following record elements were undefined: %s"], + _h0_ = "extra fields", + _hZ_ = "duplicate fields", + _hX_ = cst$13, + _hY_ = + [0, + [2, 0, [11, "_of_yojson: ", [2, 0, [11, cst$5, [2, 0, 0]]]]], + "%s_of_yojson: %s: %s"], + _hW_ = "_of_yojson: unexpected variant constructor", + _hV_ = "_of_yojson: expected a variant type, saw an empty list", + _hU_ = "_of_yojson: expected a variant type, saw a nested list", + _hT_ = "_of_yojson: this constructor does not take arguments", + _jk_ = "An error occured while decoding response: ", + _jg_ = [0, [11, ", Token=", [3, 0, 0]], ", Token=%S"], + _jj_ = cst$1, + _jh_ = "abcdef", + _ji_ = + [0, + [11, + 'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="', + [2, 0, [11, '", Version="0.1"', [2, 0, 0]]]], + 'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="%s", Version="0.1"%s'], + _jd_ = cst_ItemId, + _je_ = cst_Locations, + _jf_ = cst_Name, + _ja_ = "item_id", + _jb_ = "locations", + _jc_ = cst_name, + _i$_ = cst_CollectionType, + _i2_ = cst_Type, + _i3_ = cst_ImageBlurHashes, + _i4_ = cst_ServerId, + _i5_ = cst_ParentId, + _i6_ = cst_AlbumId, + _i7_ = cst_Path, + _i8_ = cst_Id, + _i9_ = cst_SortName, + _i__ = cst_Name, + _iX_ = "type_", + _iY_ = "image_blur_hashes", + _iZ_ = cst_server_id, + _i0_ = cst_id, + _i1_ = cst_name, + _iW_ = [0, "lib/data_source/jellyfin_api.ml", 193, 64], + _il_ = [0, 848054398, [0, [0, -976970511, cst_AggregateFolder], 0]], + _im_ = [0, 848054398, [0, [0, -976970511, cst_Audio], 0]], + _in_ = [0, 848054398, [0, [0, -976970511, cst_AudioBook], 0]], + _io_ = [0, 848054398, [0, [0, -976970511, cst_BasePluginFolder], 0]], + _ip_ = [0, 848054398, [0, [0, -976970511, cst_Book], 0]], + _iq_ = [0, 848054398, [0, [0, -976970511, cst_BoxSet], 0]], + _ir_ = [0, 848054398, [0, [0, -976970511, cst_Channel], 0]], + _is_ = [0, 848054398, [0, [0, -976970511, cst_ChannelFolderItem], 0]], + _it_ = [0, 848054398, [0, [0, -976970511, cst_CollectionFolder], 0]], + _iu_ = [0, 848054398, [0, [0, -976970511, cst_Episode], 0]], + _iv_ = [0, 848054398, [0, [0, -976970511, cst_Folder], 0]], + _iw_ = [0, 848054398, [0, [0, -976970511, cst_Genre], 0]], + _ix_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvChannel], 0]], + _iy_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvProgram], 0]], + _iz_ = [0, 848054398, [0, [0, -976970511, cst_ManualPlaylistsFolder], 0]], + _iA_ = [0, 848054398, [0, [0, -976970511, cst_Movie], 0]], + _iB_ = [0, 848054398, [0, [0, -976970511, cst_MusicAlbum], 0]], + _iC_ = [0, 848054398, [0, [0, -976970511, cst_MusicArtist], 0]], + _iD_ = [0, 848054398, [0, [0, -976970511, cst_MusicGenre], 0]], + _iE_ = [0, 848054398, [0, [0, -976970511, cst_MusicVideo], 0]], + _iF_ = [0, 848054398, [0, [0, -976970511, cst_Person], 0]], + _iG_ = [0, 848054398, [0, [0, -976970511, cst_Photo], 0]], + _iH_ = [0, 848054398, [0, [0, -976970511, cst_PhotoAlbum], 0]], + _iI_ = [0, 848054398, [0, [0, -976970511, cst_Playlist], 0]], + _iJ_ = [0, 848054398, [0, [0, -976970511, cst_PlaylistsFolder], 0]], + _iK_ = [0, 848054398, [0, [0, -976970511, cst_Program], 0]], + _iL_ = [0, 848054398, [0, [0, -976970511, cst_Recording], 0]], + _iM_ = [0, 848054398, [0, [0, -976970511, cst_Season], 0]], + _iN_ = [0, 848054398, [0, [0, -976970511, cst_Series], 0]], + _iO_ = [0, 848054398, [0, [0, -976970511, cst_Studio], 0]], + _iP_ = [0, 848054398, [0, [0, -976970511, cst_Trailer], 0]], + _iQ_ = [0, 848054398, [0, [0, -976970511, cst_TvChannel], 0]], + _iR_ = [0, 848054398, [0, [0, -976970511, cst_TvProgram], 0]], + _iS_ = [0, 848054398, [0, [0, -976970511, cst_UserRootFolder], 0]], + _iT_ = [0, 848054398, [0, [0, -976970511, cst_UserView], 0]], + _iU_ = [0, 848054398, [0, [0, -976970511, cst_Video], 0]], + _iV_ = [0, 848054398, [0, [0, -976970511, cst_Year], 0]], + _ik_ = cst_Primary, + _ij_ = "/Users/AuthenticateByName", + _ig_ = cst_ServerId, + _ih_ = cst_AccessToken, + _ii_ = cst_User, + _id_ = cst_server_id, + _ie_ = "access_token", + _if_ = "user", + _ib_ = cst_Pw, + _ic_ = cst_Username, + _h$_ = "pw", + _ia_ = "username", + _h7_ = cst_Id, + _h8_ = cst_ServerName, + _h9_ = cst_ServerId, + _h__ = cst_Name, + _h4_ = cst_id, + _h5_ = cst_server_id, + _h6_ = cst_name, + _jm_ = [0, 0, 1], + _jK_ = [0, cst_lib_db_stores_ml, 119, 13], + _jJ_ = [0, cst_lib_db_stores_ml, 110, 19], + _jG_ = [0, cst_lib_db_stores_ml, 102, 13], + _jF_ = [0, cst_lib_db_stores_ml, 96, 19], + _jB_ = [0, cst_lib_db_stores_ml, 66, 13], + _jz_ = cst_item, + _jA_ = cst_sorts, + _jx_ = cst_item, + _jy_ = cst_sorts, + _ju_ = cst_sort_name, + _jv_ = cst_views, + _jw_ = cst_date_added, + _jr_ = cst_sort_name, + _js_ = cst_views, + _jt_ = cst_date_added, + _jp_ = cst_item, + _jq_ = cst_id, + _jn_ = cst_item, + _jo_ = cst_id, + _jC_ = [0, cst_sorts_views], + _jD_ = [0, "item.Name"], + _jE_ = [0, cst_item_Id], + _jH_ = [0, cst_sorts_views], + _jI_ = [0, "item.Type"], + _jL_ = [0, "sorts.sort_name"], + _jM_ = [0, "item.CollectionType"], + _jZ_ = "to", + _j0_ = "Upgrading indexed_db schema from version", + _j1_ = [0, 0], + _j2_ = [0, 0], + _j3_ = [0, 0], + _j4_ = "Stores created:", + _kf_ = "Synchronized", + _kd_ = + [0, + [11, "Sync in progress: ", [4, 3, 0, 0, [12, 47, [4, 3, 0, 0, 0]]]], + "Sync in progress: %i/%i"], + _ke_ = "Desynchronized", + _kb_ = cst_Form_submitted, + _kc_ = cst_Form_submitted, + _j7_ = "ui_servers", + _j8_ = [0, "http://localhost:8096"], + _j9_ = [0, 1], + _j__ = [0, 1], + _j$_ = [0, 1], + _ka_ = [0, 80, "Connect"], + _kt_ = cst_Nothing_playing, + _kp_ = + [0, + [2, + 0, + [11, cst_Items, [2, 0, [11, cst_Images_Primary_width_500_f, 0]]]], + cst_s_Items_s_Images_Primary_w], + _kr_ = cst_track_png, + _kq_ = + [0, + [11, "background-image: url(", [3, 0, [12, 41, 0]]], + "background-image: url(%S)"], + _kn_ = + "A playback error happened. This is probably due to a codec unsupported by the browser.", + _ko_ = [0, 80, "NEXT"], + _ks_ = [0, 80, "now-playing-cover"], + _ku_ = [0, 80, cst_box], + _kv_ = [0, 80, "now-playing-display"], + _kw_ = [0, 80, "player-wrapper"], + _kx_ = [0, 80, cst_box], + _kj_ = "Now playing:", + _kk_ = + [0, + [2, + 0, + [11, cst_Items, [2, 0, [11, cst_Images_Primary_width_500_f, 0]]]], + cst_s_Items_s_Images_Primary_w], + _kl_ = "image/jpeg", + _km_ = "500x500", + _ki_ = + [0, + [2, + 0, + [11, + "/Audio/", + [2, + 0, + [11, + "/universal?api_key=", + [2, + 0, + [11, + "&audioCodec=aac&container=opus,mp3,aac,m4a,m4b,flac,wav,ogg&transcodingContainer=ts&transcodingProtocol=hls", + 0]]]]]], + "%s/Audio/%s/universal?api_key=%s&audioCodec=aac&container=opus,mp3,aac,m4a,m4b,flac,wav,ogg&transcodingContainer=ts&transcodingProtocol=hls"], + _kz_ = [0, "off", 0], + _kA_ = [0, "on", 0], + _ky_ = [0, cst_button, 0], + _kB_ = [0, "draggable-table", 0], + _kN_ = "|>", + _kM_ = + [0, + [2, 0, [11, cst_Items, [2, 0, [11, "/Images/Primary?width=50", 0]]]], + "%s/Items/%s/Images/Primary?width=50"], + _kL_ = "server-error.png", + _kO_ = [2, 4.], + _kC_ = cst_Title, + _kD_ = "1fr", + _kE_ = cst_Title, + _kF_ = cst_Cover, + _kG_ = cst_5rem, + _kH_ = cst_Cover, + _kI_ = "#", + _kJ_ = cst_5rem, + _kK_ = "Order", + _kZ_ = "Persist ?", + _k0_ = "tracks", + _k1_ = [0, 1], + _kX_ = cst_Nothing_playing, + _kU_ = '""', + _kV_ = "Updating main view:", + _kW_ = [0, 0], + _kQ_ = cst_click, + _kP_ = "toto1", + _kR_ = "Welcome to OCAMIX", + _kS_ = cst_pouet, + _kT_ = cst_pouet, + _kY_ = [0, "main-layout"]; + function erase_rel(param){ + if(typeof param === "number") return 0; + switch(param[0]){ + case 0: + var rest = param[1]; return [0, erase_rel(rest)]; + case 1: + var rest$0 = param[1]; return [1, erase_rel(rest$0)]; + case 2: + var rest$1 = param[1]; return [2, erase_rel(rest$1)]; + case 3: + var rest$2 = param[1]; return [3, erase_rel(rest$2)]; + case 4: + var rest$3 = param[1]; return [4, erase_rel(rest$3)]; + case 5: + var rest$4 = param[1]; return [5, erase_rel(rest$4)]; + case 6: + var rest$5 = param[1]; return [6, erase_rel(rest$5)]; + case 7: + var rest$6 = param[1]; return [7, erase_rel(rest$6)]; + case 8: + var rest$7 = param[2], ty = param[1]; + return [8, ty, erase_rel(rest$7)]; + case 9: + var rest$8 = param[3], ty1 = param[1]; + return [9, ty1, ty1, erase_rel(rest$8)]; + case 10: + var rest$9 = param[1]; return [10, erase_rel(rest$9)]; + case 11: + var rest$10 = param[1]; return [11, erase_rel(rest$10)]; + case 12: + var rest$11 = param[1]; return [12, erase_rel(rest$11)]; + case 13: + var rest$12 = param[1]; return [13, erase_rel(rest$12)]; + default: var rest$13 = param[1]; return [14, erase_rel(rest$13)]; + } + } + function concat_fmtty(fmtty1, fmtty2){ + if(typeof fmtty1 === "number") return fmtty2; + switch(fmtty1[0]){ + case 0: + var rest = fmtty1[1]; return [0, concat_fmtty(rest, fmtty2)]; + case 1: + var rest$0 = fmtty1[1]; return [1, concat_fmtty(rest$0, fmtty2)]; + case 2: + var rest$1 = fmtty1[1]; return [2, concat_fmtty(rest$1, fmtty2)]; + case 3: + var rest$2 = fmtty1[1]; return [3, concat_fmtty(rest$2, fmtty2)]; + case 4: + var rest$3 = fmtty1[1]; return [4, concat_fmtty(rest$3, fmtty2)]; + case 5: + var rest$4 = fmtty1[1]; return [5, concat_fmtty(rest$4, fmtty2)]; + case 6: + var rest$5 = fmtty1[1]; return [6, concat_fmtty(rest$5, fmtty2)]; + case 7: + var rest$6 = fmtty1[1]; return [7, concat_fmtty(rest$6, fmtty2)]; + case 8: + var rest$7 = fmtty1[2], ty = fmtty1[1]; + return [8, ty, concat_fmtty(rest$7, fmtty2)]; + case 9: + var rest$8 = fmtty1[3], ty2 = fmtty1[2], ty1 = fmtty1[1]; + return [9, ty1, ty2, concat_fmtty(rest$8, fmtty2)]; + case 10: + var rest$9 = fmtty1[1]; return [10, concat_fmtty(rest$9, fmtty2)]; + case 11: + var rest$10 = fmtty1[1]; return [11, concat_fmtty(rest$10, fmtty2)]; + case 12: + var rest$11 = fmtty1[1]; return [12, concat_fmtty(rest$11, fmtty2)]; + case 13: + var rest$12 = fmtty1[1]; return [13, concat_fmtty(rest$12, fmtty2)]; + default: + var rest$13 = fmtty1[1]; return [14, concat_fmtty(rest$13, fmtty2)]; + } + } + function concat_fmt(fmt1, fmt2){ + if(typeof fmt1 === "number") return fmt2; + switch(fmt1[0]){ + case 0: + var rest = fmt1[1]; return [0, concat_fmt(rest, fmt2)]; + case 1: + var rest$0 = fmt1[1]; return [1, concat_fmt(rest$0, fmt2)]; + case 2: + var rest$1 = fmt1[2], pad = fmt1[1]; + return [2, pad, concat_fmt(rest$1, fmt2)]; + case 3: + var rest$2 = fmt1[2], pad$0 = fmt1[1]; + return [3, pad$0, concat_fmt(rest$2, fmt2)]; + case 4: + var rest$3 = fmt1[4], prec = fmt1[3], pad$1 = fmt1[2], iconv = fmt1[1]; + return [4, iconv, pad$1, prec, concat_fmt(rest$3, fmt2)]; + case 5: + var + rest$4 = fmt1[4], + prec$0 = fmt1[3], + pad$2 = fmt1[2], + iconv$0 = fmt1[1]; + return [5, iconv$0, pad$2, prec$0, concat_fmt(rest$4, fmt2)]; + case 6: + var + rest$5 = fmt1[4], + prec$1 = fmt1[3], + pad$3 = fmt1[2], + iconv$1 = fmt1[1]; + return [6, iconv$1, pad$3, prec$1, concat_fmt(rest$5, fmt2)]; + case 7: + var + rest$6 = fmt1[4], + prec$2 = fmt1[3], + pad$4 = fmt1[2], + iconv$2 = fmt1[1]; + return [7, iconv$2, pad$4, prec$2, concat_fmt(rest$6, fmt2)]; + case 8: + var + rest$7 = fmt1[4], + prec$3 = fmt1[3], + pad$5 = fmt1[2], + fconv = fmt1[1]; + return [8, fconv, pad$5, prec$3, concat_fmt(rest$7, fmt2)]; + case 9: + var rest$8 = fmt1[2], pad$6 = fmt1[1]; + return [9, pad$6, concat_fmt(rest$8, fmt2)]; + case 10: + var rest$9 = fmt1[1]; return [10, concat_fmt(rest$9, fmt2)]; + case 11: + var rest$10 = fmt1[2], str = fmt1[1]; + return [11, str, concat_fmt(rest$10, fmt2)]; + case 12: + var rest$11 = fmt1[2], chr = fmt1[1]; + return [12, chr, concat_fmt(rest$11, fmt2)]; + case 13: + var rest$12 = fmt1[3], fmtty = fmt1[2], pad$7 = fmt1[1]; + return [13, pad$7, fmtty, concat_fmt(rest$12, fmt2)]; + case 14: + var rest$13 = fmt1[3], fmtty$0 = fmt1[2], pad$8 = fmt1[1]; + return [14, pad$8, fmtty$0, concat_fmt(rest$13, fmt2)]; + case 15: + var rest$14 = fmt1[1]; return [15, concat_fmt(rest$14, fmt2)]; + case 16: + var rest$15 = fmt1[1]; return [16, concat_fmt(rest$15, fmt2)]; + case 17: + var rest$16 = fmt1[2], fmting_lit = fmt1[1]; + return [17, fmting_lit, concat_fmt(rest$16, fmt2)]; + case 18: + var rest$17 = fmt1[2], fmting_gen = fmt1[1]; + return [18, fmting_gen, concat_fmt(rest$17, fmt2)]; + case 19: + var rest$18 = fmt1[1]; return [19, concat_fmt(rest$18, fmt2)]; + case 20: + var rest$19 = fmt1[3], char_set = fmt1[2], width_opt = fmt1[1]; + return [20, width_opt, char_set, concat_fmt(rest$19, fmt2)]; + case 21: + var rest$20 = fmt1[2], counter = fmt1[1]; + return [21, counter, concat_fmt(rest$20, fmt2)]; + case 22: + var rest$21 = fmt1[1]; return [22, concat_fmt(rest$21, fmt2)]; + case 23: + var rest$22 = fmt1[2], ign = fmt1[1]; + return [23, ign, concat_fmt(rest$22, fmt2)]; + default: + var rest$23 = fmt1[3], f = fmt1[2], arity = fmt1[1]; + return [24, arity, f, concat_fmt(rest$23, fmt2)]; + } + } + function make(v){return [0, v];} + function get(r){return r[1];} + function compare_and_set(r, seen, v){ + var cur = r[1]; + return cur === seen ? (r[1] = v, 1) : 0; + } + function failwith(s){ + throw caml_maybe_attach_backtrace([0, Failure, s], 1); + } + function invalid_arg(s){ + throw caml_maybe_attach_backtrace([0, Invalid_argument, s], 1); + } + function max(x, y){return caml_greaterequal(x, y) ? x : y;} + function abs(x){return 0 <= x ? x : - x | 0;} + function lnot(x){return x ^ -1;} + var max_int = 2147483647; + function symbol(s1, s2){ + var + l1 = caml_ml_string_length(s1), + l2 = caml_ml_string_length(s2), + s = caml_create_bytes(l1 + l2 | 0); + caml_blit_string(s1, 0, s, 0, l1); + caml_blit_string(s2, 0, s, l1, l2); + return caml_string_of_bytes(s); + } + function char_of_int(n){ + if(0 <= n && 255 >= n) return n; + return invalid_arg(_a_); + } + function string_of_bool(b){return b ? _b_ : _c_;} + function string_of_int(n){return "" + n;} + function valid_float_lexem(s){ + var l = caml_ml_string_length(s); + function loop(i){ + var i$0 = i; + for(;;){ + if(l <= i$0) return symbol(s, _d_); + var match = caml_string_get(s, i$0); + a: + { + if(48 <= match){if(58 > match) break a;} else if(45 === match) break a; + return s; + } + var i$1 = i$0 + 1 | 0, i$0 = i$1; + } + } + return loop(0); + } + function string_of_float(f){ + return valid_float_lexem(caml_format_float("%.12g", f)); + } + function symbol$0(l1, l2){ + if(! l1) return l2; + var tl = l1[2], hd = l1[1]; + return [0, hd, symbol$0(tl, l2)]; + } + caml_ml_open_descriptor_in(0); + var + stdout = caml_ml_open_descriptor_out(1), + stderr = caml_ml_open_descriptor_out(2); + function open_out_gen(mode, perm, name){ + var c = caml_ml_open_descriptor_out(caml_sys_open(name, mode, perm)); + caml_ml_set_channel_name(c, name); + return c; + } + function open_out(name){return open_out_gen(_e_, 438, name);} + function flush_all(param){ + function iter(param){ + var param$0 = param; + for(;;){ + if(! param$0) return 0; + var l = param$0[2], a = param$0[1]; + try{caml_ml_flush(a);} + catch(_yv_){ + var _yu_ = caml_wrap_exception(_yv_); + if(_yu_[1] !== Sys_error) throw caml_maybe_attach_backtrace(_yu_, 0); + } + var param$0 = l; + } + } + return iter(caml_ml_out_channels_list(0)); + } + function output_string(oc, s){ + return caml_ml_output(oc, s, 0, caml_ml_string_length(s)); + } + function output_substring(oc, s, ofs, len){ + if(0 <= ofs && 0 <= len && (caml_ml_string_length(s) - len | 0) >= ofs) + return caml_ml_output(oc, s, ofs, len); + return invalid_arg(_f_); + } + function close_out(oc){ + caml_ml_flush(oc); + caml_ml_close_channel(oc); + return; + } + function open_in_gen(mode, perm, name){ + var c = caml_ml_open_descriptor_in(caml_sys_open(name, mode, perm)); + caml_ml_set_channel_name(c, name); + return c; + } + function open_in(name){return open_in_gen(_g_, 0, name);} + function input(ic, s, ofs, len){ + if(0 <= ofs && 0 <= len && (caml_ml_bytes_length(s) - len | 0) >= ofs) + return caml_ml_input(ic, s, ofs, len); + return invalid_arg(_h_); + } + function prerr_endline(s){ + output_string(stderr, s); + caml_ml_output_char(stderr, 10); + return caml_ml_flush(stderr); + } + var exit_function = make(flush_all); + function at_exit(f){ + for(;;){ + var f_yet_to_run = make(1), old_exit = get(exit_function); + let f_yet_to_run$0 = f_yet_to_run, old_exit$0 = old_exit; + var + new_exit = + function(param){ + if(compare_and_set(f_yet_to_run$0, 1, 0)) caml_call1(f, 0); + return caml_call1(old_exit$0, 0); + }, + success = compare_and_set(exit_function, old_exit, new_exit), + _yt_ = 1 - success; + if(! _yt_) return _yt_; + } + } + function do_at_exit(param){return caml_call1(get(exit_function), 0);} + caml_register_named_value("Pervasives.do_at_exit", do_at_exit); + function _i_(_ys_){return caml_ml_close_channel(_ys_);} + function _j_(_yr_, _yq_){return caml_ml_output_char(_yr_, _yq_);} + function _k_(_yp_){return caml_ml_flush(_yp_);} + var + max_array_length = caml_sys_const_max_wosize(0), + max_string_length = (4 * max_array_length | 0) - 1 | 0; + function is_block(a){return 1 - (typeof a === "number" ? 1 : 0);} + var Undefined = [248, _l_, caml_fresh_oo_id(0)]; + function raise_undefined(param){ + throw caml_maybe_attach_backtrace(Undefined, 1); + } + function force_lazy_block(blk){ + var closure = blk[1]; + blk[1] = raise_undefined; + try{ + var result = caml_call1(closure, 0); + caml_obj_make_forward(blk, result); + return result; + } + catch(e$0){ + var e = caml_wrap_exception(e$0); + blk[1] = function(param){throw caml_maybe_attach_backtrace(e, 0);}; + throw caml_maybe_attach_backtrace(e, 0); + } + } + function value(o, default$0){ + if(! o) return default$0; + var v = o[1]; + return v; + } + function get$0(param){ + if(! param) return invalid_arg(_m_); + var v = param[1]; + return v; + } + function map(f, o){ + if(! o) return 0; + var v = o[1]; + return [0, caml_call1(f, v)]; + } + function is_some(param){return param ? 1 : 0;} + function get_ok(param){ + if(0 !== param[0]) return invalid_arg(_n_); + var v = param[1]; + return v; + } + function map$0(f, e){ + if(0 !== e[0]) return e; + var v = e[1]; + return [0, caml_call1(f, v)]; + } + function of_int_exn(n){ + if(0 <= n && 255 >= n) return n; + return invalid_arg(_o_); + } + function escaped(c){ + a: + { + if(40 <= c){ + if(92 === c) return _p_; + if(127 > c) break a; + } + else{ + if(32 <= c){if(39 <= c) return _q_; break a;} + if(14 > c) + switch(c){ + case 8: + return _r_; + case 9: + return _s_; + case 10: + return _t_; + case 13: + return _u_; + } + } + var s = caml_create_bytes(4); + caml_bytes_unsafe_set(s, 0, 92); + caml_bytes_unsafe_set(s, 1, 48 + (c / 100 | 0) | 0); + caml_bytes_unsafe_set(s, 2, 48 + ((c / 10 | 0) % 10 | 0) | 0); + caml_bytes_unsafe_set(s, 3, 48 + (c % 10 | 0) | 0); + return caml_string_of_bytes(s); + } + var s$0 = caml_create_bytes(1); + caml_bytes_unsafe_set(s$0, 0, c); + return caml_string_of_bytes(s$0); + } + function uppercase_ascii(c){return 25 < c - 97 >>> 0 ? c : c - 32 | 0;} + function length_aux(len, param){ + var len$0 = len, param$0 = param; + for(;;){ + if(! param$0) return len$0; + var l = param$0[2], len$1 = len$0 + 1 | 0, len$0 = len$1, param$0 = l; + } + } + function length(l){return length_aux(0, l);} + function cons(a, l){return [0, a, l];} + function hd(param){ + if(! param) return failwith(_v_); + var a = param[1]; + return a; + } + function rev_append(l1, l2){ + var l1$0 = l1, l2$0 = l2; + for(;;){ + if(! l1$0) return l2$0; + var + l1$1 = l1$0[2], + a = l1$0[1], + l2$1 = [0, a, l2$0], + l1$0 = l1$1, + l2$0 = l2$1; + } + } + function rev(l){return rev_append(l, 0);} + function init_tailrec_aux(acc, i, n, f){ + var acc$0 = acc, i$0 = i; + for(;;){ + if(n <= i$0) return acc$0; + var + i$1 = i$0 + 1 | 0, + acc$1 = [0, caml_call1(f, i$0), acc$0], + acc$0 = acc$1, + i$0 = i$1; + } + } + function init_aux(i, n, f){ + if(n <= i) return 0; + var r = caml_call1(f, i); + return [0, r, init_aux(i + 1 | 0, n, f)]; + } + function init(len, f){ + return 0 <= len + ? 50 + < len + ? rev(init_tailrec_aux(0, 0, len, f)) + : init_aux(0, len, f) + : invalid_arg(_w_); + } + function flatten(param){ + if(! param) return 0; + var r = param[2], l = param[1]; + return symbol$0(l, flatten(r)); + } + function map$1(f, param){ + if(! param) return 0; + var l = param[2], a = param[1], r = caml_call1(f, a); + return [0, r, map$1(f, l)]; + } + function rev_map(f, l){ + function rmap_f(accu, param){ + var accu$0 = accu, param$0 = param; + for(;;){ + if(! param$0) return accu$0; + var + l = param$0[2], + a = param$0[1], + accu$1 = [0, caml_call1(f, a), accu$0], + accu$0 = accu$1, + param$0 = l; + } + } + return rmap_f(0, l); + } + function iter(f, param){ + var param$0 = param; + for(;;){ + if(! param$0) return 0; + var l = param$0[2], a = param$0[1]; + caml_call1(f, a); + var param$0 = l; + } + } + function fold_left(f, accu, l){ + var accu$0 = accu, l$0 = l; + for(;;){ + if(! l$0) return accu$0; + var + l$1 = l$0[2], + a = l$0[1], + accu$1 = caml_call2(f, accu$0, a), + accu$0 = accu$1, + l$0 = l$1; + } + } + function for_all(p, param){ + var param$0 = param; + for(;;){ + if(! param$0) return 1; + var l = param$0[2], a = param$0[1], _yo_ = caml_call1(p, a); + if(! _yo_) return _yo_; + var param$0 = l; + } + } + function assoc_opt(x, param){ + var param$0 = param; + for(;;){ + if(! param$0) return 0; + var l = param$0[2], match = param$0[1], b = match[2], a = match[1]; + if(0 === caml_compare(a, x)) return [0, b]; + var param$0 = l; + } + } + function assq(x, param){ + var param$0 = param; + for(;;){ + if(! param$0) throw caml_maybe_attach_backtrace(Not_found, 1); + var l = param$0[2], match = param$0[1], b = match[2], a = match[1]; + if(a === x) return b; + var param$0 = l; + } + } + function find_all(p){ + function find(accu, param){ + var accu$0 = accu, param$0 = param; + for(;;){ + if(! param$0) return rev(accu$0); + var l = param$0[2], x = param$0[1]; + if(caml_call1(p, x)) + var accu$1 = [0, x, accu$0], accu$0 = accu$1, param$0 = l; + else + var param$0 = l; + } + } + var _ym_ = 0; + return function(_yn_){return find(_ym_, _yn_);}; + } + function filter_map(f){ + function aux(accu, param){ + var accu$0 = accu, param$0 = param; + for(;;){ + if(! param$0) return rev(accu$0); + var l = param$0[2], x = param$0[1], match = caml_call1(f, x); + if(match) + var + v = match[1], + accu$1 = [0, v, accu$0], + accu$0 = accu$1, + param$0 = l; + else + var param$0 = l; + } + } + var _yk_ = 0; + return function(_yl_){return aux(_yk_, _yl_);}; + } + function partition(p, l){ + function part(yes, no, param){ + var yes$0 = yes, no$0 = no, param$0 = param; + for(;;){ + if(! param$0){var _yj_ = rev(no$0); return [0, rev(yes$0), _yj_];} + var l = param$0[2], x = param$0[1]; + if(caml_call1(p, x)) + var yes$1 = [0, x, yes$0], yes$0 = yes$1, param$0 = l; + else + var no$1 = [0, x, no$0], no$0 = no$1, param$0 = l; + } + } + return part(0, 0, l); + } + function sort_uniq(cmp, l){ + function rev_merge(l1, l2, accu){ + var l1$0 = l1, l2$0 = l2, accu$0 = accu; + for(;;){ + if(! l1$0) return rev_append(l2$0, accu$0); + if(! l2$0) return rev_append(l1$0, accu$0); + var + t2 = l2$0[2], + h2 = l2$0[1], + t1 = l1$0[2], + h1 = l1$0[1], + c = caml_call2(cmp, h1, h2); + if(0 === c) + var accu$1 = [0, h1, accu$0], l1$0 = t1, l2$0 = t2, accu$0 = accu$1; + else if(0 <= c) + var accu$2 = [0, h2, accu$0], l2$0 = t2, accu$0 = accu$2; + else + var accu$3 = [0, h1, accu$0], l1$0 = t1, accu$0 = accu$3; + } + } + function rev_merge_rev(l1, l2, accu){ + var l1$0 = l1, l2$0 = l2, accu$0 = accu; + for(;;){ + if(! l1$0) return rev_append(l2$0, accu$0); + if(! l2$0) return rev_append(l1$0, accu$0); + var + t2 = l2$0[2], + h2 = l2$0[1], + t1 = l1$0[2], + h1 = l1$0[1], + c = caml_call2(cmp, h1, h2); + if(0 === c) + var accu$1 = [0, h1, accu$0], l1$0 = t1, l2$0 = t2, accu$0 = accu$1; + else if(0 < c) + var accu$2 = [0, h1, accu$0], l1$0 = t1, accu$0 = accu$2; + else + var accu$3 = [0, h2, accu$0], l2$0 = t2, accu$0 = accu$3; + } + } + function sort(n, l){ + if(2 === n){ + if(l){ + var match = l[2]; + if(match){ + var + tl = match[2], + x2 = match[1], + x1 = l[1], + c = caml_call2(cmp, x1, x2), + s = + 0 === c + ? [0, x1, 0] + : 0 <= c ? [0, x2, [0, x1, 0]] : [0, x1, [0, x2, 0]]; + return [0, s, tl]; + } + } + } + else if(3 === n && l){ + var _yd_ = l[2]; + if(_yd_){ + var match$2 = _yd_[2]; + if(match$2){ + var + tl$1 = match$2[2], + x3 = match$2[1], + x2$0 = _yd_[1], + x1$0 = l[1], + c$0 = caml_call2(cmp, x1$0, x2$0); + if(0 === c$0) + var + c$1 = caml_call2(cmp, x2$0, x3), + _ye_ = + 0 === c$1 + ? [0, x2$0, 0] + : 0 <= c$1 ? [0, x3, [0, x2$0, 0]] : [0, x2$0, [0, x3, 0]], + s$0 = _ye_; + else if(0 <= c$0){ + var c$2 = caml_call2(cmp, x1$0, x3); + if(0 === c$2) + var _yf_ = [0, x2$0, [0, x1$0, 0]]; + else if(0 <= c$2) + var + c$3 = caml_call2(cmp, x2$0, x3), + _yg_ = + 0 === c$3 + ? [0, x2$0, [0, x1$0, 0]] + : 0 + <= c$3 + ? [0, x3, [0, x2$0, [0, x1$0, 0]]] + : [0, x2$0, [0, x3, [0, x1$0, 0]]], + _yf_ = _yg_; + else + var _yf_ = [0, x2$0, [0, x1$0, [0, x3, 0]]]; + var s$0 = _yf_; + } + else{ + var c$4 = caml_call2(cmp, x2$0, x3); + if(0 === c$4) + var _yh_ = [0, x1$0, [0, x2$0, 0]]; + else if(0 <= c$4) + var + c$5 = caml_call2(cmp, x1$0, x3), + _yi_ = + 0 === c$5 + ? [0, x1$0, [0, x2$0, 0]] + : 0 + <= c$5 + ? [0, x3, [0, x1$0, [0, x2$0, 0]]] + : [0, x1$0, [0, x3, [0, x2$0, 0]]], + _yh_ = _yi_; + else + var _yh_ = [0, x1$0, [0, x2$0, [0, x3, 0]]]; + var s$0 = _yh_; + } + return [0, s$0, tl$1]; + } + } + } + var + n1 = n >> 1, + n2 = n - n1 | 0, + match$0 = rev_sort(n1, l), + l2 = match$0[2], + s1 = match$0[1], + match$1 = rev_sort(n2, l2), + tl$0 = match$1[2], + s2 = match$1[1]; + return [0, rev_merge_rev(s1, s2, 0), tl$0]; + } + function rev_sort(n, l){ + if(2 === n){ + if(l){ + var match = l[2]; + if(match){ + var + tl = match[2], + x2 = match[1], + x1 = l[1], + c = caml_call2(cmp, x1, x2), + s = + 0 === c + ? [0, x1, 0] + : 0 < c ? [0, x1, [0, x2, 0]] : [0, x2, [0, x1, 0]]; + return [0, s, tl]; + } + } + } + else if(3 === n && l){ + var _x9_ = l[2]; + if(_x9_){ + var match$2 = _x9_[2]; + if(match$2){ + var + tl$1 = match$2[2], + x3 = match$2[1], + x2$0 = _x9_[1], + x1$0 = l[1], + c$0 = caml_call2(cmp, x1$0, x2$0); + if(0 === c$0) + var + c$1 = caml_call2(cmp, x2$0, x3), + _x__ = + 0 === c$1 + ? [0, x2$0, 0] + : 0 < c$1 ? [0, x2$0, [0, x3, 0]] : [0, x3, [0, x2$0, 0]], + s$0 = _x__; + else if(0 < c$0){ + var c$2 = caml_call2(cmp, x2$0, x3); + if(0 === c$2) + var _x$_ = [0, x1$0, [0, x2$0, 0]]; + else if(0 < c$2) + var _x$_ = [0, x1$0, [0, x2$0, [0, x3, 0]]]; + else + var + c$3 = caml_call2(cmp, x1$0, x3), + _ya_ = + 0 === c$3 + ? [0, x1$0, [0, x2$0, 0]] + : 0 + < c$3 + ? [0, x1$0, [0, x3, [0, x2$0, 0]]] + : [0, x3, [0, x1$0, [0, x2$0, 0]]], + _x$_ = _ya_; + var s$0 = _x$_; + } + else{ + var c$4 = caml_call2(cmp, x1$0, x3); + if(0 === c$4) + var _yb_ = [0, x2$0, [0, x1$0, 0]]; + else if(0 < c$4) + var _yb_ = [0, x2$0, [0, x1$0, [0, x3, 0]]]; + else + var + c$5 = caml_call2(cmp, x2$0, x3), + _yc_ = + 0 === c$5 + ? [0, x2$0, [0, x1$0, 0]] + : 0 + < c$5 + ? [0, x2$0, [0, x3, [0, x1$0, 0]]] + : [0, x3, [0, x2$0, [0, x1$0, 0]]], + _yb_ = _yc_; + var s$0 = _yb_; + } + return [0, s$0, tl$1]; + } + } + } + var + n1 = n >> 1, + n2 = n - n1 | 0, + match$0 = sort(n1, l), + l2 = match$0[2], + s1 = match$0[1], + match$1 = sort(n2, l2), + tl$0 = match$1[2], + s2 = match$1[1]; + return [0, rev_merge(s1, s2, 0), tl$0]; + } + var len = length(l); + return 2 <= len ? sort(len, l)[1] : l; + } + function compare(_x8_, _x7_){return caml_int_compare(_x8_, _x7_);} + function min(x, y){return x <= y ? x : y;} + function max$0(x, y){return y <= x ? x : y;} + function to_string(x){return "" + x;} + function make$0(n, c){ + var s = caml_create_bytes(n); + caml_fill_bytes(s, 0, n, c); + return s; + } + function copy(s){ + var len = caml_ml_bytes_length(s), r = caml_create_bytes(len); + caml_blit_bytes(s, 0, r, 0, len); + return r; + } + function of_string(s){return copy(caml_bytes_of_string(s));} + function sub(s, ofs, len){ + if(0 <= ofs && 0 <= len && (caml_ml_bytes_length(s) - len | 0) >= ofs){ + var r = caml_create_bytes(len); + caml_blit_bytes(s, ofs, r, 0, len); + return r; + } + return invalid_arg(_x_); + } + function sub_string(b, ofs, len){ + return caml_string_of_bytes(sub(b, ofs, len)); + } + function blit(s1, ofs1, s2, ofs2, len){ + if + (0 <= len + && + 0 <= ofs1 + && + (caml_ml_bytes_length(s1) - len | 0) >= ofs1 + && 0 <= ofs2 && (caml_ml_bytes_length(s2) - len | 0) >= ofs2){caml_blit_bytes(s1, ofs1, s2, ofs2, len); return;} + return invalid_arg(_y_); + } + function blit_string(s1, ofs1, s2, ofs2, len){ + if + (0 <= len + && + 0 <= ofs1 + && + (caml_ml_string_length(s1) - len | 0) >= ofs1 + && 0 <= ofs2 && (caml_ml_bytes_length(s2) - len | 0) >= ofs2){caml_blit_string(s1, ofs1, s2, ofs2, len); return;} + return invalid_arg(_z_); + } + function escaped$0(s){ + var n = [0, 0], _x0_ = caml_ml_bytes_length(s) - 1 | 0, _xZ_ = 0; + if(_x0_ >= 0){ + var i$0 = _xZ_; + for(;;){ + var match = caml_bytes_unsafe_get(s, i$0); + a: + { + b: + { + c: + { + if(32 <= match){ + var _x4_ = match - 34 | 0; + if(58 < _x4_ >>> 0){ + if(93 <= _x4_) break c; + } + else if(56 < _x4_ - 1 >>> 0) break b; + var _x5_ = 1; + break a; + } + if(11 <= match){ + if(13 === match) break b; + } + else if(8 <= match) break b; + } + var _x5_ = 4; + break a; + } + var _x5_ = 2; + } + n[1] = n[1] + _x5_ | 0; + var _x6_ = i$0 + 1 | 0; + if(_x0_ === i$0) break; + var i$0 = _x6_; + } + } + if(n[1] === caml_ml_bytes_length(s)) return copy(s); + var s$0 = caml_create_bytes(n[1]); + n[1] = 0; + var _x2_ = caml_ml_bytes_length(s) - 1 | 0, _x1_ = 0; + if(_x2_ >= 0){ + var i = _x1_; + for(;;){ + var c = caml_bytes_unsafe_get(s, i); + a: + { + b: + { + c: + { + if(35 <= c){ + if(92 !== c){if(127 <= c) break c; break b;} + } + else{ + if(32 > c){ + if(14 <= c) break c; + switch(c){ + case 8: + caml_bytes_unsafe_set(s$0, n[1], 92); + n[1]++; + caml_bytes_unsafe_set(s$0, n[1], 98); + break a; + case 9: + caml_bytes_unsafe_set(s$0, n[1], 92); + n[1]++; + caml_bytes_unsafe_set(s$0, n[1], 116); + break a; + case 10: + caml_bytes_unsafe_set(s$0, n[1], 92); + n[1]++; + caml_bytes_unsafe_set(s$0, n[1], 110); + break a; + case 13: + caml_bytes_unsafe_set(s$0, n[1], 92); + n[1]++; + caml_bytes_unsafe_set(s$0, n[1], 114); + break a; + default: break c; + } + } + if(34 > c) break b; + } + caml_bytes_unsafe_set(s$0, n[1], 92); + n[1]++; + caml_bytes_unsafe_set(s$0, n[1], c); + break a; + } + caml_bytes_unsafe_set(s$0, n[1], 92); + n[1]++; + caml_bytes_unsafe_set(s$0, n[1], 48 + (c / 100 | 0) | 0); + n[1]++; + caml_bytes_unsafe_set(s$0, n[1], 48 + ((c / 10 | 0) % 10 | 0) | 0); + n[1]++; + caml_bytes_unsafe_set(s$0, n[1], 48 + (c % 10 | 0) | 0); + break a; + } + caml_bytes_unsafe_set(s$0, n[1], c); + } + n[1]++; + var _x3_ = i + 1 | 0; + if(_x2_ === i) break; + var i = _x3_; + } + } + return s$0; + } + function map$2(f, s){ + var l = caml_ml_bytes_length(s); + if(0 === l) return s; + var r = caml_create_bytes(l), _xX_ = l - 1 | 0, _xW_ = 0; + if(_xX_ >= 0){ + var i = _xW_; + for(;;){ + caml_bytes_unsafe_set(r, i, caml_call1(f, caml_bytes_unsafe_get(s, i))); + var _xY_ = i + 1 | 0; + if(_xX_ === i) break; + var i = _xY_; + } + } + return r; + } + function uppercase_ascii$0(s){return map$2(uppercase_ascii, s);} + function unsafe_of_string(_xV_){return caml_bytes_of_string(_xV_);} + function unsafe_to_string(_xU_){return caml_string_of_bytes(_xU_);} + function make$1(n, c){return unsafe_to_string(make$0(n, c));} + function sub$0(s, ofs, len){ + return unsafe_to_string(sub(unsafe_of_string(s), ofs, len)); + } + function ensure_ge(x, y){return y <= x ? x : invalid_arg(_A_);} + function sum_lengths(acc, seplen, param){ + var acc$0 = acc, param$0 = param; + for(;;){ + if(! param$0) return acc$0; + var hd = param$0[1]; + if(! param$0[2]) return caml_ml_string_length(hd) + acc$0 | 0; + var + tl = param$0[2], + acc$1 = + ensure_ge((caml_ml_string_length(hd) + seplen | 0) + acc$0 | 0, acc$0), + acc$0 = acc$1, + param$0 = tl; + } + } + function unsafe_blits(dst, pos, sep, seplen, param){ + var pos$0 = pos, param$0 = param; + for(;;){ + if(! param$0) return dst; + var hd = param$0[1]; + if(! param$0[2]){ + caml_blit_string(hd, 0, dst, pos$0, caml_ml_string_length(hd)); + return dst; + } + var tl = param$0[2]; + caml_blit_string(hd, 0, dst, pos$0, caml_ml_string_length(hd)); + caml_blit_string + (sep, 0, dst, pos$0 + caml_ml_string_length(hd) | 0, seplen); + var + pos$1 = (pos$0 + caml_ml_string_length(hd) | 0) + seplen | 0, + pos$0 = pos$1, + param$0 = tl; + } + } + function concat(sep, l){ + if(! l) return _B_; + var seplen = caml_ml_string_length(sep); + return unsafe_to_string + (unsafe_blits + (caml_create_bytes(sum_lengths(0, seplen, l)), + 0, + sep, + seplen, + l)); + } + function escaped$1(s){ + function escape_if_needed(s, n, i){ + var i$0 = i; + for(;;){ + if(n <= i$0) return s; + var _xT_ = caml_string_unsafe_get(s, i$0) - 32 | 0; + a: + { + if(59 < _xT_ >>> 0){ + if(33 < _xT_ - 61 >>> 0) break a; + } + else if(2 === _xT_) break a; + var i$1 = i$0 + 1 | 0, i$0 = i$1; + continue; + } + return unsafe_to_string(escaped$0(unsafe_of_string(s))); + } + } + return escape_if_needed(s, caml_ml_string_length(s), 0); + } + function index_rec(s, lim, i, c){ + var i$0 = i; + for(;;){ + if(lim <= i$0) throw caml_maybe_attach_backtrace(Not_found, 1); + if(caml_string_unsafe_get(s, i$0) === c) return i$0; + var i$1 = i$0 + 1 | 0, i$0 = i$1; + } + } + function contains_from(s, i, c){ + var l = caml_ml_string_length(s); + if(0 <= i && l >= i) + try{index_rec(s, l, i, c); var _xR_ = 1; return _xR_;} + catch(_xS_){ + var _xQ_ = caml_wrap_exception(_xS_); + if(_xQ_ === Not_found) return 0; + throw caml_maybe_attach_backtrace(_xQ_, 0); + } + return invalid_arg(_C_); + } + function contains(s, c){return contains_from(s, 0, c);} + function uppercase_ascii$1(s){ + return unsafe_to_string(uppercase_ascii$0(unsafe_of_string(s))); + } + function compare$0(x, y){return caml_string_compare(x, y);} + function symbol$1(_xP_, _xO_){return caml_string_equal(_xP_, _xO_);} + function sub$1(a, ofs, len){ + if(0 <= ofs && 0 <= len && (a.length - 1 - len | 0) >= ofs) + return caml_array_sub(a, ofs, len); + return invalid_arg(_D_); + } + function fill(a, ofs, len, v){ + if(0 <= ofs && 0 <= len && (a.length - 1 - len | 0) >= ofs){caml_array_fill(a, ofs, len, v); return;} + return invalid_arg(_E_); + } + function blit$0(a1, ofs1, a2, ofs2, len){ + if + (0 <= len + && + 0 <= ofs1 + && + (a1.length - 1 - len | 0) >= ofs1 + && 0 <= ofs2 && (a2.length - 1 - len | 0) >= ofs2){ + caml_array_blit(a1, ofs1, a2, ofs2, len); + return; + } + return invalid_arg(_F_); + } + function iter2(f, a, b){ + if(a.length - 1 !== b.length - 1) return invalid_arg(_G_); + var _xM_ = a.length - 1 - 1 | 0, _xL_ = 0; + if(_xM_ >= 0){ + var i = _xL_; + for(;;){ + caml_call2(f, a[1 + i], b[1 + i]); + var _xN_ = i + 1 | 0; + if(_xM_ === i) break; + var i = _xN_; + } + } + return 0; + } + function map$3(f, a){ + var l = a.length - 1; + if(0 === l) return [0]; + var + r = caml_make_vect(l, caml_call1(f, a[1])), + _xJ_ = l - 1 | 0, + _xI_ = 1; + if(_xJ_ >= 1){ + var i = _xI_; + for(;;){ + r[1 + i] = caml_call1(f, a[1 + i]); + var _xK_ = i + 1 | 0; + if(_xJ_ === i) break; + var i = _xK_; + } + } + return r; + } + function to_list(a){ + function tolist(i, res){ + var i$0 = i, res$0 = res; + for(;;){ + if(0 > i$0) return res$0; + var + res$1 = [0, a[1 + i$0], res$0], + i$1 = i$0 - 1 | 0, + i$0 = i$1, + res$0 = res$1; + } + } + return tolist(a.length - 1 - 1 | 0, 0); + } + function list_length(accu, param){ + var accu$0 = accu, param$0 = param; + for(;;){ + if(! param$0) return accu$0; + var + t = param$0[2], + accu$1 = accu$0 + 1 | 0, + accu$0 = accu$1, + param$0 = t; + } + } + function of_list(l){ + if(! l) return [0]; + var tl = l[2], hd = l[1], a = caml_make_vect(list_length(0, l), hd); + function fill(i, param){ + var i$0 = i, param$0 = param; + for(;;){ + if(! param$0) return a; + var tl = param$0[2], hd = param$0[1]; + a[1 + i$0] = hd; + var i$1 = i$0 + 1 | 0, i$0 = i$1, param$0 = tl; + } + } + return fill(1, tl); + } + function fold_right(f, a, x){ + var r = [0, x], _xG_ = a.length - 1 - 1 | 0; + if(_xG_ >= 0){ + var i = _xG_; + for(;;){ + r[1] = caml_call2(f, a[1 + i], r[1]); + var _xH_ = i - 1 | 0; + if(0 === i) break; + var i = _xH_; + } + } + return r[1]; + } + function lex_refill(read_fun, aux_buffer, lexbuf){ + var + read = caml_call2(read_fun, aux_buffer, caml_ml_bytes_length(aux_buffer)), + n = 0 < read ? read : (lexbuf[9] = 1, 0); + if(caml_ml_bytes_length(lexbuf[2]) < (lexbuf[3] + n | 0)){ + if + (((lexbuf[3] - lexbuf[5] | 0) + n | 0) + <= caml_ml_bytes_length(lexbuf[2])) + blit(lexbuf[2], lexbuf[5], lexbuf[2], 0, lexbuf[3] - lexbuf[5] | 0); + else{ + var + newlen = + min(2 * caml_ml_bytes_length(lexbuf[2]) | 0, max_string_length); + if(newlen < ((lexbuf[3] - lexbuf[5] | 0) + n | 0)) failwith(_H_); + var newbuf = caml_create_bytes(newlen); + blit(lexbuf[2], lexbuf[5], newbuf, 0, lexbuf[3] - lexbuf[5] | 0); + lexbuf[2] = newbuf; + } + var s = lexbuf[5]; + lexbuf[4] = lexbuf[4] + s | 0; + lexbuf[6] = lexbuf[6] - s | 0; + lexbuf[5] = 0; + lexbuf[7] = lexbuf[7] - s | 0; + lexbuf[3] = lexbuf[3] - s | 0; + var t = lexbuf[10], _xE_ = t.length - 1 - 1 | 0, _xD_ = 0; + if(_xE_ >= 0){ + var i = _xD_; + for(;;){ + var v = caml_check_bound(t, i)[1 + i]; + if(0 <= v) caml_check_bound(t, i)[1 + i] = v - s | 0; + var _xF_ = i + 1 | 0; + if(_xE_ === i) break; + var i = _xF_; + } + } + } + blit(aux_buffer, 0, lexbuf[2], lexbuf[3], n); + lexbuf[3] = lexbuf[3] + n | 0; + return 0; + } + function from_function(opt, f){ + if(opt) + var sth = opt[1], with_positions = sth; + else + var with_positions = 1; + var + _xz_ = with_positions ? zero_pos : dummy_pos, + _xA_ = with_positions ? zero_pos : dummy_pos, + _xB_ = caml_create_bytes(512); + return [0, + function(_xC_){return lex_refill(f, _xB_, _xC_);}, + caml_create_bytes(1024), + 0, + 0, + 0, + 0, + 0, + 0, + 0, + [0], + _xA_, + _xz_]; + } + function from_channel(with_positions, ic){ + return from_function + (with_positions, function(buf, n){return input(ic, buf, 0, n);}); + } + function from_string(opt, s){ + if(opt) + var sth = opt[1], with_positions = sth; + else + var with_positions = 1; + var + _xx_ = with_positions ? zero_pos : dummy_pos, + _xy_ = with_positions ? zero_pos : dummy_pos; + return [0, + function(lexbuf){lexbuf[9] = 1; return 0;}, + of_string(s), + caml_ml_string_length(s), + 0, + 0, + 0, + 0, + 0, + 1, + [0], + _xy_, + _xx_]; + } + function lexeme(lexbuf){ + var len = lexbuf[6] - lexbuf[5] | 0; + return sub_string(lexbuf[2], lexbuf[5], len); + } + function sub_lexeme(lexbuf, i1, i2){ + var len = i2 - i1 | 0; + return sub_string(lexbuf[2], i1, len); + } + function Make(Ord){ + function height(param){if(! param) return 0; var h = param[4]; return h;} + function create(l, v, r){ + if(l) var h = l[4], hl = h; else var hl = 0; + if(r) var h$0 = r[4], hr = h$0; else var hr = 0; + var _xw_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; + return [0, l, v, r, _xw_]; + } + function bal(l, v, r){ + if(l) var h = l[4], hl = h; else var hl = 0; + if(r) var h$0 = r[4], hr = h$0; else var hr = 0; + if((hr + 2 | 0) < hl){ + if(! l) return invalid_arg(_J_); + var lr = l[3], lv = l[2], ll = l[1], _xr_ = height(lr); + if(_xr_ <= height(ll)) return create(ll, lv, create(lr, v, r)); + if(! lr) return invalid_arg(_I_); + var lrr = lr[3], lrv = lr[2], lrl = lr[1], _xs_ = create(lrr, v, r); + return create(create(ll, lv, lrl), lrv, _xs_); + } + if((hl + 2 | 0) >= hr){ + var _xv_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; + return [0, l, v, r, _xv_]; + } + if(! r) return invalid_arg(_L_); + var rr = r[3], rv = r[2], rl = r[1], _xt_ = height(rl); + if(_xt_ <= height(rr)) return create(create(l, v, rl), rv, rr); + if(! rl) return invalid_arg(_K_); + var rlr = rl[3], rlv = rl[2], rll = rl[1], _xu_ = create(rlr, rv, rr); + return create(create(l, v, rll), rlv, _xu_); + } + function add(x, t){ + if(! t) return [0, 0, x, 0, 1]; + var r = t[3], v = t[2], l = t[1], c = caml_call2(Ord[1], x, v); + if(0 === c) return t; + if(0 <= c){var rr = add(x, r); return r === rr ? t : bal(l, v, rr);} + var ll = add(x, l); + return l === ll ? t : bal(ll, v, r); + } + function singleton(x){return [0, 0, x, 0, 1];} + function add_min_element(x, param){ + if(! param) return singleton(x); + var r = param[3], v = param[2], l = param[1]; + return bal(add_min_element(x, l), v, r); + } + function add_max_element(x, param){ + if(! param) return singleton(x); + var r = param[3], v = param[2], l = param[1]; + return bal(l, v, add_max_element(x, r)); + } + function join(l, v, r){ + if(! l) return add_min_element(v, r); + if(! r) return add_max_element(v, l); + var + rh = r[4], + rr = r[3], + rv = r[2], + rl = r[1], + lh = l[4], + lr = l[3], + lv = l[2], + ll = l[1]; + return (rh + 2 | 0) < lh + ? bal(ll, lv, join(lr, v, r)) + : (lh + + 2 + | 0) + < rh + ? bal(join(l, v, rl), rv, rr) + : create(l, v, r); + } + function min_elt(param){ + var param$0 = param; + for(;;){ + if(! param$0) throw caml_maybe_attach_backtrace(Not_found, 1); + var l = param$0[1]; + if(! l){var v = param$0[2]; return v;} + var param$0 = l; + } + } + function remove_min_elt(param){ + if(! param) return invalid_arg(_M_); + var l = param[1]; + if(l){ + var r = param[3], v = param[2]; + return bal(remove_min_elt(l), v, r); + } + var r$0 = param[3]; + return r$0; + } + function merge(t1, t2){ + if(! t1) return t2; + if(! t2) return t1; + var _xq_ = remove_min_elt(t2); + return bal(t1, min_elt(t2), _xq_); + } + function concat(t1, t2){ + if(! t1) return t2; + if(! t2) return t1; + var _xp_ = remove_min_elt(t2); + return join(t1, min_elt(t2), _xp_); + } + function split(x, param){ + if(! param) return _N_; + var + r = param[3], + v = param[2], + l = param[1], + c = caml_call2(Ord[1], x, v); + if(0 === c) return [0, l, 1, r]; + if(0 <= c){ + var match = split(x, r), rr = match[3], pres = match[2], lr = match[1]; + return [0, join(l, v, lr), pres, rr]; + } + var + match$0 = split(x, l), + rl = match$0[3], + pres$0 = match$0[2], + ll = match$0[1]; + return [0, ll, pres$0, join(rl, v, r)]; + } + var empty = 0; + function is_empty(param){return param ? 0 : 1;} + function mem(x, param){ + var param$0 = param; + for(;;){ + if(! param$0) return 0; + var + r = param$0[3], + v = param$0[2], + l = param$0[1], + c = caml_call2(Ord[1], x, v), + _xo_ = 0 === c ? 1 : 0; + if(_xo_) return _xo_; + var r$0 = 0 <= c ? r : l, param$0 = r$0; + } + } + function remove(x, t){ + if(! t) return 0; + var r = t[3], v = t[2], l = t[1], c = caml_call2(Ord[1], x, v); + if(0 === c) return merge(l, r); + if(0 <= c){var rr = remove(x, r); return r === rr ? t : bal(l, v, rr);} + var ll = remove(x, l); + return l === ll ? t : bal(ll, v, r); + } + function union(s1, s2){ + if(! s1) return s2; + if(! s2) return s1; + var + h2 = s2[4], + r2 = s2[3], + v2 = s2[2], + l2 = s2[1], + h1 = s1[4], + r1 = s1[3], + v1 = s1[2], + l1 = s1[1]; + if(h2 <= h1){ + if(1 === h2) return add(v2, s1); + var + match = split(v1, s2), + r2$0 = match[3], + l2$0 = match[1], + _xm_ = union(r1, r2$0); + return join(union(l1, l2$0), v1, _xm_); + } + if(1 === h1) return add(v1, s2); + var + match$0 = split(v2, s1), + r1$0 = match$0[3], + l1$0 = match$0[1], + _xn_ = union(r1$0, r2); + return join(union(l1$0, l2), v2, _xn_); + } + function inter(s1, s2){ + if(! s1) return 0; + if(! s2) return 0; + var + r1 = s1[3], + v1 = s1[2], + l1 = s1[1], + _xj_ = split(v1, s2), + l2 = _xj_[1]; + if(_xj_[2]){ + var r2 = _xj_[3], _xk_ = inter(r1, r2); + return join(inter(l1, l2), v1, _xk_); + } + var r2$0 = _xj_[3], _xl_ = inter(r1, r2$0); + return concat(inter(l1, l2), _xl_); + } + function diff(s1, s2){ + if(! s1) return 0; + if(! s2) return s1; + var + r1 = s1[3], + v1 = s1[2], + l1 = s1[1], + _xg_ = split(v1, s2), + l2 = _xg_[1]; + if(_xg_[2]){ + var r2 = _xg_[3], _xh_ = diff(r1, r2); + return concat(diff(l1, l2), _xh_); + } + var r2$0 = _xg_[3], _xi_ = diff(r1, r2$0); + return join(diff(l1, l2), v1, _xi_); + } + function cons_enum(s, e){ + var s$0 = s, e$0 = e; + for(;;){ + if(! s$0) return e$0; + var + r = s$0[3], + v = s$0[2], + l = s$0[1], + e$1 = [0, v, r, e$0], + s$0 = l, + e$0 = e$1; + } + } + function compare_aux(e1, e2){ + var e1$0 = e1, e2$0 = e2; + for(;;){ + if(! e1$0) return e2$0 ? -1 : 0; + if(! e2$0) return 1; + var + e2$1 = e2$0[3], + r2 = e2$0[2], + v2 = e2$0[1], + e1$1 = e1$0[3], + r1 = e1$0[2], + v1 = e1$0[1], + c = caml_call2(Ord[1], v1, v2); + if(0 !== c) return c; + var + e2$2 = cons_enum(r2, e2$1), + e1$2 = cons_enum(r1, e1$1), + e1$0 = e1$2, + e2$0 = e2$2; + } + } + function compare(s1, s2){ + var _xf_ = cons_enum(s2, 0); + return compare_aux(cons_enum(s1, 0), _xf_); + } + function equal(s1, s2){return 0 === compare(s1, s2) ? 1 : 0;} + function subset(s1, s2){ + var s1$0 = s1, s2$0 = s2; + for(;;){ + if(! s1$0) return 1; + if(! s2$0) return 0; + var + r2 = s2$0[3], + v2 = s2$0[2], + l2 = s2$0[1], + r1 = s1$0[3], + v1 = s1$0[2], + l1 = s1$0[1], + c = caml_call2(Ord[1], v1, v2); + if(0 === c){ + var _xc_ = subset(l1, l2); + if(! _xc_) return _xc_; + var s1$0 = r1, s2$0 = r2; + } + else if(0 <= c){ + var _xd_ = subset([0, 0, v1, r1, 0], r2); + if(! _xd_) return _xd_; + var s1$0 = l1; + } + else{ + var _xe_ = subset([0, l1, v1, 0, 0], l2); + if(! _xe_) return _xe_; + var s1$0 = r1; + } + } + } + function iter(f, param){ + var param$0 = param; + for(;;){ + if(! param$0) return 0; + var r = param$0[3], v = param$0[2], l = param$0[1]; + iter(f, l); + caml_call1(f, v); + var param$0 = r; + } + } + function fold(f, s, accu){ + var s$0 = s, accu$0 = accu; + for(;;){ + if(! s$0) return accu$0; + var + r = s$0[3], + v = s$0[2], + l = s$0[1], + accu$1 = caml_call2(f, v, fold(f, l, accu$0)), + s$0 = r, + accu$0 = accu$1; + } + } + function cardinal(param){ + if(! param) return; + var r = param[3], l = param[1]; + cardinal(r); + cardinal(l); + return; + } + function elements_aux(accu, param){ + var accu$0 = accu, param$0 = param; + for(;;){ + if(! param$0) return accu$0; + var + r = param$0[3], + v = param$0[2], + l = param$0[1], + accu$1 = [0, v, elements_aux(accu$0, r)], + accu$0 = accu$1, + param$0 = l; + } + } + function elements(s){return elements_aux(0, s);} + function find_last_opt_aux(v0, f, param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + r = param$0[3], + v0$0 = param$0[2], + l = param$0[1], + param$0 = caml_call1(f, v0$0) ? r : l; + } + } + function find_last_opt(f, param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var r = param$0[3], v = param$0[2], l = param$0[1]; + if(caml_call1(f, v)) return find_last_opt_aux(v, f, r); + var param$0 = l; + } + } + function of_sorted_list(l){ + function sub(n, l){ + if(3 >= n >>> 0) + switch(n){ + case 0: + return [0, 0, l]; + case 1: + if(l){var l$3 = l[2], x0 = l[1]; return [0, [0, 0, x0, 0, 1], l$3];} + break; + case 2: + if(l){ + var match$1 = l[2]; + if(match$1){ + var l$4 = match$1[2], x1 = match$1[1], x0$0 = l[1]; + return [0, [0, [0, 0, x0$0, 0, 1], x1, 0, 2], l$4]; + } + } + break; + default: + if(l){ + var _xb_ = l[2]; + if(_xb_){ + var match$2 = _xb_[2]; + if(match$2){ + var + l$5 = match$2[2], + x2 = match$2[1], + x1$0 = _xb_[1], + x0$1 = l[1]; + return [0, + [0, [0, 0, x0$1, 0, 1], x1$0, [0, 0, x2, 0, 1], 2], + l$5]; + } + } + } + } + var nl = n / 2 | 0, match = sub(nl, l), l$0 = match[2], left = match[1]; + if(! l$0) + throw caml_maybe_attach_backtrace([0, Assert_failure, _O_], 1); + var + l$1 = l$0[2], + mid = l$0[1], + match$0 = sub((n - nl | 0) - 1 | 0, l$1), + l$2 = match$0[2], + right = match$0[1]; + return [0, create(left, mid, right), l$2]; + } + return sub(length(l), l)[1]; + } + function of_list(l){ + if(! l) return empty; + var _w9_ = l[2], x0 = l[1]; + if(! _w9_) return singleton(x0); + var _w__ = _w9_[2], x1 = _w9_[1]; + if(! _w__) return add(x1, singleton(x0)); + var _w$_ = _w__[2], x2 = _w__[1]; + if(! _w$_) return add(x2, add(x1, singleton(x0))); + var _xa_ = _w$_[2], x3 = _w$_[1]; + if(! _xa_) return add(x3, add(x2, add(x1, singleton(x0)))); + if(_xa_[2]) return of_sorted_list(sort_uniq(Ord[1], l)); + var x4 = _xa_[1]; + return add(x4, add(x3, add(x2, add(x1, singleton(x0))))); + } + return [0, + , + , + , + add, + , + , + , + , + , + , + , + , + , + , + , + , + empty, + is_empty, + mem, + remove, + union, + inter, + , + , + diff, + , + , + compare, + equal, + subset, + iter, + fold, + , + , + , + , + cardinal, + , + elements, + , + , + , + , + , + , + , + , + , + , + find_last_opt, + , + , + , + , + , + , + of_list]; + } + function _P_(_w7_){ + var _w8_ = Make(_w7_); + return [0, + _w8_[17], + _w8_[18], + _w8_[19], + _w8_[4], + , + _w8_[20], + _w8_[21], + _w8_[22], + , + _w8_[25], + _w8_[28], + _w8_[29], + _w8_[30], + _w8_[31], + , + _w8_[32], + , + , + , + , + , + _w8_[37], + _w8_[39], + , + , + , + , + , + , + , + , + , + , + , + , + _w8_[50], + _w8_[57]]; + } + function create(param){return [0, 0, 0];} + function clear(s){s[1] = 0; s[2] = 0; return;} + function push(x, s){s[1] = [0, x, s[1]]; s[2] = s[2] + 1 | 0; return 0;} + function pop_opt(s){ + var match = s[1]; + if(! match) return 0; + var tl = match[2], hd = match[1]; + s[1] = tl; + s[2] = s[2] - 1 | 0; + return [0, hd]; + } + function top_opt(s){ + var match = s[1]; + if(! match) return 0; + var hd = match[1]; + return [0, hd]; + } + function iter$0(f, s){return iter(f, s[1]);} + var Empty = [248, _Q_, caml_fresh_oo_id(0)]; + function create$0(param){return [0, 0, 0, 0];} + function clear$0(q){q[1] = 0; q[2] = 0; q[3] = 0; return;} + function add(x, q){ + var cell = [0, x, 0], match = q[3]; + return match + ? (q[1] = q[1] + 1 | 0, match[2] = cell, q[3] = cell, 0) + : (q[1] = 1, q[2] = cell, q[3] = cell, 0); + } + function peek_opt(q){ + var match = q[2]; + if(! match) return 0; + var content = match[1]; + return [0, content]; + } + function take(q){ + var _w6_ = q[2]; + if(! _w6_) throw caml_maybe_attach_backtrace(Empty, 1); + var content = _w6_[1]; + if(_w6_[2]){ + var next = _w6_[2]; + q[1] = q[1] - 1 | 0; + q[2] = next; + return content; + } + clear$0(q); + return content; + } + function take_opt(q){ + var _w5_ = q[2]; + if(! _w5_) return 0; + var content = _w5_[1]; + if(_w5_[2]){ + var next = _w5_[2]; + q[1] = q[1] - 1 | 0; + q[2] = next; + return [0, content]; + } + clear$0(q); + return [0, content]; + } + function is_empty(q){return 0 === q[1] ? 1 : 0;} + function length$0(q){return q[1];} + function iter$1(f, cell){ + var cell$0 = cell; + for(;;){ + if(! cell$0) return; + var content = cell$0[1], next = cell$0[2]; + caml_call1(f, content); + var cell$0 = next; + } + } + function iter$2(f, q){return iter$1(f, q[2]);} + function from(f){return [0, [0, 0, [3, [0, 0, f]]]];} + function create$1(n){ + var + n$0 = 1 <= n ? n : 1, + n$1 = max_string_length < n$0 ? max_string_length : n$0, + s = caml_create_bytes(n$1); + return [0, s, 0, n$1, s]; + } + function contents(b){return sub_string(b[1], 0, b[2]);} + function sub$2(b, ofs, len){ + if(0 <= ofs && 0 <= len && (b[2] - len | 0) >= ofs) + return sub_string(b[1], ofs, len); + return invalid_arg(_R_); + } + function length$1(b){return b[2];} + function reset(b){ + b[2] = 0; + b[1] = b[4]; + b[3] = caml_ml_bytes_length(b[1]); + return; + } + function resize(b, more){ + var old_pos = b[2], old_len = b[3], new_len = [0, old_len]; + for(;;){ + if(new_len[1] >= (old_pos + more | 0)) break; + new_len[1] = 2 * new_len[1] | 0; + } + if(max_string_length < new_len[1]) + if((old_pos + more | 0) <= max_string_length) + new_len[1] = max_string_length; + else + failwith(_V_); + var new_buffer = caml_create_bytes(new_len[1]); + blit(b[1], 0, new_buffer, 0, b[2]); + b[1] = new_buffer; + b[3] = new_len[1]; + if((b[2] + more | 0) > b[3]) + throw caml_maybe_attach_backtrace([0, Assert_failure, _U_], 1); + if((old_pos + more | 0) <= b[3]) return; + throw caml_maybe_attach_backtrace([0, Assert_failure, _S_], 1); + } + function add_char(b, c){ + var pos = b[2]; + if(b[3] <= pos) resize(b, 1); + caml_bytes_unsafe_set(b[1], pos, c); + b[2] = pos + 1 | 0; + return 0; + } + function add_substring(b, s, offset, len){ + var _w2_ = offset < 0 ? 1 : 0; + if(_w2_) + var _w3_ = _w2_; + else + var + _w4_ = len < 0 ? 1 : 0, + _w3_ = _w4_ || ((caml_ml_string_length(s) - len | 0) < offset ? 1 : 0); + if(_w3_) invalid_arg(_W_); + var new_position = b[2] + len | 0; + if(b[3] < new_position) resize(b, len); + caml_blit_string(s, offset, b[1], b[2], len); + b[2] = new_position; + return 0; + } + function add_string(b, s){ + var len = caml_ml_string_length(s), new_position = b[2] + len | 0; + if(b[3] < new_position) resize(b, len); + caml_blit_string(s, 0, b[1], b[2], len); + b[2] = new_position; + return 0; + } + function default_float_precision(fconv){return 5 === fconv[2] ? 12 : -6;} + function buffer_create(init_size){ + return [0, 0, caml_create_bytes(init_size)]; + } + function buffer_check_size(buf, overhead){ + var len = caml_ml_bytes_length(buf[2]), min_len = buf[1] + overhead | 0; + if(len < min_len){ + var + new_len = max$0(len * 2 | 0, min_len), + new_str = caml_create_bytes(new_len); + blit(buf[2], 0, new_str, 0, len); + buf[2] = new_str; + } + return; + } + function buffer_add_char(buf, c){ + buffer_check_size(buf, 1); + caml_bytes_set(buf[2], buf[1], c); + buf[1] = buf[1] + 1 | 0; + return; + } + function buffer_add_string(buf, s){ + var str_len = caml_ml_string_length(s); + buffer_check_size(buf, str_len); + blit_string(s, 0, buf[2], buf[1], str_len); + buf[1] = buf[1] + str_len | 0; + return; + } + function buffer_contents(buf){return sub_string(buf[2], 0, buf[1]);} + function char_of_fconv(opt, fconv){ + if(opt) var sth = opt[1], cF = sth; else var cF = 70; + switch(fconv[2]){ + case 0: + return 102; + case 1: + return 101; + case 2: + return 69; + case 3: + return 103; + case 4: + return 71; + case 5: + return cF; + case 6: + return 104; + case 7: + return 72; + default: return 70; + } + } + function bprint_fconv_flag(buf, fconv){ + switch(fconv[1]){ + case 0: break; + case 1: + buffer_add_char(buf, 43); break; + default: buffer_add_char(buf, 32); + } + if(8 <= fconv[2]) return buffer_add_char(buf, 35); + return; + } + function string_of_formatting_lit(formatting_lit){ + if(typeof formatting_lit === "number") + switch(formatting_lit){ + case 0: + return _X_; + case 1: + return _Y_; + case 2: + return _Z_; + case 3: + return ___; + case 4: + return _$_; + case 5: + return _aa_; + default: return _ab_; + } + switch(formatting_lit[0]){ + case 0: + var str = formatting_lit[1]; return str; + case 1: + var str$0 = formatting_lit[1]; return str$0; + default: var c = formatting_lit[1]; return symbol(_ac_, make$1(1, c)); + } + } + function bprint_fmtty(buf, fmtty){ + var fmtty$0 = fmtty; + for(;;){ + if(typeof fmtty$0 === "number") return; + switch(fmtty$0[0]){ + case 0: + var fmtty$1 = fmtty$0[1]; + buffer_add_string(buf, _ad_); + var fmtty$0 = fmtty$1; + break; + case 1: + var fmtty$2 = fmtty$0[1]; + buffer_add_string(buf, _ae_); + var fmtty$0 = fmtty$2; + break; + case 2: + var fmtty$3 = fmtty$0[1]; + buffer_add_string(buf, _af_); + var fmtty$0 = fmtty$3; + break; + case 3: + var fmtty$4 = fmtty$0[1]; + buffer_add_string(buf, _ag_); + var fmtty$0 = fmtty$4; + break; + case 4: + var fmtty$5 = fmtty$0[1]; + buffer_add_string(buf, _ah_); + var fmtty$0 = fmtty$5; + break; + case 5: + var fmtty$6 = fmtty$0[1]; + buffer_add_string(buf, _ai_); + var fmtty$0 = fmtty$6; + break; + case 6: + var fmtty$7 = fmtty$0[1]; + buffer_add_string(buf, _aj_); + var fmtty$0 = fmtty$7; + break; + case 7: + var fmtty$8 = fmtty$0[1]; + buffer_add_string(buf, _ak_); + var fmtty$0 = fmtty$8; + break; + case 8: + var fmtty$9 = fmtty$0[2], sub_fmtty = fmtty$0[1]; + buffer_add_string(buf, _al_); + bprint_fmtty(buf, sub_fmtty); + buffer_add_string(buf, _am_); + var fmtty$0 = fmtty$9; + break; + case 9: + var fmtty$10 = fmtty$0[3], sub_fmtty$0 = fmtty$0[1]; + buffer_add_string(buf, _an_); + bprint_fmtty(buf, sub_fmtty$0); + buffer_add_string(buf, _ao_); + var fmtty$0 = fmtty$10; + break; + case 10: + var fmtty$11 = fmtty$0[1]; + buffer_add_string(buf, _ap_); + var fmtty$0 = fmtty$11; + break; + case 11: + var fmtty$12 = fmtty$0[1]; + buffer_add_string(buf, _aq_); + var fmtty$0 = fmtty$12; + break; + case 12: + var fmtty$13 = fmtty$0[1]; + buffer_add_string(buf, _ar_); + var fmtty$0 = fmtty$13; + break; + case 13: + var fmtty$14 = fmtty$0[1]; + buffer_add_string(buf, _as_); + var fmtty$0 = fmtty$14; + break; + default: + var fmtty$15 = fmtty$0[1]; + buffer_add_string(buf, _at_); + var fmtty$0 = fmtty$15; + } + } + } + function symm(param){ + if(typeof param === "number") return 0; + switch(param[0]){ + case 0: + var rest = param[1]; return [0, symm(rest)]; + case 1: + var rest$0 = param[1]; return [1, symm(rest$0)]; + case 2: + var rest$1 = param[1]; return [2, symm(rest$1)]; + case 3: + var rest$2 = param[1]; return [3, symm(rest$2)]; + case 4: + var rest$3 = param[1]; return [4, symm(rest$3)]; + case 5: + var rest$4 = param[1]; return [5, symm(rest$4)]; + case 6: + var rest$5 = param[1]; return [6, symm(rest$5)]; + case 7: + var rest$6 = param[1]; return [7, symm(rest$6)]; + case 8: + var rest$7 = param[2], ty = param[1]; return [8, ty, symm(rest$7)]; + case 9: + var rest$8 = param[3], ty2 = param[2], ty1 = param[1]; + return [9, ty2, ty1, symm(rest$8)]; + case 10: + var rest$9 = param[1]; return [10, symm(rest$9)]; + case 11: + var rest$10 = param[1]; return [11, symm(rest$10)]; + case 12: + var rest$11 = param[1]; return [12, symm(rest$11)]; + case 13: + var rest$12 = param[1]; return [13, symm(rest$12)]; + default: var rest$13 = param[1]; return [14, symm(rest$13)]; + } + } + function fmtty_rel_det(param){ + if(typeof param === "number") + return [0, + function(param){return;}, + function(param){return;}, + function(param){return;}, + function(param){return;}]; + switch(param[0]){ + case 0: + var + rest = param[1], + match = fmtty_rel_det(rest), + de = match[4], + ed = match[3], + af = match[2], + fa = match[1]; + return [0, + function(param){fa(0); return;}, + function(param){af(0); return;}, + ed, + de]; + case 1: + var + rest$0 = param[1], + match$0 = fmtty_rel_det(rest$0), + de$0 = match$0[4], + ed$0 = match$0[3], + af$0 = match$0[2], + fa$0 = match$0[1]; + return [0, + function(param){fa$0(0); return;}, + function(param){af$0(0); return;}, + ed$0, + de$0]; + case 2: + var + rest$1 = param[1], + match$1 = fmtty_rel_det(rest$1), + de$1 = match$1[4], + ed$1 = match$1[3], + af$1 = match$1[2], + fa$1 = match$1[1]; + return [0, + function(param){fa$1(0); return;}, + function(param){af$1(0); return;}, + ed$1, + de$1]; + case 3: + var + rest$2 = param[1], + match$2 = fmtty_rel_det(rest$2), + de$2 = match$2[4], + ed$2 = match$2[3], + af$2 = match$2[2], + fa$2 = match$2[1]; + return [0, + function(param){fa$2(0); return;}, + function(param){af$2(0); return;}, + ed$2, + de$2]; + case 4: + var + rest$3 = param[1], + match$3 = fmtty_rel_det(rest$3), + de$3 = match$3[4], + ed$3 = match$3[3], + af$3 = match$3[2], + fa$3 = match$3[1]; + return [0, + function(param){fa$3(0); return;}, + function(param){af$3(0); return;}, + ed$3, + de$3]; + case 5: + var + rest$4 = param[1], + match$4 = fmtty_rel_det(rest$4), + de$4 = match$4[4], + ed$4 = match$4[3], + af$4 = match$4[2], + fa$4 = match$4[1]; + return [0, + function(param){fa$4(0); return;}, + function(param){af$4(0); return;}, + ed$4, + de$4]; + case 6: + var + rest$5 = param[1], + match$5 = fmtty_rel_det(rest$5), + de$5 = match$5[4], + ed$5 = match$5[3], + af$5 = match$5[2], + fa$5 = match$5[1]; + return [0, + function(param){fa$5(0); return;}, + function(param){af$5(0); return;}, + ed$5, + de$5]; + case 7: + var + rest$6 = param[1], + match$6 = fmtty_rel_det(rest$6), + de$6 = match$6[4], + ed$6 = match$6[3], + af$6 = match$6[2], + fa$6 = match$6[1]; + return [0, + function(param){fa$6(0); return;}, + function(param){af$6(0); return;}, + ed$6, + de$6]; + case 8: + var + rest$7 = param[2], + match$7 = fmtty_rel_det(rest$7), + de$7 = match$7[4], + ed$7 = match$7[3], + af$7 = match$7[2], + fa$7 = match$7[1]; + return [0, + function(param){fa$7(0); return;}, + function(param){af$7(0); return;}, + ed$7, + de$7]; + case 9: + var + rest$8 = param[3], + ty2 = param[2], + ty1 = param[1], + match$8 = fmtty_rel_det(rest$8), + de$8 = match$8[4], + ed$8 = match$8[3], + af$8 = match$8[2], + fa$8 = match$8[1], + ty = trans(symm(ty1), ty2), + match$9 = fmtty_rel_det(ty), + jd = match$9[4], + dj = match$9[3], + ga = match$9[2], + ag = match$9[1]; + return [0, + function(param){fa$8(0); ag(0); return;}, + function(param){ga(0); af$8(0); return;}, + function(param){ed$8(0); dj(0); return;}, + function(param){jd(0); de$8(0); return;}]; + case 10: + var + rest$9 = param[1], + match$10 = fmtty_rel_det(rest$9), + de$9 = match$10[4], + ed$9 = match$10[3], + af$9 = match$10[2], + fa$9 = match$10[1]; + return [0, + function(param){fa$9(0); return;}, + function(param){af$9(0); return;}, + ed$9, + de$9]; + case 11: + var + rest$10 = param[1], + match$11 = fmtty_rel_det(rest$10), + de$10 = match$11[4], + ed$10 = match$11[3], + af$10 = match$11[2], + fa$10 = match$11[1]; + return [0, + function(param){fa$10(0); return;}, + function(param){af$10(0); return;}, + ed$10, + de$10]; + case 12: + var + rest$11 = param[1], + match$12 = fmtty_rel_det(rest$11), + de$11 = match$12[4], + ed$11 = match$12[3], + af$11 = match$12[2], + fa$11 = match$12[1]; + return [0, + function(param){fa$11(0); return;}, + function(param){af$11(0); return;}, + ed$11, + de$11]; + case 13: + var + rest$12 = param[1], + match$13 = fmtty_rel_det(rest$12), + de$12 = match$13[4], + ed$12 = match$13[3], + af$12 = match$13[2], + fa$12 = match$13[1]; + return [0, + function(param){fa$12(0); return;}, + function(param){af$12(0); return;}, + function(param){ed$12(0); return;}, + function(param){de$12(0); return;}]; + default: + var + rest$13 = param[1], + match$14 = fmtty_rel_det(rest$13), + de$13 = match$14[4], + ed$13 = match$14[3], + af$13 = match$14[2], + fa$13 = match$14[1]; + return [0, + function(param){fa$13(0); return;}, + function(param){af$13(0); return;}, + function(param){ed$13(0); return;}, + function(param){de$13(0); return;}]; + } + } + function trans(ty1, ty2){ + a: + { + b: + { + c: + { + d: + { + e: + { + f: + { + g: + { + if(typeof ty1 !== "number"){ + switch(ty1[0]){ + case 0: + var rest1 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 0: + var rest2 = ty2[1]; return [0, trans(rest1, rest2)]; + case 8: + break f; + case 9: + break g; + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + } + break; + case 1: + var rest1$0 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 1: + var rest2$0 = ty2[1]; return [1, trans(rest1$0, rest2$0)]; + case 8: + break f; + case 9: + break g; + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + } + break; + case 2: + var rest1$1 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 2: + var rest2$1 = ty2[1]; return [2, trans(rest1$1, rest2$1)]; + case 8: + break f; + case 9: + break g; + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + } + break; + case 3: + var rest1$2 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 3: + var rest2$2 = ty2[1]; return [3, trans(rest1$2, rest2$2)]; + case 8: + break f; + case 9: + break g; + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + } + break; + case 4: + var rest1$3 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 4: + var rest2$3 = ty2[1]; return [4, trans(rest1$3, rest2$3)]; + case 8: + break f; + case 9: + break g; + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + } + break; + case 5: + var rest1$4 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 5: + var rest2$4 = ty2[1]; return [5, trans(rest1$4, rest2$4)]; + case 8: + break f; + case 9: + break g; + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + } + break; + case 6: + var rest1$5 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 6: + var rest2$5 = ty2[1]; return [6, trans(rest1$5, rest2$5)]; + case 8: + break f; + case 9: + break g; + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + } + break; + case 7: + var rest1$6 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 7: + var rest2$6 = ty2[1]; return [7, trans(rest1$6, rest2$6)]; + case 8: + break f; + case 9: + break g; + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + } + break; + case 8: + var rest1$7 = ty1[2], ty1$0 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 8: + var + rest2$7 = ty2[2], + ty2$0 = ty2[1], + _w1_ = trans(rest1$7, rest2$7); + return [8, trans(ty1$0, ty2$0), _w1_]; + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _aD_], 1); + case 9: + var rest1$8 = ty1[3], ty12 = ty1[2], ty11 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 8: + break f; + case 9: + var + rest2$8 = ty2[3], + ty22 = ty2[2], + ty21 = ty2[1], + ty = trans(symm(ty12), ty21), + match = fmtty_rel_det(ty), + f4 = match[4], + f2 = match[2]; + f2(0); + f4(0); + return [9, ty11, ty22, trans(rest1$8, rest2$8)]; + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _aE_], 1); + case 10: + var rest1$9 = ty1[1]; + if(typeof ty2 !== "number" && 10 === ty2[0]){ + var rest2$9 = ty2[1]; + return [10, trans(rest1$9, rest2$9)]; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _aF_], 1); + case 11: + var rest1$10 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 10: + break a; + case 11: + var rest2$10 = ty2[1]; + return [11, trans(rest1$10, rest2$10)]; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _aG_], 1); + case 12: + var rest1$11 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 10: + break a; + case 11: + break b; + case 12: + var rest2$11 = ty2[1]; + return [12, trans(rest1$11, rest2$11)]; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _aH_], 1); + case 13: + var rest1$12 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + var rest2$12 = ty2[1]; + return [13, trans(rest1$12, rest2$12)]; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _aI_], 1); + default: + var rest1$13 = ty1[1]; + if(typeof ty2 !== "number") + switch(ty2[0]){ + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + var rest2$13 = ty2[1]; + return [14, trans(rest1$13, rest2$13)]; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _aJ_], 1); + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _aC_], 1); + } + if(typeof ty2 === "number") return 0; + switch(ty2[0]){ + case 10: + break a; + case 11: + break b; + case 12: + break c; + case 13: + break d; + case 14: + break e; + case 8: + break f; + case 9: break; + default: + throw caml_maybe_attach_backtrace([0, Assert_failure, _au_], 1); + } + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _aw_], 1); + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _av_], 1); + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _aB_], 1); + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _aA_], 1); + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _az_], 1); + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _ay_], 1); + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _ax_], 1); + } + var Type_mismatch = [248, _aK_, caml_fresh_oo_id(0)]; + function type_padding(pad, fmtty){ + if(typeof pad === "number") return [0, 0, fmtty]; + if(0 === pad[0]){ + var w = pad[2], padty = pad[1]; + return [0, [0, padty, w], fmtty]; + } + if(typeof fmtty !== "number" && 2 === fmtty[0]){ + var rest = fmtty[1], padty$0 = pad[1]; + return [0, [1, padty$0], rest]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + } + function type_padprec(pad, prec, fmtty){ + var match = type_padding(pad, fmtty); + if(typeof prec !== "number"){ + var rest$1 = match[2], pad$2 = match[1], p = prec[1]; + return [0, pad$2, [0, p], rest$1]; + } + if(! prec){ + var rest$0 = match[2], pad$1 = match[1]; + return [0, pad$1, 0, rest$0]; + } + var match$0 = match[2]; + if(typeof match$0 !== "number" && 2 === match$0[0]){ + var rest = match$0[1], pad$0 = match[1]; + return [0, pad$0, 1, rest]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + } + function type_format(fmt, fmtty){ + var _w0_ = type_format_gen(fmt, fmtty); + if(typeof _w0_[2] !== "number") + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + var fmt$0 = _w0_[1]; + return fmt$0; + } + function type_format_gen(fmt, fmtty){ + if(typeof fmt === "number") return [0, 0, fmtty]; + switch(fmt[0]){ + case 0: + if(typeof fmtty !== "number" && 0 === fmtty[0]){ + var + fmtty_rest = fmtty[1], + fmt_rest = fmt[1], + match = type_format_gen(fmt_rest, fmtty_rest), + fmtty$0 = match[2], + fmt$0 = match[1]; + return [0, [0, fmt$0], fmtty$0]; + } + break; + case 1: + if(typeof fmtty !== "number" && 0 === fmtty[0]){ + var + fmtty_rest$0 = fmtty[1], + fmt_rest$0 = fmt[1], + match$0 = type_format_gen(fmt_rest$0, fmtty_rest$0), + fmtty$1 = match$0[2], + fmt$1 = match$0[1]; + return [0, [1, fmt$1], fmtty$1]; + } + break; + case 2: + var + fmt_rest$1 = fmt[2], + pad = fmt[1], + match$1 = type_padding(pad, fmtty), + pad$0 = match$1[1], + match$2 = match$1[2]; + if(typeof match$2 !== "number" && 1 === match$2[0]){ + var + fmtty_rest$1 = match$2[1], + match$3 = type_format_gen(fmt_rest$1, fmtty_rest$1), + fmtty$2 = match$3[2], + fmt$2 = match$3[1]; + return [0, [2, pad$0, fmt$2], fmtty$2]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + case 3: + var + fmt_rest$2 = fmt[2], + pad$1 = fmt[1], + match$4 = type_padding(pad$1, fmtty), + pad$2 = match$4[1], + match$5 = match$4[2]; + if(typeof match$5 !== "number" && 1 === match$5[0]){ + var + fmtty_rest$2 = match$5[1], + match$6 = type_format_gen(fmt_rest$2, fmtty_rest$2), + fmtty$3 = match$6[2], + fmt$3 = match$6[1]; + return [0, [3, pad$2, fmt$3], fmtty$3]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + case 4: + var + fmt_rest$3 = fmt[4], + prec = fmt[3], + pad$3 = fmt[2], + iconv = fmt[1], + match$7 = type_padprec(pad$3, prec, fmtty), + pad$4 = match$7[1], + match$8 = match$7[3]; + if(typeof match$8 !== "number" && 2 === match$8[0]){ + var + fmtty_rest$3 = match$8[1], + prec$0 = match$7[2], + match$9 = type_format_gen(fmt_rest$3, fmtty_rest$3), + fmtty$4 = match$9[2], + fmt$4 = match$9[1]; + return [0, [4, iconv, pad$4, prec$0, fmt$4], fmtty$4]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + case 5: + var + fmt_rest$4 = fmt[4], + prec$1 = fmt[3], + pad$5 = fmt[2], + iconv$0 = fmt[1], + match$10 = type_padprec(pad$5, prec$1, fmtty), + pad$6 = match$10[1], + match$11 = match$10[3]; + if(typeof match$11 !== "number" && 3 === match$11[0]){ + var + fmtty_rest$4 = match$11[1], + prec$2 = match$10[2], + match$12 = type_format_gen(fmt_rest$4, fmtty_rest$4), + fmtty$5 = match$12[2], + fmt$5 = match$12[1]; + return [0, [5, iconv$0, pad$6, prec$2, fmt$5], fmtty$5]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + case 6: + var + fmt_rest$5 = fmt[4], + prec$3 = fmt[3], + pad$7 = fmt[2], + iconv$1 = fmt[1], + match$13 = type_padprec(pad$7, prec$3, fmtty), + pad$8 = match$13[1], + match$14 = match$13[3]; + if(typeof match$14 !== "number" && 4 === match$14[0]){ + var + fmtty_rest$5 = match$14[1], + prec$4 = match$13[2], + match$15 = type_format_gen(fmt_rest$5, fmtty_rest$5), + fmtty$6 = match$15[2], + fmt$6 = match$15[1]; + return [0, [6, iconv$1, pad$8, prec$4, fmt$6], fmtty$6]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + case 7: + var + fmt_rest$6 = fmt[4], + prec$5 = fmt[3], + pad$9 = fmt[2], + iconv$2 = fmt[1], + match$16 = type_padprec(pad$9, prec$5, fmtty), + pad$10 = match$16[1], + match$17 = match$16[3]; + if(typeof match$17 !== "number" && 5 === match$17[0]){ + var + fmtty_rest$6 = match$17[1], + prec$6 = match$16[2], + match$18 = type_format_gen(fmt_rest$6, fmtty_rest$6), + fmtty$7 = match$18[2], + fmt$7 = match$18[1]; + return [0, [7, iconv$2, pad$10, prec$6, fmt$7], fmtty$7]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + case 8: + var + fmt_rest$7 = fmt[4], + prec$7 = fmt[3], + pad$11 = fmt[2], + fconv = fmt[1], + match$19 = type_padprec(pad$11, prec$7, fmtty), + pad$12 = match$19[1], + match$20 = match$19[3]; + if(typeof match$20 !== "number" && 6 === match$20[0]){ + var + fmtty_rest$7 = match$20[1], + prec$8 = match$19[2], + match$21 = type_format_gen(fmt_rest$7, fmtty_rest$7), + fmtty$8 = match$21[2], + fmt$8 = match$21[1]; + return [0, [8, fconv, pad$12, prec$8, fmt$8], fmtty$8]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + case 9: + var + fmt_rest$8 = fmt[2], + pad$13 = fmt[1], + match$22 = type_padding(pad$13, fmtty), + pad$14 = match$22[1], + match$23 = match$22[2]; + if(typeof match$23 !== "number" && 7 === match$23[0]){ + var + fmtty_rest$8 = match$23[1], + match$24 = type_format_gen(fmt_rest$8, fmtty_rest$8), + fmtty$9 = match$24[2], + fmt$9 = match$24[1]; + return [0, [9, pad$14, fmt$9], fmtty$9]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + case 10: + var + fmt_rest$9 = fmt[1], + match$25 = type_format_gen(fmt_rest$9, fmtty), + fmtty$10 = match$25[2], + fmt$10 = match$25[1]; + return [0, [10, fmt$10], fmtty$10]; + case 11: + var + fmt_rest$10 = fmt[2], + str = fmt[1], + match$26 = type_format_gen(fmt_rest$10, fmtty), + fmtty$11 = match$26[2], + fmt$11 = match$26[1]; + return [0, [11, str, fmt$11], fmtty$11]; + case 12: + var + fmt_rest$11 = fmt[2], + chr = fmt[1], + match$27 = type_format_gen(fmt_rest$11, fmtty), + fmtty$12 = match$27[2], + fmt$12 = match$27[1]; + return [0, [12, chr, fmt$12], fmtty$12]; + case 13: + if(typeof fmtty !== "number" && 8 === fmtty[0]){ + var + fmtty_rest$9 = fmtty[2], + sub_fmtty = fmtty[1], + fmt_rest$12 = fmt[3], + sub_fmtty$0 = fmt[2], + pad_opt = fmt[1]; + if(caml_notequal([0, sub_fmtty$0], [0, sub_fmtty])) + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + var + match$28 = type_format_gen(fmt_rest$12, fmtty_rest$9), + fmtty$13 = match$28[2], + fmt$13 = match$28[1]; + return [0, [13, pad_opt, sub_fmtty, fmt$13], fmtty$13]; + } + break; + case 14: + if(typeof fmtty !== "number" && 9 === fmtty[0]){ + var + fmtty_rest$10 = fmtty[3], + sub_fmtty1 = fmtty[1], + fmt_rest$13 = fmt[3], + sub_fmtty$1 = fmt[2], + pad_opt$0 = fmt[1], + _wZ_ = [0, erase_rel(sub_fmtty1)]; + if(caml_notequal([0, erase_rel(sub_fmtty$1)], _wZ_)) + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + var + match$29 = type_format_gen(fmt_rest$13, erase_rel(fmtty_rest$10)), + fmtty$14 = match$29[2], + fmt$14 = match$29[1]; + return [0, [14, pad_opt$0, sub_fmtty1, fmt$14], fmtty$14]; + } + break; + case 15: + if(typeof fmtty !== "number" && 10 === fmtty[0]){ + var + fmtty_rest$11 = fmtty[1], + fmt_rest$14 = fmt[1], + match$30 = type_format_gen(fmt_rest$14, fmtty_rest$11), + fmtty$15 = match$30[2], + fmt$15 = match$30[1]; + return [0, [15, fmt$15], fmtty$15]; + } + break; + case 16: + if(typeof fmtty !== "number" && 11 === fmtty[0]){ + var + fmtty_rest$12 = fmtty[1], + fmt_rest$15 = fmt[1], + match$31 = type_format_gen(fmt_rest$15, fmtty_rest$12), + fmtty$16 = match$31[2], + fmt$16 = match$31[1]; + return [0, [16, fmt$16], fmtty$16]; + } + break; + case 17: + var + fmt_rest$16 = fmt[2], + formatting_lit = fmt[1], + match$32 = type_format_gen(fmt_rest$16, fmtty), + fmtty$17 = match$32[2], + fmt$17 = match$32[1]; + return [0, [17, formatting_lit, fmt$17], fmtty$17]; + case 18: + var fmt_rest$17 = fmt[2], formatting_gen = fmt[1]; + return type_formatting_gen(formatting_gen, fmt_rest$17, fmtty); + case 19: + if(typeof fmtty !== "number" && 13 === fmtty[0]){ + var + fmtty_rest$13 = fmtty[1], + fmt_rest$18 = fmt[1], + match$33 = type_format_gen(fmt_rest$18, fmtty_rest$13), + fmtty$18 = match$33[2], + fmt$18 = match$33[1]; + return [0, [19, fmt$18], fmtty$18]; + } + break; + case 20: + if(typeof fmtty !== "number" && 1 === fmtty[0]){ + var + fmtty_rest$14 = fmtty[1], + fmt_rest$19 = fmt[3], + char_set = fmt[2], + width_opt = fmt[1], + match$34 = type_format_gen(fmt_rest$19, fmtty_rest$14), + fmtty$19 = match$34[2], + fmt$19 = match$34[1]; + return [0, [20, width_opt, char_set, fmt$19], fmtty$19]; + } + break; + case 21: + if(typeof fmtty !== "number" && 2 === fmtty[0]){ + var + fmtty_rest$15 = fmtty[1], + fmt_rest$20 = fmt[2], + counter = fmt[1], + match$35 = type_format_gen(fmt_rest$20, fmtty_rest$15), + fmtty$20 = match$35[2], + fmt$20 = match$35[1]; + return [0, [21, counter, fmt$20], fmtty$20]; + } + break; + case 23: + var rest = fmt[2], ign = fmt[1]; + return type_ignored_param(ign, rest, fmtty); + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + } + function type_formatting_gen(formatting_gen, fmt0, fmtty0){ + if(0 === formatting_gen[0]){ + var + match = formatting_gen[1], + str = match[2], + fmt1 = match[1], + match$0 = type_format_gen(fmt1, fmtty0), + fmtty2 = match$0[2], + fmt2 = match$0[1], + match$1 = type_format_gen(fmt0, fmtty2), + fmtty3 = match$1[2], + fmt3 = match$1[1]; + return [0, [18, [0, [0, fmt2, str]], fmt3], fmtty3]; + } + var + match$2 = formatting_gen[1], + str$0 = match$2[2], + fmt1$0 = match$2[1], + match$3 = type_format_gen(fmt1$0, fmtty0), + fmtty2$0 = match$3[2], + fmt2$0 = match$3[1], + match$4 = type_format_gen(fmt0, fmtty2$0), + fmtty3$0 = match$4[2], + fmt3$0 = match$4[1]; + return [0, [18, [1, [0, fmt2$0, str$0]], fmt3$0], fmtty3$0]; + } + function type_ignored_param(ign, fmt, fmtty){ + if(typeof ign !== "number") + switch(ign[0]){ + case 0: + return type_ignored_param_one(ign, fmt, fmtty); + case 1: + return type_ignored_param_one(ign, fmt, fmtty); + case 2: + return type_ignored_param_one(ign, fmt, fmtty); + case 3: + return type_ignored_param_one(ign, fmt, fmtty); + case 4: + return type_ignored_param_one(ign, fmt, fmtty); + case 5: + return type_ignored_param_one(ign, fmt, fmtty); + case 6: + return type_ignored_param_one(ign, fmt, fmtty); + case 7: + return type_ignored_param_one(ign, fmt, fmtty); + case 8: + var sub_fmtty = ign[2], pad_opt = ign[1]; + return type_ignored_param_one([8, pad_opt, sub_fmtty], fmt, fmtty); + case 9: + var + sub_fmtty$0 = ign[2], + pad_opt$0 = ign[1], + _wY_ = type_ignored_format_substituti(sub_fmtty$0, fmt, fmtty), + match$0 = _wY_[2], + fmtty$1 = match$0[2], + fmt$1 = match$0[1], + sub_fmtty$1 = _wY_[1]; + return [0, [23, [9, pad_opt$0, sub_fmtty$1], fmt$1], fmtty$1]; + case 10: + return type_ignored_param_one(ign, fmt, fmtty); + default: return type_ignored_param_one(ign, fmt, fmtty); + } + switch(ign){ + case 0: + return type_ignored_param_one(ign, fmt, fmtty); + case 1: + return type_ignored_param_one(ign, fmt, fmtty); + case 2: + if(typeof fmtty !== "number" && 14 === fmtty[0]){ + var + fmtty_rest = fmtty[1], + match = type_format_gen(fmt, fmtty_rest), + fmtty$0 = match[2], + fmt$0 = match[1]; + return [0, [23, 2, fmt$0], fmtty$0]; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + default: return type_ignored_param_one(ign, fmt, fmtty); + } + } + function type_ignored_param_one(ign, fmt, fmtty){ + var + match = type_format_gen(fmt, fmtty), + fmtty$0 = match[2], + fmt$0 = match[1]; + return [0, [23, ign, fmt$0], fmtty$0]; + } + function type_ignored_format_substituti(sub_fmtty, fmt, fmtty){ + if(typeof sub_fmtty === "number") + return [0, 0, type_format_gen(fmt, fmtty)]; + switch(sub_fmtty[0]){ + case 0: + if(typeof fmtty !== "number" && 0 === fmtty[0]){ + var + fmtty_rest = fmtty[1], + sub_fmtty_rest = sub_fmtty[1], + match = + type_ignored_format_substituti(sub_fmtty_rest, fmt, fmtty_rest), + fmt$0 = match[2], + sub_fmtty_rest$0 = match[1]; + return [0, [0, sub_fmtty_rest$0], fmt$0]; + } + break; + case 1: + if(typeof fmtty !== "number" && 1 === fmtty[0]){ + var + fmtty_rest$0 = fmtty[1], + sub_fmtty_rest$1 = sub_fmtty[1], + match$0 = + type_ignored_format_substituti(sub_fmtty_rest$1, fmt, fmtty_rest$0), + fmt$1 = match$0[2], + sub_fmtty_rest$2 = match$0[1]; + return [0, [1, sub_fmtty_rest$2], fmt$1]; + } + break; + case 2: + if(typeof fmtty !== "number" && 2 === fmtty[0]){ + var + fmtty_rest$1 = fmtty[1], + sub_fmtty_rest$3 = sub_fmtty[1], + match$1 = + type_ignored_format_substituti(sub_fmtty_rest$3, fmt, fmtty_rest$1), + fmt$2 = match$1[2], + sub_fmtty_rest$4 = match$1[1]; + return [0, [2, sub_fmtty_rest$4], fmt$2]; + } + break; + case 3: + if(typeof fmtty !== "number" && 3 === fmtty[0]){ + var + fmtty_rest$2 = fmtty[1], + sub_fmtty_rest$5 = sub_fmtty[1], + match$2 = + type_ignored_format_substituti(sub_fmtty_rest$5, fmt, fmtty_rest$2), + fmt$3 = match$2[2], + sub_fmtty_rest$6 = match$2[1]; + return [0, [3, sub_fmtty_rest$6], fmt$3]; + } + break; + case 4: + if(typeof fmtty !== "number" && 4 === fmtty[0]){ + var + fmtty_rest$3 = fmtty[1], + sub_fmtty_rest$7 = sub_fmtty[1], + match$3 = + type_ignored_format_substituti(sub_fmtty_rest$7, fmt, fmtty_rest$3), + fmt$4 = match$3[2], + sub_fmtty_rest$8 = match$3[1]; + return [0, [4, sub_fmtty_rest$8], fmt$4]; + } + break; + case 5: + if(typeof fmtty !== "number" && 5 === fmtty[0]){ + var + fmtty_rest$4 = fmtty[1], + sub_fmtty_rest$9 = sub_fmtty[1], + match$4 = + type_ignored_format_substituti(sub_fmtty_rest$9, fmt, fmtty_rest$4), + fmt$5 = match$4[2], + sub_fmtty_rest$10 = match$4[1]; + return [0, [5, sub_fmtty_rest$10], fmt$5]; + } + break; + case 6: + if(typeof fmtty !== "number" && 6 === fmtty[0]){ + var + fmtty_rest$5 = fmtty[1], + sub_fmtty_rest$11 = sub_fmtty[1], + match$5 = + type_ignored_format_substituti + (sub_fmtty_rest$11, fmt, fmtty_rest$5), + fmt$6 = match$5[2], + sub_fmtty_rest$12 = match$5[1]; + return [0, [6, sub_fmtty_rest$12], fmt$6]; + } + break; + case 7: + if(typeof fmtty !== "number" && 7 === fmtty[0]){ + var + fmtty_rest$6 = fmtty[1], + sub_fmtty_rest$13 = sub_fmtty[1], + match$6 = + type_ignored_format_substituti + (sub_fmtty_rest$13, fmt, fmtty_rest$6), + fmt$7 = match$6[2], + sub_fmtty_rest$14 = match$6[1]; + return [0, [7, sub_fmtty_rest$14], fmt$7]; + } + break; + case 8: + if(typeof fmtty !== "number" && 8 === fmtty[0]){ + var + fmtty_rest$7 = fmtty[2], + sub2_fmtty = fmtty[1], + sub_fmtty_rest$15 = sub_fmtty[2], + sub2_fmtty$0 = sub_fmtty[1]; + if(caml_notequal([0, sub2_fmtty$0], [0, sub2_fmtty])) + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + var + match$7 = + type_ignored_format_substituti + (sub_fmtty_rest$15, fmt, fmtty_rest$7), + fmt$8 = match$7[2], + sub_fmtty_rest$16 = match$7[1]; + return [0, [8, sub2_fmtty, sub_fmtty_rest$16], fmt$8]; + } + break; + case 9: + if(typeof fmtty !== "number" && 9 === fmtty[0]){ + var + fmtty_rest$8 = fmtty[3], + sub2_fmtty$1 = fmtty[2], + sub1_fmtty = fmtty[1], + sub_fmtty_rest$17 = sub_fmtty[3], + sub2_fmtty$2 = sub_fmtty[2], + sub1_fmtty$0 = sub_fmtty[1], + _wW_ = [0, erase_rel(sub1_fmtty)]; + if(caml_notequal([0, erase_rel(sub1_fmtty$0)], _wW_)) + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + var _wX_ = [0, erase_rel(sub2_fmtty$1)]; + if(caml_notequal([0, erase_rel(sub2_fmtty$2)], _wX_)) + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + var + sub_fmtty$0 = trans(symm(sub1_fmtty), sub2_fmtty$1), + match$8 = fmtty_rel_det(sub_fmtty$0), + f4 = match$8[4], + f2 = match$8[2]; + f2(0); + f4(0); + var + match$9 = + type_ignored_format_substituti + (erase_rel(sub_fmtty_rest$17), fmt, fmtty_rest$8), + fmt$9 = match$9[2], + sub_fmtty_rest$18 = match$9[1]; + return [0, + [9, sub1_fmtty, sub2_fmtty$1, symm(sub_fmtty_rest$18)], + fmt$9]; + } + break; + case 10: + if(typeof fmtty !== "number" && 10 === fmtty[0]){ + var + fmtty_rest$9 = fmtty[1], + sub_fmtty_rest$19 = sub_fmtty[1], + match$10 = + type_ignored_format_substituti + (sub_fmtty_rest$19, fmt, fmtty_rest$9), + fmt$10 = match$10[2], + sub_fmtty_rest$20 = match$10[1]; + return [0, [10, sub_fmtty_rest$20], fmt$10]; + } + break; + case 11: + if(typeof fmtty !== "number" && 11 === fmtty[0]){ + var + fmtty_rest$10 = fmtty[1], + sub_fmtty_rest$21 = sub_fmtty[1], + match$11 = + type_ignored_format_substituti + (sub_fmtty_rest$21, fmt, fmtty_rest$10), + fmt$11 = match$11[2], + sub_fmtty_rest$22 = match$11[1]; + return [0, [11, sub_fmtty_rest$22], fmt$11]; + } + break; + case 13: + if(typeof fmtty !== "number" && 13 === fmtty[0]){ + var + fmtty_rest$11 = fmtty[1], + sub_fmtty_rest$23 = sub_fmtty[1], + match$12 = + type_ignored_format_substituti + (sub_fmtty_rest$23, fmt, fmtty_rest$11), + fmt$12 = match$12[2], + sub_fmtty_rest$24 = match$12[1]; + return [0, [13, sub_fmtty_rest$24], fmt$12]; + } + break; + case 14: + if(typeof fmtty !== "number" && 14 === fmtty[0]){ + var + fmtty_rest$12 = fmtty[1], + sub_fmtty_rest$25 = sub_fmtty[1], + match$13 = + type_ignored_format_substituti + (sub_fmtty_rest$25, fmt, fmtty_rest$12), + fmt$13 = match$13[2], + sub_fmtty_rest$26 = match$13[1]; + return [0, [14, sub_fmtty_rest$26], fmt$13]; + } + break; + } + throw caml_maybe_attach_backtrace(Type_mismatch, 1); + } + function recast(fmt, fmtty){ + return type_format(fmt, erase_rel(symm(fmtty))); + } + function fix_padding(padty, width, str){ + var + len = caml_ml_string_length(str), + padty$0 = 0 <= width ? padty : 0, + width$0 = abs(width); + if(width$0 <= len) return str; + var _wV_ = 2 === padty$0 ? 48 : 32, res = make$0(width$0, _wV_); + switch(padty$0){ + case 0: + blit_string(str, 0, res, 0, len); break; + case 1: + blit_string(str, 0, res, width$0 - len | 0, len); break; + default: + a: + if(0 < len){ + if + (43 !== caml_string_get(str, 0) + && 45 !== caml_string_get(str, 0) && 32 !== caml_string_get(str, 0)) + break a; + caml_bytes_set(res, 0, caml_string_get(str, 0)); + blit_string(str, 1, res, (width$0 - len | 0) + 1 | 0, len - 1 | 0); + break; + } + a: + if(1 < len && 48 === caml_string_get(str, 0)){ + if(120 !== caml_string_get(str, 1) && 88 !== caml_string_get(str, 1)) + break a; + caml_bytes_set(res, 1, caml_string_get(str, 1)); + blit_string(str, 2, res, (width$0 - len | 0) + 2 | 0, len - 2 | 0); + break; + } + blit_string(str, 0, res, width$0 - len | 0, len); + } + return unsafe_to_string(res); + } + function fix_int_precision(prec, str){ + var + prec$0 = abs(prec), + len = caml_ml_string_length(str), + c = caml_string_get(str, 0); + a: + { + b: + { + if(58 > c){ + if(32 !== c){ + if(43 > c) break a; + switch(c - 43 | 0){ + case 5: + c: + if(len < (prec$0 + 2 | 0) && 1 < len){ + if + (120 !== caml_string_get(str, 1) + && 88 !== caml_string_get(str, 1)) + break c; + var res$1 = make$0(prec$0 + 2 | 0, 48); + caml_bytes_set(res$1, 1, caml_string_get(str, 1)); + blit_string + (str, 2, res$1, (prec$0 - len | 0) + 4 | 0, len - 2 | 0); + return unsafe_to_string(res$1); + } + break b; + case 0: + case 2: break; + case 1: + case 3: + case 4: + break a; + default: break b; + } + } + if(len >= (prec$0 + 1 | 0)) break a; + var res$0 = make$0(prec$0 + 1 | 0, 48); + caml_bytes_set(res$0, 0, c); + blit_string(str, 1, res$0, (prec$0 - len | 0) + 2 | 0, len - 1 | 0); + return unsafe_to_string(res$0); + } + if(71 <= c){if(5 < c - 97 >>> 0) break a;} else if(65 > c) break a; + } + if(len < prec$0){ + var res = make$0(prec$0, 48); + blit_string(str, 0, res, prec$0 - len | 0, len); + return unsafe_to_string(res); + } + } + return str; + } + function string_to_caml_string(str){ + var + str$0 = escaped$1(str), + l = caml_ml_string_length(str$0), + res = make$0(l + 2 | 0, 34); + caml_blit_string(str$0, 0, res, 1, l); + return unsafe_to_string(res); + } + function format_of_iconv(param){ + switch(param){ + case 1: + return _aM_; + case 2: + return _aN_; + case 4: + return _aP_; + case 5: + return _aQ_; + case 6: + return _aR_; + case 7: + return _aS_; + case 8: + return _aT_; + case 9: + return _aU_; + case 10: + return _aV_; + case 11: + return _aW_; + case 0: + case 13: + return _aL_; + case 3: + case 14: + return _aO_; + default: return _aX_; + } + } + function format_of_iconvL(param){ + switch(param){ + case 1: + return _aZ_; + case 2: + return _a0_; + case 4: + return _a2_; + case 5: + return _a3_; + case 6: + return _a4_; + case 7: + return _a5_; + case 8: + return _a6_; + case 9: + return _a7_; + case 10: + return _a8_; + case 11: + return _a9_; + case 0: + case 13: + return _aY_; + case 3: + case 14: + return _a1_; + default: return _a__; + } + } + function format_of_iconvl(param){ + switch(param){ + case 1: + return _ba_; + case 2: + return _bb_; + case 4: + return _bd_; + case 5: + return _be_; + case 6: + return _bf_; + case 7: + return _bg_; + case 8: + return _bh_; + case 9: + return _bi_; + case 10: + return _bj_; + case 11: + return _bk_; + case 0: + case 13: + return _a$_; + case 3: + case 14: + return _bc_; + default: return _bl_; + } + } + function format_of_iconvn(param){ + switch(param){ + case 1: + return _bn_; + case 2: + return _bo_; + case 4: + return _bq_; + case 5: + return _br_; + case 6: + return _bs_; + case 7: + return _bt_; + case 8: + return _bu_; + case 9: + return _bv_; + case 10: + return _bw_; + case 11: + return _bx_; + case 0: + case 13: + return _bm_; + case 3: + case 14: + return _bp_; + default: return _by_; + } + } + function format_of_fconv(fconv, prec){ + var + prec$0 = abs(prec), + symb = char_of_fconv(_bz_, fconv), + buf = buffer_create(16); + buffer_add_char(buf, 37); + bprint_fconv_flag(buf, fconv); + buffer_add_char(buf, 46); + buffer_add_string(buf, to_string(prec$0)); + buffer_add_char(buf, symb); + return buffer_contents(buf); + } + function transform_int_alt(iconv, s){ + if(13 > iconv) return s; + var n = [0, 0], _wQ_ = caml_ml_string_length(s) - 1 | 0, _wP_ = 0; + if(_wQ_ >= 0){ + var i$0 = _wP_; + for(;;){ + if(9 >= caml_string_unsafe_get(s, i$0) - 48 >>> 0) n[1]++; + var _wU_ = i$0 + 1 | 0; + if(_wQ_ === i$0) break; + var i$0 = _wU_; + } + } + var + digits = n[1], + buf = + caml_create_bytes + (caml_ml_string_length(s) + ((digits - 1 | 0) / 3 | 0) | 0), + pos = [0, 0]; + function put(c){caml_bytes_set(buf, pos[1], c); pos[1]++; return;} + var + left = [0, ((digits - 1 | 0) % 3 | 0) + 1 | 0], + _wS_ = caml_ml_string_length(s) - 1 | 0, + _wR_ = 0; + if(_wS_ >= 0){ + var i = _wR_; + for(;;){ + var c = caml_string_unsafe_get(s, i); + if(9 < c - 48 >>> 0) + put(c); + else{if(0 === left[1]){put(95); left[1] = 3;} left[1] += -1; put(c);} + var _wT_ = i + 1 | 0; + if(_wS_ === i) break; + var i = _wT_; + } + } + return unsafe_to_string(buf); + } + function convert_int(iconv, n){ + return transform_int_alt + (iconv, caml_format_int(format_of_iconv(iconv), n)); + } + function convert_int32(iconv, n){ + return transform_int_alt + (iconv, caml_format_int(format_of_iconvl(iconv), n)); + } + function convert_nativeint(iconv, n){ + return transform_int_alt + (iconv, caml_format_int(format_of_iconvn(iconv), n)); + } + function convert_int64(iconv, n){ + return transform_int_alt + (iconv, caml_int64_format(format_of_iconvL(iconv), n)); + } + function convert_float(fconv, prec, x){ + function hex(param){ + switch(fconv[1]){ + case 0: + var sign = 45; break; + case 1: + var sign = 43; break; + default: var sign = 32; + } + return caml_hexstring_of_float(x, prec, sign); + } + function add_dot_if_needed(str){ + var len = caml_ml_string_length(str); + function is_valid(i){ + var i$0 = i; + for(;;){ + if(i$0 === len) return 0; + var _wO_ = caml_string_get(str, i$0) - 46 | 0; + a: + { + if(23 < _wO_ >>> 0){ + if(55 === _wO_) break a; + } + else if(21 < _wO_ - 1 >>> 0) break a; + var i$1 = i$0 + 1 | 0, i$0 = i$1; + continue; + } + return 1; + } + } + return is_valid(0) ? str : symbol(str, _bA_); + } + function caml_special_val(str){ + var match = caml_classify_float(x); + return 3 === match ? x < 0. ? _bB_ : _bC_ : 4 <= match ? _bD_ : str; + } + switch(fconv[2]){ + case 5: + var str = caml_format_float(format_of_fconv(fconv, prec), x); + return caml_special_val(add_dot_if_needed(str)); + case 6: + return hex(0); + case 7: + return uppercase_ascii$1(hex(0)); + case 8: + return caml_special_val(hex(0)); + default: return caml_format_float(format_of_fconv(fconv, prec), x); + } + } + function format_caml_char(c){ + var + str = escaped(c), + l = caml_ml_string_length(str), + res = make$0(l + 2 | 0, 39); + caml_blit_string(str, 0, res, 1, l); + return unsafe_to_string(res); + } + function string_of_fmtty(fmtty){ + var buf = buffer_create(16); + bprint_fmtty(buf, fmtty); + return buffer_contents(buf); + } + function make_printf$0(counter, k, acc, fmt){ + var k$0 = k, acc$0 = acc, fmt$0 = fmt; + for(;;){ + if(typeof fmt$0 === "number") return caml_call1(k$0, acc$0); + switch(fmt$0[0]){ + case 0: + var rest = fmt$0[1]; + return function(c){ + var new_acc = [5, acc$0, c]; + return make_printf(k$0, new_acc, rest);}; + case 1: + var rest$0 = fmt$0[1]; + return function(c){ + var new_acc = [4, acc$0, format_caml_char(c)]; + return make_printf(k$0, new_acc, rest$0);}; + case 2: + var rest$1 = fmt$0[2], pad = fmt$0[1]; + return make_padding + (k$0, acc$0, rest$1, pad, function(str){return str;}); + case 3: + var rest$2 = fmt$0[2], pad$0 = fmt$0[1]; + return make_padding(k$0, acc$0, rest$2, pad$0, string_to_caml_string); + case 4: + var + rest$3 = fmt$0[4], + prec = fmt$0[3], + pad$1 = fmt$0[2], + iconv = fmt$0[1]; + return make_int_padding_precision + (k$0, acc$0, rest$3, pad$1, prec, convert_int, iconv); + case 5: + var + rest$4 = fmt$0[4], + prec$0 = fmt$0[3], + pad$2 = fmt$0[2], + iconv$0 = fmt$0[1]; + return make_int_padding_precision + (k$0, acc$0, rest$4, pad$2, prec$0, convert_int32, iconv$0); + case 6: + var + rest$5 = fmt$0[4], + prec$1 = fmt$0[3], + pad$3 = fmt$0[2], + iconv$1 = fmt$0[1]; + return make_int_padding_precision + (k$0, + acc$0, + rest$5, + pad$3, + prec$1, + convert_nativeint, + iconv$1); + case 7: + var + rest$6 = fmt$0[4], + prec$2 = fmt$0[3], + pad$4 = fmt$0[2], + iconv$2 = fmt$0[1]; + return make_int_padding_precision + (k$0, acc$0, rest$6, pad$4, prec$2, convert_int64, iconv$2); + case 8: + var + rest$7 = fmt$0[4], + prec$3 = fmt$0[3], + pad$5 = fmt$0[2], + fconv = fmt$0[1]; + return make_float_padding_precision + (k$0, acc$0, rest$7, pad$5, prec$3, fconv); + case 9: + var rest$8 = fmt$0[2], pad$6 = fmt$0[1]; + return make_padding(k$0, acc$0, rest$8, pad$6, string_of_bool); + case 10: + var + rest$9 = fmt$0[1], + acc$1 = [7, acc$0], + acc$0 = acc$1, + fmt$0 = rest$9; + break; + case 11: + var + rest$10 = fmt$0[2], + str = fmt$0[1], + acc$2 = [2, acc$0, str], + acc$0 = acc$2, + fmt$0 = rest$10; + break; + case 12: + var + rest$11 = fmt$0[2], + chr = fmt$0[1], + acc$3 = [3, acc$0, chr], + acc$0 = acc$3, + fmt$0 = rest$11; + break; + case 13: + var + rest$12 = fmt$0[3], + sub_fmtty = fmt$0[2], + ty = string_of_fmtty(sub_fmtty); + return function(str){ + return make_printf(k$0, [4, acc$0, ty], rest$12);}; + case 14: + var rest$13 = fmt$0[3], fmtty = fmt$0[2]; + return function(param){ + var fmt = param[1]; + return make_printf + (k$0, acc$0, concat_fmt(recast(fmt, fmtty), rest$13));}; + case 15: + var rest$14 = fmt$0[1]; + return function(f, x){ + return make_printf + (k$0, + [6, acc$0, function(o){return caml_call2(f, o, x);}], + rest$14);}; + case 16: + var rest$15 = fmt$0[1]; + return function(f){return make_printf(k$0, [6, acc$0, f], rest$15);}; + case 17: + var + rest$16 = fmt$0[2], + fmting_lit = fmt$0[1], + acc$4 = [0, acc$0, fmting_lit], + acc$0 = acc$4, + fmt$0 = rest$16; + break; + case 18: + var _wM_ = fmt$0[1]; + if(0 === _wM_[0]){ + var rest$17 = fmt$0[2], fmt$1 = _wM_[1][1]; + let acc = acc$0, k = k$0, rest = rest$17; + var + k$1 = + function(kacc){return make_printf(k, [1, acc, [0, kacc]], rest);}, + k$0 = k$1, + acc$0 = 0, + fmt$0 = fmt$1; + } + else{ + var rest$18 = fmt$0[2], fmt$2 = _wM_[1][1]; + let acc = acc$0, k = k$0, rest = rest$18; + var + k$2 = + function(kacc){return make_printf(k, [1, acc, [1, kacc]], rest);}, + k$0 = k$2, + acc$0 = 0, + fmt$0 = fmt$2; + } + break; + case 19: + throw caml_maybe_attach_backtrace([0, Assert_failure, _bE_], 1); + case 20: + var rest$19 = fmt$0[3], new_acc = [8, acc$0, _bF_]; + return function(param){return make_printf(k$0, new_acc, rest$19);}; + case 21: + var rest$20 = fmt$0[2]; + return function(n){ + var new_acc = [4, acc$0, caml_format_int(cst_u, n)]; + return make_printf(k$0, new_acc, rest$20);}; + case 22: + var rest$21 = fmt$0[1]; + return function(c){ + var new_acc = [5, acc$0, c]; + return make_printf(k$0, new_acc, rest$21);}; + case 23: + var rest$22 = fmt$0[2], ign = fmt$0[1]; + if(counter >= 50) + return caml_trampoline_return + (make_ignored_param, [0, k$0, acc$0, ign, rest$22]); + var counter$1 = counter + 1 | 0; + return make_ignored_param(counter$1, k$0, acc$0, ign, rest$22); + default: + var + rest$23 = fmt$0[3], + f = fmt$0[2], + arity = fmt$0[1], + _wN_ = caml_call1(f, 0); + if(counter >= 50) + return caml_trampoline_return + (make_custom$0, [0, k$0, acc$0, rest$23, arity, _wN_]); + var counter$0 = counter + 1 | 0; + return make_custom$0(counter$0, k$0, acc$0, rest$23, arity, _wN_); + } + } + } + function make_printf(k, acc, fmt){ + return caml_trampoline(make_printf$0(0, k, acc, fmt)); + } + function make_ignored_param(counter, k, acc, ign, fmt){ + if(typeof ign === "number") + switch(ign){ + case 0: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$0 = counter + 1 | 0; + return make_invalid_arg(counter$0, k, acc, fmt); + case 1: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$1 = counter + 1 | 0; + return make_invalid_arg(counter$1, k, acc, fmt); + case 2: + throw caml_maybe_attach_backtrace([0, Assert_failure, _bG_], 1); + default: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$2 = counter + 1 | 0; + return make_invalid_arg(counter$2, k, acc, fmt); + } + switch(ign[0]){ + case 0: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$3 = counter + 1 | 0; + return make_invalid_arg(counter$3, k, acc, fmt); + case 1: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$4 = counter + 1 | 0; + return make_invalid_arg(counter$4, k, acc, fmt); + case 2: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$5 = counter + 1 | 0; + return make_invalid_arg(counter$5, k, acc, fmt); + case 3: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$6 = counter + 1 | 0; + return make_invalid_arg(counter$6, k, acc, fmt); + case 4: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$7 = counter + 1 | 0; + return make_invalid_arg(counter$7, k, acc, fmt); + case 5: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$8 = counter + 1 | 0; + return make_invalid_arg(counter$8, k, acc, fmt); + case 6: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$9 = counter + 1 | 0; + return make_invalid_arg(counter$9, k, acc, fmt); + case 7: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$10 = counter + 1 | 0; + return make_invalid_arg(counter$10, k, acc, fmt); + case 8: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$11 = counter + 1 | 0; + return make_invalid_arg(counter$11, k, acc, fmt); + case 9: + var fmtty = ign[2]; + if(counter >= 50) + return caml_trampoline_return + (make_from_fmtty$0, [0, k, acc, fmtty, fmt]); + var counter$14 = counter + 1 | 0; + return make_from_fmtty$0(counter$14, k, acc, fmtty, fmt); + case 10: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$12 = counter + 1 | 0; + return make_invalid_arg(counter$12, k, acc, fmt); + default: + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$13 = counter + 1 | 0; + return make_invalid_arg(counter$13, k, acc, fmt); + } + } + function make_from_fmtty$0(counter, k, acc, fmtty, fmt){ + if(typeof fmtty !== "number") + switch(fmtty[0]){ + case 0: + var rest = fmtty[1]; + return function(param){return make_from_fmtty(k, acc, rest, fmt);}; + case 1: + var rest$0 = fmtty[1]; + return function(param){return make_from_fmtty(k, acc, rest$0, fmt);}; + case 2: + var rest$1 = fmtty[1]; + return function(param){return make_from_fmtty(k, acc, rest$1, fmt);}; + case 3: + var rest$2 = fmtty[1]; + return function(param){return make_from_fmtty(k, acc, rest$2, fmt);}; + case 4: + var rest$3 = fmtty[1]; + return function(param){return make_from_fmtty(k, acc, rest$3, fmt);}; + case 5: + var rest$4 = fmtty[1]; + return function(param){return make_from_fmtty(k, acc, rest$4, fmt);}; + case 6: + var rest$5 = fmtty[1]; + return function(param){return make_from_fmtty(k, acc, rest$5, fmt);}; + case 7: + var rest$6 = fmtty[1]; + return function(param){return make_from_fmtty(k, acc, rest$6, fmt);}; + case 8: + var rest$7 = fmtty[2]; + return function(param){return make_from_fmtty(k, acc, rest$7, fmt);}; + case 9: + var + rest$8 = fmtty[3], + ty2 = fmtty[2], + ty1 = fmtty[1], + ty = trans(symm(ty1), ty2); + return function(param){ + return make_from_fmtty(k, acc, concat_fmtty(ty, rest$8), fmt);}; + case 10: + var rest$9 = fmtty[1]; + return function(param, _wL_){ + return make_from_fmtty(k, acc, rest$9, fmt);}; + case 11: + var rest$10 = fmtty[1]; + return function(param){return make_from_fmtty(k, acc, rest$10, fmt);}; + case 12: + var rest$11 = fmtty[1]; + return function(param){return make_from_fmtty(k, acc, rest$11, fmt);}; + case 13: + throw caml_maybe_attach_backtrace([0, Assert_failure, _bH_], 1); + default: + throw caml_maybe_attach_backtrace([0, Assert_failure, _bI_], 1); + } + if(counter >= 50) + return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); + var counter$0 = counter + 1 | 0; + return make_invalid_arg(counter$0, k, acc, fmt); + } + function make_from_fmtty(k, acc, fmtty, fmt){ + return caml_trampoline(make_from_fmtty$0(0, k, acc, fmtty, fmt)); + } + function make_invalid_arg(counter, k, acc, fmt){ + var _wK_ = [8, acc, _bJ_]; + if(counter >= 50) + return caml_trampoline_return(make_printf$0, [0, k, _wK_, fmt]); + var counter$0 = counter + 1 | 0; + return make_printf$0(counter$0, k, _wK_, fmt); + } + function make_padding(k, acc, fmt, pad, trans){ + if(typeof pad === "number") + return function(x){ + var new_acc = [4, acc, caml_call1(trans, x)]; + return make_printf(k, new_acc, fmt);}; + if(0 === pad[0]){ + var width = pad[2], padty = pad[1]; + return function(x){ + var new_acc = [4, acc, fix_padding(padty, width, caml_call1(trans, x))]; + return make_printf(k, new_acc, fmt);}; + } + var padty$0 = pad[1]; + return function(w, x){ + var new_acc = [4, acc, fix_padding(padty$0, w, caml_call1(trans, x))]; + return make_printf(k, new_acc, fmt);}; + } + function make_int_padding_precision(k, acc, fmt, pad, prec, trans, iconv){ + if(typeof pad === "number"){ + if(typeof prec === "number") + return prec + ? function + (p, x){ + var str = fix_int_precision(p, caml_call2(trans, iconv, x)); + return make_printf(k, [4, acc, str], fmt); + } + : function + (x){ + var str = caml_call2(trans, iconv, x); + return make_printf(k, [4, acc, str], fmt); + }; + var p = prec[1]; + return function(x){ + var str = fix_int_precision(p, caml_call2(trans, iconv, x)); + return make_printf(k, [4, acc, str], fmt);}; + } + if(0 === pad[0]){ + var w = pad[2], padty = pad[1]; + if(typeof prec === "number") + return prec + ? function + (p, x){ + var + str = + fix_padding + (padty, + w, + fix_int_precision(p, caml_call2(trans, iconv, x))); + return make_printf(k, [4, acc, str], fmt); + } + : function + (x){ + var str = fix_padding(padty, w, caml_call2(trans, iconv, x)); + return make_printf(k, [4, acc, str], fmt); + }; + var p$0 = prec[1]; + return function(x){ + var + str = + fix_padding + (padty, w, fix_int_precision(p$0, caml_call2(trans, iconv, x))); + return make_printf(k, [4, acc, str], fmt);}; + } + var padty$0 = pad[1]; + if(typeof prec === "number") + return prec + ? function + (w, p, x){ + var + str = + fix_padding + (padty$0, + w, + fix_int_precision(p, caml_call2(trans, iconv, x))); + return make_printf(k, [4, acc, str], fmt); + } + : function + (w, x){ + var str = fix_padding(padty$0, w, caml_call2(trans, iconv, x)); + return make_printf(k, [4, acc, str], fmt); + }; + var p$1 = prec[1]; + return function(w, x){ + var + str = + fix_padding + (padty$0, w, fix_int_precision(p$1, caml_call2(trans, iconv, x))); + return make_printf(k, [4, acc, str], fmt);}; + } + function make_float_padding_precision(k, acc, fmt, pad, prec, fconv){ + if(typeof pad === "number"){ + if(typeof prec === "number") + return prec + ? function + (p, x){ + var str = convert_float(fconv, p, x); + return make_printf(k, [4, acc, str], fmt); + } + : function + (x){ + var + str = convert_float(fconv, default_float_precision(fconv), x); + return make_printf(k, [4, acc, str], fmt); + }; + var p = prec[1]; + return function(x){ + var str = convert_float(fconv, p, x); + return make_printf(k, [4, acc, str], fmt);}; + } + if(0 === pad[0]){ + var w = pad[2], padty = pad[1]; + if(typeof prec === "number") + return prec + ? function + (p, x){ + var str = fix_padding(padty, w, convert_float(fconv, p, x)); + return make_printf(k, [4, acc, str], fmt); + } + : function + (x){ + var + str = convert_float(fconv, default_float_precision(fconv), x), + str$0 = fix_padding(padty, w, str); + return make_printf(k, [4, acc, str$0], fmt); + }; + var p$0 = prec[1]; + return function(x){ + var str = fix_padding(padty, w, convert_float(fconv, p$0, x)); + return make_printf(k, [4, acc, str], fmt);}; + } + var padty$0 = pad[1]; + if(typeof prec === "number") + return prec + ? function + (w, p, x){ + var str = fix_padding(padty$0, w, convert_float(fconv, p, x)); + return make_printf(k, [4, acc, str], fmt); + } + : function + (w, x){ + var + str = convert_float(fconv, default_float_precision(fconv), x), + str$0 = fix_padding(padty$0, w, str); + return make_printf(k, [4, acc, str$0], fmt); + }; + var p$1 = prec[1]; + return function(w, x){ + var str = fix_padding(padty$0, w, convert_float(fconv, p$1, x)); + return make_printf(k, [4, acc, str], fmt);}; + } + function make_custom$0(counter, k, acc, rest, arity, f){ + if(arity){ + var arity$0 = arity[1]; + return function(x){ + return make_custom(k, acc, rest, arity$0, caml_call1(f, x));}; + } + var _wJ_ = [4, acc, f]; + if(counter >= 50) + return caml_trampoline_return(make_printf$0, [0, k, _wJ_, rest]); + var counter$0 = counter + 1 | 0; + return make_printf$0(counter$0, k, _wJ_, rest); + } + function make_custom(k, acc, rest, arity, f){ + return caml_trampoline(make_custom$0(0, k, acc, rest, arity, f)); + } + function output_acc(o, acc){ + var acc$0 = acc; + for(;;){ + if(typeof acc$0 === "number") return; + switch(acc$0[0]){ + case 0: + var + fmting_lit = acc$0[2], + p = acc$0[1], + s = string_of_formatting_lit(fmting_lit); + output_acc(o, p); + return output_string(o, s); + case 1: + var match = acc$0[2], p$0 = acc$0[1]; + if(0 === match[0]){ + var acc$1 = match[1]; + output_acc(o, p$0); + output_string(o, _bK_); + var acc$0 = acc$1; + } + else{ + var acc$2 = match[1]; + output_acc(o, p$0); + output_string(o, _bL_); + var acc$0 = acc$2; + } + break; + case 6: + var f = acc$0[2], p$3 = acc$0[1]; + output_acc(o, p$3); + return caml_call1(f, o); + case 7: + var p$4 = acc$0[1]; output_acc(o, p$4); return _k_(o); + case 8: + var msg = acc$0[2], p$5 = acc$0[1]; + output_acc(o, p$5); + return invalid_arg(msg); + case 2: + case 4: + var s$0 = acc$0[2], p$1 = acc$0[1]; + output_acc(o, p$1); + return output_string(o, s$0); + default: + var c = acc$0[2], p$2 = acc$0[1]; + output_acc(o, p$2); + return _j_(o, c); + } + } + } + function strput_acc(b, acc){ + var acc$0 = acc; + for(;;){ + if(typeof acc$0 === "number") return; + switch(acc$0[0]){ + case 0: + var + fmting_lit = acc$0[2], + p = acc$0[1], + s = string_of_formatting_lit(fmting_lit); + strput_acc(b, p); + return add_string(b, s); + case 1: + var match = acc$0[2], p$0 = acc$0[1]; + if(0 === match[0]){ + var acc$1 = match[1]; + strput_acc(b, p$0); + add_string(b, _bM_); + var acc$0 = acc$1; + } + else{ + var acc$2 = match[1]; + strput_acc(b, p$0); + add_string(b, _bN_); + var acc$0 = acc$2; + } + break; + case 6: + var f = acc$0[2], p$3 = acc$0[1]; + strput_acc(b, p$3); + return add_string(b, caml_call1(f, 0)); + case 7: + var acc$3 = acc$0[1], acc$0 = acc$3; break; + case 8: + var msg = acc$0[2], p$4 = acc$0[1]; + strput_acc(b, p$4); + return invalid_arg(msg); + case 2: + case 4: + var s$0 = acc$0[2], p$1 = acc$0[1]; + strput_acc(b, p$1); + return add_string(b, s$0); + default: + var c = acc$0[2], p$2 = acc$0[1]; + strput_acc(b, p$2); + return add_char(b, c); + } + } + } + function failwith_message(param){ + var fmt = param[1], buf = create$1(256); + function k(acc){strput_acc(buf, acc); return failwith(contents(buf));} + return make_printf(k, 0, fmt); + } + function open_box_of_string(str){ + if(caml_string_equal(str, cst$1)) return _bO_; + var len = caml_ml_string_length(str); + function invalid_box(param){ + return caml_call1(failwith_message(_bP_), str); + } + function parse_spaces(i){ + var i$0 = i; + for(;;){ + if(i$0 === len) return i$0; + var match = caml_string_get(str, i$0); + if(9 !== match && 32 !== match) return i$0; + var i$1 = i$0 + 1 | 0, i$0 = i$1; + } + } + function parse_lword(i, j){ + var j$0 = j; + for(;;){ + if(j$0 === len) return j$0; + if(25 < caml_string_get(str, j$0) - 97 >>> 0) return j$0; + var j$1 = j$0 + 1 | 0, j$0 = j$1; + } + } + function parse_int(i, j){ + var j$0 = j; + for(;;){ + if(j$0 === len) return j$0; + var match = caml_string_get(str, j$0); + a: + { + if(48 <= match){if(58 > match) break a;} else if(45 === match) break a; + return j$0; + } + var j$1 = j$0 + 1 | 0, j$0 = j$1; + } + } + var + wstart = parse_spaces(0), + wend = parse_lword(wstart, wstart), + box_name = sub$0(str, wstart, wend - wstart | 0), + nstart = parse_spaces(wend), + nend = parse_int(nstart, nstart); + if(nstart === nend) + var indent = 0; + else + try{ + var + _wH_ = caml_int_of_string(sub$0(str, nstart, nend - nstart | 0)), + indent = _wH_; + } + catch(_wI_){ + var _wF_ = caml_wrap_exception(_wI_); + if(_wF_[1] !== Failure) throw caml_maybe_attach_backtrace(_wF_, 0); + var _wG_ = invalid_box(0), indent = _wG_; + } + var exp_end = parse_spaces(nend); + if(exp_end !== len) invalid_box(0); + a: + { + if + (caml_string_notequal(box_name, cst$1) + && caml_string_notequal(box_name, "b")){ + if(! caml_string_notequal(box_name, "h")){var box_type = 0; break a;} + if(! caml_string_notequal(box_name, "hov")){var box_type = 3; break a;} + if(! caml_string_notequal(box_name, "hv")){var box_type = 2; break a;} + if(caml_string_notequal(box_name, "v")){ + var box_type = invalid_box(0); + break a; + } + var box_type = 1; + break a; + } + var box_type = 4; + } + return [0, indent, box_type]; + } + function kfprintf(k, o, param){ + var fmt = param[1]; + return make_printf + (function(acc){output_acc(o, acc); return caml_call1(k, o);}, + 0, + fmt); + } + function fprintf(oc, fmt){ + return kfprintf(function(_wE_){return 0;}, oc, fmt); + } + function eprintf(fmt){return fprintf(stderr, fmt);} + function ksprintf(k, param){ + var fmt = param[1]; + function k$0(acc){ + var buf = create$1(64); + strput_acc(buf, acc); + return caml_call1(k, contents(buf)); + } + return make_printf(k$0, 0, fmt); + } + function sprintf(fmt){return ksprintf(function(s){return s;}, fmt);} + var printers = make(0); + function field(x, i){ + var f = x[1 + i]; + return is_block(f) + ? caml_obj_tag + (f) + === 252 + ? caml_call1(sprintf(_bQ_), f) + : caml_obj_tag(f) === 253 ? string_of_float(f) : _bR_ + : caml_call1(sprintf(_bS_), f); + } + function other_fields(x, i){ + if(x.length - 1 <= i) return _bT_; + var _wC_ = other_fields(x, i + 1 | 0), _wD_ = field(x, i); + return caml_call2(sprintf(_bU_), _wD_, _wC_); + } + function fields(x){ + var match = x.length - 1; + if(2 >= match >>> 0) + switch(match){ + case 0: + return _bW_; + case 1: + return _bX_; + default: + var _wB_ = field(x, 1); return caml_call1(sprintf(_bY_), _wB_); + } + var _wz_ = other_fields(x, 2), _wA_ = field(x, 1); + return caml_call2(sprintf(_bV_), _wA_, _wz_); + } + function use_printers(x){ + function conv(param){ + var param$0 = param; + for(;;){ + if(! param$0) return 0; + var tl = param$0[2], hd = param$0[1]; + a: + { + try{var val = caml_call1(hd, x);}catch(_wy_){break a;} + if(val){var s = val[1]; return [0, s];} + } + var param$0 = tl; + } + } + return conv(get(printers)); + } + function to_string_default(x){ + if(x === Out_of_memory) return _bZ_; + if(x === Stack_overflow) return _b0_; + if(x[1] === Match_failure){ + var match = x[2], char$0 = match[3], line = match[2], file = match[1]; + return caml_call5 + (sprintf(locfmt), file, line, char$0, char$0 + 5 | 0, _b1_); + } + if(x[1] === Assert_failure){ + var + match$0 = x[2], + char$1 = match$0[3], + line$0 = match$0[2], + file$0 = match$0[1]; + return caml_call5 + (sprintf(locfmt), file$0, line$0, char$1, char$1 + 6 | 0, _b2_); + } + if(x[1] === Undefined_recursive_module){ + var + match$1 = x[2], + char$2 = match$1[3], + line$1 = match$1[2], + file$1 = match$1[1]; + return caml_call5 + (sprintf(locfmt), file$1, line$1, char$2, char$2 + 6 | 0, _b3_); + } + if(0 !== caml_obj_tag(x)) return x[1]; + var constructor = x[1][1]; + return symbol(constructor, fields(x)); + } + function to_string$0(e){ + var match = use_printers(e); + if(! match) return to_string_default(e); + var s = match[1]; + return s; + } + function convert_raw_backtrace(bt){ + var _wx_ = [0, caml_convert_raw_backtrace(bt)]; + return _wx_; + } + function format_backtrace_slot(pos, slot){ + function info(is_raise){ + return is_raise ? 0 === pos ? _b4_ : _b5_ : 0 === pos ? _b6_ : _b7_; + } + if(0 === slot[0]){ + var + _wp_ = slot[5], + _wq_ = slot[4], + _wr_ = slot[3], + _ws_ = slot[6] ? _b8_ : _b__, + _wt_ = slot[2], + _wu_ = slot[7], + _wv_ = info(slot[1]); + return [0, + caml_call7 + (sprintf(_b9_), _wv_, _wu_, _wt_, _ws_, _wr_, _wq_, _wp_)]; + } + if(slot[1]) return 0; + var _ww_ = info(0); + return [0, caml_call1(sprintf(_b$_), _ww_)]; + } + function print_exception_backtrace(outchan, backtrace){ + if(! backtrace) return fprintf(outchan, _cb_); + var a = backtrace[1], _wn_ = a.length - 1 - 1 | 0, _wm_ = 0; + if(_wn_ >= 0){ + var i = _wm_; + for(;;){ + var match = format_backtrace_slot(i, caml_check_bound(a, i)[1 + i]); + if(match){var str = match[1]; caml_call1(fprintf(outchan, _ca_), str);} + var _wo_ = i + 1 | 0; + if(_wn_ === i) break; + var i = _wo_; + } + } + return 0; + } + function print_raw_backtrace(outchan, raw_backtrace){ + return print_exception_backtrace + (outchan, convert_raw_backtrace(raw_backtrace)); + } + function register_printer(fn){ + for(;;){ + var + old_printers = get(printers), + new_printers = [0, fn, old_printers], + success = compare_and_set(printers, old_printers, new_printers), + _wl_ = 1 - success; + if(! _wl_) return _wl_; + } + } + var errors = _cc_.slice(); + function default_uncaught_exception_han(exn, raw_backtrace){ + var _wj_ = to_string$0(exn); + caml_call1(eprintf(_cd_), _wj_); + print_raw_backtrace(stderr, raw_backtrace); + var status = caml_ml_debug_info_status(0); + if(status < 0){ + var _wk_ = abs(status); + prerr_endline(caml_check_bound(errors, _wk_)[1 + _wk_]); + } + return _k_(stderr); + } + var empty_backtrace = [0]; + function try_get_raw_backtrace(param){ + var _wi_ = caml_get_exception_raw_backtrace(0); + return _wi_; + } + function handle_uncaught_exception(exn, debugger_in_use){ + try{ + var + raw_backtrace = + debugger_in_use ? empty_backtrace : try_get_raw_backtrace(0); + try{do_at_exit(0);}catch(_wh_){} + try{ + var + _wf_ = default_uncaught_exception_han(exn, raw_backtrace), + _we_ = _wf_; + } + catch(exn$1){ + var + exn$0 = caml_wrap_exception(exn$1), + raw_backtrace$0 = try_get_raw_backtrace(0), + _wc_ = to_string$0(exn); + caml_call1(eprintf(_cf_), _wc_); + print_raw_backtrace(stderr, raw_backtrace); + var _wd_ = to_string$0(exn$0); + caml_call1(eprintf(_cg_), _wd_); + print_raw_backtrace(stderr, raw_backtrace$0); + var _we_ = _k_(stderr); + } + return _we_; + } + catch(_wg_){ + var _wb_ = caml_wrap_exception(_wg_); + if(_wb_ === Out_of_memory) return prerr_endline(_ce_); + throw caml_maybe_attach_backtrace(_wb_, 0); + } + } + function handle_uncaught_exception$0(exn, debugger_in_use){ + try{ + var _v$_ = handle_uncaught_exception(exn, debugger_in_use); + return _v$_; + } + catch(_wa_){return 0;} + } + caml_register_named_value + ("Printexc.handle_uncaught_exception", handle_uncaught_exception$0); + function _ch_(_v__){return caml_get_exception_raw_backtrace(_v__);} + var Finally_raised = [248, _ci_, caml_fresh_oo_id(0)]; + register_printer + (function(param){ + if(param[1] !== Finally_raised) return 0; + var exn = param[2]; + return [0, symbol(_cj_, to_string$0(exn))]; + }); + function string(str){ + return caml_md5_string(str, 0, caml_ml_string_length(str)); + } + function new_state(param){return [0, caml_make_vect(55, 0), 0];} + function assign(st1, st2){ + blit$0(st2[1], 0, st1[1], 0, 55); + st1[2] = st2[2]; + return; + } + function full_init(s, seed){ + function combine(accu, x){return string(symbol(accu, to_string(x)));} + function extract(d){ + var + _v7_ = caml_string_get(d, 3) << 24, + _v8_ = caml_string_get(d, 2) << 16, + _v9_ = caml_string_get(d, 1) << 8; + return ((caml_string_get(d, 0) + _v9_ | 0) + _v8_ | 0) + _v7_ | 0; + } + var + seed$0 = 0 === seed.length - 1 ? [0, 0] : seed, + l = seed$0.length - 1, + i$0 = 0; + for(;;){ + caml_check_bound(s[1], i$0)[1 + i$0] = i$0; + var _v6_ = i$0 + 1 | 0; + if(54 === i$0) break; + var i$0 = _v6_; + } + var accu = [0, _ck_], _v1_ = 54 + max$0(55, l) | 0, _v0_ = 0; + if(_v1_ >= 0){ + var i = _v0_; + for(;;){ + var + j = i % 55 | 0, + k = caml_mod(i, l), + _v2_ = caml_check_bound(seed$0, k)[1 + k]; + accu[1] = combine(accu[1], _v2_); + var + _v3_ = extract(accu[1]), + _v4_ = (caml_check_bound(s[1], j)[1 + j] ^ _v3_) & 1073741823; + caml_check_bound(s[1], j)[1 + j] = _v4_; + var _v5_ = i + 1 | 0; + if(_v1_ === i) break; + var i = _v5_; + } + } + s[2] = 0; + return; + } + function make$2(seed){ + var result = new_state(0); + full_init(result, seed); + return result; + } + function make_self_init(param){return make$2(caml_sys_random_seed(0));} + function copy$0(s){ + var result = new_state(0); + assign(result, s); + return result; + } + function bits(s){ + s[2] = (s[2] + 1 | 0) % 55 | 0; + var + _vX_ = s[2], + curval = caml_check_bound(s[1], _vX_)[1 + _vX_], + _vY_ = (s[2] + 24 | 0) % 55 | 0, + newval = + caml_check_bound(s[1], _vY_)[1 + _vY_] + + (curval ^ (curval >>> 25 | 0) & 31) + | 0, + newval30 = newval & 1073741823, + _vZ_ = s[2]; + caml_check_bound(s[1], _vZ_)[1 + _vZ_] = newval30; + return newval30; + } + var default$0 = [0, _cl_.slice(), 0]; + function get_state(param){return copy$0(default$0);} + function ongoing_traversal(h){ + var _vV_ = h.length - 1 < 4 ? 1 : 0, _vW_ = _vV_ || (h[4] < 0 ? 1 : 0); + return _vW_; + } + try{var _k3_ = caml_sys_getenv("OCAMLRUNPARAM"), params = _k3_;} + catch(_vT_){ + var _cm_ = caml_wrap_exception(_vT_); + if(_cm_ !== Not_found) throw caml_maybe_attach_backtrace(_cm_, 0); + try{var _k2_ = caml_sys_getenv("CAMLRUNPARAM"), _cp_ = _k2_;} + catch(_vU_){ + var _cn_ = caml_wrap_exception(_vU_); + if(_cn_ !== Not_found) throw caml_maybe_attach_backtrace(_cn_, 0); + var _cp_ = _co_; + } + var params = _cp_; + } + var + randomized_default = contains(params, 82), + prng = [246, function(_vS_){return make_self_init(0);}]; + function power_2_above(x, n){ + var x$0 = x; + for(;;){ + if(n <= x$0) return x$0; + if(max_array_length < (x$0 * 2 | 0)) return x$0; + var x$1 = x$0 * 2 | 0, x$0 = x$1; + } + } + function create$2(opt, initial_size){ + if(opt) + var sth = opt[1], random = sth; + else + var random = randomized_default; + var s = power_2_above(16, initial_size); + if(random) + var + _vQ_ = caml_obj_tag(prng), + _vR_ = + 250 === _vQ_ ? prng[1] : 246 === _vQ_ ? force_lazy_block(prng) : prng, + seed = bits(_vR_); + else + var seed = 0; + return [0, 0, caml_make_vect(s, 0), seed, s]; + } + function clear$1(h){ + var _vP_ = 0 < h[1] ? 1 : 0; + return _vP_ ? (h[1] = 0, fill(h[2], 0, h[2].length - 1, 0)) : _vP_; + } + function insert_all_buckets(indexfun, inplace, odata, ndata){ + var nsize = ndata.length - 1, ndata_tail = caml_make_vect(nsize, 0); + function insert_bucket(cell){ + var cell$0 = cell; + for(;;){ + if(! cell$0) return; + var + key = cell$0[1], + data = cell$0[2], + next = cell$0[3], + cell$1 = inplace ? cell$0 : [0, key, data, 0], + nidx = caml_call1(indexfun, key), + match = caml_check_bound(ndata_tail, nidx)[1 + nidx]; + if(match) + match[3] = cell$1; + else + caml_check_bound(ndata, nidx)[1 + nidx] = cell$1; + caml_check_bound(ndata_tail, nidx)[1 + nidx] = cell$1; + var cell$0 = next; + } + } + var _vK_ = odata.length - 1 - 1 | 0, _vJ_ = 0; + if(_vK_ >= 0){ + var i$0 = _vJ_; + for(;;){ + insert_bucket(caml_check_bound(odata, i$0)[1 + i$0]); + var _vO_ = i$0 + 1 | 0; + if(_vK_ === i$0) break; + var i$0 = _vO_; + } + } + if(inplace){ + var _vM_ = nsize - 1 | 0, _vL_ = 0; + if(_vM_ >= 0){ + var i = _vL_; + for(;;){ + var match = caml_check_bound(ndata_tail, i)[1 + i]; + if(match) match[3] = 0; + var _vN_ = i + 1 | 0; + if(_vM_ === i) break; + var i = _vN_; + } + } + } + return; + } + function resize$0(indexfun, h){ + var + odata = h[2], + osize = odata.length - 1, + nsize = osize * 2 | 0, + _vI_ = nsize < max_array_length ? 1 : 0; + if(! _vI_) return _vI_; + var ndata = caml_make_vect(nsize, 0), inplace = 1 - ongoing_traversal(h); + h[2] = ndata; + return insert_all_buckets(caml_call1(indexfun, h), inplace, odata, ndata); + } + function key_index(h, key){ + return 4 <= h.length - 1 + ? caml_hash(10, 100, h[3], key) & (h[2].length - 1 - 1 | 0) + : invalid_arg(_cq_); + } + function add$0(h, key, data){ + var + i = key_index(h, key), + bucket = [0, key, data, caml_check_bound(h[2], i)[1 + i]]; + caml_check_bound(h[2], i)[1 + i] = bucket; + h[1] = h[1] + 1 | 0; + var _vH_ = h[2].length - 1 << 1 < h[1] ? 1 : 0; + return _vH_ ? resize$0(key_index, h) : _vH_; + } + function remove_bucket(h, i, key, prec, c){ + var prec$1 = prec, prec$0 = c; + for(;;){ + if(! prec$0) return; + var k = prec$0[1], next = prec$0[3]; + if(0 === caml_compare(k, key)){ + h[1] = h[1] - 1 | 0; + if(prec$1){prec$1[3] = next; return;} + caml_check_bound(h[2], i)[1 + i] = next; + return; + } + var prec$1 = prec$0, prec$0 = next; + } + } + function remove(h, key){ + var i = key_index(h, key); + return remove_bucket(h, i, key, 0, caml_check_bound(h[2], i)[1 + i]); + } + function find_rec(key, param){ + var param$0 = param; + for(;;){ + if(! param$0) throw caml_maybe_attach_backtrace(Not_found, 1); + var k = param$0[1], data = param$0[2], next = param$0[3]; + if(0 === caml_compare(key, k)) return data; + var param$0 = next; + } + } + function find(h, key){ + var + _vG_ = key_index(h, key), + match = caml_check_bound(h[2], _vG_)[1 + _vG_]; + if(! match) throw caml_maybe_attach_backtrace(Not_found, 1); + var k1 = match[1], d1 = match[2], next1 = match[3]; + if(0 === caml_compare(key, k1)) return d1; + if(! next1) throw caml_maybe_attach_backtrace(Not_found, 1); + var k2 = next1[1], d2 = next1[2], next2 = next1[3]; + if(0 === caml_compare(key, k2)) return d2; + if(! next2) throw caml_maybe_attach_backtrace(Not_found, 1); + var k3 = next2[1], d3 = next2[2], next3 = next2[3]; + return 0 === caml_compare(key, k3) ? d3 : find_rec(key, next3); + } + function find_all$0(h, key){ + function find_in_bucket(param){ + var param$0 = param; + for(;;){ + if(! param$0) return 0; + var k = param$0[1], data = param$0[2], next = param$0[3]; + if(0 === caml_compare(k, key)) return [0, data, find_in_bucket(next)]; + var param$0 = next; + } + } + var _vF_ = key_index(h, key); + return find_in_bucket(caml_check_bound(h[2], _vF_)[1 + _vF_]); + } + function mem(h, key){ + function mem_in_bucket(param){ + var param$0 = param; + for(;;){ + if(! param$0) return 0; + var + k = param$0[1], + next = param$0[3], + _vE_ = 0 === caml_compare(k, key) ? 1 : 0; + if(_vE_) return _vE_; + var param$0 = next; + } + } + var _vD_ = key_index(h, key); + return mem_in_bucket(caml_check_bound(h[2], _vD_)[1 + _vD_]); + } + function id(x){return x;} + var zero = 0, unknown = -1; + function is_known(n){return 0 <= n ? 1 : 0;} + var String_tag = [248, _cr_, caml_fresh_oo_id(0)]; + function pp_enqueue(state, token){ + state[13] = state[13] + token[3] | 0; + return add(token, state[28]); + } + function pp_clear_queue(state){ + state[12] = 1; + state[13] = 1; + return clear$0(state[28]); + } + var pp_infinity = 1000000010; + function pp_output_string(state, s){ + return caml_call3(state[17], s, 0, caml_ml_string_length(s)); + } + function pp_output_newline(state){return caml_call1(state[19], 0);} + function pp_output_spaces(state, n){return caml_call1(state[20], n);} + function pp_output_indent(state, n){return caml_call1(state[21], n);} + function format_pp_text(state, size, text){ + state[9] = state[9] - size | 0; + pp_output_string(state, text); + state[11] = 0; + return; + } + function format_string(state, s){ + var _vC_ = caml_string_notequal(s, cst$1); + return _vC_ ? format_pp_text(state, caml_ml_string_length(s), s) : _vC_; + } + function break_new_line(state, param, width){ + var after = param[3], offset = param[2], before = param[1]; + format_string(state, before); + pp_output_newline(state); + state[11] = 1; + var + indent = (state[6] - width | 0) + offset | 0, + real_indent = min(state[8], indent); + state[10] = real_indent; + state[9] = state[6] - state[10] | 0; + pp_output_indent(state, state[10]); + return format_string(state, after); + } + function break_line(state, width){ + return break_new_line(state, _cs_, width); + } + function break_same_line(state, param){ + var after = param[3], width = param[2], before = param[1]; + format_string(state, before); + state[9] = state[9] - width | 0; + pp_output_spaces(state, width); + return format_string(state, after); + } + function pp_force_break_line(state){ + var match = top_opt(state[2]); + if(! match) return pp_output_newline(state); + var + match$0 = match[1], + width = match$0[2], + box_type = match$0[1], + _vB_ = state[9] < width ? 1 : 0; + if(! _vB_) return _vB_; + if(3 < box_type - 1 >>> 0) return; + return break_line(state, width); + } + function pp_skip_token(state){ + var match = take_opt(state[28]); + if(! match) return; + var match$0 = match[1], size = match$0[1], length = match$0[3]; + state[12] = state[12] - length | 0; + var _vA_ = id(size); + state[9] = state[9] + _vA_ | 0; + return; + } + function format_pp_token(state, size, param){ + if(typeof param === "number") + switch(param){ + case 0: + var match = top_opt(state[3]); + if(! match) return; + var + tabs = match[1][1], + add_tab = + function(n, ls){ + if(! ls) return [0, n, 0]; + var l = ls[2], x = ls[1]; + return caml_lessthan(n, x) ? [0, n, ls] : [0, x, add_tab(n, l)]; + }; + tabs[1] = add_tab(state[6] - state[9] | 0, tabs[1]); + return; + case 1: + pop_opt(state[2]); return; + case 2: + pop_opt(state[3]); return; + case 3: + var match$0 = top_opt(state[2]); + if(! match$0) return pp_output_newline(state); + var width = match$0[1][2]; + return break_line(state, width); + case 4: + var _vz_ = state[10] !== (state[6] - state[9] | 0) ? 1 : 0; + return _vz_ ? pp_skip_token(state) : _vz_; + default: + var match$1 = pop_opt(state[5]); + if(! match$1) return; + var tag_name = match$1[1], marker = caml_call1(state[25], tag_name); + return pp_output_string(state, marker); + } + switch(param[0]){ + case 0: + var s = param[1]; return format_pp_text(state, size, s); + case 1: + var + breaks = param[2], + fits = param[1], + off = breaks[2], + before = breaks[1], + match$2 = top_opt(state[2]); + if(! match$2) return; + var match$3 = match$2[1], width$0 = match$3[2], box_type = match$3[1]; + switch(box_type){ + case 0: + return break_same_line(state, fits); + case 1: + return break_new_line(state, breaks, width$0); + case 2: + return break_new_line(state, breaks, width$0); + case 3: + return state[9] < (size + caml_ml_string_length(before) | 0) + ? break_new_line(state, breaks, width$0) + : break_same_line(state, fits); + case 4: + return state[11] + ? break_same_line(state, fits) + : state + [9] + < (size + caml_ml_string_length(before) | 0) + ? break_new_line(state, breaks, width$0) + : ((state + [6] + - width$0 + | 0) + + off + | 0) + < state[10] + ? break_new_line(state, breaks, width$0) + : break_same_line(state, fits); + default: return break_same_line(state, fits); + } + case 2: + var + off$0 = param[2], + n = param[1], + insertion_point = state[6] - state[9] | 0, + match$4 = top_opt(state[3]); + if(! match$4) return; + var tabs$0 = match$4[1][1], match$5 = tabs$0[1]; + if(match$5) + var + first = match$5[1], + find = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return first; + var tail = param$0[2], head = param$0[1]; + if(insertion_point <= head) return head; + var param$0 = tail; + } + }, + tab = find(tabs$0[1]); + else + var tab = insertion_point; + var offset = tab - insertion_point | 0; + return 0 <= offset + ? break_same_line(state, [0, _cu_, offset + n | 0, _ct_]) + : break_new_line + (state, [0, _cw_, tab + off$0 | 0, _cv_], state[6]); + case 3: + var + ty = param[2], + off$1 = param[1], + insertion_point$0 = state[6] - state[9] | 0; + if(state[8] < insertion_point$0) pp_force_break_line(state); + var + width$1 = state[9] - off$1 | 0, + box_type$0 = 1 === ty ? 1 : state[9] < size ? ty : 5; + return push([0, box_type$0, width$1], state[2]); + case 4: + var tbox = param[1]; return push(tbox, state[3]); + default: + var + tag_name$0 = param[1], + marker$0 = caml_call1(state[24], tag_name$0); + pp_output_string(state, marker$0); + return push(tag_name$0, state[5]); + } + } + function advance_left(state){ + for(;;){ + var match = peek_opt(state[28]); + if(! match) return 0; + var + match$0 = match[1], + size = match$0[1], + length = match$0[3], + token = match$0[2], + pending_count = state[13] - state[12] | 0, + _vx_ = is_known(size), + _vy_ = _vx_ || (state[9] <= pending_count ? 1 : 0); + if(! _vy_) return _vy_; + take(state[28]); + var size$0 = is_known(size) ? id(size) : pp_infinity; + format_pp_token(state, size$0, token); + state[12] = length + state[12] | 0; + } + } + function enqueue_advance(state, tok){ + pp_enqueue(state, tok); + return advance_left(state); + } + function enqueue_string_as(state, size, s){ + return enqueue_advance(state, [0, size, [0, s], id(size)]); + } + function enqueue_string(state, s){ + return enqueue_string_as(state, id(caml_ml_string_length(s)), s); + } + function initialize_scan_stack(stack){ + clear(stack); + var queue_elem = [0, unknown, _cx_, 0]; + return push([0, -1, queue_elem], stack); + } + function set_size(state, ty){ + var match = top_opt(state[1]); + if(! match) return; + var + match$0 = match[1], + queue_elem = match$0[2], + left_total = match$0[1], + size = id(queue_elem[1]); + if(left_total < state[12]) return initialize_scan_stack(state[1]); + var _vw_ = queue_elem[2]; + if(typeof _vw_ !== "number") + switch(_vw_[0]){ + case 3: + if(1 - ty){ + queue_elem[1] = id(state[13] + size | 0); + pop_opt(state[1]); + } + return; + case 1: + case 2: + if(ty){queue_elem[1] = id(state[13] + size | 0); pop_opt(state[1]);} + return; + } + return; + } + function scan_push(state, b, token){ + pp_enqueue(state, token); + if(b) set_size(state, 1); + var elem = [0, state[13], token]; + return push(elem, state[1]); + } + function pp_open_box_gen(state, indent, br_ty){ + state[14] = state[14] + 1 | 0; + if(state[14] < state[15]){ + var size = id(- state[13] | 0), elem = [0, size, [3, indent, br_ty], 0]; + return scan_push(state, 0, elem); + } + var _vv_ = state[14] === state[15] ? 1 : 0; + return _vv_ ? enqueue_string(state, state[16]) : _vv_; + } + function pp_open_sys_box(state){return pp_open_box_gen(state, 0, 3);} + function pp_close_box(state, param){ + var _vt_ = 1 < state[14] ? 1 : 0; + if(_vt_){ + if(state[14] < state[15]){ + pp_enqueue(state, [0, zero, 1, 0]); + set_size(state, 1); + set_size(state, 0); + } + state[14] = state[14] - 1 | 0; + var _vu_ = 0; + } + else + var _vu_ = _vt_; + return _vu_; + } + function pp_open_stag(state, tag_name){ + if(state[22]){push(tag_name, state[4]); caml_call1(state[26], tag_name);} + var _vs_ = state[23]; + if(! _vs_) return _vs_; + var token = [5, tag_name]; + return pp_enqueue(state, [0, zero, token, 0]); + } + function pp_close_stag(state, param){ + if(state[23]) pp_enqueue(state, [0, zero, 5, 0]); + var _vq_ = state[22]; + if(_vq_){ + var match = pop_opt(state[4]); + if(match){ + var tag_name = match[1]; + return caml_call1(state[27], tag_name); + } + var _vr_ = 0; + } + else + var _vr_ = _vq_; + return _vr_; + } + function pp_close_tag(state, param){return pp_close_stag(state, 0);} + function pp_rinit(state){ + pp_clear_queue(state); + initialize_scan_stack(state[1]); + clear(state[2]); + clear(state[3]); + clear(state[4]); + clear(state[5]); + state[10] = 0; + state[14] = 0; + state[9] = state[6]; + return pp_open_sys_box(state); + } + function clear_tag_stack(state){ + return iter$0(function(param){return pp_close_tag(state, 0);}, state[4]); + } + function pp_flush_queue(state, b){ + clear_tag_stack(state); + for(;;){ + if(1 >= state[14]){ + state[13] = pp_infinity; + advance_left(state); + if(b) pp_output_newline(state); + return pp_rinit(state); + } + pp_close_box(state, 0); + } + } + function pp_print_as_size(state, size, s){ + var _vp_ = state[14] < state[15] ? 1 : 0; + return _vp_ ? enqueue_string_as(state, size, s) : _vp_; + } + function pp_print_as(state, isize, s){ + return pp_print_as_size(state, id(isize), s); + } + function pp_print_string(state, s){ + return pp_print_as(state, caml_ml_string_length(s), s); + } + function pp_print_bool(state, b){ + return pp_print_string(state, string_of_bool(b)); + } + function pp_print_char(state, c){ + return pp_print_as(state, 1, make$1(1, c)); + } + function pp_print_newline(state, param){ + pp_flush_queue(state, 1); + return caml_call1(state[18], 0); + } + function pp_print_flush(state, param){ + pp_flush_queue(state, 0); + return caml_call1(state[18], 0); + } + function pp_force_newline(state, param){ + var _vo_ = state[14] < state[15] ? 1 : 0; + return _vo_ ? enqueue_advance(state, [0, zero, 3, 0]) : _vo_; + } + function pp_print_custom_break(state, fits, breaks){ + var + after = fits[3], + width = fits[2], + before = fits[1], + _vn_ = state[14] < state[15] ? 1 : 0; + if(! _vn_) return _vn_; + var + size = id(- state[13] | 0), + token = [1, fits, breaks], + length = + (caml_ml_string_length(before) + width | 0) + + caml_ml_string_length(after) + | 0, + elem = [0, size, token, length]; + return scan_push(state, 1, elem); + } + function pp_print_break(state, width, offset){ + return pp_print_custom_break + (state, [0, _cB_, width, _cA_], [0, _cz_, offset, _cy_]); + } + function pp_print_cut(state, param){return pp_print_break(state, 0, 0);} + function display_newline(state, param){ + return caml_call3(state[17], _cC_, 0, 1); + } + var blank_line = make$1(80, 32); + function display_blanks(state, n){ + var n$0 = n; + for(;;){ + var _vm_ = 0 < n$0 ? 1 : 0; + if(! _vm_) return _vm_; + if(80 >= n$0) return caml_call3(state[17], blank_line, 0, n$0); + caml_call3(state[17], blank_line, 0, 80); + var n$1 = n$0 - 80 | 0, n$0 = n$1; + } + } + function default_pp_mark_open_tag(param){ + if(param[1] !== String_tag) return _cF_; + var s = param[2]; + return symbol(_cE_, symbol(s, _cD_)); + } + function default_pp_mark_close_tag(param){ + if(param[1] !== String_tag) return _cI_; + var s = param[2]; + return symbol(_cH_, symbol(s, _cG_)); + } + function default_pp_print_open_tag(_vl_){return 0;} + function default_pp_print_close_tag(_vk_){return 0;} + function pp_make_formatter(f, g, h, i, j){ + var pp_queue = create$0(0), sys_tok = [0, unknown, _cJ_, 0]; + add(sys_tok, pp_queue); + var scan_stack = create(0); + initialize_scan_stack(scan_stack); + push([0, 1, sys_tok], scan_stack); + var pp_margin = 78, _vh_ = create(0), _vi_ = create(0), _vj_ = create(0); + return [0, + scan_stack, + create(0), + _vj_, + _vi_, + _vh_, + pp_margin, + 10, + 68, + pp_margin, + 0, + 1, + 1, + 1, + 1, + max_int, + _cK_, + f, + g, + h, + i, + j, + 0, + 0, + default_pp_mark_open_tag, + default_pp_mark_close_tag, + default_pp_print_open_tag, + default_pp_print_close_tag, + pp_queue]; + } + function make_formatter(output, flush){ + var + ppf = + pp_make_formatter + (output, + flush, + function(_vg_){return 0;}, + function(_vf_){return 0;}, + function(_ve_){return 0;}); + ppf[19] = function(_vd_){return display_newline(ppf, _vd_);}; + ppf[20] = function(_vc_){return display_blanks(ppf, _vc_);}; + ppf[21] = function(_vb_){return display_blanks(ppf, _vb_);}; + return ppf; + } + function formatter_of_out_channel(oc){ + return make_formatter + (function(_u__, _u$_, _va_){ + return output_substring(oc, _u__, _u$_, _va_); + }, + function(param){return _k_(oc);}); + } + function formatter_of_buffer(b){ + return make_formatter + (function(_u7_, _u8_, _u9_){ + return add_substring(b, _u7_, _u8_, _u9_); + }, + function(_u6_){return 0;}); + } + var pp_buffer_size = 512; + function pp_make_buffer(param){return create$1(pp_buffer_size);} + var + stdbuf = pp_make_buffer(0), + std_formatter = formatter_of_out_channel(stdout), + err_formatter = formatter_of_out_channel(stderr); + formatter_of_buffer(stdbuf); + function flush_buffer_formatter(buf, ppf){ + pp_flush_queue(ppf, 0); + var s = contents(buf); + reset(buf); + return s; + } + function pp_print_list(opt, pp_v, ppf, param){ + var opt$0 = opt, param$0 = param; + for(;;){ + if(opt$0) + var sth = opt$0[1], pp_sep = sth; + else + var pp_sep = pp_print_cut; + if(! param$0) return 0; + var v = param$0[1]; + if(! param$0[2]) return caml_call2(pp_v, ppf, v); + var vs = param$0[2]; + caml_call2(pp_v, ppf, v); + caml_call2(pp_sep, ppf, 0); + var opt$1 = [0, pp_sep], opt$0 = opt$1, param$0 = vs; + } + } + function compute_tag(output, tag_acc){ + var buf = create$1(16), ppf = formatter_of_buffer(buf); + caml_call2(output, ppf, tag_acc); + pp_print_flush(ppf, 0); + var len = length$1(buf); + return 2 <= len ? sub$2(buf, 1, len - 2 | 0) : contents(buf); + } + function output_formatting_lit(ppf, fmting_lit){ + if(typeof fmting_lit === "number") + switch(fmting_lit){ + case 0: + return pp_close_box(ppf, 0); + case 1: + return pp_close_tag(ppf, 0); + case 2: + return pp_print_flush(ppf, 0); + case 3: + return pp_force_newline(ppf, 0); + case 4: + return pp_print_newline(ppf, 0); + case 5: + return pp_print_char(ppf, 64); + default: return pp_print_char(ppf, 37); + } + switch(fmting_lit[0]){ + case 0: + var offset = fmting_lit[3], width = fmting_lit[2]; + return pp_print_break(ppf, width, offset); + case 1: + return 0; + default: + var c = fmting_lit[1]; + pp_print_char(ppf, 64); + return pp_print_char(ppf, c); + } + } + function output_acc$0(ppf, acc){ + if(typeof acc === "number") return 0; + a: + { + b: + { + c: + { + switch(acc[0]){ + case 0: + var f = acc[2], p = acc[1]; + output_acc$0(ppf, p); + return output_formatting_lit(ppf, f); + case 1: + var match = acc[2], p$0 = acc[1]; + if(0 === match[0]){ + var acc$0 = match[1]; + output_acc$0(ppf, p$0); + return pp_open_stag + (ppf, [0, String_tag, compute_tag(output_acc$0, acc$0)]); + } + var acc$1 = match[1]; + output_acc$0(ppf, p$0); + var + match$0 = open_box_of_string(compute_tag(output_acc$0, acc$1)), + bty = match$0[2], + indent = match$0[1]; + return pp_open_box_gen(ppf, indent, bty); + case 2: + var _uX_ = acc[1]; + if(typeof _uX_ !== "number" && 0 === _uX_[0]){ + var _uY_ = _uX_[2]; + if(typeof _uY_ !== "number" && 1 === _uY_[0]){ + var s$0 = acc[2], size = _uY_[2], p$2 = _uX_[1]; + break b; + } + } + var s = acc[2], p$1 = _uX_; + break a; + case 3: + var _uZ_ = acc[1]; + if(typeof _uZ_ !== "number" && 0 === _uZ_[0]){ + var _u0_ = _uZ_[2]; + if(typeof _u0_ !== "number" && 1 === _u0_[0]){ + var c$0 = acc[2], size$0 = _u0_[2], p$4 = _uZ_[1]; + break; + } + } + var c = acc[2], p$3 = _uZ_; + break c; + case 4: + var _u2_ = acc[1]; + if(typeof _u2_ !== "number" && 0 === _u2_[0]){ + var _u3_ = _u2_[2]; + if(typeof _u3_ !== "number" && 1 === _u3_[0]){ + var s$0 = acc[2], size = _u3_[2], p$2 = _u2_[1]; + break b; + } + } + var s = acc[2], p$1 = _u2_; + break a; + case 5: + var _u4_ = acc[1]; + if(typeof _u4_ !== "number" && 0 === _u4_[0]){ + var _u5_ = _u4_[2]; + if(typeof _u5_ !== "number" && 1 === _u5_[0]){ + var c$0 = acc[2], size$0 = _u5_[2], p$4 = _u4_[1]; + break; + } + } + var c = acc[2], p$3 = _u4_; + break c; + case 6: + var f$0 = acc[2], p$5 = acc[1]; + output_acc$0(ppf, p$5); + return caml_call1(f$0, ppf); + case 7: + var p$6 = acc[1]; + output_acc$0(ppf, p$6); + return pp_print_flush(ppf, 0); + default: + var msg = acc[2], p$7 = acc[1]; + output_acc$0(ppf, p$7); + return invalid_arg(msg); + } + output_acc$0(ppf, p$4); + var _u1_ = make$1(1, c$0); + return pp_print_as_size(ppf, id(size$0), _u1_); + } + output_acc$0(ppf, p$3); + return pp_print_char(ppf, c); + } + output_acc$0(ppf, p$2); + return pp_print_as_size(ppf, id(size), s$0); + } + output_acc$0(ppf, p$1); + return pp_print_string(ppf, s); + } + function kfprintf$0(k, ppf, param){ + var fmt = param[1]; + return make_printf + (function(acc){output_acc$0(ppf, acc); return caml_call1(k, ppf);}, + 0, + fmt); + } + function fprintf$0(ppf){ + function _uU_(_uW_){return 0;} + return function(_uV_){return kfprintf$0(_uU_, ppf, _uV_);}; + } + function kasprintf(k, param){ + var fmt = param[1], b = pp_make_buffer(0), ppf = formatter_of_buffer(b); + function k$0(acc){ + output_acc$0(ppf, acc); + return caml_call1(k, flush_buffer_formatter(b, ppf)); + } + return make_printf(k$0, 0, fmt); + } + function asprintf(fmt){return kasprintf(id, fmt);} + function flush_standard_formatters(param){ + pp_print_flush(std_formatter, 0); + return pp_print_flush(err_formatter, 0); + } + at_exit(flush_standard_formatters); + function register_exception(name, exn){ + var slot = caml_obj_tag(exn) === 248 ? exn : exn[1]; + caml_register_named_value(name, slot); + return; + } + var Error = [248, _cL_, caml_fresh_oo_id(0)]; + register_exception(_cM_, [0, Error, [0]]); + (function(exn){throw exn;}); + var jv_global = globalThis; + function length$2(s){return s[cst_length];} + function jstr_of_int(opt, i){ + if(opt) var sth = opt[1], base = sth; else var base = 10; + return i.toString(base); + } + var empty = cst$1; + function concat$0(opt, ss){ + if(opt) var sth = opt[1], sep = sth; else var sep = empty; + return caml_list_to_js_array(ss).join(sep); + } + function is_empty$0(s){return 0 === length$2(s) ? 1 : 0;} + function equal(_uT_, _uS_){return caml_equal(_uT_, _uS_);} + jv_global["Number"]; + var null$0 = null, undefined$0 = undefined; + function is_null(v){return v === null$0 ? 1 : 0;} + function is_undefined(v){return v === undefined$0 ? 1 : 0;} + function is_none(v){ + var _uR_ = is_null(v); + return _uR_ ? _uR_ : is_undefined(v); + } + function is_some$0(v){return 1 - is_none(v);} + function to_option(conv, v){ + return is_none(v) ? 0 : [0, caml_call1(conv, v)]; + } + function of_option(none, conv, param){ + if(! param) return none; + var v = param[1]; + return caml_call1(conv, v); + } + var global = globalThis; + function set_if_some(o, p, param){ + if(! param) return; + var v = param[1]; + o[p] = v; + return; + } + var true$0 = true; + function get$1(o, p){o[p]; return;} + function set(o, p, b){o[p] = ! ! b; return;} + function set_if_some$0(o, p, param){ + if(! param) return; + var b = param[1]; + return set(o, p, b); + } + function get$2(o, p){return o[p];} + function set$0(o, p, b){o[p] = b; return;} + function set_if_some$1(o, p, param){ + if(! param) return; + var f = param[1]; + return set$0(o, p, f); + } + function to_string$1(_uQ_){return caml_string_of_jsstring(_uQ_);} + function create$3(n){return new global["Array"](n);} + function length$3(a){return a[cst_length];} + function of_array(conv, a){ + var len = a.length - 1, ja = create$3(len), _uO_ = len - 1 | 0, _uN_ = 0; + if(_uO_ >= 0){ + var i = _uN_; + for(;;){ + ja[i] = caml_call1(conv, caml_check_bound(a, i)[1 + i]); + var _uP_ = i + 1 | 0; + if(_uO_ === i) break; + var i = _uP_; + } + } + return ja; + } + function to_list$0(conv, v){ + var len = length$3(v); + return init(len, function(i){return caml_call1(conv, v[i]);}); + } + function of_list$0(conv, l){ + function loop(i, ja, param){ + var i$0 = i, param$0 = param; + for(;;){ + if(! param$0) return ja; + var vs = param$0[2], v = param$0[1]; + ja[i$0] = caml_call1(conv, v); + var i$1 = i$0 + 1 | 0, i$0 = i$1, param$0 = vs; + } + } + return loop(0, create$3(0), l); + } + function v(name, msg){ + var e = new global["Error"](msg); + if(! name) return e; + var n = name[1]; + e[cst_name] = n; + return e; + } + function throw$0(name, msg){ + var e = v(name, msg); + return caml_call1(function(exn){throw exn;}, e); + } + var promise = global["Promise"]; + function create$4(f){ + function g(res, rej){ + return caml_call2 + (f, function(x){return res(x);}, function(x){return rej(x);}); + } + return new promise(caml_js_wrap_callback_strict(2, g)); + } + function resolve(v){return promise.resolve(v);} + function await$0(p, k){ + p.then(caml_js_wrap_callback_strict(1, k)); + return 0; + } + function bind(p, res){return p.then(caml_js_wrap_callback_strict(1, res));} + function then(p, res, rej){ + return p.then + (caml_js_wrap_callback_strict(1, res), + caml_js_wrap_callback_strict(1, rej)); + } + function call(o, m, args){ + return caml_js_meth_call(o, to_string$1(m), args); + } + function value$0(_uM_){return caml_string_of_jsstring(_uM_);} + function _cN_(_uL_){return caml_jsstring_of_string(_uL_);} + function fut(p){return {fut: p};} + function promise$0(f){return f[cst_fut];} + function create$5(param){ + function not_set(param){ + throw caml_maybe_attach_backtrace([0, Assert_failure, _cO_], 1); + } + function is_set(param){return throw$0(0, "The future is already set");} + var setter = [0, not_set]; + function set_setter(resolve, reject){setter[1] = resolve; return 0;} + var p = create$4(set_setter); + function set(v){caml_call1(setter[1], v); setter[1] = is_set; return 0;} + return [0, fut(p), set]; + } + function await$1(f, k){return await$0(promise$0(f), k);} + function return$0(v){return fut(resolve(v));} + function bind$0(f, fn){ + return fut + (bind + (promise$0(f), + function(v){return promise$0(caml_call1(fn, v));})); + } + function map$4(fn, f){ + return bind$0(f, function(v){return return$0(caml_call1(fn, v));}); + } + function ok(v){return return$0([0, v]);} + function of_promise(ok, error, p){ + function ok$0(v){return resolve([0, caml_call1(ok, v)]);} + function error$0(e){return resolve([1, caml_call1(error, e)]);} + return fut(then(p, ok$0, error$0)); + } + function of_promise$0(ok, v){ + return of_promise(ok, function(_uK_){return _uK_;}, v); + } + function let$0(f, fn){return map$4(fn, f);} + function let$1(f, fn){ + return function(_uJ_){return bind$0(f, _uJ_);} + (function(e){ + if(0 !== e[0]) return return$0(e); + var v = e[1]; + return caml_call1(fn, v); + }); + } + function let$2(f, fn){ + return map$4(function(_uI_){return map$0(fn, _uI_);}, f); + } + global["Event"]; + function target(e){return e[cst_target];} + function current_target(e){return e["currentTarget"];} + function stop_immediate_propagation(e){e.stopImmediatePropagation(); return; + } + function prevent_default(e){e.preventDefault(); return 0;} + function listen(opt, type, f, t){ + if(opt) var sth = opt[1], opts = sth; else var opts = {}; + var f$0 = caml_js_wrap_callback_strict(1, f); + function unlisten(param){ + t.removeEventListener(type, f$0, opts); + return 0; + } + t.addEventListener(type, f$0, opts); + return unlisten; + } + function unlisten(unlisten){return caml_call1(unlisten, 0);} + var + change = "change", + click = cst_click, + dom_content_loaded = "DOMContentLoaded", + ended = "ended", + error = cst_error, + keyup = "keyup", + play = "play", + scroll = "scroll"; + global["ArrayBuffer"]; + global["DataView"]; + global["Blob"]; + global["File"]; + var json = global["JSON"]; + function encode(v){return json.stringify(v);} + function decode(s){ + try{var v = json.parse(s);} + catch(exn$0){ + var exn = caml_wrap_exception(exn$0); + if(exn[1] !== Error) throw caml_maybe_attach_backtrace(exn, 0); + var e = exn[2]; + return [1, e]; + } + return [0, v]; + } + global["encodeURI"]; + global["decodeURI"]; + global["encodeURIComponent"]; + global["decodeURIComponent"]; + var url = global["URL"]; + function v$0(base, s){ + if(! base) return new url(s); + var b = base[1]; + return new url(s, b); + } + var usp = global["URLSearchParams"]; + function to_jstr(p){return p.toString();} + function of_obj(o){return new usp(o);} + function with_query_params(u, ps){ + var u$0 = new url(u); + set$0(u$0, _cP_, to_jstr(ps)); + return u$0; + } + function to_jstr$0(u){return u.toString();} + function of_jstr(base, s){ + try{var v = v$0(base, s);} + catch(exn$0){ + var exn = caml_wrap_exception(exn$0); + if(exn[1] !== Error) throw caml_maybe_attach_backtrace(exn, 0); + var e = exn[2]; + return [1, e]; + } + return [0, v]; + } + function v$1(n, v){return [0, n, v];} + var void$0 = [0, empty, empty]; + function true$1(n){return [0, n, empty];} + function int$0(n, i){return [0, n, jstr_of_int(0, i)];} + function to_pair(_uH_){return _uH_;} + var + checked = cst_checked, + class$0 = "class", + for$0 = "for", + id$0 = cst_id, + name = cst_name, + placeholder = "placeholder", + required = "required", + src = cst_src, + style = cst_style, + type = cst_type, + value$1 = cst_value, + width = "width", + checked$0 = true$1(checked); + function class$1(s){return v$1(class$0, s);} + function for$1(s){return v$1(for$0, s);} + function id$1(s){return v$1(id$0, s);} + var required$0 = true$1(required); + function src$0(s){return v$1(src, s);} + function style$0(s){return v$1(style, s);} + function type$0(s){return v$1(type, s);} + function value$2(s){return v$1(value$1, s);} + function width$0(i){return int$0(width, i);} + var global_document = global["document"]; + function document(e){return e["ownerDocument"];} + if(! is_none(global_document)) global_document[cst_documentElement]; + function _cQ_(e, n){e.appendChild(n); return 0;} + function set_atts(e, ss, param){ + var ss$0 = ss, param$0 = param; + for(;;){ + if(! param$0){ + if(0 !== ss$0){ + var v$0 = concat$0([0, ";"], rev(ss$0)); + e.setAttribute(cst_style, v$0); + } + return; + } + var at = param$0[2], match = param$0[1], v = match[2], a = match[1]; + if(is_empty$0(a)) + var param$0 = at; + else if(equal(a, style)) + var ss$1 = [0, v, ss$0], ss$0 = ss$1, param$0 = at; + else if(equal(a, class$0)){ + if(1 - is_empty$0(v)) e[cst_classList].add(v); + var param$0 = at; + } + else{e.setAttribute(a, v); var param$0 = at;} + } + } + function v$2(opt, _uF_, name, cs){ + if(opt) var sth = opt[1], d = sth; else var d = global_document; + if(_uF_) var sth$0 = _uF_[1], at = sth$0; else var at = 0; + var e = d.createElement(name); + set_atts(e, 0, at); + iter(function(_uG_){return _cQ_(e, _uG_);}, cs); + return e; + } + function txt(opt, s){ + if(opt) var sth = opt[1], d = sth; else var d = global_document; + return d.createTextNode(_cN_(s)); + } + function append_children(e, l){ + caml_js_meth_call(e, cst_append, of_list(l)); + return; + } + function set_at(a, v, e){ + if(is_empty$0(a)) return 0; + if(v){var v$0 = v[1]; e.setAttribute(a, v$0); return 0;} + e.removeAttribute(a); + return 0; + } + function jv_to_float(f){return is_undefined(f) ? 0. : f;} + function float$0(n){ + return [0, n, jv_to_float, function(_uE_){return _uE_;}]; + } + function prop(p, e){var _uD_ = e[p[1]]; return caml_call1(p[2], _uD_);} + function set_class(c, b, e){ + return b ? (e[cst_classList].add(c), 0) : (e[cst_classList].remove(c), 0); + } + function computed_style(opt, p, e){ + if(opt) var sth = opt[1], w = sth; else var w = global[cst_window]; + var style = w.getComputedStyle(e), v = style[p]; + return is_none(v) ? empty : v; + } + function scroll_y(e){return get$2(e, _cR_);} + var + audio = "audio", + button = cst_button, + div = "div", + form = "form", + h1 = "h1", + img = "img", + input$0 = cst_input, + label = "label", + span = "span"; + function cons$0(name, d, at, cs){return v$2(d, at, name, cs);} + function audio$0(_uA_, _uB_, _uC_){return cons$0(audio, _uA_, _uB_, _uC_);} + function div$0(_ux_, _uy_, _uz_){return cons$0(div, _ux_, _uy_, _uz_);} + function h1$0(_uu_, _uv_, _uw_){return cons$0(h1, _uu_, _uv_, _uw_);} + function span$0(_ur_, _us_, _ut_){return cons$0(span, _ur_, _us_, _ut_);} + function root(d){return d[cst_documentElement];} + function body(d){ + var b = d[cst_body]; + return is_some$0(b) + ? b + : throw$0 + (0, + "Document body is null. Try to defer your script execution."); + } + function active_el(d){ + return to_option(function(_uq_){return _uq_;}, d["activeElement"]); + } + function call$0(c, meth, args){caml_js_meth_call(c, meth, args); return 0;} + var _cS_ = global[cst_console]; + function msg_to_jv_array(msg){ + function loop(a, i, param){ + var i$0 = i, param$0 = param; + for(;;){ + if(! param$0) return a; + var vs = param$0[2], v = param$0[1]; + a[i$0] = v; + var i$1 = i$0 + 1 | 0, i$0 = i$1, param$0 = vs; + } + } + return caml_js_to_array(loop(create$3(0), 0, msg)); + } + function log(msg){return call$0(_cS_, _cT_, msg_to_jv_array(msg));} + function error$0(msg){return call$0(_cS_, _cU_, msg_to_jv_array(msg));} + function warn(msg){return call$0(_cS_, _cV_, msg_to_jv_array(msg));} + function info(msg){return call$0(_cS_, _cW_, msg_to_jv_array(msg));} + function as_target(w){return w;} + function now_ms(p){return p.now();} + global[cst_console]; + var + navigator = global["navigator"], + performance = global["performance"], + window = global[cst_window]; + get$1(global, _cX_); + function set_timeout(ms, f){ + return global.setTimeout(caml_js_wrap_callback_strict(1, f), ms); + } + function stop_timer(tid){global.clearTimeout(tid); return;} + function request_animation_frame(f){ + global.requestAnimationFrame(caml_js_wrap_callback_strict(1, f)); + return; + } + global["ClipboardItem"]; + global["FormData"]; + function of_jstr$0(_up_){return _up_;} + function text(r){ + return of_promise$0(function(_uo_){return _uo_;}, r.text()); + } + var headers = global["Headers"]; + function of_assoc(init, l){ + if(init) var h = init[1], args = [0, h]; else var args = [0]; + var hs = caml_js_new(headers, args); + function add(hs, param){ + var v = param[2], k = param[1]; + hs.append(k, v); + return 0; + } + iter(function(_un_){return add(hs, _un_);}, l); + return hs; + } + function init$0 + (body, + cache, + credentials, + headers, + integrity, + keepalive, + method, + mode, + redirect, + referrer, + referrer_policy, + signal, + param){ + var o = {}; + o[cst_body] = of_option(undefined$0, function(_um_){return _um_;}, body); + set_if_some$1(o, _cY_, cache); + set_if_some$1(o, _cZ_, credentials); + set_if_some(o, _c0_, map(function(_ul_){return _ul_;}, headers)); + set_if_some$1(o, _c1_, integrity); + set_if_some$0(o, _c2_, keepalive); + set_if_some$1(o, _c3_, method); + set_if_some$1(o, _c4_, mode); + set_if_some$1(o, _c5_, redirect); + set_if_some$1(o, _c6_, referrer); + set_if_some$1(o, _c7_, referrer_policy); + o["signal"] = of_option(undefined$0, function(_uk_){return _uk_;}, signal); + return o; + } + var request = global["Request"]; + function v$3(opt, url){ + if(opt) var sth = opt[1], init = sth; else var init = {}; + return new request(url, init); + } + global["Response"]; + var fetch = global["fetch"]; + function request$0(r){ + function _uh_(_uj_){return _uj_;} + return function(_ui_){return of_promise$0(_uh_, _ui_);}(fetch(r)); + } + global["MediaStream"]; + global["MediaRecorder"]; + global["MessageChannel"]; + global["BroadcastChannel"]; + var message = "message"; + function data(e){return e["data"];} + global["Notification"]; + function local(w){return w["localStorage"];} + function get_item(s, k){ + function _ue_(_ug_){return _ug_;} + return function(_uf_){return to_option(_ue_, _uf_);}(s.getItem(k)); + } + function set_item(s, k, v){ + try{s.setItem(k, v); return;} + catch(exn$0){ + var exn = caml_wrap_exception(exn$0); + if(exn[1] === Error) return; + throw caml_maybe_attach_backtrace(exn, 0); + } + } + global["WebSocket"]; + var worker = global["Worker"]; + function create$6(opt, uri){ + if(opt) var sth = opt[1], opts = sth; else var opts = undefined$0; + return new worker(uri, opts); + } + function post(opts, w, v){ + if(opts) var o = opts[1], opts$0 = o; else var opts$0 = undefined$0; + w.postMessage(v, opts$0); + return; + } + global["SharedWorker"]; + function post$0(opts, v){ + if(opts) var o = opts[1], opts$0 = o; else var opts$0 = undefined$0; + global.postMessage(v, opts$0); + return 0; + } + global["clients"]; + global["registration"]; + global["serviceWorker"]; + function height(t){return t["height"];} + function _c8_(_ud_){return _ud_;} + function content_rect(t){return _c8_(t["contentRect"]);} + function target$0(t){return t[cst_target];} + function string_of_box(param){ + switch(param){ + case 0: + return _c9_; + case 1: + return _c__; + default: return _c$_; + } + } + function observe(t, box, target){ + if(box) + var + b = box[1], + box$0 = {box: _cN_(string_of_box(b))}, + args = [0, target, box$0]; + else + var args = [0, target]; + caml_js_meth_call(t, "observe", args); + return 0; + } + function create$7(callback){ + function callback$0(entries, observer){ + var entries$0 = to_list$0(function(_uc_){return _uc_;}, entries); + return caml_call2(callback, entries$0, observer); + } + return new global["ResizeObserver"](callback$0); + } + function of_navigator(n){return n["mediaSession"];} + function img_to_jv(img){ + var _ua_ = _cN_(img[3]), _ub_ = _cN_(img[2]); + return {src: _cN_(img[1]), sizes: _ub_, type: _ua_}; + } + function to_jv(t){ + var + artwork = of_list$0(img_to_jv, t[4]), + _t__ = _cN_(t[3]), + _t$_ = _cN_(t[2]); + return {title: _cN_(t[1]), artist: _t$_, album: _t__, artwork: artwork}; + } + function set_metadata(t, v){ + log([0, _da_, [0, to_jv(v), 0]]); + var _t9_ = to_jv(v), metadata = new global["MediaMetadata"](_t9_); + t["metadata"] = metadata; + return; + } + var next_track = "nexttrack", previous_track = "previoustrack"; + function set_action_handler(t, action, f){ + var callback = caml_js_wrap_callback_strict(1, f); + t.setActionHandler(action, callback); + return; + } + function set_position_state(duration, playback_rate, position, t){ + function maybe_float(name, v){ + return map(function(v){return [0, name, v];}, v); + } + var + duration$0 = maybe_float(_db_, duration), + playback_rate$0 = maybe_float(_dc_, playback_rate), + position$0 = maybe_float(_dd_, position), + state_dict = + filter_map(function(_t8_){return _t8_;}) + ([0, duration$0, [0, playback_rate$0, [0, position$0, 0]]]), + args = state_dict ? [0, caml_js_object(of_list(state_dict))] : [0]; + log([0, args, 0]); + caml_js_meth_call(t, "setPositionState", args); + return 0; + } + function to_jv$0(param){ + if(0 === param[0]){var p = param[1]; return _cN_(p);} + var keys = param[1]; + return of_array(to_jv$0, keys); + } + function old_version(t){return t["oldVersion"];} + function new_version(t){return t["newVersion"];} + var upgrade_needed = "upgradeneeded", success = "success"; + function of_jv(f, j){return [0, j, f];} + function result(t){ + var _t7_ = t[1]["result"]; + return caml_call1(t[2], _t7_); + } + function on_success(f, t){ + function f$0(ev){return caml_call2(f, ev, t);} + listen(0, success, f$0, t[1]); + return t; + } + function Make_index(P, C, K){ + var name = P[1]; + return [0, , K, , , , , , , , , , name]; + } + function Make_object_store(C){ + function create_index(I){ + return function(t){ + var + key_path = to_jv$0(I[3][1]), + _t6_ = t.createIndex(_cN_(I[2]), key_path); + return caml_call1(I[1], _t6_);}; + } + return [0, C, , , , , , , , , , , create_index]; + } + function create_object_store(S){ + return function(opt, db){ + if(opt) + var sth = opt[1], auto_increment = sth; + else + var auto_increment = 0; + var + opts = [0, [0, _de_, ! ! auto_increment], 0], + key_path = to_jv$0(S[2][1][1]), + opts$0 = [0, [0, _df_, key_path], opts], + options = caml_js_object(of_list(opts$0)); + info([0, _dg_, [0, options, 0]]); + var _t5_ = db.createObjectStore(_cN_(S[2][2]), options); + return caml_call1(S[1], _t5_);}; + } + function on_upgrade_needed(f, t){ + function f$0(ev){ + function _t2_(_t4_){return _t4_;} + var req = function(_t3_){return of_jv(_t2_, _t3_);}(current_target(ev)); + return caml_call2(f, ev, req); + } + listen(0, upgrade_needed, f$0, t[1]); + return t; + } + function open(name, version, t){ + if(version) + var v = version[1], args = [0, name, string_of_int(v)]; + else + var args = [0, name]; + function _tU_(_t1_, _t0_, _tZ_){ + return caml_js_meth_call(_t1_, _t0_, _tZ_); + } + function _tV_(_tY_){return _tY_;} + return function(_tW_){return of_jv(_tV_, _tW_);} + (function(_tX_){return _tU_(t, _dh_, _tX_);}(map$3(_cN_, args))); + } + function get_factory(opt, param){ + if(opt) var sth = opt[1], global$0 = sth; else var global$0 = global; + return global$0["indexedDB"]; + } + function _di_(_tS_){ + var _tT_ = Make_object_store(_tS_); + return [0, _tT_[1], , , , , , , , , , , _tT_[12]]; + } + function _dj_(_tQ_, _tP_, _tO_){ + var _tR_ = Make_index(_tQ_, _tP_, _tO_); + return [0, , _tR_[2], , , , , , , , , , _tR_[12]]; + } + var submit = cst_submit, pattern = "pattern"; + function persist(t){ + function _tL_(_tN_){return _tN_ | 0;} + return function(_tM_){return of_promise$0(_tL_, _tM_);}(t.persist()); + } + function manager(n){return n["storage"];} + function any(_tK_){return _tK_;} + function return$1(x){return [0, x];} + function pure(x){return [0, x];} + function is_pure(x){ + if(0 !== x[0]) return 0; + var x$0 = x[1]; + return [0, x$0]; + } + var dummy = [0, any(0)]; + function operator(desc){return [1, 0, 0, 0, desc];} + function func(x, f){ + if(0 !== x[0]) return operator([0, x, f]); + var vx = x[1]; + return [0, caml_call1(f, vx)]; + } + function map2(x, y, f){ + if(0 === x[0]){ + var vx = x[1]; + if(0 === y[0]){var vy = y[1]; return [0, caml_call2(f, vx, vy)];} + } + return operator([1, x, y, f]); + } + function join(child){ + if(0 !== child[0]) return operator([4, child, 0]); + var v = child[1]; + return v; + } + function bind$1(x, f){return join(func(x, f));} + function add_idx(obj, idx, param){ + switch(param[0]){ + case 0: + throw caml_maybe_attach_backtrace([0, Assert_failure, _dk_], 1); + case 1: + param[3] = [0, idx, obj, param[3]]; return; + default: param[2] = [0, idx, obj, param[2]]; return; + } + } + function rem_idx_rec(obj, self){ + if(! self) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dl_], 1); + if(self[2] === obj) return [0, self[1], self[3]]; + var match = rem_idx_rec(obj, self[3]), result = match[2], idx = match[1]; + self[3] = result; + return [0, idx, self]; + } + function rem_idx(obj, param){ + switch(param[0]){ + case 0: + throw caml_maybe_attach_backtrace([0, Assert_failure, _dm_], 1); + case 1: + var + match = rem_idx_rec(obj, param[3]), + trace_idx = match[2], + idx = match[1]; + param[3] = trace_idx; + return idx; + default: + var + match$0 = rem_idx_rec(obj, param[2]), + trace_idx$0 = match$0[2], + idx$0 = match$0[1]; + param[2] = trace_idx$0; + return idx$0; + } + } + function mov_idx_rec(obj, oldidx, newidx, param){ + var t = param; + for(;;){ + if(! t) throw caml_maybe_attach_backtrace([0, Assert_failure, _dn_], 1); + if(t[1] === oldidx && t[2] === obj){t[1] = newidx; return;} + var t = t[3]; + } + } + function mov_idx(obj, oldidx, newidx, param){ + switch(param[0]){ + case 0: + throw caml_maybe_attach_backtrace([0, Assert_failure, _do_], 1); + case 1: + return mov_idx_rec(obj, oldidx, newidx, param[3]); + default: return mov_idx_rec(obj, oldidx, newidx, param[2]); + } + } + function get_idx_rec(obj, param){ + var t = param; + for(;;){ + if(! t) throw caml_maybe_attach_backtrace([0, Assert_failure, _dp_], 1); + if(t[2] === obj) return t[1]; + var t = t[3]; + } + } + function get_idx(obj, param){ + switch(param[0]){ + case 0: + throw caml_maybe_attach_backtrace([0, Assert_failure, _dq_], 1); + case 1: + return get_idx_rec(obj, param[3]); + default: return get_idx_rec(obj, param[2]); + } + } + function invalidate_node$0(counter, status, sensitivity, node){ + switch(node[0]){ + case 0: + throw caml_maybe_attach_backtrace([0, Assert_failure, _dr_], 1); + case 1: + var _tE_ = node[1]; + if(typeof _tE_ === "number" && ! _tE_){ + if(! sensitivity) return; + if(status[1]) return; + status[1] = 1; + return; + } + var _tF_ = node[4]; + if(7 === _tF_[0]){ + var _tI_ = _tF_[2]; + if(1 === _tI_[0]){ + var _tJ_ = _tI_[1]; + if(typeof _tJ_ === "number"){ + if(! _tJ_ && sensitivity){ + if(status[1]) return; + status[1] = 1; + return; + } + } + else if(sensitivity) return; + } + } + var _tG_ = node[1]; + a: + { + if(typeof _tG_ === "number" && _tG_){var sensitivity$0 = 1; break a;} + var sensitivity$0 = sensitivity; + } + node[1] = 0; + var _tH_ = node[2]; + if(counter >= 50) + return caml_trampoline_return + (invalidate_trace, [0, status, sensitivity$0, _tH_]); + var counter$0 = counter + 1 | 0; + return invalidate_trace(counter$0, status, sensitivity$0, _tH_); + default: + var value = node[1]; + node[1] = 0; + if(typeof value === "number"){ + if(! value) return; + status[1] = 2; + return; + } + var x = value[1]; + if(sensitivity) status[1] = 2; + return caml_call1(node[3], x); + } + } + function invalidate_node(status, sensitivity, node){ + return caml_trampoline(invalidate_node$0(0, status, sensitivity, node)); + } + function invalidate_trace(counter, status, sensitivity, t){ + if(typeof t === "number") return; + switch(t[0]){ + case 0: + var x = t[1]; + if(counter >= 50) + return caml_trampoline_return + (invalidate_node$0, [0, status, sensitivity, x]); + var counter$0 = counter + 1 | 0; + return invalidate_node$0(counter$0, status, sensitivity, x); + case 1: + var y = t[2], x$0 = t[1]; + invalidate_node(status, sensitivity, x$0); + if(counter >= 50) + return caml_trampoline_return + (invalidate_node$0, [0, status, sensitivity, y]); + var counter$1 = counter + 1 | 0; + return invalidate_node$0(counter$1, status, sensitivity, y); + case 2: + var z = t[3], y$0 = t[2], x$1 = t[1]; + invalidate_node(status, sensitivity, x$1); + invalidate_node(status, sensitivity, y$0); + if(counter >= 50) + return caml_trampoline_return + (invalidate_node$0, [0, status, sensitivity, z]); + var counter$2 = counter + 1 | 0; + return invalidate_node$0(counter$2, status, sensitivity, z); + case 3: + var w = t[4], z$0 = t[3], y$1 = t[2], x$2 = t[1]; + invalidate_node(status, sensitivity, x$2); + invalidate_node(status, sensitivity, y$1); + invalidate_node(status, sensitivity, z$0); + if(counter >= 50) + return caml_trampoline_return + (invalidate_node$0, [0, status, sensitivity, w]); + var counter$3 = counter + 1 | 0; + return invalidate_node$0(counter$3, status, sensitivity, w); + default: + var active = t[1]; + t[1] = 0; + var _tC_ = active - 1 | 0, _tB_ = 0; + if(_tC_ >= 0){ + var i = _tB_; + for(;;){ + invalidate_node + (status, sensitivity, caml_check_bound(t[3], i)[1 + i]); + var _tD_ = i + 1 | 0; + if(_tC_ === i) break; + var i = _tD_; + } + } + return; + } + } + function default_unsafe_mutation_logger(param){ + var callstack = caml_get_current_callstack(20); + return caml_call2(fprintf(stderr, _ds_), print_raw_backtrace, callstack); + } + function do_invalidate(sensitivity, node){ + var status = [0, 0]; + invalidate_node(status, sensitivity, node); + var unsafe = 2 <= status[1] ? 1 : 0; + return unsafe ? default_unsafe_mutation_logger(0) : unsafe; + } + function var$0(x){return operator([5, x]);} + function get$3(x){return x;} + function symbol$2(vx, x){ + if(1 === vx[0]){ + var match = vx[4]; + if(5 === match[0]){match[1] = x; return do_invalidate(0, vx);} + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _dt_], 1); + } + function peek(param){ + if(1 === param[0]){ + var match = param[4]; + if(5 === match[0]) return match[1]; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _du_], 1); + } + function update(f, v){return symbol$2(v, caml_call1(f, peek(v)));} + function prim(acquire, release){return operator([6, acquire, release]);} + function get_prim(x){return x;} + function invalidate(x){ + if(1 === x[0]){ + var value = x[1], p = x[4]; + if(6 === p[0]){ + if(typeof value === "number") return value ? do_invalidate(1, x) : 0; + var v = value[1]; + do_invalidate(0, x); + return caml_call2(p[2], x, v); + } + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _dv_], 1); + } + function sub_release(failures, origin, self){ + var failures$0 = failures, origin$1 = origin, origin$0 = self; + for(;;) + switch(origin$0[0]){ + case 0: + return failures$0; + case 1: + var trace = origin$0[2]; + if(typeof trace === "number") + throw caml_maybe_attach_backtrace([0, Assert_failure, _dw_], 1); + switch(trace[0]){ + case 0: + var x = trace[1]; + if(x !== origin$1) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dx_], 1); + var trace$0 = 0; + break; + case 1: + var y = trace[2], x$4 = trace[1]; + if(x$4 === origin$1) + var _tv_ = [0, y]; + else{ + if(y !== origin$1) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dy_], 1); + var _tv_ = [0, x$4]; + } + var trace$0 = _tv_; + break; + case 2: + var z = trace[3], y$0 = trace[2], x$5 = trace[1]; + if(x$5 === origin$1) + var _tw_ = [1, y$0, z]; + else if(y$0 === origin$1) + var _tw_ = [1, x$5, z]; + else{ + if(z !== origin$1) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dz_], 1); + var _tw_ = [1, x$5, y$0]; + } + var trace$0 = _tw_; + break; + case 3: + var w = trace[4], z$0 = trace[3], y$1 = trace[2], x$6 = trace[1]; + if(x$6 === origin$1) + var _tx_ = [2, y$1, z$0, w]; + else if(y$1 === origin$1) + var _tx_ = [2, x$6, z$0, w]; + else if(z$0 === origin$1) + var _tx_ = [2, x$6, y$1, w]; + else{ + if(w !== origin$1) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dA_], 1); + var _tx_ = [2, x$6, y$1, z$0]; + } + var trace$0 = _tx_; + break; + default: + var revidx = rem_idx(origin$0, origin$1); + if(caml_check_bound(trace[3], revidx)[1 + revidx] !== origin$1) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dB_], 1); + var count = trace[2] - 1 | 0; + trace[2] = count; + if(revidx < count){ + var obj = caml_check_bound(trace[3], count)[1 + count]; + caml_check_bound(trace[3], revidx)[1 + revidx] = obj; + caml_check_bound(trace[3], count)[1 + count] = dummy; + mov_idx(origin$0, count, revidx, obj); + } + else + caml_check_bound(trace[3], revidx)[1 + revidx] = dummy; + if(count < trace[1]) trace[1] = count; + if(4 === count){ + var + a = caml_check_bound(trace[3], 0)[1], + b = caml_check_bound(trace[3], 1)[2], + c = caml_check_bound(trace[3], 2)[3], + d = caml_check_bound(trace[3], 3)[4]; + rem_idx(origin$0, a); + rem_idx(origin$0, b); + rem_idx(origin$0, c); + rem_idx(origin$0, d); + var _ty_ = [3, a, b, c, d]; + } + else{ + var len = trace[3].length - 1; + if(count <= (len >>> 2 | 0)) + var + _tz_ = sub$1(trace[3], 0, len >>> 1 | 0), + _tA_ = [4, trace[1], trace[2], _tz_]; + else + var _tA_ = trace; + var _ty_ = _tA_; + } + var trace$0 = _ty_; + } + origin$0[2] = trace$0; + if(typeof trace$0 !== "number") return failures$0; + var value = origin$0[1]; + origin$0[1] = 1; + var t = origin$0[4]; + switch(t[0]){ + case 0: + var self$0 = t[1], origin$1 = origin$0, origin$0 = self$0; break; + case 1: + var + self$1 = t[2], + x$0 = t[1], + failures$1 = sub_release(failures$0, origin$0, x$0), + failures$0 = failures$1, + origin$1 = origin$0, + origin$0 = self$1; + break; + case 2: + var + self$2 = t[2], + x$1 = t[1], + failures$2 = sub_release(failures$0, origin$0, x$1), + failures$0 = failures$2, + origin$1 = origin$0, + origin$0 = self$2; + break; + case 3: + var + self$3 = t[2], + x$2 = t[1], + failures$3 = sub_release(failures$0, origin$0, x$2), + failures$0 = failures$3, + origin$1 = origin$0, + origin$0 = self$3; + break; + case 4: + var + child = t[1], + intermediate = t[2], + failures$4 = sub_release(failures$0, origin$0, child); + if(! intermediate) return failures$4; + var child$0 = intermediate[1]; + t[2] = 0; + var + failures$0 = failures$4, + origin$1 = origin$0, + origin$0 = child$0; + break; + case 5: + return failures$0; + case 6: + if(typeof value === "number") return failures$0; + var x$3 = value[1]; + try{caml_call2(t[2], origin$0, x$3); return failures$0;} + catch(exn$0){ + var exn = caml_wrap_exception(exn$0), bt = _ch_(0); + return [0, [0, exn, bt], failures$0]; + } + default: + var + wrt = t[2], + self$4 = t[1], + failures$5 = sub_release(failures$0, origin$0, wrt), + failures$0 = failures$5, + origin$1 = origin$0, + origin$0 = self$4; + } + break; + default: + throw caml_maybe_attach_backtrace([0, Assert_failure, _dC_], 1); + } + } + function sub_acquire(origin, self){ + var origin$1 = origin, origin$0 = self; + for(;;) + switch(origin$0[0]){ + case 0: + return; + case 1: + var + acquire = typeof origin$0[2] === "number" ? 1 : 0, + trace = origin$0[2]; + if(typeof trace === "number") + var trace$0 = [0, origin$1]; + else + switch(trace[0]){ + case 0: + var x$2 = trace[1], trace$0 = [1, origin$1, x$2]; break; + case 1: + var y = trace[2], x$3 = trace[1], trace$0 = [2, origin$1, x$3, y]; + break; + case 2: + var + z = trace[3], + y$0 = trace[2], + x$4 = trace[1], + trace$0 = [3, origin$1, x$4, y$0, z]; + break; + case 3: + var + w = trace[4], + z$0 = trace[3], + y$1 = trace[2], + x$5 = trace[1], + entries = [0, x$5, y$1, z$0, w, origin$1, dummy, dummy, dummy], + i = 0; + for(;;){ + add_idx(origin$0, i, caml_check_bound(entries, i)[1 + i]); + var _tu_ = i + 1 | 0; + if(4 === i) break; + var i = _tu_; + } + var trace$0 = [4, 5, 5, entries]; + break; + default: + var index = trace[2]; + if(index < trace[3].length - 1){ + trace[2] = trace[2] + 1 | 0; + var trace$1 = trace, entries$0 = trace[3]; + } + else{ + var entries$1 = caml_make_vect(index * 2 | 0, dummy); + blit$0(trace[3], 0, entries$1, 0, index); + var + trace$1 = [4, trace[1], index + 1 | 0, entries$1], + entries$0 = entries$1; + } + caml_check_bound(entries$0, index)[1 + index] = origin$1; + add_idx(origin$0, index, origin$1); + var trace$0 = trace$1; + } + origin$0[2] = trace$0; + if(! acquire) return acquire; + var match = origin$0[4]; + switch(match[0]){ + case 0: + var self$0 = match[1], origin$1 = origin$0, origin$0 = self$0; + break; + case 1: + var self$1 = match[2], x = match[1]; + sub_acquire(origin$0, x); + var origin$1 = origin$0, origin$0 = self$1; + break; + case 2: + var self$2 = match[2], x$0 = match[1]; + sub_acquire(origin$0, x$0); + var origin$1 = origin$0, origin$0 = self$2; + break; + case 3: + var self$3 = match[2], x$1 = match[1]; + sub_acquire(origin$0, x$1); + var origin$1 = origin$0, origin$0 = self$3; + break; + case 4: + var child = match[1], intermediate = match[2]; + sub_acquire(origin$0, child); + if(intermediate) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dD_], 1); + return; + case 5: + return; + case 6: + return; + default: + var self$4 = match[2], doc = match[1]; + sub_acquire(origin$0, doc); + var origin$1 = origin$0, origin$0 = self$4; + } + break; + default: + throw caml_maybe_attach_backtrace([0, Assert_failure, _dE_], 1); + } + } + function activate_tracing(self, origin, tn){ + if(typeof tn !== "number" && 4 === tn[0]){ + var idx = get_idx(self, origin), active = tn[1]; + if(active <= idx) tn[1] = active + 1 | 0; + var _tt_ = active < idx ? 1 : 0; + if(! _tt_) return _tt_; + var old = caml_check_bound(tn[3], active)[1 + active]; + caml_check_bound(tn[3], idx)[1 + idx] = old; + caml_check_bound(tn[3], active)[1 + active] = origin; + mov_idx(self, active, idx, old); + return mov_idx(self, idx, active, origin); + } + return; + } + function sub_is_damaged(param){ + switch(param[0]){ + case 0: + return 0; + case 1: + var value = param[1]; + if(typeof value !== "number") return 0; + if(value) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dF_], 1); + return 1; + default: + throw caml_maybe_attach_backtrace([0, Assert_failure, _dG_], 1); + } + } + function sub_sample(queue){ + function aux(origin, self){ + switch(self[0]){ + case 0: + var x = self[1]; return x; + case 1: + var match = self[1]; + if(typeof match !== "number"){ + var value = match[1]; + activate_tracing(self, origin, self[2]); + return value; + } + self[1] = 1; + var x$0 = self[4]; + switch(x$0[0]){ + case 0: + var + f = x$0[2], + x$1 = x$0[1], + result = caml_call1(f, aux(self, x$1)); + break; + case 1: + var + f$0 = x$0[3], + y = x$0[2], + x$2 = x$0[1], + _tp_ = aux(self, y), + result = caml_call2(f$0, aux(self, x$2), _tp_); + break; + case 2: + var + y$0 = x$0[2], + x$3 = x$0[1], + _tq_ = aux(self, y$0), + result = [0, aux(self, x$3), _tq_]; + break; + case 3: + var + x$4 = x$0[2], + f$1 = x$0[1], + _tr_ = aux(self, x$4), + result = caml_call1(aux(self, f$1), _tr_); + break; + case 4: + var intermediate = aux(self, x$0[1]), match$0 = x$0[2]; + if(match$0){ + var x$5 = match$0[1]; + if(x$5 !== intermediate){ + queue[1] = [0, self, x$5, queue[1]]; + x$0[2] = [0, intermediate]; + sub_acquire(self, intermediate); + } + } + else{x$0[2] = [0, intermediate]; sub_acquire(self, intermediate);} + var result = aux(self, intermediate); + break; + case 5: + var result = x$0[1]; break; + case 6: + var result = caml_call1(x$0[1], self); break; + default: + var wrt = x$0[2], doc = x$0[1]; + aux(self, wrt); + var result$0 = aux(self, doc); + if(sub_is_damaged(wrt)) + var _ts_ = aux(origin, self); + else{ + if(sub_is_damaged(doc)) do_invalidate(1, self); + var _ts_ = result$0; + } + var result = _ts_; + } + var _to_ = self[1]; + a: + if(typeof _to_ === "number" && _to_){self[1] = [0, result]; break a;} + activate_tracing(self, origin, self[2]); + return result; + default: + throw caml_maybe_attach_backtrace([0, Assert_failure, _dH_], 1); + } + } + return aux; + } + function observe$0(opt, child){ + if(opt) + var sth = opt[1], on_invalidate = sth; + else + var on_invalidate = function(_tn_){return 0;}; + var root = [2, 0, 0, on_invalidate, 0, child]; + return root; + } + var Release_failure = [248, _dI_, caml_fresh_oo_id(0)]; + function raw_flush_release_queue(queue){ + function aux(failures, param){ + var failures$0 = failures, param$0 = param; + for(;;){ + if(! param$0) return failures$0; + var + failures$1 = sub_release(failures$0, param$0[1], param$0[2]), + failures$0 = failures$1, + param$0 = param$0[3]; + } + } + return aux(0, queue); + } + function flush_release_queue(queue){ + var queue$0 = queue[1]; + queue[1] = 0; + return raw_flush_release_queue(queue$0); + } + function sample(queue, self){ + if(2 !== self[0]) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dJ_], 1); + var match = self[1]; + if(typeof match !== "number"){var value$0 = match[1]; return value$0;} + if(1 - self[4]){self[4] = 1; sub_acquire(self, self[5]);} + self[1] = 1; + var _tl_ = self[5], value = sub_sample(queue)(self, _tl_), _tm_ = self[1]; + a: + if(typeof _tm_ === "number" && _tm_){self[1] = [0, value]; break a;} + return value; + } + function set_on_invalidate(x, f){ + if(2 !== x[0]) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dK_], 1); + x[3] = f; + return; + } + function flush_or_fail(main_exn, queue){ + var failures = flush_release_queue(queue); + if(failures) + throw caml_maybe_attach_backtrace + ([0, Release_failure, main_exn, failures], 1); + return; + } + function quick_sample(root){ + var queue = [0, 0]; + try{var result = sample(queue, root);} + catch(exn$0){ + var exn = caml_wrap_exception(exn$0); + flush_or_fail([0, exn], queue); + throw caml_maybe_attach_backtrace(exn, 0); + } + flush_or_fail(0, queue); + return result; + } + function symbol_bind(x, f){return bind$1(x, f);} + function map_reduce(inj, param, items){ + var plus = param[2], zero = param[1]; + function cons_monoid(c, xs, v){ + var c$0 = c, xs$0 = xs, v$0 = v; + for(;;){ + if(xs$0){ + var xs$1 = xs$0[2], match = xs$0[1], v$1 = match[2], c$1 = match[1]; + if(c$0 === c$1){ + var + v$2 = caml_call2(plus, v$1, v$0), + c$2 = c$0 + 1 | 0, + c$0 = c$2, + xs$0 = xs$1, + v$0 = v$2; + continue; + } + } + return [0, [0, c$0, v$0], xs$0]; + } + } + function cons_monoid$0(xs, v){ + return cons_monoid(0, xs, caml_call1(inj, v)); + } + var match = fold_left(cons_monoid$0, 0, items); + if(! match) return zero; + var xs = match[2], x = match[1][2]; + return fold_left + (function(acc, param){ + var v = param[2]; + return caml_call2(plus, v, acc); + }, + x, + xs); + } + var not_origin = [0, 0], origin = [0, 0]; + function make$3(param){return [1, 0, 0, origin, 0];} + function set_parent(parent, param){ + if(typeof param === "number") return; + if(0 !== param[0]) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dL_], 1); + param[5] = parent; + return; + } + function make_node(set, left, right, parent){ + if(set) var value = set[1], binding = [0, value, 1]; else var binding = 0; + var node = [0, 0, left, binding, right, parent, 0]; + set_parent(node, left); + set_parent(node, right); + return node; + } + function raw_invalidate(param){ + var param$0 = param; + for(;;){ + if(typeof param$0 === "number") + throw caml_maybe_attach_backtrace([0, Assert_failure, _dM_], 1); + if(0 !== param$0[0]) return iter(invalidate, param$0[4]); + if(0 === param$0[6]) return; + param$0[6] = 0; + var param$0 = param$0[5]; + } + } + function append(set, parent){ + if(typeof parent !== "number" && 1 === parent[0]){ + raw_invalidate(parent); + var node = make_node(set, parent[2], 0, parent); + parent[2] = node; + return node; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _dN_], 1); + } + function get$4(param){ + if(typeof param !== "number" && 0 === param[0]){ + var match = param[3]; + if(match){var value = match[1]; return [0, value];} + } + return 0; + } + function invalidate_binding(param){ + if(! param) return; + param[2] = 0; + return; + } + function set_binding(x, t){ + if(typeof t !== "number"){ + if(0 !== t[0]) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dO_], 1); + if(typeof t[5] !== "number"){ + raw_invalidate(t); + invalidate_binding(t[3]); + t[3] = x; + return 0; + } + } + return 0; + } + function symbol$3(t, value){return set_binding([0, value, 1], t);} + function clear$2(root){ + var root$0 = root; + for(;;){ + if(typeof root$0 === "number") return; + if(0 !== root$0[0]){ + var child = root$0[2]; + root$0[2] = 0; + clear$2(child); + return raw_invalidate(root$0); + } + var left = root$0[2], right = root$0[4]; + invalidate_binding(root$0[3]); + root$0[2] = 0; + root$0[4] = 0; + root$0[5] = 0; + root$0[3] = 0; + root$0[1] = max_int; + clear$2(left); + var root$0 = right; + } + } + function size(node){ + if(typeof node === "number") return 0; + if(0 !== node[0]) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dQ_], 1); + if(0 === node[6]) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dP_], 1); + return node[6]; + } + function smaller_ell(smin, smax){ + var + _tj_ = smin < smax ? 1 : 0, + _tk_ = _tj_ ? (smin & smax) << 1 < smax ? 1 : 0 : _tj_; + return _tk_; + } + function disbalanced(smin, smax){return smaller_ell(smin, smax >>> 1 | 0);} + function reparent(parent, oldchild, newchild){ + if(typeof parent !== "number"){ + if(0 !== parent[0]){ + if(parent[2] !== oldchild) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dS_], 1); + parent[2] = newchild; + return; + } + if(parent[2] === oldchild){parent[2] = newchild; return;} + if(parent[4] === oldchild){parent[4] = newchild; return;} + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _dR_], 1); + } + function rot_left$0(counter, version, sn){ + if(typeof sn !== "number" && 0 === sn[0]){ + var rn = sn[4]; + if(typeof rn !== "number" && 1 !== rn[0]){ + var parent = sn[5], rl = rn[2]; + if(typeof rl === "number") + var rl$0 = 0; + else{ + if(0 !== rl[0]) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dU_], 1); + rl[5] = sn; + var rl$0 = rl; + } + rn[2] = sn; + sn[4] = rl$0; + sn[5] = rn; + rn[5] = parent; + reparent(parent, sn, rn); + balance(version, sn); + if(counter >= 50) + return caml_trampoline_return(balance$0, [0, version, rn]); + var counter$0 = counter + 1 | 0; + return balance$0(counter$0, version, rn); + } + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _dT_], 1); + } + function rot_left(version, sn){ + return caml_trampoline(rot_left$0(0, version, sn)); + } + function rot_right$0(counter, version, sn){ + if(typeof sn !== "number" && 0 === sn[0]){ + var ln = sn[2]; + if(typeof ln !== "number" && 1 !== ln[0]){ + var parent = sn[5], lr = ln[4]; + if(typeof lr === "number") + var lr$0 = 0; + else{ + if(0 !== lr[0]) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dW_], 1); + lr[5] = sn; + var lr$0 = lr; + } + ln[4] = sn; + sn[2] = lr$0; + sn[5] = ln; + ln[5] = parent; + reparent(parent, sn, ln); + balance(version, sn); + if(counter >= 50) + return caml_trampoline_return(balance$0, [0, version, ln]); + var counter$0 = counter + 1 | 0; + return balance$0(counter$0, version, ln); + } + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _dV_], 1); + } + function rot_right(version, sn){ + return caml_trampoline(rot_right$0(0, version, sn)); + } + function inc_left(counter, version, self){ + if(typeof self !== "number" && 0 === self[0]){ + var right = self[4]; + a: + if(typeof right !== "number" && 0 === right[0]){ + var _ti_ = size(right[2]); + if(smaller_ell(size(right[4]), _ti_)){rot_right(version, right); break a;} + } + if(counter >= 50) + return caml_trampoline_return(rot_left$0, [0, version, self]); + var counter$0 = counter + 1 | 0; + return rot_left$0(counter$0, version, self); + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _dX_], 1); + } + function inc_right(counter, version, self){ + if(typeof self !== "number" && 0 === self[0]){ + var left = self[2]; + a: + if(typeof left !== "number" && 0 === left[0]){ + var _th_ = size(left[4]); + if(smaller_ell(size(left[2]), _th_)){rot_left(version, left); break a;} + } + if(counter >= 50) + return caml_trampoline_return(rot_right$0, [0, version, self]); + var counter$0 = counter + 1 | 0; + return rot_right$0(counter$0, version, self); + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _dY_], 1); + } + function balance$0(counter, version, self){ + if(typeof self !== "number" && 0 === self[0]){ + var sl = size(self[2]), sr = size(self[4]); + if(sl < sr){ + if(! disbalanced(sl, sr)){ + self[1] = version; + self[6] = (1 + sl | 0) + sr | 0; + return self; + } + if(counter >= 50) + return caml_trampoline_return(inc_left, [0, version, self]); + var counter$1 = counter + 1 | 0; + return inc_left(counter$1, version, self); + } + if(! disbalanced(sr, sl)){ + self[1] = version; + self[6] = (1 + sl | 0) + sr | 0; + return self; + } + if(counter >= 50) + return caml_trampoline_return(inc_right, [0, version, self]); + var counter$0 = counter + 1 | 0; + return inc_right(counter$0, version, self); + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _dZ_], 1); + } + function balance(version, self){ + return caml_trampoline(balance$0(0, version, self)); + } + function compute_sub_size(version, self){ + var self$0 = self; + for(;;){ + if(typeof self$0 === "number") return; + if(0 !== self$0[0]) return; + var _te_ = 0 === self$0[6] ? 1 : 0; + if(! _te_) return _te_; + var _tf_ = self$0[2]; + if(typeof _tf_ !== "number" && 0 === _tf_[0] && 0 === _tf_[6]){var self$2 = self$0[2], self$0 = self$2; continue;} + var _tg_ = self$0[4]; + if(typeof _tg_ !== "number" && 0 === _tg_[0] && 0 === _tg_[6]){var self$1 = self$0[4], self$0 = self$1; continue;} + var parent = self$0[5]; + balance(version, self$0); + var self$0 = parent; + } + } + function reset_version(version, param){ + var param$0 = param; + for(;;){ + if(typeof param$0 === "number") return; + if(0 !== param$0[0]) + throw caml_maybe_attach_backtrace([0, Assert_failure, _d0_], 1); + param$0[1] = version; + reset_version(version, param$0[2]); + var param$0 = param$0[4]; + } + } + function rebalance(r){ + if(typeof r !== "number" && 1 === r[0]){ + var _td_ = r[2]; + if(typeof _td_ !== "number"){ + if(0 !== _td_[0]) + throw caml_maybe_attach_backtrace([0, Assert_failure, _d2_], 1); + if(0 === _td_[6]){ + var + version = r[1] + 1 | 0, + version$0 = + version === 2147483647 + ? (r[3] = [0, 0], reset_version(0, r[2]), 0) + : version; + r[1] = version$0; + compute_sub_size(version$0, r[2]); + return version$0; + } + } + return r[1]; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _d1_], 1); + } + function plus(param, x, y){ + var plus = param[2], zero = param[1]; + return x === zero ? y : y === zero ? x : caml_call2(plus, x, y); + } + function extract_bindings(tree){ + function aux(acc, param){ + var acc$0 = acc, rnode = param; + for(;;){ + if(! rnode) return acc$0; + var acc$1 = aux(acc$0, rnode[6]), _tb_ = rnode[2]; + if(_tb_) + var + _tc_ = _tb_[2] ? [0, [0, rnode[2], rnode[3]], acc$1] : acc$1, + acc$2 = _tc_; + else + var acc$2 = acc$1; + var acc$0 = acc$2, rnode = rnode[5]; + } + } + return aux(0, tree); + } + function full_rebuild(red, tree){ + var bindings = [0, extract_bindings(red[3])]; + function aux(cell){ + if(typeof cell === "number") return 0; + if(0 !== cell[0]) + throw caml_maybe_attach_backtrace([0, Assert_failure, _d4_], 1); + var left = aux(cell[2]), binding = cell[3], _ta_ = bindings[1]; + a: + if(binding){ + if(_ta_){ + var + bindings$0 = _ta_[2], + match = _ta_[1], + reduction = match[2], + binding$0 = match[1]; + if(binding === binding$0){ + bindings[1] = bindings$0; + var reduction$0 = reduction; + break a; + } + } + if(! binding[2]) + throw caml_maybe_attach_backtrace([0, Assert_failure, _d3_], 1); + var reduction$0 = caml_call2(red[5], cell, binding[1]); + } + else + var reduction$0 = red[6][1]; + var + right = aux(cell[4]), + aggregate = left ? plus(red[6], left[4], reduction$0) : reduction$0, + aggregate$0 = right ? plus(red[6], aggregate, right[4]) : aggregate; + return [0, cell, cell[3], reduction$0, aggregate$0, left, right]; + } + var result = aux(tree); + if(0 === bindings[1]) return result; + throw caml_maybe_attach_backtrace([0, Assert_failure, _d5_], 1); + } + function extract_fringe(version, tree){ + function aux(acc, tree){ + var acc$0 = acc, rnode = tree; + for(;;){ + if(! rnode) return acc$0; + var match = rnode[1]; + if(typeof match !== "number" && 0 === match[0] && match[1] <= version) + return [0, rnode, acc$0]; + var acc$1 = aux(acc$0, rnode[6]), _s__ = rnode[2]; + if(_s__) + var _s$_ = _s__[2] ? [0, rnode, acc$1] : acc$1, acc$2 = _s$_; + else + var acc$2 = acc$1; + var tree$0 = rnode[5], acc$0 = acc$2, rnode = tree$0; + } + } + return aux(0, tree); + } + function incremental_rebuild(red, version, tree){ + var fringe = [0, extract_fringe(version, red[3])]; + function aux(cell){ + if(typeof cell !== "number" && 0 === cell[0]){ + if(cell[1] <= version){ + var match = fringe[1]; + if(match){ + var reduction = match[1]; + if(reduction){ + var fringe$0 = match[2]; + if(reduction[1] !== cell) + throw caml_maybe_attach_backtrace([0, Assert_failure, _d6_], 1); + fringe[1] = fringe$0; + return reduction; + } + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _d7_], 1); + } + var left = aux(cell[2]), binding = cell[3], _s8_ = fringe[1]; + a: + if(binding){ + if(_s8_){ + var rnode = _s8_[1]; + if(rnode){ + var fringe$1 = _s8_[2]; + if(binding === rnode[2]){ + fringe[1] = fringe$1; + var _s9_ = rnode[3], reduction$0 = _s9_; + break a; + } + } + } + if(! binding[2]) + throw caml_maybe_attach_backtrace([0, Assert_failure, _d8_], 1); + var reduction$0 = caml_call2(red[5], cell, binding[1]); + } + else + var reduction$0 = red[6][1]; + var + right = aux(cell[4]), + aggregate = left ? plus(red[6], left[4], reduction$0) : reduction$0, + aggregate$0 = right ? plus(red[6], aggregate, right[4]) : aggregate; + return [0, cell, cell[3], reduction$0, aggregate$0, left, right]; + } + return 0; + } + var result = aux(tree); + if(0 === fringe[1]) return result; + throw caml_maybe_attach_backtrace([0, Assert_failure, _d9_], 1); + } + function eval$0(red){ + var root = red[2]; + if(typeof root !== "number" && 1 === root[0]){ + var version = rebalance(red[2]); + if(red[4] !== root[3]){ + red[4] = root[3]; + red[3] = full_rebuild(red, root[2]); + } + else + red[3] = incremental_rebuild(red, red[1], root[2]); + red[1] = version; + var match = red[3]; + return match ? match[4] : red[6][1]; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _d__], 1); + } + function opaque(_s7_){return _s7_;} + function map_reduce$0(mapper, monoid, source){ + var + reduction = [0, 0, source, 0, not_origin, mapper, monoid], + prim$0 = + prim + (function(self){ + var match = reduction[2]; + if(typeof match !== "number" && 1 === match[0]){ + var _s6_ = match[4]; + match[4] = [0, opaque(self), _s6_]; + return reduction; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _ea_], 1); + }, + function(self, reduction){ + var match = reduction[2]; + if(typeof match !== "number" && 1 === match[0]){ + var + _s0_ = match[4], + _s1_ = opaque(self), + _s2_ = function(_s5_, _s4_){return _s5_ !== _s4_ ? 1 : 0;}; + match[4] = find_all(function(_s3_){return _s2_(_s1_, _s3_);})(_s0_); + return 0; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _d$_], 1); + }); + return func(get_prim(prim$0), eval$0); + } + var empty$0 = 0; + function element(v){return [0, 0, v];} + function maxi(a, b){return a < b ? b : a;} + function rank(t){ + if(typeof t === "number") return 0; + if(0 === t[0]){if(0 !== t[1]) invalid_arg(_eb_); return 0;} + if(0 !== (t[1] & 2)) invalid_arg(_ec_); + return t[1] >>> 2 | 0; + } + function concat$1(a, b){ + if(typeof a === "number") + var x = b; + else{ + if(typeof b !== "number"){ + var _sZ_ = rank(b); + return [1, (maxi(rank(a), _sZ_) + 1 | 0) << 2, a, b]; + } + var x = a; + } + return x; + } + function view(param){ + return typeof param === "number" + ? 0 + : 0 === param[0] ? [0, param[2]] : [1, param[2], param[3]]; + } + var mask_old = 1, mask_new = 2, mask_both = 3; + function is_shared(m){return -1 === m ? 1 : 0;} + function is_not_shared(m){return -1 !== m ? 1 : 0;} + function is_both(m){return (m & 3) === 3 ? 1 : 0;} + function is_old(m){return (m & 3) === 1 ? 1 : 0;} + function is_new(m){return (m & 3) === 2 ? 1 : 0;} + function set_both(m){return m | 3;} + function get_index(m){return m >>> 2 | 0;} + function with_index_new(index){return index << 2 | 2;} + function unmark(m){return m & lnot(mask_both);} + function marked(s){return s[1];} + function shared(s){return s[2];} + function blocked(s){return s[3];} + function mk_stats(param){return [0, 0, 0, 0];} + function new_marked(stats){stats[1] = stats[1] + 1 | 0; return;} + function new_shared(stats){stats[2] = stats[2] + 1 | 0; return;} + function new_blocked(stats){stats[3] = stats[3] + 1 | 0; return;} + function block(stats, mask, param){ + var t = param; + for(;;){ + if(typeof t === "number") return; + if(0 === t[0]){ + var + mark = t[1], + _sV_ = (mark & 3) !== 3 ? 1 : 0, + _sW_ = _sV_ ? 0 !== (mark & 3) ? 1 : 0 : _sV_; + if(_sW_){ + if(0 !== (mark & mask)) + throw caml_maybe_attach_backtrace([0, Assert_failure, _ed_], 1); + new_marked(stats); + new_blocked(stats); + t[1] = mark | 3; + } + return; + } + var + mark$0 = t[1], + _sX_ = (mark$0 & 3) !== 3 ? 1 : 0, + _sY_ = _sX_ ? 0 !== (mark$0 & 3) ? 1 : 0 : _sX_; + if(! _sY_) return _sY_; + if(0 !== (mark$0 & mask)) + throw caml_maybe_attach_backtrace([0, Assert_failure, _ee_], 1); + new_marked(stats); + new_blocked(stats); + t[1] = mark$0 | 3; + block(stats, mask, t[2]); + var t = t[3]; + } + } + function enqueue(stats, q, mask, t){ + if(typeof t === "number") return; + if(0 === t[0]){ + var mark = t[1]; + if(0 === (mark & mask)){ + new_marked(stats); + if(0 === (mark & 3)) + t[1] = mark | mask; + else{t[1] = -1; new_blocked(stats); new_shared(stats);} + } + var + _sR_ = -1 !== mark ? 1 : 0, + _sS_ = _sR_ ? (mark & 3) === 3 ? 1 : 0 : _sR_; + return _sS_ ? (t[1] = -1, new_shared(stats)) : _sS_; + } + var mark$0 = t[1]; + if(0 === (mark$0 & mask)){ + new_marked(stats); + if(0 === (mark$0 & 3)){ + t[1] = mark$0 | mask; + add(t, q); + } + else{ + t[1] = -1; + new_blocked(stats); + new_shared(stats); + block(stats, mask, t[2]); + block(stats, mask, t[3]); + } + } + var + _sT_ = -1 !== mark$0 ? 1 : 0, + _sU_ = _sT_ ? (mark$0 & 3) === 3 ? 1 : 0 : _sT_; + return _sU_ ? (t[1] = -1, new_shared(stats)) : _sU_; + } + function dequeue(stats, q, mask){ + var t = take(q); + if(typeof t !== "number" && 1 === t[0]){ + var _sQ_ = (t[1] & 3) === mask ? 1 : 0; + return _sQ_ + ? (enqueue(stats, q, mask, t[2]), enqueue(stats, q, mask, t[3])) + : _sQ_; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _ef_], 1); + } + function traverse1(stats, q, mask){ + for(;;){if(is_empty(q)) return; dequeue(stats, q, mask);} + } + function traverse(sold, snew, qold, qnew){ + for(;;){ + if(is_empty(qold)) return traverse1(snew, qnew, mask_new); + if(is_empty(qnew)) return traverse1(sold, qold, mask_old); + dequeue(sold, qold, mask_old); + dequeue(snew, qnew, mask_new); + } + } + function old_stats(tr){return tr[1];} + function new_stats(tr){return tr[2];} + function unsafe_traverse(old_root, new_root){ + var + old_stats = mk_stats(0), + new_stats = mk_stats(0), + old_queue = create$0(0), + new_queue = create$0(0); + enqueue(old_stats, old_queue, mask_old, old_root); + enqueue(new_stats, new_queue, mask_new, new_root); + traverse(old_stats, new_stats, old_queue, new_queue); + return [0, old_stats, new_stats]; + } + function restore(param){ + if(typeof param === "number") return; + if(0 === param[0]){param[1] = 0; return;} + var _sP_ = rank(param[3]); + param[1] = (maxi(rank(param[2]), _sP_) + 1 | 0) << 2; + return; + } + function next_shared_index(st){ + var result = st[6]; + st[6] = result + 1 | 0; + return result; + } + function unblock(param){ + var param$0 = param; + for(;;){ + if(typeof param$0 === "number") return; + if(0 === param$0[0]){ + var t = param$0[1]; + if(typeof t !== "number" && 0 === t[0]){ + var + mark = t[1], + _sL_ = is_not_shared(mark), + _sM_ = _sL_ ? is_both(mark) : _sL_; + if(_sM_) t[1] = unmark(mark); + return; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _eg_], 1); + } + var t$0 = param$0[1]; + if(typeof t$0 !== "number" && 1 === t$0[0]){ + var + r = param$0[4], + l = param$0[3], + mark$0 = t$0[1], + _sN_ = is_not_shared(mark$0), + _sO_ = _sN_ ? is_both(mark$0) : _sN_; + if(! _sO_) return _sO_; + t$0[1] = unmark(mark$0); + unblock(l); + var param$0 = r; + continue; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _eh_], 1); + } + } + function unmark_old(st, t){ + var t$0 = t; + for(;;){ + if(typeof t$0 === "number") return; + if(0 === t$0[0]){ + var a = t$0[1]; + if(typeof a !== "number" && 0 === a[0]){ + var b = t$0[2], mark = a[1]; + if(! is_old(mark)){ + if(is_shared(mark)){ + var index = next_shared_index(st); + caml_check_bound(st[4], index)[1 + index] = a; + caml_check_bound(st[5], index)[1 + index] = [0, t$0, 0]; + a[1] = with_index_new(index); + return; + } + if(is_new(mark)){ + var + index$0 = get_index(mark), + _sH_ = [0, t$0, caml_check_bound(st[5], index$0)[1 + index$0]]; + caml_check_bound(st[5], index$0)[1 + index$0] = _sH_; + return; + } + var _sI_ = is_both(mark); + if(_sI_) + throw caml_maybe_attach_backtrace([0, Assert_failure, _ek_], 1); + return _sI_; + } + var dropped_leaf = st[2]; + if(-1 < dropped_leaf){ + caml_check_bound(st[1], dropped_leaf)[1 + dropped_leaf] = b; + st[2] = dropped_leaf + 1 | 0; + if(st[2] > st[3]) + throw caml_maybe_attach_backtrace([0, Assert_failure, _ej_], 1); + } + a[1] = unmark(mark); + return; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _ei_], 1); + } + var a$0 = t$0[1]; + if(typeof a$0 !== "number" && 1 === a$0[0]){ + var b$0 = t$0[2], r = t$0[4], l = t$0[3], mark$0 = a$0[1]; + if(is_shared(mark$0)){ + var index$1 = next_shared_index(st); + caml_check_bound(st[4], index$1)[1 + index$1] = a$0; + caml_check_bound(st[5], index$1)[1 + index$1] = [0, t$0, 0]; + a$0[1] = with_index_new(index$1); + unblock(l); + return unblock(r); + } + if(! is_old(mark$0)){ + if(is_new(mark$0)){ + var + index$2 = mark$0 >>> 2 | 0, + _sJ_ = [0, t$0, caml_check_bound(st[5], index$2)[1 + index$2]]; + caml_check_bound(st[5], index$2)[1 + index$2] = _sJ_; + return; + } + var _sK_ = is_both(mark$0); + if(_sK_) + throw caml_maybe_attach_backtrace([0, Assert_failure, _en_], 1); + return _sK_; + } + if(-1 < st[3]){ + var dropped_join = st[3] - 1 | 0; + caml_check_bound(st[1], dropped_join)[1 + dropped_join] = b$0; + st[3] = dropped_join; + if(st[2] > st[3]) + throw caml_maybe_attach_backtrace([0, Assert_failure, _em_], 1); + } + a$0[1] = unmark(mark$0); + unmark_old(st, l); + var t$0 = r; + continue; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _el_], 1); + } + } + function prepare_shared(st){ + var _sE_ = st[6] - 1 | 0, _sD_ = 0; + if(_sE_ >= 0){ + var i = _sD_; + for(;;){ + var match = caml_check_bound(st[4], i)[1 + i]; + if(typeof match !== "number") + if(0 === match[0]) + match[1] = set_both(match[1]); + else + match[1] = set_both(match[1]); + var xs = caml_check_bound(st[5], i)[1 + i]; + if(! xs) + throw caml_maybe_attach_backtrace([0, Assert_failure, _eo_], 1); + if(xs[2]){var _sF_ = rev(xs); caml_check_bound(st[5], i)[1 + i] = _sF_;} + var _sG_ = i + 1 | 0; + if(_sE_ === i) break; + var i = _sG_; + } + } + return; + } + function unmark_new(st, t){ + if(typeof t === "number") return 0; + if(0 !== t[0]){ + var mark$0 = t[1]; + if(-1 === mark$0){ + var index$0 = next_shared_index(st); + t[1] = 0; + caml_check_bound(st[4], index$0)[1 + index$0] = t; + var l = unmark_new(st, t[2]), r = unmark_new(st, t[3]); + return [1, t, 0, l, r]; + } + if(! is_both(mark$0)){ + t[1] = unmark(t[1]); + var l$0 = unmark_new(st, t[2]), r$0 = unmark_new(st, t[3]); + return [1, t, 0, l$0, r$0]; + } + var + index$1 = mark$0 >>> 2 | 0, + match$0 = caml_check_bound(st[5], index$1)[1 + index$1]; + if(! match$0) + throw caml_maybe_attach_backtrace([0, Assert_failure, _ep_], 1); + var xs$0 = match$0[2], x$0 = match$0[1]; + caml_check_bound(st[5], index$1)[1 + index$1] = xs$0; + if(0 === xs$0) t[1] = 0; + return x$0; + } + var mark = t[1]; + if(is_not_shared(mark) && is_both(mark)){ + var + index = mark >>> 2 | 0, + match = caml_check_bound(st[5], index)[1 + index]; + if(! match) return [0, t, 0]; + var xs = match[2], x = match[1]; + caml_check_bound(st[5], index)[1 + index] = xs; + return x; + } + t[1] = 0; + return [0, t, 0]; + } + var no_dropped = [0, 0, [0], 0, 0]; + function diff(get_dropped, xold, tnew){ + if(typeof xold === "number"){ + if(typeof tnew === "number") return [0, no_dropped, 0]; + } + else{var a$0 = xold[1]; if(a$0 === tnew) return [0, no_dropped, xold];} + if(typeof xold === "number") + var empty = empty$0; + else + var a = xold[1], empty = a; + var + traversal = unsafe_traverse(empty, tnew), + sold = old_stats(traversal), + snew = new_stats(traversal), + _sq_ = blocked(snew), + _sr_ = blocked(sold) + _sq_ | 0, + nb_dropped = marked(sold) - _sr_ | 0, + _ss_ = shared(snew), + nb_shared = shared(sold) + _ss_ | 0, + _st_ = 0, + _su_ = caml_make_vect(nb_shared, 0), + _sv_ = caml_make_vect(nb_shared, 0), + nb_dropped$0 = get_dropped ? nb_dropped : -1, + _sw_ = get_dropped ? 0 : -1, + _sx_ = get_dropped ? caml_make_vect(nb_dropped, 0) : [0], + st = [0, _sx_, _sw_, nb_dropped$0, _sv_, _su_, _st_]; + unmark_old(st, xold); + if(st[2] !== st[3]) + throw caml_maybe_attach_backtrace([0, Assert_failure, _eq_], 1); + prepare_shared(st); + var result = unmark_new(st, tnew), _sy_ = st[6] - 1 | 0; + if(_sy_ >= 0){ + var i$0 = _sy_; + for(;;){ + restore(caml_check_bound(st[4], i$0)[1 + i$0]); + var _sC_ = i$0 - 1 | 0; + if(0 === i$0) break; + var i$0 = _sC_; + } + } + if(! get_dropped) return [0, no_dropped, result]; + var xleaf = [0, 0], xjoin = [0, 0], _sA_ = st[6] - 1 | 0, _sz_ = 0; + if(_sA_ >= 0){ + var i = _sz_; + for(;;){ + iter + (function(param){ + if(typeof param !== "number") + if(0 === param[0]){ + var match = param[2]; + if(match){var b = match[1]; xleaf[1] = [0, b, xleaf[1]]; return 0;} + } + else{ + var match$0 = param[2]; + if(match$0){ + var b$0 = match$0[1]; + xjoin[1] = [0, b$0, xjoin[1]]; + return 0; + } + } + return 0; + }, + caml_check_bound(st[5], i)[1 + i]); + var _sB_ = i + 1 | 0; + if(_sA_ === i) break; + var i = _sB_; + } + } + return [0, [0, st[2], st[1], xleaf[1], xjoin[1]], result]; + } + function eval$1(map_reduce, other){ + if(typeof other === "number") return 0; + function aux(param){ + a: + if(typeof param !== "number"){ + b: + { + if(0 === param[0]){ + var t = param[1]; + if(typeof t !== "number" && 0 === t[0]){ + var _so_ = param[2]; + if(_so_){var b = _so_[1]; break b;} + var result = caml_call1(map_reduce[1], t[2]); + param[2] = [0, result]; + return result; + } + break a; + } + var _sp_ = param[2]; + if(! _sp_){ + var + l = aux(param[3]), + r = aux(param[4]), + result$0 = caml_call2(map_reduce[2], l, r); + param[2] = [0, result$0]; + return result$0; + } + var b = _sp_[1]; + } + return b; + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _er_], 1); + } + return [0, aux(other)]; + } + function make$4(map, reduce){return [0, [0, map, reduce], 0];} + function reduce(param){ + var tree = param[2], map_reduce = param[1]; + return eval$1(map_reduce, tree); + } + function update$0(param, new_tree){ + var + old_tree = param[2], + map_reduce = param[1], + tree = diff(0, old_tree, new_tree)[2]; + return [0, map_reduce, tree]; + } + function update_and_get_dropped(param, new_tree){ + var + old_tree = param[2], + map_reduce = param[1], + match = diff(1, old_tree, new_tree), + tree = match[2], + dropped = match[1]; + return [0, dropped, [0, map_reduce, tree]]; + } + function fold_dropped(kind, f, dropped, acc){ + var acc$0 = [0, acc]; + if(3850876 === kind) + var bound = dropped[1], bound$0 = bound, start = 0; + else if(858694086 <= kind) + var bound$0 = dropped[2].length - 1, start = dropped[1]; + else + var bound$0 = dropped[2].length - 1, start = 0; + var _sm_ = bound$0 - 1 | 0; + if(_sm_ >= start){ + var i = start; + for(;;){ + var match = caml_check_bound(dropped[2], i)[1 + i]; + if(match){var x = match[1]; acc$0[1] = caml_call2(f, x, acc$0[1]);} + var _sn_ = i + 1 | 0; + if(_sm_ === i) break; + var i = _sn_; + } + } + if(858694086 > kind) + iter + (function(x){acc$0[1] = caml_call2(f, x, acc$0[1]); return 0;}, + dropped[3]); + if(3850876 !== kind) + iter + (function(x){acc$0[1] = caml_call2(f, x, acc$0[1]); return 0;}, + dropped[4]); + return; + } + function pure_map_reduce(map, reduce, param){ + if(typeof param === "number") + throw caml_maybe_attach_backtrace([0, Assert_failure, _es_], 1); + if(0 === param[0]) return caml_call1(map, param[2]); + var _sl_ = pure_map_reduce(map, reduce, param[3]); + return caml_call2(reduce, pure_map_reduce(map, reduce, param[2]), _sl_); + } + function fold_monoid(map, param, seq){ + var reduce$0 = param[2], zero = param[1], match = is_pure(seq); + if(match){ + var other = match[1]; + return typeof other === "number" + ? pure(zero) + : pure(pure_map_reduce(map, reduce$0, other)); + } + var reducer = [0, make$4(map, reduce$0)]; + return func + (seq, + function(seq){ + var reducer$0 = update$0(reducer[1], seq); + reducer[1] = reducer$0; + var match = reduce(reducer$0); + if(! match) return zero; + var x = match[1]; + return x; + }); + } + var monoid = [0, empty$0, concat$1]; + function transform_list(ls, f){return map_reduce(f, monoid, ls);} + function of_list$1(ls){return transform_list(ls, element);} + function to_list$1(x){ + function fold(x, acc){ + var x$0 = x, acc$0 = acc; + for(;;){ + if(typeof x$0 === "number") return acc$0; + if(0 === x$0[0]) return [0, x$0[2], acc$0]; + var acc$1 = fold(x$0[3], acc$0), x$1 = x$0[2], x$0 = x$1, acc$0 = acc$1; + } + } + return fold(x, 0); + } + var + lwd_empty = pure(0), + lwd_monoid = [0, lwd_empty, function(x, y){return map2(x, y, concat$1);}]; + function map$5(f, seq){ + return fold_monoid + (function(x){return element(caml_call1(f, x));}, monoid, seq); + } + function filter_map$0(f, seq){ + function select(x){ + var match = caml_call1(f, x); + if(! match) return empty$0; + var y = match[1]; + return element(y); + } + return fold_monoid(select, monoid, seq); + } + function bind$2(seq, f){return join(fold_monoid(f, lwd_monoid, seq));} + function lift(seq){ + return bind$2(seq, function(_sk_){return func(_sk_, element);}); + } + function handler(opts, type, func){return [0, opts, type, func];} + function is_pure_element(param){ + var _sj_ = param[1]; + if(82 === _sj_){var x = param[2]; return is_some(is_pure(x));} + if(83 > _sj_) return 1; + var x$0 = param[2]; + return is_some(is_pure(x$0)); + } + function extract_pure_element(x){return get$0(is_pure(x));} + function extract_pure_elements(xs){ + return flatten + (map$1 + (function(param){ + var _si_ = param[1]; + if(82 === _si_){ + var x = param[2]; + return [0, extract_pure_element(x), 0]; + } + if(83 <= _si_){ + var x$0 = param[2]; + return to_list$1(extract_pure_element(x$0)); + } + var x$1 = param[2]; + return [0, x$1, 0]; + }, + xs)); + } + function prepare_col(col){ + if(! col) return _et_; + var + match = partition(is_pure_element, col), + impure = match[2], + pure = match[1]; + return [0, extract_pure_elements(pure), impure]; + } + function consume_children(col){ + if(! col) return _eu_; + var _se_ = col[1], _sf_ = _se_[1]; + if(82 === _sf_){ + if(! col[2]){var x = _se_[2]; return [0, 0, [0, func(x, element)]];} + } + else + if(83 <= _sf_){ + if(! col[2]){var x$0 = _se_[2]; return [0, 0, [0, x$0]];} + } + else if(! col[2]){var x$1 = _se_[2]; return [0, [0, x$1, 0], 0];} + return for_all(is_pure_element, col) + ? [0, + flatten + (map$1 + (function(param){ + var _sg_ = param[1]; + if(82 === _sg_){ + var x = param[2]; + return [0, extract_pure_element(x), 0]; + } + if(83 <= _sg_){ + var x$0 = param[2]; + return to_list$1(extract_pure_element(x$0)); + } + var x$1 = param[2]; + return [0, x$1, 0]; + }, + col)), + 0] + : [0, + 0, + [0, + map_reduce + (function(param){ + var _sh_ = param[1]; + if(82 === _sh_){var x = param[2]; return func(x, element);} + if(83 <= _sh_){var x$0 = param[2]; return x$0;} + var x$1 = param[2]; + return pure(element(x$1)); + }, + lwd_monoid, + col)]]; + } + function child_node(node){return [0, node];} + function child_join(left, right){return [1, null$0, left, right];} + var + jv_append = cst_append, + jv_before = "before", + jv_remove = cst_remove, + jv_contains = "contains"; + function contains_focus(node){ + var match = active_el(document(node)); + if(! match) return 0; + var el = match[1]; + return call(node, jv_contains, [0, el]) | 0; + } + function update_children(self, children){ + var reducer = [0, make$4(child_node, child_join)]; + return func + (children, + function(children){ + var + match = update_and_get_dropped(reducer[1], children), + reducer$0 = match[2], + dropped = match[1]; + reducer[1] = reducer$0; + function schedule_for_removal(child, param){ + if(0 !== child[0]) return 0; + var node = child[1]; + return node[cst_lwd_to_remove] = true$0; + } + fold_dropped(3850876, schedule_for_removal, dropped, 0); + var + preserve_focus = contains_focus(self), + match$0 = reduce(reducer$0); + if(match$0){ + var + tree = match$0[1], + update = + function(acc, t){ + if(0 !== t[0]){ + if(! is_null(t[1])) return t[1]; + var acc$0 = update(acc, t[3]), acc$1 = update(acc$0, t[2]); + t[1] = acc$1; + return acc$1; + } + var node = t[1]; + delete node[cst_lwd_to_remove]; + if(node.parentNode !== self) + if(is_null(acc)) + call(self, jv_append, [0, node]); + else + call(acc, jv_before, [0, node]); + else{ + var _sa_ = node.nextSibling !== acc ? 1 : 0; + if(_sa_){ + if(preserve_focus){ + var _sb_ = contains_focus(node); + if(_sb_) + var + shift_siblings = + function(param){ + for(;;){ + var sibling = node.nextSibling; + if(sibling === acc) return 1; + if(is_null(sibling)) return 0; + call(node, jv_before, [0, sibling]); + } + }, + _sc_ = shift_siblings(0); + else + var _sc_ = _sb_; + } + else + var _sc_ = preserve_focus; + var _sd_ = 1 - _sc_; + } + else + var _sd_ = _sa_; + if(_sd_) + if(is_null(acc)) + call(self, jv_append, [0, node]); + else + call(acc, jv_before, [0, node]); + } + return node; + }; + update(null$0, tree); + } + function remove_child(child, param){ + if(0 !== child[0]) return 0; + var + node = child[1], + _r__ = is_some$0(node[cst_lwd_to_remove]), + _r$_ = + _r__ + ? (delete + node[cst_lwd_to_remove], + call(node, jv_remove, [0]), + 0) + : _r__; + return _r$_; + } + fold_dropped(3850876, remove_child, dropped, 0); + return self; + }); + } + var pure_unit = pure(0), dummy_kv_at = [0, empty, empty]; + function attach_attribs(el, attribs){ + function set_kv(param){ + var v = param[2], k = param[1]; + return equal(k, class$0) ? set_class(v, 1, el) : set_at(k, [0, v], el); + } + function unset_kv(param){ + var v = param[2], k = param[1]; + return equal(k, class$0) ? set_class(v, 0, el) : set_at(k, 0, el); + } + function set_lwd_at(param){ + var prev = [0, dummy_kv_at]; + return function(at){ + if(prev[1] !== dummy_kv_at) unset_kv(prev[1]); + var pair = to_pair(at); + set_kv(pair); + prev[1] = pair; + return 0;}; + } + return map_reduce + (function(param){ + var _r8_ = param[1]; + if(82 === _r8_){ + var at = param[2]; + return func(at, set_lwd_at(0)); + } + if(83 > _r8_) + throw caml_maybe_attach_backtrace([0, Assert_failure, _ev_], 1); + var ats = param[2]; + function set_at(at){ + var kv = to_pair(at); + set_kv(kv); + return kv; + } + var + reducer = + [0, + make$4(set_at, function(param, _r9_){return dummy_kv_at;})]; + function update(ats){ + var + match = update_and_get_dropped(reducer[1], ats), + reducer$0 = match[2], + dropped = match[1]; + reducer[1] = reducer$0; + fold_dropped + (3850876, + function(kv, param){return unset_kv(kv);}, + dropped, + 0); + reduce(reducer$0); + return 0; + } + return func(ats, update); + }, + [0, pure_unit, function(param, _r7_){return pure_unit;}], + attribs); + } + function listen$0(el, param){ + var func = param[3], type = param[2], opts = param[1]; + return listen(opts, type, func, el); + } + function attach_events(el, events){ + return map_reduce + (function(param){ + var _r5_ = param[1]; + if(82 === _r5_){ + var at = param[2], cached = [0, 0]; + return func + (at, + function(h){ + var match = cached[1]; + if(match){var l = match[1]; unlisten(l);} + cached[1] = [0, listen$0(el, h)]; + return 0; + }); + } + if(83 > _r5_) + throw caml_maybe_attach_backtrace([0, Assert_failure, _ew_], 1); + var + ats = param[2], + reducer = + [0, + make$4 + (function(_r6_){return listen$0(el, _r6_);}, + function(x, y){return x;})]; + function update(ats){ + var + match = update_and_get_dropped(reducer[1], ats), + reducer$0 = match[2], + dropped = match[1]; + reducer[1] = reducer$0; + fold_dropped + (3850876, function(l, param){return unlisten(l);}, dropped, 0); + reduce(reducer$0); + return 0; + } + return func(ats, update); + }, + [0, pure_unit, function(param, _r4_){return pure_unit;}], + events); + } + function v$4(d, opt, _r2_, tag, children){ + if(opt) var sth = opt[1], at = sth; else var at = 0; + if(_r2_) var sth$0 = _r2_[1], ev = sth$0; else var ev = 0; + var + match = prepare_col(at), + impure_at = match[2], + at$0 = match[1], + match$0 = prepare_col(ev), + impure_ev = match$0[2], + ev$0 = match$0[1], + match$1 = consume_children(children), + impure_children = match$1[2], + children$0 = match$1[1], + el = v$2(d, [0, at$0], tag, children$0); + if(impure_at) + if(impure_children) + var + children$1 = impure_children[1], + _r3_ = update_children(el, children$1), + result = + map2 + (attach_attribs(el, impure_at), + _r3_, + function(param, el){return el;}); + else + var + result = + func(attach_attribs(el, impure_at), function(param){return el;}); + else if(impure_children) + var + children$2 = impure_children[1], + result = update_children(el, children$2); + else + var result = pure(el); + iter(function(h){listen$0(el, h); return 0;}, ev$0); + var + result$0 = + impure_ev + ? map2 + (attach_events(el, impure_ev), + result, + function(param, el){return el;}) + : result; + return result$0; + } + function cons$1(name, d, at, ev, cs){return v$4(d, at, ev, name, cs);} + function void_cons(name, d, at, ev, param){return v$4(d, at, ev, name, 0);} + function button$0(_rY_, _rZ_, _r0_, _r1_){ + return cons$1(button, _rY_, _rZ_, _r0_, _r1_); + } + function div$1(_rU_, _rV_, _rW_, _rX_){ + return cons$1(div, _rU_, _rV_, _rW_, _rX_); + } + function form$0(_rQ_, _rR_, _rS_, _rT_){ + return cons$1(form, _rQ_, _rR_, _rS_, _rT_); + } + function img$0(_rM_, _rN_, _rO_, _rP_){ + return void_cons(img, _rM_, _rN_, _rO_, _rP_); + } + function input$1(_rI_, _rJ_, _rK_, _rL_){ + return void_cons(input$0, _rI_, _rJ_, _rK_, _rL_); + } + function label$0(_rE_, _rF_, _rG_, _rH_){ + return cons$1(label, _rE_, _rF_, _rG_, _rH_); + } + function span$1(_rA_, _rB_, _rC_, _rD_){ + return cons$1(span, _rA_, _rB_, _rC_, _rD_); + } + function symbol$4(_rz_, _ry_){return _rz_ === _ry_ ? 1 : 0;} + function symbol$5(_rx_, _rw_){return _rx_ !== _rw_ ? 1 : 0;} + function symbol$6(_rv_, _ru_){return _ru_ < _rv_ ? 1 : 0;} + function symbol$7(_rt_, _rs_){return _rs_ <= _rt_ ? 1 : 0;} + function symbol$8(_rr_, _rq_){return _rq_ < _rr_ ? 1 : 0;} + function to_string$2(opt, item_to_string, a){ + if(opt) var sth = opt[1], sep = sth; else var sep = _ex_; + return function(_ro_){return concat(sep, _ro_);} + (function(_rp_){return map$1(item_to_string, _rp_);}(to_list(a))); + } + function is_nan(x){return 4 === caml_classify_float(x) ? 1 : 0;} + function of_string_opt(a){ + try{var _rm_ = [0, caml_float_of_string(a)]; return _rm_;} + catch(_rn_){ + var _rl_ = caml_wrap_exception(_rn_); + if(_rl_[1] === Failure) return 0; + throw caml_maybe_attach_backtrace(_rl_, 0); + } + } + function equal$0(a, b){return a === b ? 1 : 0;} + function compare$1(a, b){return compare(a, b);} + function get$5(tbl, x){ + try{var _rj_ = [0, find(tbl, x)]; return _rj_;} + catch(_rk_){ + var _ri_ = caml_wrap_exception(_rk_); + if(_ri_ === Not_found) return 0; + throw caml_maybe_attach_backtrace(_ri_, 0); + } + } + function symbol$9(f, l){ + if(! l) return 0; + var tl = l[2], x = l[1], x$0 = caml_call1(f, x), block = [0, x$0, 24029]; + map_dps(block, 1, f, tl); + return block; + } + function map_dps(dst, offset, f, l){ + var dst$0 = dst, offset$0 = offset, l$0 = l; + for(;;){ + if(! l$0){dst$0[1 + offset$0] = 0; return;} + var + tl = l$0[2], + x = l$0[1], + x$0 = caml_call1(f, x), + dst$1 = [0, x$0, 24029]; + dst$0[1 + offset$0] = dst$1; + var dst$0 = dst$1, offset$0 = 1, l$0 = tl; + } + } + function filter(f, l){ + var l$0 = l; + for(;;){ + if(! l$0) return 0; + var tl = l$0[2], x = l$0[1], keep = caml_call1(f, x); + if(keep){ + var block = [0, x, 24029]; + filter_dps(block, 1, f, tl); + return block; + } + var l$0 = tl; + } + } + function filter_dps(dst, offset, f, l){ + var dst$0 = dst, offset$0 = offset, l$0 = l; + for(;;){ + if(! l$0){dst$0[1 + offset$0] = 0; return;} + var tl = l$0[2], x = l$0[1], keep = caml_call1(f, x); + if(keep){ + var dst$1 = [0, x, 24029]; + dst$0[1 + offset$0] = dst$1; + var dst$0 = dst$1, offset$0 = 1, l$0 = tl; + } + else + var l$0 = tl; + } + } + function init$1(n, f){ + function init(i, n, f){ + if(symbol$4(i, n)) return 0; + var x = caml_call1(f, i), block = [0, x, 24029]; + init_dps(block, 1, i + 1 | 0, n, f); + return block; + } + function init_dps(dst, offset, i, n, f){ + var dst$0 = dst, offset$0 = offset, i$0 = i; + for(;;){ + if(symbol$4(i$0, n)){dst$0[1 + offset$0] = 0; return;} + var x = caml_call1(f, i$0), dst$1 = [0, x, 24029]; + dst$0[1 + offset$0] = dst$1; + var i$1 = i$0 + 1 | 0, dst$0 = dst$1, offset$0 = 1, i$0 = i$1; + } + } + return init(0, n, f); + } + function symbol$10(f, param){ + if(! param) return 0; + var x = param[1]; + return [0, caml_call1(f, x)]; + } + function map_or(default$0, f, param){ + if(! param) return default$0; + var x = param[1]; + return caml_call1(f, x); + } + function flat_map(f, o){ + if(! o) return; + var x = o[1]; + return caml_call1(f, x); + } + function symbol_bind$0(o, f){return flat_map(f, o);} + function value$3(x, default$0){ + if(! x) return default$0; + var y = x[1]; + return y; + } + function to_list$2(o){if(! o) return 0; var x = o[1]; return [0, x, 0];} + function symbol$11(x, f){return symbol$10(f, x);} + make_self_init(0); + function symbol$12(f, e){ + if(0 === e[0]){var x = e[1]; return [0, caml_call1(f, x)];} + var s = e[1]; + return [1, s]; + } + var Get_error = [248, _ey_, caml_fresh_oo_id(0)]; + function get_exn(param){ + if(0 !== param[0]) throw caml_maybe_attach_backtrace(Get_error, 1); + var x = param[1]; + return x; + } + function get_or(e, default$0){ + if(0 !== e[0]) return default$0; + var x = e[1]; + return x; + } + function flat_map$0(f, e){ + if(0 === e[0]){var x = e[1]; return caml_call1(f, x);} + var s = e[1]; + return [1, s]; + } + function symbol$13(e, f){return symbol$12(f, e);} + function symbol_bind$1(e, f){return flat_map$0(f, e);} + function Make$0(O){ + var + S = _P_(O), + empty = S[1], + mem = S[3], + add = S[4], + remove = S[6], + union = S[7], + elements = S[23], + of_list = S[37]; + return [0, + , + , + , + empty, + , + mem, + add, + , + remove, + union, + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + of_list, + , + , + , + , + , + , + , + , + , + , + elements]; + } + function _ez_(_rg_){ + var _rh_ = Make$0(_rg_); + return [0, + _rh_[4], + , + _rh_[6], + _rh_[7], + , + _rh_[9], + _rh_[10], + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + _rh_[40], + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + _rh_[51]]; + } + function suffix(suf, s){ + var len = caml_ml_string_length(suf); + if(symbol$6(len, caml_ml_string_length(s))) return 0; + var off = caml_ml_string_length(s) - len | 0; + function check(i){ + var i$0 = i; + for(;;){ + if(symbol$4(i$0, len)) return 1; + if + (caml_string_unsafe_get(s, off + i$0 | 0) + !== caml_string_unsafe_get(suf, i$0)) + return 0; + var i$1 = i$0 + 1 | 0, i$0 = i$1; + } + } + return check(0); + } + function chop_suffix(suf, s){ + return suffix(suf, s) + ? [0, + sub$0 + (s, + 0, + caml_ml_string_length(s) - caml_ml_string_length(suf) | 0)] + : 0; + } + var Lex_error = [248, _eA_, caml_fresh_oo_id(0)]; + function lex_error(err){ + throw caml_maybe_attach_backtrace([0, Lex_error, err], 1); + } + function error_pos(lexbuf){ + var + start = lexbuf[11], + cnum = lexbuf[7] - start[3] | 0, + enum$0 = lexbuf[6] - start[3] | 0; + return [0, start[2], cnum, enum$0]; + } + function string2num(s){ + try{var _re_ = [3, caml_int_of_string(s)]; return _re_;} + catch(_rf_){ + var _rd_ = caml_wrap_exception(_rf_); + if(_rd_[1] === Failure) return [2, s]; + throw caml_maybe_attach_backtrace(_rd_, 0); + } + } + function update_pos(lexbuf){ + var pos = lexbuf[11]; + lexbuf[11] = [0, pos[1], pos[2] + 1 | 0, lexbuf[5], pos[4]]; + return; + } + function int_of_hexchar(c){ + if(65 <= c){ + if(97 <= c){ + if(103 > c) return (c - 97 | 0) + 10 | 0; + } + else if(71 > c) return (c - 65 | 0) + 10 | 0; + } + else if(9 >= c - 48 >>> 0) return c - 48 | 0; + return lex_error(symbol(_eC_, symbol(make$1(1, c), _eB_))); + } + function utf8_of_code(buf, idx, u){ + var i = [0, idx]; + function add_char(b, c){ + caml_bytes_unsafe_set(b, i[1], c); + i[1] = i[1] + 1 | 0; + return; + } + function max_used_bits(n, u){return 0 === (u >>> n | 0) ? 1 : 0;} + if(max_used_bits(7, u)) + add_char(buf, of_int_exn(u)); + else if(max_used_bits(11, u)){ + add_char(buf, of_int_exn(192 | (u >>> 6 | 0) & 31)); + add_char(buf, of_int_exn(128 | u & 63)); + } + else if(max_used_bits(16, u)){ + add_char(buf, of_int_exn(224 | (u >>> 12 | 0) & 15)); + add_char(buf, of_int_exn(128 | (u >>> 6 | 0) & 63)); + add_char(buf, of_int_exn(128 | u & 63)); + } + else if(max_used_bits(21, u)){ + add_char(buf, of_int_exn(240 | (u >>> 18 | 0) & 7)); + add_char(buf, of_int_exn(128 | (u >>> 12 | 0) & 63)); + add_char(buf, of_int_exn(128 | (u >>> 6 | 0) & 63)); + add_char(buf, of_int_exn(128 | u & 63)); + } + else if(max_used_bits(26, u)){ + add_char(buf, of_int_exn(248 | (u >>> 24 | 0) & 3)); + add_char(buf, of_int_exn(128 | (u >>> 18 | 0) & 63)); + add_char(buf, of_int_exn(128 | (u >>> 12 | 0) & 63)); + add_char(buf, of_int_exn(128 | (u >>> 6 | 0) & 63)); + add_char(buf, of_int_exn(128 | u & 63)); + } + else{ + add_char(buf, of_int_exn(252 | (u >>> 30 | 0) & 1)); + add_char(buf, of_int_exn(128 | (u >>> 24 | 0) & 63)); + add_char(buf, of_int_exn(128 | (u >>> 18 | 0) & 63)); + add_char(buf, of_int_exn(128 | (u >>> 12 | 0) & 63)); + add_char(buf, of_int_exn(128 | (u >>> 6 | 0) & 63)); + add_char(buf, of_int_exn(128 | u & 63)); + } + return i[1]; + } + function utf8_of_surrogate_pair(buf, idx, high, low){ + var + high$0 = high - 55296 | 0, + low$0 = low - 56320 | 0, + code = 65536 + (high$0 << 10 | low$0) | 0; + return utf8_of_code(buf, idx, code); + } + function escaping_error(msg, s, c, off){ + var offs = string_of_int(off); + if(c) + var c$0 = c[1], cs = symbol(_eE_, symbol(make$1(1, c$0), _eD_)); + else + var cs = _eH_; + return lex_error + (symbol + (msg, symbol(_eG_, symbol(offs, symbol(cs, symbol(_eF_, s)))))); + } + function unescape_string(s){ + var + l = caml_ml_string_length(s), + s$0 = caml_create_bytes(l), + j = [0, 0], + u1 = [0, 0], + u2 = [0, 0], + state = [0, 748194550], + _q6_ = l - 1 | 0, + _q5_ = 0; + if(_q6_ >= 0){ + var i = _q5_; + for(;;){ + var _q7_ = state[1]; + a: + if(308570827 <= _q7_) + if(308570829 <= _q7_) + if(748194550 <= _q7_) + if(945120947 <= _q7_) + if(117 === caml_string_get(s, i)) + state[1] = 308570827; + else + escaping_error(_eJ_, s, [0, caml_string_get(s, i)], i); + else{ + var c = caml_string_get(s, i); + if(92 === c) + state[1] = 258914209; + else{caml_bytes_unsafe_set(s$0, j[1], c); j[1] = j[1] + 1 | 0;} + } + else if(308570830 <= _q7_){ + state[1] = 748194550; + var _q9_ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _q9_; + if(56320 <= u2[1] && 57343 >= u2[1]){ + j[1] = utf8_of_surrogate_pair(s$0, j[1], u1[1], u2[1]); + break a; + } + escaping_error(_eK_, s, 0, i); + } + else{ + var _q__ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _q__; + state[1] = 308570830; + } + else if(308570828 <= _q7_){ + var _q$_ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _q$_; + state[1] = 308570829; + } + else{ + u2[1] = int_of_hexchar(caml_string_get(s, i)); + state[1] = 308570828; + } + else if(297481261 <= _q7_) + if(297481263 <= _q7_) + if(308569555 <= _q7_) + if(92 === caml_string_get(s, i)) + state[1] = 945120947; + else + escaping_error(_eL_, s, [0, caml_string_get(s, i)], i); + else{ + var _ra_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _ra_; + if(55296 <= u1[1] && 56319 >= u1[1]){state[1] = 308569555; break a;} + j[1] = utf8_of_code(s$0, j[1], u1[1]); + state[1] = 748194550; + } + else if(297481262 <= _q7_){ + var _rb_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _rb_; + state[1] = 297481263; + } + else{ + var _rc_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _rc_; + state[1] = 297481262; + } + else if(297481260 <= _q7_){ + u1[1] = int_of_hexchar(caml_string_get(s, i)); + state[1] = 297481261; + } + else{ + var match = caml_string_get(s, i); + b: + if(34 === match){ + caml_bytes_unsafe_set(s$0, j[1], 34); + state[1] = 748194550; + j[1] = j[1] + 1 | 0; + } + else{ + c: + if(92 <= match){ + if(118 > match){ + switch(match - 92 | 0){ + case 0: + caml_bytes_unsafe_set(s$0, j[1], 92); + state[1] = 748194550; + j[1] = j[1] + 1 | 0; + break; + case 6: + caml_bytes_unsafe_set(s$0, j[1], 8); + state[1] = 748194550; + j[1] = j[1] + 1 | 0; + break; + case 10: + caml_bytes_unsafe_set(s$0, j[1], 12); + state[1] = 748194550; + j[1] = j[1] + 1 | 0; + break; + case 18: + caml_bytes_unsafe_set(s$0, j[1], 10); + state[1] = 748194550; + j[1] = j[1] + 1 | 0; + break; + case 22: + caml_bytes_unsafe_set(s$0, j[1], 13); + state[1] = 748194550; + j[1] = j[1] + 1 | 0; + break; + case 24: + caml_bytes_unsafe_set(s$0, j[1], 9); + state[1] = 748194550; + j[1] = j[1] + 1 | 0; + break; + case 25: + state[1] = 297481260; break; + default: break c; + } + break b; + } + } + else if(47 === match){ + caml_bytes_unsafe_set(s$0, j[1], 47); + state[1] = 748194550; + j[1] = j[1] + 1 | 0; + break b; + } + escaping_error(_eM_, s, [0, caml_string_get(s, i)], i); + } + } + var _q8_ = i + 1 | 0; + if(_q6_ === i) break; + var i = _q8_; + } + } + if(748194550 !== state[1]) escaping_error(_eI_, s, 0, l); + return j[1] !== l ? unsafe_to_string(sub(s$0, 0, j[1])) : s; + } + function engine(tbl, state, buf){ + var result = caml_lex_engine(tbl, state, buf); + return result; + } + function Make$1(Compliance){ + function read$0(counter, lexbuf){ + var _q4_ = 0; + if(counter >= 50) + return caml_trampoline_return(ocaml_lex_read_rec, [0, lexbuf, _q4_]); + var counter$0 = counter + 1 | 0; + return ocaml_lex_read_rec(counter$0, lexbuf, _q4_); + } + function read(lexbuf){return caml_trampoline(read$0(0, lexbuf));} + function ocaml_lex_read_rec(counter, lexbuf, ocaml_lex_state){ + var ocaml_lex_state$0 = ocaml_lex_state; + for(;;){ + var + ocaml_lex_state$1 = engine(ocaml_lex_tables, ocaml_lex_state$0, lexbuf); + if(26 >= ocaml_lex_state$1 >>> 0) + switch(ocaml_lex_state$1){ + case 0: + return _eN_; + case 1: + return _eO_; + case 2: + return 2; + case 3: + return 0; + case 4: + return 1; + case 5: + return 9; + case 6: + return 10; + case 7: + return caml_call1(Compliance[5], 13) + ? 13 + : lex_error(symbol(_eQ_, symbol(lexeme(lexbuf), _eP_))); + case 8: + return caml_call1(Compliance[5], 14) + ? 14 + : lex_error(symbol(_eS_, symbol(lexeme(lexbuf), _eR_))); + case 9: + return caml_call1(Compliance[6], 11) + ? 11 + : lex_error(symbol(_eU_, symbol(lexeme(lexbuf), _eT_))); + case 10: + return caml_call1(Compliance[6], 12) + ? 12 + : lex_error(symbol(_eW_, symbol(lexeme(lexbuf), _eV_))); + case 11: + return 7; + case 12: + return 8; + case 13: + return caml_call1(Compliance[2], 3); + case 14: + return caml_call1(Compliance[2], 5); + case 15: + return caml_call1(Compliance[2], 5); + case 16: + return caml_call1(Compliance[2], 4); + case 17: + var tok = string2num(lexeme(lexbuf)); + if(typeof tok !== "number") + switch(tok[0]){ + case 2: + return caml_call1(Compliance[4], tok); + case 3: + return caml_call1(Compliance[3], tok); + } + return tok; + case 18: + var _q3_ = [4, caml_float_of_string(lexeme(lexbuf))]; + return caml_call1(Compliance[2], _q3_); + case 19: + return _eX_; + case 20: + var s = sub_lexeme(lexbuf, lexbuf[5] + 1 | 0, lexbuf[6] - 1 | 0); + return [0, unescape_string(s)]; + case 21: + return 6; + case 22: + if(counter >= 50) + return caml_trampoline_return(read$0, [0, lexbuf]); + var counter$0 = counter + 1 | 0; + return read$0(counter$0, lexbuf); + case 23: + update_pos(lexbuf); + if(counter >= 50) + return caml_trampoline_return(read$0, [0, lexbuf]); + var counter$1 = counter + 1 | 0; + return read$0(counter$1, lexbuf); + case 24: + var match = caml_call1(Compliance[7], 0); + if(0 !== match[0]){var err = match[1]; return [5, err];} + read_comment(lexbuf); + if(counter >= 50) + return caml_trampoline_return(read$0, [0, lexbuf]); + var counter$2 = counter + 1 | 0; + return read$0(counter$2, lexbuf); + case 25: + var match$0 = caml_call1(Compliance[7], 0); + if(0 !== match$0[0]){var err$0 = match$0[1]; return [5, err$0];} + if(counter >= 50) + return caml_trampoline_return(read$0, [0, lexbuf]); + var counter$3 = counter + 1 | 0; + return read$0(counter$3, lexbuf); + default: + return lex_error(symbol(_eZ_, symbol(lexeme(lexbuf), _eY_))); + } + caml_call1(lexbuf[1], lexbuf); + var ocaml_lex_state$0 = ocaml_lex_state$1; + } + } + function read_comment$0(counter, lexbuf){ + var _q2_ = 88; + if(counter >= 50) + return caml_trampoline_return + (ocaml_lex_read_comment_rec, [0, lexbuf, _q2_]); + var counter$0 = counter + 1 | 0; + return ocaml_lex_read_comment_rec(counter$0, lexbuf, _q2_); + } + function read_comment(lexbuf){ + return caml_trampoline(read_comment$0(0, lexbuf)); + } + function ocaml_lex_read_comment_rec(counter, lexbuf, ocaml_lex_state){ + var ocaml_lex_state$0 = ocaml_lex_state; + for(;;){ + var + ocaml_lex_state$1 = engine(ocaml_lex_tables, ocaml_lex_state$0, lexbuf); + if(3 >= ocaml_lex_state$1 >>> 0) + switch(ocaml_lex_state$1){ + case 0: + return; + case 1: + update_pos(lexbuf); + if(counter >= 50) + return caml_trampoline_return(read_comment$0, [0, lexbuf]); + var counter$0 = counter + 1 | 0; + return read_comment$0(counter$0, lexbuf); + case 2: + return lex_error(_e0_); + default: + if(counter >= 50) + return caml_trampoline_return(read_comment$0, [0, lexbuf]); + var counter$1 = counter + 1 | 0; + return read_comment$0(counter$1, lexbuf); + } + caml_call1(lexbuf[1], lexbuf); + var ocaml_lex_state$0 = ocaml_lex_state$1; + } + } + return [0, read]; + } + var Json_error_info = [248, _e1_, caml_fresh_oo_id(0)]; + function create_from_lexbuf(lexbuf, emsg){ + var + match = error_pos(lexbuf), + echar = match[3], + schar = match[2], + eline = match[1]; + return [0, eline, schar, echar, emsg]; + } + function log2(n){return 1 < n ? 1 + log2(n >> 1) | 0 : 0;} + function bits$0(n){return log2(n) + 1 | 0;} + var max_json_int = 53 < bits$0(max_int) ? 2097151 : max_int; + function string_of_float_json(f){ + var is_int = (f | 0) == f ? 1 : 0; + if(is_int && Math.abs(f) <= max_json_int){ + var int_value = f | 0; + return symbol(string_of_int(int_value), _e2_); + } + var + s = caml_format_float("%.16g", f), + s$0 = caml_float_of_string(s) == f ? s : caml_format_float("%.17g", f); + if(! contains(s$0, 46) && ! contains(s$0, 101)) return symbol(s$0, _e3_); + return s$0; + } + function token_error(tok){ + if(typeof tok === "number") + switch(tok){ + case 0: + var err = _e4_; break; + case 1: + var err = _e5_; break; + case 2: + var err = _e6_; break; + case 3: + var err = _e7_; break; + case 4: + var err = _e8_; break; + case 5: + var err = _e9_; break; + case 6: + var err = _e__; break; + case 7: + var err = _e$_; break; + case 8: + var err = _fa_; break; + case 9: + var err = _fb_; break; + case 10: + var err = _fc_; break; + case 11: + var err = _fd_; break; + case 12: + var err = _fe_; break; + case 13: + var err = _ff_; break; + default: var err = _fg_; + } + else + switch(tok[0]){ + case 0: + var s = tok[1], err = symbol(_fi_, symbol(s, _fh_)); break; + case 1: + var s$0 = tok[1], err = s$0; break; + case 2: + var s$1 = tok[1], err = symbol(_fk_, symbol(s$1, _fj_)); break; + case 3: + var i = tok[1], err = symbol(_fm_, symbol(string_of_int(i), _fl_)); + break; + case 4: + var f = tok[1], err = symbol(_fo_, symbol(string_of_float(f), _fn_)); + break; + case 5: + var s$2 = tok[1], err = symbol(_fq_, symbol(s$2, _fp_)); break; + default: + var + b = tok[1], + _q1_ = b ? _fs_ : _fu_, + err = symbol(_ft_, symbol(_q1_, _fr_)); + } + return [0, 148000204, err]; + } + function Make$2(Compliance){ + var Parse_error = [248, _fv_, caml_fresh_oo_id(0)]; + function json_value(reader){ + function token_value(tok){ + if(typeof tok === "number") + switch(tok){ + case 0: + return object_value_start(0); + case 2: + return Compliance[12]; + case 3: + return caml_call1(Compliance[9], -625979624); + case 4: + return caml_call1(Compliance[9], 3900603); + case 5: + return caml_call1(Compliance[9], 874173192); + case 6: + throw caml_maybe_attach_backtrace([0, Parse_error, 3456156], 1); + case 9: + return array_value_start(0); + case 11: + return variant_value_start(0); + case 13: + return tuple_value_start(0); + } + else + switch(tok[0]){ + case 0: + var s = tok[1]; return caml_call1(Compliance[13], s); + case 2: + var s$0 = tok[1]; return caml_call1(Compliance[11], s$0); + case 3: + var i = tok[1]; return caml_call1(Compliance[10], i); + case 4: + var f = tok[1]; return caml_call1(Compliance[9], [0, 365180284, f]); + case 6: + var b = tok[1]; return caml_call1(Compliance[14], b); + } + throw caml_maybe_attach_backtrace([0, Parse_error, token_error(tok)], 1); + } + function value(param){return token_value(caml_call1(reader, 0));} + function array_value_start(param){ + var tok = caml_call1(reader, 0); + if(typeof tok === "number" && 10 === tok) + return caml_call1(Compliance[16], 0); + return array_values_start(tok, 0); + } + function array_values_start(tok, acc){ + var v = token_value(tok), tok$0 = caml_call1(reader, 0); + if(typeof tok$0 === "number"){ + if(7 === tok$0) return array_values([0, v, acc]); + if(10 === tok$0){ + var _q0_ = rev([0, v, acc]); + return caml_call1(Compliance[16], _q0_); + } + } + throw caml_maybe_attach_backtrace + ([0, Parse_error, token_error(tok$0)], 1); + } + function array_values(acc){ + var acc$0 = acc; + for(;;){ + var v = value(0), tok = caml_call1(reader, 0); + if(typeof tok === "number"){ + if(7 === tok){var acc$1 = [0, v, acc$0], acc$0 = acc$1; continue;} + if(10 === tok){ + var _qZ_ = rev([0, v, acc$0]); + return caml_call1(Compliance[16], _qZ_); + } + } + throw caml_maybe_attach_backtrace + ([0, Parse_error, token_error(tok)], 1); + } + } + function object_value_start(param){ + var tok = caml_call1(reader, 0); + if(typeof tok === "number" && 1 === tok) + return caml_call1(Compliance[15], 0); + return object_values_start(tok, 0); + } + function object_values_start(tok, acc){ + var v = colon_value(tok, 0), tok$0 = caml_call1(reader, 0); + if(typeof tok$0 === "number"){ + if(1 === tok$0){ + var _qY_ = rev([0, v, acc]); + return caml_call1(Compliance[15], _qY_); + } + if(7 === tok$0) return object_values([0, v, acc]); + } + throw caml_maybe_attach_backtrace + ([0, Parse_error, token_error(tok$0)], 1); + } + function object_values(acc){ + var acc$0 = acc; + for(;;){ + var v = key_colon_value(0), tok = caml_call1(reader, 0); + if(typeof tok === "number"){ + if(1 === tok){ + var _qX_ = rev([0, v, acc$0]); + return caml_call1(Compliance[15], _qX_); + } + if(7 === tok){var acc$1 = [0, v, acc$0], acc$0 = acc$1; continue;} + } + throw caml_maybe_attach_backtrace + ([0, Parse_error, token_error(tok)], 1); + } + } + function colon_value(v, param){ + if(typeof v !== "number" && 0 === v[0]){ + var k = v[1], tok = caml_call1(reader, 0); + if(typeof tok === "number" && 8 === tok) return [0, k, value(0)]; + throw caml_maybe_attach_backtrace + ([0, Parse_error, token_error(tok)], 1); + } + throw caml_maybe_attach_backtrace([0, Parse_error, token_error(v)], 1); + } + function key_colon_value(param){ + var tok = caml_call1(reader, 0); + if(typeof tok !== "number" && 0 === tok[0]){ + var k = tok[1], tok$0 = caml_call1(reader, 0); + if(typeof tok$0 === "number" && 8 === tok$0) return [0, k, value(0)]; + throw caml_maybe_attach_backtrace + ([0, Parse_error, token_error(tok$0)], 1); + } + throw caml_maybe_attach_backtrace([0, Parse_error, token_error(tok)], 1); + } + function tuple_value_start(param){ + var v1 = value(0), tok = caml_call1(reader, 0); + if(typeof tok === "number"){ + if(7 === tok){ + var v2 = value(0), tok$0 = caml_call1(reader, 0); + if(typeof tok$0 === "number"){ + if(7 === tok$0) return tuple_values([0, v2, [0, v1, 0]]); + if(14 <= tok$0) + return caml_call1(Compliance[17], [0, v1, [0, v2, 0]]); + } + throw caml_maybe_attach_backtrace + ([0, Parse_error, token_error(tok$0)], 1); + } + if(14 <= tok) + throw caml_maybe_attach_backtrace([0, Parse_error, _fw_], 1); + } + throw caml_maybe_attach_backtrace([0, Parse_error, token_error(tok)], 1); + } + function tuple_values(acc){ + var acc$0 = acc; + for(;;){ + var v = value(0), tok = caml_call1(reader, 0); + if(typeof tok === "number"){ + if(7 === tok){var acc$1 = [0, v, acc$0], acc$0 = acc$1; continue;} + if(14 <= tok){ + var _qW_ = rev([0, v, acc$0]); + return caml_call1(Compliance[17], _qW_); + } + } + throw caml_maybe_attach_backtrace + ([0, Parse_error, token_error(tok)], 1); + } + } + function variant_value_start(param){ + var tok = caml_call1(reader, 0); + if(typeof tok === "number"){ + if(12 === tok) + throw caml_maybe_attach_backtrace([0, Parse_error, _fx_], 1); + } + else if(0 === tok[0]){ + var k = tok[1], tok$0 = caml_call1(reader, 0); + if(typeof tok$0 === "number"){ + if(8 === tok$0) return variant_end(k, [0, value(0)]); + if(12 === tok$0) return caml_call2(Compliance[18], k, 0); + } + throw caml_maybe_attach_backtrace + ([0, Parse_error, token_error(tok$0)], 1); + } + throw caml_maybe_attach_backtrace([0, Parse_error, token_error(tok)], 1); + } + function variant_end(k, v){ + var tok = caml_call1(reader, 0); + if(typeof tok === "number" && 12 === tok) + return caml_call2(Compliance[18], k, v); + throw caml_maybe_attach_backtrace([0, Parse_error, token_error(tok)], 1); + } + try{var tok = caml_call1(reader, 0);} + catch(exn$0){ + var exn = caml_wrap_exception(exn$0); + if(exn[1] === Parse_error && 3456156 === exn[2]) return 0; + throw caml_maybe_attach_backtrace(exn, 0); + } + if(typeof tok === "number" && 6 === tok) return 0; + return [0, token_value(tok)]; + } + function decode(reader){ + try{var res = json_value(reader);} + catch(exn$0){ + var exn = caml_wrap_exception(exn$0); + if(exn[1] === Parse_error){ + var match = exn[2]; + if(typeof match === "number") return _fy_; + var err = match[2]; + return [1, err]; + } + if(exn[1] !== Lex_error) throw caml_maybe_attach_backtrace(exn, 0); + var err$0 = exn[2]; + return [1, err$0]; + } + return [0, res]; + } + return [0, Compliance, decode]; + } + function nibble_to_hex(i){ + var _qV_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_qV_); + } + function add_hex_byte(add_char, i){ + caml_call1(add_char, nibble_to_hex((i >>> 4 | 0) & 15)); + return caml_call1(add_char, nibble_to_hex(i & 15)); + } + function escape(add_char, add_string, s){ + var l = caml_ml_string_length(s), _qT_ = l - 1 | 0, _qS_ = 0; + if(_qT_ >= 0){ + var i = _qS_; + for(;;){ + var c = caml_string_get(s, i); + a: + if(92 === c) + caml_call1(add_string, _fz_); + else{ + b: + { + c: + { + if(35 > c){ + if(8 > c) break b; + switch(c - 8 | 0){ + case 0: + caml_call1(add_string, _fB_); break; + case 1: + caml_call1(add_string, _fC_); break; + case 2: + caml_call1(add_string, _fD_); break; + case 4: + caml_call1(add_string, _fE_); break; + case 5: + caml_call1(add_string, _fF_); break; + case 26: + caml_call1(add_string, _fG_); break; + case 24: + case 25: + break c; + default: break b; + } + break a; + } + if(127 === c) break b; + } + caml_call1(add_char, caml_string_get(s, i)); + break a; + } + caml_call1(add_string, _fA_); + add_hex_byte(add_char, c); + } + var _qU_ = i + 1 | 0; + if(_qT_ === i) break; + var i = _qU_; + } + } + return; + } + function Make$3(Compliance){ + function to_json_string(s){ + var buf = create$1(100); + function add_char$0(_qR_){return add_char(buf, _qR_);} + function add_string$0(_qQ_){return add_string(buf, _qQ_);} + function add_quote_string(s){ + add_char$0(34); + escape(add_char$0, add_string$0, s); + return add_char$0(34); + } + add_quote_string(s); + return contents(buf); + } + function pp_list(sep, ppx, out, l){ + function pp_sep(out, param){ + return caml_call1(fprintf$0(out)(_fH_), sep); + } + return pp_print_list([0, pp_sep], ppx, out, l); + } + function format(out, json){ + if(typeof json === "number") return pp_print_string(out, _fI_); + var _qH_ = json[1]; + if(726928360 <= _qH_){ + if(737456202 === _qH_){var b = json[2]; return pp_print_bool(out, b);} + if(928231259 > _qH_){ + if(848054398 <= _qH_){ + var l$0 = json[2]; + return l$0 + ? caml_call2 + (fprintf$0(out)(_fN_), + function(_qO_, _qP_){ + return pp_list(_fM_, format, _qO_, _qP_); + }, + l$0) + : pp_print_string(out, _fO_); + } + var l$1 = json[2]; + return 0 === l$1 + ? pp_print_string(out, _fP_) + : caml_call2 + (fprintf$0(out)(_fR_), + function(_qM_, _qN_){ + return pp_list(_fQ_, format, _qM_, _qN_); + }, + l$1); + } + if(963043957 <= _qH_){ + var l = json[2]; + return l + ? caml_call2 + (fprintf$0(out)(_fK_), + function(_qK_, _qL_){ + return pp_list(_fJ_, format_field, _qK_, _qL_); + }, + l) + : pp_print_string(out, _fL_); + } + } + else{ + if(3654863 === _qH_){ + var i = json[2]; + return pp_print_string(out, string_of_int(i)); + } + if(365180284 <= _qH_){ + if(708012133 > _qH_){ + var f = json[2], s$2 = caml_call1(Compliance[8], f); + return pp_print_string(out, s$2); + } + var _qI_ = json[2], match = _qI_[2], s$0 = _qI_[1]; + if(match){ + var json$0 = match[1], s$1 = to_json_string(s$0); + return caml_call3(fprintf$0(out)(_fS_), s$1, format, json$0); + } + var _qJ_ = to_json_string(s$0); + return caml_call1(fprintf$0(out)(_fT_), _qJ_); + } + if(-752863768 > _qH_){ + var s$3 = json[2]; + return pp_print_string(out, to_json_string(s$3)); + } + } + var s = json[2]; + return pp_print_string(out, s); + } + function format_field(out, param){ + var json = param[2], name = param[1], _qG_ = to_json_string(name); + return caml_call3(fprintf$0(out)(_fU_), _qG_, format, json); + } + function pretty_print(out, json){ + return caml_call2(fprintf$0(out)(_fV_), format, json); + } + function pretty_print_to_string(json){ + return caml_call2(asprintf(_fW_), pretty_print, json); + } + function pretty_print_to_channel(oc, json){ + var fmt = formatter_of_out_channel(oc); + return caml_call2(fprintf$0(fmt)(_fX_), pretty_print, json); + } + return [0, + , + , + , + , + pretty_print, + pretty_print_to_string, + pretty_print_to_channel]; + } + function _fY_(_qE_){ + var _qF_ = Make$3(_qE_); + return [0, _qF_[5], _qF_[6], _qF_[7]]; + } + function error$1(msg, json){ + throw caml_maybe_attach_backtrace([0, Failure, msg], 1); + } + function Strict(M){ + function to_assoc(json){ + if(typeof json !== "number" && 963043957 === json[1]){var obj = json[2]; return obj;} + return error$1(_fZ_, json); + } + function to_string(json){ + if(typeof json !== "number" && -976970511 === json[1]){var s = json[2]; return s;} + return error$1(_f0_, json); + } + return [0, , , , to_assoc, , , to_string]; + } + function null$1(param){return 870828711;} + var + M = [0, null$1], + _f1_ = Strict(M), + to_assoc = _f1_[4], + to_string$3 = _f1_[7]; + function token_to_string(tok){ + if(typeof tok === "number") + switch(tok){ + case 0: + return _f2_; + case 1: + return _f3_; + case 2: + return _f4_; + case 3: + return _f5_; + case 4: + return _f6_; + case 5: + return _f7_; + case 6: + return _f8_; + case 7: + return _f9_; + case 8: + return _f__; + case 9: + return _f$_; + case 10: + return _ga_; + case 11: + return _gb_; + case 12: + return _gc_; + case 13: + return _gd_; + default: return _ge_; + } + switch(tok[0]){ + case 0: + var s = tok[1]; return s; + case 1: + var err = tok[1]; return symbol(_gg_, symbol(err, _gf_)); + case 2: + var s$0 = tok[1]; return s$0; + case 3: + var i = tok[1]; return string_of_int(i); + case 4: + var f = tok[1]; return string_of_float(f); + case 5: + var err$0 = tok[1]; return err$0; + default: var b = tok[1]; return b ? _gh_ : _gi_; + } + } + function Make$4(Lexxer, Parser){ + function read_json(lexbuf){ + function reader(param){return caml_call1(Lexxer[1], lexbuf);} + var match = caml_call1(Parser[2], reader); + if(0 !== match[0]){var s = match[1]; return [1, s];} + var match$0 = match[1]; + if(! match$0) return _gk_; + var res = match$0[1]; + try{var tok = reader(0);} + catch(exn$0){ + var exn = caml_wrap_exception(exn$0); + if(exn[1] !== Lex_error) throw caml_maybe_attach_backtrace(exn, 0); + var err = exn[2]; + return [1, err]; + } + if(typeof tok === "number" && 6 === tok) return [0, res]; + return [1, symbol(_gj_, token_to_string(tok))]; + } + function read_json_error_info(lexbuf){ + var res = read_json(lexbuf); + if(0 === res[0]) return res; + var err = res[1], err_info = create_from_lexbuf(lexbuf, err); + return [1, err_info]; + } + function json_of_string_error_info(s){ + var lexbuf = from_string(0, s); + return read_json_error_info(lexbuf); + } + function json_of_channel_error_info(inc){ + var lexbuf = from_channel(0, inc); + return read_json_error_info(lexbuf); + } + function json_of_file_error_info(filename){ + try{ + var inc = open_in(filename), res = json_of_channel_error_info(inc); + _i_(inc); + return res; + } + catch(exn$0){ + var exn = caml_wrap_exception(exn$0); + if(exn[1] !== Sys_error) throw caml_maybe_attach_backtrace(exn, 0); + var err = exn[2]; + return [1, [0, 0, 0, 0, err]]; + } + } + function json_of_lexbuf_error_info_comp(opt, lexbuf){ + if(opt) var sth = opt[1], stream = sth; else var stream = 0; + function reader(param){return caml_call1(Lexxer[1], lexbuf);} + var match = caml_call1(Parser[2], reader); + if(0 === match[0]){ + var match$0 = match[1]; + if(match$0){ + var res = match$0[1]; + a: + if(stream) + var _qA_ = [0, [0, res]]; + else{ + try{var tok = reader(0);} + catch(exn$0){ + var exn = caml_wrap_exception(exn$0); + if(exn[1] !== Lex_error) throw caml_maybe_attach_backtrace(exn, 0); + var err = exn[2], _qC_ = [1, err], _qA_ = _qC_; + break a; + } + b: + { + if(typeof tok === "number" && 6 === tok){var _qD_ = [0, [0, res]]; break b;} + var _qD_ = [1, symbol(_gl_, token_to_string(tok))]; + } + var _qA_ = _qD_; + } + var _qB_ = _qA_; + } + else + var _qB_ = stream ? _gm_ : _gn_; + var res$0 = _qB_; + } + else + var s$0 = match[1], res$0 = [1, s$0]; + if(0 === res$0[0]){var res$1 = res$0[1]; return [0, res$1];} + var s = res$0[1], err_info = create_from_lexbuf(lexbuf, s); + return [1, err_info]; + } + function read_json_stream_error_info(fin, lexbuf){ + function reader(param){return caml_call1(Lexxer[1], lexbuf);} + function f(i){ + var match = caml_call1(Parser[2], reader); + if(0 !== match[0]){ + var err = match[1]; + caml_call1(fin, 0); + var err_info = create_from_lexbuf(lexbuf, err); + throw caml_maybe_attach_backtrace([0, Json_error_info, err_info], 1); + } + var match$0 = match[1]; + if(match$0){var res = match$0[1]; return [0, res];} + caml_call1(fin, 0); + return 0; + } + return from(f); + } + function stream_from_string_error_info(s){ + var lexbuf = from_string(0, s); + return read_json_stream_error_info(function(param){return 0;}, lexbuf); + } + function stream_from_channel_error_info(opt, inc){ + if(opt) + var sth = opt[1], fin = sth; + else + var fin = function(param){return 0;}; + var lexbuf = from_channel(0, inc); + return read_json_stream_error_info(fin, lexbuf); + } + function stream_from_file_error_info(filename){ + var inc = open_in(filename); + return stream_from_channel_error_info + ([0, function(param){return _i_(inc);}], inc); + } + function stream_from_lexbuf_error_info(lexbuf){ + return read_json_stream_error_info(function(param){return 0;}, lexbuf); + } + return [0, + , + , + , + , + , + , + , + , + , + , + , + , + , + , + json_of_string_error_info, + json_of_file_error_info, + json_of_channel_error_info, + , + , + json_of_lexbuf_error_info_comp, + , + , + , + , + , + stream_from_string_error_info, + stream_from_channel_error_info, + stream_from_file_error_info, + , + stream_from_lexbuf_error_info]; + } + function Make$5(Compliance){ + function nibble_to_hex(i){ + var _qz_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_qz_); + } + function add_hex_byte(oc, i){ + _j_(oc, nibble_to_hex((i >>> 4 | 0) & 15)); + return _j_(oc, nibble_to_hex(i & 15)); + } + function escape(oc, s){ + function add_char(_qy_){return _j_(oc, _qy_);} + function add_string(_qx_){return output_string(oc, _qx_);} + var l = caml_ml_string_length(s), _qv_ = l - 1 | 0, _qu_ = 0; + if(_qv_ >= 0){ + var i = _qu_; + for(;;){ + var c = caml_string_get(s, i); + a: + if(92 === c) + add_string(_go_); + else{ + b: + { + c: + { + if(35 > c){ + if(8 > c) break b; + switch(c - 8 | 0){ + case 0: + add_string(_gq_); break; + case 1: + add_string(_gr_); break; + case 2: + add_string(_gs_); break; + case 4: + add_string(_gt_); break; + case 5: + add_string(_gu_); break; + case 26: + add_string(_gv_); break; + case 24: + case 25: + break c; + default: break b; + } + break a; + } + if(127 === c) break b; + } + add_char(caml_string_get(s, i)); + break a; + } + add_string(_gp_); + add_hex_byte(oc, c); + } + var _qw_ = i + 1 | 0; + if(_qv_ === i) break; + var i = _qw_; + } + } + return; + } + function json_to_channel_fmt(oc, json, eol, incr, psep){ + function add_char(_qt_){return _j_(oc, _qt_);} + function add_string(_qs_){return output_string(oc, _qs_);} + function add_quote_string(s){ + add_char(34); + escape(oc, s); + return add_char(34); + } + function add_int(i){return add_string(string_of_int(i));} + function add_float(f){return add_string(caml_call1(Compliance[8], f));} + var psep$0 = symbol(_gw_, psep); + function fmt(off, value){ + if(typeof value === "number") return add_string(_gx_); + var _qr_ = value[1]; + if(708012133 <= _qr_){ + if(737456202 > _qr_){ + if(726928360 <= _qr_){ + var t = value[2], ldr$1 = make$1(off, 32); + add_char(40); + add_string(eol); + json_list(off + incr | 0, t); + add_string(eol); + add_string(ldr$1); + return add_char(41); + } + var v = value[2], ldr$2 = make$1(off, 32); + add_char(60); + add_string(eol); + variant(off + incr | 0, v); + add_string(eol); + add_string(ldr$2); + return add_char(62); + } + if(928231259 <= _qr_){ + if(963043957 <= _qr_){ + var o = value[2], ldr = make$1(off, 32); + add_char(123); + add_string(eol); + json_assoc(off + incr | 0, o); + add_string(eol); + add_string(ldr); + return add_char(125); + } + var s = value[2]; + return add_string(s); + } + if(848054398 <= _qr_){ + var l = value[2], ldr$0 = make$1(off, 32); + add_char(91); + add_string(eol); + json_list(off + incr | 0, l); + add_string(eol); + add_string(ldr$0); + return add_char(93); + } + var b = value[2]; + return add_string(string_of_bool(b)); + } + if(-752863768 === _qr_){var s$0 = value[2]; return add_string(s$0);} + if(3654863 <= _qr_){ + if(365180284 <= _qr_){var f = value[2]; return add_float(f);} + var i = value[2]; + return add_int(i); + } + if(-375152890 <= _qr_){var s$1 = value[2]; return add_string(s$1);} + var s$2 = value[2]; + return add_quote_string(s$2); + } + function json_assoc(off, o){ + var + ldr = make$1(off, 32), + sep = [0, ldr], + newsep = symbol(_gy_, symbol(eol, ldr)); + return iter + (function(v){ + add_string(sep[1]); + sep[1] = newsep; + return pair(off, v); + }, + o); + } + function pair(off, param){ + var v = param[2], k = param[1]; + add_quote_string(k); + add_string(psep$0); + return fmt(off, v); + } + function json_list(off, l){ + var + ldr = make$1(off, 32), + sep = [0, ldr], + newsep = symbol(_gz_, symbol(eol, ldr)); + return iter + (function(v){ + add_string(sep[1]); + sep[1] = newsep; + return fmt(off, v); + }, + l); + } + function variant(off, param){ + var j = param[2], k = param[1]; + add_quote_string(k); + if(! j) return; + var j$0 = j[1]; + add_string(psep$0); + return fmt(off + incr | 0, j$0); + } + fmt(0, json); + return add_string(eol); + } + function json_to_channel(_qk_){ + function _ql_(_qn_, _qo_, _qp_, _qq_){ + return json_to_channel_fmt(_qk_, _qn_, _qo_, _qp_, _qq_); + } + return function(_qm_){return _ql_(_qm_, _gB_, 0, _gA_);}; + } + function json_to_file_exn(file, json){ + var oc = open_out(file); + try{json_to_channel(oc)(json); close_out(oc); return;} + catch(exn$0){ + var exn = caml_wrap_exception(exn$0); + close_out(oc); + throw caml_maybe_attach_backtrace(exn, 0); + } + } + return [0, , , , , , , , , json_to_file_exn, , json_to_channel]; + } + function Make$6(Compliance){ + function nibble_to_hex(i){ + var _qj_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_qj_); + } + function add_hex_byte(buf, i){ + add_char(buf, nibble_to_hex((i >>> 4 | 0) & 15)); + return add_char(buf, nibble_to_hex(i & 15)); + } + function escape(buf, s){ + function add_char$0(_qi_){return add_char(buf, _qi_);} + function add_string$0(_qh_){return add_string(buf, _qh_);} + var l = caml_ml_string_length(s), _qf_ = l - 1 | 0, _qe_ = 0; + if(_qf_ >= 0){ + var i = _qe_; + for(;;){ + var c = caml_string_get(s, i); + a: + if(92 === c) + add_string$0(_gC_); + else{ + b: + { + c: + { + if(35 > c){ + if(8 > c) break b; + switch(c - 8 | 0){ + case 0: + add_string$0(_gE_); break; + case 1: + add_string$0(_gF_); break; + case 2: + add_string$0(_gG_); break; + case 4: + add_string$0(_gH_); break; + case 5: + add_string$0(_gI_); break; + case 26: + add_string$0(_gJ_); break; + case 24: + case 25: + break c; + default: break b; + } + break a; + } + if(127 === c) break b; + } + add_char$0(caml_string_get(s, i)); + break a; + } + add_string$0(_gD_); + add_hex_byte(buf, c); + } + var _qg_ = i + 1 | 0; + if(_qf_ === i) break; + var i = _qg_; + } + } + return; + } + function json_to_buffer(buf, json){ + function add_char$0(_qd_){return add_char(buf, _qd_);} + function add_string$0(_qc_){return add_string(buf, _qc_);} + function add_quote_string(s){ + add_char$0(34); + escape(buf, s); + return add_char$0(34); + } + function add_int(i){return add_string$0(string_of_int(i));} + function add_float(f){return add_string$0(caml_call1(Compliance[8], f));} + function fmt(value){ + if(typeof value === "number") return add_string$0(_gK_); + var _qb_ = value[1]; + if(708012133 <= _qb_){ + if(737456202 > _qb_){ + if(726928360 <= _qb_){ + var t = value[2]; + add_char$0(40); + json_list(t); + return add_char$0(41); + } + var v = value[2]; + add_char$0(60); + variant(v); + return add_char$0(62); + } + if(928231259 <= _qb_){ + if(963043957 <= _qb_){ + var o = value[2]; + add_char$0(123); + json_assoc(o); + return add_char$0(125); + } + var s = value[2]; + return add_string$0(s); + } + if(848054398 <= _qb_){ + var l = value[2]; + add_char$0(91); + json_list(l); + return add_char$0(93); + } + var b = value[2]; + return add_string$0(string_of_bool(b)); + } + if(-752863768 === _qb_){var s$0 = value[2]; return add_string$0(s$0);} + if(3654863 <= _qb_){ + if(365180284 <= _qb_){var f = value[2]; return add_float(f);} + var i = value[2]; + return add_int(i); + } + if(-375152890 <= _qb_){var s$1 = value[2]; return add_string$0(s$1);} + var s$2 = value[2]; + return add_quote_string(s$2); + } + function json_assoc(o){ + var sep = [0, _gL_]; + return iter + (function(v){ + add_string$0(sep[1]); + sep[1] = _gM_; + return pair(v); + }, + o); + } + function pair(param){ + var v = param[2], k = param[1]; + add_quote_string(k); + add_char$0(58); + return fmt(v); + } + function json_list(l){ + var sep = [0, _gN_]; + return iter + (function(v){ + add_string$0(sep[1]); + sep[1] = _gO_; + return fmt(v); + }, + l); + } + function variant(param){ + var j = param[2], k = param[1]; + add_quote_string(k); + if(! j) return; + var j$0 = j[1]; + add_char$0(58); + return fmt(j$0); + } + return fmt(json); + } + function json_to_string(json){ + var buf = create$1(100); + json_to_buffer(buf, json); + return contents(buf); + } + return [0, , , json_to_string, , , , , , , , json_to_buffer]; + } + var Json_error = [248, _gP_, caml_fresh_oo_id(0)]; + function json_error(msg){ + throw caml_maybe_attach_backtrace([0, Json_error, msg], 1); + } + function Common_reader(Compliance){ + var + Lexxer = Make$1(Compliance), + Parser = Make$2(Compliance), + include = function(_qa_){return Make$4(Lexxer, _qa_);}(Parser), + json_of_string_error_info = include[15], + json_of_file_error_info = include[16], + json_of_channel_error_info = include[17], + json_of_lexbuf_error_info_comp = include[20], + stream_from_string_error_info = include[26], + stream_from_channel_error_info = include[27], + stream_from_file_error_info = include[28], + stream_from_lexbuf_error_info = include[30], + Internal_reader = + [0, + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + json_of_string_error_info, + json_of_file_error_info, + json_of_channel_error_info, + , + , + json_of_lexbuf_error_info_comp, + , + , + , + , + , + stream_from_string_error_info, + stream_from_channel_error_info, + stream_from_file_error_info, + , + stream_from_lexbuf_error_info]; + function error_to_string(error_info, fname, lnum){ + if(lnum) var lnum$0 = lnum[1], lnum$1 = lnum$0; else var lnum$1 = 1; + var + _p8_ = error_info[4], + _p9_ = error_info[3], + _p__ = error_info[2], + _p$_ = (lnum$1 + error_info[1] | 0) - 1 | 0; + if(fname) + var name = fname[1], fname$0 = symbol(_gR_, symbol(name, _gQ_)); + else + var fname$0 = _gT_; + var loc = caml_call4(sprintf(_gS_), fname$0, _p$_, _p__, _p9_); + return symbol(loc, _p8_); + } + function apply_and_handle_errors(f, a, fname, lnum){ + var match = caml_call1(f, a); + if(0 === match[0]){var json = match[1]; return json;} + var error_info = match[1]; + return json_error(error_to_string(error_info, fname, lnum)); + } + function from_string(param, fname, lnum, s){ + return apply_and_handle_errors(Internal_reader[17], s, fname, lnum); + } + return [0, , , , from_string]; + } + function Common_writer(Compliance){ + var + _p3_ = Make$6(Compliance), + to_string = _p3_[3], + to_buffer = _p3_[11], + _p4_ = Make$5(Compliance), + to_file = _p4_[9], + to_channel = _p4_[11], + include = _fY_(Compliance), + pretty_print = include[1], + pretty_print_to_string = include[2], + pretty_print_to_channel = include[3], + Internal_writer = + [0, + , + , + to_string, + , + , + , + , + , + , + , + to_buffer, + , + , + , + , + , + , + , + , + , + , + , + to_file, + , + to_channel, + , + , + , + pretty_print, + pretty_print_to_string, + pretty_print_to_channel]; + function to_standard(json){ + function map(node){ + if(typeof node === "number") return 870828711; + var _p7_ = node[1]; + if(708012133 > _p7_){ + if(-752863768 === _p7_){ + var v$1 = node[2]; + return [0, -976970511, v$1]; + } + if(3654863 <= _p7_) return 365180284 <= _p7_ ? node : node; + if(-375152890 > _p7_) return node; + var s = node[2]; + return 1 < caml_ml_string_length(s) >>> 0 + ? [0, + -976970511, + sub$0(s, 1, caml_ml_string_length(s) - 2 | 0)] + : [0, -976970511, s]; + } + if(737456202 > _p7_){ + if(726928360 <= _p7_){ + var tpl = node[2]; + return [0, 848054398, map$1(map, tpl)]; + } + var match = node[2], jopt = match[2], name = match[1]; + if(! jopt) return [0, -976970511, name]; + var v$0 = jopt[1]; + return [0, 848054398, [0, [0, -976970511, name], [0, map(v$0), 0]]]; + } + if(928231259 > _p7_){ + if(848054398 > _p7_) return node; + var l = node[2]; + return [0, 848054398, map$1(map, l)]; + } + if(963043957 <= _p7_){ + var a = node[2]; + return [0, + 963043957, + map$1 + (function(param){ + var v = param[2], id = param[1]; + return [0, id, map(v)]; + }, + a)]; + } + var v = node[2]; + return [0, 365180284, caml_float_of_string(v)]; + } + return map(json); + } + function to_string$0(param, _p5_, opt, json){ + if(opt) var sth = opt[1], std = sth; else var std = 0; + if(! std) return Internal_writer[3].call(null, json); + var _p6_ = to_standard(json); + return Internal_writer[3].call(null, _p6_); + } + return [0, , , to_string$0]; + } + function lex_string(s){return unescape_string(s);} + function lex_number(token){return token;} + function lex_integer(token){return token;} + function lex_largeint(param){return _gU_;} + function lex_variant(param){return 0;} + function lex_tuple(param){return 0;} + function comment_check(param){return _gV_;} + function number_to_string(f){ + var match = caml_classify_float(f); + return 3 === match + ? f < 0. ? _gW_ : _gX_ + : 4 <= match ? _gY_ : string_of_float_json(f); + } + function largeint(s){return [0, 365180284, caml_float_of_string(s)];} + function integer(i){return [0, 3654863, i];} + var null$2 = 870828711; + function string$0(s){return [0, -976970511, s];} + function bool(b){return [0, 737456202, b];} + function assoc(a){return [0, 963043957, a];} + function list(l){return [0, 848054398, l];} + function tuple(l){ + throw caml_maybe_attach_backtrace([0, Failure, _gZ_], 1); + } + function variant(l){ + throw caml_maybe_attach_backtrace([0, Failure, _g0_], 1); + } + function number(param){ + if(typeof param === "number") + return 3900603 === param + ? [0, 365180284, NaN] + : 874173192 + <= param + ? [0, 365180284, Infinity] + : [0, 365180284, -Infinity]; + if(928231259 <= param[1]) + throw caml_maybe_attach_backtrace([0, Failure, _g1_], 1); + var f = param[2]; + return [0, 365180284, f]; + } + function array_start(param){return 14610;} + function array_end(param){return 14596;} + function object_start(param){return 17732;} + function object_end(param){return 17718;} + function tuple_start(param){ + throw caml_maybe_attach_backtrace([0, Failure, _g2_], 1); + } + function tuple_end(param){ + throw caml_maybe_attach_backtrace([0, Failure, _g3_], 1); + } + function variant_start(param){ + throw caml_maybe_attach_backtrace([0, Failure, _g4_], 1); + } + function variant_end(param){ + throw caml_maybe_attach_backtrace([0, Failure, _g5_], 1); + } + function name$0(s){return [0, 869834347, s];} + Common_reader + ([0, + lex_string, + lex_number, + lex_integer, + lex_largeint, + lex_tuple, + lex_variant, + comment_check, + number_to_string, + number, + integer, + largeint, + null$2, + string$0, + bool, + assoc, + list, + tuple, + variant, + [0, + number, + integer, + largeint, + null$2, + string$0, + bool, + array_start, + array_end, + object_start, + object_end, + tuple_start, + tuple_end, + variant_start, + variant_end, + name$0]]); + Common_writer + ([0, + lex_string, + lex_number, + lex_integer, + lex_largeint, + lex_tuple, + lex_variant, + comment_check, + number_to_string, + number, + integer, + largeint, + null$2, + string$0, + bool, + assoc, + list, + tuple, + variant, + [0, + number, + integer, + largeint, + null$2, + string$0, + bool, + array_start, + array_end, + object_start, + object_end, + tuple_start, + tuple_end, + variant_start, + variant_end, + name$0]]); + function lex_string$0(s){return unescape_string(s);} + function lex_number$0(token){return token;} + function lex_integer$0(token){return token;} + function lex_largeint$0(token){return token;} + function lex_variant$0(param){return 1;} + function lex_tuple$0(param){return 1;} + function comment_check$0(param){return _g6_;} + function number_to_string$0(f){ + var match = caml_classify_float(f); + return 3 === match + ? f < 0. ? _g7_ : _g8_ + : 4 <= match ? _g9_ : string_of_float_json(f); + } + function largeint$0(s){return [0, -752863768, s];} + function integer$0(i){return [0, 3654863, i];} + var null$3 = 870828711; + function string$1(s){return [0, -976970511, s];} + function bool$0(b){return [0, 737456202, b];} + function assoc$0(a){return [0, 963043957, a];} + function list$0(l){return [0, 848054398, l];} + function tuple$0(l){return [0, 726928360, l];} + function variant$0(k, v){return [0, 708012133, [0, k, v]];} + function number$0(param){ + if(typeof param === "number") + return 3900603 === param + ? [0, 365180284, NaN] + : 874173192 + <= param + ? [0, 365180284, Infinity] + : [0, 365180284, -Infinity]; + if(928231259 <= param[1]) + throw caml_maybe_attach_backtrace([0, Failure, _g__], 1); + var f = param[2]; + return [0, 365180284, f]; + } + function array_start$0(param){return 14610;} + function array_end$0(param){return 14596;} + function object_start$0(param){return 17732;} + function object_end$0(param){return 17718;} + function tuple_start$0(param){return 18847;} + function tuple_end$0(param){return 18833;} + function variant_start$0(param){return 19293;} + function variant_end$0(param){return 19279;} + function name$1(s){return [0, 869834347, s];} + var + from_string$0 = + Common_reader + ([0, + lex_string$0, + lex_number$0, + lex_integer$0, + lex_largeint$0, + lex_tuple$0, + lex_variant$0, + comment_check$0, + number_to_string$0, + number$0, + integer$0, + largeint$0, + null$3, + string$1, + bool$0, + assoc$0, + list$0, + tuple$0, + variant$0, + [0, + number$0, + integer$0, + largeint$0, + null$3, + string$1, + bool$0, + array_start$0, + array_end$0, + object_start$0, + object_end$0, + tuple_start$0, + tuple_end$0, + variant_start$0, + variant_end$0, + name$1]]) + [4], + include = + Common_writer + ([0, + lex_string$0, + lex_number$0, + lex_integer$0, + lex_largeint$0, + lex_tuple$0, + lex_variant$0, + comment_check$0, + number_to_string$0, + number$0, + integer$0, + largeint$0, + null$3, + string$1, + bool$0, + assoc$0, + list$0, + tuple$0, + variant$0, + [0, + number$0, + integer$0, + largeint$0, + null$3, + string$1, + bool$0, + array_start$0, + array_end$0, + object_start$0, + object_end$0, + tuple_start$0, + tuple_end$0, + variant_start$0, + variant_end$0, + name$1]]), + to_string$4 = include[3]; + function lex_string$1(s){return symbol(_ha_, symbol(s, _g$_));} + function lex_number$1(token){return token;} + function lex_integer$1(token){return token;} + function lex_largeint$1(token){return token;} + function lex_variant$1(param){return 1;} + function lex_tuple$1(param){return 1;} + function comment_check$1(param){return _hb_;} + function number_to_string$1(f){ + var match = caml_classify_float(f); + return 3 === match + ? f < 0. ? _hc_ : _hd_ + : 4 <= match ? _he_ : string_of_float_json(f); + } + function largeint$1(s){return [0, -752863768, s];} + function integer$1(i){return [0, -752863768, string_of_int(i)];} + var null$4 = 870828711; + function string$2(s){return [0, -375152890, s];} + function bool$1(b){return [0, 737456202, b];} + function assoc$1(a){return [0, 963043957, a];} + function list$1(l){return [0, 848054398, l];} + function tuple$1(l){return [0, 726928360, l];} + function variant$1(k, v){return [0, 708012133, [0, k, v]];} + function number$1(param){ + if(typeof param === "number") + return 3900603 === param ? _hf_ : 874173192 <= param ? _hg_ : _hh_; + if(928231259 <= param[1]){var f = param[2]; return [0, 928231259, f];} + var f$0 = param[2]; + return [0, 928231259, string_of_float(f$0)]; + } + function array_start$1(param){return 14610;} + function array_end$1(param){return 14596;} + function object_start$1(param){return 17732;} + function object_end$1(param){return 17718;} + function tuple_start$1(param){return 18847;} + function tuple_end$1(param){return 18833;} + function variant_start$1(param){return 19293;} + function variant_end$1(param){return 19279;} + function name$2(s){return [0, 869834347, s];} + Common_reader + ([0, + lex_string$1, + lex_number$1, + lex_integer$1, + lex_largeint$1, + lex_tuple$1, + lex_variant$1, + comment_check$1, + number_to_string$1, + number$1, + integer$1, + largeint$1, + null$4, + string$2, + bool$1, + assoc$1, + list$1, + tuple$1, + variant$1, + [0, + number$1, + integer$1, + largeint$1, + null$4, + string$2, + bool$1, + array_start$1, + array_end$1, + object_start$1, + object_end$1, + tuple_start$1, + tuple_end$1, + variant_start$1, + variant_end$1, + name$2]]); + Common_writer + ([0, + lex_string$1, + lex_number$1, + lex_integer$1, + lex_largeint$1, + lex_tuple$1, + lex_variant$1, + comment_check$1, + number_to_string$1, + number$1, + integer$1, + largeint$1, + null$4, + string$2, + bool$1, + assoc$1, + list$1, + tuple$1, + variant$1, + [0, + number$1, + integer$1, + largeint$1, + null$4, + string$2, + bool$1, + array_start$1, + array_end$1, + object_start$1, + object_end$1, + tuple_start$1, + tuple_end$1, + variant_start$1, + variant_end$1, + name$2]]); + function rand(s, param){return bits(s);} + make_self_init(0); + function v4_ocaml_random_uuid(rand){ + var + r0 = caml_call1(rand, 0), + r1 = caml_call1(rand, 0), + r2 = caml_call1(rand, 0), + r3 = caml_call1(rand, 0), + r4 = caml_call1(rand, 0), + u = caml_create_bytes(16), + _ox_ = 0; + function _oy_(_p2_, _p1_, _p0_){caml_bytes_set(_p2_, _p1_, _p0_); return;} + (function(_pZ_){return _oy_(u, _ox_, _pZ_);}(r0 & 255)); + var _oz_ = 1; + function _oA_(_pY_, _pX_, _pW_){caml_bytes_set(_pY_, _pX_, _pW_); return;} + (function(_pV_){return _oA_(u, _oz_, _pV_);}((r0 >>> 8 | 0) & 255)); + var _oB_ = 2; + function _oC_(_pU_, _pT_, _pS_){caml_bytes_set(_pU_, _pT_, _pS_); return;} + (function(_pR_){return _oC_(u, _oB_, _pR_);}((r0 >>> 16 | 0) & 255)); + var _oD_ = 3; + function _oE_(_pQ_, _pP_, _pO_){caml_bytes_set(_pQ_, _pP_, _pO_); return;} + (function(_pN_){return _oE_(u, _oD_, _pN_);}(r1 & 255)); + var _oF_ = 4; + function _oG_(_pM_, _pL_, _pK_){caml_bytes_set(_pM_, _pL_, _pK_); return;} + (function(_pJ_){return _oG_(u, _oF_, _pJ_);}((r1 >>> 8 | 0) & 255)); + var _oH_ = 5; + function _oI_(_pI_, _pH_, _pG_){caml_bytes_set(_pI_, _pH_, _pG_); return;} + (function(_pF_){return _oI_(u, _oH_, _pF_);}((r1 >>> 16 | 0) & 255)); + var _oJ_ = 6; + function _oK_(_pE_, _pD_, _pC_){caml_bytes_set(_pE_, _pD_, _pC_); return;} + (function(_pB_){return _oK_(u, _oJ_, _pB_);}(64 | (r1 >>> 24 | 0) & 15)); + var _oL_ = 7; + function _oM_(_pA_, _pz_, _py_){caml_bytes_set(_pA_, _pz_, _py_); return;} + (function(_px_){return _oM_(u, _oL_, _px_);}(r2 & 255)); + var _oN_ = 8; + function _oO_(_pw_, _pv_, _pu_){caml_bytes_set(_pw_, _pv_, _pu_); return;} + (function(_pt_){return _oO_(u, _oN_, _pt_);}(128 | (r2 >>> 24 | 0) & 63)); + var _oP_ = 9; + function _oQ_(_ps_, _pr_, _pq_){caml_bytes_set(_ps_, _pr_, _pq_); return;} + (function(_pp_){return _oQ_(u, _oP_, _pp_);}((r2 >>> 8 | 0) & 255)); + var _oR_ = 10; + function _oS_(_po_, _pn_, _pm_){caml_bytes_set(_po_, _pn_, _pm_); return;} + (function(_pl_){return _oS_(u, _oR_, _pl_);}((r2 >>> 16 | 0) & 255)); + var _oT_ = 11; + function _oU_(_pk_, _pj_, _pi_){caml_bytes_set(_pk_, _pj_, _pi_); return;} + (function(_ph_){return _oU_(u, _oT_, _ph_);}(r3 & 255)); + var _oV_ = 12; + function _oW_(_pg_, _pf_, _pe_){caml_bytes_set(_pg_, _pf_, _pe_); return;} + (function(_pd_){return _oW_(u, _oV_, _pd_);}((r3 >>> 8 | 0) & 255)); + var _oX_ = 13; + function _oY_(_pc_, _pb_, _pa_){caml_bytes_set(_pc_, _pb_, _pa_); return;} + (function(_o$_){return _oY_(u, _oX_, _o$_);}((r3 >>> 16 | 0) & 255)); + var _oZ_ = 14; + function _o0_(_o__, _o9_, _o8_){caml_bytes_set(_o__, _o9_, _o8_); return;} + (function(_o7_){return _o0_(u, _oZ_, _o7_);}(r4 & 255)); + var _o1_ = 15; + function _o2_(_o6_, _o5_, _o4_){caml_bytes_set(_o6_, _o5_, _o4_); return;} + (function(_o3_){return _o2_(u, _o1_, _o3_);}((r4 >>> 8 | 0) & 255)); + return unsafe_to_string(u); + } + function v4_gen(seed){ + function rand$0(_ow_){return rand(seed, _ow_);} + return function(param){return v4_ocaml_random_uuid(rand$0);}; + } + function to_string$5(opt, u){ + if(opt) var sth = opt[1], upper = sth; else var upper = 0; + var hbase = upper ? 55 : 87; + function hex(hbase, i){return 10 <= i ? hbase + i | 0 : 48 + i | 0;} + var s = of_string(_hi_), i = [0, 0], j = [0, 0]; + function byte$0(s, i, c){ + function _ol_(_ov_, _ou_, _ot_){ + caml_bytes_set(_ov_, _ou_, _ot_); + return; + } + (function(_os_){return _ol_(s, i, _os_);}(hex(hbase, c >>> 4 | 0))); + var _om_ = i + 1 | 0; + function _on_(_or_, _oq_, _op_){ + caml_bytes_set(_or_, _oq_, _op_); + return; + } + return function(_oo_){return _on_(s, _om_, _oo_);}(hex(hbase, c & 15)); + } + for(;;){ + if(4 <= j[1]) break; + var _ok_ = caml_string_get(u, j[1]); + byte$0(s, i[1], _ok_); + i[1] = i[1] + 2 | 0; + j[1]++; + } + i[1]++; + for(;;){ + if(6 <= j[1]) break; + var _oj_ = caml_string_get(u, j[1]); + byte$0(s, i[1], _oj_); + i[1] = i[1] + 2 | 0; + j[1]++; + } + i[1]++; + for(;;){ + if(8 <= j[1]) break; + var _oi_ = caml_string_get(u, j[1]); + byte$0(s, i[1], _oi_); + i[1] = i[1] + 2 | 0; + j[1]++; + } + i[1]++; + for(;;){ + if(10 <= j[1]) break; + var _oh_ = caml_string_get(u, j[1]); + byte$0(s, i[1], _oh_); + i[1] = i[1] + 2 | 0; + j[1]++; + } + i[1]++; + for(;;){ + if(16 <= j[1]) return unsafe_to_string(s); + var _og_ = caml_string_get(u, j[1]); + byte$0(s, i[1], _og_); + i[1] = i[1] + 2 | 0; + j[1]++; + } + } + var include$0 = _ez_([0, compare$0]); + function to_jstr$1(t){return encode(t);} + function of_jstr$1(jstr){ + var match = decode(jstr); + if(0 === match[0]){var v = match[1]; return [0, v];} + var err = match[1]; + error$0([0, err, 0]); + return _hj_; + } + function of_jv$0(jv){return of_jstr$1(jv);} + var random_state = get_state(0); + function new_uuid_v4(param){return v4_gen(random_state)(0);} + function tee(f, x){caml_call1(f, x); return x;} + var + empty$1 = include$0[1], + union = include$0[7], + of_list$2 = include$0[29], + to_list$3 = include$0[49]; + function to_at(t){ + return symbol$9 + (function(c){return [0, 80, class$1(caml_jsstring_of_string(c))];}, + to_list$3(t)); + } + var empty$2 = [0, empty$1, 0]; + function to_at$0(id, t){ + var + _od_ = to_at(t[1]), + _oe_ = t[2], + at = function(_of_){return rev_append(_oe_, _of_);}(_od_); + if(! id) return at; + var id$0 = id[1]; + return [0, [0, 80, id$1(caml_jsstring_of_string(id$0))], at]; + } + function classes(l){var _oc_ = empty$2[2]; return [0, of_list$2(l), _oc_];} + function union$0(param, _oa_){ + var + a = _oa_[2], + c = _oa_[1], + attrs = param[2], + classes = param[1], + _ob_ = rev_append(attrs, a); + return [0, union(classes, c), _ob_]; + } + function add$1(at_name, v, at){ + var _n9_ = v[1]; + if(82 === _n9_) + var + v$0 = v[2], + a = + [0, + 82, + func + (v$0, + function(v){ + return function(_n__){return v$1(at_name, _n__);} + (caml_jsstring_of_string(v)); + })]; + else if(83 <= _n9_) + var a = failwith(_hk_); + else + var + v$2 = v[2], + a = + [0, + 80, + function(_n$_){return v$1(at_name, _n$_);} + (caml_jsstring_of_string(v$2))]; + return [0, a, at]; + } + function add_bool(at$0, v, at){return v ? [0, [0, 80, at$0], at] : at;} + function add_opt(at_name, v, at){ + if(! v) return at; + var v$0 = v[1]; + return [0, + [0, + 80, + function(_n8_){return v$1(at_name, _n8_);} + (caml_jsstring_of_string(v$0))], + at]; + } + function of_string$0(s){ + var match = chop_suffix(_hl_, s); + if(match){ + var i = match[1], _n2_ = function(i){return [0, i];}; + return function(_n7_){return symbol$10(_n2_, _n7_);}(of_string_opt(i)); + } + var match$0 = chop_suffix(_hm_, s); + if(match$0){ + var f = match$0[1], _n3_ = function(f){return [1, f];}; + return function(_n6_){return symbol$10(_n3_, _n6_);}(of_string_opt(f)); + } + var match$1 = chop_suffix(_hn_, s); + if(! match$1) return 0; + var f$0 = match$1[1]; + function _n4_(f){return [1, f];} + return function(_n5_){return symbol$10(_n4_, _n5_);}(of_string_opt(f$0)); + } + function to_string$6(param){ + switch(param[0]){ + case 0: + var i = param[1]; return caml_call1(sprintf(_ho_), i); + case 1: + var f = param[1]; return caml_call1(sprintf(_hp_), f); + default: var f$0 = param[1]; return caml_call1(sprintf(_hq_), f$0); + } + } + function to_px(opt){ + if(opt) + var sth = opt[1], parent = sth; + else + var parent = root(global_document); + function get_font_size_in_px(parent){ + var + font_size = + caml_string_of_jsstring(computed_style(0, "font-size", parent)), + match = of_string$0(font_size); + if(match){ + var match$0 = match[1]; + if(0 === match$0[0]){var i = match$0[1]; return i;} + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _hr_], 1); + } + return function(param){ + switch(param[0]){ + case 0: + var i = param[1]; return i; + case 1: + var + f = param[1], + font_size = get_font_size_in_px(root(global_document)); + return f * font_size; + default: + var f$0 = param[1], font_size$0 = get_font_size_in_px(parent); + return f$0 * font_size$0; + }}; + } + function v$5(name, css_size, content){return [0, name, css_size, content];} + function to_header(t){ + var + cells = + fold_right + (function(param, acc){ + var content = param[3]; + return [0, [0, 82, div$1(0, 0, 0, content)], acc]; + }, + t, + 0); + return cells; + } + function style$1(t){ + var + template = + to_string$2 + (_hs_, function(param){var css_size = param[2]; return css_size;}, t); + return caml_call2(sprintf(_hu_), _ht_, template); + } + function style$2(t){ + var style = style$1(t[1][1]); + return concat(_hv_, [0, style, 0]); + } + function header(t){ + var + row_height = to_string$6(t[2]), + at = + [0, + [0, + 80, + style$0 + (caml_jsstring_of_string(caml_call1(sprintf(_hw_), row_height)))], + 0], + _nY_ = [0, at], + _nX_ = to_header(t[1][1]); + return function(_nZ_){ + return function(_n0_, _n1_){ + return div$1(_nZ_, _nY_, _n0_, _n1_);}; + } + (0) + (0, _nX_); + } + to_px(0)(_hx_); + function Uniqueue(O){ + var Set = _ez_(O); + function create(param){ + var queue = create$0(0), uniq = Set[1]; + return [0, queue, uniq]; + } + function add$0(v, t){ + var new_elt = 1 - Set[3].call(null, v, t[2]); + if(new_elt){ + add(v, t[1]); + t[2] = Set[4].call(null, v, t[2]); + } + else{ + var new_queue = create$0(0); + iter$2 + (function(v$0){ + var _nW_ = 1 - equal$0(caml_call2(O[1], v, v$0), 0); + return _nW_ ? add(v$0, new_queue) : _nW_; + }, + t[1]); + add(v, new_queue); + t[1] = new_queue; + } + return new_elt; + } + function take$0(t){ + var i = take(t[1]); + t[2] = Set[6].call(null, i, t[2]); + return i; + } + function length(t){return length$0(t[1]);} + function clear(t){ + var new_queue = create(0); + t[1] = new_queue[1]; + t[2] = new_queue[2]; + return; + } + return [0, , create, add$0, take$0, length, clear]; + } + var Int_uniqueue = Uniqueue([0, compare$1]); + function make$5(ui_table, opt, data_source){ + var row_size = to_string$6(ui_table[2]); + function height_n(n){return caml_call2(sprintf(_hy_), row_size, n);} + var + height$0 = caml_call1(sprintf(_hz_), row_size), + table = make$3(0), + row_index = create$2(0, 2048), + unload_queue = Int_uniqueue[2].call(null, 0); + function add(fetch, opt, indexes){ + if(opt) var sth = opt[1], max_items = sth; else var max_items = 200; + function unload(i){ + symbol_bind$0 + (get$5(row_index, i), + function(row){ + return symbol$11 + (get$4(row), + function(row_data){ + return symbol$3(row, [0, row_data[1], 0, row_data[3]]); + }); + }); + return; + } + function load(indexes){ + let$2 + (caml_call1(fetch, indexes), + function(data){ + return iter2 + (function(i, data){ + symbol_bind$0 + (get$5(row_index, i), + function(row){ + return symbol$11 + (get$4(row), + function(row_data){ + if(! data) throw caml_maybe_attach_backtrace(Not_found, 1); + var data$0 = data[1]; + return symbol$3 + (row, [0, row_data[1], [0, data$0], row_data[3]]); + }); + }); + return 0; + }, + indexes, + data); + }); + return; + } + function cleanup(param){ + var + q_length = Int_uniqueue[5].call(null, unload_queue), + _nR_ = symbol$6(q_length, max_items); + if(_nR_){ + if(q_length >= max_items){ + var for$0 = max_items; + for(;;){ + try{unload(Int_uniqueue[4].call(null, unload_queue));} + catch(_nV_){ + var _nT_ = caml_wrap_exception(_nV_); + if(_nT_ !== Empty) throw caml_maybe_attach_backtrace(_nT_, 0); + } + var _nU_ = for$0 + 1 | 0; + if(q_length === for$0) break; + var for$0 = _nU_; + } + } + var _nS_ = 0; + } + else + var _nS_ = _nR_; + return _nS_; + } + var + to_load = + filter + (function(i){return Int_uniqueue[3].call(null, i, unload_queue);}, + indexes); + load(of_list(to_load)); + return cleanup(0); + } + var table_height = var$0(0); + function compute_visible_rows(last_scroll_y, div){ + function height(elt){return elt["offsetHeight"];} + var + scroll_y$0 = scroll_y(div), + direction = symbol$8(scroll_y$0, last_scroll_y[1]) ? 759637122 : 19067; + last_scroll_y[1] = scroll_y$0; + var + visible_height = height(div), + _nO_ = ui_table[2], + header_height = to_px([0, div])(_nO_), + number_of_visible_rows = visible_height / header_height | 0, + scroll_y$1 = scroll_y$0 - header_height, + first_visible_row = (scroll_y$1 / header_height | 0) + 1 | 0, + last_visible_row = first_visible_row + number_of_visible_rows | 0, + bleeding = + 19067 === direction + ? number_of_visible_rows + : number_of_visible_rows / 2 | 0, + _nP_ = 0, + first = + function(_nQ_){return max(_nP_, _nQ_);} + (first_visible_row - bleeding | 0), + bleeding$0 = + 759637122 === direction + ? number_of_visible_rows + : number_of_visible_rows / 2 | 0, + last = last_visible_row + bleeding$0 | 0; + return init$1(last - first | 0, function(i){return first + i | 0;}); + } + function prepare(total, render){ + clear$2(table); + clear$1(row_index); + Int_uniqueue[6].call(null, unload_queue); + var _nL_ = total - 1 | 0, _nK_ = 0; + if(_nL_ >= 0){ + var i = _nK_; + for(;;){ + var set = [0, i, 0, render]; + let i$0 = i; + (function(_nN_){return add$0(row_index, i$0, _nN_);} + (append([0, set], table))); + var _nM_ = i + 1 | 0; + if(_nL_ === i) break; + var i = _nM_; + } + } + return; + } + var + populate_on_scroll = + func + (data_source, + function(param){ + var render = param[3], fetch = param[2], total_items = param[1]; + function add$0(_nI_, _nJ_){return add(fetch, _nI_, _nJ_);} + var last_scroll_y = [0, 0.]; + function update(div){ + var visible_rows = compute_visible_rows(last_scroll_y, div); + return add$0([0, 4 * length(visible_rows) | 0], visible_rows); + } + return let$0 + (total_items, + function(total_items){ + if(0 !== total_items[0]) return function(_nH_){return 0;}; + var total_items$0 = total_items[1]; + prepare(total_items$0, render); + return update; + }); + }), + scroll_handler = + func + (populate_on_scroll, + function(update){ + return handler + (0, + scroll, + function(ev){ + let$0 + (update, + function(update){ + var last_update = [0, 0.], timeout = [0, -1]; + function reset_ticker(div){ + var debouncing_interval = 25, now = now_ms(performance); + if(symbol$7(timeout[1], 0)) stop_timer(timeout[1]); + timeout[1] = + set_timeout + (debouncing_interval, + function(param){return caml_call1(update, div);}); + var + _nG_ = symbol$8(now - last_update[1], debouncing_interval); + return _nG_ + ? (last_update[1] = now, caml_call1(update, div)) + : _nG_; + } + function scroll_handler(div){return reset_ticker(div);} + var div = target(ev); + return scroll_handler(div); + }); + return 0; + }); + }), + repopulate_deps = + map2 + (populate_on_scroll, + get$3(table_height), + function(a, b){return [0, a, b];}), + root = observe$0(0, repopulate_deps); + set_on_invalidate + (root, + function(param){ + var _nE_ = quick_sample(root), _nF_ = _nE_[2]; + if(! _nF_) return 0; + var div = _nF_[1][2], update = _nE_[1]; + return await$1 + (update, function(update){return caml_call1(update, div);}); + }); + quick_sample(root); + function make_spacer(n){ + var + at = [0, class$1("row_spacer"), 0], + style = style$0(caml_jsstring_of_string(height_n(n))); + return div$0(0, [0, [0, style, at]], 0); + } + function render(param, _nD_){ + var + render = _nD_[3], + content = _nD_[2], + index = _nD_[1], + at = add$1(class$0, _hA_, 0), + style = [0, 80, style$0(caml_jsstring_of_string(height$0))]; + if(! content) return [0, 1, empty$0, 0]; + var data = content[1]; + return [0, + 0, + element + (div$1 + (0, [0, [0, style, at]], 0, caml_call2(render, index, data))), + 0]; + } + var + rows = + map_reduce$0 + (render, + [0, + [0, 0, empty$0, 0], + function(param, _nB_){ + var + q = _nB_[3], + s = _nB_[2], + p = _nB_[1], + m = param[3], + s$0 = param[2], + n = param[1], + match = view(s$0), + match$0 = view(s); + if(typeof match === "number") + return typeof match$0 === "number" + ? [0, ((n + m | 0) + p | 0) + q | 0, s$0, 0] + : [0, (n + m | 0) + p | 0, s, q]; + if(typeof match$0 === "number") + return [0, n, s$0, (m + p | 0) + q | 0]; + if(symbol$6(m + p | 0, 0)) + var + spacer = pure(make_spacer(m + p | 0)), + s$1 = + function(_nC_){return concat$1(s$0, _nC_);} + (concat$1(element(spacer), s)); + else + var s$1 = concat$1(s$0, s); + return [0, n, s$1, q]; + }], + table), + table_body = + func + (rows, + function(param){ + var m = param[3], s = param[2], n = param[1]; + if(symbol$6(n, 0)) + var + first_spacer = pure(make_spacer(n)), + result = concat$1(element(first_spacer), s); + else + var result = s; + if(! symbol$6(m, 0)) return result; + var last_spacer = pure(make_spacer(m)); + return concat$1(result, element(last_spacer)); + }), + table_header = header(ui_table), + observer = + create$7 + (function(entries, param){ + var + entry = hd(entries), + div = target$0(entry), + rect = content_rect(entry), + height$0 = height(rect), + match = peek(table_height); + if(! match) return symbol$2(table_height, [0, [0, height$0, div]]); + var h = match[1][1]; + return symbol$5(h, height$0) + ? symbol$2(table_height, [0, [0, height$0, div]]) + : 0; + }), + at = to_at$0(0, classes(_hB_)), + grid_style = style$2(ui_table), + s = style$0(caml_jsstring_of_string(grid_style)), + at$0 = [0, [0, 80, s], at]; + function arg(_nz_, _nA_){return observe(observer, _nz_, _nA_);} + function _nv_(eta){return arg(0, eta);} + function _nw_(_ny_){return tee(_nv_, _ny_);} + var + container = + function(_nx_){return func(_nx_, _nw_);} + (div$1 + (0, + [0, at$0], + [0, [0, [0, 82, scroll_handler], 0]], + [0, [0, 82, table_header], [0, [0, 83, lift(table_body)], 0]])), + el = + div$1(0, [0, to_at$0(0, classes(_hC_))], 0, [0, [0, 82, container], 0]); + return el; + } + function make$6(C){ + function set(lang){return symbol$2(C[1], lang);} + return [0, set]; + } + var keys = create$2(0, 64); + function check_key(key){ + return mem(keys, key) + ? failwith(caml_call1(sprintf(_hD_), key)) + : add$0(keys, key, 0); + } + var local_storage = local(window); + function store(key, value){ + return function(_nu_){return set_item(local_storage, key, _nu_);} + (to_jstr$1(value)); + } + function fetch$0(key){ + var match = get_item(local_storage, key); + function _ns_(encoded_value){return of_jstr$1(encoded_value);} + if(match) var v = match[1], _nt_ = [0, v]; else var _nt_ = _hE_; + return symbol_bind$1(_nt_, _ns_); + } + function initial_value(key, f){ + var match = fetch$0(key); + if(0 === match[0]){var v = match[1]; return v;} + var match$0 = match[1]; + if(typeof match$0 === "number") return caml_call1(f, 0); + var msg = match$0[2]; + warn([0, msg, 0]); + return caml_call1(f, 0); + } + function make_persistent_var(key, value){ + store(key, value); + var var$1 = var$0(value), root = observe$0(0, get$3(var$1)); + set_on_invalidate + (root, + function(param){ + var new_value = quick_sample(root); + store(key, new_value); + return 0; + }); + quick_sample(root); + return var$1; + } + function var_f(key, f){ + check_key(key); + var key$0 = caml_jsstring_of_string(key), value = initial_value(key$0, f); + return make_persistent_var(key$0, value); + } + function var$1(key, default$0){ + return var_f(key, function(param){return default$0;}); + } + function make_handler(value, value_change_event, default_value){ + var + var$1 = var$0(default_value), + on_change = + handler + (0, + value_change_event, + function(ev){ + var t = target(ev), v = t[cst_value]; + return symbol$2(var$1, [0, caml_call1(value, v)]); + }); + return [0, on_change, var$1]; + } + function make_input + (value, + validate, + d, + opt, + ev, + _np_, + value_change_event, + pattern$0, + type, + default_value){ + if(opt) var sth = opt[1], at = sth; else var at = 0; + if(_np_) var sth$0 = _np_[1], required = sth$0; else var required = 0; + var + type$1 = type$0(caml_jsstring_of_string(type)), + at$0 = [0, [0, 80, type$1], at], + at$1 = + function(_nq_){return add_opt(pattern, pattern$0, _nq_);} + (function(_nr_){return add_bool(required$0, required, _nr_);}(at$0)), + validate$0 = value$3(validate, function(v){return [0, v];}), + match = make_handler(value, value_change_event, default_value), + value$0 = match[2], + on_change = match[1], + ev$0 = [0, [0, 80, on_change], to_list$2(ev)], + elt = input$1(d, [0, at$1], [0, ev$0], 0); + return [0, elt, value$0, validate$0]; + } + function text_input + (validate, d, opt, ev, required, pattern, placeholder$0, default_value){ + if(opt) var sth = opt[1], at = sth; else var at = 0; + var + at$0 = + function(_nn_){return add_opt(value$1, default_value, _nn_);} + (function(_no_){return add_opt(placeholder, placeholder$0, _no_);}(at)); + return make_input + (value$0, + validate, + d, + [0, at$0], + ev, + required, + keyup, + pattern, + _hF_, + default_value); + } + function password_input + (validate, d, opt, ev, required, pattern, placeholder$0, value){ + if(opt) var sth = opt[1], at = sth; else var at = 0; + var + at$0 = + function(_nm_){return add_opt(placeholder, placeholder$0, _nm_);}(at); + return make_input + (value$0, + validate, + d, + [0, at$0], + ev, + required, + keyup, + pattern, + _hG_, + 0); + } + function submit$0(d, opt, ev, text){ + if(opt) var sth = opt[1], at = sth; else var at = 0; + var at$0 = add$1(value$1, text, at); + return make_input + (function(_nl_){return 0;}, + 0, + d, + [0, at$0], + ev, + 0, + change, + 0, + _hH_, + 0); + } + function field$0(field, setter){ + return func(field, function(field){return [0, field, setter];}); + } + function create$8(d, at, ev, Form){ + return function(on_submit){ + var + _ne_ = + [0, + [0, empty$0, function(_nk_){return _nk_;}], + function(param, _nj_){ + var f = _nj_[2], elts = _nj_[1], f$0 = param[2], elts$0 = param[1]; + return [0, + concat$1(elts$0, elts), + function(t){return caml_call1(f, caml_call1(f$0, t));}]; + }]; + function _nf_(param){ + var mapper = param[2], field = param[1]; + function value(param){ + var match = peek(field[2]); + if(! match) return 0; + var v = match[1]; + return caml_call1(field[3], v); + } + return [0, + element(field[1]), + function(t){ + var _ni_ = value(0); + return caml_call1(caml_call1(mapper, t), _ni_); + }]; + } + var + fields = + function(_nh_){return fold_monoid(_nf_, _ne_, _nh_);}(lift(Form[2])), + handler$0 = + func + (fields, + function(param){ + var value = param[2]; + function on_submit$0(e){ + caml_call1(on_submit, caml_call1(value, Form[1])); + return prevent_default(e); + } + return handler(0, submit, on_submit$0); + }), + on_submit$0 = [0, 82, handler$0], + elts = func(fields, function(param){var elts = param[1]; return elts;}), + ev$0 = + map_or + ([0, on_submit$0, 0], + function(_ng_){return cons(on_submit$0, _ng_);}, + ev); + return form$0(d, at, [0, ev$0], [0, [0, 83, lift(elts)], 0]);}; + } + function name$3(id, base_name){ + return id + ? caml_call1(sprintf(_hI_), base_name) + : caml_call1(sprintf(_hJ_), base_name); + } + function make$7(t){ + var + id = name$3(1, t[1]), + name$0 = name$3(0, t[1]), + var$0 = var$1(id, t[2]), + _na_ = t[3][2]; + label$0 + (0, [0, [0, [0, 80, for$1(caml_jsstring_of_string(id))], 0]], 0, _na_); + var + _nb_ = [0, 80, name$0], + at = + function(_nc_){return add$1(type, _hK_, _nc_);} + (function(_nd_){return add$1(name, _nb_, _nd_);} + (add$1(id$0, [0, 80, id], 0))), + match = peek(var$0); + if(match) + var + v = match[1], + at$0 = [0, [0, 80, value$2(caml_jsstring_of_string(v))], at]; + else + var at$0 = at; + var + on_change = + handler + (0, + keyup, + function(ev){ + var t = target(ev), value = t[cst_value]; + return symbol$2(var$0, [0, value$0(value)]); + }), + ev = [0, [0, 80, on_change], 0], + field = + div$1(0, 0, 0, [0, [0, 82, input$1(0, [0, at$0], [0, ev], 0)], 0]); + return [0, field, , get$3(var$0)]; + } + function name$4(g, n, id, base_name){ + return id + ? caml_call3(sprintf(_hL_), base_name, g, n) + : caml_call3(sprintf(_hM_), base_name, g, n); + } + function make$8(t){ + function make_check(g, n, value, label, checked){ + var id = name$4(g, n, 1, t[1]), name$0 = name$4(g, n, 0, t[1]); + function result(checked){return checked ? [0, value] : 0;} + var + var$0 = var$1(id, result(checked)), + lbl = + label$0 + (0, + [0, [0, [0, 80, for$1(caml_jsstring_of_string(id))], 0]], + 0, + label), + _m8_ = [0, 80, name$0], + at = + function(_m__){return add$1(type, _hN_, _m__);} + (function(_m$_){return add$1(name, _m8_, _m$_);} + (add$1(id$0, [0, 80, id], 0))), + checked$1 = + func + (get$3(var$0), function(param){return param ? checked$0 : void$0;}), + at$0 = [0, [0, 82, checked$1], at], + on_change = + handler + (0, + change, + function(ev){ + var t = target(ev), checked = t[cst_checked]; + return symbol$2(var$0, result(checked | 0)); + }), + ev = [0, [0, 80, on_change], 0], + _m9_ = get$3(var$0); + return [0, + div$1 + (0, + 0, + 0, + [0, + [0, 82, input$1(0, [0, at$0], [0, ev], 0)], + [0, [0, 82, lbl], 0]]), + _m9_]; + } + function make_all(g, desc){ + var n = [0, 0]; + return map$5 + (function(param){ + var + c = param[3], + l = param[2], + v = param[1], + match = make_check(g, n[1], v, l, c), + value = match[2], + elt = match[1]; + n[1]++; + return [0, elt, value]; + }, + desc); + } + var + all = make_all(0, t[2]), + elts = map$5(function(param){var elt = param[1]; return elt;}, all); + function _m4_(_m7_){return _m7_;} + var + value = + function(_m5_){return func(_m5_, to_list$1);} + (function(_m6_){return filter_map$0(_m4_, _m6_);} + (lift + (fold_monoid + (function(param){var v = param[2]; return element(v);}, + monoid, + all)))); + return [0, div$1(0, 0, 0, [0, [0, 83, lift(elts)], 0]), value]; + } + function v$6(d, opt, ev, value){ + if(opt) var sth = opt[1], at = sth; else var at = 0; + var + at$0 = + function(_m3_){return add$1(value$1, value, _m3_);} + (add$1(type, _hO_, at)); + return input$1(d, [0, at$0], ev, 0); + } + function handler$0(opts, type, func){return [0, opts, type, func];} + function apply_state(state, f){return caml_call1(f, state);} + function with_state(opt, S){ + if(opt) var sth = opt[1], base = sth; else var base = empty$2; + return function(opt, d, at){ + if(opt) var sth = opt[1], state = sth; else var state = S[1]; + return function(ev, content){ + var v_state = var$0(state); + function get_state(param){return get$3(v_state);} + function set_state(t){return symbol$2(v_state, t);} + var + elt = + symbol_bind + (get_state(0), + function(state){ + function with_state(param){ + var func = param[3], type = param[2], opts = param[1]; + function func$0(ev){ + var match = caml_call2(func, state, ev); + if(typeof match === "number") + return match ? set_state(caml_call1(S[2], state)) : 0; + var s = match[1]; + return set_state(s); + } + return handler(opts, type, func$0); + } + var + at$0 = + map_or + (base, + function(at){ + return function(_m2_){return union$0(base, _m2_);} + (apply_state(state, at)); + }, + at), + at$1 = to_at$0(0, at$0); + function _mZ_(param){ + var _m1_ = param[1]; + if(82 === _m1_){ + var h = param[2]; + return [0, 82, func(h, with_state)]; + } + if(83 <= _m1_){ + var h$0 = param[2]; + return [0, 83, map$5(with_state, h$0)]; + } + var h$1 = param[2]; + return [0, 80, with_state(h$1)]; + } + var + ev$0 = + symbol$10(function(_m0_){return symbol$9(_mZ_, _m0_);}, ev); + return button$0(d, [0, at$1], ev$0, caml_call1(content, state)); + }); + return [0, elt, get_state, set_state];};}; + } + function next(param){return param ? 0 : 1;} + var Two_state = [0, 0, next]; + function two_state(base){return with_state(base, Two_state);} + function yojson_of_string(str){return [0, -976970511, str];} + function yojson_of_int(n){return [0, 3654863, n];} + function yojson_of_option(yojson_of_a, param){ + if(! param) return 870828711; + var x = param[1]; + return caml_call1(yojson_of_a, x); + } + function yojson_of_list(yojson_of_a, lst){ + return [0, 848054398, rev(rev_map(yojson_of_a, lst))]; + } + var + Of_yojson_error = [248, _hP_, caml_fresh_oo_id(0)], + record_check_extra_fields = [0, 1]; + function of_yojson_error(what, yojson){ + throw caml_maybe_attach_backtrace + ([0, Of_yojson_error, [0, Failure, what], yojson], 1); + } + function string_of_yojson(yojson){ + if(typeof yojson !== "number" && -976970511 === yojson[1]){var str = yojson[2]; return str;} + return of_yojson_error(_hQ_, yojson); + } + function int_of_yojson(yojson){ + if(typeof yojson !== "number" && 3654863 === yojson[1]){var v = yojson[2]; return v;} + return of_yojson_error(_hR_, yojson); + } + function option_of_yojson(a_of_yojson, yojson){ + return 870828711 === yojson ? 0 : [0, caml_call1(a_of_yojson, yojson)]; + } + function list_of_yojson(a_of_yojson, yojson){ + if(typeof yojson !== "number" && 848054398 === yojson[1]){ + var lst = yojson[2], rev_lst = rev_map(a_of_yojson, lst); + return rev(rev_lst); + } + return of_yojson_error(_hS_, yojson); + } + function stag_no_args(loc, yojson){ + return of_yojson_error(symbol(loc, _hT_), yojson); + } + function nested_list_invalid_sum(loc, yojson){ + return of_yojson_error(symbol(loc, _hU_), yojson); + } + function empty_list_invalid_sum(loc, yojson){ + return of_yojson_error(symbol(loc, _hV_), yojson); + } + function unexpected_stag(loc, yojson){ + return of_yojson_error(symbol(loc, _hW_), yojson); + } + function record_superfluous_fields(what, loc, rev_fld_names, yojson){ + var + fld_names_str = concat(_hX_, rev(rev_fld_names)), + msg = caml_call3(sprintf(_hY_), loc, what, fld_names_str); + return of_yojson_error(msg, yojson); + } + function record_duplicate_fields(loc, rev_fld_names, yojson){ + return record_superfluous_fields(_hZ_, loc, rev_fld_names, yojson); + } + function record_extra_fields(loc, rev_fld_names, yojson){ + return record_superfluous_fields(_h0_, loc, rev_fld_names, yojson); + } + function record_get_undefined_loop(fields, param){ + var fields$0 = fields, param$0 = param; + for(;;){ + if(! param$0) return concat(_h1_, rev(fields$0)); + var _mY_ = param$0[1]; + if(_mY_[1]) + var + rest = param$0[2], + field = _mY_[2], + fields$1 = [0, field, fields$0], + fields$0 = fields$1, + param$0 = rest; + else + var rest$0 = param$0[2], param$0 = rest$0; + } + } + function record_undefined_elements(loc, yojson, lst){ + var + undefined$0 = record_get_undefined_loop(0, lst), + msg = caml_call2(sprintf(_h2_), loc, undefined$0); + return of_yojson_error(msg, yojson); + } + function record_list_instead_atom(loc, yojson){ + var msg = symbol(loc, _h3_); + return of_yojson_error(msg, yojson); + } + function symbol$14(x){return x[1];} + function jstr_of_method(param){return param ? "POST" : "GET";} + function user_of_yojson(yojson){ + if(typeof yojson !== "number" && 963043957 === yojson[1]){ + var + field_yojsons = yojson[2], + name_field = [0, 0], + server_id_field = [0, 0], + server_name_field = [0, 0], + id_field = [0, 0], + duplicates = [0, 0], + extra = [0, 0], + iter = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + tail = param$0[2], + match = param$0[1], + field_yojson = match[2], + field_name = match[1]; + if(caml_string_notequal(field_name, cst_Id)) + if(caml_string_notequal(field_name, cst_Name)) + if(caml_string_notequal(field_name, cst_ServerId)){ + if(! caml_string_notequal(field_name, cst_ServerName)) + if(symbol$14(server_name_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue = option_of_yojson(string_of_yojson, field_yojson); + server_name_field[1] = [0, fvalue]; + } + } + else if(symbol$14(server_id_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$0 = string_of_yojson(field_yojson); + server_id_field[1] = [0, fvalue$0]; + } + else if(symbol$14(name_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$1 = string_of_yojson(field_yojson); + name_field[1] = [0, fvalue$1]; + } + else if(symbol$14(id_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$2 = string_of_yojson(field_yojson); + id_field[1] = [0, fvalue$2]; + } + var param$0 = tail; + } + }; + iter(field_yojsons); + if(symbol$14(duplicates)) + return record_duplicate_fields(tp_loc, symbol$14(duplicates), yojson); + if(symbol$14(extra)) + return record_extra_fields(tp_loc, symbol$14(extra), yojson); + var + match = symbol$14(name_field), + match$0 = symbol$14(server_id_field), + server_name_value = symbol$14(server_name_field), + match$1 = symbol$14(id_field); + if(match && match$0 && match$1){ + var + id_value = match$1[1], + server_id_value = match$0[1], + name_value = match[1]; + if(server_name_value) + var v = server_name_value[1], v$0 = v; + else + var v$0 = 0; + return [0, name_value, server_id_value, v$0, id_value]; + } + var + _mW_ = [0, [0, 0 === symbol$14(id_field) ? 1 : 0, _h4_], 0], + _mX_ = [0, [0, 0 === symbol$14(server_id_field) ? 1 : 0, _h5_], _mW_]; + return record_undefined_elements + (tp_loc, + yojson, + [0, [0, 0 === symbol$14(name_field) ? 1 : 0, _h6_], _mX_]); + } + return record_list_instead_atom(tp_loc, yojson); + } + function yojson_of_user(param){ + var + v_id = param[4], + v_server_name = param[3], + v_server_id = param[2], + v_name = param[1], + arg = yojson_of_string(v_id), + bnds = [0, [0, _h7_, arg], 0], + arg$0 = yojson_of_option(yojson_of_string, v_server_name), + bnds$0 = [0, [0, _h8_, arg$0], bnds], + arg$1 = yojson_of_string(v_server_id), + bnds$1 = [0, [0, _h9_, arg$1], bnds$0], + arg$2 = yojson_of_string(v_name), + bnds$2 = [0, [0, _h__, arg$2], bnds$1]; + return [0, 963043957, bnds$2]; + } + function params_of_yojson(yojson){ + if(typeof yojson !== "number" && 963043957 === yojson[1]){ + var + field_yojsons = yojson[2], + username_field = [0, 0], + pw_field = [0, 0], + duplicates = [0, 0], + extra = [0, 0], + iter = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + tail = param$0[2], + match = param$0[1], + field_yojson = match[2], + field_name = match[1]; + if(caml_string_notequal(field_name, cst_Pw)) + if(caml_string_notequal(field_name, cst_Username)){ + if(symbol$14(record_check_extra_fields)) + extra[1] = [0, field_name, symbol$14(extra)]; + } + else if(symbol$14(username_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue = string_of_yojson(field_yojson); + username_field[1] = [0, fvalue]; + } + else if(symbol$14(pw_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$0 = string_of_yojson(field_yojson); + pw_field[1] = [0, fvalue$0]; + } + var param$0 = tail; + } + }; + iter(field_yojsons); + if(symbol$14(duplicates)) + return record_duplicate_fields(tp_loc$0, symbol$14(duplicates), yojson); + if(symbol$14(extra)) + return record_extra_fields(tp_loc$0, symbol$14(extra), yojson); + var match = symbol$14(username_field), match$0 = symbol$14(pw_field); + if(match && match$0){ + var pw_value = match$0[1], username_value = match[1]; + return [0, username_value, pw_value]; + } + var _mV_ = [0, [0, 0 === symbol$14(pw_field) ? 1 : 0, _h$_], 0]; + return record_undefined_elements + (tp_loc$0, + yojson, + [0, [0, 0 === symbol$14(username_field) ? 1 : 0, _ia_], _mV_]); + } + return record_list_instead_atom(tp_loc$0, yojson); + } + function yojson_of_params(param){ + var + v_pw = param[2], + v_username = param[1], + arg = yojson_of_string(v_pw), + bnds = [0, [0, _ib_, arg], 0], + arg$0 = yojson_of_string(v_username), + bnds$0 = [0, [0, _ic_, arg$0], bnds]; + return [0, 963043957, bnds$0]; + } + function response_of_yojson(yojson){ + if(typeof yojson !== "number" && 963043957 === yojson[1]){ + var + field_yojsons = yojson[2], + user_field = [0, 0], + access_token_field = [0, 0], + server_id_field = [0, 0], + duplicates = [0, 0], + extra = [0, 0], + iter = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + tail = param$0[2], + match = param$0[1], + field_yojson = match[2], + field_name = match[1]; + if(caml_string_notequal(field_name, cst_AccessToken)) + if(caml_string_notequal(field_name, cst_ServerId)){ + if(! caml_string_notequal(field_name, cst_User)) + if(symbol$14(user_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue = user_of_yojson(field_yojson); + user_field[1] = [0, fvalue]; + } + } + else if(symbol$14(server_id_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$0 = string_of_yojson(field_yojson); + server_id_field[1] = [0, fvalue$0]; + } + else if(symbol$14(access_token_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$1 = string_of_yojson(field_yojson); + access_token_field[1] = [0, fvalue$1]; + } + var param$0 = tail; + } + }; + iter(field_yojsons); + if(symbol$14(duplicates)) + return record_duplicate_fields(tp_loc$1, symbol$14(duplicates), yojson); + if(symbol$14(extra)) + return record_extra_fields(tp_loc$1, symbol$14(extra), yojson); + var + match = symbol$14(user_field), + match$0 = symbol$14(access_token_field), + match$1 = symbol$14(server_id_field); + if(match && match$0 && match$1){ + var + server_id_value = match$1[1], + access_token_value = match$0[1], + user_value = match[1]; + return [0, user_value, access_token_value, server_id_value]; + } + var + _mT_ = [0, [0, 0 === symbol$14(server_id_field) ? 1 : 0, _id_], 0], + _mU_ = [0, [0, 0 === symbol$14(access_token_field) ? 1 : 0, _ie_], _mT_]; + return record_undefined_elements + (tp_loc$1, + yojson, + [0, [0, 0 === symbol$14(user_field) ? 1 : 0, _if_], _mU_]); + } + return record_list_instead_atom(tp_loc$1, yojson); + } + function yojson_of_response(param){ + var + v_server_id = param[3], + v_access_token = param[2], + v_user = param[1], + arg = yojson_of_string(v_server_id), + bnds = [0, [0, _ig_, arg], 0], + arg$0 = yojson_of_string(v_access_token), + bnds$0 = [0, [0, _ih_, arg$0], bnds], + arg$1 = yojson_of_user(v_user), + bnds$1 = [0, [0, _ii_, arg$1], bnds$0]; + return [0, 963043957, bnds$1]; + } + function endpoint(param){return _ij_;} + function image_blur_hash_of_yojson(y){ + var assoc = to_assoc(y); + return map$1 + (function(param){ + var v = param[2], key = param[1]; + return [0, key, to_string$3(v)]; + }, + assoc); + } + function yojson_of_image_blur_hash(i){ + var + assoc = + map$1 + (function(param){ + var v = param[2], key = param[1]; + return [0, key, [0, -976970511, v]]; + }, + i); + return [0, 963043957, assoc]; + } + function image_blur_hashes_of_yojson(yojson){ + if(typeof yojson !== "number" && 963043957 === yojson[1]){ + var + field_yojsons = yojson[2], + primary_field = [0, 0], + duplicates = [0, 0], + extra = [0, 0], + iter = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + tail = param$0[2], + match = param$0[1], + field_yojson = match[2], + field_name = match[1]; + if(! caml_string_notequal(field_name, cst_Primary)) + if(symbol$14(primary_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue = image_blur_hash_of_yojson(field_yojson); + primary_field[1] = [0, fvalue]; + } + var param$0 = tail; + } + }; + iter(field_yojsons); + if(symbol$14(duplicates)) + return record_duplicate_fields(tp_loc$2, symbol$14(duplicates), yojson); + if(symbol$14(extra)) + return record_extra_fields(tp_loc$2, symbol$14(extra), yojson); + var primary_value = symbol$14(primary_field); + return [0, primary_value]; + } + return record_list_instead_atom(tp_loc$2, yojson); + } + function yojson_of_image_blur_hashes(param){ + var v_primary = param[1], bnds = 0; + if(v_primary) + var + v = v_primary[1], + arg = yojson_of_image_blur_hash(v), + bnd = [0, _ik_, arg], + bnds$0 = [0, bnd, bnds]; + else + var bnds$0 = bnds; + return [0, 963043957, bnds$0]; + } + function type_of_yojson(yojson){ + if(typeof yojson !== "number" && 848054398 === yojson[1]){ + var _mP_ = yojson[2]; + if(! _mP_) return empty_list_invalid_sum(tp_loc$3, yojson); + var _mQ_ = _mP_[1]; + if(typeof _mQ_ !== "number"){ + var _mR_ = _mQ_[1]; + if(-976970511 === _mR_){ + var + _mS_ = _mQ_[2], + switch$0 = caml_string_compare(_mS_, cst_MusicGenre); + if(0 <= switch$0){ + if(0 >= switch$0) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 18; + var switch$1 = caml_string_compare(_mS_, cst_Series); + if(0 <= switch$1){ + if(0 >= switch$1) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 28; + if(! caml_string_notequal(_mS_, cst_Studio)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 29; + if(! caml_string_notequal(_mS_, cst_Trailer)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 30; + if(! caml_string_notequal(_mS_, cst_TvChannel)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 31; + if(! caml_string_notequal(_mS_, cst_TvProgram)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 32; + if(! caml_string_notequal(_mS_, cst_UserRootFolder)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 33; + if(! caml_string_notequal(_mS_, cst_UserView)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 34; + if(! caml_string_notequal(_mS_, cst_Video)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 35; + if(! caml_string_notequal(_mS_, cst_Year)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 36; + } + else{ + if(! caml_string_notequal(_mS_, cst_MusicVideo)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 19; + if(! caml_string_notequal(_mS_, cst_Person)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 20; + if(! caml_string_notequal(_mS_, cst_Photo)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 21; + if(! caml_string_notequal(_mS_, cst_PhotoAlbum)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 22; + if(! caml_string_notequal(_mS_, cst_Playlist)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 23; + if(! caml_string_notequal(_mS_, cst_PlaylistsFolder)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 24; + if(! caml_string_notequal(_mS_, cst_Program)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 25; + if(! caml_string_notequal(_mS_, cst_Recording)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 26; + if(! caml_string_notequal(_mS_, cst_Season)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 27; + } + } + else{ + var switch$2 = caml_string_compare(_mS_, cst_Episode); + if(0 <= switch$2){ + if(0 >= switch$2) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 9; + if(! caml_string_notequal(_mS_, cst_Folder)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 10; + if(! caml_string_notequal(_mS_, cst_Genre)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 11; + if(! caml_string_notequal(_mS_, cst_LiveTvChannel)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 12; + if(! caml_string_notequal(_mS_, cst_LiveTvProgram)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 13; + if(! caml_string_notequal(_mS_, cst_ManualPlaylistsFolder)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 14; + if(! caml_string_notequal(_mS_, cst_Movie)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 15; + if(! caml_string_notequal(_mS_, cst_MusicAlbum)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 16; + if(! caml_string_notequal(_mS_, cst_MusicArtist)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 17; + } + else{ + if(! caml_string_notequal(_mS_, cst_AggregateFolder)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 0; + if(! caml_string_notequal(_mS_, cst_Audio)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 1; + if(! caml_string_notequal(_mS_, cst_AudioBook)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 2; + if(! caml_string_notequal(_mS_, cst_BasePluginFolder)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 3; + if(! caml_string_notequal(_mS_, cst_Book)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 4; + if(! caml_string_notequal(_mS_, cst_BoxSet)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 5; + if(! caml_string_notequal(_mS_, cst_Channel)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 6; + if(! caml_string_notequal(_mS_, cst_ChannelFolderItem)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 7; + if(! caml_string_notequal(_mS_, cst_CollectionFolder)) + return _mP_[2] ? stag_no_args(tp_loc$3, yojson) : 8; + } + } + } + else if(848054398 === _mR_) + return nested_list_invalid_sum(tp_loc$3, yojson); + } + } + return unexpected_stag(tp_loc$3, yojson); + } + function yojson_of_type(param){ + switch(param){ + case 0: + return _il_; + case 1: + return _im_; + case 2: + return _in_; + case 3: + return _io_; + case 4: + return _ip_; + case 5: + return _iq_; + case 6: + return _ir_; + case 7: + return _is_; + case 8: + return _it_; + case 9: + return _iu_; + case 10: + return _iv_; + case 11: + return _iw_; + case 12: + return _ix_; + case 13: + return _iy_; + case 14: + return _iz_; + case 15: + return _iA_; + case 16: + return _iB_; + case 17: + return _iC_; + case 18: + return _iD_; + case 19: + return _iE_; + case 20: + return _iF_; + case 21: + return _iG_; + case 22: + return _iH_; + case 23: + return _iI_; + case 24: + return _iJ_; + case 25: + return _iK_; + case 26: + return _iL_; + case 27: + return _iM_; + case 28: + return _iN_; + case 29: + return _iO_; + case 30: + return _iP_; + case 31: + return _iQ_; + case 32: + return _iR_; + case 33: + return _iS_; + case 34: + return _iT_; + case 35: + return _iU_; + default: return _iV_; + } + } + function type_str_of_yojson(j){ + var s = to_string$3(j); + return type_of_yojson([0, 848054398, [0, [0, -976970511, s], 0]]); + } + function yojson_of_type_str(ts){ + var match = yojson_of_type(ts); + if(typeof match !== "number" && 848054398 === match[1]){ + var _mO_ = match[2]; + if(_mO_ && ! _mO_[2]){var json = _mO_[1]; return json;} + } + throw caml_maybe_attach_backtrace([0, Assert_failure, _iW_], 1); + } + function t_of_yojson(yojson){ + if(typeof yojson !== "number" && 963043957 === yojson[1]){ + var + field_yojsons = yojson[2], + name_field = [0, 0], + sort_name_field = [0, 0], + id_field = [0, 0], + path_field = [0, 0], + album_id_field = [0, 0], + parent_id_field = [0, 0], + server_id_field = [0, 0], + image_blur_hashes_field = [0, 0], + type_field = [0, 0], + collection_type_field = [0, 0], + duplicates = [0, 0], + extra = [0, 0], + iter = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + tail = param$0[2], + match = param$0[1], + field_yojson = match[2], + field_name = match[1], + switch$0 = caml_string_compare(field_name, cst_ParentId); + a: + b: + { + if(0 <= switch$0) + if(0 < switch$0) + if(caml_string_notequal(field_name, cst_Path)) + if(caml_string_notequal(field_name, cst_ServerId)) + if(caml_string_notequal(field_name, cst_SortName)){ + if(caml_string_notequal(field_name, cst_Type)) break b; + if(symbol$14(type_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue = type_str_of_yojson(field_yojson); + type_field[1] = [0, fvalue]; + } + } + else if(symbol$14(sort_name_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$0 = string_of_yojson(field_yojson); + sort_name_field[1] = [0, fvalue$0]; + } + else if(symbol$14(server_id_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$1 = string_of_yojson(field_yojson); + server_id_field[1] = [0, fvalue$1]; + } + else if(symbol$14(path_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$2 = string_of_yojson(field_yojson); + path_field[1] = [0, fvalue$2]; + } + else if(symbol$14(parent_id_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$3 = option_of_yojson(string_of_yojson, field_yojson); + parent_id_field[1] = [0, fvalue$3]; + } + else if(caml_string_notequal(field_name, cst_AlbumId)) + if(caml_string_notequal(field_name, cst_CollectionType)) + if(caml_string_notequal(field_name, cst_Id)) + if(caml_string_notequal(field_name, cst_ImageBlurHashes)){ + if(caml_string_notequal(field_name, cst_Name)) break b; + if(symbol$14(name_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$4 = string_of_yojson(field_yojson); + name_field[1] = [0, fvalue$4]; + } + } + else if(symbol$14(image_blur_hashes_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$5 = image_blur_hashes_of_yojson(field_yojson); + image_blur_hashes_field[1] = [0, fvalue$5]; + } + else if(symbol$14(id_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$6 = string_of_yojson(field_yojson); + id_field[1] = [0, fvalue$6]; + } + else if(symbol$14(collection_type_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$7 = option_of_yojson(string_of_yojson, field_yojson); + collection_type_field[1] = [0, fvalue$7]; + } + else if(symbol$14(album_id_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$8 = string_of_yojson(field_yojson); + album_id_field[1] = [0, fvalue$8]; + } + break a; + } + var param$0 = tail; + } + }; + iter(field_yojsons); + if(symbol$14(duplicates)) + return record_duplicate_fields(tp_loc$4, symbol$14(duplicates), yojson); + if(symbol$14(extra)) + return record_extra_fields(tp_loc$4, symbol$14(extra), yojson); + var + match = symbol$14(name_field), + sort_name_value = symbol$14(sort_name_field), + match$0 = symbol$14(id_field), + path_value = symbol$14(path_field), + album_id_value = symbol$14(album_id_field), + parent_id_value = symbol$14(parent_id_field), + match$1 = symbol$14(server_id_field), + match$2 = symbol$14(image_blur_hashes_field), + match$3 = symbol$14(type_field), + collection_type_value = symbol$14(collection_type_field); + if(match && match$0 && match$1 && match$2 && match$3){ + var + type_value = match$3[1], + image_blur_hashes_value = match$2[1], + server_id_value = match$1[1], + id_value = match$0[1], + name_value = match[1]; + if(collection_type_value) + var v = collection_type_value[1], v$0 = v; + else + var v$0 = 0; + return [0, + name_value, + sort_name_value, + id_value, + path_value, + album_id_value, + parent_id_value, + server_id_value, + image_blur_hashes_value, + type_value, + v$0]; + } + var + _mK_ = [0, [0, 0 === symbol$14(type_field) ? 1 : 0, _iX_], 0], + _mL_ = + [0, [0, 0 === symbol$14(image_blur_hashes_field) ? 1 : 0, _iY_], _mK_], + _mM_ = [0, [0, 0 === symbol$14(server_id_field) ? 1 : 0, _iZ_], _mL_], + _mN_ = [0, [0, 0 === symbol$14(id_field) ? 1 : 0, _i0_], _mM_]; + return record_undefined_elements + (tp_loc$4, + yojson, + [0, [0, 0 === symbol$14(name_field) ? 1 : 0, _i1_], _mN_]); + } + return record_list_instead_atom(tp_loc$4, yojson); + } + function yojson_of_t(param){ + var + v_collection_type = param[10], + v_type = param[9], + v_image_blur_hashes = param[8], + v_server_id = param[7], + v_parent_id = param[6], + v_album_id = param[5], + v_path = param[4], + v_id = param[3], + v_sort_name = param[2], + v_name = param[1], + bnds = 0; + if(0 === v_collection_type) + var bnds$0 = bnds; + else + var + arg$8 = + function(_mJ_){return yojson_of_option(yojson_of_string, _mJ_);} + (v_collection_type), + bnd$3 = [0, _i$_, arg$8], + bnds$0 = [0, bnd$3, bnds]; + var + arg = yojson_of_type_str(v_type), + bnds$1 = [0, [0, _i2_, arg], bnds$0], + arg$0 = yojson_of_image_blur_hashes(v_image_blur_hashes), + bnds$2 = [0, [0, _i3_, arg$0], bnds$1], + arg$1 = yojson_of_string(v_server_id), + bnds$3 = [0, [0, _i4_, arg$1], bnds$2]; + if(v_parent_id) + var + v = v_parent_id[1], + arg$2 = yojson_of_option(yojson_of_string, v), + bnd = [0, _i5_, arg$2], + bnds$4 = [0, bnd, bnds$3]; + else + var bnds$4 = bnds$3; + if(v_album_id) + var + v$0 = v_album_id[1], + arg$3 = yojson_of_string(v$0), + bnd$0 = [0, _i6_, arg$3], + bnds$5 = [0, bnd$0, bnds$4]; + else + var bnds$5 = bnds$4; + if(v_path) + var + v$1 = v_path[1], + arg$4 = yojson_of_string(v$1), + bnd$1 = [0, _i7_, arg$4], + bnds$6 = [0, bnd$1, bnds$5]; + else + var bnds$6 = bnds$5; + var + arg$5 = yojson_of_string(v_id), + bnds$7 = [0, [0, _i8_, arg$5], bnds$6]; + if(v_sort_name) + var + v$2 = v_sort_name[1], + arg$6 = yojson_of_string(v$2), + bnd$2 = [0, _i9_, arg$6], + bnds$8 = [0, bnd$2, bnds$7]; + else + var bnds$8 = bnds$7; + var + arg$7 = yojson_of_string(v_name), + bnds$9 = [0, [0, _i__, arg$7], bnds$8]; + return [0, 963043957, bnds$9]; + } + function virtual_folder_of_yojson(yojson){ + if(typeof yojson !== "number" && 963043957 === yojson[1]){ + var + field_yojsons = yojson[2], + name_field = [0, 0], + locations_field = [0, 0], + item_id_field = [0, 0], + duplicates = [0, 0], + extra = [0, 0], + iter = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + tail = param$0[2], + match = param$0[1], + field_yojson = match[2], + field_name = match[1]; + if(caml_string_notequal(field_name, cst_ItemId)) + if(caml_string_notequal(field_name, cst_Locations)){ + if(! caml_string_notequal(field_name, cst_Name)) + if(symbol$14(name_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue = string_of_yojson(field_yojson); + name_field[1] = [0, fvalue]; + } + } + else if(symbol$14(locations_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$0 = list_of_yojson(string_of_yojson, field_yojson); + locations_field[1] = [0, fvalue$0]; + } + else if(symbol$14(item_id_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$1 = string_of_yojson(field_yojson); + item_id_field[1] = [0, fvalue$1]; + } + var param$0 = tail; + } + }; + iter(field_yojsons); + if(symbol$14(duplicates)) + return record_duplicate_fields(tp_loc$5, symbol$14(duplicates), yojson); + if(symbol$14(extra)) + return record_extra_fields(tp_loc$5, symbol$14(extra), yojson); + var + match = symbol$14(name_field), + match$0 = symbol$14(locations_field), + match$1 = symbol$14(item_id_field); + if(match && match$0 && match$1){ + var + item_id_value = match$1[1], + locations_value = match$0[1], + name_value = match[1]; + return [0, name_value, locations_value, item_id_value]; + } + var + _mH_ = [0, [0, 0 === symbol$14(item_id_field) ? 1 : 0, _ja_], 0], + _mI_ = [0, [0, 0 === symbol$14(locations_field) ? 1 : 0, _jb_], _mH_]; + return record_undefined_elements + (tp_loc$5, + yojson, + [0, [0, 0 === symbol$14(name_field) ? 1 : 0, _jc_], _mI_]); + } + return record_list_instead_atom(tp_loc$5, yojson); + } + function yojson_of_virtual_folder(param){ + var + v_item_id = param[3], + v_locations = param[2], + v_name = param[1], + arg = yojson_of_string(v_item_id), + bnds = [0, [0, _jd_, arg], 0], + arg$0 = yojson_of_list(yojson_of_string, v_locations), + bnds$0 = [0, [0, _je_, arg$0], bnds], + arg$1 = yojson_of_string(v_name), + bnds$1 = [0, [0, _jf_, arg$1], bnds$0]; + return [0, 963043957, bnds$1]; + } + function authorization(token, param){ + if(token) + var t = token[1], token$0 = caml_call1(sprintf(_jg_), t); + else + var token$0 = _jj_; + return caml_call2(sprintf(_ji_), _jh_, token$0); + } + function request$1(base_url, token, headers, Q){ + return function(params, path_params){ + var + _mE_ = caml_jsstring_of_string(caml_call1(Q[6], path_params)), + uri = + get_ok + (of_jstr + (map + (function(_mG_){return caml_jsstring_of_string(_mG_);}, base_url), + _mE_)), + authorization$0 = authorization(token, 0), + headers$0 = + of_assoc + (headers, + [0, + [0, "content-type", "text/json"], + [0, + [0, + "X-Emby-Authorization", + caml_jsstring_of_string(authorization$0)], + 0]]), + method = jstr_of_method(Q[5]); + if(Q[5]) + var + body = + of_jstr$0 + (caml_jsstring_of_string + (to_string$4(0, 0, 0, caml_call1(Q[1], params)))), + url = to_jstr$0(uri), + url$0 = url, + init = + init$0 + ([0, body], + 0, + 0, + [0, headers$0], + 0, + 0, + [0, method], + 0, + 0, + 0, + 0, + 0, + 0); + else + var + params$0 = + of_obj + (get_ok + (decode + (caml_jsstring_of_string + (to_string$4(0, 0, 0, caml_call1(Q[1], params)))))), + uri_with_params = with_query_params(uri, params$0), + url$1 = to_jstr$0(uri_with_params), + init$1 = + init$0(0, 0, 0, [0, headers$0], 0, 0, [0, method], 0, 0, 0, 0, 0, 0), + url$0 = url$1, + init = init$1; + return let$1 + (request$0(v$3([0, init], url$0)), + function(res){ + return let$2 + (text(res), + function(json){ + var + yojson = + from_string$0(0, 0, 0, caml_string_of_jsstring(json)); + try{var _mF_ = caml_call1(Q[4], yojson); return _mF_;} + catch(e$0){ + var e = caml_wrap_exception(e$0); + log([0, _jk_, [0, json, 0]]); + log([0, e, 0]); + throw caml_maybe_attach_backtrace(e, 0); + } + }); + });}; + } + var method = 1; + function connect(credentials){ + var + password = credentials[3], + username = credentials[2], + base_url = credentials[1], + auth = [0, username, password]; + return let$2 + (request$1 + ([0, base_url], + 0, + 0, + [0, + yojson_of_params, + params_of_yojson, + yojson_of_response, + response_of_yojson, + method, + endpoint]) + (auth, 0), + function(auth_response){return [0, base_url, auth_response];}); + } + function tag_of(obj){ + return is_block(obj) ? [0, caml_obj_tag(obj)] : [1, obj]; + } + function Make$7(Q){ + function Start_client(P){ + var + futures = create$2(0, 64), + listeners = create$2(0, 64), + worker = create$6(0, caml_jsstring_of_string(P[1])); + function query(query){ + var + uuid = to_string$5(0, new_uuid_v4(0)), + match = create$5(0), + set = match[2], + fut = match[1]; + function set$0(jv){return set(of_jv$0(jv));} + var query$0 = to_jstr$1([0, uuid, query]); + post(0, worker, query$0); + add$0(futures, uuid, set$0); + return fut; + } + function listen$0(event, f){ + to_string$5(0, new_uuid_v4(0)); + function set(jv){return caml_call1(f, jv);} + add$0(listeners, tag_of(event), set); + return; + } + function on_message(ev){ + symbol$13 + (of_jstr$1(data(ev)), + function(message){ + if(0 === message[0]){ + var + match = message[1], + data = match[2], + uuid = match[1], + f = find(futures, uuid); + remove(futures, uuid); + return caml_call1(f, data); + } + var match$0 = message[1], v = match$0[2], e = match$0[1]; + function _mC_(f){return caml_call1(f, v);} + return function(_mD_){return iter(_mC_, _mD_);} + (find_all$0(listeners, tag_of(e))); + }); + return 0; + } + var _mA_ = 0; + (function(_mB_){return listen(_mA_, message, on_message, _mB_);}(worker)); + return [0, , , , query, listen$0]; + } + function Make_worker(W){ + var W$0 = caml_call1(W, [0]); + function on_message(ev){ + symbol$13 + (of_jstr$1(data(ev)), + function(param){ + var data = param[2], uuid = param[1]; + return let$2 + (caml_call1(W$0[1], data), + function(result){ + var data = to_jstr$1(result); + return post$0(0, to_jstr$1([0, [0, uuid, data]])); + }); + }); + return 0; + } + listen(0, message, on_message, global); + return; + } + return [0, Start_client, , Make_worker]; + } + function _jl_(_mw_){ + var _mx_ = Make$7(_mw_)[1]; + return [0, + function(_my_){ + var _mz_ = _mx_(_my_); + return [0, , _mz_[4], _mz_[5]]; + }]; + } + function item_count(t){return t[5] - t[4] | 0;} + function req(kind, opt, _mv_, _mu_, param){ + if(opt) var sth = opt[1], src_views = sth; else var src_views = 0; + if(_mv_) var sth$0 = _mv_[1], sort = sth$0; else var sort = _jm_; + if(_mu_) var sth$1 = _mu_[1], filters = sth$1; else var filters = 0; + return [0, kind, src_views, sort, filters]; + } + function t_to_jv(encoder, t){ + return get_exn + (decode + (caml_jsstring_of_string + (to_string$4(0, 0, 0, caml_call1(encoder, t))))); + } + function jv_to_t(decoder, j){ + var json = encode(j); + return [0, + caml_call1 + (decoder, from_string$0(0, 0, 0, caml_string_of_jsstring(json)))]; + } + function t_of_yojson$0(yojson){ + if(typeof yojson !== "number" && 963043957 === yojson[1]){ + var + field_yojsons = yojson[2], + id_field = [0, 0], + item_field = [0, 0], + duplicates = [0, 0], + extra = [0, 0], + iter = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + tail = param$0[2], + match = param$0[1], + field_yojson = match[2], + field_name = match[1]; + if(caml_string_notequal(field_name, cst_id)) + if(caml_string_notequal(field_name, cst_item)){ + if(symbol$14(record_check_extra_fields)) + extra[1] = [0, field_name, symbol$14(extra)]; + } + else if(symbol$14(item_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue = option_of_yojson(string_of_yojson, field_yojson); + item_field[1] = [0, fvalue]; + } + else if(symbol$14(id_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$0 = int_of_yojson(field_yojson); + id_field[1] = [0, fvalue$0]; + } + var param$0 = tail; + } + }; + iter(field_yojsons); + if(symbol$14(duplicates)) + return record_duplicate_fields(tp_loc$6, symbol$14(duplicates), yojson); + if(symbol$14(extra)) + return record_extra_fields(tp_loc$6, symbol$14(extra), yojson); + var match = symbol$14(id_field), match$0 = symbol$14(item_field); + if(match && match$0){ + var item_value = match$0[1], id_value = match[1]; + return [0, id_value, item_value]; + } + var _mt_ = [0, [0, 0 === symbol$14(item_field) ? 1 : 0, _jn_], 0]; + return record_undefined_elements + (tp_loc$6, + yojson, + [0, [0, 0 === symbol$14(id_field) ? 1 : 0, _jo_], _mt_]); + } + return record_list_instead_atom(tp_loc$6, yojson); + } + function yojson_of_t$0(param){ + var + v_item = param[2], + v_id = param[1], + arg = yojson_of_option(yojson_of_string, v_item), + bnds = [0, [0, _jp_, arg], 0], + arg$0 = yojson_of_int(v_id), + bnds$0 = [0, [0, _jq_, arg$0], bnds]; + return [0, 963043957, bnds$0]; + } + function to_jv$1(k){return k;} + function of_jv$1(j){return j;} + function to_jv$2(t){return t_to_jv(yojson_of_t$0, t);} + function of_jv$2(j){return get_exn(jv_to_t(t_of_yojson$0, j));} + function get_key(t){return t[1];} + function sorts_of_yojson(yojson){ + if(typeof yojson !== "number" && 963043957 === yojson[1]){ + var + field_yojsons = yojson[2], + date_added_field = [0, 0], + views_field = [0, 0], + sort_name_field = [0, 0], + duplicates = [0, 0], + extra = [0, 0], + iter = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + tail = param$0[2], + match = param$0[1], + field_yojson = match[2], + field_name = match[1]; + if(caml_string_notequal(field_name, cst_date_added)) + if(caml_string_notequal(field_name, cst_sort_name)) + if(caml_string_notequal(field_name, cst_views)){ + if(symbol$14(record_check_extra_fields)) + extra[1] = [0, field_name, symbol$14(extra)]; + } + else if(symbol$14(views_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue = list_of_yojson(string_of_yojson, field_yojson); + views_field[1] = [0, fvalue]; + } + else if(symbol$14(sort_name_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$0 = string_of_yojson(field_yojson); + sort_name_field[1] = [0, fvalue$0]; + } + else if(symbol$14(date_added_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$1 = int_of_yojson(field_yojson); + date_added_field[1] = [0, fvalue$1]; + } + var param$0 = tail; + } + }; + iter(field_yojsons); + if(symbol$14(duplicates)) + return record_duplicate_fields(tp_loc$7, symbol$14(duplicates), yojson); + if(symbol$14(extra)) + return record_extra_fields(tp_loc$7, symbol$14(extra), yojson); + var + match = symbol$14(date_added_field), + match$0 = symbol$14(views_field), + match$1 = symbol$14(sort_name_field); + if(match && match$0 && match$1){ + var + sort_name_value = match$1[1], + views_value = match$0[1], + date_added_value = match[1]; + return [0, date_added_value, views_value, sort_name_value]; + } + var + _mr_ = [0, [0, 0 === symbol$14(sort_name_field) ? 1 : 0, _jr_], 0], + _ms_ = [0, [0, 0 === symbol$14(views_field) ? 1 : 0, _js_], _mr_]; + return record_undefined_elements + (tp_loc$7, + yojson, + [0, [0, 0 === symbol$14(date_added_field) ? 1 : 0, _jt_], _ms_]); + } + return record_list_instead_atom(tp_loc$7, yojson); + } + function yojson_of_sorts(param){ + var + v_sort_name = param[3], + v_views = param[2], + v_date_added = param[1], + arg = yojson_of_string(v_sort_name), + bnds = [0, [0, _ju_, arg], 0], + arg$0 = yojson_of_list(yojson_of_string, v_views), + bnds$0 = [0, [0, _jv_, arg$0], bnds], + arg$1 = yojson_of_int(v_date_added), + bnds$1 = [0, [0, _jw_, arg$1], bnds$0]; + return [0, 963043957, bnds$1]; + } + function t_of_yojson$1(yojson){ + if(typeof yojson !== "number" && 963043957 === yojson[1]){ + var + field_yojsons = yojson[2], + sorts_field = [0, 0], + item_field = [0, 0], + duplicates = [0, 0], + extra = [0, 0], + iter = + function(param){ + var param$0 = param; + for(;;){ + if(! param$0) return; + var + tail = param$0[2], + match = param$0[1], + field_yojson = match[2], + field_name = match[1]; + if(caml_string_notequal(field_name, cst_item)) + if(caml_string_notequal(field_name, cst_sorts)){ + if(symbol$14(record_check_extra_fields)) + extra[1] = [0, field_name, symbol$14(extra)]; + } + else if(symbol$14(sorts_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue = sorts_of_yojson(field_yojson); + sorts_field[1] = [0, fvalue]; + } + else if(symbol$14(item_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; + else{ + var fvalue$0 = t_of_yojson(field_yojson); + item_field[1] = [0, fvalue$0]; + } + var param$0 = tail; + } + }; + iter(field_yojsons); + if(symbol$14(duplicates)) + return record_duplicate_fields(tp_loc$8, symbol$14(duplicates), yojson); + if(symbol$14(extra)) + return record_extra_fields(tp_loc$8, symbol$14(extra), yojson); + var match = symbol$14(sorts_field), match$0 = symbol$14(item_field); + if(match && match$0){ + var item_value = match$0[1], sorts_value = match[1]; + return [0, sorts_value, item_value]; + } + var _mq_ = [0, [0, 0 === symbol$14(item_field) ? 1 : 0, _jx_], 0]; + return record_undefined_elements + (tp_loc$8, + yojson, + [0, [0, 0 === symbol$14(sorts_field) ? 1 : 0, _jy_], _mq_]); + } + return record_list_instead_atom(tp_loc$8, yojson); + } + function yojson_of_t$1(param){ + var + v_item = param[2], + v_sorts = param[1], + arg = yojson_of_t(v_item), + bnds = [0, [0, _jz_, arg], 0], + arg$0 = yojson_of_sorts(v_sorts), + bnds$0 = [0, [0, _jA_, arg$0], bnds]; + return [0, 963043957, bnds$0]; + } + function compare$2(t$0, t){return compare$0(t$0[1][3], t[1][3]);} + function to_jv$3(param){ + var + views = param[3], + sort_name = param[2], + id = param[1], + id$0 = _cN_(id), + sort_name$0 = _cN_(sort_name), + views$0 = of_list$0(_cN_, views); + return caml_js_from_array([0, id$0, sort_name$0, views$0]); + } + function of_jv$3(j){ + var match = caml_js_to_array(j), len = match.length - 1; + if(3 !== len) + throw caml_maybe_attach_backtrace([0, Assert_failure, _jB_], 1); + var + id = match[1], + sort_name = match[2], + views = match[3], + id$0 = value$0(id), + sort_name$0 = value$0(sort_name), + views$0 = to_list$0(value$0, views); + return [0, id$0, sort_name$0, views$0]; + } + var path$0 = [1, [0, _jE_, _jD_, _jC_]]; + function to_jv$4(k){return k;} + function of_jv$4(j){return j;} + function to_jv$5(k){return _cN_(k);} + function of_jv$5(j){return value$0(j);} + function to_jv$6(k){ + throw caml_maybe_attach_backtrace([0, Assert_failure, _jF_], 1); + } + function of_jv$6(j){ + var match = caml_js_to_array(j), len = match.length - 1; + if(2 !== len) + throw caml_maybe_attach_backtrace([0, Assert_failure, _jG_], 1); + var type = match[1], views = match[2], _mp_ = to_list$0(value$0, views); + return [0, value$0(type), _mp_]; + } + var path$3 = [1, [0, _jI_, _jH_]]; + function to_jv$7(t){ + throw caml_maybe_attach_backtrace([0, Assert_failure, _jJ_], 1); + } + function of_jv$7(j){ + var match = caml_js_to_array(j), len = match.length - 1; + if(2 !== len) + throw caml_maybe_attach_backtrace([0, Assert_failure, _jK_], 1); + var + collection_type = match[1], + sort_name = match[2], + _mo_ = value$0(sort_name); + return [0, value$0(collection_type), _mo_]; + } + var path$4 = [1, [0, _jM_, _jL_]]; + function to_jv$8(t){return t_to_jv(yojson_of_t$1, t);} + function of_jv$8(j){return get_exn(jv_to_t(t_of_yojson$1, j));} + function get_key$0(t){return [0, t[1][3], t[2][3], t[1][2]];} + function to_jv$9(k){return _cN_(k);} + function of_jv$9(j){return value$0(j);} + function to_jv$10(t){return t_to_jv(yojson_of_virtual_folder, t);} + function of_jv$10(j){return get_exn(jv_to_t(virtual_folder_of_yojson, j));} + function get_key$1(t){return t[3];} + var + Orderred_items_store = + _di_ + ([0, [0, path, to_jv$1, of_jv$1], name$5, to_jv$2, of_jv$2, get_key]), + Items_store = + _di_ + ([0, + [0, path$0, to_jv$3, of_jv$3], + name$6, + to_jv$8, + of_jv$8, + get_key$0]), + Virtual_folder_store = + _di_ + ([0, + [0, path$5, to_jv$9, of_jv$9], + name$7, + to_jv$10, + of_jv$10, + get_key$1]), + _jN_ = + [0, [0, path$0, to_jv$3, of_jv$3], name$6, to_jv$8, of_jv$8, get_key$0], + _jO_ = [0, name$8]; + function _jP_(_mm_, _mn_){return _dj_(_jO_, _mm_, _mn_);} + var + ItemsByDateAdded = + function(_ml_){return _jP_(_jN_, _ml_);}([0, path$1, to_jv$4, of_jv$4]), + _jQ_ = + [0, [0, path$0, to_jv$3, of_jv$3], name$6, to_jv$8, of_jv$8, get_key$0], + _jR_ = [0, name$9]; + function _jS_(_mj_, _mk_){return _dj_(_jR_, _mj_, _mk_);} + var + ItemsByViewAndKind = + function(_mi_){return _jS_(_jQ_, _mi_);}([0, path$3, to_jv$6, of_jv$6]), + _jT_ = + [0, [0, path$0, to_jv$3, of_jv$3], name$6, to_jv$8, of_jv$8, get_key$0], + _jU_ = [0, name$10]; + function _jV_(_mg_, _mh_){return _dj_(_jU_, _mg_, _mh_);} + var + ItemsById = + function(_mf_){return _jV_(_jT_, _mf_);}([0, path$2, to_jv$5, of_jv$5]), + _jW_ = + [0, [0, path$0, to_jv$3, of_jv$3], name$6, to_jv$8, of_jv$8, get_key$0], + _jX_ = [0, name$11]; + function _jY_(_md_, _me_){return _dj_(_jX_, _md_, _me_);} + var + ItemsByTypeAndName = + function(_mc_){return _jY_(_jW_, _mc_);}([0, path$4, to_jv$7, of_jv$7]), + Queries = [0], + include$1 = _jl_(Queries), + Start_client = include$1[1]; + function on_upgrade_needed$0(e, q){ + var new_version$0 = new_version(e), old_version$0 = old_version(e); + info([0, _j0_, [0, old_version$0, [0, _jZ_, [0, new_version$0, 0]]]]); + var + db = result(q), + list = + create_object_store + ([0, function(_mb_){return _mb_;}, Orderred_items_store[1]]) + (_j1_, db), + items = + create_object_store([0, function(_ma_){return _ma_;}, Items_store[1]]) + (_j2_, db), + virtual_folders = + create_object_store + ([0, function(_l$_){return _l$_;}, Virtual_folder_store[1]]) + (_j3_, db), + index_date_added = + caml_call1 + (Items_store[12].call + (null, + [0, + function(_l__){return _l__;}, + ItemsByDateAdded[12], + ItemsByDateAdded[2]]), + items); + caml_call1 + (Items_store[12].call + (null, + [0, + function(_l9_){return _l9_;}, + ItemsByTypeAndName[12], + ItemsByTypeAndName[2]]), + items); + caml_call1 + (Items_store[12].call + (null, + [0, + function(_l8_){return _l8_;}, + ItemsByViewAndKind[12], + ItemsByViewAndKind[2]]), + items); + caml_call1 + (Items_store[12].call + (null, [0, function(_l7_){return _l7_;}, ItemsById[12], ItemsById[2]]), + items); + return info + ([0, + _j4_, + [0, + list, + [0, items, [0, index_date_added, [0, virtual_folders, 0]]]]]); + } + function with_idb(version, name, f){ + function f$0(ev, dbr){var db = result(dbr); return caml_call1(f, db);} + (function(_l4_){return on_success(f$0, _l4_);} + (function(_l5_){return on_upgrade_needed(on_upgrade_needed$0, _l5_);} + (function(_l6_){return open(name, version, _l6_);}(get_factory(0, 0))))); + return 0; + } + function Make$8(K, V){return;} + function _j5_(_l3_, _l2_){Make$8(_l3_, _l2_); return;} + var _j6_ = [0, compare$0]; + function MMap(_l1_){return _j5_(_j6_, _l1_);} + MMap([0, compare$2]); + var active = var$0(0); + function get$6(lang, string){ + return function(_l0_){return value(_l0_, string);} + (assoc_opt([0, lang, string], strings)); + } + var + Config = [0, active, get$6], + set$1 = make$6(Config)[1], + include$2 = Start_client([0, url$0]), + query = include$2[2], + listen$1 = include$2[3], + connexions = var$1(_j7_, empty$0); + function connect$0(param){ + var + match = param[2], + refresh = match[3], + status = match[2], + connexion = match[1], + server_id = param[1]; + listen$1 + (0, + function(param){ + var + report = param[2], + id = param[1], + previous_status = peek(status), + _lW_ = symbol$1(server_id, id); + if(_lW_){ + symbol$2(status, report); + var _lX_ = previous_status[2], _lY_ = report[2]; + if(_lX_){ + var remaining = _lX_[1][2]; + if(! _lY_) return symbol$2(refresh, 0); + var remaining$0 = _lY_[1][2]; + if(symbol$5(remaining, remaining$0)) return symbol$2(refresh, 0); + } + var _lZ_ = 0; + } + else + var _lZ_ = _lW_; + return _lZ_; + }); + query([0, [0, [0, server_id, connexion], 0]]); + return; + } + var + servers_with_status = + map$5 + (function(param){ + var + connexion = param[2], + id = param[1], + status = var$0(initial_report), + refresh = var$0(0), + server = [0, id, [0, connexion, status, refresh]]; + connect$0(server); + return server; + }, + get$3(connexions)); + function new_connexion(base_url, username, password){ + return let$2 + (connect([0, base_url, username, password]), + function(connexion){ + var server_id = connexion[2][3]; + return update + (function(servers){ + return concat$1(servers, element([0, server_id, connexion])); + }, + connexions); + }); + } + var + url_field = + field$0 + (pure(text_input(0, 0, 0, 0, _j9_, 0, 0, _j8_)), + function(t, v){return [0, v, t[2], t[3]];}), + username_field = + field$0 + (pure(text_input(0, 0, 0, 0, _j__, 0, 0, 0)), + function(t, v){return [0, t[1], v, t[3]];}), + password_field = + field$0 + (pure(password_input(0, 0, 0, 0, _j$_, 0, 0, 0)), + function(t, v){return [0, t[1], t[2], v];}), + submit$1 = + field$0(pure(submit$0(0, 0, 0, _ka_)), function(t, v){return t;}), + fields$0 = + return$1 + (of_list$1 + ([0, + url_field, + [0, username_field, [0, password_field, [0, submit$1, 0]]]])), + Connect_form = [0, default$1, fields$0]; + function ui_form(param){ + return create$8(0, 0, 0, Connect_form) + (function(t){ + log([0, _kb_, [0, t, 0]]); + var _lU_ = t[1]; + a: + if(typeof _lU_ !== "number" && 1 !== _lU_[0]){ + var _lV_ = t[2], url = _lU_[1]; + if(typeof _lV_ !== "number" && 1 !== _lV_[0]){ + var match = t[3], username = _lV_[1]; + if(typeof match !== "number" && 1 !== match[0]){ + var password = match[1]; + log([0, _kc_, [0, url, [0, username, 0]]]); + new_connexion(url, username, password); + return 0; + } + break a; + } + break a; + } + return 0; + }); + } + function ui_status(server){ + var + status = + func + (get$3(server[2]), + function(param){ + var sync_progress = param[2], status = param[1]; + if(typeof status === "number" && 1 === status && ! sync_progress) + return txt(0, _kf_); + if(! sync_progress) return txt(0, _ke_); + var + match = sync_progress[1], + remaining = match[2], + total = match[1]; + return txt + (0, caml_call2(sprintf(_kd_), total - remaining | 0, total)); + }); + return status; + } + function fut_to_lwd(init, f){ + var v = var$0(init); + await$1(f, function(_lT_){return symbol$2(v, _lT_);}); + return get$3(v); + } + var + servers_libraries = + map$5 + (function(param){ + var + refresh = param[2][3], + server_id = param[1], + views = + bind$1 + (get$3(refresh), + function(param){ + function _lO_(_lS_){return get_or(_lS_, 0);} + var _lP_ = 0; + return function(_lQ_){return fut_to_lwd(_lP_, _lQ_);} + (function(_lR_){return map$4(_lO_, _lR_);} + (query([3, server_id]))); + }); + return [0, server_id, views]; + }, + servers_with_status); + function ui(param){ + var + statuses = + map$5 + (function(param){var server = param[2]; return ui_status(server);}, + servers_with_status), + ui_form$0 = + func + (servers_with_status, + function(s){ + return typeof view(s) === "number" + ? element(div$1(0, 0, 0, [0, [0, 82, ui_form(0)], 0])) + : empty$0; + }), + _lN_ = [0, [0, 83, lift(statuses)], 0]; + return div$1(0, 0, 0, [0, [0, 83, lift(ui_form$0)], _lN_]); + } + var _kg_ = var$0(0), _kh_ = var$0(0), now_playing = var$0(0); + function audio_url(server, item_id){ + var _lL_ = server[2][2], _lM_ = server[1]; + return caml_call3(sprintf(_ki_), _lM_, item_id, _lL_); + } + function Playback_controller(P){ + function set_play_url(playlist, current_index){ + if(! playlist) return ok(0); + var playlist$0 = playlist[1]; + return let$2 + (let$2 + (caml_call2(P[1], playlist$0, [0, current_index]), + function(result){ + var len = result.length - 1; + if(1 === len){ + var _lJ_ = result[1]; + if(_lJ_){ + var + item = _lJ_[1][2], + server_id = item[7], + album_id = item[5], + id = item[3], + name = item[1], + servers = to_list$1(peek(connexions)), + connexion = assq(server_id, servers), + url = audio_url(connexion, id); + log([0, _kj_, [0, name, [0, _cN_(url), 0]]]); + var + session = of_navigator(navigator), + image_id = value$3(album_id, id), + _lK_ = connexion[1], + img_src = caml_call2(sprintf(_kk_), _lK_, image_id), + artwork = [0, [0, img_src, _km_, _kl_], 0]; + log([0, artwork, 0]); + set_metadata(session, [0, name, artist, album, artwork]); + return [0, item, url]; + } + } + throw caml_maybe_attach_backtrace(Not_found, 1); + }), + function(item){return symbol$2(now_playing, [0, item]);}); + } + function reset_playlist(playlist){ + set_play_url([0, playlist], 0); + symbol$2(_kh_, [0, playlist]); + return symbol$2(_kg_, 0); + } + function make(param){ + var + _lB_ = [0, v$1("preload", "auto"), 0], + _lC_ = [0, v$1("autoplay", cst_true), _lB_], + audio_elt = audio$0(0, [0, [0, v$1("controls", cst_true), _lC_]], 0); + function set_src(url){ + return set_at(cst_src, [0, caml_jsstring_of_string(url)], audio_elt); + } + var root = observe$0(0, get$3(now_playing)); + set_on_invalidate + (root, + function(param){ + var match = quick_sample(root); + if(! match) return 0; + var url = match[1][2]; + return set_src(url); + }); + quick_sample(root); + function next(param){ + var + playlist = peek(_kh_), + current_index = peek(_kg_), + next_index = current_index + 1 | 0; + set_play_url(playlist, next_index); + return symbol$2(_kg_, next_index); + } + function prev(param){ + var + playlist = peek(_kh_), + current_index = peek(_kg_), + next_index = max(0, current_index - 1 | 0); + set_play_url(playlist, next_index); + return symbol$2(_kg_, next_index); + } + var session = of_navigator(navigator); + function set_position_state$0(param){ + var + duration = prop(float$0(cst_duration), audio_elt), + _lI_ = 1 - is_nan(duration); + if(! _lI_) return _lI_; + var + playback_rate = prop(float$0(cst_playbackRate), audio_elt), + position = prop(float$0("currentTime"), audio_elt); + return set_position_state + ([0, duration], [0, playback_rate], [0, position], session); + } + set_action_handler(session, next_track, next); + set_action_handler(session, previous_track, prev); + function on_error(ev){ + stop_immediate_propagation(ev); + prevent_default(ev); + log([0, _kn_, [0, ev, 0]]); + return next(0); + } + function next$0(param){return next(0);} + listen(0, ended, next$0, audio_elt); + listen(0, error, on_error, audio_elt); + listen + (0, play, function(param){return set_position_state$0(0);}, audio_elt); + var + btn_next = + v$6(0, 0, [0, [0, [0, 80, handler(0, click, next$0)], 0]], _ko_), + style$0 = + func + (get$3(now_playing), + function(np){ + if(np) + var + match = np[1][1], + server_id = match[7], + album_id = match[5], + id = match[3], + image_id = value$3(album_id, id), + servers = to_list$1(peek(connexions)), + connexion = assq(server_id, servers), + _lH_ = connexion[1], + src = caml_call2(sprintf(_kp_), _lH_, image_id); + else + var src = _kr_; + return caml_call1(sprintf(_kq_), src); + }), + _lD_ = [0, 82, style$0], + at = + function(_lG_){return add$1(style, _lD_, _lG_);} + (add$1(class$0, _ks_, 0)), + track_cover = div$1(0, [0, at], 0, 0), + track_details = + func + (get$3(now_playing), + function(param){ + if(! param) return txt(0, _kt_); + var name = param[1][1][1]; + return txt(0, name); + }), + at$0 = + function(_lF_){return add$1(class$0, _kv_, _lF_);} + (add$1(class$0, _ku_, 0)), + now_playing$0 = + div$1 + (0, + [0, at$0], + 0, + [0, [0, 82, track_cover], [0, [0, 82, track_details], 0]]), + at$1 = + function(_lE_){return add$1(class$0, _kx_, _lE_);} + (add$1(class$0, _kw_, 0)); + return div$1 + (0, + [0, at$1], + 0, + [0, + [0, 82, now_playing$0], + [0, [0, 80, audio_elt], [0, [0, 82, btn_next], 0]]]); + } + return [0, , reset_playlist, make]; + } + var base = classes(_ky_); + function at(param){return param ? classes(_kz_) : classes(_kA_);} + function make$9(on_click){ + var + on_click$0 = handler$0(0, click, on_click), + _lx_ = [0, at], + _ly_ = [0, [0, [0, 80, on_click$0], 0]]; + return function(_lA_, _lz_){ + return caml_call1(two_state([0, base])(_lA_, _lz_, _lx_), _ly_);}; + } + classes(_kB_); + function columns(param){ + var + _ls_ = + function(_lw_){return v$5(_kE_, _kD_, _lw_);} + ([0, [0, 80, txt(0, _kC_)], 0]), + _lt_ = + function(_lv_){return v$5(_kH_, _kG_, _lv_);} + ([0, [0, 80, txt(0, _kF_)], 0]); + return [0, + function(_lu_){return v$5(_kK_, _kJ_, _lu_);} + ([0, [0, 80, txt(0, _kI_)], 0]), + _lt_, + _ls_]; + } + function make$10(reset_playlist, fetch, view){ + function img_url(server_id, item_id){ + var servers = to_list$1(peek(connexions)); + try{ + var + connexion = assq(server_id, servers), + _lp_ = connexion[1], + _lq_ = caml_call2(sprintf(_kM_), _lp_, item_id), + url = _lq_; + } + catch(_lr_){ + var _lo_ = caml_wrap_exception(_lr_); + if(_lo_ !== Not_found) throw caml_maybe_attach_backtrace(_lo_, 0); + var url = _kL_; + } + return src$0(caml_jsstring_of_string(url)); + } + function render(view, start_index, param){ + var + match = param[2], + image_blur_hashes = match[8], + server_id = match[7], + album_id = match[5], + id = match[3], + name = match[1]; + function play_from(param){ + let$2 + (view, + function(view){ + return caml_call1 + (reset_playlist, + [0, + view[1], + view[2], + view[3], + view[4] + start_index | 0, + view[5]]); + }); + return 0; + } + var play_on_click = handler(0, click, play_from); + a: + { + if(image_blur_hashes[1] && album_id){ + var + id$0 = album_id[1], + _ll_ = return$1(img_url(server_id, id$0)), + img_url$0 = _ll_; + break a; + } + var img_url$0 = return$1(src$0(cst_track_png)); + } + var + status = + func + (get$3(now_playing), + function(param){ + if(param){ + var item_id = param[1][1][3]; + if(symbol$1(item_id, id)){ + var _ln_ = [0, txt(0, _kN_), 0]; + return div$0(0, [0, [0, class$1("playing"), 0]], _ln_); + } + } + return div$0 + (0, 0, [0, txt(0, string_of_int(start_index + 1 | 0)), 0]); + }), + _lm_ = + [0, + [0, 80, div$0(0, 0, [0, span$0(0, 0, [0, txt(0, name), 0]), 0])], + 0]; + return [0, + [0, 82, status], + [0, + [0, + 82, + div$1 + (0, + 0, + [0, [0, [0, 80, play_on_click], 0]], + [0, + [0, + 82, + img$0 + (0, + [0, [0, [0, 82, img_url$0], [0, [0, 80, width$0(50)], 0]]], + 0, + 0)], + 0])], + _lm_]]; + } + function placeholder(i){return 0;} + var + ui_table = [0, [0, columns(0)], _kO_], + data_source = + func + (view, + function(view){ + var + total_items = + map$4(function(_lk_){return symbol$12(item_count, _lk_);}, view); + function fetch$0(i){ + return let$1 + (view, function(view){return caml_call2(fetch, view, i);}); + } + function render$0(_li_, _lj_){return render(view, _li_, _lj_);} + return [0, total_items, fetch$0, render$0]; + }); + return make$5(ui_table, [0, placeholder], data_source); + } + function fetch$1(view, i){return query([5, view, i]);} + var P = Playback_controller([0, fetch$1]); + function app(idb){ + var playlist = var$1(_kP_, 0); + function on_click(param, _lh_){ + symbol$2(playlist, peek(playlist) + 1 | 0); + set$1(1); + return 1; + } + caml_call1 + (make$9(on_click)(0, 0), + function(param){ + return [0, + [0, + 82, + func + (get$3(playlist), + function(pl){ + return txt(0, symbol(_kQ_, string_of_int(pl))); + })], + 0]; + }); + var + _k6_ = [0, [0, 82, ui(0)], 0], + _k7_ = [0, [0, 80, h1$0(0, 0, [0, txt(0, _kR_), 0])], _k6_], + status = + div$1(0, [0, [0, [0, 80, style$0(cst_grid_column_1_1)], 0]], 0, _k7_), + player = P[3].call(null, 0), + player_ui = + div$1 + (0, + [0, [0, [0, 80, style$0(cst_grid_column_1_1)], 0]], + 0, + [0, [0, 82, player], 0]), + f_search = make$7([0, _kS_, 0, [0, pure(0), 0]]), + choices = + fold_monoid + (function(param){ + var l = param[2]; + return func + (l, + function(l){ + return transform_list + (l, + function(l){ + var _lg_ = [0, [0, 80, txt(0, l[2][1])], 0]; + return element([0, l[2][3], _lg_, 1]); + }); + }); + }, + [0, + return$1(empty$0), + function(_lb_){ + function _lc_(_le_, _lf_){return map2(_lb_, _le_, _lf_);} + return function(_ld_){return _lc_(_ld_, concat$1);}; + }], + servers_libraries), + f_libraries = make$8([0, _kT_, join(choices)]), + filters = + div$1 + (0, 0, 0, [0, [0, 82, f_search[1]], [0, [0, 82, f_libraries[1]], 0]]), + f_value = f_libraries[2], + main_view = + map2 + (f_value, + f_search[3], + function(l, t){ + var + filters = symbol$10(function(s){return [0, [0, s], 0];}, t), + _la_ = [0, of_list$0(_cN_, l), 0]; + log([0, _kV_, [0, of_option(_cN_(_kU_), _cN_, t), _la_]]); + return query([4, req(0, [0, [0, l]], _kW_, filters, 0)]); + }), + main_list = make$10(P[2], fetch$1, main_view), + playlist$0 = + func + (get$3(_kh_), + function(param){ + if(! param) return span$1(0, 0, 0, [0, [0, 80, txt(0, _kX_)], 0]); + var playlist = param[1], _k$_ = pure(ok(playlist)); + return make$10(P[2], fetch$1, _k$_); + }), + now_playing = join(playlist$0), + _k8_ = + [0, + [0, + 82, + div$1 + (0, + [0, [0, [0, 80, class$1("playlist")], 0]], + 0, + [0, [0, 82, now_playing], 0])], + [0, [0, 82, player_ui], 0]], + _k9_ = + [0, + [0, 82, status], + [0, + [0, + 82, + div$1 + (0, + [0, [0, [0, 80, class$1("item-list")], 0]], + 0, + [0, [0, 82, filters], [0, [0, 82, main_list], 0]])], + _k8_]]; + return div$1 + (0, + [0, function(_k__){return to_at$0(_kY_, _k__);}(classes(0))], + 0, + _k9_); + } + var is_storage_persistent = persist(manager(navigator)); + function on_load(param){ + log([0, _kZ_, [0, is_storage_persistent, 0]]); + return function(_k4_){return with_idb(_k1_, _k0_, _k4_);} + (function(idb){ + var app$0 = observe$0(0, app(idb)); + function on_invalidate(param){ + request_animation_frame + (function(param){quick_sample(app$0); return 0;}); + return 0; + } + var _k5_ = [0, quick_sample(app$0), 0]; + append_children(body(global_document), _k5_); + set_on_invalidate(app$0, on_invalidate); + return 0; + }); + } + listen(0, dom_content_loaded, on_load, as_target(window)); + do_at_exit(0); + return; + } + (globalThis)); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLjAsImZpbGUiOiJtYWluLmJjLmpzIiwic291cmNlUm9vdCI6IiIsIm5hbWVzIjpbImNhbWxfYXJyYXlfYmxpdCIsImExIiwiaTEiLCJhMiIsImkyIiwibGVuIiwiaiIsImNhbWxfYXJyYXlfZmlsbCIsImFycmF5Iiwib2ZzIiwidiIsImkiLCJjYW1sX2FycmF5X3N1YiIsImEiLCJBcnJheSIsImNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyIsImYiLCJTdHJpbmciLCJudWxsIiwicyIsIk1hdGgiLCJjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkiLCJVaW50OEFycmF5IiwiYiIsImwiLCJjYW1sX2JsaXRfYnl0ZXMiLCJzMSIsInMyIiwiYzEiLCJjMiIsImNhbWxfc3RyX3JlcGVhdCIsIm4iLCJyIiwiY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyIsImpzb29faXNfYXNjaWkiLCJjYW1sX3V0ZjE2X29mX3V0ZjgiLCJ0IiwiYyIsIk1sQnl0ZXMiLCJ0YWciLCJjb250ZW50cyIsImxlbmd0aCIsInRoaXMiLCJjb250ZW50IiwiY2FtbF9ieXRlc19vZl9qc2J5dGVzIiwiY2FtbF9qc2J5dGVzX29mX3N0cmluZyIsIngiLCJjYW1sX2J5dGVzX29mX3N0cmluZyIsImNhbWxfYmxpdF9zdHJpbmciLCJkIiwiZSIsImpzb29fc3lzX2dldGVudiIsInByb2Nlc3MiLCJnbG9iYWxUaGlzIiwidW5kZWZpbmVkIiwiY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWciLCJjYW1sX2dsb2JhbF9kYXRhIiwiY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UiLCJleG4iLCJmb3JjZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfcmFpc2Vfd2l0aF9hcmciLCJhcmciLCJjYW1sX3N0cmluZ19vZl9qc2J5dGVzIiwiY2FtbF9yYWlzZV93aXRoX3N0cmluZyIsIm1zZyIsImNhbWxfaW52YWxpZF9hcmd1bWVudCIsImNhbWxfYnl0ZXNfYm91bmRfZXJyb3IiLCJjYW1sX2J5dGVzX3Vuc2FmZV9zZXQiLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfYnl0ZXNfdW5zYWZlX2dldCIsImNhbWxfY2FsbF9nZW4iLCJhcmdzIiwiYXJnc0xlbiIsImciLCJuYXJncyIsInkiLCJleHRyYV9hcmdzIiwiYXJndW1lbnRzIiwiY2FtbF9hcnJheV9ib3VuZF9lcnJvciIsImNhbWxfY2hlY2tfYm91bmQiLCJpbmRleCIsImNhbWxfY2xhc3NpZnlfZmxvYXQiLCJpc0Zpbml0ZSIsImlzTmFOIiwiY2FtbF9pc19jb250aW51YXRpb25fdGFnIiwibG9nMl9vayIsImpzb29fZmxvb3JfbG9nMiIsIkluZmluaXR5IiwiY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0IiwiZmxvYXQzMmEiLCJGbG9hdDMyQXJyYXkiLCJpbnQzMmEiLCJJbnQzMkFycmF5IiwiY2FtbF9pbnQ2NF9vZmZzZXQiLCJjYW1sX3JhaXNlX2NvbnN0YW50IiwiY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSIsIk1sSW50NjQiLCJsbyIsIm1pIiwiaGkiLCJ4aGkiLCJoIiwic2lnbiIsIm9mZnNldCIsIm1vZHVsdXMiLCJkaXZpc29yIiwicXVvdGllbnQiLCJxIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQiLCJleHAiLCJrIiwicjMiLCJyMiIsInIxIiwiY2FtbF9pbnQ2NF90b19ieXRlcyIsImNhbWxfYmFfc2VyaWFsaXplIiwid3JpdGVyIiwiYmEiLCJzeiIsImNvbXBsZXgiLCJjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50Iiwia2luZCIsImNhbWxfYmFfY3JlYXRlX2J1ZmZlciIsInNpemUiLCJ2aWV3IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIlVpbnQxNkFycmF5IiwiZGF0YSIsImNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyIsImNhbWxfaW50NjRfb2ZfYnl0ZXMiLCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMiLCJOYU4iLCJyZXMiLCJjYW1sX2JhX2dldF9zaXplIiwiZGltcyIsIm5fZGltcyIsImNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIiwiY2FtbF9pbnQ2NF9oaTMyIiwiY2FtbF9pbnQ2NF9sbzMyIiwiY2FtbF9iYV9jdXN0b21fbmFtZSIsIk1sX0JpZ2FycmF5IiwibGF5b3V0IiwiYnVmZmVyIiwiaW0iLCJyZSIsInRvdGFsIiwiazEiLCJrMiIsIk1sX0JpZ2FycmF5X2NfMV8xIiwiY2FtbF9iYV9jcmVhdGVfdW5zYWZlIiwic2l6ZV9wZXJfZWxlbWVudCIsImNhbWxfZmFpbHdpdGgiLCJjYW1sX2JhX2Rlc2VyaWFsaXplIiwicmVhZGVyIiwibmFtZSIsIm51bV9kaW1zIiwic2l6ZV9kaW0iLCJzaXplX2RpbV9oaSIsInNpemVfZGltX2xvIiwic2l4dHkiLCJpbnQ2NCIsImNhbWxfYmFfY29tcGFyZSIsImNhbWxfbXVsIiwiY2FtbF9oYXNoX21peF9pbnQiLCJjYW1sX2hhc2hfbWl4X2ludDY0IiwiY2FtbF9oYXNoX21peF9mbG9hdCIsInYwIiwiY2FtbF9iYV9oYXNoIiwibnVtX2VsdHMiLCJ3IiwiY2FtbF9pbnQzMl91bm1hcnNoYWwiLCJjYW1sX25hdGl2ZWludF91bm1hcnNoYWwiLCJjYW1sX2ludDY0X3VubWFyc2hhbCIsImNhbWxfaW50NjRfbWFyc2hhbCIsInNpemVzIiwiY2FtbF9pbnQ2NF9jb21wYXJlIiwiY2FtbF9pbnQ2NF9oYXNoIiwiY2FtbF9jdXN0b21fb3BzIiwiY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tIiwiY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tIiwibnVtIiwiY3VzdG9tIiwic3dhcCIsImNvbXAiLCJjYW1sX2lzX21sX3N0cmluZyIsImNhbWxfaXNfbWxfYnl0ZXMiLCJjYW1sX2NvbXBhcmVfdmFsX3RhZyIsIk51bWJlciIsImNhbWxfaW50X2NvbXBhcmUiLCJjYW1sX3N0cmluZ19jb21wYXJlIiwiY2FtbF9ieXRlc19jb21wYXJlIiwiY2FtbF9jb21wYXJlX3ZhbCIsInN0YWNrIiwidGFnX2EiLCJ0YWdfYiIsImNhbWxfY29tcGFyZSIsImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlIiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2VxdWFsIiwiY2FtbF9maWxsX2J5dGVzIiwiY2FtbF9mbG9hdF9vZl9zdHJpbmciLCJtIiwibTMiLCJtYW50aXNzYSIsInBhcnNlSW50IiwiZXhwb25lbnQiLCJjYW1sX3BhcnNlX2Zvcm1hdCIsImZtdCIsImNhbWxfZmluaXNoX2Zvcm1hdHRpbmciLCJyYXdidWZmZXIiLCJjYW1sX2Zvcm1hdF9mbG9hdCIsInRvRml4ZWQiLCJkcCIsInByZWMiLCJwIiwiY2FtbF9mb3JtYXRfaW50IiwiY2FtbF9vb19sYXN0X2lkIiwiY2FtbF9mcmVzaF9vb19pZCIsImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIiwiZnNfbm9kZV9zdXBwb3J0ZWQiLCJtYWtlX3BhdGhfaXNfYWJzb2x1dGUiLCJwb3NpeCIsInBhdGgiLCJ3aW4zMiIsInNwbGl0RGV2aWNlUmUiLCJyZXN1bHQiLCJkZXZpY2UiLCJpc1VuYyIsIkJvb2xlYW4iLCJyb290Iiwic2VwIiwicGF0aF9pc19hYnNvbHV0ZSIsImNhbWxfdHJhaWxpbmdfc2xhc2giLCJjYW1sX2N1cnJlbnRfZGlyIiwiY2FtbF9tYWtlX3BhdGgiLCJjb21wMCIsIm5jb21wIiwiY2FtbF91dGY4X29mX3V0ZjE2IiwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmciLCJ1bml4X2Vycm9yIiwibWFrZV91bml4X2Vycl9hcmdzIiwiY29kZSIsInN5c2NhbGwiLCJlcnJubyIsInZhcmlhbnQiLCJjYW1sX25hbWVkX3ZhbHVlcyIsImNhbWxfbmFtZWRfdmFsdWUiLCJubSIsImNhbWxfcmFpc2Vfd2l0aF9hcmdzIiwiY2FtbF9ieXRlc19vZl9hcnJheSIsImNhbWxfcmFpc2Vfc3lzX2Vycm9yIiwiY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUiLCJjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzIiwiY2FtbF9tbF9ieXRlc19sZW5ndGgiLCJNbEZpbGUiLCJNbEZha2VGaWxlIiwib2xkIiwiYnVmIiwicG9zIiwiY2xlbiIsIm5ld19zdHIiLCJvbGRfZGF0YSIsIk1sRmFrZUZkIiwiZmlsZSIsImZsYWdzIiwiTWxGYWtlRGV2aWNlIiwiU3ltYm9sIiwibmFtZV9zbGFzaCIsIm1vZGUiLCJyYWlzZV91bml4IiwicGFyZW50IiwiUmVnRXhwIiwic2VlbiIsImVudHJ5Iiwib2siLCJieXRlcyIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQiLCJjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyIsIk1sTm9kZUZkIiwiZmQiLCJyZXF1aXJlIiwiZXJyIiwiYnVmX29mZnNldCIsInJlYWQiLCJNbE5vZGVEZXZpY2UiLCJjb25zdHMiLCJrZXkiLCJpc0NoYXJhY3RlckRldmljZSIsIm8iLCJqc19zdGF0cyIsInRvX2RpciIsInRhcmdldCIsImxpbmsiLCJmaWxlX2tpbmQiLCJjYW1sX2dldF9yb290IiwiY2FtbF9yb290IiwianNvb19tb3VudF9wb2ludCIsInJlc29sdmVfZnNfZGV2aWNlIiwiY2FtbF9jcmVhdGVfZmlsZSIsImpzb29fY3JlYXRlX2ZpbGUiLCJjYW1sX2ZzX2luaXQiLCJ0bXAiLCJjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFjayIsImNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlIiwiY2FtbF9ncmVhdGVyZXF1YWwiLCJjYW1sX2hhc2hfbWl4X2pzYnl0ZXMiLCJjYW1sX2hhc2hfbWl4X3N0cmluZyIsImNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyIiwiY2FtbF9tbF9ieXRlc19jb250ZW50IiwiY2FtbF9oYXNoX21peF9ieXRlcyIsImNhbWxfaGFzaF9taXhfZmluYWwiLCJjYW1sX2hhc2giLCJjb3VudCIsImxpbWl0Iiwic2VlZCIsIm9iaiIsInF1ZXVlIiwicmQiLCJ3ciIsImhoIiwiY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQiLCJzdHlsZSIsImV4cF9zaWduIiwic2lnbl9zdHIiLCJjc3QiLCJ4X3N0ciIsImlkeCIsImNhbWxfaW50NjRfaXNfemVybyIsImNhbWxfaW50NjRfb2ZfaW50MzIiLCJjYW1sX2ludDY0X3RvX2ludDMyIiwiY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSIsImNhbWxfaW50NjRfbmVnIiwiY2FtbF9pbnQ2NF9mb3JtYXQiLCJ3YmFzZSIsImN2dGJsIiwiY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIiwiYmFzZSIsImNhbWxfcGFyc2VfZGlnaXQiLCJjYW1sX2ludF9vZl9zdHJpbmciLCJ0aHJlc2hvbGQiLCJjYW1sX2pzX2Zyb21fYXJyYXkiLCJjYW1sX2pzX21ldGhfY2FsbCIsImNhbWxfanNfbmV3IiwiRiIsImNhbWxfanNfb2JqZWN0IiwiY2FtbF9qc190b19hcnJheSIsImNhbWxfY2FsbGJhY2siLCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0IiwiYXJpdHkiLCJjYW1sX2xlc3N0aGFuIiwiY2FtbF9sZXhfYXJyYXkiLCJjYW1sX2xleF9lbmdpbmUiLCJ0YmwiLCJzdGFydF9zdGF0ZSIsImxleGJ1ZiIsImxleF9idWZmZXIiLCJsZXhfYnVmZmVyX2xlbiIsImxleF9zdGFydF9wb3MiLCJsZXhfY3Vycl9wb3MiLCJsZXhfbGFzdF9wb3MiLCJsZXhfbGFzdF9hY3Rpb24iLCJsZXhfZW9mX3JlYWNoZWQiLCJsZXhfYmFzZSIsImxleF9iYWNrdHJrIiwibGV4X2RlZmF1bHQiLCJsZXhfdHJhbnMiLCJsZXhfY2hlY2siLCJzdGF0ZSIsImJhY2t0cmsiLCJjYW1sX2xpc3RfdG9fanNfYXJyYXkiLCJjYW1sX21ha2VfdmVjdCIsImluaXQiLCJjYW1sX01ENUluaXQiLCJBcnJheUJ1ZmZlciIsImIzMiIsIlVpbnQzMkFycmF5IiwiYjgiLCJjYW1sX01ENVRyYW5zZm9ybSIsImFkZCIsInh4IiwiZmYiLCJnZyIsImlpIiwiY2FtbF9NRDVVcGRhdGUiLCJjdHgiLCJpbnB1dCIsImlucHV0X2xlbiIsImluX2J1ZiIsImlucHV0X3BvcyIsIm1pc3NpbmciLCJjYW1sX01ENUZpbmFsIiwiY2FtbF9zdHJpbmdfb2ZfYXJyYXkiLCJjYW1sX21kNV9ieXRlcyIsImNhbWxfbWQ1X3N0cmluZyIsImNhbWxfc3lzX2ZkcyIsImNhbWxfc3lzX2Nsb3NlIiwiY2FtbF9tbF9jaGFubmVscyIsImNhbWxfbWxfZmx1c2giLCJjaGFuaWQiLCJjaGFuIiwiY2FtbF9tbF9jbG9zZV9jaGFubmVsIiwiY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyIsImNhbWxfcmVmaWxsIiwic3RyIiwic3RyX2EiLCJucmVhZCIsImNhbWxfbWxfaW5wdXRfYmxvY2siLCJhdmFpbCIsImNhbWxfbWxfaW5wdXQiLCJjYW1sX3N5c19vcGVuX2Zvcl9ub2RlIiwiZnMiLCJmZDIiLCJNbEZha2VGZF9vdXQiLCJjb25zb2xlIiwic3JjIiwiY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCIsImNhbWxfc3lzX29wZW4iLCJfcGVybXMiLCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbiIsInJlZmlsbCIsImNoYW5uZWwiLCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQiLCJidWZmZXJlZCIsImNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3QiLCJjYW1sX21sX291dHB1dF90YSIsImlkIiwiY2FtbF9tbF9vdXRwdXRfYnl0ZXMiLCJjYW1sX21sX291dHB1dCIsImNhbWxfbWxfb3V0cHV0X2NoYXIiLCJjYW1sX21sX3NldF9jaGFubmVsX25hbWUiLCJjYW1sX21vZCIsImNhbWxfbm90ZXF1YWwiLCJjYW1sX29ial9tYWtlX2ZvcndhcmQiLCJjYW1sX29ial90YWciLCJGdW5jdGlvbiIsImNhbWxfYnVpbGRfc3ltYm9scyIsInN5bWIiLCJjYW1sX3JlZ2lzdGVyX2dsb2JhbCIsIm5hbWVfb3B0IiwibmlkIiwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZSIsImNhbWxfc3RyaW5nX2VxdWFsIiwiY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3N0cmluZ19ub3RlcXVhbCIsImNhbWxfc3RyaW5nX29mX2J5dGVzIiwiY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSIsImNhbWxfcmFpc2Vfbm90X2ZvdW5kIiwiY2FtbF9zeXNfZ2V0ZW52IiwiY2FtbF9zeXNfcmFuZG9tX3NlZWQiLCJub3ciLCJEYXRlIiwiY2FtbF90cmFtcG9saW5lIiwiY2FtbF90cmFtcG9saW5lX3JldHVybiIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uIiwiY2FtbF9mb3JtYXRfZXhjZXB0aW9uIiwiYnVja2V0Iiwic3RhcnQiLCJjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbiIsImhhbmRsZXIiLCJhdF9leGl0IiwiY2FtbF9zZXR1cF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciIsIm9yaWdpbiIsImV2ZW50IiwiemVyb19wb3MiLCJsb2NmbXQiLCJvY2FtbF9sZXhfdGFibGVzIiwidHBfbG9jIiwidHBfbG9jJDAiLCJ0cF9sb2MkMSIsInRwX2xvYyQyIiwidHBfbG9jJDMiLCJ0cF9sb2MkNCIsInRwX2xvYyQ1IiwidHBfbG9jJDYiLCJuYW1lJDUiLCJ0cF9sb2MkNyIsInRwX2xvYyQ4IiwicGF0aCQxIiwicGF0aCQyIiwibmFtZSQ2IiwicGF0aCQ1IiwibmFtZSQ3IiwibmFtZSQ4IiwibmFtZSQ5IiwibmFtZSQxMCIsIm5hbWUkMTEiLCJpbml0aWFsX3JlcG9ydCIsInN0cmluZ3MiLCJ1cmwkMCIsImRlZmF1bHQkMSIsImFsYnVtIiwiYXJ0aXN0IiwiZXJhc2VfcmVsIiwicmVzdCIsInJlc3QkMCIsInJlc3QkMSIsInJlc3QkMiIsInJlc3QkMyIsInJlc3QkNCIsInJlc3QkNSIsInJlc3QkNiIsInJlc3QkNyIsInR5IiwicmVzdCQ4IiwidHkxIiwicmVzdCQ5IiwicmVzdCQxMCIsInJlc3QkMTEiLCJyZXN0JDEyIiwicmVzdCQxMyIsImNvbmNhdF9mbXR0eSIsImZtdHR5MSIsImZtdHR5MiIsInR5MiIsImNvbmNhdF9mbXQiLCJmbXQxIiwiZm10MiIsInBhZCIsInBhZCQwIiwicGFkJDEiLCJpY29udiIsInByZWMkMCIsInBhZCQyIiwiaWNvbnYkMCIsInByZWMkMSIsInBhZCQzIiwiaWNvbnYkMSIsInByZWMkMiIsInBhZCQ0IiwiaWNvbnYkMiIsInByZWMkMyIsInBhZCQ1IiwiZmNvbnYiLCJwYWQkNiIsImNociIsImZtdHR5IiwicGFkJDciLCJmbXR0eSQwIiwicGFkJDgiLCJyZXN0JDE0IiwicmVzdCQxNSIsInJlc3QkMTYiLCJmbXRpbmdfbGl0IiwicmVzdCQxNyIsImZtdGluZ19nZW4iLCJyZXN0JDE4IiwicmVzdCQxOSIsImNoYXJfc2V0Iiwid2lkdGhfb3B0IiwicmVzdCQyMCIsImNvdW50ZXIiLCJyZXN0JDIxIiwicmVzdCQyMiIsImlnbiIsInJlc3QkMjMiLCJjdXIiLCJmYWlsd2l0aCIsImludmFsaWRfYXJnIiwiYWJzIiwibG5vdCIsIm1heF9pbnQiLCJsMSIsImwyIiwiY2hhcl9vZl9pbnQiLCJzdHJpbmdfb2ZfYm9vbCIsInN0cmluZ19vZl9pbnQiLCJ2YWxpZF9mbG9hdF9sZXhlbSIsImxvb3AiLCJpJDAiLCJpJDEiLCJzdHJpbmdfb2ZfZmxvYXQiLCJzeW1ib2wkMCIsInRsIiwiaGQiLCJzdGRvdXQiLCJzdGRlcnIiLCJvcGVuX291dF9nZW4iLCJwZXJtIiwib3Blbl9vdXQiLCJmbHVzaF9hbGwiLCJpdGVyIiwib3V0cHV0X3N0cmluZyIsIm9jIiwib3V0cHV0X3N1YnN0cmluZyIsImNsb3NlX291dCIsIm9wZW5faW5fZ2VuIiwib3Blbl9pbiIsImljIiwicHJlcnJfZW5kbGluZSIsImV4aXRfZnVuY3Rpb24iLCJmX3lldF90b19ydW4iLCJvbGRfZXhpdCIsImZfeWV0X3RvX3J1biQwIiwib2xkX2V4aXQkMCIsIm5ld19leGl0Iiwic3VjY2VzcyIsImRvX2F0X2V4aXQiLCJpc19ibG9jayIsInJhaXNlX3VuZGVmaW5lZCIsImZvcmNlX2xhenlfYmxvY2siLCJibGsiLCJjbG9zdXJlIiwiZSQwIiwidmFsdWUiLCJkZWZhdWx0JDAiLCJnZXQkMCIsIm1hcCIsImlzX3NvbWUiLCJnZXRfb2siLCJtYXAkMCIsIm9mX2ludF9leG4iLCJzJDAiLCJsZW5ndGhfYXV4IiwibGVuJDAiLCJjb25zIiwicmV2X2FwcGVuZCIsImwxJDAiLCJsMiQwIiwibDEkMSIsImwyJDEiLCJyZXYiLCJpbml0X3RhaWxyZWNfYXV4IiwiYWNjIiwiYWNjJDAiLCJhY2MkMSIsImluaXRfYXV4Iiwicm1hcF9mIiwiYWNjdSQwIiwiYWNjdSIsImwkMCIsImwkMSIsImFjY3UkMSIsImZpbmQiLCJhdXgiLCJwYXJ0IiwieWVzJDAiLCJubyQwIiwiY21wIiwicmV2X21lcmdlIiwidDIiLCJoMiIsInQxIiwiaDEiLCJhY2N1JDIiLCJhY2N1JDMiLCJyZXZfbWVyZ2VfcmV2Iiwic29ydCIsIngyIiwieDEiLCJ0bCQxIiwieDMiLCJ4MiQwIiwieDEkMCIsImMkMCIsImMkMSIsImMkMiIsImMkMyIsImMkNCIsImMkNSIsIm4xIiwibjIiLCJyZXZfc29ydCIsInRsJDAiLCJjb21wYXJlIiwibWluIiwibWF4JDAiLCJ0b19zdHJpbmciLCJvZnMxIiwib2ZzMiIsImVuc3VyZV9nZSIsInN1bV9sZW5ndGhzIiwic2VwbGVuIiwidW5zYWZlX2JsaXRzIiwiZHN0IiwicG9zJDAiLCJlc2NhcGVfaWZfbmVlZGVkIiwiaW5kZXhfcmVjIiwibGltIiwidG9saXN0IiwicmVzJDAiLCJyZXMkMSIsImxpc3RfbGVuZ3RoIiwiZmlsbCIsImxleF9yZWZpbGwiLCJyZWFkX2Z1biIsImF1eF9idWZmZXIiLCJuZXdsZW4iLCJuZXdidWYiLCJvcHQiLCJzdGgiLCJ3aXRoX3Bvc2l0aW9ucyIsImhlaWdodCIsImNyZWF0ZSIsImhsIiwiaCQwIiwiaHIiLCJiYWwiLCJsciIsImx2IiwibGwiLCJscnIiLCJscnYiLCJscmwiLCJyciIsInJ2IiwicmwiLCJybHIiLCJybHYiLCJybGwiLCJzaW5nbGV0b24iLCJhZGRfbWluX2VsZW1lbnQiLCJhZGRfbWF4X2VsZW1lbnQiLCJqb2luIiwicmgiLCJsaCIsIm1pbl9lbHQiLCJyZW1vdmVfbWluX2VsdCIsInIkMCIsIm1lcmdlIiwiY29uY2F0Iiwic3BsaXQiLCJwcmVzIiwicHJlcyQwIiwiZW1wdHkiLCJpc19lbXB0eSIsIm1lbSIsInJlbW92ZSIsInVuaW9uIiwidjIiLCJ2MSIsInIyJDAiLCJyMSQwIiwiaW50ZXIiLCJkaWZmIiwiY29uc19lbnVtIiwiZSQxIiwiY29tcGFyZV9hdXgiLCJlMSIsImUyIiwiZTEkMCIsImUyJDAiLCJlMiQxIiwiZTEkMSIsImUyJDIiLCJlMSQyIiwiZXF1YWwiLCJzdWJzZXQiLCJzMSQwIiwiczIkMCIsImZvbGQiLCJjYXJkaW5hbCIsImVsZW1lbnRzX2F1eCIsImVsZW1lbnRzIiwiZmluZF9sYXN0X29wdF9hdXgiLCJ2MCQwIiwiZmluZF9sYXN0X29wdCIsIm9mX3NvcnRlZF9saXN0Iiwic3ViIiwibCQzIiwieDAiLCJsJDQiLCJ4MCQwIiwibCQ1IiwieDAkMSIsIm5sIiwibGVmdCIsIm1pZCIsImwkMiIsInJpZ2h0Iiwib2ZfbGlzdCIsIng0IiwiY2xlYXIiLCJwdXNoIiwicG9wX29wdCIsInRvcF9vcHQiLCJpdGVyJDAiLCJjcmVhdGUkMCIsImNsZWFyJDAiLCJjZWxsIiwibWF0Y2giLCJwZWVrX29wdCIsInRha2UiLCJuZXh0IiwidGFrZV9vcHQiLCJsZW5ndGgkMCIsIml0ZXIkMSIsImNlbGwkMCIsIml0ZXIkMiIsImZyb20iLCJjcmVhdGUkMSIsIm4kMCIsIm4kMSIsInN1YiQyIiwibGVuZ3RoJDEiLCJyZXNldCIsInJlc2l6ZSIsIm1vcmUiLCJvbGRfcG9zIiwib2xkX2xlbiIsIm5ld19sZW4iLCJuZXdfYnVmZmVyIiwiYWRkX2NoYXIiLCJhZGRfc3Vic3RyaW5nIiwibmV3X3Bvc2l0aW9uIiwiYWRkX3N0cmluZyIsImRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIiwiYnVmZmVyX2NyZWF0ZSIsImluaXRfc2l6ZSIsImJ1ZmZlcl9jaGVja19zaXplIiwib3ZlcmhlYWQiLCJtaW5fbGVuIiwiYnVmZmVyX2FkZF9jaGFyIiwiYnVmZmVyX2FkZF9zdHJpbmciLCJzdHJfbGVuIiwiYnVmZmVyX2NvbnRlbnRzIiwiY2hhcl9vZl9mY29udiIsImNGIiwiYnByaW50X2Zjb252X2ZsYWciLCJzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQiLCJmb3JtYXR0aW5nX2xpdCIsInN0ciQwIiwiYnByaW50X2ZtdHR5IiwiZm10dHkkMSIsImZtdHR5JDIiLCJmbXR0eSQzIiwiZm10dHkkNCIsImZtdHR5JDUiLCJmbXR0eSQ2IiwiZm10dHkkNyIsImZtdHR5JDgiLCJmbXR0eSQ5Iiwic3ViX2ZtdHR5IiwiZm10dHkkMTAiLCJzdWJfZm10dHkkMCIsImZtdHR5JDExIiwiZm10dHkkMTIiLCJmbXR0eSQxMyIsImZtdHR5JDE0IiwiZm10dHkkMTUiLCJzeW1tIiwiZm10dHlfcmVsX2RldCIsImRlIiwiZWQiLCJhZiIsImZhIiwiZGUkMCIsImVkJDAiLCJhZiQwIiwiZmEkMCIsImRlJDEiLCJlZCQxIiwiYWYkMSIsImZhJDEiLCJkZSQyIiwiZWQkMiIsImFmJDIiLCJmYSQyIiwiZGUkMyIsImVkJDMiLCJhZiQzIiwiZmEkMyIsImRlJDQiLCJlZCQ0IiwiYWYkNCIsImZhJDQiLCJkZSQ1IiwiZWQkNSIsImFmJDUiLCJmYSQ1IiwiZGUkNiIsImVkJDYiLCJhZiQ2IiwiZmEkNiIsImRlJDciLCJlZCQ3IiwiYWYkNyIsImZhJDciLCJkZSQ4IiwiZWQkOCIsImFmJDgiLCJmYSQ4IiwidHJhbnMiLCJqZCIsImRqIiwiZ2EiLCJhZyIsImRlJDkiLCJlZCQ5IiwiYWYkOSIsImZhJDkiLCJkZSQxMCIsImVkJDEwIiwiYWYkMTAiLCJmYSQxMCIsImRlJDExIiwiZWQkMTEiLCJhZiQxMSIsImZhJDExIiwiZGUkMTIiLCJlZCQxMiIsImFmJDEyIiwiZmEkMTIiLCJkZSQxMyIsImVkJDEzIiwiYWYkMTMiLCJmYSQxMyIsInJlc3QxIiwicmVzdDIiLCJyZXN0MSQwIiwicmVzdDIkMCIsInJlc3QxJDEiLCJyZXN0MiQxIiwicmVzdDEkMiIsInJlc3QyJDIiLCJyZXN0MSQzIiwicmVzdDIkMyIsInJlc3QxJDQiLCJyZXN0MiQ0IiwicmVzdDEkNSIsInJlc3QyJDUiLCJyZXN0MSQ2IiwicmVzdDIkNiIsInJlc3QxJDciLCJ0eTEkMCIsInJlc3QyJDciLCJ0eTIkMCIsInJlc3QxJDgiLCJ0eTEyIiwidHkxMSIsInJlc3QyJDgiLCJ0eTIyIiwidHkyMSIsImY0IiwiZjIiLCJyZXN0MSQ5IiwicmVzdDIkOSIsInJlc3QxJDEwIiwicmVzdDIkMTAiLCJyZXN0MSQxMSIsInJlc3QyJDExIiwicmVzdDEkMTIiLCJyZXN0MiQxMiIsInJlc3QxJDEzIiwicmVzdDIkMTMiLCJ0eXBlX3BhZGRpbmciLCJwYWR0eSIsInBhZHR5JDAiLCJ0eXBlX3BhZHByZWMiLCJ0eXBlX2Zvcm1hdCIsInR5cGVfZm9ybWF0X2dlbiIsImZtdCQwIiwiZm10dHlfcmVzdCIsImZtdF9yZXN0IiwiZm10dHlfcmVzdCQwIiwiZm10X3Jlc3QkMCIsImZtdCQxIiwiZm10X3Jlc3QkMSIsImZtdHR5X3Jlc3QkMSIsImZtdCQyIiwiZm10X3Jlc3QkMiIsImZtdHR5X3Jlc3QkMiIsImZtdCQzIiwiZm10X3Jlc3QkMyIsImZtdHR5X3Jlc3QkMyIsImZtdCQ0IiwiZm10X3Jlc3QkNCIsImZtdHR5X3Jlc3QkNCIsImZtdCQ1IiwiZm10X3Jlc3QkNSIsImZtdHR5X3Jlc3QkNSIsInByZWMkNCIsImZtdCQ2IiwiZm10X3Jlc3QkNiIsInByZWMkNSIsInBhZCQ5IiwicGFkJDEwIiwiZm10dHlfcmVzdCQ2IiwicHJlYyQ2IiwiZm10JDciLCJmbXRfcmVzdCQ3IiwicHJlYyQ3IiwicGFkJDExIiwicGFkJDEyIiwiZm10dHlfcmVzdCQ3IiwicHJlYyQ4IiwiZm10JDgiLCJmbXRfcmVzdCQ4IiwicGFkJDEzIiwicGFkJDE0IiwiZm10dHlfcmVzdCQ4IiwiZm10JDkiLCJmbXRfcmVzdCQ5IiwiZm10JDEwIiwiZm10X3Jlc3QkMTAiLCJmbXQkMTEiLCJmbXRfcmVzdCQxMSIsImZtdCQxMiIsImZtdHR5X3Jlc3QkOSIsImZtdF9yZXN0JDEyIiwicGFkX29wdCIsImZtdCQxMyIsImZtdHR5X3Jlc3QkMTAiLCJzdWJfZm10dHkxIiwiZm10X3Jlc3QkMTMiLCJzdWJfZm10dHkkMSIsInBhZF9vcHQkMCIsImZtdCQxNCIsImZtdHR5X3Jlc3QkMTEiLCJmbXRfcmVzdCQxNCIsImZtdCQxNSIsImZtdHR5X3Jlc3QkMTIiLCJmbXRfcmVzdCQxNSIsImZtdHR5JDE2IiwiZm10JDE2IiwiZm10X3Jlc3QkMTYiLCJmbXR0eSQxNyIsImZtdCQxNyIsImZtdF9yZXN0JDE3IiwiZm9ybWF0dGluZ19nZW4iLCJ0eXBlX2Zvcm1hdHRpbmdfZ2VuIiwiZm10dHlfcmVzdCQxMyIsImZtdF9yZXN0JDE4IiwiZm10dHkkMTgiLCJmbXQkMTgiLCJmbXR0eV9yZXN0JDE0IiwiZm10X3Jlc3QkMTkiLCJmbXR0eSQxOSIsImZtdCQxOSIsImZtdHR5X3Jlc3QkMTUiLCJmbXRfcmVzdCQyMCIsImZtdHR5JDIwIiwiZm10JDIwIiwidHlwZV9pZ25vcmVkX3BhcmFtIiwiZm10MCIsImZtdHR5MCIsImZtdHR5MyIsImZtdDMiLCJmbXQxJDAiLCJmbXR0eTIkMCIsImZtdDIkMCIsImZtdHR5MyQwIiwiZm10MyQwIiwidHlwZV9pZ25vcmVkX3BhcmFtX29uZSIsInR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aSIsInN1Yl9mbXR0eV9yZXN0Iiwic3ViX2ZtdHR5X3Jlc3QkMCIsInN1Yl9mbXR0eV9yZXN0JDEiLCJzdWJfZm10dHlfcmVzdCQyIiwic3ViX2ZtdHR5X3Jlc3QkMyIsInN1Yl9mbXR0eV9yZXN0JDQiLCJzdWJfZm10dHlfcmVzdCQ1Iiwic3ViX2ZtdHR5X3Jlc3QkNiIsInN1Yl9mbXR0eV9yZXN0JDciLCJzdWJfZm10dHlfcmVzdCQ4Iiwic3ViX2ZtdHR5X3Jlc3QkOSIsInN1Yl9mbXR0eV9yZXN0JDEwIiwic3ViX2ZtdHR5X3Jlc3QkMTEiLCJzdWJfZm10dHlfcmVzdCQxMiIsInN1Yl9mbXR0eV9yZXN0JDEzIiwic3ViX2ZtdHR5X3Jlc3QkMTQiLCJzdWIyX2ZtdHR5Iiwic3ViX2ZtdHR5X3Jlc3QkMTUiLCJzdWIyX2ZtdHR5JDAiLCJzdWJfZm10dHlfcmVzdCQxNiIsInN1YjJfZm10dHkkMSIsInN1YjFfZm10dHkiLCJzdWJfZm10dHlfcmVzdCQxNyIsInN1YjJfZm10dHkkMiIsInN1YjFfZm10dHkkMCIsInN1Yl9mbXR0eV9yZXN0JDE4Iiwic3ViX2ZtdHR5X3Jlc3QkMTkiLCJzdWJfZm10dHlfcmVzdCQyMCIsInN1Yl9mbXR0eV9yZXN0JDIxIiwic3ViX2ZtdHR5X3Jlc3QkMjIiLCJzdWJfZm10dHlfcmVzdCQyMyIsInN1Yl9mbXR0eV9yZXN0JDI0Iiwic3ViX2ZtdHR5X3Jlc3QkMjUiLCJzdWJfZm10dHlfcmVzdCQyNiIsInJlY2FzdCIsImZpeF9wYWRkaW5nIiwid2lkdGgiLCJ3aWR0aCQwIiwiZml4X2ludF9wcmVjaXNpb24iLCJzdHJpbmdfdG9fY2FtbF9zdHJpbmciLCJmb3JtYXRfb2ZfaWNvbnYiLCJmb3JtYXRfb2ZfaWNvbnZMIiwiZm9ybWF0X29mX2ljb252bCIsImZvcm1hdF9vZl9pY29udm4iLCJmb3JtYXRfb2ZfZmNvbnYiLCJ0cmFuc2Zvcm1faW50X2FsdCIsImRpZ2l0cyIsInB1dCIsImNvbnZlcnRfaW50IiwiY29udmVydF9pbnQzMiIsImNvbnZlcnRfbmF0aXZlaW50IiwiY29udmVydF9pbnQ2NCIsImNvbnZlcnRfZmxvYXQiLCJoZXgiLCJhZGRfZG90X2lmX25lZWRlZCIsImlzX3ZhbGlkIiwiY2FtbF9zcGVjaWFsX3ZhbCIsImZvcm1hdF9jYW1sX2NoYXIiLCJzdHJpbmdfb2ZfZm10dHkiLCJtYWtlX3ByaW50ZiQwIiwiayQwIiwibmV3X2FjYyIsIm1ha2VfcHJpbnRmIiwibWFrZV9wYWRkaW5nIiwibWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24iLCJtYWtlX2Zsb2F0X3BhZGRpbmdfcHJlY2lzaW9uIiwiYWNjJDIiLCJhY2MkMyIsImFjYyQ0IiwiayQxIiwia2FjYyIsImskMiIsIm1ha2VfaWdub3JlZF9wYXJhbSIsIm1ha2VfY3VzdG9tJDAiLCJtYWtlX2ludmFsaWRfYXJnIiwibWFrZV9mcm9tX2ZtdHR5JDAiLCJtYWtlX2Zyb21fZm10dHkiLCJwJDAiLCJwJDEiLCJhcml0eSQwIiwibWFrZV9jdXN0b20iLCJvdXRwdXRfYWNjIiwicCQzIiwicCQ0IiwicCQ1IiwicCQyIiwic3RycHV0X2FjYyIsImZhaWx3aXRoX21lc3NhZ2UiLCJvcGVuX2JveF9vZl9zdHJpbmciLCJpbnZhbGlkX2JveCIsInBhcnNlX3NwYWNlcyIsInBhcnNlX2x3b3JkIiwiaiQwIiwiaiQxIiwicGFyc2VfaW50Iiwid3N0YXJ0Iiwid2VuZCIsImJveF9uYW1lIiwibnN0YXJ0IiwibmVuZCIsImluZGVudCIsImV4cF9lbmQiLCJib3hfdHlwZSIsImtmcHJpbnRmIiwiZnByaW50ZiIsImVwcmludGYiLCJrc3ByaW50ZiIsInNwcmludGYiLCJwcmludGVycyIsImZpZWxkIiwib3RoZXJfZmllbGRzIiwiZmllbGRzIiwidXNlX3ByaW50ZXJzIiwiY29udiIsInRvX3N0cmluZ19kZWZhdWx0IiwiY2hhciQwIiwibGluZSIsImNoYXIkMSIsImxpbmUkMCIsImZpbGUkMCIsImNoYXIkMiIsImxpbmUkMSIsImZpbGUkMSIsImNvbnN0cnVjdG9yIiwidG9fc3RyaW5nJDAiLCJjb252ZXJ0X3Jhd19iYWNrdHJhY2UiLCJidCIsImZvcm1hdF9iYWNrdHJhY2Vfc2xvdCIsInNsb3QiLCJpbmZvIiwiaXNfcmFpc2UiLCJwcmludF9leGNlcHRpb25fYmFja3RyYWNlIiwib3V0Y2hhbiIsImJhY2t0cmFjZSIsInByaW50X3Jhd19iYWNrdHJhY2UiLCJyYXdfYmFja3RyYWNlIiwicmVnaXN0ZXJfcHJpbnRlciIsImZuIiwib2xkX3ByaW50ZXJzIiwibmV3X3ByaW50ZXJzIiwiZXJyb3JzIiwiZGVmYXVsdF91bmNhdWdodF9leGNlcHRpb25faGFuIiwic3RhdHVzIiwiZW1wdHlfYmFja3RyYWNlIiwidHJ5X2dldF9yYXdfYmFja3RyYWNlIiwiaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbiIsImRlYnVnZ2VyX2luX3VzZSIsImV4biQxIiwiZXhuJDAiLCJyYXdfYmFja3RyYWNlJDAiLCJoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJDAiLCJuZXdfc3RhdGUiLCJhc3NpZ24iLCJzdDEiLCJzdDIiLCJmdWxsX2luaXQiLCJjb21iaW5lIiwiZXh0cmFjdCIsInNlZWQkMCIsIm1ha2UkMiIsIm1ha2Vfc2VsZl9pbml0IiwiY29weSQwIiwiYml0cyIsImN1cnZhbCIsIm5ld3ZhbCIsIm5ld3ZhbDMwIiwib25nb2luZ190cmF2ZXJzYWwiLCJwYXJhbXMiLCJyYW5kb21pemVkX2RlZmF1bHQiLCJwcm5nIiwicG93ZXJfMl9hYm92ZSIsIngkMCIsIngkMSIsImluaXRpYWxfc2l6ZSIsInJhbmRvbSIsImluc2VydF9hbGxfYnVja2V0cyIsImluZGV4ZnVuIiwiaW5wbGFjZSIsIm9kYXRhIiwibmRhdGEiLCJuc2l6ZSIsIm5kYXRhX3RhaWwiLCJpbnNlcnRfYnVja2V0IiwiY2VsbCQxIiwibmlkeCIsInJlc2l6ZSQwIiwib3NpemUiLCJrZXlfaW5kZXgiLCJyZW1vdmVfYnVja2V0IiwiZmluZF9yZWMiLCJkMSIsIm5leHQxIiwiZDIiLCJuZXh0MiIsImszIiwiZDMiLCJuZXh0MyIsImZpbmRfaW5fYnVja2V0IiwibWVtX2luX2J1Y2tldCIsInplcm8iLCJ1bmtub3duIiwiaXNfa25vd24iLCJwcF9lbnF1ZXVlIiwidG9rZW4iLCJwcF9jbGVhcl9xdWV1ZSIsInBwX2luZmluaXR5IiwicHBfb3V0cHV0X3N0cmluZyIsInBwX291dHB1dF9uZXdsaW5lIiwicHBfb3V0cHV0X3NwYWNlcyIsInBwX291dHB1dF9pbmRlbnQiLCJmb3JtYXRfcHBfdGV4dCIsInRleHQiLCJmb3JtYXRfc3RyaW5nIiwiYnJlYWtfbmV3X2xpbmUiLCJhZnRlciIsImJlZm9yZSIsInJlYWxfaW5kZW50IiwiYnJlYWtfbGluZSIsImJyZWFrX3NhbWVfbGluZSIsInBwX2ZvcmNlX2JyZWFrX2xpbmUiLCJwcF9za2lwX3Rva2VuIiwiZm9ybWF0X3BwX3Rva2VuIiwidGFicyIsImFkZF90YWIiLCJscyIsInRhZ19uYW1lIiwibWFya2VyIiwiYnJlYWtzIiwiZml0cyIsIm9mZiIsIm9mZiQwIiwiaW5zZXJ0aW9uX3BvaW50IiwidGFicyQwIiwiZmlyc3QiLCJ0YWlsIiwiaGVhZCIsInRhYiIsIm9mZiQxIiwiaW5zZXJ0aW9uX3BvaW50JDAiLCJ3aWR0aCQxIiwiYm94X3R5cGUkMCIsInRib3giLCJ0YWdfbmFtZSQwIiwibWFya2VyJDAiLCJhZHZhbmNlX2xlZnQiLCJwZW5kaW5nX2NvdW50Iiwic2l6ZSQwIiwiZW5xdWV1ZV9hZHZhbmNlIiwidG9rIiwiZW5xdWV1ZV9zdHJpbmdfYXMiLCJlbnF1ZXVlX3N0cmluZyIsImluaXRpYWxpemVfc2Nhbl9zdGFjayIsInF1ZXVlX2VsZW0iLCJzZXRfc2l6ZSIsImxlZnRfdG90YWwiLCJzY2FuX3B1c2giLCJlbGVtIiwicHBfb3Blbl9ib3hfZ2VuIiwiYnJfdHkiLCJwcF9vcGVuX3N5c19ib3giLCJwcF9jbG9zZV9ib3giLCJwcF9vcGVuX3N0YWciLCJwcF9jbG9zZV9zdGFnIiwicHBfY2xvc2VfdGFnIiwicHBfcmluaXQiLCJjbGVhcl90YWdfc3RhY2siLCJwcF9mbHVzaF9xdWV1ZSIsInBwX3ByaW50X2FzX3NpemUiLCJwcF9wcmludF9hcyIsImlzaXplIiwicHBfcHJpbnRfc3RyaW5nIiwicHBfcHJpbnRfYm9vbCIsInBwX3ByaW50X2NoYXIiLCJwcF9wcmludF9uZXdsaW5lIiwicHBfcHJpbnRfZmx1c2giLCJwcF9mb3JjZV9uZXdsaW5lIiwicHBfcHJpbnRfY3VzdG9tX2JyZWFrIiwicHBfcHJpbnRfYnJlYWsiLCJwcF9wcmludF9jdXQiLCJkaXNwbGF5X25ld2xpbmUiLCJibGFua19saW5lIiwiZGlzcGxheV9ibGFua3MiLCJkZWZhdWx0X3BwX21hcmtfb3Blbl90YWciLCJkZWZhdWx0X3BwX21hcmtfY2xvc2VfdGFnIiwiZGVmYXVsdF9wcF9wcmludF9vcGVuX3RhZyIsImRlZmF1bHRfcHBfcHJpbnRfY2xvc2VfdGFnIiwicHBfbWFrZV9mb3JtYXR0ZXIiLCJwcF9xdWV1ZSIsInN5c190b2siLCJzY2FuX3N0YWNrIiwicHBfbWFyZ2luIiwibWFrZV9mb3JtYXR0ZXIiLCJvdXRwdXQiLCJmbHVzaCIsInBwZiIsImZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCIsImZvcm1hdHRlcl9vZl9idWZmZXIiLCJwcF9idWZmZXJfc2l6ZSIsInBwX21ha2VfYnVmZmVyIiwic3RkYnVmIiwic3RkX2Zvcm1hdHRlciIsImVycl9mb3JtYXR0ZXIiLCJmbHVzaF9idWZmZXJfZm9ybWF0dGVyIiwicHBfcHJpbnRfbGlzdCIsInBwX3YiLCJvcHQkMCIsInBwX3NlcCIsIm9wdCQxIiwiY29tcHV0ZV90YWciLCJ0YWdfYWNjIiwib3V0cHV0X2Zvcm1hdHRpbmdfbGl0Iiwib3V0cHV0X2FjYyQwIiwiYnR5IiwiZiQwIiwicCQ2IiwicCQ3Iiwia2ZwcmludGYkMCIsImZwcmludGYkMCIsImthc3ByaW50ZiIsImFzcHJpbnRmIiwiZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVycyIsInJlZ2lzdGVyX2V4Y2VwdGlvbiIsInZhbHVlJDAiLCJjb250ZW50X3JlY3QiLCJ0YXJnZXQkMCIsInN0cmluZ19vZl9ib3giLCJvYnNlcnZlIiwiYm94IiwiYm94JDAiLCJjcmVhdGUkNyIsImNhbGxiYWNrIiwiY2FsbGJhY2skMCIsImVudHJpZXMiLCJvYnNlcnZlciIsImVudHJpZXMkMCIsIm9mX25hdmlnYXRvciIsImltZ190b19qdiIsImltZyIsInRvX2p2IiwiYXJ0d29yayIsInNldF9tZXRhZGF0YSIsIm1ldGFkYXRhIiwibmV4dF90cmFjayIsInByZXZpb3VzX3RyYWNrIiwic2V0X2FjdGlvbl9oYW5kbGVyIiwiYWN0aW9uIiwic2V0X3Bvc2l0aW9uX3N0YXRlIiwiZHVyYXRpb24iLCJwbGF5YmFja19yYXRlIiwicG9zaXRpb24iLCJtYXliZV9mbG9hdCIsImR1cmF0aW9uJDAiLCJwbGF5YmFja19yYXRlJDAiLCJwb3NpdGlvbiQwIiwic3RhdGVfZGljdCIsInRvX2p2JDAiLCJrZXlzIiwib2xkX3ZlcnNpb24iLCJuZXdfdmVyc2lvbiIsInVwZ3JhZGVfbmVlZGVkIiwib2ZfanYiLCJvbl9zdWNjZXNzIiwiZXYiLCJjcmVhdGVfaW5kZXgiLCJJIiwia2V5X3BhdGgiLCJjcmVhdGVfb2JqZWN0X3N0b3JlIiwiUyIsImF1dG9faW5jcmVtZW50Iiwib3B0cyIsIm9wdHMkMCIsIm9wdGlvbnMiLCJvbl91cGdyYWRlX25lZWRlZCIsInJlcSIsIm9wZW4iLCJ2ZXJzaW9uIiwiZ2V0X2ZhY3RvcnkiLCJnbG9iYWwkMCIsInN1Ym1pdCIsInBhdHRlcm4iLCJwZXJzaXN0IiwibWFuYWdlciIsImFueSIsInJldHVybiQxIiwicHVyZSIsImlzX3B1cmUiLCJkdW1teSIsIm9wZXJhdG9yIiwiZGVzYyIsImZ1bmMiLCJ2eCIsIm1hcDIiLCJ2eSIsImNoaWxkIiwiYmluZCQxIiwiYWRkX2lkeCIsInBhcmFtIiwicmVtX2lkeF9yZWMiLCJzZWxmIiwicmVtX2lkeCIsInRyYWNlX2lkeCIsInRyYWNlX2lkeCQwIiwiaWR4JDAiLCJtb3ZfaWR4X3JlYyIsIm9sZGlkeCIsIm5ld2lkeCIsIm1vdl9pZHgiLCJnZXRfaWR4X3JlYyIsImdldF9pZHgiLCJpbnZhbGlkYXRlX25vZGUkMCIsInNlbnNpdGl2aXR5Iiwibm9kZSIsInNlbnNpdGl2aXR5JDAiLCJpbnZhbGlkYXRlX3RyYWNlIiwiaW52YWxpZGF0ZV9ub2RlIiwieiIsInkkMCIsInokMCIsInkkMSIsIngkMiIsImFjdGl2ZSIsImRlZmF1bHRfdW5zYWZlX211dGF0aW9uX2xvZ2dlciIsImNhbGxzdGFjayIsImRvX2ludmFsaWRhdGUiLCJ1bnNhZmUiLCJ2YXIkMCIsImdldCQzIiwicGVlayIsInVwZGF0ZSIsInByaW0iLCJhY3F1aXJlIiwicmVsZWFzZSIsImdldF9wcmltIiwiaW52YWxpZGF0ZSIsInN1Yl9yZWxlYXNlIiwiZmFpbHVyZXMkMCIsIm9yaWdpbiQxIiwib3JpZ2luJDAiLCJ0cmFjZSIsInRyYWNlJDAiLCJ4JDQiLCJ4JDUiLCJ4JDYiLCJyZXZpZHgiLCJzZWxmJDAiLCJzZWxmJDEiLCJzZWxmJDIiLCJzZWxmJDMiLCJpbnRlcm1lZGlhdGUiLCJmYWlsdXJlcyQ0IiwiY2hpbGQkMCIsIngkMyIsIndydCIsInNlbGYkNCIsInN1Yl9hY3F1aXJlIiwidHJhY2UkMSIsImVudHJpZXMkMSIsImRvYyIsImFjdGl2YXRlX3RyYWNpbmciLCJ0biIsInN1Yl9pc19kYW1hZ2VkIiwic3ViX3NhbXBsZSIsImYkMSIsInJlc3VsdCQwIiwib2JzZXJ2ZSQwIiwib25faW52YWxpZGF0ZSIsInJhd19mbHVzaF9yZWxlYXNlX3F1ZXVlIiwicGFyYW0kMCIsImZhaWx1cmVzJDEiLCJmbHVzaF9yZWxlYXNlX3F1ZXVlIiwicXVldWUkMCIsInNhbXBsZSIsInNldF9vbl9pbnZhbGlkYXRlIiwiZmx1c2hfb3JfZmFpbCIsIm1haW5fZXhuIiwiZmFpbHVyZXMiLCJxdWlja19zYW1wbGUiLCJtYXBfcmVkdWNlIiwiaW5qIiwiaXRlbXMiLCJwbHVzIiwiY29uc19tb25vaWQiLCJ4cyIsInhzJDAiLCJ2JDAiLCJ4cyQxIiwidiQxIiwidiQyIiwiY29uc19tb25vaWQkMCIsIm5vdF9vcmlnaW4iLCJtYWtlJDMiLCJzZXRfcGFyZW50IiwibWFrZV9ub2RlIiwic2V0IiwiYmluZGluZyIsInJhd19pbnZhbGlkYXRlIiwiYXBwZW5kIiwiZ2V0JDQiLCJpbnZhbGlkYXRlX2JpbmRpbmciLCJzZXRfYmluZGluZyIsImNsZWFyJDIiLCJyb290JDAiLCJzbWFsbGVyX2VsbCIsInNtaW4iLCJzbWF4IiwiZGlzYmFsYW5jZWQiLCJyZXBhcmVudCIsIm9sZGNoaWxkIiwibmV3Y2hpbGQiLCJyb3RfbGVmdCQwIiwic24iLCJybiIsInJsJDAiLCJiYWxhbmNlIiwiYmFsYW5jZSQwIiwicm90X2xlZnQiLCJyb3RfcmlnaHQkMCIsImxuIiwibHIkMCIsInJvdF9yaWdodCIsImluY19sZWZ0IiwiaW5jX3JpZ2h0Iiwic2wiLCJzciIsImNvbXB1dGVfc3ViX3NpemUiLCJyZXNldF92ZXJzaW9uIiwicmViYWxhbmNlIiwidmVyc2lvbiQwIiwiZXh0cmFjdF9iaW5kaW5ncyIsInRyZWUiLCJybm9kZSIsImZ1bGxfcmVidWlsZCIsInJlZCIsImJpbmRpbmdzIiwiYmluZGluZ3MkMCIsInJlZHVjdGlvbiIsImJpbmRpbmckMCIsInJlZHVjdGlvbiQwIiwiYWdncmVnYXRlIiwiYWdncmVnYXRlJDAiLCJleHRyYWN0X2ZyaW5nZSIsImluY3JlbWVudGFsX3JlYnVpbGQiLCJmcmluZ2UiLCJmcmluZ2UkMCIsImZyaW5nZSQxIiwiZXZhbCQwIiwib3BhcXVlIiwibWFwX3JlZHVjZSQwIiwibWFwcGVyIiwibW9ub2lkIiwic291cmNlIiwicHJpbSQwIiwiZW1wdHkkMCIsImVsZW1lbnQiLCJtYXhpIiwicmFuayIsImNvbmNhdCQxIiwibWFza19vbGQiLCJtYXNrX25ldyIsIm1hc2tfYm90aCIsImlzX3NoYXJlZCIsImlzX25vdF9zaGFyZWQiLCJpc19ib3RoIiwiaXNfb2xkIiwiaXNfbmV3Iiwic2V0X2JvdGgiLCJnZXRfaW5kZXgiLCJ3aXRoX2luZGV4X25ldyIsInVubWFyayIsIm1hcmtlZCIsInNoYXJlZCIsImJsb2NrZWQiLCJta19zdGF0cyIsIm5ld19tYXJrZWQiLCJzdGF0cyIsIm5ld19zaGFyZWQiLCJuZXdfYmxvY2tlZCIsImJsb2NrIiwibWFzayIsIm1hcmsiLCJtYXJrJDAiLCJlbnF1ZXVlIiwiZGVxdWV1ZSIsInRyYXZlcnNlMSIsInRyYXZlcnNlIiwic29sZCIsInNuZXciLCJxb2xkIiwicW5ldyIsIm9sZF9zdGF0cyIsInRyIiwibmV3X3N0YXRzIiwidW5zYWZlX3RyYXZlcnNlIiwib2xkX3Jvb3QiLCJuZXdfcm9vdCIsIm9sZF9xdWV1ZSIsIm5ld19xdWV1ZSIsInJlc3RvcmUiLCJuZXh0X3NoYXJlZF9pbmRleCIsInN0IiwidW5ibG9jayIsInQkMCIsInVubWFya19vbGQiLCJpbmRleCQwIiwiZHJvcHBlZF9sZWFmIiwiYSQwIiwiYiQwIiwiaW5kZXgkMSIsImluZGV4JDIiLCJkcm9wcGVkX2pvaW4iLCJwcmVwYXJlX3NoYXJlZCIsInVubWFya19uZXciLCJub19kcm9wcGVkIiwiZ2V0X2Ryb3BwZWQiLCJ4b2xkIiwidG5ldyIsInRyYXZlcnNhbCIsIm5iX2Ryb3BwZWQiLCJuYl9zaGFyZWQiLCJuYl9kcm9wcGVkJDAiLCJ4bGVhZiIsInhqb2luIiwiZXZhbCQxIiwib3RoZXIiLCJtYWtlJDQiLCJyZWR1Y2UiLCJ1cGRhdGUkMCIsIm5ld190cmVlIiwib2xkX3RyZWUiLCJ1cGRhdGVfYW5kX2dldF9kcm9wcGVkIiwiZHJvcHBlZCIsImZvbGRfZHJvcHBlZCIsImJvdW5kIiwiYm91bmQkMCIsInB1cmVfbWFwX3JlZHVjZSIsImZvbGRfbW9ub2lkIiwic2VxIiwicmVkdWNlJDAiLCJyZWR1Y2VyIiwicmVkdWNlciQwIiwidHJhbnNmb3JtX2xpc3QiLCJvZl9saXN0JDEiLCJ0b19saXN0JDEiLCJsd2RfZW1wdHkiLCJsd2RfbW9ub2lkIiwibWFwJDUiLCJmaWx0ZXJfbWFwJDAiLCJzZWxlY3QiLCJiaW5kJDIiLCJsaWZ0IiwidHlwZSIsImlzX3B1cmVfZWxlbWVudCIsImV4dHJhY3RfcHVyZV9lbGVtZW50IiwiZXh0cmFjdF9wdXJlX2VsZW1lbnRzIiwicHJlcGFyZV9jb2wiLCJjb2wiLCJpbXB1cmUiLCJjb25zdW1lX2NoaWxkcmVuIiwiY2hpbGRfbm9kZSIsImNoaWxkX2pvaW4iLCJqdl9hcHBlbmQiLCJqdl9iZWZvcmUiLCJqdl9yZW1vdmUiLCJqdl9jb250YWlucyIsImNvbnRhaW5zX2ZvY3VzIiwiZWwiLCJ1cGRhdGVfY2hpbGRyZW4iLCJjaGlsZHJlbiIsInNjaGVkdWxlX2Zvcl9yZW1vdmFsIiwicHJlc2VydmVfZm9jdXMiLCJzaGlmdF9zaWJsaW5ncyIsInNpYmxpbmciLCJyZW1vdmVfY2hpbGQiLCJwdXJlX3VuaXQiLCJkdW1teV9rdl9hdCIsImF0dGFjaF9hdHRyaWJzIiwiYXR0cmlicyIsInNldF9rdiIsInVuc2V0X2t2Iiwic2V0X2x3ZF9hdCIsInByZXYiLCJhdCIsInBhaXIiLCJhdHMiLCJzZXRfYXQiLCJrdiIsImxpc3RlbiQwIiwiYXR0YWNoX2V2ZW50cyIsImV2ZW50cyIsImNhY2hlZCIsInYkNCIsInN0aCQwIiwiaW1wdXJlX2F0IiwiYXQkMCIsImltcHVyZV9ldiIsImV2JDAiLCJpbXB1cmVfY2hpbGRyZW4iLCJjaGlsZHJlbiQwIiwiY2hpbGRyZW4kMSIsImNoaWxkcmVuJDIiLCJjb25zJDEiLCJjcyIsInZvaWRfY29ucyIsImJ1dHRvbiQwIiwiZGl2JDEiLCJmb3JtJDAiLCJpbWckMCIsImlucHV0JDEiLCJsYWJlbCQwIiwic3BhbiQxIiwiaXRlbV90b19zdHJpbmciLCJpc19uYW4iLCJvZl9zdHJpbmdfb3B0IiwiZXF1YWwkMCIsImNvbXBhcmUkMSIsImtlZXAiLCJzeW1ib2wkMTAiLCJtYXBfb3IiLCJmbGF0X21hcCIsInN5bWJvbF9iaW5kJDAiLCJ2YWx1ZSQzIiwidG9fbGlzdCQyIiwic3ltYm9sJDExIiwic3ltYm9sJDEyIiwiZ2V0X2V4biIsImdldF9vciIsImZsYXRfbWFwJDAiLCJzeW1ib2wkMTMiLCJzeW1ib2xfYmluZCQxIiwic3VmIiwiY2hlY2siLCJsZXhfZXJyb3IiLCJlcnJvcl9wb3MiLCJjbnVtIiwiZW51bSQwIiwic3RyaW5nMm51bSIsInVwZGF0ZV9wb3MiLCJpbnRfb2ZfaGV4Y2hhciIsInV0Zjhfb2ZfY29kZSIsInUiLCJtYXhfdXNlZF9iaXRzIiwidXRmOF9vZl9zdXJyb2dhdGVfcGFpciIsImhpZ2giLCJsb3ciLCJoaWdoJDAiLCJsb3ckMCIsImVzY2FwaW5nX2Vycm9yIiwib2ZmcyIsInVuZXNjYXBlX3N0cmluZyIsInUxIiwidTIiLCJyZWFkJDAiLCJvY2FtbF9sZXhfcmVhZF9yZWMiLCJvY2FtbF9sZXhfc3RhdGUiLCJvY2FtbF9sZXhfc3RhdGUkMCIsIm9jYW1sX2xleF9zdGF0ZSQxIiwicmVhZF9jb21tZW50IiwicmVhZF9jb21tZW50JDAiLCJvY2FtbF9sZXhfcmVhZF9jb21tZW50X3JlYyIsImNyZWF0ZV9mcm9tX2xleGJ1ZiIsImVtc2ciLCJlY2hhciIsInNjaGFyIiwiZWxpbmUiLCJsb2cyIiwiYml0cyQwIiwibWF4X2pzb25faW50Iiwic3RyaW5nX29mX2Zsb2F0X2pzb24iLCJpc19pbnQiLCJpbnRfdmFsdWUiLCJ0b2tlbl9lcnJvciIsInMkMSIsInMkMiIsImpzb25fdmFsdWUiLCJ0b2tlbl92YWx1ZSIsIm9iamVjdF92YWx1ZV9zdGFydCIsImFycmF5X3ZhbHVlX3N0YXJ0IiwidmFyaWFudF92YWx1ZV9zdGFydCIsInR1cGxlX3ZhbHVlX3N0YXJ0IiwiYXJyYXlfdmFsdWVzX3N0YXJ0IiwidG9rJDAiLCJhcnJheV92YWx1ZXMiLCJvYmplY3RfdmFsdWVzX3N0YXJ0IiwiY29sb25fdmFsdWUiLCJvYmplY3RfdmFsdWVzIiwia2V5X2NvbG9uX3ZhbHVlIiwidHVwbGVfdmFsdWVzIiwidmFyaWFudF9lbmQiLCJkZWNvZGUiLCJlcnIkMCIsIm5pYmJsZV90b19oZXgiLCJhZGRfaGV4X2J5dGUiLCJlc2NhcGUiLCJ0b19qc29uX3N0cmluZyIsImFkZF9jaGFyJDAiLCJhZGRfc3RyaW5nJDAiLCJhZGRfcXVvdGVfc3RyaW5nIiwicHBfbGlzdCIsInBweCIsIm91dCIsImZvcm1hdCIsImpzb24iLCJmb3JtYXRfZmllbGQiLCJqc29uJDAiLCJzJDMiLCJwcmV0dHlfcHJpbnQiLCJwcmV0dHlfcHJpbnRfdG9fc3RyaW5nIiwicHJldHR5X3ByaW50X3RvX2NoYW5uZWwiLCJlcnJvciQxIiwidG9fYXNzb2MiLCJudWxsJDEiLCJ0b2tlbl90b19zdHJpbmciLCJyZWFkX2pzb24iLCJyZWFkX2pzb25fZXJyb3JfaW5mbyIsImVycl9pbmZvIiwianNvbl9vZl9zdHJpbmdfZXJyb3JfaW5mbyIsImpzb25fb2ZfY2hhbm5lbF9lcnJvcl9pbmZvIiwiaW5jIiwianNvbl9vZl9maWxlX2Vycm9yX2luZm8iLCJmaWxlbmFtZSIsImpzb25fb2ZfbGV4YnVmX2Vycm9yX2luZm9fY29tcCIsInN0cmVhbSIsInJlYWRfanNvbl9zdHJlYW1fZXJyb3JfaW5mbyIsImZpbiIsInN0cmVhbV9mcm9tX3N0cmluZ19lcnJvcl9pbmZvIiwic3RyZWFtX2Zyb21fY2hhbm5lbF9lcnJvcl9pbmZvIiwic3RyZWFtX2Zyb21fZmlsZV9lcnJvcl9pbmZvIiwic3RyZWFtX2Zyb21fbGV4YnVmX2Vycm9yX2luZm8iLCJqc29uX3RvX2NoYW5uZWxfZm10IiwiZW9sIiwiaW5jciIsInBzZXAiLCJhZGRfaW50IiwiYWRkX2Zsb2F0IiwicHNlcCQwIiwibGRyJDEiLCJqc29uX2xpc3QiLCJsZHIkMiIsImxkciIsImpzb25fYXNzb2MiLCJsZHIkMCIsIm5ld3NlcCIsImpzb25fdG9fY2hhbm5lbCIsImpzb25fdG9fZmlsZV9leG4iLCJqc29uX3RvX2J1ZmZlciIsImpzb25fdG9fc3RyaW5nIiwianNvbl9lcnJvciIsImVycm9yX3RvX3N0cmluZyIsImVycm9yX2luZm8iLCJmbmFtZSIsImxudW0iLCJsbnVtJDAiLCJsbnVtJDEiLCJmbmFtZSQwIiwibG9jIiwiYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMiLCJmcm9tX3N0cmluZyIsInRvX3N0YW5kYXJkIiwidHBsIiwiam9wdCIsInN0ZCIsImxleF9zdHJpbmciLCJsZXhfbnVtYmVyIiwibGV4X2ludGVnZXIiLCJsZXhfbGFyZ2VpbnQiLCJsZXhfdmFyaWFudCIsImxleF90dXBsZSIsImNvbW1lbnRfY2hlY2siLCJudW1iZXJfdG9fc3RyaW5nIiwibGFyZ2VpbnQiLCJpbnRlZ2VyIiwibnVsbCQyIiwic3RyaW5nJDAiLCJib29sIiwiYXNzb2MiLCJsaXN0IiwidHVwbGUiLCJudW1iZXIiLCJhcnJheV9zdGFydCIsImFycmF5X2VuZCIsIm9iamVjdF9zdGFydCIsIm9iamVjdF9lbmQiLCJ0dXBsZV9zdGFydCIsInR1cGxlX2VuZCIsInZhcmlhbnRfc3RhcnQiLCJuYW1lJDAiLCJsZXhfc3RyaW5nJDAiLCJsZXhfbnVtYmVyJDAiLCJsZXhfaW50ZWdlciQwIiwibGV4X2xhcmdlaW50JDAiLCJsZXhfdmFyaWFudCQwIiwibGV4X3R1cGxlJDAiLCJjb21tZW50X2NoZWNrJDAiLCJudW1iZXJfdG9fc3RyaW5nJDAiLCJsYXJnZWludCQwIiwiaW50ZWdlciQwIiwibnVsbCQzIiwic3RyaW5nJDEiLCJib29sJDAiLCJhc3NvYyQwIiwibGlzdCQwIiwidHVwbGUkMCIsInZhcmlhbnQkMCIsIm51bWJlciQwIiwiYXJyYXlfc3RhcnQkMCIsImFycmF5X2VuZCQwIiwib2JqZWN0X3N0YXJ0JDAiLCJvYmplY3RfZW5kJDAiLCJ0dXBsZV9zdGFydCQwIiwidHVwbGVfZW5kJDAiLCJ2YXJpYW50X3N0YXJ0JDAiLCJ2YXJpYW50X2VuZCQwIiwibmFtZSQxIiwiZnJvbV9zdHJpbmckMCIsInRvX3N0cmluZyQ0IiwibGV4X3N0cmluZyQxIiwibGV4X251bWJlciQxIiwibGV4X2ludGVnZXIkMSIsImxleF9sYXJnZWludCQxIiwibGV4X3ZhcmlhbnQkMSIsImxleF90dXBsZSQxIiwiY29tbWVudF9jaGVjayQxIiwibnVtYmVyX3RvX3N0cmluZyQxIiwibGFyZ2VpbnQkMSIsImludGVnZXIkMSIsIm51bGwkNCIsInN0cmluZyQyIiwiYm9vbCQxIiwiYXNzb2MkMSIsImxpc3QkMSIsInR1cGxlJDEiLCJ2YXJpYW50JDEiLCJudW1iZXIkMSIsImFycmF5X3N0YXJ0JDEiLCJhcnJheV9lbmQkMSIsIm9iamVjdF9zdGFydCQxIiwib2JqZWN0X2VuZCQxIiwidHVwbGVfc3RhcnQkMSIsInR1cGxlX2VuZCQxIiwidmFyaWFudF9zdGFydCQxIiwidmFyaWFudF9lbmQkMSIsIm5hbWUkMiIsInRvX2pzdHIkMSIsIm9mX2pzdHIkMSIsImpzdHIiLCJvZl9qdiQwIiwianYiLCJyYW5kb21fc3RhdGUiLCJuZXdfdXVpZF92NCIsInRlZSIsInRvX2F0IiwiZW1wdHkkMiIsInRvX2F0JDAiLCJpZCQwIiwiY2xhc3NlcyIsInVuaW9uJDAiLCJhdHRycyIsImFkZCQxIiwiYXRfbmFtZSIsImFkZF9ib29sIiwiYWRkX29wdCIsIm9mX3N0cmluZyQwIiwidG9fc3RyaW5nJDYiLCJ0b19weCIsImdldF9mb250X3NpemVfaW5fcHgiLCJmb250X3NpemUiLCJmb250X3NpemUkMCIsInYkNSIsImNzc19zaXplIiwidG9faGVhZGVyIiwiY2VsbHMiLCJzdHlsZSQxIiwidGVtcGxhdGUiLCJzdHlsZSQyIiwiaGVhZGVyIiwicm93X2hlaWdodCIsInVuaXEiLCJhZGQkMCIsIm5ld19lbHQiLCJ0YWtlJDAiLCJtYWtlJDUiLCJ1aV90YWJsZSIsInJvd19zaXplIiwiaGVpZ2h0X24iLCJoZWlnaHQkMCIsInRhYmxlIiwicm93X2luZGV4IiwidW5sb2FkX3F1ZXVlIiwiZmV0Y2giLCJpbmRleGVzIiwibWF4X2l0ZW1zIiwidW5sb2FkIiwicm93Iiwicm93X2RhdGEiLCJsb2FkIiwiZGF0YSQwIiwiY2xlYW51cCIsInFfbGVuZ3RoIiwiZm9yJDAiLCJ0b19sb2FkIiwidGFibGVfaGVpZ2h0IiwiY29tcHV0ZV92aXNpYmxlX3Jvd3MiLCJsYXN0X3Njcm9sbF95IiwiZGl2IiwiZWx0Iiwic2Nyb2xsX3kkMCIsImRpcmVjdGlvbiIsInZpc2libGVfaGVpZ2h0IiwiaGVhZGVyX2hlaWdodCIsIm51bWJlcl9vZl92aXNpYmxlX3Jvd3MiLCJzY3JvbGxfeSQxIiwiZmlyc3RfdmlzaWJsZV9yb3ciLCJsYXN0X3Zpc2libGVfcm93IiwiYmxlZWRpbmciLCJibGVlZGluZyQwIiwibGFzdCIsInByZXBhcmUiLCJyZW5kZXIiLCJwb3B1bGF0ZV9vbl9zY3JvbGwiLCJ0b3RhbF9pdGVtcyIsInZpc2libGVfcm93cyIsInRvdGFsX2l0ZW1zJDAiLCJzY3JvbGxfaGFuZGxlciIsImxhc3RfdXBkYXRlIiwidGltZW91dCIsInJlc2V0X3RpY2tlciIsImRlYm91bmNpbmdfaW50ZXJ2YWwiLCJyZXBvcHVsYXRlX2RlcHMiLCJtYWtlX3NwYWNlciIsInJvd3MiLCJzcGFjZXIiLCJ0YWJsZV9ib2R5IiwiZmlyc3Rfc3BhY2VyIiwibGFzdF9zcGFjZXIiLCJ0YWJsZV9oZWFkZXIiLCJyZWN0IiwiZ3JpZF9zdHlsZSIsImNvbnRhaW5lciIsIm1ha2UkNiIsIkMiLCJsYW5nIiwiY2hlY2tfa2V5IiwibG9jYWxfc3RvcmFnZSIsInN0b3JlIiwiZmV0Y2gkMCIsImVuY29kZWRfdmFsdWUiLCJpbml0aWFsX3ZhbHVlIiwibWFrZV9wZXJzaXN0ZW50X3ZhciIsInZhciQxIiwibmV3X3ZhbHVlIiwidmFyX2YiLCJrZXkkMCIsIm1ha2VfaGFuZGxlciIsInZhbHVlX2NoYW5nZV9ldmVudCIsImRlZmF1bHRfdmFsdWUiLCJvbl9jaGFuZ2UiLCJtYWtlX2lucHV0IiwidmFsaWRhdGUiLCJwYXR0ZXJuJDAiLCJyZXF1aXJlZCIsInR5cGUkMSIsImF0JDEiLCJ2YWxpZGF0ZSQwIiwidGV4dF9pbnB1dCIsInBsYWNlaG9sZGVyJDAiLCJwYXNzd29yZF9pbnB1dCIsInN1Ym1pdCQwIiwiZmllbGQkMCIsInNldHRlciIsImNyZWF0ZSQ4IiwiRm9ybSIsIm9uX3N1Ym1pdCIsImVsdHMiLCJlbHRzJDAiLCJoYW5kbGVyJDAiLCJvbl9zdWJtaXQkMCIsIm5hbWUkMyIsImJhc2VfbmFtZSIsIm1ha2UkNyIsIm5hbWUkNCIsIm1ha2UkOCIsIm1ha2VfY2hlY2siLCJsYWJlbCIsImNoZWNrZWQiLCJsYmwiLCJjaGVja2VkJDEiLCJtYWtlX2FsbCIsImFsbCIsInYkNiIsImFwcGx5X3N0YXRlIiwid2l0aF9zdGF0ZSIsInZfc3RhdGUiLCJnZXRfc3RhdGUiLCJzZXRfc3RhdGUiLCJmdW5jJDAiLCJoJDEiLCJ0d29fc3RhdGUiLCJ5b2pzb25fb2Zfc3RyaW5nIiwieW9qc29uX29mX2ludCIsInlvanNvbl9vZl9vcHRpb24iLCJ5b2pzb25fb2ZfYSIsInlvanNvbl9vZl9saXN0IiwibHN0IiwicmVjb3JkX2NoZWNrX2V4dHJhX2ZpZWxkcyIsIm9mX3lvanNvbl9lcnJvciIsIndoYXQiLCJ5b2pzb24iLCJzdHJpbmdfb2ZfeW9qc29uIiwiaW50X29mX3lvanNvbiIsIm9wdGlvbl9vZl95b2pzb24iLCJhX29mX3lvanNvbiIsImxpc3Rfb2ZfeW9qc29uIiwicmV2X2xzdCIsInN0YWdfbm9fYXJncyIsIm5lc3RlZF9saXN0X2ludmFsaWRfc3VtIiwiZW1wdHlfbGlzdF9pbnZhbGlkX3N1bSIsInVuZXhwZWN0ZWRfc3RhZyIsInJlY29yZF9zdXBlcmZsdW91c19maWVsZHMiLCJyZXZfZmxkX25hbWVzIiwiZmxkX25hbWVzX3N0ciIsInJlY29yZF9kdXBsaWNhdGVfZmllbGRzIiwicmVjb3JkX2V4dHJhX2ZpZWxkcyIsInJlY29yZF9nZXRfdW5kZWZpbmVkX2xvb3AiLCJmaWVsZHMkMCIsInJlY29yZF91bmRlZmluZWRfZWxlbWVudHMiLCJ1bmRlZmluZWQkMCIsInJlY29yZF9saXN0X2luc3RlYWRfYXRvbSIsInN5bWJvbCQxNCIsImpzdHJfb2ZfbWV0aG9kIiwidXNlcl9vZl95b2pzb24iLCJmaWVsZF95b2pzb25zIiwibmFtZV9maWVsZCIsInNlcnZlcl9pZF9maWVsZCIsInNlcnZlcl9uYW1lX2ZpZWxkIiwiaWRfZmllbGQiLCJkdXBsaWNhdGVzIiwiZXh0cmEiLCJmaWVsZF95b2pzb24iLCJmaWVsZF9uYW1lIiwiZnZhbHVlIiwiZnZhbHVlJDAiLCJmdmFsdWUkMSIsImZ2YWx1ZSQyIiwic2VydmVyX25hbWVfdmFsdWUiLCJpZF92YWx1ZSIsInNlcnZlcl9pZF92YWx1ZSIsIm5hbWVfdmFsdWUiLCJ5b2pzb25fb2ZfdXNlciIsInZfaWQiLCJ2X3NlcnZlcl9uYW1lIiwidl9zZXJ2ZXJfaWQiLCJ2X25hbWUiLCJibmRzIiwiYXJnJDAiLCJibmRzJDAiLCJhcmckMSIsImJuZHMkMSIsImFyZyQyIiwiYm5kcyQyIiwicGFyYW1zX29mX3lvanNvbiIsInVzZXJuYW1lX2ZpZWxkIiwicHdfZmllbGQiLCJwd192YWx1ZSIsInVzZXJuYW1lX3ZhbHVlIiwieW9qc29uX29mX3BhcmFtcyIsInZfcHciLCJ2X3VzZXJuYW1lIiwicmVzcG9uc2Vfb2ZfeW9qc29uIiwidXNlcl9maWVsZCIsImFjY2Vzc190b2tlbl9maWVsZCIsImFjY2Vzc190b2tlbl92YWx1ZSIsInVzZXJfdmFsdWUiLCJ5b2pzb25fb2ZfcmVzcG9uc2UiLCJ2X2FjY2Vzc190b2tlbiIsInZfdXNlciIsImVuZHBvaW50IiwiaW1hZ2VfYmx1cl9oYXNoX29mX3lvanNvbiIsInlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2giLCJpbWFnZV9ibHVyX2hhc2hlc19vZl95b2pzb24iLCJwcmltYXJ5X2ZpZWxkIiwicHJpbWFyeV92YWx1ZSIsInlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2hlcyIsInZfcHJpbWFyeSIsImJuZCIsInR5cGVfb2ZfeW9qc29uIiwieW9qc29uX29mX3R5cGUiLCJ0eXBlX3N0cl9vZl95b2pzb24iLCJ5b2pzb25fb2ZfdHlwZV9zdHIiLCJ0cyIsInRfb2ZfeW9qc29uIiwic29ydF9uYW1lX2ZpZWxkIiwicGF0aF9maWVsZCIsImFsYnVtX2lkX2ZpZWxkIiwicGFyZW50X2lkX2ZpZWxkIiwiaW1hZ2VfYmx1cl9oYXNoZXNfZmllbGQiLCJ0eXBlX2ZpZWxkIiwiY29sbGVjdGlvbl90eXBlX2ZpZWxkIiwiZnZhbHVlJDMiLCJmdmFsdWUkNCIsImZ2YWx1ZSQ1IiwiZnZhbHVlJDYiLCJmdmFsdWUkNyIsImZ2YWx1ZSQ4Iiwic29ydF9uYW1lX3ZhbHVlIiwicGF0aF92YWx1ZSIsImFsYnVtX2lkX3ZhbHVlIiwicGFyZW50X2lkX3ZhbHVlIiwiY29sbGVjdGlvbl90eXBlX3ZhbHVlIiwidHlwZV92YWx1ZSIsImltYWdlX2JsdXJfaGFzaGVzX3ZhbHVlIiwieW9qc29uX29mX3QiLCJ2X2NvbGxlY3Rpb25fdHlwZSIsInZfdHlwZSIsInZfaW1hZ2VfYmx1cl9oYXNoZXMiLCJ2X3BhcmVudF9pZCIsInZfYWxidW1faWQiLCJ2X3BhdGgiLCJ2X3NvcnRfbmFtZSIsImFyZyQ4IiwiYm5kJDMiLCJibmRzJDMiLCJibmRzJDQiLCJhcmckMyIsImJuZCQwIiwiYm5kcyQ1IiwiYXJnJDQiLCJibmQkMSIsImJuZHMkNiIsImFyZyQ1IiwiYm5kcyQ3IiwiYXJnJDYiLCJibmQkMiIsImJuZHMkOCIsImFyZyQ3IiwiYm5kcyQ5IiwidmlydHVhbF9mb2xkZXJfb2ZfeW9qc29uIiwibG9jYXRpb25zX2ZpZWxkIiwiaXRlbV9pZF9maWVsZCIsIml0ZW1faWRfdmFsdWUiLCJsb2NhdGlvbnNfdmFsdWUiLCJ5b2pzb25fb2ZfdmlydHVhbF9mb2xkZXIiLCJ2X2l0ZW1faWQiLCJ2X2xvY2F0aW9ucyIsImF1dGhvcml6YXRpb24iLCJ0b2tlbiQwIiwicmVxdWVzdCQxIiwiYmFzZV91cmwiLCJoZWFkZXJzIiwiUSIsInBhdGhfcGFyYW1zIiwidXJpIiwiYXV0aG9yaXphdGlvbiQwIiwiaGVhZGVycyQwIiwibWV0aG9kIiwiYm9keSIsInBhcmFtcyQwIiwidXJpX3dpdGhfcGFyYW1zIiwidXJsJDEiLCJpbml0JDEiLCJjb25uZWN0IiwiY3JlZGVudGlhbHMiLCJwYXNzd29yZCIsInVzZXJuYW1lIiwiYXV0aCIsImF1dGhfcmVzcG9uc2UiLCJ0YWdfb2YiLCJmdXR1cmVzIiwibGlzdGVuZXJzIiwid29ya2VyIiwicXVlcnkiLCJ1dWlkIiwiZnV0Iiwic2V0JDAiLCJxdWVyeSQwIiwib25fbWVzc2FnZSIsIm1lc3NhZ2UiLCJpdGVtX2NvdW50Iiwic3JjX3ZpZXdzIiwic3RoJDEiLCJmaWx0ZXJzIiwidF90b19qdiIsImVuY29kZXIiLCJqdl90b190IiwiZGVjb2RlciIsInRfb2ZfeW9qc29uJDAiLCJpdGVtX2ZpZWxkIiwiaXRlbV92YWx1ZSIsInlvanNvbl9vZl90JDAiLCJ2X2l0ZW0iLCJ0b19qdiQxIiwib2ZfanYkMSIsInRvX2p2JDIiLCJvZl9qdiQyIiwiZ2V0X2tleSIsInNvcnRzX29mX3lvanNvbiIsImRhdGVfYWRkZWRfZmllbGQiLCJ2aWV3c19maWVsZCIsInZpZXdzX3ZhbHVlIiwiZGF0ZV9hZGRlZF92YWx1ZSIsInlvanNvbl9vZl9zb3J0cyIsInZfdmlld3MiLCJ2X2RhdGVfYWRkZWQiLCJ0X29mX3lvanNvbiQxIiwic29ydHNfZmllbGQiLCJzb3J0c192YWx1ZSIsInlvanNvbl9vZl90JDEiLCJ2X3NvcnRzIiwiY29tcGFyZSQyIiwidG9fanYkMyIsInZpZXdzIiwic29ydF9uYW1lIiwic29ydF9uYW1lJDAiLCJ2aWV3cyQwIiwib2ZfanYkMyIsInBhdGgkMCIsInRvX2p2JDQiLCJvZl9qdiQ0IiwidG9fanYkNSIsIm9mX2p2JDUiLCJ0b19qdiQ2Iiwib2ZfanYkNiIsInBhdGgkMyIsInRvX2p2JDciLCJvZl9qdiQ3IiwiY29sbGVjdGlvbl90eXBlIiwicGF0aCQ0IiwidG9fanYkOCIsIm9mX2p2JDgiLCJnZXRfa2V5JDAiLCJ0b19qdiQ5Iiwib2ZfanYkOSIsInRvX2p2JDEwIiwib2ZfanYkMTAiLCJnZXRfa2V5JDEiLCJvbl91cGdyYWRlX25lZWRlZCQwIiwibmV3X3ZlcnNpb24kMCIsIm9sZF92ZXJzaW9uJDAiLCJkYiIsInZpcnR1YWxfZm9sZGVycyIsImluZGV4X2RhdGVfYWRkZWQiLCJ3aXRoX2lkYiIsImRiciIsImdldCQ2Iiwic3RyaW5nIiwic2V0JDEiLCJjb25uZXhpb25zIiwiY29ubmVjdCQwIiwicmVmcmVzaCIsImNvbm5leGlvbiIsInNlcnZlcl9pZCIsInJlcG9ydCIsInByZXZpb3VzX3N0YXR1cyIsInJlbWFpbmluZyIsInJlbWFpbmluZyQwIiwic2VydmVyc193aXRoX3N0YXR1cyIsInNlcnZlciIsIm5ld19jb25uZXhpb24iLCJzZXJ2ZXJzIiwidXJsX2ZpZWxkIiwicGFzc3dvcmRfZmllbGQiLCJzdWJtaXQkMSIsInVpX2Zvcm0iLCJ1cmwiLCJ1aV9zdGF0dXMiLCJzeW5jX3Byb2dyZXNzIiwiZnV0X3RvX2x3ZCIsInNlcnZlcnNfbGlicmFyaWVzIiwidWkiLCJzdGF0dXNlcyIsInVpX2Zvcm0kMCIsIm5vd19wbGF5aW5nIiwiYXVkaW9fdXJsIiwiaXRlbV9pZCIsInNldF9wbGF5X3VybCIsInBsYXlsaXN0IiwiY3VycmVudF9pbmRleCIsInBsYXlsaXN0JDAiLCJpdGVtIiwiYWxidW1faWQiLCJzZXNzaW9uIiwiaW1hZ2VfaWQiLCJpbWdfc3JjIiwicmVzZXRfcGxheWxpc3QiLCJtYWtlIiwiYXVkaW9fZWx0Iiwic2V0X3NyYyIsIm5leHRfaW5kZXgiLCJzZXRfcG9zaXRpb25fc3RhdGUkMCIsIm9uX2Vycm9yIiwibmV4dCQwIiwiYnRuX25leHQiLCJzdHlsZSQwIiwibnAiLCJ0cmFja19jb3ZlciIsInRyYWNrX2RldGFpbHMiLCJub3dfcGxheWluZyQwIiwibWFrZSQ5Iiwib25fY2xpY2siLCJvbl9jbGljayQwIiwiY29sdW1ucyIsIm1ha2UkMTAiLCJpbWdfdXJsIiwic3RhcnRfaW5kZXgiLCJpbWFnZV9ibHVyX2hhc2hlcyIsInBsYXlfZnJvbSIsInBsYXlfb25fY2xpY2siLCJpbWdfdXJsJDAiLCJwbGFjZWhvbGRlciIsImRhdGFfc291cmNlIiwicmVuZGVyJDAiLCJmZXRjaCQxIiwiYXBwIiwiaWRiIiwicGwiLCJwbGF5ZXIiLCJwbGF5ZXJfdWkiLCJmX3NlYXJjaCIsImNob2ljZXMiLCJmX2xpYnJhcmllcyIsImZfdmFsdWUiLCJtYWluX3ZpZXciLCJtYWluX2xpc3QiLCJpc19zdG9yYWdlX3BlcnNpc3RlbnQiLCJvbl9sb2FkIiwiYXBwJDAiXSwic291cmNlcyI6WyIvYnVpbHRpbi8rYXJyYXkuanMiLCIvYnVpbHRpbi8rbWxCeXRlcy5qcyIsIi9idWlsdGluLytzeXMuanMiLCIvYnVpbHRpbi8rYmFja3RyYWNlLmpzIiwiL2J1aWx0aW4vK3N0ZGxpYi5qcyIsIi9idWlsdGluLytqc2xpYi5qcyIsIi9idWlsdGluLytmYWlsLmpzIiwiL2J1aWx0aW4vK2llZWVfNzU0LmpzIiwiL2J1aWx0aW4vK29iai5qcyIsIi9idWlsdGluLytpbnQ2NC5qcyIsIi9idWlsdGluLytiaWdhcnJheS5qcyIsIi9idWlsdGluLytpbnRzLmpzIiwiL2J1aWx0aW4vK2hhc2guanMiLCIvYnVpbHRpbi8rbWFyc2hhbC5qcyIsIi9idWlsdGluLytjb21wYXJlLmpzIiwiL2J1aWx0aW4vK2Zvcm1hdC5qcyIsIi9idWlsdGluLytmc19ub2RlLmpzIiwiL2J1aWx0aW4vK2ZzLmpzIiwiL2J1aWx0aW4vK3VuaXguanMiLCIvYnVpbHRpbi8rZnNfZmFrZS5qcyIsIi9idWlsdGluLytsZXhpbmcuanMiLCIvYnVpbHRpbi8rbWQ1LmpzIiwiL2J1aWx0aW4vK2lvLmpzIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvbGV4aW5nLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcHJpbnRleGMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvY29tcGxpYW50X2xleHhlci5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGF0YV9zb3VyY2UvamVsbHlmaW5fYXBpLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYi9zdG9yZXMubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RiL3N5bmMubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL2xhbmcubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL3dvcmtlcl9jbGllbnQubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL3NlcnZlcnMubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL3BsYXllci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbEF0b21pYy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0ZGxpYi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NJbnQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9yYW5kb20ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9saXN0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvb2JqLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FtbGludGVybmFsTGF6eS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL29wdGlvbi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3Jlc3VsdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NDaGFyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2hhci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2ludC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2J5dGVzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc3RyaW5nLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvYXJyYXkubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zZXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdGFjay5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3F1ZXVlLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc3RyZWFtLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvYnVmZmVyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FtbGludGVybmFsRm9ybWF0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcHJpbnRmLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvcHB4X3lvanNvbl9jb252X2xpYi95b2pzb25fY29udl9lcnJvci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2Z1bi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2RpZ2VzdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2hhc2h0YmwubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9mb3JtYXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jYWxsYmFjay5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzX29mX29jYW1sLWNvbXBpbGVyL3J1bnRpbWUvanNvb19ydW50aW1lLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL2Zvcm1zL2ZpZWxkLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJlci9kb21fcmVjdF9yZWFkX29ubHkubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2JycmVyL3Jlc2l6ZV9vYnNlcnZlci5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyZXIvbWVkaWFfc2Vzc2lvbi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyZXIvaW5kZXhlZF9kYi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyZXIvYnJyZXIubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2x3ZC9saWIvbHdkL2x3ZC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvbHdkL2xpYi9sd2QvbHdkX3V0aWxzLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9sd2QvbGliL2x3ZC9sd2RfdGFibGUubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2x3ZC9saWIvbHdkL2x3ZF9zZXEucHAubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2x3ZC9saWIvYnJyLWx3ZC9lbHdkLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0FycmF5Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0Zsb2F0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0hhc2h0YmwubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDTGlzdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NPcHRpb24ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDUmFuZG9tLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1Jlc3VsdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NTZXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDU3RyaW5nLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L2xleHhlcl91dGlscy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9lcnJvcl9pbmZvLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L2pzb25fZmxvYXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvcGFyc2VyX3Rvb2xzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3BhcnNlci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC91dGlscy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9wcmV0dHkubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvcHJvY2Vzcy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC90b2tlbl91dGlscy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9yZWFkZXJfc3RyaW5nX2ZpbGUubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvd3JpdGVyX2ZpbGUubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvd3JpdGVyX3N0cmluZy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC95b2pzb24ubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N0ZC9zdGQubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvYXR0cnMubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvdXRpbHMubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvdGFibGUvc2NoZW1hLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL3RhYmxlL3ZpcnR1YWxfdGFibGUubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvdHJhbnNsYXRlZC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyX2x3ZF91aS9wZXJzaXN0ZW50Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL2Zvcm1zL2Zvcm0ubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvZm9ybXMvZmllbGRfdGV4dGlucHV0Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL2Zvcm1zL2ZpZWxkX2NoZWNrYm94ZXMubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvYnV0dG9uLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvcHB4X3lvanNvbl9jb252X2xpYi95b2pzb25fY29udi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL3BweF95b2pzb25fY29udl9saWIvcHB4X3lvanNvbl9jb252X2xpYi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGF0YV9zb3VyY2UvamVsbHlmaW4ubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3dvcmtlcl9hcGkvd29ya2VyX2FwaS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvdmlldy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvZGJfd29ya2VyX2FwaS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvZGIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzLWRhdGEvQ0NNdWx0aU1hcC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vaW1wb3J0Lm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi91aS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vdWlfcGxheWxpc3QubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL21haW4ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdGRfZXhpdC5tbCJdLCJtYXBwaW5ncyI6Ijs7QSxDOztHOzs7UTtTOzs7RztJO0k7STtHO0U7Ozs7R0FxREEsU0FBU0EsZ0JBQWdCQyxJQUFJQyxJQUFJQyxJQUFJQyxJQUFJQztJQUN2QyxHQUFJRCxNQUFNRjtLQUFJLElBQ0QsSUFBRkksT0FBT0EsS0FBS0QsS0FBS0MsS0FBS0gsR0FBR0MsS0FBS0UsS0FBS0wsR0FBR0MsS0FBS0k7O0tBQy9DLElBQ00sSUFBRkEsSUFBSUQsS0FBS0MsUUFBUUEsS0FBS0gsR0FBR0MsS0FBS0UsS0FBS0wsR0FBR0MsS0FBS0k7SUFFdEQ7R0FDRjtHQTRCQSxTQUFTQyxnQkFBZ0JDLE9BQU9DLEtBQUtKLEtBQUtLO0lBQ3hDLElBQVUsSUFBRkMsT0FBT0EsSUFBSU4sS0FBS00sS0FDdEJILE1BQU1DLE1BQUlFLFNBQU9EO0lBRW5CO0dBQ0Y7R0F6RUEsU0FBU0UsZUFBZ0JDLEdBQUdGLEdBQUdOO0lBQ3RCLElBQUhGLFNBQVNXLE1BQU1UO0lBQ25CRjtJQUNBLFFBQVFDLFFBQVFGLEtBQUlTLE9BQUtQLE1BQU1DLEtBQUtELE1BQUtGLE1BQ3ZDQyxHQUFHQyxNQUFJUyxFQUFFWDtJQUVYLE9BQU9DO0dBQ1Q7R0M2Q0EsU0FBU1kseUJBQTBCRixHQUFHRixHQUFHTjtJQUNqQyxJQUFGVyxJQUFJQztJQUNSLEdBQUlOLFVBQVVOLGVBQWVBLE9BQU9RLFVBQVUsT0FBT0csUUFBU0UsTUFBTUw7SUFDOUQsSUFBRk07SUFDSixVQUFXZCxLQUFLTSxXQUFVTjtLQUN4QmMsS0FBS0gsUUFBU0UsTUFBTUwsUUFBUUYsR0FBRUEsSUFBSVMsU0FBU2Y7SUFDN0MsT0FBT2M7R0FDVDtHQXFYQSxTQUFT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OUJvMEMsV0FBU3Z1QyxHQUFFaXRDO1FBQWE5bUM7SUFDMUIsT05nS01zNEI7c0JNL0pDcGUsS0F2RUQ2dEIsYUFxRU9qQixLQUVONXNCLHdCQUZJcmdCLEdBQUVpdEMsS0FFMEI7O2FBRmI5bUM7O1lBV3hCcW9DLFVBQVF2Qjt3QjtJQUFNLHNCLE9BWGRzQixpQkFXUXRCO0dBQXlCO1lBc0JqQ3dCLFVBQVV6dUM7SUFDSixJQURlbUcsZ0JBQ25CNUwsSUF0WEY4eUMsbUJBdVhFSixNQS9YRkUsb0JBOFhFNXlDO2FBRUFna0MsSUFBRWxlO0tBekdBNnRCLGFBd0dGakIsS0FDRTVzQjtLQUVGLE9BQUEsV0FMUXJnQixHQXJXVnl0Qyx1QkFzV0VsekMsR0FDQTB5QztJQUc4QjtJQUNsQyxPTjBITXhPLFlNN0hGRixRQUhtQnA0Qjs7WUFTckJ1b0MsU0FBU3ZvQyxLQUFNLE9BVGZzb0MsVUFwMUNBMzZCLElBNjFDUzNOLEtBQXNCO1lBSS9Cd29DO0lBcnRCQTlDLGVBMFZBMEI7SUE0WEYsT0F0dEJFMUIsZUEyVkEyQjtHQTRYNkI7R3pCaDFCekJ0M0IsUXlCODBCSnk0QjtZQ2gyQ0FDLG1CQUFtQjlyQyxNQUNqQnBHO0lBQUosSUFDSWltQyxPQUFVLGFBRFZqbUMsZUFBQUEsTUFBQUE7SUFFSiwwQkFIcUJvRyxNQUVqQjYvQjtJQUNKO0dBQThCO0dDZ0k5QjtHRG5JRWlNO0dDdUlxQixlLFU7Rzt3QixxQjs7STtJLE87RztHOztJO0ksTztHOzBCLGlDOzhCO0c7RyxJLGU7dUIsNEI7NEIsaUM7O0k7STtHO3lCLHNCOztJLDRCO0c7O0ksWTs7SSxPOztHOztJLFk7O0k7STs7Rzt3QixNLE87eUIsYyxPOztJLFk7O0k7O3dCLFk7MkIsVSxPOztJLFk7O0k7OzhCO3dCLDhCO3dCLHFCOztJLHdCLG9CLG9COzs7O00sUTtNOzs7OztJO0c7O0k7SSw2QixPLHVCO0c7Ozs7O29COztNLFU7Ozs7STtHOztJO0ksVzs7STtJO0c7O0k7SSxPLHlCLFU7RztHOzs7SyxPOzZCLE8sTyxlLE8sTztJO0ksbUI7Rzt1QixPLG1COztJLE87STtHO3lCLE8sTyxzQzs7SSxPO2E7YTtHOztJLE87RztZQ3ZGbkJDLGM7dUI7bUIsZ0I7eUIsa0I7O0k7SyxNO0k7SSx1QiwrQztJO0kscUMsOEI7STtvQix1RDtJO0c7MEIsZ0M7d0IsdUI7O0k7OzsyQixpQixtQjtHOztJLDZCLGdCLG1CO0c7a0Isd0I7O3FCLG1CLG9CO0ksb0IsbUIsdUI7STtHOztJLHFDO0c7eUIsb0I7O0ksc0I7O2MsZTs7YyxPO2E7Rzs7SSw0QixPckIvQ0ZydkI7RztHO3NCLHFCOzhCLDBCOzBDLDhCO0c7K0Isb0IsUzs7STtJLFU7O0s7SztJO0k7STtHOytCLE8sd0I7RztJO0k7STtJO0k7STtJO0k7RztHO0c7RztHO3NCLE8sa0I7O0ksSSxROzs7OztLOztJO0c7RztHO0c7RztHOztJLFc7O0k7RztHO3VCLE8sYTtzQixrQjs7STtJO0k7Rzt5QixPLGE7O0ksSTs7Ozs7Szs7STtHO3NCLGlCO0c7c0IscUI7d0IsaUM7MEI7RztJO0k7STtJO0k7STtJO0k7STtJO0k7STtJO3VCLHVCO3FCLHFCO29CLG9CO0c7cUIsbUI7dUIscUI7c0Isb0I7dUIsdUI7dUIsdUI7Rzt3QiwwQjtHLCtCO3VCLGtCLFM7Ozs7OztPLDZCSm1DQVc7Tzs7TTs7O0s7OztNLEk7OzRCOzs7VTs7OztJO0k7SSxRO0k7SSxvQjtJO0c7O0k7SSxPO0c7O0k7STtHOztJLGtCOzBCLHdCO0k7STtHOzJCLGdDOztJLDBDO0c7dUIsb0IsTyx1Qjs7SSxZLCtCO0c7O0k7SSxJLFEsdUI7STtHO3dCLHNCO0c7STtJO0k7STtJO0k7STtJO0k7b0MsNEI7RyxtQztHLGlDO0csZ0M7RyxrQztvQiw4Qjs7STtJOzs7OztHOztJLGdDO0c7a0Msa0MsUztHOztJOzs7b0I7O007TSxJOzs7SSxPO0c7cUIsZ0Q7eUIsZ0Q7c0IsZ0Q7c0IsZ0Q7eUIsUztzQixPLFE7RztHO0k7STtJO0c7O0ksTyxrQjtHOzRCLDBCLE87O0ksNkI7STtHO0c7Rzs0Qjs7SSxtQyxlO0c7Rzs7STtJLFM7STs7SztLOztJLG9C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LE1BQUYvdEQsZUFBbUI7SUFFbEMsR0FGQ2d1RCxpQkFMbUJEO0tBR25CdDlCLFNBSFduaUIsS3hDekJib1csV3dDeUJxQnFwQztZQUtuQkMsa0JBTG1CRDtLQUduQnQ5QixTQUhXbmlCLEt4Q3pCYm9XLGtCd0N5QnFCcXBDO0tBR25CdDlCLFNBSFduaUIsS3hDekJib1csaUJ3Q3lCcUJxcEM7O1lBS25CQyxrQkFMbUJEO0tBR25CdDlCLFNBSFduaUIsS3hDekJib1csa0J3Q3lCcUJxcEM7S0FHbkJ0OUIsU0FIV25pQixLeEN6QmJvVyxrQndDeUJxQnFwQztLQUduQnQ5QixTQUhXbmlCLEt4Q3pCYm9XLGlCd0N5QnFCcXBDOztZQUtuQkMsa0JBTG1CRDtLQUduQnQ5QixTQUhXbmlCLEt4Q3pCYm9XLGtCd0N5QnFCcXBDO0tBR25CdDlCLFNBSFduaUIsS3hDekJib1csa0J3Q3lCcUJxcEM7S0FHbkJ0OUIsU0FIV25pQixLeEN6QmJvVyxrQndDeUJxQnFwQztLQUduQnQ5QixTQUhXbmlCLEt4Q3pCYm9XLGlCd0N5QnFCcXBDOztZQUtuQkMsa0JBTG1CRDtLQUduQnQ5QixTQUhXbmlCLEt4Q3pCYm9XLGtCd0N5QnFCcXBDO0tBR25CdDlCLFNBSFduaUIsS3hDekJib1csa0J3Q3lCcUJxcEM7S0FHbkJ0OUIsU0FIV25pQixLeEN6QmJvVyxrQndDeUJxQnFwQztLQUduQnQ5QixTQUhXbmlCLEt4Q3pCYm9XLGtCd0N5QnFCcXBDO0tBR25CdDlCLFNBSFduaUIsS3hDekJib1csaUJ3Q3lCcUJxcEM7OztLQUduQnQ5QixTQUhXbmlCLEt4Q3pCYm9XLGtCd0N5QnFCcXBDO0tBR25CdDlCLFNBSFduaUIsS3hDekJib1csa0J3Q3lCcUJxcEM7S0FHbkJ0OUIsU0FIV25pQixLeEN6QmJvVyxrQndDeUJxQnFwQztLQUduQnQ5QixTQUhXbmlCLEt4Q3pCYm9XLGtCd0N5QnFCcXBDO0tBR25CdDlCLFNBSFduaUIsS3hDekJib1csa0J3Q3lCcUJxcEM7S0FHbkJ0OUIsU0FIV25pQixLeEN6QmJvVyxpQndDeUJxQnFwQzs7V0FDbkJudkQ7R0FzQ0Y7WUFFQXF2RCx1QkFBdUIzL0MsS0FBSXNFLEtBQUlzN0MsTUFBS0M7SUFDdEM7S0FBSUMsU0FENkJGO0tBRTdCRyxRQUZrQ0Y7S0FHbEM3Z0QsZ0JBRkE4Z0QsZUFDQUM7SUFFRixPQTdDQVAsYUF5Q3VCeC9DLEtBQUlzRSxLQUd6QnRGO0dBQ3VCO1lBRXpCZ2hELGVBQWVwc0QsS0FBSTlDLEdBQUVrQixHQUFFMnRDO0lBQ2QsSUFBUHNnQixPL0NrRUYxc0MsYytDbkV1Qm9zQjtJQUV6QixHQUZ1QjN0QztTQUlkK21CLE1BSmMvbUIsTUFFbkJtckQsbUNBRUtwa0M7O1NBRkxva0M7SUFLUSxPQXJGVjhCOztlQThFZXJyRCx5QkFDYnFzRCxhQUNBOUMsaUJBRmlCcnNEO0dBT21DO1lBRXREb3ZELGdCQUFnQnB2RDtJQUNsQjtLQUFJSywwQkFEY0w7S0FFZHVsQixNQUFLLGtCQURMbGxCO0tBRUFsQjtLQUNBa3dEO0tBQ0FDO0tBQ0FyNUM7S0FFSixPQVBJNVY7S0FLUTs7U0FFWmI7O2lCQUZJeVc7Ozs7OztVQXVDRyxXQUFBLGdCQTdDV2pXLEdBUWxCUjtXQUZJeVc7O1dBZkZpNUMscUJBU2dCbHZELE9BOEN3RCxnQkE5Q3hEQSxHQVFsQlIsS0FBQUE7O1VBR2EsSUFFSjBCLElBRkksZ0JBWEtsQixHQVFsQlI7b0JBS1MwQjtXQVBMK1U7cUNBSkFzUCxLQUNBcG1CLE1BVUsrQixJQVZML0IsT0FBQUE7OztTQUdBOFc7U0FnRHNCLFdBdEh4Qnc0QyxlQXNId0MsZ0JBdER4Qnp1RCxHQVFsQlI7U0FISTh2RCxRQUFBQTtxQkFBQUEsa0JBQUFBO1VBRkFud0QsT0FsQkYwdkQsdUJBaUJFdHBDLEtBQ0FwbUIsTUFDQWt3RCxPQUNBQzs7O1NBZEZKLHFCQVNnQmx2RCxNQVFsQlI7OztTQTJDb0MsV0FuSGxDaXZELGVBbUhrRCxnQkFuRGxDenVELEdBUWxCUjtTQUhJOHZELFFBQUFBO1NBQ0FyNUM7OztRQTRDZ0MsV0FsSGxDdzRDLGVBa0hrRCxnQkFsRGxDenVELEdBUWxCUjtRQUhJOHZELFFBQUFBO1FBQ0FyNUM7OztRQURBcTVDLFFBckVGYixlQWlIaUMsZ0JBakRqQnp1RCxHQVFsQlI7UUFGSXlXOzs7OztTQWtDRyxVQUFBLGdCQXhDV2pXLEdBUWxCUjtVQUZJeVc7O1VBZkZpNUMscUJBU2dCbHZELE9BeUNxRCxnQkF6Q3JEQSxHQVFsQlIsS0FBQUE7O1NBd0IwQixXQWhHeEJpdkQsZUFnR3dDLGdCQWhDeEJ6dUQsR0FRbEJSO1NBSkk2dkQsUUFBQUE7cUJBQUFBLGtCQUFBQSxPQUVBcDVDO1NBSEE5VyxPQTNERnV2RCxhQTBERW5wQyxLQUNBcG1CLE1BQ0Frd0Q7U0FFQXA1Qzs7O1FBd0JnQyxXQTlGbEN3NEMsZUE4RmtELGdCQTlCbEN6dUQsR0FRbEJSO1FBSkk2dkQsUUFBQUE7UUFFQXA1Qzs7O1FBdUJnQyxXQTdGbEN3NEMsZUE2RmtELGdCQTdCbEN6dUQsR0FRbEJSO1FBSkk2dkQsUUFBQUE7UUFFQXA1Qzs7O09BRkFvNUMsUUFwRUZaLGVBNEZpQyxnQkE1QmpCenVELEdBUWxCUjtPQUZJeVc7OztPQVVNLFlBQUEsZ0JBaEJRalcsR0FRbEJSOzs7OEJBTkkrbEIsS0FDQXBtQjtRQUdBOFc7UUFIQTlXLE9BQUFBOzs7Ozs7OzttQ0FEQW9tQixLQUNBcG1CO2FBR0E4VzthQUhBOVcsT0FBQUE7OzttQ0FEQW9tQixLQUNBcG1CO2FBR0E4VzthQUhBOVcsT0FBQUE7OzttQ0FEQW9tQixLQUNBcG1CO2FBR0E4VzthQUhBOVcsT0FBQUE7OzttQ0FEQW9tQixLQUNBcG1CO2FBR0E4VzthQUhBOVcsT0FBQUE7OzttQ0FEQW9tQixLQUNBcG1CO2FBR0E4VzthQUhBOVcsT0FBQUE7OzttQ0FEQW9tQixLQUNBcG1CO2FBR0E4VzthQUhBOVcsT0FBQUE7OzthQUdBOFc7Ozs7Ozs7K0JBSkFzUCxLQUNBcG1CO1NBR0E4VztTQUhBOVcsT0FBQUE7OztRQVpGK3ZELHFCQVNnQmx2RCxPQTBCK0MsZ0JBMUIvQ0EsR0FRbEJSLEtBQUFBOzs7TUFBQSxXQUFBQTtrQkFBQUE7VUFBQUE7OztxQkFGSXlXLFVBZkZpNUMscUJBU2dCbHZELE1BQ2RLO1dBRUFsQixTQUZBa0IseUJBQ0FrbEIsUUFDQXBtQixTQUhjYTtHQWlFK0M7O0ksYTtJO0c7O2ExRDBHM0R1dkQsZ0JBQUtuNkM7S0FDVjtLQUFBO01BQUEsT0FBQSx1QkFDQ282Qyx3QkFGU3A2Qzs7S0FDVixPQUNDbzZDLDhCQUZTcDZDO0lBQ21CO2FBRHhCdkUsS0FBS3VFLFEsdUJBQUxtNkMsVUFBS242QzthQUVUbzZDLDRCQUFxQnA2QyxRQUFPcTZDO0tBQzlCLElBRDhCQyxvQkFBQUQ7S0FDOUI7TUFBTTtPQUR3QkUsMkJBeE81QnR6QyxrQkF3TzRCcXpDLG1CQUFQdDZDO2VBQU91NkM7Y0FBQUE7O1U7O1U7O1U7O1U7O1U7O1U7O1U7O1UsTzs7b0IwRHBRNUJ4QixxQzFEb1FxQi80Qzs7VSxPOztvQjBEcFFyQis0QyxxQzFEb1FxQi80Qzs7VSxPOztvQjBEcFFyQis0QyxxQzFEb1FxQi80Qzs7VSxPOztvQjBEcFFyQis0QyxxQzFEb1FxQi80Qzs7VTs7VTs7VSxPOztVLE87O1UsTzs7VSxPOztVLFUwRHhQckJtNUMsa0IxRHdQcUJuNUM7Ozs7YyxPOztjLE87O1U7O1UsZSw0QkFBQUE7VSxPOztVOztVQTRIdkIsbUJBNUh1QkEsUUFBQUEsbUJBQUFBO1UsVzBEN0tyQmc2Qzs7VTs7VTtXLE8sdUIxRDJLSUcsWUFFaUJuNkM7O1UsT0FGakJtNkMsa0JBRWlCbjZDOztVMERwUHJCbzVDLFcxRG9QcUJwNUM7VTtXLE8sdUJBRmpCbTZDLFlBRWlCbjZDOztVLE9BRmpCbTZDLGtCQUVpQm42Qzs7VSxZO2lEO1VBMEtyQnc2QyxhQTFLcUJ4NkM7VTtXLE8sdUJBRmpCbTZDLFlBRWlCbjZDOztVLE9BRmpCbTZDLGtCQUVpQm42Qzs7VSxjO3VEO1U7VyxPLHVCQUZqQm02QyxZQUVpQm42Qzs7VSxPQUZqQm02QyxrQkFFaUJuNkM7O1UsTzBEcFFyQis0QyxxQzFEb1FxQi80Qzs7TUF1S0EsV0F2S0FBLFdBQUFBO1VBQU9zNkMsb0JBQUFDOztJQXdLbUI7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U214QjtHQUlvQjtZQVV2QjRtQixxQkFBaUIsYUFBRztZQUNwQkMsbUJBQWUsYUFBRztZQUNsQkMsc0JBQWtCLGFBQUc7WUFDckJDLG9CQUFnQixhQUFHO1lBQ25CQyxxQkFBaUIsYUFBRztZQUNwQkMsbUJBQWUsYUFBRztZQUNsQkMsdUJBQW1CLGFBQUc7WUFDdEJDLHFCQUFpQixhQUFHO1lBQ3BCQyxPQUFLcjdELEdBQUksc0JBQUpBLEdBQVc7OztNQXBEbEIyNUQ7TUFDQUM7TUFDQUM7TUFDQUM7TUFHQUU7TUFEQUQ7TUFHQUU7TUFFQUM7TUFtQkFVO01BVEFSO01BREFEO01BRUFFO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDOztPQUVBQztPQVRBUjtPQURBRDtPQUVBRTtPQUNBQztPQUNBQztPQXFCRU07T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7OztNQXBERjFCO01BQ0FDO01BQ0FDO01BQ0FDO01BR0FFO01BREFEO01BR0FFO01BRUFDO01BbUJBVTtNQVRBUjtNQURBRDtNQUVBRTtNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQzs7T0FFQUM7T0FUQVI7T0FEQUQ7T0FFQUU7T0FDQUM7T0FDQUM7T0FxQkVNO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDOzJCLE8xRGhZSjN3QixRO0dBVEFGOztJO0ssSztLLEs7SyxLO0ssSztLLEs7SyxJOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCO0k7Rzs7SSxzQjtJLHVCLG9DO0c7O0k7STtJLHVCLDRDO0ksSSxxQixZOzs7TTs7O0ssZ0I7Szs7TTs7O0ssc0I7STs7O0ssVztLOzs7Ozs7O0ssVztLOzs7Ozs7O0ssVztLOzs7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QUFBRyxZa0ZwTEVYLFVsRm9MRlE7O2dCQUNFLElBQUErRCxXaUY3SEEzRixpQmpGNEhGOEI7Z0JBQ0VOLG9CQUFBbUU7OztzQmtGckxBdkUsVWxGK0xBbUU7ZUFYRjNELG9CQUFBRyxZa0ZwTEVYLFVsRm9MRlE7O2VBV0UsSUFBQWdFLFdBbklGckIsNEJBd0hBekM7ZUFXRXlELGlDQUFBSzs7cUJrRi9MQXhFLFVsRnVMQU87Y0FIRkMsb0JBQUFHLFlrRnBMRVgsVWxGb0xGUTs7Y0FHRSxJQUFBaUUsV2lGL0hBN0YsaUJqRjRIRjhCO2NBR0VILGtCQUFBa0U7O29Ca0Z2TEF6RSxVbEZpTUFxRTthQWJGN0Qsb0JBQUFHLFlrRnBMRVgsVWxGb0xGUTs7aUJBYUVrRSxXaUY5RUE1RixpQkEzREFGLGtCakY0SEY4QjthQWFFMkQsK0JBQUFLOzttQmtGak1BMUUsVWxGeUxBaUU7WUFMRnpELG9CQUFBRyxZa0ZwTEVYLFVsRm9MRlE7O1lBS0UsSUFBQW1FLFdpRmpJQS9GLGlCakY0SEY4QjtZQUtFdUQsd0JBQUFVOzs7O3dCQUxGeDhCOztRQWdCaUQ7S0FoQmpEMXJCLEtBQUEwakQ7UWtGcExFSCxVbEZvTEZRO01BQUEsTzhCL0lFZix3QjlCK0lGN3BELFVrRnBMRW9xRCxVbEZvTEZRLGFBQUE3QjtRa0ZwTEVxQixVbEZvTEZTO01BQUEsTzhCM0lFZixvQjlCMklGOXBELFVrRnBMRW9xRCxVbEZvTEZTLFFBQUE5QjtLQUNFO01BQUEsUWtGckxBcUIsVWxGcUxBSTtNQUNBd0Usa0JrRnRMQTVFLFVsRnNMQStEO01BQ0EsVWtGdkxBL0QsVWxGdUxBTztNQUNBc0UsYWtGeExBN0UsVWxGd0xBZ0U7TUFDQWMsaUJrRnpMQTlFLFVsRnlMQWlFO01BQ0FjLGtCa0YxTEEvRSxVbEYwTEFrRTtNQUlBLFVrRjlMQWxFLFVsRjhMQUs7TUFDQSxVa0YvTEFMLFVsRitMQW1FO01BQ0EsVWtGaE1BbkUsVWxGZ01Bb0U7TUFDQVksd0JrRmpNQWhGLFVsRmlNQXFFOzs7T0FEQVk7T0FEQUM7T0FEQWhFO09BUEFEO09BRkFFO01B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aC9CO2tCQTBOQXFDLE1pRDlSRW83QjsyQkFVMEN1QzttQkFDL0IsMkJsRmdJYnAyRCxja0ZqSTRDbzJEO2tCQUNLOztNQUM1QztJQUtIO3dCdkZrR0Y5QztLdUZsR0U7S0FIQXpzQztPN0NrVEZrakI7SzZDNVNJc3NCO0tBREZDO083QzZTRnZzQjs7OztxQjZDNVNJc3NCO0tBR0ZFLFdkZEZsVix3Qm5DZ0RBdHJCO0tpRHJCTXlnQztPOUMraEJOOXdCOztVOEM3aEJNLElBQ005bkQ7VUFDUyxPakQ0QnJCdzRDO21CaUQ3Qll4NEM7NEJBQ2NBO29CQUNkLE85QzBpQlptb0Q7NkI4QzNpQjBCbm9EO3NDQUNnQkE7OEJBRUwsOEJBRktBOzhCQUV2QixPOUN6Q25CNGlELFk4Q3VDMEM1aUQ7NkJBRThCO21CQUFDO1NBQUU7O1VqRGEzRWs0QyxTR3hEQXlLOztxQyxPSDBFQWpLO1dpRDlCaUMsc0Isa0I5Q3pCakNxSzs7U3pDb0ZBMHlCO0t1RnJFSW9ELGNiM0JKbFYsaUJwQ3FGQXA0QyxLaUR4RE1xdEQ7S0FISjFJO083QytSRi9qQjs4QjZDelNFd3NCLDBCQVdFRTtLQURPQyxVQUNQRDtLQWtCRkU7T2pEc0JGcmdDO1NpRHpDV29nQztTQVZUSDtrQkE4QnNDMzRFLEdBQUVZO1VBQ3RDO1dBQUlzdkUsVXhDcUhObmpCLG1Cd0NySGdDcHRELEdBQUssZUFBTEEsT0FBeUIsR0FEakJpQjtzQ0FBRlo7VUFFcEMsOENBRnNDWTtVQVVwQyxpQlA3Qk40MkMsZU9tQndDeDNDLFdBQ2hDa3dFO1NBVWtFO0tBR3hFOEksWUQzREZyQixjQ2ZBVSxTQTJERVU7S0FtQkU1QztPakRISjM5QjtTQTBOQXFDOztVaUR0TmlELFlBQ3pCLE83Q2tUeEIyUjtVNkMvU1UsSUFGQ3lwQixxQkFFRCxPakRuQlY5OUIsUWlEaUJXODlCO1VBRUQsT0RwRVYwQixjQ2ZBVTtTQW1GdUM7S0FOckN4QyxjakRzQkZ0cUQsS2lEckJJNHFEOzs7OztTN0N5UEpocUI7Ozs7dUI2QzFQRTBwQjtvQkFuREE2QztLQWdFRjs7Z0JBckVFenZDOzs7O1U3Q2tURmtqQjs7Ozt3QjZDL1JFK2pCLHNCQWtDQThJOztJQWdCRixPN0M2T0E3c0I7O2dDLE93Qm5TQXdQLHNCQUlBRTs7O0dxQjJEQztHQUdhLElBRGRvZCx3QmxEbERNbGhDLFFBR0ZDO1lrRG1ERmtoQztJQUNGLGtCQUxBRDtJQU15QyxzQixPTDdEekNsRjtzQks2RDZDd0U7Y0FHbkMsSUFBTlksUWpEOGZKaDhCLGFpRHRtQkFtN0IsSUFxRzZDQztjQUk3QyxTQUFJbjdCO2VBQ0Y7aUNqRGtrQkZXLGFpRHBrQklvN0IsUUFHb0IsU0FBb0I7ZUFEaEM7Y0FDZ0M7Y0FFRSxlakQrakI5Q3A3QixhaURwa0JJbzdCO2NBS0o7Y2pEcWpCQXg3QixrQmlEMWpCSXc3QixPQUNBLzdCOzthQUttQztHQUFBO0dBRXpDLDhCQWJJODdCO0duRnljRi8wRDs7RSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gQXJyYXlcblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9zdWIgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9zdWIgKGEsIGksIGxlbikge1xuICB2YXIgYTIgPSBuZXcgQXJyYXkobGVuKzEpO1xuICBhMlswXT0wO1xuICBmb3IodmFyIGkyID0gMSwgaTE9IGkrMTsgaTIgPD0gbGVuOyBpMisrLGkxKysgKXtcbiAgICBhMltpMl09YVtpMV07XG4gIH1cbiAgcmV0dXJuIGEyO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2FwcGVuZCBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X2FwcGVuZChhMSwgYTIpIHtcbiAgdmFyIGwxID0gYTEubGVuZ3RoLCBsMiA9IGEyLmxlbmd0aDtcbiAgdmFyIGwgPSBsMStsMi0xXG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBhWzBdID0gMDtcbiAgdmFyIGkgPSAxLGogPSAxO1xuICBmb3IoO2k8bDE7aSsrKSBhW2ldPWExW2ldO1xuICBmb3IoO2k8bDtpKyssaisrKSBhW2ldPWEyW2pdO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9jb25jYXQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9jb25jYXQobCkge1xuICB2YXIgYSA9IFswXTtcbiAgd2hpbGUgKGwgIT09IDApIHtcbiAgICB2YXIgYiA9IGxbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSBhLnB1c2goYltpXSk7XG4gICAgbCA9IGxbMl07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYmxpdFxuZnVuY3Rpb24gY2FtbF9hcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgaWYgKGkyIDw9IGkxKSB7XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gbGVuOyBqKyspIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGogPSBsZW47IGogPj0gMTsgai0tKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRhcnJheV9ibGl0XG5mdW5jdGlvbiBjYW1sX2Zsb2F0YXJyYXlfYmxpdChhMSwgaTEsIGEyLCBpMiwgbGVuKSB7XG4gIGlmIChpMiA8PSBpMSkge1xuICAgIGZvciAodmFyIGogPSAxOyBqIDw9IGxlbjsgaisrKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBqID0gbGVuOyBqID49IDE7IGotLSkgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH07XG4gIHJldHVybiAwO1xufVxuXG4vLy8vLy8vLy8vLy8vIFBlcnZhc2l2ZVxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9zZXQgKG11dGFibGUsIGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9hcnJheV9zZXQgKGFycmF5LCBpbmRleCwgbmV3dmFsKSB7XG4gIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgYXJyYXlbaW5kZXgrMV09bmV3dmFsOyByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9nZXQgbXV0YWJsZSAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2FycmF5X2dldCAoYXJyYXksIGluZGV4KSB7XG4gIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFycmF5W2luZGV4KzFdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2ZpbGxcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfZmlsbChhcnJheSwgb2ZzLCBsZW4sIHYpe1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspe1xuICAgIGFycmF5W29mcytpKzFdID0gdjtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jaGVja19ib3VuZCAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2NoZWNrX2JvdW5kIChhcnJheSwgaW5kZXgpIHtcbiAgaWYgKGluZGV4ID4+PiAwID49IGFycmF5Lmxlbmd0aCAtIDEpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFycmF5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfdmVjdCBjb25zdCAoY29uc3QsIG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX21ha2VfdmVjdCAobGVuLCBpbml0KSB7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0wO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gaW5pdDtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV9mbG9hdF92ZWN0IGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfbWFrZV9mbG9hdF92ZWN0KGxlbil7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0yNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYlxufVxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2NyZWF0ZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlKGxlbil7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0yNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYlxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTQgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8gQW4gT0NhbWwgc3RyaW5nIGlzIGFuIG9iamVjdCB3aXRoIHRocmVlIGZpZWxkczpcbi8vIC0gdGFnICd0J1xuLy8gLSBsZW5ndGggJ2wnXG4vLyAtIGNvbnRlbnRzICdjJ1xuLy9cbi8vIFRoZSBjb250ZW50cyBvZiB0aGUgc3RyaW5nIGNhbiBiZSBlaXRoZXIgYSBKYXZhU2NyaXB0IGFycmF5IG9yXG4vLyBhIEphdmFTY3JpcHQgc3RyaW5nLiBUaGUgbGVuZ3RoIG9mIHRoaXMgc3RyaW5nIGNhbiBiZSBsZXNzIHRoYW4gdGhlXG4vLyBsZW5ndGggb2YgdGhlIE9DYW1sIHN0cmluZy4gSW4gdGhpcyBjYXNlLCByZW1haW5pbmcgYnl0ZXMgYXJlXG4vLyBhc3N1bWVkIHRvIGJlIHplcm9lcy4gQXJyYXlzIGFyZSBtdXRhYmxlIGJ1dCBjb25zdW1lcyBtb3JlIG1lbW9yeVxuLy8gdGhhbiBzdHJpbmdzLiBBIGNvbW1vbiBwYXR0ZXJuIGlzIHRvIHN0YXJ0IGZyb20gYW4gZW1wdHkgc3RyaW5nIGFuZFxuLy8gcHJvZ3Jlc3NpdmVseSBmaWxsIGl0IGZyb20gdGhlIHN0YXJ0LiBQYXJ0aWFsIHN0cmluZ3MgbWFrZXMgaXRcbi8vIHBvc3NpYmxlIHRvIGltcGxlbWVudCB0aGlzIGVmZmljaWVudGx5LlxuLy9cbi8vIFdoZW4gY29udmVydGluZyB0byBhbmQgZnJvbSBVVEYtMTYsIHdlIGtlZXAgdHJhY2sgb2Ygd2hldGhlciB0aGVcbi8vIHN0cmluZyBpcyBjb21wb3NlZCBvbmx5IG9mIEFTQ0lJIGNoYXJhY3RlcnMgKGluIHdoaWNoIGNhc2UsIG5vXG4vLyBjb252ZXJzaW9uIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCkgb3Igbm90LlxuLy9cbi8vIFRoZSBzdHJpbmcgdGFnIGNhbiB0aHVzIHRha2UgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4vLyAgIGZ1bGwgc3RyaW5nICAgICBCWVRFIHwgVU5LTk9XTjogICAgICAwXG4vLyAgICAgICAgICAgICAgICAgICBCWVRFIHwgQVNDSUk6ICAgICAgICA5XG4vLyAgICAgICAgICAgICAgICAgICBCWVRFIHwgTk9UX0FTQ0lJOiAgICA4XG4vLyAgIHN0cmluZyBwcmVmaXggICBQQVJUSUFMOiAgICAgICAgICAgICAyXG4vLyAgIGFycmF5ICAgICAgICAgICBBUlJBWTogICAgICAgICAgICAgICA0XG4vL1xuLy8gT25lIGNhbiB1c2UgYml0IG1hc2tpbmcgdG8gZGlzY3JpbWluYXRlIHRoZXNlIGRpZmZlcmVudCBjYXNlczpcbi8vICAga25vd25fZW5jb2RpbmcoeCkgPSB4Jjhcbi8vICAgaXNfYXNjaWkoeCkgPSAgICAgICB4JjFcbi8vICAga2luZCh4KSA9ICAgICAgICAgICB4JjZcblxuLy9Qcm92aWRlczogY2FtbF9zdHJfcmVwZWF0XG5mdW5jdGlvbiBjYW1sX3N0cl9yZXBlYXQobiwgcykge1xuICBpZihuID09IDApIHJldHVybiBcIlwiO1xuICBpZiAocy5yZXBlYXQpIHtyZXR1cm4gcy5yZXBlYXQobik7fSAvLyBFQ01Bc2NyaXB0IDYgYW5kIEZpcmVmb3ggMjQrXG4gIHZhciByID0gXCJcIiwgbCA9IDA7XG4gIGZvcig7Oykge1xuICAgIGlmIChuICYgMSkgciArPSBzO1xuICAgIG4gPj49IDE7XG4gICAgaWYgKG4gPT0gMCkgcmV0dXJuIHI7XG4gICAgcyArPSBzO1xuICAgIGwrKztcbiAgICBpZiAobCA9PSA5KSB7XG4gICAgICBzLnNsaWNlKDAsMSk7IC8vIGZsYXR0ZW4gdGhlIHN0cmluZ1xuICAgICAgLy8gdGhlbiwgdGhlIGZsYXR0ZW5pbmcgb2YgdGhlIHdob2xlIHN0cmluZyB3aWxsIGJlIGZhc3RlcixcbiAgICAgIC8vIGFzIGl0IHdpbGwgYmUgY29tcG9zZWQgb2YgbGFyZ2VyIHBpZWNlc1xuICAgIH1cbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbi8vV2Vha2RlZlxuLy8gUHJlIEVDTUFTY3JpcHQgNSwgW2FwcGx5XSB3b3VsZCBub3Qgc3VwcG9ydCBhcnJheS1saWtlIG9iamVjdC5cbi8vIEluIHN1Y2ggc2V0dXAsIFR5cGVkX2FycmF5IHdvdWxkIGJlIGltcGxlbWVudGVkIGFzIHBvbHlmaWxsLCBhbmQgW2YuYXBwbHldIHdvdWxkXG4vLyBmYWlsIGhlcmUuIE1hcmsgdGhlIHByaW1pdGl2ZSBhcyBXZWFrZGVmLCBzbyB0aGF0IHBlb3BsZSBjYW4gb3ZlcnJpZGUgaXQgZWFzaWx5LlxuZnVuY3Rpb24gY2FtbF9zdWJhcnJheV90b19qc2J5dGVzIChhLCBpLCBsZW4pIHtcbiAgdmFyIGYgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuICBpZiAoaSA9PSAwICYmIGxlbiA8PSA0MDk2ICYmIGxlbiA9PSBhLmxlbmd0aCkgcmV0dXJuIGYuYXBwbHkgKG51bGwsIGEpO1xuICB2YXIgcyA9IFwiXCI7XG4gIGZvciAoOyAwIDwgbGVuOyBpICs9IDEwMjQsbGVuLT0xMDI0KVxuICAgIHMgKz0gZi5hcHBseSAobnVsbCwgYS5zbGljZShpLGkgKyBNYXRoLm1pbihsZW4sIDEwMjQpKSk7XG4gIHJldHVybiBzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3V0Zjhfb2ZfdXRmMTZcbmZ1bmN0aW9uIGNhbWxfdXRmOF9vZl91dGYxNihzKSB7XG4gIGZvciAodmFyIGIgPSBcIlwiLCB0ID0gYiwgYywgZCwgaSA9IDAsIGwgPSBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGMgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IChqIDwgbCkgJiYgKGMgPSBzLmNoYXJDb2RlQXQoaikpIDwgMHg4MDsgaisrKTtcbiAgICAgIGlmIChqIC0gaSA+IDUxMikgeyB0LnN1YnN0cigwLCAxKTsgYiArPSB0OyB0ID0gXCJcIjsgYiArPSBzLnNsaWNlKGksIGopIH1cbiAgICAgIGVsc2UgdCArPSBzLnNsaWNlKGksIGopO1xuICAgICAgaWYgKGogPT0gbCkgYnJlYWs7XG4gICAgICBpID0gajtcbiAgICB9XG4gICAgaWYgKGMgPCAweDgwMCkge1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4YzAgfCAoYyA+PiA2KSk7XG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHg4MCB8IChjICYgMHgzZikpO1xuICAgIH0gZWxzZSBpZiAoYyA8IDB4ZDgwMCB8fCBjID49IDB4ZGZmZikge1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZTAgfCAoYyA+PiAxMiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8ICgoYyA+PiA2KSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoYyAmIDB4M2YpKTtcbiAgICB9IGVsc2UgaWYgKGMgPj0gMHhkYmZmIHx8IGkgKyAxID09IGwgfHxcbiAgICAgICAgICAgICAgIChkID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgZCA+IDB4ZGZmZikge1xuICAgICAgLy8gVW5tYXRjaGVkIHN1cnJvZ2F0ZSBwYWlyLCByZXBsYWNlZCBieSBcXHVmZmZkIChyZXBsYWNlbWVudCBjaGFyYWN0ZXIpXG4gICAgICB0ICs9IFwiXFx4ZWZcXHhiZlxceGJkXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGMgPSAoYyA8PCAxMCkgKyBkIC0gMHgzNWZkYzAwO1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZjAgfCAoYyA+PiAxOCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8ICgoYyA+PiAxMikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKChjID4+IDYpICYgMHgzZiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8IChjICYgMHgzZikpO1xuICAgIH1cbiAgICBpZiAodC5sZW5ndGggPiAxMDI0KSB7dC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7fVxuICB9XG4gIHJldHVybiBiK3Q7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdXRmMTZfb2ZfdXRmOFxuZnVuY3Rpb24gY2FtbF91dGYxNl9vZl91dGY4KHMpIHtcbiAgZm9yICh2YXIgYiA9IFwiXCIsIHQgPSBcIlwiLCBjLCBjMSwgYzIsIHYsIGkgPSAwLCBsID0gcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjMSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoYzEgPCAweDgwKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IChqIDwgbCkgJiYgKGMxID0gcy5jaGFyQ29kZUF0KGopKSA8IDB4ODA7IGorKyk7XG4gICAgICBpZiAoaiAtIGkgPiA1MTIpIHsgdC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7IGIgKz0gcy5zbGljZShpLCBqKSB9XG4gICAgICBlbHNlIHQgKz0gcy5zbGljZShpLCBqKTtcbiAgICAgIGlmIChqID09IGwpIGJyZWFrO1xuICAgICAgaSA9IGo7XG4gICAgfVxuICAgIHYgPSAxO1xuICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpKSB7XG4gICAgICBjID0gYzIgKyAoYzEgPDwgNik7XG4gICAgICBpZiAoYzEgPCAweGUwKSB7XG4gICAgICAgIHYgPSBjIC0gMHgzMDgwO1xuICAgICAgICBpZiAodiA8IDB4ODApIHYgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdiA9IDI7XG4gICAgICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpKSB7XG4gICAgICAgICAgYyA9IGMyICsgKGMgPDwgNik7XG4gICAgICAgICAgaWYgKGMxIDwgMHhmMCkge1xuICAgICAgICAgICAgdiA9IGMgLSAweGUyMDgwO1xuICAgICAgICAgICAgaWYgKCh2IDwgMHg4MDApIHx8ICgodiA+PSAweGQ3ZmYpICYmICh2IDwgMHhlMDAwKSkpIHYgPSAyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2ID0gMztcbiAgICAgICAgICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpICYmXG4gICAgICAgICAgICAgICAgKGMxIDwgMHhmNSkpIHtcbiAgICAgICAgICAgICAgdiA9IGMyIC0gMHgzYzgyMDgwICsgKGMgPDwgNik7XG4gICAgICAgICAgICAgIGlmICh2IDwgMHgxMDAwMCB8fCB2ID4gMHgxMGZmZmYpIHYgPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodiA8IDQpIHsgLy8gSW52YWxpZCBzZXF1ZW5jZVxuICAgICAgaSAtPSB2O1xuICAgICAgdCArPSBcIlxcdWZmZmRcIjtcbiAgICB9IGVsc2UgaWYgKHYgPiAweGZmZmYpXG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhkN2MwICsgKHYgPj4gMTApLCAweGRjMDAgKyAodiAmIDB4M0ZGKSlcbiAgICBlbHNlXG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodik7XG4gICAgaWYgKHQubGVuZ3RoID4gMTAyNCkge3Quc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiO31cbiAgfVxuICByZXR1cm4gYit0O1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX2lzX2FzY2lpXG5mdW5jdGlvbiBqc29vX2lzX2FzY2lpIChzKSB7XG4gIC8vIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gZ2V0cyBiZXR0ZXIgYXQgYXJvdW5kIHRoaXMgcG9pbnQgZm9yIGFsbCBicm93c2Vyc1xuICBpZiAocy5sZW5ndGggPCAyNCkge1xuICAgIC8vIFNwaWRlcm1vbmtleSBnZXRzIG11Y2ggc2xvd2VyIHdoZW4gcy5sZW5ndGggPj0gMjQgKG9uIDY0IGJpdCBhcmNocylcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIGlmIChzLmNoYXJDb2RlQXQoaSkgPiAxMjcpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlXG4gICAgcmV0dXJuICEvW15cXHgwMC1cXHg3Zl0vLnRlc3Qocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpIHtcbiAgc3dpdGNoIChzLnQgJiA2KSB7XG4gIGRlZmF1bHQ6IC8qIFBBUlRJQUwgKi9cbiAgICBpZiAoaSA+PSBzLmMubGVuZ3RoKSByZXR1cm4gMDtcbiAgY2FzZSAwOiAvKiBCWVRFUyAqL1xuICAgIHJldHVybiBzLmMuY2hhckNvZGVBdChpKTtcbiAgY2FzZSA0OiAvKiBBUlJBWSAqL1xuICAgIHJldHVybiBzLmNbaV1cbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpLCBjKSB7XG4gIC8vIFRoZSBPQ2FtbCBjb21waWxlciB1c2VzIENoYXIudW5zYWZlX2NociBvbiBpbnRlZ2VycyBsYXJnZXIgdGhhbiAyNTUhXG4gIGMgJj0gMHhmZjtcbiAgaWYgKHMudCAhPSA0IC8qIEFSUkFZICovKSB7XG4gICAgaWYgKGkgPT0gcy5jLmxlbmd0aCkge1xuICAgICAgcy5jICs9IFN0cmluZy5mcm9tQ2hhckNvZGUgKGMpO1xuICAgICAgaWYgKGkgKyAxID09IHMubCkgcy50ID0gMDsgLypCWVRFUyB8IFVOS09XTiovXG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5IChzKTtcbiAgfVxuICBzLmNbaV0gPSBjO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcImluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0IChzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0MTYocyxpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDEpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMSk7XG4gIHJldHVybiAoYjIgPDwgOCB8IGIxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDE2KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAxKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDEpO1xuICByZXR1cm4gKGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldDMyXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQzMihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gMykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKSxcbiAgICAgIGIzID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDIpLFxuICAgICAgYjQgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMyk7XG4gIHJldHVybiAoYjQgPDwgMjQgfCBiMyA8PCAxNiB8IGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQzMihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gMykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKSxcbiAgICAgIGIzID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgMiksXG4gICAgICBiNCA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDMpO1xuICByZXR1cm4gKGI0IDw8IDI0IHwgYjMgPDwgMTYgfCBiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0NjQocyxpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDcpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBhID0gbmV3IEFycmF5KDgpO1xuICBmb3IodmFyIGogPSAwOyBqIDwgODsgaisrKXtcbiAgICBhWzcgLSBqXSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyBqKTtcbiAgfVxuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDY0KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSA3KSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBhID0gbmV3IEFycmF5KDgpO1xuICBmb3IodmFyIGogPSAwOyBqIDwgODsgaisrKXtcbiAgICBhWzcgLSBqXSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIGopO1xuICB9XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldCAocywgaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQgKHMsIGksIGMpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0IChzLCBpLCBjKSB7XG4gIGlmIChpID4+PiAwID49IHMubCkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQgKHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MTYocyxpLGkxNil7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDEpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIyID0gMHhGRiAmIGkxNiA+PiA4LFxuICAgICAgYjEgPSAweEZGICYgaTE2O1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAwLCBiMSk7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDEsIGIyKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MTYocyxpLGkxNil7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXQxNlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfc2V0MTZcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDE2KHMsaSxpMTYpe1xuICByZXR1cm4gY2FtbF9ieXRlc19zZXQxNihzLGksaTE2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldDMyKHMsaSxpMzIpe1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAzKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiNCA9IDB4RkYgJiBpMzIgPj4gMjQsXG4gICAgICBiMyA9IDB4RkYgJiBpMzIgPj4gMTYsXG4gICAgICBiMiA9IDB4RkYgJiBpMzIgPj4gOCxcbiAgICAgIGIxID0gMHhGRiAmIGkzMjtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMCwgYjEpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAxLCBiMik7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDIsIGIzKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMywgYjQpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQzMihzLGksaTMyKXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldDMyXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19zZXQzMlxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MzIocyxpLGkzMil7XG4gIHJldHVybiBjYW1sX2J5dGVzX3NldDMyKHMsaSxpMzIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0NjQocyxpLGk2NCl7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDcpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGEgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGk2NCk7XG4gIGZvcih2YXIgaiA9IDA7IGogPCA4OyBqKyspIHtcbiAgICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyA3IC0gaiwgYVtqXSk7XG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0NjQocyxpLGk2NCl7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXQ2NFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfc2V0NjRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDY0KHMsaSxpNjQpe1xuICByZXR1cm4gY2FtbF9ieXRlc19zZXQ2NChzLGksaTY0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQgKHMsIGksIGMpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0Zjhfb2ZfdXRmMTYsIE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmcgKHMpIHtcbiAgdmFyIHRhZyA9IDkgLyogQllURVMgfCBBU0NJSSAqLztcbiAgaWYgKCFqc29vX2lzX2FzY2lpKHMpKVxuICAgIHRhZyA9IDggLyogQllURVMgfCBOT1RfQVNDSUkgKi8sIHMgPSBjYW1sX3V0Zjhfb2ZfdXRmMTYocyk7XG4gIHJldHVybiBuZXcgTWxCeXRlcyh0YWcsIHMsIHMubGVuZ3RoKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBNbEJ5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzLCBqc29vX2lzX2FzY2lpLCBjYW1sX3V0ZjE2X29mX3V0ZjhcbmZ1bmN0aW9uIE1sQnl0ZXMgKHRhZywgY29udGVudHMsIGxlbmd0aCkge1xuICB0aGlzLnQ9dGFnOyB0aGlzLmM9Y29udGVudHM7IHRoaXMubD1sZW5ndGg7XG59XG5NbEJ5dGVzLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCl7XG4gIHN3aXRjaCAodGhpcy50KSB7XG4gIGNhc2UgOTogLypCWVRFUyB8IEFTQ0lJKi9cbiAgICByZXR1cm4gdGhpcy5jO1xuICBkZWZhdWx0OlxuICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXModGhpcyk7XG4gIGNhc2UgMDogLypCWVRFUyB8IFVOS09XTiovXG4gICAgaWYgKGpzb29faXNfYXNjaWkodGhpcy5jKSkge1xuICAgICAgdGhpcy50ID0gOTsgLypCWVRFUyB8IEFTQ0lJKi9cbiAgICAgIHJldHVybiB0aGlzLmM7XG4gICAgfVxuICAgIHRoaXMudCA9IDg7IC8qQllURVMgfCBOT1RfQVNDSUkqL1xuICBjYXNlIDg6IC8qQllURVMgfCBOT1RfQVNDSUkqL1xuICAgIHJldHVybiB0aGlzLmM7XG4gIH1cbn07XG5NbEJ5dGVzLnByb3RvdHlwZS50b1V0ZjE2ID0gZnVuY3Rpb24gKCl7XG4gIHZhciByID0gdGhpcy50b1N0cmluZygpO1xuICBpZih0aGlzLnQgPT0gOSkgcmV0dXJuIHJcbiAgcmV0dXJuIGNhbWxfdXRmMTZfb2ZfdXRmOChyKTtcbn1cbk1sQnl0ZXMucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gKCl7XG4gIHZhciBjb250ZW50ID0gdGhpcy50ID09IDQgPyB0aGlzLmMuc2xpY2UoKSA6IHRoaXMuYztcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKHRoaXMudCxjb250ZW50LHRoaXMubCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3RyX3JlcGVhdCwgY2FtbF9zdWJhcnJheV90b19qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzIChzKSB7XG4gIC8qIEFzc3VtZXMgbm90IEJZVEVTICovXG4gIGlmIChzLnQgPT0gMiAvKiBQQVJUSUFMICovKVxuICAgIHMuYyArPSBjYW1sX3N0cl9yZXBlYXQocy5sIC0gcy5jLmxlbmd0aCwgJ1xcMCcpXG4gIGVsc2VcbiAgICBzLmMgPSBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMgKHMuYywgMCwgcy5jLmxlbmd0aCk7XG4gIHMudCA9IDA7IC8qQllURVMgfCBVTktPV04qL1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheSAocykge1xuICAvKiBBc3N1bWVzIG5vdCBBUlJBWSAqL1xuICB2YXIgYSA9IG5ldyBVaW50OEFycmF5KHMubCk7XG4gIHZhciBiID0gcy5jLCBsID0gYi5sZW5ndGgsIGkgPSAwO1xuICBmb3IgKDsgaSA8IGw7IGkrKykgYVtpXSA9IGIuY2hhckNvZGVBdChpKTtcbiAgZm9yIChsID0gcy5sOyBpIDwgbDsgaSsrKSBhW2ldID0gMDtcbiAgcy5jID0gYTtcbiAgcy50ID0gNDsgLyogQVJSQVkgKi9cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzIChzKSB7XG4gIGlmIChzLnQgIT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICByZXR1cm4gcy5jO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuZnVuY3Rpb24gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcgKHMpIHtcbiAgdmFyIGwgPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIHZhciBhID0gbmV3IFVpbnQ4QXJyYXkobCk7XG4gIHZhciBpID0gMDtcbiAgZm9yICg7IGkgPCBsOyBpKyspIGFbaV0gPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsaSk7XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9jcmVhdGVfc3RyaW5nKGxlbikge1xuICBpZihsZW4gPCAwKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHJpbmcuY3JlYXRlXCIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMobGVuPzI6OSxcIlwiLGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX3N0cmluZyhsZW4pIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyaW5nLmNyZWF0ZVwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pIHtcbiAgaWYgKGxlbiA8IDApIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJ5dGVzLmNyZWF0ZVwiKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKGxlbj8yOjksXCJcIixsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9zdWJhcnJheV90b19qc2J5dGVzLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9hcnJheSAoYSkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMoYSwwLGEubGVuZ3RoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfYXJyYXkgKGEpIHtcbiAgaWYoISAoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgYSA9IG5ldyBVaW50OEFycmF5KGEpO1xuICB9XG4gIHJldHVybiBuZXcgTWxCeXRlcyg0LGEsYS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2NvbXBhcmUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19jb21wYXJlKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPCBzMi5jKT8tMTooczEuYyA+IHMyLmMpPzE6MDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2VxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKSB7XG4gIGlmKHMxID09PSBzMikgcmV0dXJuIDE7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA9PSBzMi5jKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ub3RlcXVhbChzMSwgczIpIHsgcmV0dXJuIDEtY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfZXF1YWxcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbm90ZXF1YWwoczEsIHMyKSB7IHJldHVybiAxLWNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbCBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgKHMxLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgKHMyLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIChzMS5jIDw9IHMyLmMpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19sZXNzdGhhbiBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2xlc3N0aGFuKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPCBzMi5jKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dyZWF0ZXJlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ncmVhdGVyZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczIsczEpO1xufVxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ncmVhdGVyZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc2VxdWFsXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dyZWF0ZXJlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMyLHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ3JlYXRlcnRoYW5cbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ncmVhdGVydGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX2xlc3N0aGFuKHMyLCBzMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ3JlYXRlcnRoYW5cbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc3RoYW5cbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ3JlYXRlcnRoYW4oczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3N0aGFuKHMyLCBzMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmlsbF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9zdHJfcmVwZWF0LCBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbi8vQWxpYXM6IGNhbWxfZmlsbF9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZmlsbF9ieXRlcyhzLCBpLCBsLCBjKSB7XG4gIGlmIChsID4gMCkge1xuICAgIGlmIChpID09IDAgJiYgKGwgPj0gcy5sIHx8IChzLnQgPT0gMiAvKiBQQVJUSUFMICovICYmIGwgPj0gcy5jLmxlbmd0aCkpKSB7XG4gICAgICBpZiAoYyA9PSAwKSB7XG4gICAgICAgIHMuYyA9IFwiXCI7XG4gICAgICAgIHMudCA9IDI7IC8qIFBBUlRJQUwgKi9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMuYyA9IGNhbWxfc3RyX3JlcGVhdCAobCwgU3RyaW5nLmZyb21DaGFyQ29kZShjKSk7XG4gICAgICAgIHMudCA9IChsID09IHMubCk/MCAvKiBCWVRFUyB8IFVOS09XTiAqLyA6MjsgLyogUEFSVElBTCAqL1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocy50ICE9IDQgLyogQVJSQVkgKi8pIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheShzKTtcbiAgICAgIGZvciAobCArPSBpOyBpIDwgbDsgaSsrKSBzLmNbaV0gPSBjO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGl0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9ibGl0X2J5dGVzKHMxLCBpMSwgczIsIGkyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSAwKSByZXR1cm4gMDtcbiAgaWYgKChpMiA9PSAwKSAmJlxuICAgICAgKGxlbiA+PSBzMi5sIHx8IChzMi50ID09IDIgLyogUEFSVElBTCAqLyAmJiBsZW4gPj0gczIuYy5sZW5ndGgpKSkge1xuICAgIHMyLmMgPSAoczEudCA9PSA0IC8qIEFSUkFZICovKT9cbiAgICAgIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyhzMS5jLCBpMSwgbGVuKTpcbiAgICAgIChpMSA9PSAwICYmIHMxLmMubGVuZ3RoID09IGxlbik/czEuYzpzMS5jLnN1YnN0cihpMSwgbGVuKTtcbiAgICBzMi50ID0gKHMyLmMubGVuZ3RoID09IHMyLmwpPzAgLyogQllURVMgfCBVTktPV04gKi8gOjI7IC8qIFBBUlRJQUwgKi9cbiAgfSBlbHNlIGlmIChzMi50ID09IDIgLyogUEFSVElBTCAqLyAmJiBpMiA9PSBzMi5jLmxlbmd0aCkge1xuICAgIHMyLmMgKz0gKHMxLnQgPT0gNCAvKiBBUlJBWSAqLyk/XG4gICAgICBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMoczEuYywgaTEsIGxlbik6XG4gICAgICAoaTEgPT0gMCAmJiBzMS5jLmxlbmd0aCA9PSBsZW4pP3MxLmM6czEuYy5zdWJzdHIoaTEsIGxlbik7XG4gICAgczIudCA9IChzMi5jLmxlbmd0aCA9PSBzMi5sKT8wIC8qIEJZVEVTIHwgVU5LT1dOICovIDoyOyAvKiBQQVJUSUFMICovXG4gIH0gZWxzZSB7XG4gICAgaWYgKHMyLnQgIT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMyKTtcbiAgICB2YXIgYzEgPSBzMS5jLCBjMiA9IHMyLmM7XG4gICAgaWYgKHMxLnQgPT0gNCAvKiBBUlJBWSAqLykge1xuICAgICAgaWYgKGkyIDw9IGkxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGMyIFtpMiArIGldID0gYzEgW2kxICsgaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIGMyIFtpMiArIGldID0gYzEgW2kxICsgaV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBsID0gTWF0aC5taW4gKGxlbiwgYzEubGVuZ3RoIC0gaTEpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIGMyIFtpMiArIGldID0gYzEuY2hhckNvZGVBdChpMSArIGkpO1xuICAgICAgZm9yICg7IGkgPCBsZW47IGkrKykgYzIgW2kyICsgaV0gPSAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGl0X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ibGl0X3N0cmluZyhhLGIsYyxkLGUpIHtcbiAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGEpLGIsYyxkLGUpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9ieXRlc19sZW5ndGgocykgeyByZXR1cm4gcy5sIH1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKSB7XG4gIHJldHVybiBzLmNoYXJDb2RlQXQoaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX3NldCAocywgaSwgYykge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfdW5zYWZlX3NldFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSB7XG4gIHJldHVybiBzLmxlbmd0aFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb21wYXJlIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2NvbXBhcmUoczEsIHMyKSB7XG4gIHJldHVybiAoczEgPCBzMik/LTE6KHMxID4gczIpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZXF1YWwgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKSB7XG4gIGlmKHMxID09PSBzMikgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzZXF1YWwgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gKHMxIDw9IHMyKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3N0aGFuKHMxLCBzMikge1xuICByZXR1cm4gKHMxIDwgczIpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfYnl0ZXMocykge1xuICAocy50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocy5jKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh4KSB7IHJldHVybiB4IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHgpIHsgcmV0dXJuIHggfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczoganNvb19pc19hc2NpaSwgY2FtbF91dGYxNl9vZl91dGY4XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpIHtcbiAgaWYoanNvb19pc19hc2NpaShzKSlcbiAgICByZXR1cm4gcztcbiAgcmV0dXJuIGNhbWxfdXRmMTZfb2ZfdXRmOChzKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczoganNvb19pc19hc2NpaSwgY2FtbF91dGY4X29mX3V0ZjE2LCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIChzKSB7XG4gIGlmIChqc29vX2lzX2FzY2lpKHMpKVxuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpXG4gIGVsc2UgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF91dGY4X29mX3V0ZjE2KHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMocykgeyByZXR1cm4gbmV3IE1sQnl0ZXMoMCxzLHMubGVuZ3RoKTsgfVxuXG5cbi8vIFRoZSBzZWN0aW9uIGJlbG93IHNob3VsZCBiZSB1c2VkIHdoZW4gdXNlLWpzLXN0cmluZz1mYWxzZVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQgKHMsIGksIGMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX3NldChzLGksYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19sZW5ndGhcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSB7XG4gIHJldHVybiBjYW1sX21sX2J5dGVzX2xlbmd0aChzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb21wYXJlXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2NvbXBhcmVcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2NvbXBhcmUoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2NvbXBhcmUoczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2VxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2VxdWFsXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19lcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfZXF1YWwoczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3NlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzZXF1YWxcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMxLHMyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzdGhhblxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzdGhhblxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3N0aGFuKHMxLHMyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9ieXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfYnl0ZXMocykgeyByZXR1cm4gcyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3N0cmluZyhzKSB7IHJldHVybiBzIH1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpIHsgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhzKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgKHMudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocyk7XG4gIHJldHVybiBzLmMgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpe1xuICByZXR1cm4gcy50b1V0ZjE2KClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmdcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIChzKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nKHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX21sX2J5dGVzXG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2lzX21sX2J5dGVzKHMpIHtcbiAgcmV0dXJuIChzIGluc3RhbmNlb2YgTWxCeXRlcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfYnl0ZXNfY29udGVudFxuLy9SZXF1aXJlczogTWxCeXRlcywgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9tbF9ieXRlc19jb250ZW50KHMpIHtcbiAgc3dpdGNoIChzLnQgJiA2KSB7XG4gIGRlZmF1bHQ6IC8qIFBBUlRJQUwgKi9cbiAgICBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICBjYXNlIDA6IC8qIEJZVEVTICovXG4gICAgcmV0dXJuIHMuYztcbiAgY2FzZSA0OlxuICAgIHJldHVybiBzLmNcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX21sX3N0cmluZ1xuLy9SZXF1aXJlczoganNvb19pc19hc2NpaVxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2lzX21sX3N0cmluZyhzKSB7XG4gIHJldHVybiAodHlwZW9mIHMgPT09IFwic3RyaW5nXCIgJiYgIS9bXlxceDAwLVxceGZmXS8udGVzdChzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2lzX21sX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2lzX21sX2J5dGVzKHMpO1xufVxuXG4vLyBUaGUgZnVuY3Rpb25zIGJlbG93IGFyZSBkZXByZWNhdGVkXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcocykgeyByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmV3X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9uZXdfc3RyaW5nIChzKSB7IHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdG9fanNfc3RyaW5nIG11dGFibGUgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfdG9fanNfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc190b19zdHJpbmcgKHMpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHMpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9hcnJheV9vZl9zdHJpbmcoeCkgeyByZXR1cm4gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcoeCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2FycmF5X29mX2J5dGVzKHgpIHsgcmV0dXJuIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoeCkgfVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBTeXNcblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZywgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yYWlzZV9zeXNfZXJyb3IgKG1zZykge1xuICBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nKGNhbWxfZ2xvYmFsX2RhdGEuU3lzX2Vycm9yLCBtc2cpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19leGl0XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfc3lzX2V4aXQgKGNvZGUpIHtcbiAgaWYoZ2xvYmFsVGhpcy5xdWl0KSBnbG9iYWxUaGlzLnF1aXQoY29kZSk7XG4gIC8vbm9kZWpzXG4gIGlmKGdsb2JhbFRoaXMucHJvY2VzcyAmJiBnbG9iYWxUaGlzLnByb2Nlc3MuZXhpdClcbiAgICBnbG9iYWxUaGlzLnByb2Nlc3MuZXhpdChjb2RlKTtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiRnVuY3Rpb24gJ2V4aXQnIG5vdCBpbXBsZW1lbnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvbihleG4pe1xuICBzd2l0Y2goZXhuWzJdKSB7XG4gIGNhc2UgLTg6IC8vIE1hdGNoX2ZhaWx1cmVcbiAgY2FzZSAtMTE6IC8vIEFzc2VydF9mYWlsdXJlXG4gIGNhc2UgLTEyOiAvLyBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZVxuICAgIHJldHVybiAxO1xuICBkZWZhdWx0OlxuICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2V4Y2VwdGlvblxuLy9SZXF1aXJlczogTWxCeXRlcywgY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9mb3JtYXRfZXhjZXB0aW9uKGV4bil7XG4gIHZhciByID0gXCJcIjtcbiAgaWYoZXhuWzBdID09IDApIHtcbiAgICByICs9IGV4blsxXVsxXTtcbiAgICBpZihleG4ubGVuZ3RoID09IDMgJiYgZXhuWzJdWzBdID09IDAgJiYgY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvbihleG5bMV0pKSB7XG5cbiAgICAgIHZhciBidWNrZXQgPSBleG5bMl07XG4gICAgICB2YXIgc3RhcnQgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RhcnQgPSAyXG4gICAgICB2YXIgYnVja2V0ID0gZXhuO1xuICAgIH1cbiAgICByICs9IFwiKFwiO1xuICAgIGZvcih2YXIgaSA9IHN0YXJ0OyBpIDwgYnVja2V0Lmxlbmd0aDsgaSArKyl7XG4gICAgICBpZihpID4gc3RhcnQpIHIrPVwiLCBcIjtcbiAgICAgIHZhciB2ID0gYnVja2V0W2ldXG4gICAgICBpZih0eXBlb2YgdiA9PSBcIm51bWJlclwiKVxuICAgICAgICByKz0gdi50b1N0cmluZygpO1xuICAgICAgZWxzZSBpZih2IGluc3RhbmNlb2YgTWxCeXRlcyl7XG4gICAgICAgIHIrPSAnXCInICsgdi50b1N0cmluZygpICsgJ1wiJztcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYodHlwZW9mIHYgPT0gXCJzdHJpbmdcIil7XG4gICAgICAgIHIrPSAnXCInICsgdi50b1N0cmluZygpICsgJ1wiJztcbiAgICAgIH1cbiAgICAgIGVsc2UgciArPSBcIl9cIjtcbiAgICB9XG4gICAgciArPSBcIilcIlxuICB9IGVsc2UgaWYgKGV4blswXSA9PSAyNDgpe1xuICAgIHIgKz0gZXhuWzFdXG4gIH1cbiAgcmV0dXJuIHJcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25cbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfZm9ybWF0X2V4Y2VwdGlvbiwgY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXJyKXtcbiAgaWYoZXJyIGluc3RhbmNlb2YgQXJyYXkgJiYgKGVyclswXSA9PSAwIHx8IGVyclswXSA9PSAyNDgpKSB7XG4gICAgdmFyIGhhbmRsZXIgPSBjYW1sX25hbWVkX3ZhbHVlKFwiUHJpbnRleGMuaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblwiKTtcbiAgICBpZihoYW5kbGVyKSBjYW1sX2NhbGxiYWNrKGhhbmRsZXIsIFtlcnIsZmFsc2VdKTtcbiAgICBlbHNlIHtcbiAgICAgIHZhciBtc2cgPSBjYW1sX2Zvcm1hdF9leGNlcHRpb24oZXJyKTtcbiAgICAgIHZhciBhdF9leGl0ID0gY2FtbF9uYW1lZF92YWx1ZShcIlBlcnZhc2l2ZXMuZG9fYXRfZXhpdFwiKTtcbiAgICAgIGlmKGF0X2V4aXQpIGNhbWxfY2FsbGJhY2soYXRfZXhpdCwgWzBdKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYXRhbCBlcnJvcjogZXhjZXB0aW9uIFwiICsgbXNnKTtcbiAgICAgIGlmKGVyci5qc19lcnJvcikgdGhyb3cgZXJyLmpzX2Vycm9yO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NldF9zdGF0aWNfZW52XG5mdW5jdGlvbiBjYW1sX3NldF9zdGF0aWNfZW52KGssdil7XG4gIGlmKCFnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudilcbiAgICBnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudiA9IHt9XG4gIGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52W2tdID0gdjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29fc3lzX2dldGVudiAoY29uc3QpXG5mdW5jdGlvbiBqc29vX3N5c19nZXRlbnYobikge1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgLy9ub2RlanMgZW52XG4gIGlmKHByb2Nlc3NcbiAgICAgJiYgcHJvY2Vzcy5lbnZcbiAgICAgJiYgcHJvY2Vzcy5lbnZbbl0gIT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBwcm9jZXNzLmVudltuXTtcbiAgaWYoZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZcbiAgICAgJiYgZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZbbl0pXG4gICAgcmV0dXJuIGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52W25dXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldGVudiAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX3N5c19nZXRlbnZcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldGVudiAobmFtZSkge1xuICB2YXIgciA9IGpzb29fc3lzX2dldGVudihjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lKSk7XG4gIGlmKHIgPT09IHVuZGVmaW5lZClcbiAgICBjYW1sX3JhaXNlX25vdF9mb3VuZCAoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3Vuc2FmZV9nZXRlbnZcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2dldGVudlxuZnVuY3Rpb24gY2FtbF9zeXNfdW5zYWZlX2dldGVudihuYW1lKXtcbiAgcmV0dXJuIGNhbWxfc3lzX2dldGVudiAobmFtZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJndlxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbnZhciBjYW1sX2FyZ3YgPSAoKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG4gIHZhciBtYWluID0gXCJhLm91dFwiO1xuICB2YXIgYXJncyA9IFtdXG5cbiAgaWYocHJvY2Vzc1xuICAgICAmJiBwcm9jZXNzLmFyZ3ZcbiAgICAgJiYgcHJvY2Vzcy5hcmd2Lmxlbmd0aCA+IDEpIHtcbiAgICB2YXIgYXJndiA9IHByb2Nlc3MuYXJndlxuICAgIC8vbm9kZWpzXG4gICAgbWFpbiA9IGFyZ3ZbMV07XG4gICAgYXJncyA9IGFyZ3Yuc2xpY2UoMik7XG4gIH1cblxuICB2YXIgcCA9IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKG1haW4pO1xuICB2YXIgYXJnczIgPSBbMCwgcF07XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKVxuICAgIGFyZ3MyLnB1c2goY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoYXJnc1tpXSkpO1xuICByZXR1cm4gYXJnczI7XG59KSgpKVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2V4ZWN1dGFibGVfbmFtZVxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG52YXIgY2FtbF9leGVjdXRhYmxlX25hbWUgPSBjYW1sX2FyZ3ZbMV1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0X2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0X2FyZ3YgKGEpIHtcbiAgcmV0dXJuIFswLCBjYW1sX2FyZ3ZbMV0sIGNhbWxfYXJndl07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxuZnVuY3Rpb24gY2FtbF9zeXNfYXJndiAoYSkge1xuICByZXR1cm4gY2FtbF9hcmd2O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19tb2RpZnlfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19tb2RpZnlfYXJndihhcmcpe1xuICBjYW1sX2FyZ3YgPSBhcmc7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19leGVjdXRhYmxlX25hbWUgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfZXhlY3V0YWJsZV9uYW1lXG5mdW5jdGlvbiBjYW1sX3N5c19leGVjdXRhYmxlX25hbWUoYSl7XG4gIHJldHVybiBjYW1sX2V4ZWN1dGFibGVfbmFtZVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kKGNtZCl7XG4gIHZhciBjbWQgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhjbWQpO1xuICBpZiAodHlwZW9mIHJlcXVpcmUgIT0gXCJ1bmRlZmluZWRcIil7XG4gICAgdmFyIGNoaWxkX3Byb2Nlc3MgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7XG4gICAgaWYoY2hpbGRfcHJvY2VzcyAmJiBjaGlsZF9wcm9jZXNzLmV4ZWNTeW5jKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY2hpbGRfcHJvY2Vzcy5leGVjU3luYyhjbWQse3N0ZGlvOiAnaW5oZXJpdCd9KTtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIDFcbiAgICAgIH1cbiAgfVxuICBlbHNlIHJldHVybiAxMjc7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmQoY21kKXtcbiAgcmV0dXJuIDEyNztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGltZSBtdXRhYmxlXG52YXIgY2FtbF9pbml0aWFsX3RpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpICogMC4wMDE7XG5mdW5jdGlvbiBjYW1sX3N5c190aW1lICgpIHtcbiAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gIHJldHVybiBub3cgKiAwLjAwMSAtIGNhbWxfaW5pdGlhbF90aW1lO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c190aW1lX2luY2x1ZGVfY2hpbGRyZW5cbi8vUmVxdWlyZXM6IGNhbWxfc3lzX3RpbWVcbmZ1bmN0aW9uIGNhbWxfc3lzX3RpbWVfaW5jbHVkZV9jaGlsZHJlbihiKSB7XG4gIHJldHVybiBjYW1sX3N5c190aW1lKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JhbmRvbV9zZWVkIG11dGFibGVcbi8vVGhlIGZ1bmN0aW9uIG5lZWRzIHRvIHJldHVybiBhbiBhcnJheSBzaW5jZSBPQ2FtbCA0LjAuLi5cbmZ1bmN0aW9uIGNhbWxfc3lzX3JhbmRvbV9zZWVkICgpIHtcbiAgaWYgKGdsb2JhbFRoaXMuY3J5cHRvKSB7XG4gICAgIGlmIChnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgICB2YXIgYSA9IGdsb2JhbFRoaXMuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgSW50MzJBcnJheSg0KSk7XG4gICAgICAgcmV0dXJuIFswLCBhWzBdLCBhWzFdLCBhWzJdLCBhWzNdXTtcbiAgICAgfSBlbHNlIGlmIChnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcykge1xuICAgICAgIHZhciBhID0gbmV3IEludDMyQXJyYXkoZ2xvYmFsVGhpcy5jcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLmJ1ZmZlcik7XG4gICAgICAgcmV0dXJuIFswLCBhWzBdLCBhWzFdLCBhWzJdLCBhWzNdXTtcbiAgICAgfVxuICB9XG4gIHZhciBub3cgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICB2YXIgeCA9IG5vd14weGZmZmZmZmZmKk1hdGgucmFuZG9tKCk7XG4gIHJldHVybiBbMCx4XTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfYmlnX2VuZGlhbiBjb25zdFxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfYmlnX2VuZGlhbiAoKSB7IHJldHVybiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X3dvcmRfc2l6ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfd29yZF9zaXplICgpIHsgcmV0dXJuIDMyOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2ludF9zaXplIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9pbnRfc2l6ZSAoKSB7IHJldHVybiAzMjsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9tYXhfd29zaXplIGNvbnN0XG4vLyBtYXhfaW50IC8gNCBzbyB0aGF0IHRoZSBmb2xsb3dpbmcgZG9lcyBub3Qgb3ZlcmZsb3dcbi8vbGV0IG1heF9zdHJpbmdfbGVuZ3RoID0gd29yZF9zaXplIC8gOCAqIG1heF9hcnJheV9sZW5ndGggLSAxOztcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X21heF93b3NpemUgKCkgeyByZXR1cm4gKDB4N0ZGRkZGRkYvNCkgfCAwO31cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3VuaXggY29uc3Rcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV91bml4ICgpIHsgcmV0dXJuIG9zX3R5cGUgPT0gXCJVbml4XCIgPyAxIDogMDsgfVxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3dpbjMyIGNvbnN0XG4vL1JlcXVpcmVzOiBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfd2luMzIgKCkgeyByZXR1cm4gb3NfdHlwZSA9PSBcIldpbjMyXCIgPyAxIDogMDsgfVxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfb3N0eXBlX2N5Z3dpbiBjb25zdFxuLy9SZXF1aXJlczogb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfb3N0eXBlX2N5Z3dpbiAoKSB7IHJldHVybiBvc190eXBlID09IFwiQ3lnd2luXCIgPyAxIDogMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9iYWNrZW5kX3R5cGUgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2JhY2tlbmRfdHlwZSAoKSB7XG4gIHJldHVybiBbMCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcImpzX29mX29jYW1sXCIpXTtcbn1cblxuLy9Qcm92aWRlczogb3NfdHlwZVxudmFyIG9zX3R5cGUgPSAoZ2xvYmFsVGhpcy5wcm9jZXNzICYmXG4gICAgICAgICAgICAgICBnbG9iYWxUaGlzLnByb2Nlc3MucGxhdGZvcm0gJiZcbiAgICAgICAgICAgICAgIGdsb2JhbFRoaXMucHJvY2Vzcy5wbGF0Zm9ybSA9PSBcIndpbjMyXCIpID8gXCJDeWd3aW5cIiA6IFwiVW5peFwiO1xuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldF9jb25maWcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldF9jb25maWcgKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMob3NfdHlwZSksIDMyLCAwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfaXNhdHR5XG5mdW5jdGlvbiBjYW1sX3N5c19pc2F0dHkoX2NoYW4pIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV92YXJpYW50XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfdmFyaWFudChfdW5pdCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9wYXJhbWV0ZXJzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfcGFyYW1ldGVycyhfdW5pdCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2luc3RhbGxfc2lnbmFsX2hhbmRsZXIoKXtyZXR1cm4gMH1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX3dhcm5pbmdzXG52YXIgY2FtbF9ydW50aW1lX3dhcm5pbmdzID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9tbF9lbmFibGVfcnVudGltZV93YXJuaW5nc1xuLy9SZXF1aXJlczogY2FtbF9ydW50aW1lX3dhcm5pbmdzXG5mdW5jdGlvbiBjYW1sX21sX2VuYWJsZV9ydW50aW1lX3dhcm5pbmdzIChib29sKSB7XG4gIGNhbWxfcnVudGltZV93YXJuaW5ncyA9IGJvb2w7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3J1bnRpbWVfd2FybmluZ3NfZW5hYmxlZFxuLy9SZXF1aXJlczogY2FtbF9ydW50aW1lX3dhcm5pbmdzXG5mdW5jdGlvbiBjYW1sX21sX3J1bnRpbWVfd2FybmluZ3NfZW5hYmxlZCAoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfcnVudGltZV93YXJuaW5ncztcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NwYWNldGltZV9lbmFibGVkIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfc3BhY2V0aW1lX2VuYWJsZWQoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X25ha2VkX3BvaW50ZXJzX2NoZWNrZWQgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfbmFrZWRfcG9pbnRlcnNfY2hlY2tlZChfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9jaGFubmVsX2Zvcl9zcGFjZXRpbWUgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9jaGFubmVsX2Zvcl9zcGFjZXRpbWUoX2NoYW5uZWwpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3BhY2V0aW1lX29ubHlfd29ya3NfZm9yX25hdGl2ZV9jb2RlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX3NwYWNldGltZV9vbmx5X3dvcmtzX2Zvcl9uYXRpdmVfY29kZSgpIHtcbiAgY2FtbF9mYWlsd2l0aChcIlNwYWNldGltZSBwcm9maWxpbmcgb25seSB3b3JrcyBmb3IgbmF0aXZlIGNvZGVcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfeGRnX2RlZmF1bHRzXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF94ZGdfZGVmYXVsdHMoX3VuaXQpIHtcbiAgcmV0dXJuIDA7IC8vIGVtcHR5IGxpc3Rcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfaXNfcmVndWxhcl9maWxlXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfaXNfcmVndWxhcl9maWxlKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmlzRmlsZShyb290LnJlc3QpO1xufVxuLy9BbHdheXNcbi8vUmVxdWlyZXM6IGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyKCkge1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgaWYocHJvY2VzcyAmJiBwcm9jZXNzLm9uKSB7XG4gICAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBmdW5jdGlvbiAoZXJyLCBvcmlnaW4pIHtcbiAgICAgIGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uKGVycik7XG4gICAgICBwcm9jZXNzLmV4aXQgKDIpO1xuICAgIH0pXG4gIH1cbiAgZWxzZSBpZihnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIpe1xuICAgIGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmdW5jdGlvbihldmVudCl7XG4gICAgICBpZihldmVudC5lcnJvcil7XG4gICAgICAgIGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uKGV2ZW50LmVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuY2FtbF9zZXR1cF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlcigpO1xuXG5cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cblxuLy9Qcm92aWRlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWdcbi8vUmVxdWlyZXM6IGpzb29fc3lzX2dldGVudlxudmFyIGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnID0gRkxBRyhcIndpdGgtanMtZXJyb3JcIik7XG5cbihmdW5jdGlvbiAoKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KFwiT0NBTUxSVU5QQVJBTVwiKVxuICBpZihyICE9PSB1bmRlZmluZWQpe1xuICAgIHZhciBsID0gci5zcGxpdChcIixcIik7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGwubGVuZ3RoOyBpKyspe1xuICAgICAgaWYobFtpXSA9PSBcImJcIikgeyBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyA9IDE7IGJyZWFrIH1cbiAgICAgIGVsc2UgaWYgKGxbaV0uc3RhcnRzV2l0aChcImI9XCIpKSB7XG4gICAgICAgIGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnID0gKyhsW2ldLnNsaWNlKDIpKX1cbiAgICAgIGVsc2UgY29udGludWU7XG4gICAgfVxuICB9XG59KSAoKVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXMgKCkgeyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9iYWNrdHJhY2Vfc3RhdHVzXG4vL1JlcXVpcmVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZ1xuZnVuY3Rpb24gY2FtbF9iYWNrdHJhY2Vfc3RhdHVzIChfdW5pdCkgeyByZXR1cm4gY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPyAxIDogMDsgfVxuLy9Qcm92aWRlczogY2FtbF9nZXRfZXhjZXB0aW9uX2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfZXhjZXB0aW9uX2JhY2t0cmFjZSAoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2UgKCkgeyByZXR1cm4gWzBdOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnXG5mdW5jdGlvbiBjYW1sX3JlY29yZF9iYWNrdHJhY2UgKGIpIHsgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPSBiOyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlICgpIHsgcmV0dXJuIFswXTsgfVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aCgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3RcbmZ1bmN0aW9uIGNhbWxfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3QoKSB7IHJldHVybiAwIH1cbi8vUHJvdmlkZXM6IGNhbWxfcmF3X2JhY2t0cmFjZV9zbG90XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfcmF3X2JhY2t0cmFjZV9zbG90ICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiUHJpbnRleGMuZ2V0X3Jhd19iYWNrdHJhY2Vfc2xvdDogaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfcmVzdG9yZV9yYXdfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZShleG4sIGJ0KSB7IHJldHVybiAwIH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFjayAoKSB7IHJldHVybiBbMF07IH1cblxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdCgpe1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdFwiKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuIChjb25zdCwgc2hhbGxvdylcbi8vSWY6ICFlZmZlY3RzXG4vL1dlYWtkZWZcbmZ1bmN0aW9uIGNhbWxfY2FsbF9nZW4oZiwgYXJncykge1xuICB2YXIgbiA9IChmLmwgPj0gMCk/Zi5sOihmLmwgPSBmLmxlbmd0aCk7XG4gIHZhciBhcmdzTGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gIGlmIChkID09IDApXG4gICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gIGVsc2UgaWYgKGQgPCAwKSB7XG4gICAgdmFyIGcgPSBmLmFwcGx5KG51bGwsYXJncy5zbGljZSgwLG4pKTtcbiAgICBpZih0eXBlb2YgZyAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZztcbiAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihnLGFyZ3Muc2xpY2UobikpO1xuICB9XG4gIGVsc2Uge1xuICAgIHN3aXRjaCAoZCkge1xuICAgIGNhc2UgMToge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoeCl7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgMSk7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIG5hcmdzW2FyZ3NMZW5dID0geDtcbiAgICAgICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgbmFyZ3MpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgMjoge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoeCwgeSl7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgMik7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIG5hcmdzW2FyZ3NMZW5dID0geDtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbiArIDFdID0geTtcbiAgICAgICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgbmFyZ3MpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKCl7XG4gICAgICAgIHZhciBleHRyYV9hcmdzID0gKGFyZ3VtZW50cy5sZW5ndGggPT0gMCk/MTphcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJncy5sZW5ndGgrZXh0cmFfYXJncyk7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkgbmFyZ3NbYXJncy5sZW5ndGgraV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYsIG5hcmdzKVxuICAgICAgfTtcbiAgICB9fVxuICAgIGcubCA9IGQ7XG4gICAgcmV0dXJuIGc7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9jYWxsX2dlbiAoY29uc3QsIHNoYWxsb3cpXG4vL0lmOiBlZmZlY3RzXG4vL1dlYWtkZWZcbmZ1bmN0aW9uIGNhbWxfY2FsbF9nZW4oZiwgYXJncykge1xuICB2YXIgbiA9IChmLmwgPj0gMCk/Zi5sOihmLmwgPSBmLmxlbmd0aCk7XG4gIHZhciBhcmdzTGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gIGlmIChkID09IDApIHtcbiAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTtcbiAgfSBlbHNlIGlmIChkIDwgMCkge1xuICAgIHZhciByZXN0ID0gYXJncy5zbGljZShuIC0gMSk7XG4gICAgdmFyIGsgPSBhcmdzIFthcmdzTGVuIC0gMV07XG4gICAgYXJncyA9IGFyZ3Muc2xpY2UoMCwgbik7XG4gICAgYXJnc1tuIC0gMV0gPSBmdW5jdGlvbiAoZykge1xuICAgICAgaWYgKHR5cGVvZiBnICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBrKGcpO1xuICAgICAgdmFyIGFyZ3MgPSByZXN0LnNsaWNlKCk7XG4gICAgICBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPSBrO1xuICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZywgYXJncyk7IH07XG4gICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgYXJnc0xlbi0tO1xuICAgIHZhciBrID0gYXJncyBbYXJnc0xlbl07XG4gICAgc3dpdGNoIChkKSB7XG4gICAgY2FzZSAxOiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4LCB5KXtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAyKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICBuYXJnc1thcmdzTGVuICsgMV0gPSB5O1xuICAgICAgICByZXR1cm4gZi5hcHBseShudWxsLCBuYXJncylcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAyOiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4LCB5LCB6KXtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAzKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICBuYXJnc1thcmdzTGVuICsgMV0gPSB5O1xuICAgICAgICBuYXJnc1thcmdzTGVuICsgMl0gPSB6O1xuICAgICAgICByZXR1cm4gZi5hcHBseShudWxsLCBuYXJncylcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoKXtcbiAgICAgICAgdmFyIGV4dHJhX2FyZ3MgPSAoYXJndW1lbnRzLmxlbmd0aCA9PSAwKT8xOmFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgZXh0cmFfYXJncyk7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKVxuICAgICAgICAgIG5hcmdzW2FyZ3NMZW4gKyBpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgbmFyZ3MpXG4gICAgICB9O1xuICAgIH19XG4gICAgZy5sID0gZCArIDE7XG4gICAgcmV0dXJuIGsoZyk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9uYW1lZF92YWx1ZXNcbnZhciBjYW1sX25hbWVkX3ZhbHVlcyA9IHt9O1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlIChjb25zdCxtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWUobm0sdikge1xuICBjYW1sX25hbWVkX3ZhbHVlc1tjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5tKV0gPSB2O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9uYW1lZF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZXNcbmZ1bmN0aW9uIGNhbWxfbmFtZWRfdmFsdWUobm0pIHtcbiAgcmV0dXJuIGNhbWxfbmFtZWRfdmFsdWVzW25tXVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dsb2JhbF9kYXRhXG52YXIgY2FtbF9nbG9iYWxfZGF0YSA9IFswXTtcblxuLy9Qcm92aWRlczogY2FtbF9idWlsZF9zeW1ib2xzXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9idWlsZF9zeW1ib2xzKHN5bWIpIHtcbiAgdmFyIHIgPSB7fTtcbiAgaWYoc3ltYikge1xuICAgIGZvcih2YXIgaSA9IDE7IGkgPCBzeW1iLmxlbmd0aDsgaSsrKXtcbiAgICAgIHJbY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoc3ltYltpXVsxXSldID0gc3ltYltpXVsyXVxuICAgIH1cbiAgfVxuICByZXR1cm4gcjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9nbG9iYWwgKGNvbnN0LCBzaGFsbG93LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfY2FsbGJhY2ssIGNhbWxfYnVpbGRfc3ltYm9sc1xuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9nbG9iYWwgKG4sIHYsIG5hbWVfb3B0KSB7XG4gIGlmIChuYW1lX29wdCkge1xuICAgIHZhciBuYW1lID0gbmFtZV9vcHQ7XG4gICAgaWYoZ2xvYmFsVGhpcy50b3BsZXZlbFJlbG9jKSB7XG4gICAgICBuID0gY2FtbF9jYWxsYmFjayhnbG9iYWxUaGlzLnRvcGxldmVsUmVsb2MsIFtuYW1lXSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNhbWxfZ2xvYmFsX2RhdGEuc3ltYm9scykge1xuICAgICAgaWYoIWNhbWxfZ2xvYmFsX2RhdGEuc3ltaWR4KSB7XG4gICAgICAgIGNhbWxfZ2xvYmFsX2RhdGEuc3ltaWR4ID0gY2FtbF9idWlsZF9zeW1ib2xzKGNhbWxfZ2xvYmFsX2RhdGEuc3ltYm9scylcbiAgICAgIH1cbiAgICAgIHZhciBuaWQgPSBjYW1sX2dsb2JhbF9kYXRhLnN5bWlkeFtuYW1lXVxuICAgICAgaWYobmlkID49IDApXG4gICAgICAgIG4gPSBuaWRcbiAgICAgIGVsc2Uge1xuICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9yZWdpc3Rlcl9nbG9iYWw6IGNhbm5vdCBsb2NhdGUgXCIgKyBuYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY2FtbF9nbG9iYWxfZGF0YVtuICsgMV0gPSB2O1xuICBpZihuYW1lX29wdCkgY2FtbF9nbG9iYWxfZGF0YVtuYW1lX29wdF0gPSB2O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9nbG9iYWxfZGF0YSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2dldF9nbG9iYWxfZGF0YSAoKSB7IHJldHVybiBjYW1sX2dsb2JhbF9kYXRhOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfcHJpbnRhYmxlIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfaXNfcHJpbnRhYmxlKGMpIHsgcmV0dXJuICsoYyA+IDMxICYmIGMgPCAxMjcpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWF5YmVfcHJpbnRfc3RhdHNcbmZ1bmN0aW9uIGNhbWxfbWF5YmVfcHJpbnRfc3RhdHModW5pdCkgeyByZXR1cm4gMCB9XG4iLCIvLyBKc19vZl9vY2FtbCBsaWJyYXJ5XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSnNsaWJcblxuLy9Qcm92aWRlczogY2FtbF9qc19wdXJlX2V4cHIgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfcHVyZV9leHByIChmKSB7IHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIFswXSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19zZXQgKG11dGFibGUsIGNvbnN0LCBtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9qc19zZXQobyxmLHYpIHsgb1tmXT12O3JldHVybiAwfVxuLy9Qcm92aWRlczogY2FtbF9qc19nZXQgKG11dGFibGUsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19nZXQobyxmKSB7IHJldHVybiBvW2ZdOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2RlbGV0ZSAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2RlbGV0ZShvLGYpIHsgZGVsZXRlIG9bZl07IHJldHVybiAwfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2luc3RhbmNlb2YgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfaW5zdGFuY2VvZihvLGMpIHsgcmV0dXJuIChvIGluc3RhbmNlb2YgYykgPyAxIDogMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3R5cGVvZiAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3R5cGVvZihvKSB7IHJldHVybiB0eXBlb2YgbzsgfVxuXG4vL1Byb3ZpZGVzOmNhbWxfdHJhbXBvbGluZVxuZnVuY3Rpb24gY2FtbF90cmFtcG9saW5lKHJlcykge1xuICB2YXIgYyA9IDE7XG4gIHdoaWxlKHJlcyAmJiByZXMuam9vX3RyYW1wKXtcbiAgICByZXMgPSByZXMuam9vX3RyYW1wLmFwcGx5KG51bGwsIHJlcy5qb29fYXJncyk7XG4gICAgYysrO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6Y2FtbF90cmFtcG9saW5lX3JldHVyblxuZnVuY3Rpb24gY2FtbF90cmFtcG9saW5lX3JldHVybihmLGFyZ3MpIHtcbiAgcmV0dXJuIHtqb29fdHJhbXA6Zixqb29fYXJnczphcmdzfTtcbn1cblxuLy9Qcm92aWRlczpjYW1sX3N0YWNrX2RlcHRoXG4vL0lmOiBlZmZlY3RzXG52YXIgY2FtbF9zdGFja19kZXB0aCA9IDA7XG5cbi8vUHJvdmlkZXM6Y2FtbF9zdGFja19jaGVja19kZXB0aFxuLy9JZjogZWZmZWN0c1xuLy9SZXF1aXJlczpjYW1sX3N0YWNrX2RlcHRoXG5mdW5jdGlvbiBjYW1sX3N0YWNrX2NoZWNrX2RlcHRoKCkge1xuICAgIHJldHVybiAtLWNhbWxfc3RhY2tfZGVwdGggPiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxiYWNrXG4vL0lmOiAhZWZmZWN0c1xuLy9SZXF1aXJlczpjYW1sX2NhbGxfZ2VuXG52YXIgY2FtbF9jYWxsYmFjayA9IGNhbWxfY2FsbF9nZW47XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbGJhY2tcbi8vSWY6IGVmZmVjdHNcbi8vUmVxdWlyZXM6Y2FtbF9zdGFja19kZXB0aCwgY2FtbF9jYWxsX2dlbiwgY2FtbF9leG5fc3RhY2ssIGNhbWxfZmliZXJfc3RhY2ssIGNhbWxfd3JhcF9leGNlcHRpb24sIGNhbWxfcmVzdW1lX3N0YWNrLCBjYW1sX2ZyZXNoX29vX2lkLCBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX3JhaXNlX3dpdGhfYXJnLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50XG5mdW5jdGlvbiBjYW1sX2NhbGxiYWNrKGYsYXJncykge1xuICBmdW5jdGlvbiB1bmNhdWdodF9lZmZlY3RfaGFuZGxlcihlZmYsayxtcykge1xuICAgIC8vIFJlc3VtZXMgdGhlIGNvbnRpbnVhdGlvbiBrIGJ5IHJhaXNpbmcgZXhjZXB0aW9uIFVuaGFuZGxlZC5cbiAgICBjYW1sX3Jlc3VtZV9zdGFjayhrWzFdLG1zKTtcbiAgICB2YXIgZXhuID0gY2FtbF9uYW1lZF92YWx1ZShcIkVmZmVjdC5VbmhhbmRsZWRcIik7XG4gICAgaWYoZXhuKSBjYW1sX3JhaXNlX3dpdGhfYXJnKGV4biwgZWZmKTtcbiAgICBlbHNlIHtcbiAgICAgIGV4biA9IFsyNDgsY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIkVmZmVjdC5VbmhhbmRsZWRcIiksIGNhbWxfZnJlc2hfb29faWQoMCldO1xuICAgICAgY2FtbF9yYWlzZV9jb25zdGFudChleG4pO1xuICAgIH1cbiAgfVxuICB2YXIgc2F2ZWRfc3RhY2tfZGVwdGggPSBjYW1sX3N0YWNrX2RlcHRoO1xuICB2YXIgc2F2ZWRfZXhuX3N0YWNrID0gY2FtbF9leG5fc3RhY2s7XG4gIHZhciBzYXZlZF9maWJlcl9zdGFjayA9IGNhbWxfZmliZXJfc3RhY2s7XG4gIHRyeSB7XG4gICAgY2FtbF9leG5fc3RhY2sgPSAwO1xuICAgIGNhbWxfZmliZXJfc3RhY2sgPVxuICAgICAge2g6WzAsIDAsIDAsIHVuY2F1Z2h0X2VmZmVjdF9oYW5kbGVyXSwgcjp7azowLCB4OjAsIGU6MH19O1xuICAgIHZhciByZXMgPSB7am9vX3RyYW1wOiBmLFxuICAgICAgICAgICAgICAgam9vX2FyZ3M6IGFyZ3MuY29uY2F0KGZ1bmN0aW9uICh4KXtyZXR1cm4geDt9KX07XG4gICAgZG8ge1xuICAgICAgY2FtbF9zdGFja19kZXB0aCA9IDQwO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzID0gY2FtbF9jYWxsX2dlbihyZXMuam9vX3RyYW1wLCByZXMuam9vX2FyZ3MpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiBIYW5kbGUgZXhjZXB0aW9uIGNvbWluZyBmcm9tIEphdmFTY3JpcHQgb3IgZnJvbSB0aGUgcnVudGltZS4gKi9cbiAgICAgICAgaWYgKCFjYW1sX2V4bl9zdGFjaykgdGhyb3cgZTtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBjYW1sX2V4bl9zdGFja1sxXTtcbiAgICAgICAgY2FtbF9leG5fc3RhY2sgPSBjYW1sX2V4bl9zdGFja1syXTtcbiAgICAgICAgcmVzID0ge2pvb190cmFtcDogaGFuZGxlcixcbiAgICAgICAgICAgICAgIGpvb19hcmdzOiBbY2FtbF93cmFwX2V4Y2VwdGlvbihlKV19O1xuICAgICAgfVxuICAgIH0gd2hpbGUocmVzICYmIHJlcy5qb29fYXJncylcbiAgfSBmaW5hbGx5IHtcbiAgICBjYW1sX3N0YWNrX2RlcHRoID0gc2F2ZWRfc3RhY2tfZGVwdGg7XG4gICAgY2FtbF9leG5fc3RhY2sgPSBzYXZlZF9leG5fc3RhY2s7XG4gICAgY2FtbF9maWJlcl9zdGFjayA9IHNhdmVkX2ZpYmVyX3N0YWNrO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfanNcbmZ1bmN0aW9uIGNhbWxfaXNfanMoKSB7XG4gIHJldHVybiAxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc29vX2ZsYWdzX3VzZV9qc19zdHJpbmcodW5pdCl7XG4gIHJldHVybiBGTEFHKFwidXNlLWpzLXN0cmluZ1wiKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzb29fZmxhZ3NfZWZmZWN0c1xuZnVuY3Rpb24gY2FtbF9qc29vX2ZsYWdzX2VmZmVjdHModW5pdCl7XG4gIHJldHVybiBGTEFHKFwiZWZmZWN0c1wiKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3dyYXBfZXhjZXB0aW9uIGNvbnN0IChtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YSxjYW1sX3N0cmluZ19vZl9qc3N0cmluZyxjYW1sX25hbWVkX3ZhbHVlXG5mdW5jdGlvbiBjYW1sX3dyYXBfZXhjZXB0aW9uKGUpIHtcbiAgaWYgKEZMQUcoXCJleGN3cmFwXCIpKSB7XG4gICAgaWYoZSBpbnN0YW5jZW9mIEFycmF5KSByZXR1cm4gZTtcbiAgICB2YXIgZXhuO1xuICAgIC8vU3RhY2tfb3ZlcmZsb3c6IGNocm9tZSwgc2FmYXJpXG4gICAgaWYoZ2xvYmFsVGhpcy5SYW5nZUVycm9yXG4gICAgICAgJiYgZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuUmFuZ2VFcnJvclxuICAgICAgICYmIGUubWVzc2FnZVxuICAgICAgICYmIGUubWVzc2FnZS5tYXRjaCgvbWF4aW11bSBjYWxsIHN0YWNrL2kpKVxuICAgICAgZXhuID0gY2FtbF9nbG9iYWxfZGF0YS5TdGFja19vdmVyZmxvdztcbiAgICAvL1N0YWNrX292ZXJmbG93OiBmaXJlZm94XG4gICAgZWxzZSBpZihnbG9iYWxUaGlzLkludGVybmFsRXJyb3JcbiAgICAgICAmJiBlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5JbnRlcm5hbEVycm9yXG4gICAgICAgJiYgZS5tZXNzYWdlXG4gICAgICAgJiYgZS5tZXNzYWdlLm1hdGNoKC90b28gbXVjaCByZWN1cnNpb24vaSkpXG4gICAgICBleG4gPSBjYW1sX2dsb2JhbF9kYXRhLlN0YWNrX292ZXJmbG93O1xuICAgIC8vV3JhcCBFcnJvciBpbiBKcy5FcnJvciBleGNlcHRpb25cbiAgICBlbHNlIGlmKGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLkVycm9yICYmIGNhbWxfbmFtZWRfdmFsdWUoXCJqc0Vycm9yXCIpKVxuICAgICAgZXhuID0gWzAsY2FtbF9uYW1lZF92YWx1ZShcImpzRXJyb3JcIiksZV07XG4gICAgZWxzZVxuICAgICAgLy9mYWxsYmFjazogd3JhcHBlZCBpbiBGYWlsdXJlXG4gICAgICBleG4gPSBbMCxjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUsY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKFN0cmluZyhlKSldO1xuICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBlcnJvciBhdCBoYW5kLCBsZXQncyB1c2UgaXQuXG4gICAgaWYgKGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLkVycm9yKVxuICAgICAgZXhuLmpzX2Vycm9yID0gZTtcbiAgICByZXR1cm4gZXhuO1xuICB9IGVsc2VcbiAgICByZXR1cm4gZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG4vL1JlcXVpcmVzOiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWdcbmZ1bmN0aW9uIGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZShleG4sIGZvcmNlKSB7XG4gIGlmKGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnKVxuICAgIHJldHVybiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZShleG4sIGZvcmNlKTtcbiAgZWxzZSByZXR1cm4gZXhuXG59XG5cbi8vIEV4cGVyaW1lbnRhbFxuLy9Qcm92aWRlczogY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlKGV4biwgZm9yY2UpIHtcbiAgLy9uZXZlciByZXJhaXNlIGZvciBjb25zdGFudCBleG5cbiAgaWYoIWV4bi5qc19lcnJvciB8fCBmb3JjZSB8fCBleG5bMF0gPT0gMjQ4KSBleG4uanNfZXJyb3IgPSBuZXcgZ2xvYmFsVGhpcy5FcnJvcihcIkpzIGV4Y2VwdGlvbiBjb250YWluaW5nIGJhY2t0cmFjZVwiKTtcbiAgcmV0dXJuIGV4bjtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfanNfZXJyb3Jfb3B0aW9uX29mX2V4Y2VwdGlvbihleG4pIHtcbiAgaWYoZXhuLmpzX2Vycm9yKSB7IHJldHVybiBbMCwgZXhuLmpzX2Vycm9yXTsgfVxuICByZXR1cm4gMDtcbn1cblxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9ib29sIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9ib29sKHgpIHsgcmV0dXJuICEheDsgfVxuLy9Qcm92aWRlczogY2FtbF9qc190b19ib29sIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdG9fYm9vbCh4KSB7IHJldHVybiAreDsgfVxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2Zsb2F0IGNvbnN0IChjb25zdClcbi8vQWxpYXM6IGNhbWxfanNfZnJvbV9pbnQzMlxuLy9BbGlhczogY2FtbF9qc19mcm9tX25hdGl2ZWludFxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2Zsb2F0KHgpIHsgcmV0dXJuIHg7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fZmxvYXQgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc190b19mbG9hdCh4KSB7IHJldHVybiB4OyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2ludDMyIGNvbnN0IChjb25zdClcbi8vQWxpYXM6IGNhbWxfanNfdG9fbmF0aXZlaW50XG5mdW5jdGlvbiBjYW1sX2pzX3RvX2ludDMyKHgpIHsgcmV0dXJuIHh8MDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fYXJyYXkgbXV0YWJsZSAoc2hhbGxvdylcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9hcnJheShhKSB7XG4gIHJldHVybiBhLnNsaWNlKDEpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc190b19hcnJheSBtdXRhYmxlIChzaGFsbG93KVxuZnVuY3Rpb24gY2FtbF9qc190b19hcnJheShhKSB7XG4gIHZhciBsZW4gPSBhLmxlbmd0aDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKzEpO1xuICBiWzBdID0gMDtcbiAgZm9yKHZhciBpPTA7aTxsZW47aSsrKSBiW2krMV0gPSBhW2ldO1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9saXN0X29mX2pzX2FycmF5IGNvbnN0IChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9saXN0X29mX2pzX2FycmF5KGEpe1xuICB2YXIgbCA9IDA7XG4gIGZvcih2YXIgaT1hLmxlbmd0aCAtIDE7IGk+PTA7IGktLSl7XG4gICAgdmFyIGUgPSBhW2ldO1xuICAgIGwgPSBbMCxlLGxdO1xuICB9XG4gIHJldHVybiBsXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGlzdF90b19qc19hcnJheSBjb25zdCAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfbGlzdF90b19qc19hcnJheShsKXtcbiAgdmFyIGEgPSBbXTtcbiAgZm9yKDsgbCAhPT0gMDsgbCA9IGxbMl0pIHtcbiAgICBhLnB1c2gobFsxXSk7XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdmFyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX3Zhcih4KSB7XG4gIHZhciB4ID0gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoeCk7XG4gIC8vQ2hlY2tzIHRoYXQgeCBoYXMgdGhlIGZvcm0gaWRlbnRbLmlkZW50XSpcbiAgaWYoIXgubWF0Y2goL15bYS16QS1aXyRdW2EtekEtWl8kMC05XSooXFwuW2EtekEtWl8kXVthLXpBLVpfJDAtOV0qKSokLykpe1xuICAgIGNvbnNvbGUuZXJyb3IoXCJjYW1sX2pzX3ZhcjogXFxcIlwiICsgeCArIFwiXFxcIiBpcyBub3QgYSB2YWxpZCBKYXZhU2NyaXB0IHZhcmlhYmxlLiBjb250aW51aW5nIC4uXCIpO1xuICAgIC8vY29uc29sZS5lcnJvcihcIkpzLlVuc2FmZS5ldmFsX3N0cmluZ1wiKVxuICB9XG4gIHJldHVybiBldmFsKHgpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19jYWxsIChjb25zdCwgbXV0YWJsZSwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19jYWxsKGYsIG8sIGFyZ3MpIHsgcmV0dXJuIGYuYXBwbHkobywgY2FtbF9qc19mcm9tX2FycmF5KGFyZ3MpKTsgfVxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5fY2FsbCAoY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfZnVuX2NhbGwoZiwgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gIGNhc2UgMTogcmV0dXJuIGYoKTtcbiAgY2FzZSAyOiByZXR1cm4gZiAoYVsxXSk7XG4gIGNhc2UgMzogcmV0dXJuIGYgKGFbMV0sYVsyXSk7XG4gIGNhc2UgNDogcmV0dXJuIGYgKGFbMV0sYVsyXSxhWzNdKTtcbiAgY2FzZSA1OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSk7XG4gIGNhc2UgNjogcmV0dXJuIGYgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSk7XG4gIGNhc2UgNzogcmV0dXJuIGYgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdKTtcbiAgY2FzZSA4OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0sYVs3XSk7XG4gIH1cbiAgcmV0dXJuIGYuYXBwbHkobnVsbCwgY2FtbF9qc19mcm9tX2FycmF5KGEpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfbWV0aF9jYWxsIChtdXRhYmxlLCBjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfbWV0aF9jYWxsKG8sIGYsIGFyZ3MpIHtcbiAgcmV0dXJuIG9bY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoZildLmFwcGx5KG8sIGNhbWxfanNfZnJvbV9hcnJheShhcmdzKSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX25ldyAoY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfbmV3KGMsIGEpIHtcbiAgc3dpdGNoIChhLmxlbmd0aCkge1xuICBjYXNlIDE6IHJldHVybiBuZXcgYztcbiAgY2FzZSAyOiByZXR1cm4gbmV3IGMgKGFbMV0pO1xuICBjYXNlIDM6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdKTtcbiAgY2FzZSA0OiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSxhWzNdKTtcbiAgY2FzZSA1OiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSxhWzNdLGFbNF0pO1xuICBjYXNlIDY6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdKTtcbiAgY2FzZSA3OiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdKTtcbiAgY2FzZSA4OiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdLGFbN10pO1xuICB9XG4gIGZ1bmN0aW9uIEYoKSB7IHJldHVybiBjLmFwcGx5KHRoaXMsIGNhbWxfanNfZnJvbV9hcnJheShhKSk7IH1cbiAgRi5wcm90b3R5cGUgPSBjLnByb3RvdHlwZTtcbiAgcmV0dXJuIG5ldyBGO1xufVxuLy9Qcm92aWRlczogY2FtbF9vanNfbmV3X2FyciAoY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb2pzX25ld19hcnIoYywgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gIGNhc2UgMDogcmV0dXJuIG5ldyBjO1xuICBjYXNlIDE6IHJldHVybiBuZXcgYyAoYVswXSk7XG4gIGNhc2UgMjogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0pO1xuICBjYXNlIDM6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdLGFbMl0pO1xuICBjYXNlIDQ6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdLGFbMl0sYVszXSk7XG4gIGNhc2UgNTogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdLGFbNF0pO1xuICBjYXNlIDY6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0pO1xuICBjYXNlIDc6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSk7XG4gIH1cbiAgZnVuY3Rpb24gRigpIHsgcmV0dXJuIGMuYXBwbHkodGhpcywgYSk7IH1cbiAgRi5wcm90b3R5cGUgPSBjLnByb3RvdHlwZTtcbiAgcmV0dXJuIG5ldyBGO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFjayhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgaWYobGVuID4gMCl7XG4gICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncyA9IFt1bmRlZmluZWRdO1xuICAgIH1cbiAgICB2YXIgcmVzID0gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgICByZXR1cm4gKHJlcyBpbnN0YW5jZW9mIEZ1bmN0aW9uKT9jYW1sX2pzX3dyYXBfY2FsbGJhY2socmVzKTpyZXM7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1xuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50cyhmKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgW2FyZ3NdKTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdChhcml0eSwgZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcml0eSk7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGgsIGFyaXR5KVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfdW5zYWZlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmUoZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTsgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2sgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFjaywgY2FtbF9qc193cmFwX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFjayhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgYXJnc1swXSA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpKzFdID0gYXJndW1lbnRzW2ldO1xuICAgIHZhciByZXMgPSBjYW1sX2NhbGxiYWNrKGYsYXJncyk7XG4gICAgcmV0dXJuIChyZXMgaW5zdGFuY2VvZiBGdW5jdGlvbik/Y2FtbF9qc193cmFwX2NhbGxiYWNrKHJlcyk6cmVzO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHMgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZixbdGhpcyxhcmdzXSk7XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJpdHkgKyAxKTtcbiAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCwgYXJpdHkpXG4gICAgYXJnc1swXSA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpKzFdID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpO1xuICB9O1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZShmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikgLSAxO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICAgIGFyZ3NbMF0gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaSsxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTsgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG4vL0lmOiAhZWZmZWN0c1xuZnVuY3Rpb24gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKSB7XG4gIHJldHVybiAoZi5sID49IDApP2YubDooZi5sID0gZi5sZW5ndGgpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbi8vSWY6IGVmZmVjdHNcbmZ1bmN0aW9uIGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikge1xuICAvLyBGdW5jdGlvbnMgaGF2ZSBhbiBhZGRpdGlvbmFsIGNvbnRpbnVhdGlvbiBwYXJhbWV0ZXIuIFRoaXMgc2hvdWxkXG4gIC8vIG5vdCBiZSB2aXNpYmxlIHdoZW4gY2FsbGluZyB0aGVtIGZyb20gSmF2YVNjcmlwdFxuICByZXR1cm4gKChmLmwgPj0gMCk/Zi5sOihmLmwgPSBmLmxlbmd0aCkpIC0gMVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2VxdWFscyBtdXRhYmxlIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2VxdWFscyAoeCwgeSkgeyByZXR1cm4gKyh4ID09IHkpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfc3RyaWN0X2VxdWFscyBtdXRhYmxlIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3N0cmljdF9lcXVhbHMgKHgsIHkpIHsgcmV0dXJuICsoeCA9PT0geSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19ldmFsX3N0cmluZyAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19ldmFsX3N0cmluZyAocykge3JldHVybiBldmFsKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpKTt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXhwciAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19leHByKHMpIHtcbiAgY29uc29sZS5lcnJvcihcImNhbWxfanNfZXhwcjogZmFsbGJhY2sgdG8gcnVudGltZSBldmFsdWF0aW9uXFxuXCIpO1xuICByZXR1cm4gZXZhbChjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKSk7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3B1cmVfanNfZXhwciBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9wdXJlX2pzX2V4cHIgKHMpe1xuICBjb25zb2xlLmVycm9yKFwiY2FtbF9wdXJlX2pzX2V4cHI6IGZhbGxiYWNrIHRvIHJ1bnRpbWUgZXZhbHVhdGlvblxcblwiKTtcbiAgcmV0dXJuIGV2YWwoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO31cblxuLy9Qcm92aWRlczogY2FtbF9qc19vYmplY3QgKG9iamVjdF9saXRlcmFsKVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfb2JqZWN0IChhKSB7XG4gIHZhciBvID0ge307XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwID0gYVtpXTtcbiAgICBvW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHBbMV0pXSA9IHBbMl07XG4gIH1cbiAgcmV0dXJuIG87XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1JhaXNlIGV4Y2VwdGlvblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX2NvbnN0YW50IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfcmFpc2VfY29uc3RhbnQgKHRhZykgeyB0aHJvdyB0YWc7IH1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV93aXRoX2FyZyAoY29uc3QsIG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2VcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfd2l0aF9hcmcgKHRhZywgYXJnKSB7IHRocm93IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZShbMCwgdGFnLCBhcmddKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3dpdGhfYXJncyAoY29uc3QsIG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2VcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfd2l0aF9hcmdzICh0YWcsIGFyZ3MpIHsgdGhyb3cgY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKFswLCB0YWddLmNvbmNhdChhcmdzKSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZyAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX2FyZywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9yYWlzZV93aXRoX3N0cmluZyAodGFnLCBtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX2FyZyAodGFnLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG1zZykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZhaWx3aXRoIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcsIGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZmFpbHdpdGggKG1zZykge1xuICBpZighY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlKVxuICAgIGNhbWxfZ2xvYmFsX2RhdGEuRmFpbHVyZT1bMjQ4LGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJGYWlsdXJlXCIpLC0zXTtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUsIG1zZyk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfaW52YWxpZF9hcmd1bWVudCAobXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5JbnZhbGlkX2FyZ3VtZW50LCBtc2cpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlICgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLkVuZF9vZl9maWxlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9jb25zdGFudCwgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKSB7XG4gIGNhbWxfcmFpc2VfY29uc3RhbnQoY2FtbF9nbG9iYWxfZGF0YS5EaXZpc2lvbl9ieV96ZXJvKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfbm90X2ZvdW5kICgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLk5vdF9mb3VuZCk7IH1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGpzb29fZmxvb3JfbG9nMlxudmFyIGxvZzJfb2sgPSBNYXRoLmxvZzIgJiYgTWF0aC5sb2cyKDEuMTIzNTU4MjA5Mjg4OTQ3NEUrMzA3KSA9PSAxMDIwXG5mdW5jdGlvbiBqc29vX2Zsb29yX2xvZzIoeCkge1xuICBpZihsb2cyX29rKSByZXR1cm4gTWF0aC5mbG9vcihNYXRoLmxvZzIoeCkpXG4gIHZhciBpID0gMDtcbiAgaWYgKHggPT0gMCkgcmV0dXJuIC1JbmZpbml0eTtcbiAgaWYoeD49MSkge3doaWxlICh4Pj0yKSB7eC89MjsgaSsrfSB9XG4gIGVsc2Uge3doaWxlICh4IDwgMSkge3gqPTI7IGktLX0gfTtcbiAgcmV0dXJuIGk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczoganNvb19mbG9vcl9sb2cyLCBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaVxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0ICh4KSB7XG4gIGlmICghaXNGaW5pdGUoeCkpIHtcbiAgICBpZiAoaXNOYU4oeCkpXG4gICAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkoMSwgMCwgMHg3ZmYwKTtcbiAgICBpZiAoeCA+IDApXG4gICAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkoMCwgMCwgMHg3ZmYwKVxuICAgIGVsc2VcbiAgICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSgwLCAwLCAweGZmZjApXG4gIH1cbiAgdmFyIHNpZ24gPSAoeD09MCAmJiAxL3ggPT0gLUluZmluaXR5KT8weDgwMDA6KHg+PTApPzA6MHg4MDAwO1xuICBpZiAoc2lnbikgeCA9IC14O1xuICAvLyBJbnQ2NC5iaXRzX29mX2Zsb2F0IDEuMTIzNTU4MjA5Mjg4OTQ3NEUrMzA3ID0gMHg3ZmIwMDAwMDAwMDAwMDAwTFxuICAvLyB1c2luZyBNYXRoLkxPRzJFKk1hdGgubG9nKHgpIGluIHBsYWNlIG9mIE1hdGgubG9nMiByZXN1bHQgaW4gcHJlY2lzaW9uIGxvc3RcbiAgdmFyIGV4cCA9IGpzb29fZmxvb3JfbG9nMih4KSArIDEwMjM7XG4gIGlmIChleHAgPD0gMCkge1xuICAgIGV4cCA9IDA7XG4gICAgeCAvPSBNYXRoLnBvdygyLC0xMDI2KTtcbiAgfSBlbHNlIHtcbiAgICB4IC89IE1hdGgucG93KDIsZXhwLTEwMjcpO1xuICAgIGlmICh4IDwgMTYpIHtcbiAgICAgIHggKj0gMjsgZXhwIC09MTsgfVxuICAgIGlmIChleHAgPT0gMCkge1xuICAgICAgeCAvPSAyOyB9XG4gIH1cbiAgdmFyIGsgPSBNYXRoLnBvdygyLDI0KTtcbiAgdmFyIHIzID0geHwwO1xuICB4ID0gKHggLSByMykgKiBrO1xuICB2YXIgcjIgPSB4fDA7XG4gIHggPSAoeCAtIHIyKSAqIGs7XG4gIHZhciByMSA9IHh8MDtcbiAgcjMgPSAocjMgJjB4ZikgfCBzaWduIHwgZXhwIDw8IDQ7XG4gIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaShyMSwgcjIsIHIzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2Zsb29yX2xvZzJcbmZ1bmN0aW9uIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdCAoeCkge1xuICB2YXIgZmxvYXQzMmEgPSBuZXcgRmxvYXQzMkFycmF5KDEpO1xuICBmbG9hdDMyYVswXSA9IHg7XG4gIHZhciBpbnQzMmEgPSBuZXcgSW50MzJBcnJheShmbG9hdDMyYS5idWZmZXIpO1xuICByZXR1cm4gaW50MzJhWzBdIHwgMDtcbn1cblxuLy9GUCBsaXRlcmFscyBjYW4gYmUgd3JpdHRlbiB1c2luZyB0aGUgaGV4YWRlY2ltYWxcbi8vbm90YXRpb24gMHg8bWFudGlzc2EgaW4gaGV4PnA8ZXhwb25lbnQ+IGZyb20gSVNPIEM5OS5cbi8vaHR0cHM6Ly9naXRodWIuY29tL2RhbmtvZ2FpL2pzLWhleGZsb2F0L2Jsb2IvbWFzdGVyL2hleGZsb2F0LmpzXG4vL1Byb3ZpZGVzOiBjYW1sX2hleHN0cmluZ19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcsIGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQgKHgsIHByZWMsIHN0eWxlKSB7XG4gIGlmICghaXNGaW5pdGUoeCkpIHtcbiAgICBpZiAoaXNOYU4oeCkpIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhcIm5hblwiKTtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKCh4ID4gMCk/XCJpbmZpbml0eVwiOlwiLWluZmluaXR5XCIpO1xuICB9XG4gIHZhciBzaWduID0gKHg9PTAgJiYgMS94ID09IC1JbmZpbml0eSk/MTooeD49MCk/MDoxO1xuICBpZihzaWduKSB4ID0gLXg7XG4gIHZhciBleHAgPSAwO1xuICBpZiAoeCA9PSAwKSB7IH1cbiAgZWxzZSBpZiAoeCA8IDEpIHtcbiAgICB3aGlsZSAoeCA8IDEgJiYgZXhwID4gLTEwMjIpICB7IHggKj0gMjsgZXhwLS0gfVxuICB9IGVsc2Uge1xuICAgIHdoaWxlICh4ID49IDIpIHsgeCAvPSAyOyBleHArKyB9XG4gIH1cbiAgdmFyIGV4cF9zaWduID0gZXhwIDwgMCA/ICcnIDogJysnO1xuICB2YXIgc2lnbl9zdHIgPSAnJztcbiAgaWYgKHNpZ24pIHNpZ25fc3RyID0gJy0nXG4gIGVsc2Uge1xuICAgIHN3aXRjaChzdHlsZSl7XG4gICAgY2FzZSA0MyAvKiAnKycgKi86IHNpZ25fc3RyID0gJysnOyBicmVhaztcbiAgICBjYXNlIDMyIC8qICcgJyAqLzogc2lnbl9zdHIgPSAnICc7IGJyZWFrO1xuICAgIGRlZmF1bHQ6IGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAocHJlYyA+PSAwICYmIHByZWMgPCAxMykge1xuICAgIC8qIElmIGEgcHJlY2lzaW9uIGlzIGdpdmVuLCBhbmQgaXMgc21hbGwsIHJvdW5kIG1hbnRpc3NhIGFjY29yZGluZ2x5ICovXG4gICAgdmFyIGNzdCA9IE1hdGgucG93KDIscHJlYyAqIDQpO1xuICAgIHggPSBNYXRoLnJvdW5kKHggKiBjc3QpIC8gY3N0O1xuICB9XG4gIHZhciB4X3N0ciA9IHgudG9TdHJpbmcoMTYpO1xuICBpZihwcmVjID49IDApe1xuICAgIHZhciBpZHggPSB4X3N0ci5pbmRleE9mKCcuJyk7XG4gICAgaWYoaWR4PDApIHtcbiAgICAgIHhfc3RyICs9ICcuJyArIGNhbWxfc3RyX3JlcGVhdChwcmVjLCAnMCcpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBzaXplID0gaWR4KzErcHJlYztcbiAgICAgIGlmKHhfc3RyLmxlbmd0aCA8IHNpemUpXG4gICAgICAgIHhfc3RyICs9IGNhbWxfc3RyX3JlcGVhdChzaXplIC0geF9zdHIubGVuZ3RoLCAnMCcpO1xuICAgICAgZWxzZVxuICAgICAgICB4X3N0ciA9IHhfc3RyLnN1YnN0cigwLHNpemUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHNpZ25fc3RyICsgJzB4JyArIHhfc3RyICsgJ3AnICsgZXhwX3NpZ24gKyBleHAudG9TdHJpbmcoMTApKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgKHgpIHtcbiAgdmFyIGxvID0geC5sbztcbiAgdmFyIG1pID0geC5taTtcbiAgdmFyIGhpID0geC5oaTtcbiAgdmFyIGV4cCA9IChoaSAmIDB4N2ZmZikgPj4gNDtcbiAgaWYgKGV4cCA9PSAyMDQ3KSB7XG4gICAgaWYgKChsb3xtaXwoaGkmMHhmKSkgPT0gMClcbiAgICAgIHJldHVybiAoaGkgJiAweDgwMDApPygtSW5maW5pdHkpOkluZmluaXR5O1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBOYU47XG4gIH1cbiAgdmFyIGsgPSBNYXRoLnBvdygyLC0yNCk7XG4gIHZhciByZXMgPSAobG8qayttaSkqaysoaGkmMHhmKTtcbiAgaWYgKGV4cCA+IDApIHtcbiAgICByZXMgKz0gMTY7XG4gICAgcmVzICo9IE1hdGgucG93KDIsZXhwLTEwMjcpO1xuICB9IGVsc2VcbiAgICByZXMgKj0gTWF0aC5wb3coMiwtMTAyNik7XG4gIGlmIChoaSAmIDB4ODAwMCkgcmVzID0gLSByZXM7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmV4dGFmdGVyX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMsIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCwgY2FtbF9pbnQ2NF9hZGQsIGNhbWxfaW50NjRfc3ViLGNhbWxfaW50NjRfb2ZfaW50MzJcbmZ1bmN0aW9uIGNhbWxfbmV4dGFmdGVyX2Zsb2F0ICh4LHkpIHtcbiAgaWYoaXNOYU4oeCkgfHwgaXNOYU4oeSkpIHJldHVybiBOYU47XG4gIGlmKHg9PXkpIHJldHVybiB5O1xuICBpZih4PT0wKXtcbiAgICBpZih5IDwgMClcbiAgICAgIHJldHVybiAtTWF0aC5wb3coMiwgLTEwNzQpXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIE1hdGgucG93KDIsIC0xMDc0KVxuICB9XG4gIHZhciBiaXRzID0gY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHgpO1xuICB2YXIgb25lID0gY2FtbF9pbnQ2NF9vZl9pbnQzMigxKTtcbiAgaWYgKCh4PHkpID09ICh4PjApKVxuICAgIGJpdHMgPSBjYW1sX2ludDY0X2FkZChiaXRzLCBvbmUpXG4gIGVsc2VcbiAgICBiaXRzID0gY2FtbF9pbnQ2NF9zdWIoYml0cywgb25lKVxuICByZXR1cm4gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGJpdHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RydW5jX2Zsb2F0XG5mdW5jdGlvbiBjYW1sX3RydW5jX2Zsb2F0KHgpe1xuICByZXR1cm4gTWF0aC50cnVuYyh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMgKHgpIHtcbiAgdmFyIGludDMyYSA9IG5ldyBJbnQzMkFycmF5KDEpO1xuICBpbnQzMmFbMF0gPSB4O1xuICB2YXIgZmxvYXQzMmEgPSBuZXcgRmxvYXQzMkFycmF5KGludDMyYS5idWZmZXIpO1xuICByZXR1cm4gZmxvYXQzMmFbMF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2xhc3NpZnlfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY2xhc3NpZnlfZmxvYXQgKHgpIHtcbiAgaWYgKGlzRmluaXRlICh4KSkge1xuICAgIGlmIChNYXRoLmFicyh4KSA+PSAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwOCkgcmV0dXJuIDA7XG4gICAgaWYgKHggIT0gMCkgcmV0dXJuIDE7XG4gICAgcmV0dXJuIDI7XG4gIH1cbiAgcmV0dXJuIGlzTmFOKHgpPzQ6Mztcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbW9kZl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tb2RmX2Zsb2F0ICh4KSB7XG4gIGlmIChpc0Zpbml0ZSAoeCkpIHtcbiAgICB2YXIgbmVnID0gKDEveCkgPCAwO1xuICAgIHggPSBNYXRoLmFicyh4KTtcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IgKHgpO1xuICAgIHZhciBmID0geCAtIGk7XG4gICAgaWYgKG5lZykgeyBpID0gLWk7IGYgPSAtZjsgfVxuICAgIHJldHVybiBbMCwgZiwgaV07XG4gIH1cbiAgaWYgKGlzTmFOICh4KSkgcmV0dXJuIFswLCBOYU4sIE5hTl07XG4gIHJldHVybiBbMCwgMS94LCB4XTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbGRleHBfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbGRleHBfZmxvYXQgKHgsZXhwKSB7XG4gIGV4cCB8PSAwO1xuICBpZiAoZXhwID4gMTAyMykge1xuICAgIGV4cCAtPSAxMDIzO1xuICAgIHggKj0gTWF0aC5wb3coMiwgMTAyMyk7XG4gICAgaWYgKGV4cCA+IDEwMjMpIHsgIC8vIGluIGNhc2UgeCBpcyBzdWJub3JtYWxcbiAgICAgIGV4cCAtPSAxMDIzO1xuICAgICAgeCAqPSBNYXRoLnBvdygyLCAxMDIzKTtcbiAgICB9XG4gIH1cbiAgaWYgKGV4cCA8IC0xMDIzKSB7XG4gICAgZXhwICs9IDEwMjM7XG4gICAgeCAqPSBNYXRoLnBvdygyLCAtMTAyMyk7XG4gIH1cbiAgeCAqPSBNYXRoLnBvdygyLCBleHApO1xuICByZXR1cm4geDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZnJleHBfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZmxvb3JfbG9nMlxuZnVuY3Rpb24gY2FtbF9mcmV4cF9mbG9hdCAoeCkge1xuICBpZiAoKHggPT0gMCkgfHwgIWlzRmluaXRlKHgpKSByZXR1cm4gWzAsIHgsIDBdO1xuICB2YXIgbmVnID0geCA8IDA7XG4gIGlmIChuZWcpIHggPSAtIHg7XG4gIHZhciBleHAgPSBNYXRoLm1heCgtMTAyMywganNvb19mbG9vcl9sb2cyKHgpICsgMSk7XG4gIHggKj0gTWF0aC5wb3coMiwtZXhwKTtcbiAgd2hpbGUgKHggPCAwLjUpIHtcbiAgICB4ICo9IDI7XG4gICAgZXhwLS07XG4gIH1cbiAgd2hpbGUgKHggPj0gMSkge1xuICAgIHggKj0gMC41O1xuICAgIGV4cCsrO1xuICB9XG4gIGlmIChuZWcpIHggPSAtIHg7XG4gIHJldHVybiBbMCwgeCwgZXhwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9jb21wYXJlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Zsb2F0X2NvbXBhcmUgKHgsIHkpIHtcbiAgaWYgKHggPT09IHkpIHJldHVybiAwO1xuICBpZiAoeCA8IHkpIHJldHVybiAtMTtcbiAgaWYgKHggPiB5KSByZXR1cm4gMTtcbiAgaWYgKHggPT09IHgpIHJldHVybiAxO1xuICBpZiAoeSA9PT0geSkgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb3B5c2lnbl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jb3B5c2lnbl9mbG9hdCAoeCwgeSkge1xuICBpZiAoeSA9PSAwKSB5ID0gMSAvIHk7XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgcmV0dXJuICh5IDwgMCk/KC14KTp4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NpZ25iaXRfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc2lnbmJpdF9mbG9hdCh4KSB7XG4gIGlmICh4ID09IDApIHggPSAxIC8geDtcbiAgcmV0dXJuICh4IDwgMCk/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2V4cG0xX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2V4cG0xX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmV4cG0xKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2V4cDJfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXhwMl9mbG9hdCh4KSB7IHJldHVybiBNYXRoLnBvdygyLCB4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9sb2cxcF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sb2cxcF9mbG9hdCh4KSB7IHJldHVybiBNYXRoLmxvZzFwKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzJfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMl9mbG9hdCh4KSB7IHJldHVybiBNYXRoLmxvZzIoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfaHlwb3RfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaHlwb3RfZmxvYXQgKHgsIHkpIHsgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbG9nMTBfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMTBfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGgubG9nMTAoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfY29zaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jb3NoX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmNvc2goeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYWNvc2hfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYWNvc2hfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguYWNvc2goeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfc2luaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9zaW5oX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLnNpbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYXNpbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYXNpbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguYXNpbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfdGFuaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF90YW5oX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLnRhbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYXRhbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYXRhbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguYXRhbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfcm91bmRfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfcm91bmRfZmxvYXQgKHgpIHtcbiAgaWYgKHggPj0gMCkge1xuICAgIHZhciB5ID0gTWF0aC5mbG9vcih4KTtcbiAgICByZXR1cm4gKHggLSB5ID49IDAuNSk/KHkgKyAxKTp5XG4gIH0gZWxzZSB7XG4gICAgdmFyIHkgPSBNYXRoLmNlaWwoeCk7XG4gICAgcmV0dXJuICh5IC0geCA+PSAwLjUpPyh5IC0gMSk6eVxuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2NicnRfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY2JydF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5jYnJ0KHgpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXJmX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2VyZl9mbG9hdCh4KSB7XG4gIHZhciBhMSA9IDAuMjU0ODI5NTkyO1xuICB2YXIgYTIgPSAtMC4yODQ0OTY3MzY7XG4gIHZhciBhMyA9IDEuNDIxNDEzNzQxO1xuICB2YXIgYTQgPSAtMS40NTMxNTIwMjc7XG4gIHZhciBhNSA9IDEuMDYxNDA1NDI5O1xuICB2YXIgcCA9IDAuMzI3NTkxMTtcblxuICB2YXIgc2lnbiA9IDE7XG4gIGlmICh4IDwgMCkge1xuICAgIHNpZ24gPSAtMTtcbiAgfVxuICB4ID0gTWF0aC5hYnMoeCk7XG4gIHZhciB0ID0gMS4wIC8gKDEuMCArIHAgKiB4KTtcbiAgdmFyIHkgPSAxLjAgLSAoKCgoYTUgKiB0ICsgYTQpICogdCArIGEzKSAqIHQgKyBhMikgKiB0ICsgYTEpICogdCAqIE1hdGguZXhwKC14ICogeCk7XG5cbiAgcmV0dXJuIHNpZ24gKiB5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VyZmNfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfZXJmX2Zsb2F0XG5mdW5jdGlvbiBjYW1sX2VyZmNfZmxvYXQoeCkge1xuICByZXR1cm4gMSAtIGNhbWxfZXJmX2Zsb2F0KHgpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZm1hX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ZtYV9mbG9hdCh4LCB5LCB6KSB7XG4gIHZhciBTUExJVCA9IE1hdGgucG93KDIsIDI3KSArIDE7XG4gIHZhciBNSU5fVkFMVUUgPSBNYXRoLnBvdygyLCAtMTAyMik7XG4gIHZhciBFUFNJTE9OID0gTWF0aC5wb3coMiwgLTUyKTtcbiAgdmFyIEMgPSA0MTY7XG4gIHZhciBBID0gTWF0aC5wb3coMiwgK0MpO1xuICB2YXIgQiA9IE1hdGgucG93KDIsIC1DKTtcblxuICBmdW5jdGlvbiBtdWx0aXBseSAoYSwgYikge1xuICAgIHZhciBhdCA9IFNQTElUICogYTtcbiAgICB2YXIgYWhpID0gYXQgLSAoYXQgLSBhKTtcbiAgICB2YXIgYWxvID0gYSAtIGFoaTtcbiAgICB2YXIgYnQgPSBTUExJVCAqIGI7XG4gICAgdmFyIGJoaSA9IGJ0IC0gKGJ0IC0gYik7XG4gICAgdmFyIGJsbyA9IGIgLSBiaGk7XG4gICAgdmFyIHAgPSBhICogYjtcbiAgICB2YXIgZSA9ICgoYWhpICogYmhpIC0gcCkgKyBhaGkgKiBibG8gKyBhbG8gKiBiaGkpICsgYWxvICogYmxvO1xuICAgIHJldHVybiB7XG4gICAgICBwOiBwLFxuICAgICAgZTogZVxuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gYWRkIChhLCBiKSB7XG4gICAgdmFyIHMgPSBhICsgYjtcbiAgICB2YXIgdiA9IHMgLSBhO1xuICAgIHZhciBlID0gKGEgLSAocyAtIHYpKSArIChiIC0gdik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHM6IHMsXG4gICAgICBlOiBlXG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBhZGp1c3QgKHgsIHkpIHtcbiAgICByZXR1cm4geCAhPT0gMCAmJiB5ICE9PSAwICYmIFNQTElUICogeCAtIChTUExJVCAqIHggLSB4KSA9PT0geCA/IHggKiAoMSArICh4IDwgMCA/IC0xIDogKzEpICogKHkgPCAwID8gLTEgOiArMSkgKiBFUFNJTE9OKSA6IHg7XG4gIH07XG5cbiAgaWYgKHggPT09IDAgfHwgeCAhPT0geCB8fCB4ID09PSArMSAvIDAgfHwgeCA9PT0gLTEgLyAwIHx8XG4gICAgICB5ID09PSAwIHx8IHkgIT09IHkgfHwgeSA9PT0gKzEgLyAwIHx8IHkgPT09IC0xIC8gMCkge1xuICAgIHJldHVybiB4ICogeSArIHo7XG4gIH1cbiAgaWYgKHogPT09IDApIHtcbiAgICByZXR1cm4geCAqIHk7XG4gIH1cbiAgaWYgKHogIT09IHogfHwgeiA9PT0gKzEgLyAwIHx8IHogPT09IC0xIC8gMCkge1xuICAgIHJldHVybiB6O1xuICB9XG5cbiAgdmFyIHNjYWxlID0gMTtcbiAgd2hpbGUgKE1hdGguYWJzKHgpID4gQSkge1xuICAgIHNjYWxlICo9IEE7XG4gICAgeCAqPSBCO1xuICB9XG4gIHdoaWxlIChNYXRoLmFicyh5KSA+IEEpIHtcbiAgICBzY2FsZSAqPSBBO1xuICAgIHkgKj0gQjtcbiAgfVxuICBpZiAoc2NhbGUgPT09IDEgLyAwKSB7XG4gICAgcmV0dXJuIHggKiB5ICogc2NhbGU7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHgpIDwgQikge1xuICAgIHNjYWxlICo9IEI7XG4gICAgeCAqPSBBO1xuICB9XG4gIHdoaWxlIChNYXRoLmFicyh5KSA8IEIpIHtcbiAgICBzY2FsZSAqPSBCO1xuICAgIHkgKj0gQTtcbiAgfVxuICBpZiAoc2NhbGUgPT09IDApIHtcbiAgICByZXR1cm4gejtcbiAgfVxuXG4gIHZhciB4cyA9IHg7XG4gIHZhciB5cyA9IHk7XG4gIHZhciB6cyA9IHogLyBzY2FsZTtcblxuICBpZiAoTWF0aC5hYnMoenMpID4gTWF0aC5hYnMoeHMgKiB5cykgKiA0IC8gRVBTSUxPTikge1xuICAgIHJldHVybiB6O1xuICB9XG4gIGlmIChNYXRoLmFicyh6cykgPCBNYXRoLmFicyh4cyAqIHlzKSAqIEVQU0lMT04gLyA0ICogRVBTSUxPTiAvIDQpIHtcbiAgICB6cyA9ICh6IDwgMCA/IC0xIDogKzEpICogTUlOX1ZBTFVFO1xuICB9XG5cbiAgdmFyIHh5ID0gbXVsdGlwbHkoeHMsIHlzKTtcbiAgdmFyIHMgPSBhZGQoeHkucCwgenMpO1xuICB2YXIgdSA9IGFkZCh4eS5lLCBzLmUpO1xuICB2YXIgaSA9IGFkZChzLnMsIHUucyk7XG5cbiAgdmFyIGYgPSBpLnMgKyBhZGp1c3QoaS5lLCB1LmUpO1xuICBpZiAoZiA9PT0gMCkge1xuICAgIHJldHVybiBmO1xuICB9XG5cbiAgdmFyIGZzID0gZiAqIHNjYWxlO1xuICBpZiAoTWF0aC5hYnMoZnMpID4gTUlOX1ZBTFVFKSB7XG4gICAgcmV0dXJuIGZzO1xuICB9XG5cbiAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCB0aGVyZSB3YXMgZXh0cmEgcm91bmRpbmcgZm9yIGEgZGVub3JtYWxpemVkIHZhbHVlLlxuICByZXR1cm4gZnMgKyBhZGp1c3QoZiAtIGZzIC8gc2NhbGUsIGkuZSkgKiBzY2FsZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2VfZm9ybWF0LCBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9mbG9hdCAoZm10LCB4KSB7XG4gIGZ1bmN0aW9uIHRvRml4ZWQoeCxkcCkge1xuICAgIGlmIChNYXRoLmFicyh4KSA8IDEuMCkge1xuICAgICAgcmV0dXJuIHgudG9GaXhlZChkcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlID0gcGFyc2VJbnQoeC50b1N0cmluZygpLnNwbGl0KCcrJylbMV0pO1xuICAgICAgaWYgKGUgPiAyMCkge1xuICAgICAgICBlIC09IDIwO1xuICAgICAgICB4IC89IE1hdGgucG93KDEwLGUpO1xuICAgICAgICB4ICs9IChuZXcgQXJyYXkoZSsxKSkuam9pbignMCcpO1xuICAgICAgICBpZihkcCA+IDApIHtcbiAgICAgICAgICB4ID0geCArICcuJyArIChuZXcgQXJyYXkoZHArMSkpLmpvaW4oJzAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geDtcbiAgICAgIH1cbiAgICAgIGVsc2UgcmV0dXJuIHgudG9GaXhlZChkcClcbiAgICB9XG4gIH1cbiAgdmFyIHMsIGYgPSBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpO1xuICB2YXIgcHJlYyA9IChmLnByZWMgPCAwKT82OmYucHJlYztcbiAgaWYgKHggPCAwIHx8ICh4ID09IDAgJiYgMS94ID09IC1JbmZpbml0eSkpIHsgZi5zaWduID0gLTE7IHggPSAteDsgfVxuICBpZiAoaXNOYU4oeCkpIHsgcyA9IFwibmFuXCI7IGYuZmlsbGVyID0gJyAnOyB9XG4gIGVsc2UgaWYgKCFpc0Zpbml0ZSh4KSkgeyBzID0gXCJpbmZcIjsgZi5maWxsZXIgPSAnICc7IH1cbiAgZWxzZVxuICAgIHN3aXRjaCAoZi5jb252KSB7XG4gICAgY2FzZSAnZSc6XG4gICAgICB2YXIgcyA9IHgudG9FeHBvbmVudGlhbChwcmVjKTtcbiAgICAgIC8vIGV4cG9uZW50IHNob3VsZCBiZSBhdCBsZWFzdCB0d28gZGlnaXRzXG4gICAgICB2YXIgaSA9IHMubGVuZ3RoO1xuICAgICAgaWYgKHMuY2hhckF0KGkgLSAzKSA9PSAnZScpXG4gICAgICAgIHMgPSBzLnNsaWNlICgwLCBpIC0gMSkgKyAnMCcgKyBzLnNsaWNlIChpIC0gMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmJzpcbiAgICAgIHMgPSB0b0ZpeGVkKHgsIHByZWMpOyBicmVhaztcbiAgICBjYXNlICdnJzpcbiAgICAgIHByZWMgPSBwcmVjP3ByZWM6MTtcbiAgICAgIHMgPSB4LnRvRXhwb25lbnRpYWwocHJlYyAtIDEpO1xuICAgICAgdmFyIGogPSBzLmluZGV4T2YoJ2UnKTtcbiAgICAgIHZhciBleHAgPSArcy5zbGljZShqICsgMSk7XG4gICAgICBpZiAoZXhwIDwgLTQgfHwgeCA+PSAxZTIxIHx8IHgudG9GaXhlZCgwKS5sZW5ndGggPiBwcmVjKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvZXNcbiAgICAgICAgdmFyIGkgPSBqIC0gMTsgd2hpbGUgKHMuY2hhckF0KGkpID09ICcwJykgaS0tO1xuICAgICAgICBpZiAocy5jaGFyQXQoaSkgPT0gJy4nKSBpLS07XG4gICAgICAgIHMgPSBzLnNsaWNlKDAsIGkgKyAxKSArIHMuc2xpY2Uoaik7XG4gICAgICAgIGkgPSBzLmxlbmd0aDtcbiAgICAgICAgaWYgKHMuY2hhckF0KGkgLSAzKSA9PSAnZScpXG4gICAgICAgICAgcyA9IHMuc2xpY2UgKDAsIGkgLSAxKSArICcwJyArIHMuc2xpY2UgKGkgLSAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcCA9IHByZWM7XG4gICAgICAgIGlmIChleHAgPCAwKSB7IHAgLT0gZXhwICsgMTsgcyA9IHgudG9GaXhlZChwKTsgfVxuICAgICAgICBlbHNlIHdoaWxlIChzID0geC50b0ZpeGVkKHApLCBzLmxlbmd0aCA+IHByZWMgKyAxKSBwLS07XG4gICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHplcm9lc1xuICAgICAgICAgIHZhciBpID0gcy5sZW5ndGggLSAxOyB3aGlsZSAocy5jaGFyQXQoaSkgPT0gJzAnKSBpLS07XG4gICAgICAgICAgaWYgKHMuY2hhckF0KGkpID09ICcuJykgaS0tO1xuICAgICAgICAgIHMgPSBzLnNsaWNlKDAsIGkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICByZXR1cm4gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCBzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9vZl9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9mbG9hdF9vZl9zdHJpbmcocykge1xuICB2YXIgcmVzO1xuICBzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKVxuICByZXMgPSArcztcbiAgaWYgKChzLmxlbmd0aCA+IDApICYmIChyZXMgPT09IHJlcykpIHJldHVybiByZXM7XG4gIHMgPSBzLnJlcGxhY2UoL18vZyxcIlwiKTtcbiAgcmVzID0gK3M7XG4gIGlmICgoKHMubGVuZ3RoID4gMCkgJiYgKHJlcyA9PT0gcmVzKSkgfHwgL15bKy1dP25hbiQvaS50ZXN0KHMpKSByZXR1cm4gcmVzO1xuICB2YXIgbSA9IC9eICooWystXT8pMHgoWzAtOWEtZl0rKVxcLj8oWzAtOWEtZl0qKShwKFsrLV0/WzAtOV0rKSk/L2kuZXhlYyhzKTtcbiAgLy8gICAgICAgICAgMSAgICAgICAgMiAgICAgICAgICAgICAzICAgICAgICAgICA1XG4gIGlmKG0pe1xuICAgIHZhciBtMyA9IG1bM10ucmVwbGFjZSgvMCskLywnJyk7XG4gICAgdmFyIG1hbnRpc3NhID0gcGFyc2VJbnQobVsxXSArIG1bMl0gKyBtMywgMTYpO1xuICAgIHZhciBleHBvbmVudCA9IChtWzVdfDApIC0gNCptMy5sZW5ndGg7XG4gICAgcmVzID0gbWFudGlzc2EgKiBNYXRoLnBvdygyLCBleHBvbmVudCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBpZigvXlxcKz9pbmYoaW5pdHkpPyQvaS50ZXN0KHMpKSByZXR1cm4gSW5maW5pdHk7XG4gIGlmKC9eLWluZihpbml0eSk/JC9pLnRlc3QocykpIHJldHVybiAtSW5maW5pdHk7XG4gIGNhbWxfZmFpbHdpdGgoXCJmbG9hdF9vZl9zdHJpbmdcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VwZGF0ZV9kdW1teVxuZnVuY3Rpb24gY2FtbF91cGRhdGVfZHVtbXkgKHgsIHkpIHtcbiAgaWYoIHkuZnVuICkgeyB4LmZ1biA9IHkuZnVuOyByZXR1cm4gMDsgfVxuICBpZiggdHlwZW9mIHk9PT1cImZ1bmN0aW9uXCIgKSB7IHguZnVuID0geTsgcmV0dXJuIDA7IH1cbiAgdmFyIGkgPSB5Lmxlbmd0aDsgd2hpbGUgKGktLSkgeFtpXSA9IHlbaV07IHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FsbG9jX2R1bW15X2luZml4XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxfZ2VuXG5mdW5jdGlvbiBjYW1sX2FsbG9jX2R1bW15X2luZml4ICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGYgKHgpIHsgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZi5mdW4sIFt4XSkgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9pc19ibG9jayBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX29ial9pc19ibG9jayAoeCkgeyByZXR1cm4gKyh4IGluc3RhbmNlb2YgQXJyYXkpOyB9XG5cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX2lzX21sX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9vYmpfdGFnICh4KSB7XG4gIGlmICgoeCBpbnN0YW5jZW9mIEFycmF5KSAmJiB4WzBdID09ICh4WzBdID4+PiAwKSlcbiAgICByZXR1cm4geFswXVxuICBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHgpKVxuICAgIHJldHVybiAyNTJcbiAgZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcoeCkpXG4gICAgcmV0dXJuIDI1MlxuICBlbHNlIGlmICgoeCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB8fCB0eXBlb2YgeCA9PSBcImZ1bmN0aW9uXCIpXG4gICAgcmV0dXJuIDI0N1xuICBlbHNlIGlmICh4ICYmIHguY2FtbF9jdXN0b20pXG4gICAgcmV0dXJuIDI1NVxuICBlbHNlXG4gICAgcmV0dXJuIDEwMDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfc2V0X3RhZyAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX29ial9zZXRfdGFnICh4LCB0YWcpIHsgeFswXSA9IHRhZzsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2Jsb2NrIGNvbnN0IChjb25zdCxjb25zdClcbmZ1bmN0aW9uIGNhbWxfb2JqX2Jsb2NrICh0YWcsIHNpemUpIHtcbiAgdmFyIG8gPSBuZXcgQXJyYXkoc2l6ZSsxKTtcbiAgb1swXT10YWc7XG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IHNpemU7IGkrKykgb1tpXSA9IDA7XG4gIHJldHVybiBvO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial93aXRoX3RhZ1xuZnVuY3Rpb24gY2FtbF9vYmpfd2l0aF90YWcodGFnLHgpIHtcbiAgdmFyIGwgPSB4Lmxlbmd0aDtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGFbMF0gPSB0YWc7XG4gIGZvcih2YXIgaSA9IDE7IGkgPCBsOyBpKysgKSBhW2ldID0geFtpXTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2R1cCBtdXRhYmxlIChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9vYmpfZHVwICh4KSB7XG4gIHZhciBsID0geC5sZW5ndGg7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbDsgaSsrICkgYVtpXSA9IHhbaV07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial90cnVuY2F0ZSAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfb2JqX3RydW5jYXRlICh4LCBzKSB7XG4gIGlmIChzPD0wIHx8IHMgKyAxID4geC5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcIk9iai50cnVuY2F0ZVwiKTtcbiAgaWYgKHgubGVuZ3RoICE9IHMgKyAxKSB4Lmxlbmd0aCA9IHMgKyAxO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfbWFrZV9mb3J3YXJkXG5mdW5jdGlvbiBjYW1sX29ial9tYWtlX2ZvcndhcmQgKGIsdikge1xuICBiWzBdPTI1MDtcbiAgYlsxXT12O1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9jb21wYXJlX2FuZF9zd2FwXG5mdW5jdGlvbiBjYW1sX29ial9jb21wYXJlX2FuZF9zd2FwKHgsaSxvbGQsbil7XG4gIGlmKHhbaSsxXSA9PSBvbGQpIHtcbiAgICB4W2krMV0gPSBuO1xuICAgIHJldHVybiAxO1xuICB9XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2lzX3NoYXJlZFxuZnVuY3Rpb24gY2FtbF9vYmpfaXNfc2hhcmVkKHgpe1xuICByZXR1cm4gMVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfbWFrZV9mb3J3YXJkIGNvbnN0IChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9sYXp5X21ha2VfZm9yd2FyZCAodikgeyByZXR1cm4gWzI1MCwgdl07IH1cblxuLy8vLy8vLy8vLy8vLyBDYW1saW50ZXJuYWxPT1xuLy9Qcm92aWRlczogY2FtbF9nZXRfcHVibGljX21ldGhvZCBjb25zdFxudmFyIGNhbWxfbWV0aG9kX2NhY2hlID0gW107XG5mdW5jdGlvbiBjYW1sX2dldF9wdWJsaWNfbWV0aG9kIChvYmosIHRhZywgY2FjaGVpZCkge1xuICB2YXIgbWV0aHMgPSBvYmpbMV07XG4gIHZhciBvZnMgPSBjYW1sX21ldGhvZF9jYWNoZVtjYWNoZWlkXTtcbiAgaWYgKG9mcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJheSBpcyBub3Qgc3BhcnNlXG4gICAgZm9yICh2YXIgaSA9IGNhbWxfbWV0aG9kX2NhY2hlLmxlbmd0aDsgaSA8IGNhY2hlaWQ7IGkrKylcbiAgICAgIGNhbWxfbWV0aG9kX2NhY2hlW2ldID0gMDtcbiAgfSBlbHNlIGlmIChtZXRoc1tvZnNdID09PSB0YWcpIHtcbiAgICByZXR1cm4gbWV0aHNbb2ZzIC0gMV07XG4gIH1cbiAgdmFyIGxpID0gMywgaGkgPSBtZXRoc1sxXSAqIDIgKyAxLCBtaTtcbiAgd2hpbGUgKGxpIDwgaGkpIHtcbiAgICBtaSA9ICgobGkraGkpID4+IDEpIHwgMTtcbiAgICBpZiAodGFnIDwgbWV0aHNbbWkrMV0pIGhpID0gbWktMjtcbiAgICBlbHNlIGxpID0gbWk7XG4gIH1cbiAgY2FtbF9tZXRob2RfY2FjaGVbY2FjaGVpZF0gPSBsaSArIDE7XG4gIC8qIHJldHVybiAwIGlmIHRhZyBpcyBub3QgdGhlcmUgKi9cbiAgcmV0dXJuICh0YWcgPT0gbWV0aHNbbGkrMV0gPyBtZXRoc1tsaV0gOiAwKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vb19sYXN0X2lkXG52YXIgY2FtbF9vb19sYXN0X2lkID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9zZXRfb29faWRcbi8vUmVxdWlyZXM6IGNhbWxfb29fbGFzdF9pZFxuZnVuY3Rpb24gY2FtbF9zZXRfb29faWQgKGIpIHtcbiAgYlsyXT1jYW1sX29vX2xhc3RfaWQrKztcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZnJlc2hfb29faWQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfb29fbGFzdF9pZFxuZnVuY3Rpb24gY2FtbF9mcmVzaF9vb19pZCgpIHtcbiAgcmV0dXJuIGNhbWxfb29fbGFzdF9pZCsrO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9yYXdfZmllbGRcbmZ1bmN0aW9uIGNhbWxfb2JqX3Jhd19maWVsZChvLGkpIHsgcmV0dXJuIG9baSsxXSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3NldF9yYXdfZmllbGRcbmZ1bmN0aW9uIGNhbWxfb2JqX3NldF9yYXdfZmllbGQobyxpLHYpIHsgcmV0dXJuIG9baSsxXSA9IHYgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9yZWFjaGFibGVfd29yZHNcbmZ1bmN0aW9uIGNhbWxfb2JqX3JlYWNoYWJsZV93b3JkcyhvKSB7IHJldHVybiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2FkZF9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfb2JqX2FkZF9vZmZzZXQodixvZmZzZXQpIHtcbiAgY2FtbF9mYWlsd2l0aChcIk9iai5hZGRfb2Zmc2V0IGlzIG5vdCBzdXBwb3J0ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3VwZGF0ZV90YWdcbmZ1bmN0aW9uIGNhbWxfb2JqX3VwZGF0ZV90YWcoYixvLG4pIHtcbiAgICBpZihiWzBdPT1vKSB7IGJbMF0gPSBuOyByZXR1cm4gMSB9XG4gICAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X3VwZGF0ZV90b19mb3JjaW5nXG4vL1JlcXVpcmVzOiBjYW1sX29ial91cGRhdGVfdGFnXG5mdW5jdGlvbiBjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcmNpbmcobykge1xuICBpZiAoKG8gaW5zdGFuY2VvZiBBcnJheSkgJiYgb1swXSA9PSAob1swXSA+Pj4gMCkgJiZcbiAgICAgIGNhbWxfb2JqX3VwZGF0ZV90YWcobywgMjQ2LCAyNDQpKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X3VwZGF0ZV90b19mb3J3YXJkXG4vL1JlcXVpcmVzOiBjYW1sX29ial91cGRhdGVfdGFnXG4gIGZ1bmN0aW9uIGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yd2FyZChvKSB7XG4gIGNhbWxfb2JqX3VwZGF0ZV90YWcobywyNDQsMjUwKTtcbiAgcmV0dXJuIDA7IC8vIHVuaXRcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfcmVzZXRfdG9fbGF6eVxuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuZnVuY3Rpb24gY2FtbF9sYXp5X3Jlc2V0X3RvX2xhenkobykge1xuICBjYW1sX29ial91cGRhdGVfdGFnKG8sMjQ0LDI0Nik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfcmVhZF9yZXN1bHRcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3RhZ1xuZnVuY3Rpb24gY2FtbF9sYXp5X3JlYWRfcmVzdWx0KG8pIHtcbiAgcmV0dXJuIChjYW1sX29ial90YWcobykgPT0gMjUwKT9vWzFdOm87XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9pc19jb250aW51YXRpb25fdGFnXG4vL1ZlcnNpb246IDwgNVxuZnVuY3Rpb24gY2FtbF9pc19jb250aW51YXRpb25fdGFnKHQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodCkge1xuICByZXR1cm4gKHQgPT0gMjQ1KSA/IDEgOiAwO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2Zmc2V0XG52YXIgY2FtbF9pbnQ2NF9vZmZzZXQgPSBNYXRoLnBvdygyLCAtMjQpO1xuXG4vL1Byb3ZpZGVzOiBNbEludDY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mZnNldCwgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuZnVuY3Rpb24gTWxJbnQ2NCAobG8sbWksaGkpIHtcbiAgdGhpcy5sbyA9IGxvICYgMHhmZmZmZmY7XG4gIHRoaXMubWkgPSBtaSAmIDB4ZmZmZmZmO1xuICB0aGlzLmhpID0gaGkgJiAweGZmZmY7XG59XG5NbEludDY0LnByb3RvdHlwZS5jYW1sX2N1c3RvbSA9IFwiX2pcIlxuTWxJbnQ2NC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG8sdGhpcy5taSx0aGlzLmhpKTtcbn1cblxuTWxJbnQ2NC5wcm90b3R5cGUudWNvbXBhcmUgPSBmdW5jdGlvbiAoeCkge1xuICBpZiAodGhpcy5oaSA+IHguaGkpIHJldHVybiAxO1xuICBpZiAodGhpcy5oaSA8IHguaGkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubWkgPiB4Lm1pKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubWkgPCB4Lm1pKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLmxvID4geC5sbykgcmV0dXJuIDE7XG4gIGlmICh0aGlzLmxvIDwgeC5sbykgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgaGkgPSB0aGlzLmhpIDw8IDE2O1xuICB2YXIgeGhpID0geC5oaSA8PCAxNjtcbiAgaWYgKGhpID4geGhpKSByZXR1cm4gMTtcbiAgaWYgKGhpIDwgeGhpKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLm1pID4geC5taSkgcmV0dXJuIDE7XG4gIGlmICh0aGlzLm1pIDwgeC5taSkgcmV0dXJuIC0xO1xuICBpZiAodGhpcy5sbyA+IHgubG8pIHJldHVybiAxO1xuICBpZiAodGhpcy5sbyA8IHgubG8pIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59XG5NbEludDY0LnByb3RvdHlwZS5uZWcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsbyA9IC0gdGhpcy5sbztcbiAgdmFyIG1pID0gLSB0aGlzLm1pICsgKGxvID4+IDI0KTtcbiAgdmFyIGhpID0gLSB0aGlzLmhpICsgKG1pID4+IDI0KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIGxvID0gdGhpcy5sbyArIHgubG87XG4gIHZhciBtaSA9IHRoaXMubWkgKyB4Lm1pICsgKGxvID4+IDI0KTtcbiAgdmFyIGhpID0gdGhpcy5oaSArIHguaGkgKyAobWkgPj4gMjQpO1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5zdWIgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbG8gPSB0aGlzLmxvIC0geC5sbztcbiAgdmFyIG1pID0gdGhpcy5taSAtIHgubWkgKyAobG8gPj4gMjQpO1xuICB2YXIgaGkgPSB0aGlzLmhpIC0geC5oaSArIChtaSA+PiAyNCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBsbyA9IHRoaXMubG8gKiB4LmxvO1xuICB2YXIgbWkgPSAoKGxvICogY2FtbF9pbnQ2NF9vZmZzZXQpIHwgMCkgKyB0aGlzLm1pICogeC5sbyArIHRoaXMubG8gKiB4Lm1pO1xuICB2YXIgaGkgPSAoKG1pICogY2FtbF9pbnQ2NF9vZmZzZXQpIHwgMCkgKyB0aGlzLmhpICogeC5sbyArIHRoaXMubWkgKiB4Lm1pICsgdGhpcy5sbyAqIHguaGk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmlzWmVybyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICh0aGlzLmxvfHRoaXMubWl8dGhpcy5oaSkgPT0gMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLmlzTmVnID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKHRoaXMuaGkgPDwgMTYpIDwgMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLmFuZCA9IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh0aGlzLmxvICYgeC5sbywgdGhpcy5taSAmIHgubWksIHRoaXMuaGkgJiB4LmhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLm9yID0gZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG98eC5sbywgdGhpcy5taXx4Lm1pLCB0aGlzLmhpfHguaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUueG9yID0gZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG9eeC5sbywgdGhpcy5taV54Lm1pLCB0aGlzLmhpXnguaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuc2hpZnRfbGVmdCA9IGZ1bmN0aW9uIChzKSB7XG4gIHMgPSBzICYgNjM7XG4gIGlmIChzID09IDApIHJldHVybiB0aGlzO1xuICBpZiAocyA8IDI0KSB7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0ICh0aGlzLmxvIDw8IHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5taSA8PCBzKSB8ICh0aGlzLmxvID4+ICgyNCAtIHMpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmhpIDw8IHMpIHwgKHRoaXMubWkgPj4gKDI0IC0gcykpKTtcbiAgfVxuICBpZiAocyA8IDQ4KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG8gPDwgKHMgLSAyNCksXG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5taSA8PCAocyAtIDI0KSkgfCAodGhpcy5sbyA+PiAoNDggLSBzKSkpO1xuICByZXR1cm4gbmV3IE1sSW50NjQoMCwgMCwgdGhpcy5sbyA8PCAocyAtIDQ4KSlcbn1cbk1sSW50NjQucHJvdG90eXBlLnNoaWZ0X3JpZ2h0X3Vuc2lnbmVkID0gZnVuY3Rpb24gKHMpIHtcbiAgcyA9IHMgJiA2MztcbiAgaWYgKHMgPT0gMCkgcmV0dXJuIHRoaXM7XG4gIGlmIChzIDwgMjQpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLmxvID4+IHMpIHwgKHRoaXMubWkgPDwgKDI0IC0gcykpLFxuICAgICAgKHRoaXMubWkgPj4gcykgfCAodGhpcy5oaSA8PCAoMjQgLSBzKSksXG4gICAgICAodGhpcy5oaSA+PiBzKSk7XG4gIGlmIChzIDwgNDgpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICh0aGlzLmhpID4+IChzIC0gMjQpKSxcbiAgICAgIDApO1xuICByZXR1cm4gbmV3IE1sSW50NjQgKHRoaXMuaGkgPj4gKHMgLSA0OCksIDAsIDApO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuc2hpZnRfcmlnaHQgPSBmdW5jdGlvbiAocykge1xuICBzID0gcyAmIDYzO1xuICBpZiAocyA9PSAwKSByZXR1cm4gdGhpcztcbiAgdmFyIGggPSAodGhpcy5oaSA8PCAxNikgPj4gMTY7XG4gIGlmIChzIDwgMjQpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLmxvID4+IHMpIHwgKHRoaXMubWkgPDwgKDI0IC0gcykpLFxuICAgICAgKHRoaXMubWkgPj4gcykgfCAoaCA8PCAoMjQgLSBzKSksXG4gICAgICAoKHRoaXMuaGkgPDwgMTYpID4+IHMpID4+PiAxNik7XG4gIHZhciBzaWduID0gKHRoaXMuaGkgPDwgMTYpID4+IDMxO1xuICBpZiAocyA8IDQ4KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgICAodGhpcy5taSA+PiAocyAtIDI0KSkgfCAodGhpcy5oaSA8PCAoNDggLSBzKSksXG4gICAgICAodGhpcy5oaSA8PCAxNikgPj4gKHMgLSAyNCkgPj4gMTYsXG4gICAgICBzaWduICYgMHhmZmZmKTtcbiAgcmV0dXJuIG5ldyBNbEludDY0ICgodGhpcy5oaSA8PCAxNikgPj4gKHMgLSAzMiksIHNpZ24sIHNpZ24pO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubHNsMSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5oaSA9ICh0aGlzLmhpIDw8IDEpIHwgKHRoaXMubWkgPj4gMjMpO1xuICB0aGlzLm1pID0gKCh0aGlzLm1pIDw8IDEpIHwgKHRoaXMubG8gPj4gMjMpKSAmIDB4ZmZmZmZmO1xuICB0aGlzLmxvID0gKHRoaXMubG8gPDwgMSkgJiAweGZmZmZmZjtcbn1cbk1sSW50NjQucHJvdG90eXBlLmxzcjEgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMubG8gPSAoKHRoaXMubG8gPj4+IDEpIHwgKHRoaXMubWkgPDwgMjMpKSAmIDB4ZmZmZmZmO1xuICB0aGlzLm1pID0gKCh0aGlzLm1pID4+PiAxKSB8ICh0aGlzLmhpIDw8IDIzKSkgJiAweGZmZmZmZjtcbiAgdGhpcy5oaSA9IHRoaXMuaGkgPj4+IDE7XG59XG5NbEludDY0LnByb3RvdHlwZS51ZGl2bW9kID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIG9mZnNldCA9IDA7XG4gIHZhciBtb2R1bHVzID0gdGhpcy5jb3B5KCk7XG4gIHZhciBkaXZpc29yID0geC5jb3B5KCk7XG4gIHZhciBxdW90aWVudCA9IG5ldyBNbEludDY0KDAsMCwwKTtcbiAgd2hpbGUgKG1vZHVsdXMudWNvbXBhcmUoZGl2aXNvcikgPiAwKSB7XG4gICAgb2Zmc2V0Kys7XG4gICAgZGl2aXNvci5sc2wxKCk7XG4gIH1cbiAgd2hpbGUgKG9mZnNldCA+PSAwKSB7XG4gICAgb2Zmc2V0IC0tO1xuICAgIHF1b3RpZW50LmxzbDEoKTtcbiAgICBpZiAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+PSAwKSB7XG4gICAgICBxdW90aWVudC5sbyArKztcbiAgICAgIG1vZHVsdXMgPSBtb2R1bHVzLnN1YihkaXZpc29yKTtcbiAgICB9XG4gICAgZGl2aXNvci5sc3IxKCk7XG4gIH1cbiAgcmV0dXJuIHsgcXVvdGllbnQgOiBxdW90aWVudCwgbW9kdWx1cyA6IG1vZHVsdXMgfTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmRpdiA9IGZ1bmN0aW9uICh5KVxue1xuICB2YXIgeCA9IHRoaXM7XG4gIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICB2YXIgc2lnbiA9IHguaGkgXiB5LmhpO1xuICBpZiAoeC5oaSAmIDB4ODAwMCkgeCA9IHgubmVnKCk7XG4gIGlmICh5LmhpICYgMHg4MDAwKSB5ID0geS5uZWcoKTtcbiAgdmFyIHEgPSB4LnVkaXZtb2QoeSkucXVvdGllbnQ7XG4gIGlmIChzaWduICYgMHg4MDAwKSBxID0gcS5uZWcoKTtcbiAgcmV0dXJuIHE7XG59XG5NbEludDY0LnByb3RvdHlwZS5tb2QgPSBmdW5jdGlvbiAoeSlcbntcbiAgdmFyIHggPSB0aGlzO1xuICBpZiAoeS5pc1plcm8oKSkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKTtcbiAgdmFyIHNpZ24gPSB4LmhpO1xuICBpZiAoeC5oaSAmIDB4ODAwMCkgeCA9IHgubmVnKCk7XG4gIGlmICh5LmhpICYgMHg4MDAwKSB5ID0geS5uZWcoKTtcbiAgdmFyIHIgPSB4LnVkaXZtb2QoeSkubW9kdWx1cztcbiAgaWYgKHNpZ24gJiAweDgwMDApIHIgPSByLm5lZygpO1xuICByZXR1cm4gcjtcbn1cbk1sSW50NjQucHJvdG90eXBlLnRvSW50ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sbyB8ICh0aGlzLm1pIDw8IDI0KTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnRvRmxvYXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoKHRoaXMuaGkgPDwgMTYpICogTWF0aC5wb3coMiwgMzIpICsgdGhpcy5taSAqIE1hdGgucG93KDIsIDI0KSkgKyB0aGlzLmxvO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFt0aGlzLmhpID4+IDgsXG4gICAgICAgICAgdGhpcy5oaSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5taSA+PiAxNixcbiAgICAgICAgICAodGhpcy5taSA+PiA4KSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5taSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5sbyA+PiAxNixcbiAgICAgICAgICAodGhpcy5sbyA+PiA4KSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5sbyAmIDB4ZmZdO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubG8zMiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubG8gfCAoKHRoaXMubWkgJiAweGZmKSA8PCAyNCk7XG59XG5NbEludDY0LnByb3RvdHlwZS5oaTMyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKCh0aGlzLm1pID4+PiA4KSAmIDB4ZmZmZikgfCAodGhpcy5oaSA8PCAxNik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdWx0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3VsdCh4LHkpIHsgcmV0dXJuIHgudWNvbXBhcmUoeSkgPCAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY29tcGFyZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9jb21wYXJlKHgseSwgdG90YWwpIHsgcmV0dXJuIHguY29tcGFyZSh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbmVnIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X25lZyAoeCkgeyByZXR1cm4geC5uZWcoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYWRkIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2FkZCAoeCwgeSkgeyByZXR1cm4geC5hZGQoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3N1YiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zdWIgKHgsIHkpIHsgcmV0dXJuIHguc3ViKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9tdWwgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0XG5mdW5jdGlvbiBjYW1sX2ludDY0X211bCh4LHkpIHsgcmV0dXJuIHgubXVsKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9pc196ZXJvIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2lzX3plcm8oeCkgeyByZXR1cm4gK3guaXNaZXJvKCk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSh4KSB7IHJldHVybiAreC5pc05lZygpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYW5kIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2FuZCAoeCwgeSkgeyByZXR1cm4geC5hbmQoeSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vciBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vciAoeCwgeSkgeyByZXR1cm4geC5vcih5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3hvciBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF94b3IgKHgsIHkpIHsgcmV0dXJuIHgueG9yKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3NoaWZ0X2xlZnQgKHgsIHMpIHsgcmV0dXJuIHguc2hpZnRfbGVmdChzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQgKHgsIHMpIHsgcmV0dXJuIHguc2hpZnRfcmlnaHRfdW5zaWduZWQocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0ICh4LCBzKSB7IHJldHVybiB4LnNoaWZ0X3JpZ2h0KHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9kaXYgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZGl2ICh4LCB5KSB7IHJldHVybiB4LmRpdih5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbW9kIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X21vZCAoeCwgeSkgeyByZXR1cm4geC5tb2QoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX2ludDMyIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2ludDMyICh4KSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh4ICYgMHhmZmZmZmYsICh4ID4+IDI0KSAmIDB4ZmZmZmZmLCAoeCA+PiAzMSkgJiAweGZmZmYpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9faW50MzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9faW50MzIgKHgpIHsgcmV0dXJuIHgudG9JbnQoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9fZmxvYXQgKHgpIHsgcmV0dXJuIHgudG9GbG9hdCAoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0LCBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2Zsb2F0ICh4KSB7XG4gIGlmICh4IDwgMCkgeCA9IE1hdGguY2VpbCh4KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KFxuICAgIHggJiAweGZmZmZmZixcbiAgICBNYXRoLmZsb29yKHggKiBjYW1sX2ludDY0X29mZnNldCkgJiAweGZmZmZmZixcbiAgICBNYXRoLmZsb29yKHggKiBjYW1sX2ludDY0X29mZnNldCAqIGNhbWxfaW50NjRfb2Zmc2V0KSAmIDB4ZmZmZik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfZm9ybWF0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZ1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSwgY2FtbF9pbnQ2NF9uZWdcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfaW50MzIsIGNhbWxfaW50NjRfdG9faW50MzJcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfaXNfemVybywgY2FtbF9zdHJfcmVwZWF0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2Zvcm1hdCAoZm10LCB4KSB7XG4gIHZhciBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgaWYgKGYuc2lnbmVkY29udiAmJiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlKHgpKSB7XG4gICAgZi5zaWduID0gLTE7IHggPSBjYW1sX2ludDY0X25lZyh4KTtcbiAgfVxuICB2YXIgYnVmZmVyID0gXCJcIjtcbiAgdmFyIHdiYXNlID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihmLmJhc2UpO1xuICB2YXIgY3Z0YmwgPSBcIjAxMjM0NTY3ODlhYmNkZWZcIjtcbiAgZG8ge1xuICAgIHZhciBwID0geC51ZGl2bW9kKHdiYXNlKTtcbiAgICB4ID0gcC5xdW90aWVudDtcbiAgICBidWZmZXIgPSBjdnRibC5jaGFyQXQoY2FtbF9pbnQ2NF90b19pbnQzMihwLm1vZHVsdXMpKSArIGJ1ZmZlcjtcbiAgfSB3aGlsZSAoISBjYW1sX2ludDY0X2lzX3plcm8oeCkpO1xuICBpZiAoZi5wcmVjID49IDApIHtcbiAgICBmLmZpbGxlciA9ICcgJztcbiAgICB2YXIgbiA9IGYucHJlYyAtIGJ1ZmZlci5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBidWZmZXIgPSBjYW1sX3N0cl9yZXBlYXQgKG4sICcwJykgKyBidWZmZXI7XG4gIH1cbiAgcmV0dXJuIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgYnVmZmVyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSwgY2FtbF9mYWlsd2l0aCwgY2FtbF9wYXJzZV9kaWdpdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9pbnQzMiwgY2FtbF9pbnQ2NF91bHRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYWRkLCBjYW1sX2ludDY0X211bCwgY2FtbF9pbnQ2NF9uZWdcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCxjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX3N0cmluZyhzKSB7XG4gIHZhciByID0gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIChzKTtcbiAgdmFyIGkgPSByWzBdLCBzaWduID0gclsxXSwgYmFzZSA9IHJbMl07XG4gIHZhciBiYXNlNjQgPSBjYW1sX2ludDY0X29mX2ludDMyKGJhc2UpO1xuICB2YXIgdGhyZXNob2xkID1cbiAgICAgIG5ldyBNbEludDY0KDB4ZmZmZmZmLCAweGZmZmZmZmYsIDB4ZmZmZikudWRpdm1vZChiYXNlNjQpLnF1b3RpZW50O1xuICB2YXIgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gIHZhciBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICBmb3IgKDs7KSB7XG4gICAgaSsrO1xuICAgIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICAgIGlmIChjID09IDk1KSBjb250aW51ZTtcbiAgICBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBicmVhaztcbiAgICAvKiBEZXRlY3Qgb3ZlcmZsb3cgaW4gbXVsdGlwbGljYXRpb24gYmFzZSAqIHJlcyAqL1xuICAgIGlmIChjYW1sX2ludDY0X3VsdCh0aHJlc2hvbGQsIHJlcykpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICAgIGQgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICAgIHJlcyA9IGNhbWxfaW50NjRfYWRkKGNhbWxfaW50NjRfbXVsKGJhc2U2NCwgcmVzKSwgZCk7XG4gICAgLyogRGV0ZWN0IG92ZXJmbG93IGluIGFkZGl0aW9uIChiYXNlICogcmVzKSArIGQgKi9cbiAgICBpZiAoY2FtbF9pbnQ2NF91bHQocmVzLCBkKSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIH1cbiAgaWYgKGkgIT0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgaWYgKGJhc2UgPT0gMTAgJiYgY2FtbF9pbnQ2NF91bHQobmV3IE1sSW50NjQoMCwgMCwgMHg4MDAwKSwgcmVzKSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgaWYgKHNpZ24gPCAwKSByZXMgPSBjYW1sX2ludDY0X25lZyhyZXMpO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkobG8sIG1pLCBoaSl7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKVxufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkgY29uc3Rcbi8vUmVxdWlyZXM6IE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpKGxvLCBoaSl7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgbG8gJiAweGZmZmZmZixcbiAgICAoKGxvID4+PiAyNCkgJiAweGZmKSB8ICgoaGkgJiAweGZmZmYpIDw8IDgpLFxuICAgIChoaSA+Pj4gMTYpICYgMHhmZmZmKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbG8zMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9sbzMyKHYpeyByZXR1cm4gdi5sbzMyKCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2hpMzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaGkzMih2KXsgcmV0dXJuIHYuaGkzMigpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9ieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChhWzddIDw8IDAgfCAoYVs2XSA8PCA4KSB8IChhWzVdIDw8IDE2KSxcbiAgICAgICAgICAgICAgICAgICAgIGFbNF0gPDwgMCB8IChhWzNdIDw8IDgpIHwgKGFbMl0gPDwgMTYpLFxuICAgICAgICAgICAgICAgICAgICAgYVsxXSA8PCAwIHwgKGFbMF0gPDwgOCkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF90b19ieXRlcyBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19ieXRlcyh4KSB7IHJldHVybiB4LnRvQXJyYXkoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaGFzaCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9oYXNoKHYpe1xuICByZXR1cm4gKHYubG8zMigpKSBeICh2LmhpMzIoKSlcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkLCBBbmR5IFJheVxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuLy9cbi8vIEJpZ2FycmF5LlxuLy9cbi8vIC0gYWxsIGJpZ2FycmF5IHR5cGVzIGluY2x1ZGluZyBJbnQ2NCBhbmQgQ29tcGxleC5cbi8vIC0gZm9ydHJhbiArIGMgbGF5b3V0c1xuLy8gLSBzdWIvc2xpY2UvcmVzaGFwZVxuLy8gLSByZXRhaW4gZmFzdCBwYXRoIGZvciAxZCBhcnJheSBhY2Nlc3NcblxuLy9Qcm92aWRlczogY2FtbF9iYV9pbml0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2JhX2luaXQoKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0X3NpemUoZGltcykge1xuICB2YXIgbl9kaW1zID0gZGltcy5sZW5ndGg7XG4gIHZhciBzaXplID0gMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuX2RpbXM7IGkrKykge1xuICAgIGlmIChkaW1zW2ldIDwgMClcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmNyZWF0ZTogbmVnYXRpdmUgZGltZW5zaW9uXCIpO1xuICAgIHNpemUgPSBzaXplICogZGltc1tpXTtcbiAgfVxuICByZXR1cm4gc2l6ZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKXtcbiAgc3dpdGNoKGtpbmQpe1xuICBjYXNlIDc6IGNhc2UgMTA6IGNhc2UgMTE6IHJldHVybiAyO1xuICBkZWZhdWx0OiByZXR1cm4gMTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfYnVmZmVyKGtpbmQsIHNpemUpe1xuICB2YXIgdmlldztcbiAgc3dpdGNoKGtpbmQpe1xuICBjYXNlIDA6ICB2aWV3ID0gRmxvYXQzMkFycmF5OyBicmVhaztcbiAgY2FzZSAxOiAgdmlldyA9IEZsb2F0NjRBcnJheTsgYnJlYWs7XG4gIGNhc2UgMjogIHZpZXcgPSBJbnQ4QXJyYXk7IGJyZWFrO1xuICBjYXNlIDM6ICB2aWV3ID0gVWludDhBcnJheTsgYnJlYWs7XG4gIGNhc2UgNDogIHZpZXcgPSBJbnQxNkFycmF5OyBicmVhaztcbiAgY2FzZSA1OiAgdmlldyA9IFVpbnQxNkFycmF5OyBicmVhaztcbiAgY2FzZSA2OiAgdmlldyA9IEludDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDc6ICB2aWV3ID0gSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgODogIHZpZXcgPSBJbnQzMkFycmF5OyBicmVhaztcbiAgY2FzZSA5OiAgdmlldyA9IEludDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDEwOiB2aWV3ID0gRmxvYXQzMkFycmF5OyBicmVhaztcbiAgY2FzZSAxMTogdmlldyA9IEZsb2F0NjRBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTI6IHZpZXcgPSBVaW50OEFycmF5OyBicmVhaztcbiAgfVxuICBpZiAoIXZpZXcpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmNyZWF0ZTogdW5zdXBwb3J0ZWQga2luZFwiKTtcbiAgdmFyIGRhdGEgPSBuZXcgdmlldyhzaXplICogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKSk7XG4gIHJldHVybiBkYXRhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2N1c3RvbV9uYW1lXG4vL1ZlcnNpb246IDwgNC4xMVxudmFyIGNhbWxfYmFfY3VzdG9tX25hbWUgPSBcIl9iaWdhcnJheVwiXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3VzdG9tX25hbWVcbi8vVmVyc2lvbjogPj0gNC4xMVxudmFyIGNhbWxfYmFfY3VzdG9tX25hbWUgPSBcIl9iaWdhcnIwMlwiXG5cbi8vUHJvdmlkZXM6IE1sX0JpZ2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfY3VzdG9tX25hbWVcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpLCBjYW1sX2ludDY0X2hpMzIsIGNhbWxfaW50NjRfbG8zMlxuZnVuY3Rpb24gTWxfQmlnYXJyYXkgKGtpbmQsIGxheW91dCwgZGltcywgYnVmZmVyKSB7XG5cbiAgdGhpcy5raW5kICAgPSBraW5kIDtcbiAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gIHRoaXMuZGltcyAgID0gZGltcztcbiAgdGhpcy5kYXRhID0gYnVmZmVyO1xufVxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuY2FtbF9jdXN0b20gPSBjYW1sX2JhX2N1c3RvbV9uYW1lO1xuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUub2Zmc2V0ID0gZnVuY3Rpb24gKGFyZykge1xuICB2YXIgb2ZzID0gMDtcbiAgaWYodHlwZW9mIGFyZyA9PT0gXCJudW1iZXJcIikgYXJnID0gW2FyZ107XG4gIGlmICghIChhcmcgaW5zdGFuY2VvZiBBcnJheSkpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImJpZ2FycmF5LmpzOiBpbnZhbGlkIG9mZnNldFwiKTtcbiAgaWYgKHRoaXMuZGltcy5sZW5ndGggIT0gYXJnLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5nZXQvc2V0OiBiYWQgbnVtYmVyIG9mIGRpbWVuc2lvbnNcIik7XG4gIGlmKHRoaXMubGF5b3V0ID09IDAgLyogY19sYXlvdXQgKi8pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFyZ1tpXSA8IDAgfHwgYXJnW2ldID49IHRoaXMuZGltc1tpXSlcbiAgICAgICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICAgICAgb2ZzID0gKG9mcyAqIHRoaXMuZGltc1tpXSkgKyBhcmdbaV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmRpbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChhcmdbaV0gPCAxIHx8IGFyZ1tpXSA+IHRoaXMuZGltc1tpXSl7XG4gICAgICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICAgIH1cbiAgICAgIG9mcyA9IChvZnMgKiB0aGlzLmRpbXNbaV0pICsgKGFyZ1tpXSAtIDEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2ZzO1xufVxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG9mcykge1xuICBzd2l0Y2godGhpcy5raW5kKXtcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgdmFyIGwgPSB0aGlzLmRhdGFbb2ZzICogMiArIDBdO1xuICAgIHZhciBoID0gdGhpcy5kYXRhW29mcyAqIDIgKyAxXTtcbiAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkobCxoKTtcbiAgY2FzZSAxMDogY2FzZSAxMTpcbiAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgIHZhciByID0gdGhpcy5kYXRhW29mcyAqIDIgKyAwXTtcbiAgICB2YXIgaSA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMV07XG4gICAgcmV0dXJuIFsyNTQsIHIsIGldO1xuICBkZWZhdWx0OlxuICAgIHJldHVybiB0aGlzLmRhdGFbb2ZzXVxuICB9XG59XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAob2ZzLHYpIHtcbiAgc3dpdGNoKHRoaXMua2luZCl7XG4gIGNhc2UgNzpcbiAgICAvLyBJbnQ2NFxuICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMF0gPSBjYW1sX2ludDY0X2xvMzIodik7XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAxXSA9IGNhbWxfaW50NjRfaGkzMih2KTtcbiAgICBicmVhaztcbiAgY2FzZSAxMDogY2FzZSAxMTpcbiAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMF0gPSB2WzFdO1xuICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMV0gPSB2WzJdO1xuICAgIGJyZWFrO1xuICBkZWZhdWx0OlxuICAgIHRoaXMuZGF0YVtvZnNdID0gdjtcbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4gMFxufVxuXG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gKHYpIHtcbiAgc3dpdGNoKHRoaXMua2luZCl7XG4gIGNhc2UgNzpcbiAgICAvLyBJbnQ2NFxuICAgIHZhciBhID0gY2FtbF9pbnQ2NF9sbzMyKHYpO1xuICAgIHZhciBiID0gY2FtbF9pbnQ2NF9oaTMyKHYpO1xuICAgIGlmKGEgPT0gYil7XG4gICAgICB0aGlzLmRhdGEuZmlsbChhKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpPHRoaXMuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHRoaXMuZGF0YVtpXSA9IChpJTIgPT0gMCkgPyBhIDogYjtcbiAgICAgIH1cbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IGNhc2UgMTE6XG4gICAgLy8gQ29tcGxleDMyLCBDb21wbGV4NjRcbiAgICB2YXIgaW0gPSB2WzFdO1xuICAgIHZhciByZSA9IHZbMl07XG4gICAgaWYoaW0gPT0gcmUpe1xuICAgICAgdGhpcy5kYXRhLmZpbGwoaW0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGk8dGhpcy5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdGhpcy5kYXRhW2ldID0gKGklMiA9PSAwKSA/IGltIDogcmU7XG4gICAgICB9XG4gICAgfVxuICAgIGJyZWFrO1xuICBkZWZhdWx0OlxuICAgIHRoaXMuZGF0YS5maWxsKHYpO1xuICAgIGJyZWFrO1xuICB9XG59XG5cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiAoYiwgdG90YWwpIHtcbiAgaWYgKHRoaXMubGF5b3V0ICE9IGIubGF5b3V0IHx8IHRoaXMua2luZCAhPSBiLmtpbmQpIHtcbiAgICB2YXIgazEgPSB0aGlzLmtpbmQgfCAodGhpcy5sYXlvdXQgPDwgOCk7XG4gICAgdmFyIGsyID0gICAgYi5raW5kIHwgKGIubGF5b3V0IDw8IDgpO1xuICAgIHJldHVybiBrMiAtIGsxO1xuICB9XG4gIGlmICh0aGlzLmRpbXMubGVuZ3RoICE9IGIuZGltcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gYi5kaW1zLmxlbmd0aCAtIHRoaXMuZGltcy5sZW5ndGg7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgaWYgKHRoaXMuZGltc1tpXSAhPSBiLmRpbXNbaV0pXG4gICAgICByZXR1cm4gKHRoaXMuZGltc1tpXSA8IGIuZGltc1tpXSkgPyAtMSA6IDE7XG4gIHN3aXRjaCAodGhpcy5raW5kKSB7XG4gIGNhc2UgMDpcbiAgY2FzZSAxOlxuICBjYXNlIDEwOlxuICBjYXNlIDExOlxuICAgIC8vIEZsb2F0c1xuICAgIHZhciB4LCB5O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICB4ID0gdGhpcy5kYXRhW2ldO1xuICAgICAgeSA9IGIuZGF0YVtpXTtcbiAgICAgIGlmICh4IDwgeSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKHggPiB5KVxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGlmICh4ICE9IHkpIHtcbiAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgaWYgKHggPT0geCkgcmV0dXJuIDE7XG4gICAgICAgIGlmICh5ID09IHkpIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNzpcbiAgICAvLyBJbnQ2NFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSs9Mikge1xuICAgICAgLy8gQ2hlY2sgaGlnaGVzdCBiaXRzIGZpcnN0XG4gICAgICBpZiAodGhpcy5kYXRhW2krMV0gPCBiLmRhdGFbaSsxXSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKHRoaXMuZGF0YVtpKzFdID4gYi5kYXRhW2krMV0pXG4gICAgICAgIHJldHVybiAxO1xuICAgICAgaWYgKCh0aGlzLmRhdGFbaV0gPj4+IDApIDwgKGIuZGF0YVtpXSA+Pj4gMCkpXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIGlmICgodGhpcy5kYXRhW2ldID4+PiAwKSA+IChiLmRhdGFbaV0gPj4+IDApKVxuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMjpcbiAgY2FzZSAzOlxuICBjYXNlIDQ6XG4gIGNhc2UgNTpcbiAgY2FzZSA2OlxuICBjYXNlIDg6XG4gIGNhc2UgOTpcbiAgY2FzZSAxMjpcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZGF0YVtpXSA8IGIuZGF0YVtpXSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKHRoaXMuZGF0YVtpXSA+IGIuZGF0YVtpXSlcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBNbF9CaWdhcnJheV9jXzFfMVxuLy9SZXF1aXJlczogTWxfQmlnYXJyYXksIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gTWxfQmlnYXJyYXlfY18xXzEoa2luZCwgbGF5b3V0LCBkaW1zLCBidWZmZXIpIHtcbiAgdGhpcy5raW5kICAgPSBraW5kIDtcbiAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gIHRoaXMuZGltcyAgID0gZGltcztcbiAgdGhpcy5kYXRhICAgPSBidWZmZXI7XG59XG5cbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZSA9IG5ldyBNbF9CaWdhcnJheSgpXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUub2Zmc2V0ID0gZnVuY3Rpb24gKGFyZykge1xuICBpZih0eXBlb2YgYXJnICE9PSBcIm51bWJlclwiKXtcbiAgICBpZigoYXJnIGluc3RhbmNlb2YgQXJyYXkpICYmIGFyZy5sZW5ndGggPT0gMSlcbiAgICAgIGFyZyA9IGFyZ1swXTtcbiAgICBlbHNlIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIk1sX0JpZ2FycmF5X2NfMV8xLm9mZnNldFwiKTtcbiAgfVxuICBpZiAoYXJnIDwgMCB8fCBhcmcgPj0gdGhpcy5kaW1zWzBdKVxuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFyZztcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChvZnMpIHtcbiAgcmV0dXJuIHRoaXMuZGF0YVtvZnNdO1xufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG9mcyx2KSB7XG4gIHRoaXMuZGF0YVtvZnNdID0gdjtcbiAgcmV0dXJuIDBcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiAodikge1xuICB0aGlzLmRhdGEuZmlsbCh2KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jb21wYXJlXG5mdW5jdGlvbiBjYW1sX2JhX2NvbXBhcmUoYSxiLHRvdGFsKXtcbiAgcmV0dXJuIGEuY29tcGFyZShiLHRvdGFsKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbi8vUmVxdWlyZXM6IE1sX0JpZ2FycmF5LCBNbF9CaWdhcnJheV9jXzFfMSwgY2FtbF9iYV9nZXRfc2l6ZSwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKXtcbiAgdmFyIHNpemVfcGVyX2VsZW1lbnQgPSBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpO1xuICBpZihjYW1sX2JhX2dldF9zaXplKGRpbXMpICogc2l6ZV9wZXJfZWxlbWVudCAhPSBkYXRhLmxlbmd0aCkge1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImxlbmd0aCBkb2Vzbid0IG1hdGNoIGRpbXNcIik7XG4gIH1cbiAgaWYobGF5b3V0ID09IDAgJiYgLy8gY19sYXlvdXRcbiAgICAgZGltcy5sZW5ndGggPT0gMSAmJiAvLyBBcnJheTFcbiAgICAgc2l6ZV9wZXJfZWxlbWVudCA9PSAxKSAvLyAxLXRvLTEgbWFwcGluZ1xuICAgIHJldHVybiBuZXcgTWxfQmlnYXJyYXlfY18xXzEoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbiAgcmV0dXJuIG5ldyBNbF9CaWdhcnJheShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xuXG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZSwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlKGtpbmQsIGxheW91dCwgZGltc19tbCkge1xuICB2YXIgZGltcyA9IGNhbWxfanNfZnJvbV9hcnJheShkaW1zX21sKTtcbiAgdmFyIGRhdGEgPSBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgY2FtbF9iYV9nZXRfc2l6ZShkaW1zKSk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGNhbWxfYmFfY2hhbmdlX2xheW91dChiYSwgbGF5b3V0KSB7XG4gIGlmKGJhLmxheW91dCA9PSBsYXlvdXQpIHJldHVybiBiYTtcbiAgdmFyIG5ld19kaW1zID0gW11cbiAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspIG5ld19kaW1zW2ldID0gYmEuZGltc1tiYS5kaW1zLmxlbmd0aCAtIGkgLSAxXTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBsYXlvdXQsIG5ld19kaW1zLCBiYS5kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9raW5kXG5mdW5jdGlvbiBjYW1sX2JhX2tpbmQoYmEpIHtcbiAgcmV0dXJuIGJhLmtpbmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbGF5b3V0XG5mdW5jdGlvbiBjYW1sX2JhX2xheW91dChiYSkge1xuICByZXR1cm4gYmEubGF5b3V0O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX251bV9kaW1zXG5mdW5jdGlvbiBjYW1sX2JhX251bV9kaW1zKGJhKSB7XG4gIHJldHVybiBiYS5kaW1zLmxlbmd0aDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1cbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9kaW0oYmEsIGkpIHtcbiAgaWYgKGkgPCAwIHx8IGkgPj0gYmEuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuZGltXCIpO1xuICByZXR1cm4gYmEuZGltc1tpXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1fMVxuLy9SZXF1aXJlczogY2FtbF9iYV9kaW1cbmZ1bmN0aW9uIGNhbWxfYmFfZGltXzEoYmEpIHtcbiAgcmV0dXJuIGNhbWxfYmFfZGltKGJhLCAwKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1fMlxuLy9SZXF1aXJlczogY2FtbF9iYV9kaW1cbmZ1bmN0aW9uIGNhbWxfYmFfZGltXzIoYmEpIHtcbiAgcmV0dXJuIGNhbWxfYmFfZGltKGJhLCAxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1fM1xuLy9SZXF1aXJlczogY2FtbF9iYV9kaW1cbmZ1bmN0aW9uIGNhbWxfYmFfZGltXzMoYmEpIHtcbiAgcmV0dXJuIGNhbWxfYmFfZGltKGJhLCAyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfZ2VuZXJpY1xuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9nZW5lcmljKGJhLCBpKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoY2FtbF9qc19mcm9tX2FycmF5KGkpKTtcbiAgcmV0dXJuIGJhLmdldChvZnMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDE2KGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMSA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBiYS5nZXQob2ZzKTtcbiAgdmFyIGIyID0gYmEuZ2V0KG9mcyArIDEpO1xuICByZXR1cm4gKGIxIHwgKGIyIDw8IDgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQzMlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQzMihiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDMgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gYmEuZ2V0KG9mcyswKTtcbiAgdmFyIGIyID0gYmEuZ2V0KG9mcysxKTtcbiAgdmFyIGIzID0gYmEuZ2V0KG9mcysyKTtcbiAgdmFyIGI0ID0gYmEuZ2V0KG9mcyszKTtcbiAgcmV0dXJuICggKGIxIDw8IDApICB8XG4gICAgICAgICAgIChiMiA8PCA4KSAgfFxuICAgICAgICAgICAoYjMgPDwgMTYpIHxcbiAgICAgICAgICAgKGI0IDw8IDI0KSApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDY0KGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgNyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBiYS5nZXQob2ZzKzApO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzKzEpO1xuICB2YXIgYjMgPSBiYS5nZXQob2ZzKzIpO1xuICB2YXIgYjQgPSBiYS5nZXQob2ZzKzMpO1xuICB2YXIgYjUgPSBiYS5nZXQob2ZzKzQpO1xuICB2YXIgYjYgPSBiYS5nZXQob2ZzKzUpO1xuICB2YXIgYjcgPSBiYS5nZXQob2ZzKzYpO1xuICB2YXIgYjggPSBiYS5nZXQob2ZzKzcpO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhbYjgsYjcsYjYsYjUsYjQsYjMsYjIsYjFdKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfMVxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMShiYSwgaTApIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoaTApKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfMlxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMihiYSwgaTAsIGkxKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KFtpMCxpMV0pKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfM1xuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMyhiYSwgaTAsIGkxLCBpMikge1xuICByZXR1cm4gYmEuZ2V0KGJhLm9mZnNldChbaTAsaTEsaTJdKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0X2dlbmVyaWNcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9iYV9zZXRfZ2VuZXJpYyhiYSwgaSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KGNhbWxfanNfZnJvbV9hcnJheShpKSksIHYpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDE2KGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMSA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBiYS5zZXQob2ZzKzAsICB2ICAgICAgICAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzEsICh2ID4+PiA4KSAmIDB4ZmYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9zZXQzMihiYSwgaTAsIHYpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDMgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgYmEuc2V0KG9mcyswLCAgdiAgICAgICAgICYgMHhmZik7XG4gIGJhLnNldChvZnMrMSwgKHYgPj4+IDgpICAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzIsICh2ID4+PiAxNikgJiAweGZmKTtcbiAgYmEuc2V0KG9mcyszLCAodiA+Pj4gMjQpICYgMHhmZik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDY0KGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgNyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgdiA9IGNhbWxfaW50NjRfdG9fYnl0ZXModik7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCA4OyBpKyspIGJhLnNldChvZnMraSwgdls3LWldKVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXRfMVxuZnVuY3Rpb24gY2FtbF9iYV9zZXRfMShiYSwgaTAsIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChpMCksIHYpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8yXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8yKGJhLCBpMCwgaTEsIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChbaTAsaTFdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8zXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8zKGJhLCBpMCwgaTEsIGkyLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoW2kwLGkxLGkyXSksIHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9maWxsXG5mdW5jdGlvbiBjYW1sX2JhX2ZpbGwoYmEsIHYpIHtcbiAgYmEuZmlsbCh2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfYmxpdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2JsaXQoc3JjLCBkc3QpIHtcbiAgaWYgKGRzdC5kaW1zLmxlbmd0aCAhPSBzcmMuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuYmxpdDogZGltZW5zaW9uIG1pc21hdGNoXCIpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRzdC5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIGlmIChkc3QuZGltc1tpXSAhPSBzcmMuZGltc1tpXSlcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmJsaXQ6IGRpbWVuc2lvbiBtaXNtYXRjaFwiKTtcbiAgZHN0LmRhdGEuc2V0KHNyYy5kYXRhKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc3ViXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9zdWIoYmEsIG9mcywgbGVuKSB7XG4gIHZhciBjaGFuZ2VkX2RpbTtcbiAgdmFyIG11bCA9IDE7XG4gIGlmIChiYS5sYXlvdXQgPT0gMCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKylcbiAgICAgIG11bCA9IG11bCAqIGJhLmRpbXNbaV07XG4gICAgY2hhbmdlZF9kaW0gPSAwO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKGJhLmRpbXMubGVuZ3RoIC0gMSk7IGkrKylcbiAgICAgIG11bCA9IG11bCAqIGJhLmRpbXNbaV07XG4gICAgY2hhbmdlZF9kaW0gPSBiYS5kaW1zLmxlbmd0aCAtIDE7XG4gICAgb2ZzID0gb2ZzIC0gMTtcbiAgfVxuICBpZiAob2ZzIDwgMCB8fCBsZW4gPCAwIHx8IChvZnMgKyBsZW4pID4gYmEuZGltc1tjaGFuZ2VkX2RpbV0pe1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnN1YjogYmFkIHN1Yi1hcnJheVwiKTtcbiAgfVxuICB2YXIgbmV3X2RpbXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIG5ld19kaW1zW2ldID0gYmEuZGltc1tpXTtcbiAgbmV3X2RpbXNbY2hhbmdlZF9kaW1dID0gbGVuO1xuICBtdWwgKj0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChiYS5raW5kKTtcbiAgdmFyIG5ld19kYXRhID0gYmEuZGF0YS5zdWJhcnJheShvZnMgKiBtdWwsIChvZnMgKyBsZW4pICogbXVsKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBiYS5sYXlvdXQsIG5ld19kaW1zLCBuZXdfZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2xpY2Vcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheSwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfc2xpY2UoYmEsIHZpbmQpIHtcbiAgdmluZCA9IGNhbWxfanNfZnJvbV9hcnJheSh2aW5kKTtcbiAgdmFyIG51bV9pbmRzID0gdmluZC5sZW5ndGg7XG4gIHZhciBpbmRleCA9IFtdO1xuICB2YXIgc3ViX2RpbXMgPSBbXTtcbiAgdmFyIG9mcztcblxuICBpZiAobnVtX2luZHMgPiBiYS5kaW1zLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5zbGljZTogdG9vIG1hbnkgaW5kaWNlc1wiKTtcblxuICAvLyBDb21wdXRlIG9mZnNldCBhbmQgY2hlY2sgYm91bmRzXG4gIGlmIChiYS5sYXlvdXQgPT0gMCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2luZHM7IGkrKylcbiAgICAgIGluZGV4W2ldID0gdmluZFtpXTtcbiAgICBmb3IgKDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgICBpbmRleFtpXSA9IDA7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKG51bV9pbmRzKTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzICsgaV0gPSB2aW5kW2ldO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGggLSBudW1faW5kczsgaSsrKVxuICAgICAgaW5kZXhbaV0gPSAxO1xuICAgIHN1Yl9kaW1zID0gYmEuZGltcy5zbGljZSgwLCBiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzKTtcbiAgfVxuICBvZnMgPSBiYS5vZmZzZXQoaW5kZXgpO1xuICB2YXIgc2l6ZSA9IGNhbWxfYmFfZ2V0X3NpemUoc3ViX2RpbXMpO1xuICB2YXIgc2l6ZV9wZXJfZWxlbWVudCA9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoYmEua2luZCk7XG4gIHZhciBuZXdfZGF0YSA9IGJhLmRhdGEuc3ViYXJyYXkob2ZzICogc2l6ZV9wZXJfZWxlbWVudCwgKG9mcyArIHNpemUpICogc2l6ZV9wZXJfZWxlbWVudCk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBzdWJfZGltcywgbmV3X2RhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3Jlc2hhcGVcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfYmFfZ2V0X3NpemVcbmZ1bmN0aW9uIGNhbWxfYmFfcmVzaGFwZShiYSwgdmluZCkge1xuICB2aW5kID0gY2FtbF9qc19mcm9tX2FycmF5KHZpbmQpO1xuICB2YXIgbmV3X2RpbSA9IFtdO1xuICB2YXIgbnVtX2RpbXMgPSB2aW5kLmxlbmd0aDtcblxuICBpZiAobnVtX2RpbXMgPCAwIHx8IG51bV9kaW1zID4gMTYpe1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnJlc2hhcGU6IGJhZCBudW1iZXIgb2YgZGltZW5zaW9uc1wiKTtcbiAgfVxuICB2YXIgbnVtX2VsdHMgPSAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9kaW1zOyBpKyspIHtcbiAgICBuZXdfZGltW2ldID0gdmluZFtpXTtcbiAgICBpZiAobmV3X2RpbVtpXSA8IDApXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBuZWdhdGl2ZSBkaW1lbnNpb25cIik7XG4gICAgbnVtX2VsdHMgPSBudW1fZWx0cyAqIG5ld19kaW1baV07XG4gIH1cblxuICB2YXIgc2l6ZSA9IGNhbWxfYmFfZ2V0X3NpemUoYmEuZGltcyk7XG4gIC8vIENoZWNrIHRoYXQgc2l6ZXMgYWdyZWVcbiAgaWYgKG51bV9lbHRzICE9IHNpemUpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogc2l6ZSBtaXNtYXRjaFwiKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBiYS5sYXlvdXQsIG5ld19kaW0sIGJhLmRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NlcmlhbGl6ZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2ludDY0X3RvX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfYmFfc2VyaWFsaXplKHdyaXRlciwgYmEsIHN6KSB7XG4gIHdyaXRlci53cml0ZSgzMiwgYmEuZGltcy5sZW5ndGgpO1xuICB3cml0ZXIud3JpdGUoMzIsIChiYS5raW5kIHwgKGJhLmxheW91dCA8PCA4KSkpO1xuICBpZihiYS5jYW1sX2N1c3RvbSA9PSBcIl9iaWdhcnIwMlwiKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZihiYS5kaW1zW2ldIDwgMHhmZmZmKVxuICAgICAgICB3cml0ZXIud3JpdGUoMTYsIGJhLmRpbXNbaV0pO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHdyaXRlci53cml0ZSgxNiwgMHhmZmZmKTtcbiAgICAgICAgd3JpdGVyLndyaXRlKDMyLCAwKTtcbiAgICAgICAgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIGVsc2VcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykgd3JpdGVyLndyaXRlKDMyLGJhLmRpbXNbaV0pXG4gIHN3aXRjaChiYS5raW5kKXtcbiAgY2FzZSAyOiAgLy9JbnQ4QXJyYXlcbiAgY2FzZSAzOiAgLy9VaW50OEFycmF5XG4gIGNhc2UgMTI6IC8vVWludDhBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHdyaXRlci53cml0ZSg4LCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNDogIC8vIEludDE2QXJyYXlcbiAgY2FzZSA1OiAgLy8gVWludDE2QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoMTYsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA2OiAgLy8gSW50MzJBcnJheSAoaW50MzIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgODogIC8vIEludDMyQXJyYXkgKGludClcbiAgY2FzZSA5OiAgLy8gSW50MzJBcnJheSAobmF0aXZlaW50KVxuICAgIHdyaXRlci53cml0ZSg4LDApO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDc6ICAvLyBJbnQzMkFycmF5IChpbnQ2NClcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspe1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGJhLmdldChpKSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlICg4LCBiW2pdKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTogIC8vIEZsb2F0NjRBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoYmEuZ2V0KGkpKSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlICg4LCBiW2pdKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMDogIC8vIEZsb2F0MzJBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KGJhLmdldChpKSk7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGIpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMDogLy8gRmxvYXQzMkFycmF5IChjb21wbGV4MzIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoIC8gMjsgaSsrKXtcbiAgICAgIHZhciBqID0gYmEuZ2V0KGkpO1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQoalsxXSkpO1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQoalsyXSkpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMTogLy8gRmxvYXQ2NEFycmF5IChjb21wbGV4NjQpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoIC8gMjsgaSsrKXtcbiAgICAgIHZhciBjb21wbGV4ID0gYmEuZ2V0KGkpO1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChjb21wbGV4WzFdKSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlICg4LCBiW2pdKTtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoY29tcGxleFsyXSkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHdyaXRlci53cml0ZSAoOCwgYltqXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICB9XG4gIHN6WzBdID0gKDQgKyBiYS5kaW1zLmxlbmd0aCkgKiA0O1xuICBzelsxXSA9ICg0ICsgYmEuZGltcy5sZW5ndGgpICogODtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kZXNlcmlhbGl6ZVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2ZhaWx3aXRoXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzLCBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0c1xuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfYnVmZmVyXG5mdW5jdGlvbiBjYW1sX2JhX2Rlc2VyaWFsaXplKHJlYWRlciwgc3osIG5hbWUpe1xuICB2YXIgbnVtX2RpbXMgPSByZWFkZXIucmVhZDMycygpO1xuICBpZiAobnVtX2RpbXMgPCAwIHx8IG51bV9kaW1zID4gMTYpXG4gICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiB3cm9uZyBudW1iZXIgb2YgYmlnYXJyYXkgZGltZW5zaW9uc1wiKTtcbiAgdmFyIHRhZyA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIHZhciBraW5kID0gdGFnICYgMHhmZlxuICB2YXIgbGF5b3V0ID0gKHRhZyA+PiA4KSAmIDE7XG4gIHZhciBkaW1zID0gW11cbiAgaWYobmFtZSA9PSBcIl9iaWdhcnIwMlwiKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykge1xuICAgICAgdmFyIHNpemVfZGltID0gcmVhZGVyLnJlYWQxNnUoKTtcbiAgICAgIGlmKHNpemVfZGltID09IDB4ZmZmZil7XG4gICAgICAgIHZhciBzaXplX2RpbV9oaSA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgIHZhciBzaXplX2RpbV9sbyA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgIGlmKHNpemVfZGltX2hpICE9IDApXG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBiaWdhcnJheSBkaW1lbnNpb24gb3ZlcmZsb3cgaW4gMzJiaXRcIik7XG4gICAgICAgIHNpemVfZGltID0gc2l6ZV9kaW1fbG87XG4gICAgICB9XG4gICAgICBkaW1zLnB1c2goc2l6ZV9kaW0pO1xuICAgIH1cbiAgZWxzZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykgZGltcy5wdXNoKHJlYWRlci5yZWFkMzJ1KCkpO1xuICB2YXIgc2l6ZSA9IGNhbWxfYmFfZ2V0X3NpemUoZGltcyk7XG4gIHZhciBkYXRhID0gY2FtbF9iYV9jcmVhdGVfYnVmZmVyKGtpbmQsIHNpemUpO1xuICB2YXIgYmEgPSBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbiAgc3dpdGNoKGtpbmQpe1xuICBjYXNlIDI6ICAvL0ludDhBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkOHMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMzogIC8vVWludDhBcnJheVxuICBjYXNlIDEyOiAvL1VpbnQ4QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDQ6ICAvLyBJbnQxNkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQxNnMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNTogIC8vIFVpbnQxNkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQxNnUoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNjogIC8vIEludDMyQXJyYXkgKGludDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDg6ICAvLyBJbnQzMkFycmF5IChpbnQpXG4gIGNhc2UgOTogIC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICB2YXIgc2l4dHkgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgaWYoc2l4dHkpIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogY2Fubm90IHJlYWQgYmlnYXJyYXkgd2l0aCA2NC1iaXQgT0NhbWwgaW50c1wiKTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDMycygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA3OiAvLyAoaW50NjQpXG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIGludDY0ID0gY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KTtcbiAgICAgIGJhLnNldChpLGludDY0KTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTogIC8vIEZsb2F0NjRBcnJheVxuICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciBmID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgYmEuc2V0KGksZik7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDA6ICAvLyBGbG9hdDMyQXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIHZhciBmID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgYmEuc2V0KGksZik7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiAvLyBGbG9hdDMyQXJyYXkgKGNvbXBsZXgzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIHZhciByZSA9IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyhyZWFkZXIucmVhZDMycygpKTtcbiAgICAgIHZhciBpbSA9IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyhyZWFkZXIucmVhZDMycygpKTtcbiAgICAgIGJhLnNldChpLFsyNTQscmUsaW1dKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciByZSA9IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhjYW1sX2ludDY0X29mX2J5dGVzKHQpKTtcbiAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciBpbSA9IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhjYW1sX2ludDY0X29mX2J5dGVzKHQpKTtcbiAgICAgIGJhLnNldChpLFsyNTQscmUsaW1dKTtcbiAgICB9XG4gICAgYnJlYWtcbiAgfVxuICBzelswXSA9ICg0ICsgbnVtX2RpbXMpICogNDtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xufVxuXG4vL0RlcHJlY2F0ZWRcbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlX2Zyb21cbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2NyZWF0ZV9mcm9tKGRhdGExLCBkYXRhMiwganN0eXAsIGtpbmQsIGxheW91dCwgZGltcyl7XG4gIGlmKGRhdGEyIHx8IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCkgPT0gMil7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iYV9jcmVhdGVfZnJvbTogdXNlIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcIik7XG4gIH1cbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGExKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9oYXNoIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2hhc2hfbWl4X2ludCwgY2FtbF9oYXNoX21peF9mbG9hdFxuZnVuY3Rpb24gY2FtbF9iYV9oYXNoKGJhKXtcbiAgdmFyIG51bV9lbHRzID0gY2FtbF9iYV9nZXRfc2l6ZShiYS5kaW1zKTtcbiAgdmFyIGggPSAwO1xuICBzd2l0Y2goYmEua2luZCl7XG4gIGNhc2UgMjogIC8vSW50OEFycmF5XG4gIGNhc2UgMzogIC8vVWludDhBcnJheVxuICBjYXNlIDEyOiAvL1VpbnQ4QXJyYXlcbiAgICBpZihudW1fZWx0cyA+IDI1NikgbnVtX2VsdHMgPSAyNTY7XG4gICAgdmFyIHcgPSAwLCBpID0wO1xuICAgIGZvcihpID0gMDsgaSArIDQgPD0gYmEuZGF0YS5sZW5ndGg7IGkrPTQpe1xuICAgICAgdyA9IGJhLmRhdGFbaSswXSB8IChiYS5kYXRhW2krMV0gPDwgOCkgfCAoYmEuZGF0YVtpKzJdIDw8IDE2KSB8IChiYS5kYXRhW2krM10gPDwgMjQpO1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsdyk7XG4gICAgfVxuICAgIHcgPSAwO1xuICAgIHN3aXRjaCAobnVtX2VsdHMgJiAzKSB7XG4gICAgY2FzZSAzOiB3ICA9IGJhLmRhdGFbaSsyXSA8PCAxNjsgICAgLyogZmFsbHRocm91Z2ggKi9cbiAgICBjYXNlIDI6IHcgfD0gYmEuZGF0YVtpKzFdIDw8IDg7ICAgICAvKiBmYWxsdGhyb3VnaCAqL1xuICAgIGNhc2UgMTogdyB8PSBiYS5kYXRhW2krMF07XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDQ6ICAvLyBJbnQxNkFycmF5XG4gIGNhc2UgNTogIC8vIFVpbnQxNkFycmF5XG4gICAgaWYobnVtX2VsdHMgPiAxMjgpIG51bV9lbHRzID0gMTI4O1xuICAgIHZhciB3ID0gMCwgaSA9MDtcbiAgICBmb3IoaSA9IDA7IGkgKyAyIDw9IGJhLmRhdGEubGVuZ3RoOyBpKz0yKXtcbiAgICAgIHcgPSBiYS5kYXRhW2krMF0gfCAoYmEuZGF0YVtpKzFdIDw8IDE2KTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLHcpO1xuICAgIH1cbiAgICBpZiAoKG51bV9lbHRzICYgMSkgIT0gMClcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSA2OiAgLy8gSW50MzJBcnJheSAoaW50MzIpXG4gICAgaWYgKG51bV9lbHRzID4gNjQpIG51bV9lbHRzID0gNjQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgODogIC8vIEludDMyQXJyYXkgKGludClcbiAgY2FzZSA5OiAgLy8gSW50MzJBcnJheSAobmF0aXZlaW50KVxuICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICBjYXNlIDc6ICAvLyBJbnQzMkFycmF5IChpbnQ2NClcbiAgICBpZiAobnVtX2VsdHMgPiAzMikgbnVtX2VsdHMgPSAzMjtcbiAgICBudW1fZWx0cyAqPSAyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiAvLyBGbG9hdDMyQXJyYXkgKGNvbXBsZXgzMilcbiAgICBudW1fZWx0cyAqPTI7IC8qIGZhbGx0aHJvdWdoICovXG4gIGNhc2UgMDogIC8vIEZsb2F0MzJBcnJheVxuICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgIG51bV9lbHRzICo9MjsgLyogZmFsbHRocm91Z2ggKi9cbiAgY2FzZSAxOiAgLy8gRmxvYXQ2NEFycmF5XG4gICAgaWYgKG51bV9lbHRzID4gMzIpIG51bV9lbHRzID0gMzI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV90b190eXBlZF9hcnJheSBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJhKXtcbiAgcmV0dXJuIGJhLmRhdGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheSh0YSl7XG4gIHZhciBraW5kO1xuICBpZiAgICAgICh0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkga2luZCA9IDA7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSBraW5kID0gMTtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQ4QXJyYXkpIGtpbmQgPSAyO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIGtpbmQgPSAzO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSBraW5kID0gMztcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQxNkFycmF5KSBraW5kID0gNDtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkga2luZCA9IDU7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgSW50MzJBcnJheSkga2luZCA9IDY7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDMyQXJyYXkpIGtpbmQgPSA2O1xuICBlbHNlIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheTogdW5zdXBwb3J0ZWQga2luZFwiKTtcbiAgcmV0dXJuIGtpbmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZnJvbV90eXBlZF9hcnJheSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5KHRhKXtcbiAgdmFyIGtpbmQgPSBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkodGEpO1xuICB2YXIgdGEgPVxuICAgICAgLyogTmVlZGVkIHRvIGF2b2lkIHVuc2lnbmVkIHNldHRlcnMgb3ZlcmZsb3dpbmdcbiAgICAgICAgIHRoZSByYW5nZSBvZiBPQ2FtbCBbaW50MzJdIHZhbHVlcy4gKi9cbiAgICAgIHRhIGluc3RhbmNlb2YgVWludDMyQXJyYXkgP1xuICAgICAgbmV3IEludDMyQXJyYXkodGEuYnVmZmVyICx0YS5ieXRlT2Zmc2V0LCB0YS5sZW5ndGgpIDogdGE7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgMCwgW3RhLmxlbmd0aF0sIHRhKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2ludCBjb25zdCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcsIGNhbWxfc3RyX3JlcGVhdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9mb3JtYXRfaW50KGZtdCwgaSkge1xuICBpZiAoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhmbXQpID09IFwiJWRcIikgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIitpKTtcbiAgdmFyIGYgPSBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpO1xuICBpZiAoaSA8IDApIHsgaWYgKGYuc2lnbmVkY29udikgeyBmLnNpZ24gPSAtMTsgaSA9IC1pOyB9IGVsc2UgaSA+Pj49IDA7IH1cbiAgdmFyIHMgPSBpLnRvU3RyaW5nKGYuYmFzZSk7XG4gIGlmIChmLnByZWMgPj0gMCkge1xuICAgIGYuZmlsbGVyID0gJyAnO1xuICAgIHZhciBuID0gZi5wcmVjIC0gcy5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBzID0gY2FtbF9zdHJfcmVwZWF0IChuLCAnMCcpICsgcztcbiAgfVxuICByZXR1cm4gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCBzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSAocykge1xuICB2YXIgaSA9IDAsIGxlbiA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSwgYmFzZSA9IDEwLCBzaWduID0gMTtcbiAgaWYgKGxlbiA+IDApIHtcbiAgICBzd2l0Y2ggKGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocyxpKSkge1xuICAgIGNhc2UgNDU6IGkrKzsgc2lnbiA9IC0xOyBicmVhaztcbiAgICBjYXNlIDQzOiBpKys7IHNpZ24gPSAxOyBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGkgKyAxIDwgbGVuICYmIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSkgPT0gNDgpXG4gICAgc3dpdGNoIChjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAxKSkge1xuICAgIGNhc2UgMTIwOiBjYXNlIDg4OiBiYXNlID0gMTY7IGkgKz0gMjsgYnJlYWs7XG4gICAgY2FzZSAxMTE6IGNhc2UgNzk6IGJhc2UgPSAgODsgaSArPSAyOyBicmVhaztcbiAgICBjYXNlICA5ODogY2FzZSA2NjogYmFzZSA9ICAyOyBpICs9IDI7IGJyZWFrO1xuICAgIGNhc2UgMTE3OiBjYXNlIDg1OiBpICs9IDI7IGJyZWFrO1xuICAgIH1cbiAgcmV0dXJuIFtpLCBzaWduLCBiYXNlXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9kaWdpdFxuZnVuY3Rpb24gY2FtbF9wYXJzZV9kaWdpdChjKSB7XG4gIGlmIChjID49IDQ4ICYmIGMgPD0gNTcpICByZXR1cm4gYyAtIDQ4O1xuICBpZiAoYyA+PSA2NSAmJiBjIDw9IDkwKSAgcmV0dXJuIGMgLSA1NTtcbiAgaWYgKGMgPj0gOTcgJiYgYyA8PSAxMjIpIHJldHVybiBjIC0gODc7XG4gIHJldHVybiAtMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnRfb2Zfc3RyaW5nIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlLCBjYW1sX3BhcnNlX2RpZ2l0LCBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2ludF9vZl9zdHJpbmcgKHMpIHtcbiAgdmFyIHIgPSBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UgKHMpO1xuICB2YXIgaSA9IHJbMF0sIHNpZ24gPSByWzFdLCBiYXNlID0gclsyXTtcbiAgdmFyIGxlbiA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKTtcbiAgdmFyIHRocmVzaG9sZCA9IC0xID4+PiAwO1xuICB2YXIgYyA9IChpIDwgbGVuKT9jYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpOjA7XG4gIHZhciBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBkO1xuICBmb3IgKGkrKztpPGxlbjtpKyspIHtcbiAgICBjID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKTtcbiAgICBpZiAoYyA9PSA5NSkgY29udGludWU7XG4gICAgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gICAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgYnJlYWs7XG4gICAgcmVzID0gYmFzZSAqIHJlcyArIGQ7XG4gICAgaWYgKHJlcyA+IHRocmVzaG9sZCkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIH1cbiAgaWYgKGkgIT0gbGVuKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgLy8gRm9yIGJhc2UgZGlmZmVyZW50IGZyb20gMTAsIHdlIGV4cGVjdCBhbiB1bnNpZ25lZCByZXByZXNlbnRhdGlvbixcbiAgLy8gaGVuY2UgYW55IHZhbHVlIG9mICdyZXMnIChsZXNzIHRoYW4gJ3RocmVzaG9sZCcpIGlzIGFjY2VwdGFibGUuXG4gIC8vIEJ1dCB3ZSBoYXZlIHRvIGNvbnZlcnQgdGhlIHJlc3VsdCBiYWNrIHRvIGEgc2lnbmVkIGludGVnZXIuXG4gIHJlcyA9IHNpZ24gKiByZXM7XG4gIGlmICgoYmFzZSA9PSAxMCkgJiYgKChyZXMgfCAwKSAhPSByZXMpKVxuICAgIC8qIFNpZ25lZCByZXByZXNlbnRhdGlvbiBleHBlY3RlZCwgYWxsb3cgLTJeKG5iaXRzLTEpIHRvIDJeKG5iaXRzLTEpIC0gMSAqL1xuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICByZXR1cm4gcmVzIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tdWwgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbXVsKGEsYil7XG4gIHJldHVybiBNYXRoLmltdWwoYSxiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kaXZcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfemVyb19kaXZpZGVcbmZ1bmN0aW9uIGNhbWxfZGl2KHgseSkge1xuICBpZiAoeSA9PSAwKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICByZXR1cm4gKHgveSl8MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tb2Rcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfemVyb19kaXZpZGVcbmZ1bmN0aW9uIGNhbWxfbW9kKHgseSkge1xuICBpZiAoeSA9PSAwKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICByZXR1cm4geCV5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Jzd2FwMTZcbmZ1bmN0aW9uIGNhbWxfYnN3YXAxNih4KSB7XG4gIHJldHVybiAoKCgoeCAmIDB4MDBGRikgPDwgOCkgfFxuICAgICAgICAgICAoKHggJiAweEZGMDApID4+IDgpKSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2Jzd2FwXG5mdW5jdGlvbiBjYW1sX2ludDMyX2Jzd2FwKHgpIHtcbiAgcmV0dXJuICgoKHggJiAweDAwMDAwMEZGKSA8PCAyNCkgfFxuICAgICAgICAgICgoeCAmIDB4MDAwMEZGMDApIDw8IDgpIHxcbiAgICAgICAgICAoKHggJiAweDAwRkYwMDAwKSA+Pj4gOCkgfFxuICAgICAgICAgICgoeCAmIDB4RkYwMDAwMDApID4+PiAyNCkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9ic3dhcFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF9ic3dhcCh4KSB7XG4gIHZhciB5ID0gY2FtbF9pbnQ2NF90b19ieXRlcyh4KTtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoW3lbN10sIHlbNl0sIHlbNV0sIHlbNF0sIHlbM10sIHlbMl0sIHlbMV0sIHlbMF1dKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSGFzaHRibFxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF91bml2X3BhcmFtIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfc3RyaW5nLCBjYW1sX2lzX21sX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMsIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCwgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9WZXJzaW9uOiA8IDQuMTJcbmZ1bmN0aW9uIGNhbWxfaGFzaF91bml2X3BhcmFtIChjb3VudCwgbGltaXQsIG9iaikge1xuICB2YXIgaGFzaF9hY2N1ID0gMDtcbiAgZnVuY3Rpb24gaGFzaF9hdXggKG9iaikge1xuICAgIGxpbWl0IC0tO1xuICAgIGlmIChjb3VudCA8IDAgfHwgbGltaXQgPCAwKSByZXR1cm47XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5ICYmIG9ialswXSA9PT0gKG9ialswXXwwKSkge1xuICAgICAgc3dpdGNoIChvYmpbMF0pIHtcbiAgICAgIGNhc2UgMjQ4OlxuICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgY291bnQgLS07XG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiA2NTU5OSArIG9ialsyXSkgfCAwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUwOlxuICAgICAgICAvLyBGb3J3YXJkXG4gICAgICAgIGxpbWl0Kys7IGhhc2hfYXV4KG9iaik7IGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY291bnQgLS07XG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIG9ialswXSkgfCAwO1xuICAgICAgICBmb3IgKHZhciBpID0gb2JqLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIGhhc2hfYXV4IChvYmpbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyhvYmopKSB7XG4gICAgICBjb3VudCAtLTtcbiAgICAgIHZhciBjb250ZW50ID0gY2FtbF9tbF9ieXRlc19jb250ZW50KG9iaik7XG4gICAgICBpZih0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBmb3IgKHZhciBiID0gY29udGVudCwgbCA9IGIubGVuZ3RoLCBpID0gMDsgaSA8IGw7IGkrKylcbiAgICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBiLmNoYXJDb2RlQXQoaSkpIHwgMDtcbiAgICAgIH0gZWxzZSB7IC8qIEFSUkFZICovXG4gICAgICAgIGZvciAodmFyIGEgPSBjb250ZW50LCBsID0gYS5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGFbaV0pIHwgMDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKG9iaikpIHtcbiAgICAgIHZhciBqc2J5dGVzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhvYmopO1xuICAgICAgZm9yICh2YXIgYiA9IGpzYnl0ZXMsIGwgPSBqc2J5dGVzLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGIuY2hhckNvZGVBdChpKSkgfCAwO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZm9yICh2YXIgYiA9IG9iaiwgbCA9IG9iai5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBiLmNoYXJDb2RlQXQoaSkpIHwgMDtcbiAgICB9IGVsc2UgaWYgKG9iaiA9PT0gKG9ianwwKSkge1xuICAgICAgLy8gSW50ZWdlclxuICAgICAgY291bnQgLS07XG4gICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogNjU1OTkgKyBvYmopIHwgMDtcbiAgICB9IGVsc2UgaWYgKG9iaiA9PT0gK29iaikge1xuICAgICAgLy8gRmxvYXRcbiAgICAgIGNvdW50LS07XG4gICAgICB2YXIgcCA9IGNhbWxfaW50NjRfdG9fYnl0ZXMgKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCAob2JqKSk7XG4gICAgICBmb3IgKHZhciBpID0gNzsgaSA+PSAwOyBpLS0pIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIHBbaV0pIHwgMDtcbiAgICB9IGVsc2UgaWYob2JqICYmIG9iai5jYW1sX2N1c3RvbSkge1xuICAgICAgaWYoY2FtbF9jdXN0b21fb3BzW29iai5jYW1sX2N1c3RvbV0gJiYgY2FtbF9jdXN0b21fb3BzW29iai5jYW1sX2N1c3RvbV0uaGFzaCkge1xuICAgICAgICB2YXIgaCA9IGNhbWxfY3VzdG9tX29wc1tvYmouY2FtbF9jdXN0b21dLmhhc2gob2JqKSB8IDA7XG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiA2NTU5OSArIGgpIHwgMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaGFzaF9hdXggKG9iaik7XG4gIHJldHVybiBoYXNoX2FjY3UgJiAweDNGRkZGRkZGO1xufVxuXG4vL2Z1bmN0aW9uIFJPVEwzMih4LG4pIHsgcmV0dXJuICgoeCA8PCBuKSB8ICh4ID4+PiAoMzItbikpKTsgfVxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfbXVsXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ludChoLGQpIHtcbiAgZCA9IGNhbWxfbXVsKGQsIDB4Y2M5ZTJkNTF8MCk7XG4gIGQgPSAoKGQgPDwgMTUpIHwgKGQgPj4+ICgzMi0xNSkpKTsgLy8gUk9UTDMyKGQsIDE1KTtcbiAgZCA9IGNhbWxfbXVsKGQsIDB4MWI4NzM1OTMpO1xuICBoIF49IGQ7XG4gIGggPSAoKGggPDwgMTMpIHwgKGggPj4+ICgzMi0xMykpKTsgICAvL1JPVEwzMihoLCAxMyk7XG4gIHJldHVybiAoKChoICsgKGggPDwgMikpfDApICsgKDB4ZTY1NDZiNjR8MCkpfDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfbXVsXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpIHtcbiAgaCBePSBoID4+PiAxNjtcbiAgaCA9IGNhbWxfbXVsIChoLCAweDg1ZWJjYTZifDApO1xuICBoIF49IGggPj4+IDEzO1xuICBoID0gY2FtbF9tdWwgKGgsIDB4YzJiMmFlMzV8MCk7XG4gIGggXj0gaCA+Pj4gMTY7XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaGFzaF9taXhfaW50NjRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmxvYXQgKGgsIHYwKSB7XG4gIHJldHVybiBjYW1sX2hhc2hfbWl4X2ludDY0KGgsIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCAodjApKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfaW50NjRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2xvMzIsIGNhbWxfaW50NjRfaGkzMlxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9pbnQ2NCAoaCwgdikge1xuICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgY2FtbF9pbnQ2NF9sbzMyKHYpKTtcbiAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGNhbWxfaW50NjRfaGkzMih2KSk7XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCwgcykge1xuICB2YXIgbGVuID0gcy5sZW5ndGgsIGksIHc7XG4gIGZvciAoaSA9IDA7IGkgKyA0IDw9IGxlbjsgaSArPSA0KSB7XG4gICAgdyA9IHMuY2hhckNvZGVBdChpKVxuICAgICAgfCAocy5jaGFyQ29kZUF0KGkrMSkgPDwgOClcbiAgICAgIHwgKHMuY2hhckNvZGVBdChpKzIpIDw8IDE2KVxuICAgICAgfCAocy5jaGFyQ29kZUF0KGkrMykgPDwgMjQpO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgfVxuICB3ID0gMDtcbiAgc3dpdGNoIChsZW4gJiAzKSB7XG4gIGNhc2UgMzogdyAgPSBzLmNoYXJDb2RlQXQoaSsyKSA8PCAxNjtcbiAgY2FzZSAyOiB3IHw9IHMuY2hhckNvZGVBdChpKzEpIDw8IDg7XG4gIGNhc2UgMTpcbiAgICB3IHw9IHMuY2hhckNvZGVBdChpKTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIGRlZmF1bHQ6XG4gIH1cbiAgaCBePSBsZW47XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FyclxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyKGgsIHMpIHtcbiAgdmFyIGxlbiA9IHMubGVuZ3RoLCBpLCB3O1xuICBmb3IgKGkgPSAwOyBpICsgNCA8PSBsZW47IGkgKz0gNCkge1xuICAgIHcgPSBzW2ldXG4gICAgICB8IChzW2krMV0gPDwgOClcbiAgICAgIHwgKHNbaSsyXSA8PCAxNilcbiAgICAgIHwgKHNbaSszXSA8PCAyNCk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICB9XG4gIHcgPSAwO1xuICBzd2l0Y2ggKGxlbiAmIDMpIHtcbiAgY2FzZSAzOiB3ICA9IHNbaSsyXSA8PCAxNjtcbiAgY2FzZSAyOiB3IHw9IHNbaSsxXSA8PCA4O1xuICBjYXNlIDE6IHcgfD0gc1tpXTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIGRlZmF1bHQ6XG4gIH1cbiAgaCBePSBsZW47XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9ieXRlc19hcnJcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfYnl0ZXMoaCwgdikge1xuICB2YXIgY29udGVudCA9IGNhbWxfbWxfYnl0ZXNfY29udGVudCh2KTtcbiAgaWYodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpXG4gICAgcmV0dXJuIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBjb250ZW50KVxuICBlbHNlIC8qIEFSUkFZICovXG4gICAgcmV0dXJuIGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyKGgsIGNvbnRlbnQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X3N0cmluZyhoLCB2KSB7XG4gIHJldHVybiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCwgY2FtbF9qc2J5dGVzX29mX3N0cmluZyh2KSk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfc3RyaW5nLCBjYW1sX2lzX21sX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludCwgY2FtbF9oYXNoX21peF9maW5hbFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9mbG9hdCwgY2FtbF9oYXNoX21peF9zdHJpbmcsIGNhbWxfaGFzaF9taXhfYnl0ZXMsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbmZ1bmN0aW9uIGNhbWxfaGFzaCAoY291bnQsIGxpbWl0LCBzZWVkLCBvYmopIHtcbiAgdmFyIHF1ZXVlLCByZCwgd3IsIHN6LCBudW0sIGgsIHYsIGksIGxlbjtcbiAgc3ogPSBsaW1pdDtcbiAgaWYgKHN6IDwgMCB8fCBzeiA+IDI1Nikgc3ogPSAyNTY7XG4gIG51bSA9IGNvdW50O1xuICBoID0gc2VlZDtcbiAgcXVldWUgPSBbb2JqXTsgcmQgPSAwOyB3ciA9IDE7XG4gIHdoaWxlIChyZCA8IHdyICYmIG51bSA+IDApIHtcbiAgICB2ID0gcXVldWVbcmQrK107XG4gICAgaWYgKHYgJiYgdi5jYW1sX2N1c3RvbSl7XG4gICAgICBpZihjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0gJiYgY2FtbF9jdXN0b21fb3BzW3YuY2FtbF9jdXN0b21dLmhhc2gpIHtcbiAgICAgICAgdmFyIGhoID0gY2FtbF9jdXN0b21fb3BzW3YuY2FtbF9jdXN0b21dLmhhc2godik7XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludCAoaCwgaGgpO1xuICAgICAgICBudW0gLS07XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2WzBdID09PSAodlswXXwwKSkge1xuICAgICAgc3dpdGNoICh2WzBdKSB7XG4gICAgICBjYXNlIDI0ODpcbiAgICAgICAgLy8gT2JqZWN0XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB2WzJdKTtcbiAgICAgICAgbnVtLS07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTA6XG4gICAgICAgIC8vIEZvcndhcmRcbiAgICAgICAgcXVldWVbLS1yZF0gPSB2WzFdO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmKGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh2WzBdKSkge1xuICAgICAgICAgIC8qIEFsbCBjb250aW51YXRpb25zIGhhc2ggdG8gdGhlIHNhbWUgdmFsdWUsXG4gICAgICAgICAgICAgc2luY2Ugd2UgaGF2ZSBubyBpZGVhIGhvdyB0byBkaXN0aW5ndWlzaCB0aGVtLiAqL1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0YWcgPSAoKHYubGVuZ3RoIC0gMSkgPDwgMTApIHwgdlswXTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHRhZyk7XG4gICAgICAgIGZvciAoaSA9IDEsIGxlbiA9IHYubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBpZiAod3IgPj0gc3opIGJyZWFrO1xuICAgICAgICAgIHF1ZXVlW3dyKytdID0gdltpXTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXModikpIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2J5dGVzKGgsdilcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcodikpIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X3N0cmluZyhoLHYpXG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsdilcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodiA9PT0gKHZ8MCkpIHtcbiAgICAgIC8vIEludGVnZXJcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB2K3YrMSk7XG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAvLyBGbG9hdFxuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQoaCx2KTtcbiAgICAgIG51bS0tO1xuICAgIH1cbiAgfVxuICBoID0gY2FtbF9oYXNoX21peF9maW5hbChoKTtcbiAgcmV0dXJuIGggJiAweDNGRkZGRkZGO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19oYXNoXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ZpbmFsLCBjYW1sX2hhc2hfbWl4X3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfaGFzaChoLCB2KXtcbiAgdmFyIGggPSBjYW1sX2hhc2hfbWl4X3N0cmluZyhoLHYpO1xuICB2YXIgaCA9IGNhbWxfaGFzaF9taXhfZmluYWwoaCk7XG4gIHJldHVybiBoICYgMHgzRkZGRkZGRjtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfY29uc3RhbnRzXG52YXIgY2FtbF9tYXJzaGFsX2NvbnN0YW50cyA9IHtcbiAgUFJFRklYX1NNQUxMX0JMT0NLOiAgICAgICAgIDB4ODAsXG4gIFBSRUZJWF9TTUFMTF9JTlQ6ICAgICAgICAgICAweDQwLFxuICBQUkVGSVhfU01BTExfU1RSSU5HOiAgICAgICAgMHgyMCxcbiAgQ09ERV9JTlQ4OiAgICAgICAgICAgICAgICAgIDB4MDAsXG4gIENPREVfSU5UMTY6ICAgICAgICAgICAgICAgICAweDAxLFxuICBDT0RFX0lOVDMyOiAgICAgICAgICAgICAgICAgMHgwMixcbiAgQ09ERV9JTlQ2NDogICAgICAgICAgICAgICAgIDB4MDMsXG4gIENPREVfU0hBUkVEODogICAgICAgICAgICAgICAweDA0LFxuICBDT0RFX1NIQVJFRDE2OiAgICAgICAgICAgICAgMHgwNSxcbiAgQ09ERV9TSEFSRUQzMjogICAgICAgICAgICAgIDB4MDYsXG4gIENPREVfQkxPQ0szMjogICAgICAgICAgICAgICAweDA4LFxuICBDT0RFX0JMT0NLNjQ6ICAgICAgICAgICAgICAgMHgxMyxcbiAgQ09ERV9TVFJJTkc4OiAgICAgICAgICAgICAgIDB4MDksXG4gIENPREVfU1RSSU5HMzI6ICAgICAgICAgICAgICAweDBBLFxuICBDT0RFX0RPVUJMRV9CSUc6ICAgICAgICAgICAgMHgwQixcbiAgQ09ERV9ET1VCTEVfTElUVExFOiAgICAgICAgIDB4MEMsXG4gIENPREVfRE9VQkxFX0FSUkFZOF9CSUc6ICAgICAweDBELFxuICBDT0RFX0RPVUJMRV9BUlJBWThfTElUVExFOiAgMHgwRSxcbiAgQ09ERV9ET1VCTEVfQVJSQVkzMl9CSUc6ICAgIDB4MEYsXG4gIENPREVfRE9VQkxFX0FSUkFZMzJfTElUVExFOiAweDA3LFxuICBDT0RFX0NPREVQT0lOVEVSOiAgICAgICAgICAgMHgxMCxcbiAgQ09ERV9JTkZJWFBPSU5URVI6ICAgICAgICAgIDB4MTEsXG4gIENPREVfQ1VTVE9NOiAgICAgICAgICAgICAgICAweDEyLFxuICBDT0RFX0NVU1RPTV9MRU46ICAgICAgICAgICAgMHgxOCxcbiAgQ09ERV9DVVNUT01fRklYRUQ6ICAgICAgICAgIDB4MTlcbn1cblxuXG4vL1Byb3ZpZGVzOiBVSW50OEFycmF5UmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9hcnJheSwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gVUludDhBcnJheVJlYWRlciAocywgaSkgeyB0aGlzLnMgPSBzOyB0aGlzLmkgPSBpOyB9XG5VSW50OEFycmF5UmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgcmVhZDh1OmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuc1t0aGlzLmkrK107IH0sXG4gIHJlYWQ4czpmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnNbdGhpcy5pKytdIDw8IDI0ID4+IDI0OyB9LFxuICByZWFkMTZ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKHNbaV0gPDwgOCkgfCBzW2kgKyAxXVxuICB9LFxuICByZWFkMTZzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKHNbaV0gPDwgMjQgPj4gMTYpIHwgc1tpICsgMV07XG4gIH0sXG4gIHJlYWQzMnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKHNbaV0gPDwgMjQpIHwgKHNbaSsxXSA8PCAxNikgfFxuICAgICAgICAgICAgKHNbaSsyXSA8PCA4KSB8IHNbaSszXSkgPj4+IDA7XG4gIH0sXG4gIHJlYWQzMnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoc1tpXSA8PCAyNCkgfCAoc1tpKzFdIDw8IDE2KSB8XG4gICAgICAoc1tpKzJdIDw8IDgpIHwgc1tpKzNdO1xuICB9LFxuICByZWFkc3RyOmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheSh0aGlzLnMuc3ViYXJyYXkoaSwgaSArIGxlbikpO1xuICB9LFxuICByZWFkdWludDhhcnJheTpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gdGhpcy5zLnN1YmFycmF5KGksIGkgKyBsZW4pO1xuICB9XG59XG5cblxuLy9Qcm92aWRlczogTWxTdHJpbmdSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIE1sU3RyaW5nUmVhZGVyIChzLCBpKSB7IHRoaXMucyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocyk7IHRoaXMuaSA9IGk7IH1cbk1sU3RyaW5nUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgcmVhZDh1OmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucy5jaGFyQ29kZUF0KHRoaXMuaSsrKTsgfSxcbiAgcmVhZDhzOmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucy5jaGFyQ29kZUF0KHRoaXMuaSsrKSA8PCAyNCA+PiAyNDsgfSxcbiAgcmVhZDE2dTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzLmNoYXJDb2RlQXQoaSkgPDwgOCkgfCBzLmNoYXJDb2RlQXQoaSArIDEpXG4gIH0sXG4gIHJlYWQxNnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAocy5jaGFyQ29kZUF0KGkpIDw8IDI0ID4+IDE2KSB8IHMuY2hhckNvZGVBdChpICsgMSk7XG4gIH0sXG4gIHJlYWQzMnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfCAocy5jaGFyQ29kZUF0KGkrMSkgPDwgMTYpIHxcbiAgICAgICAgICAgIChzLmNoYXJDb2RlQXQoaSsyKSA8PCA4KSB8IHMuY2hhckNvZGVBdChpKzMpKSA+Pj4gMDtcbiAgfSxcbiAgcmVhZDMyczpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuIChzLmNoYXJDb2RlQXQoaSkgPDwgMjQpIHwgKHMuY2hhckNvZGVBdChpKzEpIDw8IDE2KSB8XG4gICAgICAocy5jaGFyQ29kZUF0KGkrMikgPDwgOCkgfCBzLmNoYXJDb2RlQXQoaSszKTtcbiAgfSxcbiAgcmVhZHN0cjpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh0aGlzLnMuc3Vic3RyaW5nKGksIGkgKyBsZW4pKTtcbiAgfSxcbiAgcmVhZHVpbnQ4YXJyYXk6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICB2YXIgcyA9IHRoaXMucztcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICBmb3IodmFyIGogPSAwOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGJbal0gPSBzLmNoYXJDb2RlQXQoaSArIGopO1xuICAgIH1cbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBiO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IEJpZ1N0cmluZ1JlYWRlclxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXksIGNhbWxfYmFfZ2V0XzFcbmZ1bmN0aW9uIEJpZ1N0cmluZ1JlYWRlciAoYnMsIGkpIHsgdGhpcy5zID0gYnM7IHRoaXMuaSA9IGk7IH1cbkJpZ1N0cmluZ1JlYWRlci5wcm90b3R5cGUgPSB7XG4gIHJlYWQ4dTpmdW5jdGlvbiAoKSB7IHJldHVybiBjYW1sX2JhX2dldF8xKHRoaXMucyx0aGlzLmkrKyk7IH0sXG4gIHJlYWQ4czpmdW5jdGlvbiAoKSB7IHJldHVybiBjYW1sX2JhX2dldF8xKHRoaXMucyx0aGlzLmkrKykgPDwgMjQgPj4gMjQ7IH0sXG4gIHJlYWQxNnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoY2FtbF9iYV9nZXRfMShzLGkpIDw8IDgpIHwgY2FtbF9iYV9nZXRfMShzLGkgKyAxKVxuICB9LFxuICByZWFkMTZzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKGNhbWxfYmFfZ2V0XzEocyxpKSA8PCAyNCA+PiAxNikgfCBjYW1sX2JhX2dldF8xKHMsaSArIDEpO1xuICB9LFxuICByZWFkMzJ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKChjYW1sX2JhX2dldF8xKHMsaSkgICA8PCAyNCkgfCAoY2FtbF9iYV9nZXRfMShzLGkrMSkgPDwgMTYpIHxcbiAgICAgICAgICAgIChjYW1sX2JhX2dldF8xKHMsaSsyKSA8PCA4KSAgfCBjYW1sX2JhX2dldF8xKHMsaSszKSAgICAgICAgICkgPj4+IDA7XG4gIH0sXG4gIHJlYWQzMnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoY2FtbF9iYV9nZXRfMShzLGkpICAgPDwgMjQpIHwgKGNhbWxfYmFfZ2V0XzEocyxpKzEpIDw8IDE2KSB8XG4gICAgICAoY2FtbF9iYV9nZXRfMShzLGkrMikgPDwgOCkgIHwgY2FtbF9iYV9nZXRfMShzLGkrMyk7XG4gIH0sXG4gIHJlYWRzdHI6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHZhciBhcnIgPSBuZXcgQXJyYXkobGVuKVxuICAgIGZvcih2YXIgaiA9IDA7IGogPCBsZW47IGorKyl7XG4gICAgICBhcnJbal0gPSBjYW1sX2JhX2dldF8xKHRoaXMucywgaStqKTtcbiAgICB9XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoYXJyKTtcbiAgfSxcbiAgcmVhZHVpbnQ4YXJyYXk6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHZhciBvZmZzZXQgPSB0aGlzLm9mZnNldChpKTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiB0aGlzLnMuZGF0YS5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbik7XG4gIH1cbn1cblxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cywgY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9mbG9hdF9vZl9ieXRlcyAoYSkge1xuICByZXR1cm4gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzIChjYW1sX2ludDY0X29mX2J5dGVzIChhKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9zdHJpbmcgbXV0YWJsZVxuLy9SZXF1aXJlczogTWxTdHJpbmdSZWFkZXIsIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXJcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9zdHJpbmcocyxvZnMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBNbFN0cmluZ1JlYWRlciAocywgdHlwZW9mIG9mcz09XCJudW1iZXJcIj9vZnM6b2ZzWzBdKTtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIocmVhZGVyLCBvZnMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBNbFN0cmluZ1JlYWRlciwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlciwgY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyhzLG9mcykge1xuICB2YXIgcmVhZGVyID0gbmV3IE1sU3RyaW5nUmVhZGVyIChjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSwgdHlwZW9mIG9mcz09XCJudW1iZXJcIj9vZnM6b2ZzWzBdKTtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIocmVhZGVyLCBvZnMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgc2l6ZVswXSA9IDg7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzICh0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X21hcnNoYWwod3JpdGVyLCB2LCBzaXplcykge1xuICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMgKHYpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgd3JpdGVyLndyaXRlICg4LCBiW2ldKTtcbiAgc2l6ZXNbMF0gPSA4OyBzaXplc1sxXSA9IDg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfdW5tYXJzaGFsXG5mdW5jdGlvbiBjYW1sX2ludDMyX3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICBzaXplWzBdID0gNDtcbiAgcmV0dXJuIHJlYWRlci5yZWFkMzJzICgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICBzd2l0Y2ggKHJlYWRlci5yZWFkOHUgKCkpIHtcbiAgY2FzZSAxOlxuICAgIHNpemVbMF0gPSA0O1xuICAgIHJldHVybiByZWFkZXIucmVhZDMycyAoKTtcbiAgY2FzZSAyOlxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogbmF0aXZlIGludGVnZXIgdmFsdWUgdG9vIGxhcmdlXCIpO1xuICBkZWZhdWx0OiBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGlsbC1mb3JtZWQgbmF0aXZlIGludGVnZXJcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3VubWFyc2hhbCwgY2FtbF9pbnQ2NF9tYXJzaGFsLCBjYW1sX2ludDY0X2NvbXBhcmUsIGNhbWxfaW50NjRfaGFzaFxuLy9SZXF1aXJlczogY2FtbF9pbnQzMl91bm1hcnNoYWwsIGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9iYV9zZXJpYWxpemUsIGNhbWxfYmFfZGVzZXJpYWxpemUsIGNhbWxfYmFfY29tcGFyZSwgY2FtbF9iYV9oYXNoXG52YXIgY2FtbF9jdXN0b21fb3BzID1cbiAgICB7XCJfalwiOiB7XG4gICAgICBkZXNlcmlhbGl6ZSA6IGNhbWxfaW50NjRfdW5tYXJzaGFsLFxuICAgICAgc2VyaWFsaXplICA6IGNhbWxfaW50NjRfbWFyc2hhbCxcbiAgICAgIGZpeGVkX2xlbmd0aCA6IDgsXG4gICAgICBjb21wYXJlIDogY2FtbF9pbnQ2NF9jb21wYXJlLFxuICAgICAgaGFzaCA6IGNhbWxfaW50NjRfaGFzaFxuICAgIH0sXG4gICAgIFwiX2lcIjoge1xuICAgICAgIGRlc2VyaWFsaXplIDogY2FtbF9pbnQzMl91bm1hcnNoYWwsXG4gICAgICAgZml4ZWRfbGVuZ3RoIDogNCxcbiAgICAgfSxcbiAgICAgXCJfblwiOiB7XG4gICAgICAgZGVzZXJpYWxpemUgOiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWwsXG4gICAgICAgZml4ZWRfbGVuZ3RoIDogNCxcbiAgICAgfSxcbiAgICAgXCJfYmlnYXJyYXlcIjp7XG4gICAgICAgZGVzZXJpYWxpemUgOiAoZnVuY3Rpb24gKHJlYWRlciwgc3opIHtyZXR1cm4gY2FtbF9iYV9kZXNlcmlhbGl6ZSAocmVhZGVyLHN6LFwiX2JpZ2FycmF5XCIpfSksXG4gICAgICAgc2VyaWFsaXplIDogY2FtbF9iYV9zZXJpYWxpemUsXG4gICAgICAgY29tcGFyZSA6IGNhbWxfYmFfY29tcGFyZSxcbiAgICAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gICAgIH0sXG4gICAgIFwiX2JpZ2FycjAyXCI6e1xuICAgICAgIGRlc2VyaWFsaXplIDogKGZ1bmN0aW9uIChyZWFkZXIsIHN6KSB7cmV0dXJuIGNhbWxfYmFfZGVzZXJpYWxpemUgKHJlYWRlcixzeixcIl9iaWdhcnIwMlwiKX0pLFxuICAgICAgIHNlcmlhbGl6ZSA6IGNhbWxfYmFfc2VyaWFsaXplLFxuICAgICAgIGNvbXBhcmUgOiBjYW1sX2JhX2NvbXBhcmUsXG4gICAgICAgaGFzaDogY2FtbF9iYV9oYXNoLFxuICAgICB9XG4gICAgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfZmxvYXRfb2ZfYnl0ZXMsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogVUludDhBcnJheVJlYWRlclxuLy9SZXF1aXJlczogY2FtbF9kZWNvbXByZXNzX2lucHV0XG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyKHJlYWRlciwgb2ZzKSB7XG4gIGZ1bmN0aW9uIHJlYWR2bHEob3ZlcmZsb3cpIHtcbiAgICB2YXIgYyA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICB2YXIgbiA9IGMgJiAweDdGO1xuICAgIHdoaWxlICgoYyAmIDB4ODApICE9IDApIHtcbiAgICAgIGMgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgbjcgPSBuIDw8IDc7XG4gICAgICBpZiAobiAhPSBuNyA+PiA3KSBvdmVyZmxvd1swXSA9IHRydWU7XG4gICAgICBuID0gbjcgfCAoYyAmIDB4N0YpO1xuICAgIH1cbiAgICByZXR1cm4gbjtcbiAgfVxuICB2YXIgbWFnaWMgPSByZWFkZXIucmVhZDMydSAoKVxuICBzd2l0Y2gobWFnaWMpe1xuICBjYXNlIDB4ODQ5NUE2QkU6IC8qIEludGV4dF9tYWdpY19udW1iZXJfc21hbGwgKi9cbiAgICB2YXIgaGVhZGVyX2xlbiA9IDIwO1xuICAgIHZhciBjb21wcmVzc2VkID0gMDtcbiAgICB2YXIgZGF0YV9sZW4gPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICB2YXIgdW5jb21wcmVzc2VkX2RhdGFfbGVuID0gZGF0YV9sZW47XG4gICAgdmFyIG51bV9vYmplY3RzID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgdmFyIF9zaXplXzMyID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgdmFyIF9zaXplXzY0ID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgYnJlYWtcbiAgY2FzZSAweDg0OTVBNkJEOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX2NvbXByZXNzZWQgKi9cbiAgICB2YXIgaGVhZGVyX2xlbiA9IHJlYWRlci5yZWFkOHUoKSAmIDB4M0Y7XG4gICAgdmFyIGNvbXByZXNzZWQgPSAxO1xuICAgIHZhciBvdmVyZmxvdyA9IFtmYWxzZV07XG4gICAgdmFyIGRhdGFfbGVuID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgdmFyIHVuY29tcHJlc3NlZF9kYXRhX2xlbiA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgIHZhciBudW1fb2JqZWN0cyA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgIHZhciBfc2l6ZV8zMiA9IHJlYWR2bHEgKG92ZXJmbG93KTtcbiAgICB2YXIgX3NpemVfNjQgPSByZWFkdmxxIChvdmVyZmxvdyk7XG4gICAgaWYob3ZlcmZsb3dbMF0pe1xuICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcjogb2JqZWN0IHRvbyBsYXJnZSB0byBiZSByZWFkIGJhY2sgb24gdGhpcyBwbGF0Zm9ybVwiKTtcbiAgICB9XG4gICAgYnJlYWtcbiAgY2FzZSAweDg0OTVBNkJGOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX2JpZyAqL1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiBhIDMyLWJpdCBwbGF0Zm9ybVwiKTtcbiAgICBicmVha1xuICBkZWZhdWx0OlxuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBiYWQgb2JqZWN0XCIpO1xuICAgIGJyZWFrO1xuICB9XG4gIHZhciBzdGFjayA9IFtdO1xuICB2YXIgaW50ZXJuX29ial90YWJsZSA9IChudW1fb2JqZWN0cyA+IDApP1tdOm51bGw7XG4gIHZhciBvYmpfY291bnRlciA9IDA7XG4gIGZ1bmN0aW9uIGludGVybl9yZWMgKHJlYWRlcikge1xuICAgIHZhciBjb2RlID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICBpZiAoY29kZSA+PSAweDQwIC8qY3N0LlBSRUZJWF9TTUFMTF9JTlQqLykge1xuICAgICAgaWYgKGNvZGUgPj0gMHg4MCAvKmNzdC5QUkVGSVhfU01BTExfQkxPQ0sqLykge1xuICAgICAgICB2YXIgdGFnID0gY29kZSAmIDB4RjtcbiAgICAgICAgdmFyIHNpemUgPSAoY29kZSA+PiA0KSAmIDB4NztcbiAgICAgICAgdmFyIHYgPSBbdGFnXTtcbiAgICAgICAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIHY7XG4gICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2VcbiAgICAgICAgcmV0dXJuIChjb2RlICYgMHgzRik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjb2RlID49IDB4MjAvKmNzdC5QUkVGSVhfU01BTExfU1RSSU5HICovKSB7XG4gICAgICAgIHZhciBsZW4gPSBjb2RlICYgMHgxRjtcbiAgICAgICAgdmFyIHYgPSByZWFkZXIucmVhZHN0ciAobGVuKTtcbiAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICByZXR1cm4gdjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXRjaChjb2RlKSB7XG4gICAgICAgIGNhc2UgMHgwMDogLy9jc3QuQ09ERV9JTlQ4OlxuICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDhzICgpO1xuICAgICAgICBjYXNlIDB4MDE6IC8vY3N0LkNPREVfSU5UMTY6XG4gICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkMTZzICgpO1xuICAgICAgICBjYXNlIDB4MDI6IC8vY3N0LkNPREVfSU5UMzI6XG4gICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkMzJzICgpO1xuICAgICAgICBjYXNlIDB4MDM6IC8vY3N0LkNPREVfSU5UNjQ6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBpbnRlZ2VyIHRvbyBsYXJnZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAweDA0OiAvL2NzdC5DT0RFX1NIQVJFRDg6XG4gICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgICAgICAgaWYoY29tcHJlc3NlZCA9PSAwKSBvZmZzZXQgPSBvYmpfY291bnRlciAtIG9mZnNldDtcbiAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvZmZzZXRdO1xuICAgICAgICBjYXNlIDB4MDU6IC8vY3N0LkNPREVfU0hBUkVEMTY6XG4gICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkMTZ1ICgpO1xuICAgICAgICAgIGlmKGNvbXByZXNzZWQgPT0gMCkgb2Zmc2V0ID0gb2JqX2NvdW50ZXIgLSBvZmZzZXQ7XG4gICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2Zmc2V0XTtcbiAgICAgICAgY2FzZSAweDA2OiAvL2NzdC5DT0RFX1NIQVJFRDMyOlxuICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICAgICAgICBpZihjb21wcmVzc2VkID09IDApIG9mZnNldCA9IG9ial9jb3VudGVyIC0gb2Zmc2V0O1xuICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29mZnNldF07XG4gICAgICAgIGNhc2UgMHgwODogLy9jc3QuQ09ERV9CTE9DSzMyOlxuICAgICAgICAgIHZhciBoZWFkZXIgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICAgICAgICB2YXIgdGFnID0gaGVhZGVyICYgMHhGRjtcbiAgICAgICAgICB2YXIgc2l6ZSA9IGhlYWRlciA+PiAxMDtcbiAgICAgICAgICB2YXIgdiA9IFt0YWddO1xuICAgICAgICAgIGlmIChzaXplID09IDApIHJldHVybiB2O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MTM6IC8vY3N0LkNPREVfQkxPQ0s2NDpcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoIChcImlucHV0X3ZhbHVlOiBkYXRhIGJsb2NrIHRvbyBsYXJnZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAweDA5OiAvL2NzdC5DT0RFX1NUUklORzg6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyIChsZW4pO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBBOiAvL2NzdC5DT0RFX1NUUklORzMyOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIgKGxlbik7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEM6IC8vY3N0LkNPREVfRE9VQkxFX0xJVFRMRTpcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IDg7aSsrKSB0WzcgLSBpXSA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgICAgICAgdmFyIHYgPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwQjogLy9jc3QuQ09ERV9ET1VCTEVfQklHOlxuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgODtpKyspIHRbaV0gPSByZWFkZXIucmVhZDh1ICgpO1xuICAgICAgICAgIHZhciB2ID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEU6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZOF9MSVRUTEU6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0WzcgLSBqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwRDogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVk4X0JJRzpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7aSA8PSBsZW47aSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2IFtpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDA3OiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWTMyX0xJVFRMRTpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0WzcgLSBqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwRjogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVkzMl9CSUc6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdiBbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgxMDogLy9jc3QuQ09ERV9DT0RFUE9JTlRFUjpcbiAgICAgICAgY2FzZSAweDExOiAvL2NzdC5DT0RFX0lORklYUE9JTlRFUjpcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoIChcImlucHV0X3ZhbHVlOiBjb2RlIHBvaW50ZXJcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMHgxMjogLy9jc3QuQ09ERV9DVVNUT006XG4gICAgICAgIGNhc2UgMHgxODogLy9jc3QuQ09ERV9DVVNUT01fTEVOOlxuICAgICAgICBjYXNlIDB4MTk6IC8vY3N0LkNPREVfQ1VTVE9NX0ZJWEVEOlxuICAgICAgICAgIHZhciBjLCBzID0gXCJcIjtcbiAgICAgICAgICB3aGlsZSAoKGMgPSByZWFkZXIucmVhZDh1ICgpKSAhPSAwKSBzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUgKGMpO1xuICAgICAgICAgIHZhciBvcHMgPSBjYW1sX2N1c3RvbV9vcHNbc107XG4gICAgICAgICAgdmFyIGV4cGVjdGVkX3NpemU7XG4gICAgICAgICAgaWYoIW9wcylcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdW5rbm93biBjdXN0b20gYmxvY2sgaWRlbnRpZmllclwiKTtcbiAgICAgICAgICBzd2l0Y2goY29kZSl7XG4gICAgICAgICAgY2FzZSAweDEyOiAvLyBjc3QuQ09ERV9DVVNUT00gKGRlcHJlY2F0ZWQpXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDB4MTk6IC8vIGNzdC5DT0RFX0NVU1RPTV9GSVhFRFxuICAgICAgICAgICAgaWYoIW9wcy5maXhlZF9sZW5ndGgpXG4gICAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogZXhwZWN0ZWQgYSBmaXhlZC1zaXplIGN1c3RvbSBibG9ja1wiKTtcbiAgICAgICAgICAgIGV4cGVjdGVkX3NpemUgPSBvcHMuZml4ZWRfbGVuZ3RoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAweDE4OiAvLyBjc3QuQ09ERV9DVVNUT01fTEVOXG4gICAgICAgICAgICBleHBlY3RlZF9zaXplID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgICAgICAgICAvLyBTa2lwIHNpemU2NFxuICAgICAgICAgICAgcmVhZGVyLnJlYWQzMnMoKTsgcmVhZGVyLnJlYWQzMnMoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgb2xkX3BvcyA9IHJlYWRlci5pO1xuICAgICAgICAgIHZhciBzaXplID0gWzBdO1xuICAgICAgICAgIHZhciB2ID0gb3BzLmRlc2VyaWFsaXplKHJlYWRlciwgc2l6ZSk7XG4gICAgICAgICAgaWYoZXhwZWN0ZWRfc2l6ZSAhPSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgaWYoZXhwZWN0ZWRfc2l6ZSAhPSBzaXplWzBdKVxuICAgICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGluY29ycmVjdCBsZW5ndGggb2Ygc2VyaWFsaXplZCBjdXN0b20gYmxvY2tcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoIChcImlucHV0X3ZhbHVlOiBpbGwtZm9ybWVkIG1lc3NhZ2VcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYoY29tcHJlc3NlZCkge1xuICAgIGlmKGNhbWxfZGVjb21wcmVzc19pbnB1dCkge1xuICAgICAgdmFyIGRhdGEgPSByZWFkZXIucmVhZHVpbnQ4YXJyYXkoZGF0YV9sZW4pO1xuICAgICAgdmFyIHJlcyA9IG5ldyBVaW50OEFycmF5KHVuY29tcHJlc3NlZF9kYXRhX2xlbik7XG4gICAgICB2YXIgcmVzID0gY2FtbF9kZWNvbXByZXNzX2lucHV0KGRhdGEsIHJlcyk7XG4gICAgICB2YXIgcmVhZGVyID0gbmV3IFVJbnQ4QXJyYXlSZWFkZXIocmVzLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBjb21wcmVzc2VkIG9iamVjdCwgY2Fubm90IGRlY29tcHJlc3NcIik7XG4gICAgfVxuICB9XG4gIHZhciByZXMgPSBpbnRlcm5fcmVjIChyZWFkZXIpO1xuICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgIHZhciBzaXplID0gc3RhY2sucG9wKCk7XG4gICAgdmFyIHYgPSBzdGFjay5wb3AoKTtcbiAgICB2YXIgZCA9IHYubGVuZ3RoO1xuICAgIGlmIChkIDwgc2l6ZSkgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICB2W2RdID0gaW50ZXJuX3JlYyAocmVhZGVyKTtcbiAgfVxuICBpZiAodHlwZW9mIG9mcyE9XCJudW1iZXJcIikgb2ZzWzBdID0gcmVhZGVyLmk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuLy9WZXJzaW9uOiA8IDUuMS4wXG52YXIgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplID0gMjBcblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplXG4vL1ZlcnNpb246ID49IDUuMS4wXG52YXIgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplID0gMTZcblxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBVSW50OEFycmF5UmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbmZ1bmN0aW9uIGNhbWxfbWFyc2hhbF9kYXRhX3NpemUgKHMsIG9mcykge1xuICB2YXIgciA9IG5ldyBVSW50OEFycmF5UmVhZGVyKGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMocyksIG9mcyk7XG4gIGZ1bmN0aW9uIHJlYWR2bHEob3ZlcmZsb3cpIHtcbiAgICB2YXIgYyA9IHIucmVhZDh1KCk7XG4gICAgdmFyIG4gPSBjICYgMHg3RjtcbiAgICB3aGlsZSAoKGMgJiAweDgwKSAhPSAwKSB7XG4gICAgICBjID0gci5yZWFkOHUoKTtcbiAgICAgIHZhciBuNyA9IG4gPDwgNztcbiAgICAgIGlmIChuICE9IG43ID4+IDcpIG92ZXJmbG93WzBdID0gdHJ1ZTtcbiAgICAgIG4gPSBuNyB8IChjICYgMHg3Rik7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9XG5cbiAgc3dpdGNoKHIucmVhZDMydSgpKXtcbiAgY2FzZSAweDg0OTVBNkJFOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX3NtYWxsICovXG4gICAgdmFyIGhlYWRlcl9sZW4gPSAyMDtcbiAgICB2YXIgZGF0YV9sZW4gPSByLnJlYWQzMnUoKTtcbiAgICBicmVhaztcbiAgY2FzZSAweDg0OTVBNkJEOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX2NvbXByZXNzZWQgKi9cbiAgICB2YXIgaGVhZGVyX2xlbiA9IHIucmVhZDh1KCkgJiAweDNGO1xuICAgIHZhciBvdmVyZmxvdyA9IFtmYWxzZV07XG4gICAgdmFyIGRhdGFfbGVuID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgaWYob3ZlcmZsb3dbMF0pe1xuICAgICAgY2FtbF9mYWlsd2l0aChcIk1hcnNoYWwuZGF0YV9zaXplOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiB0aGlzIHBsYXRmb3JtXCIpO1xuICAgIH1cbiAgICBicmVha1xuICBjYXNlIDB4ODQ5NUE2QkY6IC8qIEludGV4dF9tYWdpY19udW1iZXJfYmlnICovXG4gIGRlZmF1bHQ6XG4gICAgY2FtbF9mYWlsd2l0aChcIk1hcnNoYWwuZGF0YV9zaXplOiBiYWQgb2JqZWN0XCIpO1xuICAgIGJyZWFrXG4gIH1cbiAgcmV0dXJuIGhlYWRlcl9sZW4gLSBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUgKyBkYXRhX2xlbjtcbn1cblxuLy9Qcm92aWRlczogTWxPYmplY3RUYWJsZVxudmFyIE1sT2JqZWN0VGFibGU7XG5pZiAodHlwZW9mIGdsb2JhbFRoaXMuTWFwID09PSAndW5kZWZpbmVkJykge1xuICBNbE9iamVjdFRhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgLyogcG9seWZpbGwgKHVzaW5nIGxpbmVhciBzZWFyY2gpICovXG4gICAgZnVuY3Rpb24gTmFpdmVMb29rdXAob2JqcykgeyB0aGlzLm9ianMgPSBvYmpzOyB9XG4gICAgTmFpdmVMb29rdXAucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vYmpzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLm9ianNbaV0gPT09IHYpIHJldHVybiBpO1xuICAgICAgfVxuICAgIH07XG4gICAgTmFpdmVMb29rdXAucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgLy8gRG8gbm90aGluZyBoZXJlLiBbTWxPYmplY3RUYWJsZS5zdG9yZV0gd2lsbCBwdXNoIHRvIFt0aGlzLm9ianNdIGRpcmVjdGx5LlxuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gTWxPYmplY3RUYWJsZSgpIHtcbiAgICAgIHRoaXMub2JqcyA9IFtdOyB0aGlzLmxvb2t1cCA9IG5ldyBOYWl2ZUxvb2t1cCh0aGlzLm9ianMpO1xuICAgIH07XG4gIH0oKTtcbn1cbmVsc2Uge1xuICBNbE9iamVjdFRhYmxlID0gZnVuY3Rpb24gTWxPYmplY3RUYWJsZSgpIHtcbiAgICB0aGlzLm9ianMgPSBbXTsgdGhpcy5sb29rdXAgPSBuZXcgZ2xvYmFsVGhpcy5NYXAoKTtcbiAgfTtcbn1cblxuTWxPYmplY3RUYWJsZS5wcm90b3R5cGUuc3RvcmUgPSBmdW5jdGlvbih2KSB7XG4gIHRoaXMubG9va3VwLnNldCh2LCB0aGlzLm9ianMubGVuZ3RoKTtcbiAgdGhpcy5vYmpzLnB1c2godik7XG59XG5cbk1sT2JqZWN0VGFibGUucHJvdG90eXBlLnJlY2FsbCA9IGZ1bmN0aW9uKHYpIHtcbiAgdmFyIGkgPSB0aGlzLmxvb2t1cC5nZXQodik7XG4gIHJldHVybiAoaSA9PT0gdW5kZWZpbmVkKVxuICAgID8gdW5kZWZpbmVkIDogdGhpcy5vYmpzLmxlbmd0aCAtIGk7ICAgLyogaW5kZXggaXMgcmVsYXRpdmUgKi9cbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ZhaWx3aXRoXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXRcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXMsIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfc3RyaW5nLCBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IE1sT2JqZWN0VGFibGUsIGNhbWxfbGlzdF90b19qc19hcnJheSwgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9pc19jb250aW51YXRpb25fdGFnXG52YXIgY2FtbF9vdXRwdXRfdmFsID0gZnVuY3Rpb24gKCl7XG4gIGZ1bmN0aW9uIFdyaXRlciAoKSB7IHRoaXMuY2h1bmsgPSBbXTsgfVxuICBXcml0ZXIucHJvdG90eXBlID0ge1xuICAgIGNodW5rX2lkeDoyMCwgYmxvY2tfbGVuOjAsIG9ial9jb3VudGVyOjAsIHNpemVfMzI6MCwgc2l6ZV82NDowLFxuICAgIHdyaXRlOmZ1bmN0aW9uIChzaXplLCB2YWx1ZSkge1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4O2kgPj0gMDtpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSAodmFsdWUgPj4gaSkgJiAweEZGO1xuICAgIH0sXG4gICAgd3JpdGVfYXQ6ZnVuY3Rpb24gKHBvcywgc2l6ZSwgdmFsdWUpIHtcbiAgICAgIHZhciBwb3MgPSBwb3M7XG4gICAgICBmb3IgKHZhciBpID0gc2l6ZSAtIDg7aSA+PSAwO2kgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1twb3MrK10gPSAodmFsdWUgPj4gaSkgJiAweEZGO1xuICAgIH0sXG4gICAgd3JpdGVfY29kZTpmdW5jdGlvbiAoc2l6ZSwgY29kZSwgdmFsdWUpIHtcbiAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSBjb2RlO1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4O2kgPj0gMDtpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSAodmFsdWUgPj4gaSkgJiAweEZGO1xuICAgIH0sXG4gICAgd3JpdGVfc2hhcmVkOmZ1bmN0aW9uIChvZmZzZXQpIHtcbiAgICAgIGlmIChvZmZzZXQgPCAoMSA8PCA4KSkgdGhpcy53cml0ZV9jb2RlKDgsIDB4MDQgLypjc3QuQ09ERV9TSEFSRUQ4Ki8sIG9mZnNldCk7XG4gICAgICBlbHNlIGlmIChvZmZzZXQgPCAoMSA8PCAxNikpIHRoaXMud3JpdGVfY29kZSgxNiwgMHgwNSAvKmNzdC5DT0RFX1NIQVJFRDE2Ki8sIG9mZnNldCk7XG4gICAgICBlbHNlIHRoaXMud3JpdGVfY29kZSgzMiwgMHgwNiAvKmNzdC5DT0RFX1NIQVJFRDMyKi8sIG9mZnNldCk7XG4gICAgfSxcbiAgICBwb3M6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5jaHVua19pZHggfSxcbiAgICBmaW5hbGl6ZTpmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmJsb2NrX2xlbiA9IHRoaXMuY2h1bmtfaWR4IC0gMjA7XG4gICAgICB0aGlzLmNodW5rX2lkeCA9IDA7XG4gICAgICB0aGlzLndyaXRlICgzMiwgMHg4NDk1QTZCRSk7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5ibG9ja19sZW4pO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIHRoaXMub2JqX2NvdW50ZXIpO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIHRoaXMuc2l6ZV8zMik7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5zaXplXzY0KTtcbiAgICAgIHJldHVybiB0aGlzLmNodW5rO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKHYsIGZsYWdzKSB7XG4gICAgZmxhZ3MgPSBjYW1sX2xpc3RfdG9fanNfYXJyYXkoZmxhZ3MpO1xuXG4gICAgdmFyIG5vX3NoYXJpbmcgPSAoZmxhZ3MuaW5kZXhPZigwIC8qTWFyc2hhbC5Ob19zaGFyaW5nKi8pICE9PSAtMSksXG4gICAgICAgIGNsb3N1cmVzID0gIChmbGFncy5pbmRleE9mKDEgLypNYXJzaGFsLkNsb3N1cmVzKi8pICE9PSAtMSk7XG4gICAgLyogTWFyc2hhbC5Db21wYXRfMzIgaXMgcmVkdW5kYW50IHNpbmNlIGludGVnZXJzIGFyZSAzMi1iaXQgYW55d2F5ICovXG5cbiAgICBpZiAoY2xvc3VyZXMpXG4gICAgICBjb25zb2xlLndhcm4oXCJpbiBjYW1sX291dHB1dF92YWw6IGZsYWcgTWFyc2hhbC5DbG9zdXJlcyBpcyBub3Qgc3VwcG9ydGVkLlwiKTtcblxuICAgIHZhciB3cml0ZXIgPSBuZXcgV3JpdGVyICgpO1xuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBpbnRlcm5fb2JqX3RhYmxlID0gbm9fc2hhcmluZyA/IG51bGwgOiBuZXcgTWxPYmplY3RUYWJsZSgpO1xuXG4gICAgZnVuY3Rpb24gbWVtbyh2KSB7XG4gICAgICBpZiAobm9fc2hhcmluZykgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIGV4aXN0aW5nX29mZnNldCA9IGludGVybl9vYmpfdGFibGUucmVjYWxsKHYpO1xuICAgICAgaWYgKGV4aXN0aW5nX29mZnNldCkgeyB3cml0ZXIud3JpdGVfc2hhcmVkKGV4aXN0aW5nX29mZnNldCk7IHJldHVybiB0cnVlOyB9XG4gICAgICBlbHNlIHsgaW50ZXJuX29ial90YWJsZS5zdG9yZSh2KTsgcmV0dXJuIGZhbHNlOyB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0ZXJuX3JlYyAodikge1xuICAgICAgaWYgKHYuY2FtbF9jdXN0b20pIHtcbiAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgdmFyIG5hbWUgPSB2LmNhbWxfY3VzdG9tO1xuICAgICAgICB2YXIgb3BzID0gY2FtbF9jdXN0b21fb3BzW25hbWVdO1xuICAgICAgICB2YXIgc3pfMzJfNjQgPSBbMCwwXTtcbiAgICAgICAgaWYoIW9wcy5zZXJpYWxpemUpXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwib3V0cHV0X3ZhbHVlOiBhYnN0cmFjdCB2YWx1ZSAoQ3VzdG9tKVwiKTtcbiAgICAgICAgaWYob3BzLmZpeGVkX2xlbmd0aCA9PSB1bmRlZmluZWQpe1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgxOCAvKmNzdC5DT0RFX0NVU1RPTV9MRU4qLyk7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlICg4LCBuYW1lLmNoYXJDb2RlQXQoaSkpO1xuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB2YXIgaGVhZGVyX3BvcyA9IHdyaXRlci5wb3MgKCk7XG4gICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3BzLnNlcmlhbGl6ZSh3cml0ZXIsIHYsIHN6XzMyXzY0KTtcbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcywgMzIsIHN6XzMyXzY0WzBdKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcyArIDQsIDMyLCAwKTsgLy8gemVyb1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zICsgOCwgMzIsIHN6XzMyXzY0WzFdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MTkgLypjc3QuQ09ERV9DVVNUT01fRklYRUQqLyk7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlICg4LCBuYW1lLmNoYXJDb2RlQXQoaSkpO1xuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB2YXIgb2xkX3BvcyA9IHdyaXRlci5wb3MoKTtcbiAgICAgICAgICBvcHMuc2VyaWFsaXplKHdyaXRlciwgdiwgc3pfMzJfNjQpO1xuICAgICAgICAgIGlmIChvcHMuZml4ZWRfbGVuZ3RoICE9IHdyaXRlci5wb3MoKSAtIG9sZF9wb3MpXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwib3V0cHV0X3ZhbHVlOiBpbmNvcnJlY3QgZml4ZWQgc2l6ZXMgc3BlY2lmaWVkIGJ5IFwiICsgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gMiArICgoc3pfMzJfNjRbMF0gKyAzKSA+PiAyKTtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gMiArICgoc3pfMzJfNjRbMV0gKyA3KSA+PiAzKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2WzBdID09PSAodlswXXwwKSkge1xuICAgICAgICBpZiAodlswXSA9PSAyNTEpIHtcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwib3V0cHV0X3ZhbHVlOiBhYnN0cmFjdCB2YWx1ZSAoQWJzdHJhY3QpXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodlswXSkpXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwib3V0cHV0X3ZhbHVlOiBjb250aW51YXRpb24gdmFsdWVcIik7XG4gICAgICAgIGlmICh2Lmxlbmd0aCA+IDEgJiYgbWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICBpZiAodlswXSA8IDE2ICYmIHYubGVuZ3RoIC0gMSA8IDgpXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDgwIC8qY3N0LlBSRUZJWF9TTUFMTF9CTE9DSyovICsgdlswXSArICgodi5sZW5ndGggLSAxKTw8NCkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoMzIsIDB4MDggLypjc3QuQ09ERV9CTE9DSzMyKi8sICgodi5sZW5ndGgtMSkgPDwgMTApIHwgdlswXSk7XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IHYubGVuZ3RoO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSB2Lmxlbmd0aDtcbiAgICAgICAgaWYgKHYubGVuZ3RoID4gMSkgc3RhY2sucHVzaCAodiwgMSk7XG4gICAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXModikpIHtcbiAgICAgICAgaWYoIShjYW1sX2lzX21sX2J5dGVzKGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIikpKSkge1xuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IFtCeXRlcy50XSBjYW5ub3Qgc2FmZWx5IGJlIG1hcnNoYWxlZCB3aXRoIFstLWVuYWJsZSB1c2UtanMtc3RyaW5nXVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbGVuID0gY2FtbF9tbF9ieXRlc19sZW5ndGgodik7XG4gICAgICAgIGlmIChsZW4gPCAweDIwKVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgyMCAvKmNzdC5QUkVGSVhfU01BTExfU1RSSU5HKi8gKyBsZW4pO1xuICAgICAgICBlbHNlIGlmIChsZW4gPCAweDEwMClcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoOCwgMHgwOS8qY3N0LkNPREVfU1RSSU5HOCovLCBsZW4pO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUgKDMyLCAweDBBIC8qY3N0LkNPREVfU1RSSU5HMzIqLywgbGVuKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IGxlbjtpKyspXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQodixpKSk7XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IDEgKyAoKChsZW4gKyA0KSAvIDQpfDApO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAxICsgKCgobGVuICsgOCkgLyA4KXwwKTtcbiAgICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcodikpIHtcbiAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgdmFyIGxlbiA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCh2KTtcbiAgICAgICAgaWYgKGxlbiA8IDB4MjApXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcqLyArIGxlbik7XG4gICAgICAgIGVsc2UgaWYgKGxlbiA8IDB4MTAwKVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICg4LCAweDA5Lypjc3QuQ09ERV9TVFJJTkc4Ki8sIGxlbik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoMzIsIDB4MEEgLypjc3QuQ09ERV9TVFJJTkczMiovLCBsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgbGVuO2krKylcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQodixpKSk7XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IDEgKyAoKChsZW4gKyA0KSAvIDQpfDApO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAxICsgKCgobGVuICsgOCkgLyA4KXwwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2ICE9ICh2fDApKXtcbiAgICAgICAgICB2YXIgdHlwZV9vZl92ID0gdHlwZW9mIHY7XG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBJZiBhIGZsb2F0IGhhcHBlbnMgdG8gYmUgYW4gaW50ZWdlciBpdCBpcyBzZXJpYWxpemVkIGFzIGFuIGludGVnZXJcbiAgICAgICAgICAvLyAoSnNfb2Zfb2NhbWwgY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdHlwZSBvZiBhbiBpbnRlZ2VyIG51bWJlciBpc1xuICAgICAgICAgIC8vIGZsb2F0IG9yIGludGVnZXIuKSBUaGlzIGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBjcmFzaGVzIHdoZW5cbiAgICAgICAgICAvLyB1bm1hcnNoYWxsaW5nIHVzaW5nIHRoZSBzdGFuZGFyZCBydW50aW1lLiBJdCBzZWVtcyBiZXR0ZXIgdG9cbiAgICAgICAgICAvLyBzeXN0ZW1hdGljYWxseSBmYWlsIG9uIG1hcnNoYWxsaW5nLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gICAgICAgICAgaWYodHlwZV9vZl92ICE9IFwibnVtYmVyXCIpXG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogYWJzdHJhY3QgdmFsdWUgKFwiK3R5cGVfb2ZfditcIilcIik7XG4gICAgICAgICAgLy8gICAgICAgICAgdmFyIHQgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCh2KSk7XG4gICAgICAgICAgLy8gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDBCIC8qY3N0LkNPREVfRE9VQkxFX0JJRyovKTtcbiAgICAgICAgICAvLyAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpPDg7IGkrKyl7d3JpdGVyLndyaXRlKDgsdFtpXSl9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodiA+PSAwICYmIHYgPCAweDQwKSB7XG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAwWDQwIC8qY3N0LlBSRUZJWF9TTUFMTF9JTlQqLyArIHYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh2ID49IC0oMSA8PCA3KSAmJiB2IDwgKDEgPDwgNykpXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSg4LCAweDAwIC8qY3N0LkNPREVfSU5UOCovLCB2KTtcbiAgICAgICAgICBlbHNlIGlmICh2ID49IC0oMSA8PCAxNSkgJiYgdiA8ICgxIDw8IDE1KSlcbiAgICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDE2LCAweDAxIC8qY3N0LkNPREVfSU5UMTYqLywgdik7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoMzIsIDB4MDIgLypjc3QuQ09ERV9JTlQzMiovLCB2KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBleHRlcm5fcmVjICh2KTtcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgdmFyIGkgPSBzdGFjay5wb3AgKCk7XG4gICAgICB2YXIgdiA9IHN0YWNrLnBvcCAoKTtcbiAgICAgIGlmIChpICsgMSA8IHYubGVuZ3RoKSBzdGFjay5wdXNoICh2LCBpICsgMSk7XG4gICAgICBleHRlcm5fcmVjICh2W2ldKTtcbiAgICB9XG4gICAgaWYgKGludGVybl9vYmpfdGFibGUpIHdyaXRlci5vYmpfY291bnRlciA9IGludGVybl9vYmpfdGFibGUub2Jqcy5sZW5ndGg7XG4gICAgd3JpdGVyLmZpbmFsaXplKCk7XG4gICAgcmV0dXJuIHdyaXRlci5jaHVuaztcbiAgfVxufSAoKTtcblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyAodiwgZmxhZ3MpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5IChjYW1sX291dHB1dF92YWwgKHYsIGZsYWdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9ieXRlc19vZl9hcnJheVxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnl0ZXMgKHYsIGZsYWdzKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX29mX2FycmF5IChjYW1sX291dHB1dF92YWwgKHYsIGZsYWdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlclxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX2JsaXRfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlciAocywgb2ZzLCBsZW4sIHYsIGZsYWdzKSB7XG4gIHZhciB0ID0gY2FtbF9vdXRwdXRfdmFsICh2LCBmbGFncyk7XG4gIGlmICh0Lmxlbmd0aCA+IGxlbikgY2FtbF9mYWlsd2l0aCAoXCJNYXJzaGFsLnRvX2J1ZmZlcjogYnVmZmVyIG92ZXJmbG93XCIpO1xuICBjYW1sX2JsaXRfYnl0ZXModCwgMCwgcywgb2ZzLCB0Lmxlbmd0aCk7XG4gIHJldHVybiAwO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbF90YWdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfc3RyaW5nLCBjYW1sX2lzX21sX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmVfdmFsX3RhZyhhKXtcbiAgaWYgKHR5cGVvZiBhID09PSBcIm51bWJlclwiKSByZXR1cm4gMTAwMDsgLy8gaW50X3RhZyAod2UgdXNlIGl0IGZvciBhbGwgbnVtYmVycylcbiAgZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyhhKSkgcmV0dXJuIDI1MjsgLy8gc3RyaW5nX3RhZ1xuICBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyhhKSkgcmV0dXJuIDEyNTI7IC8vIG9jYW1sIHN0cmluZyAoaWYgZGlmZmVyZW50IGZyb20gYnl0ZXMpXG4gIGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBBcnJheSAmJiBhWzBdID09PSAoYVswXT4+PjApICYmIGFbMF0gPD0gMjU1KSB7XG4gICAgLy8gTG9vayBsaWtlIGFuIG9jYW1sIGJsb2NrXG4gICAgdmFyIHRhZyA9IGFbMF0gfCAwO1xuICAgIC8vIGlnbm9yZSBkb3VibGVfYXJyYXlfdGFnIGJlY2F1c2Ugd2UgY2Fubm90IGFjY3VyYXRlbHkgc2V0XG4gICAgLy8gdGhpcyB0YWcgd2hlbiB3ZSBjcmVhdGUgYW4gYXJyYXkgb2YgZmxvYXQuXG4gICAgcmV0dXJuICh0YWcgPT0gMjU0KT8wOnRhZ1xuICB9XG4gIGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBTdHJpbmcpIHJldHVybiAxMjUyMDsgLy8gamF2YXNjcmlwdCBzdHJpbmcsIGxpa2Ugc3RyaW5nX3RhZyAoMjUyKVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PSBcInN0cmluZ1wiKSByZXR1cm4gMTI1MjA7IC8vIGphdmFzY3JpcHQgc3RyaW5nLCBsaWtlIHN0cmluZ190YWcgKDI1MilcbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIE51bWJlcikgcmV0dXJuIDEwMDA7IC8vIGludF90YWcgKHdlIHVzZSBpdCBmb3IgYWxsIG51bWJlcnMpXG4gIGVsc2UgaWYgKGEgJiYgYS5jYW1sX2N1c3RvbSkgcmV0dXJuIDEyNTU7IC8vIGxpa2UgY3VzdG9tX3RhZyAoMjU1KVxuICBlbHNlIGlmIChhICYmIGEuY29tcGFyZSkgcmV0dXJuIDEyNTY7IC8vIGxpa2UgY3VzdG9tX3RhZyAoMjU1KVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PSBcImZ1bmN0aW9uXCIpIHJldHVybiAxMjQ3OyAvLyBsaWtlIGNsb3N1cmVfdGFnICgyNDcpXG4gIGVsc2UgaWYgKHR5cGVvZiBhID09IFwic3ltYm9sXCIpIHJldHVybiAxMjUxO1xuICByZXR1cm4gMTAwMTsgLy9vdXRfb2ZfaGVhcF90YWdcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2N1c3RvbV9vcHNcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShhKXtcbiAgcmV0dXJuIGNhbWxfY3VzdG9tX29wc1thLmNhbWxfY3VzdG9tXSAmJiBjYW1sX2N1c3RvbV9vcHNbYS5jYW1sX2N1c3RvbV0uY29tcGFyZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShudW0sIGN1c3RvbSwgc3dhcCwgdG90YWwpIHtcbiAgdmFyIGNvbXAgPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oY3VzdG9tKTtcbiAgaWYoY29tcCkge1xuICAgIHZhciB4ID0gKHN3YXAgPiAwKT9jb21wKGN1c3RvbSxudW0sdG90YWwpOmNvbXAobnVtLGN1c3RvbSx0b3RhbCk7XG4gICAgaWYodG90YWwgJiYgeCAhPSB4KSByZXR1cm4gc3dhcDsgLy8gdG90YWwgJiYgbmFuXG4gICAgaWYoK3ggIT0gK3gpIHJldHVybiAreDsgLy8gbmFuXG4gICAgaWYoKHggfCAwKSAhPSAwKSByZXR1cm4gKHggfCAwKTsgLy8gIW5hblxuICB9XG4gIHJldHVybiBzd2FwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWwgKGNvbnN0LCBjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ludF9jb21wYXJlLCBjYW1sX3N0cmluZ19jb21wYXJlLCBjYW1sX2J5dGVzX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tLCBjYW1sX2NvbXBhcmVfdmFsX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWwgKGEsIGIsIHRvdGFsKSB7XG4gIHZhciBzdGFjayA9IFtdO1xuICBmb3IoOzspIHtcbiAgICBpZiAoISh0b3RhbCAmJiBhID09PSBiKSkge1xuICAgICAgdmFyIHRhZ19hID0gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSk7XG4gICAgICAvLyBmb3J3YXJkX3RhZyA/XG4gICAgICBpZih0YWdfYSA9PSAyNTApIHsgYSA9IGFbMV07IGNvbnRpbnVlIH1cblxuICAgICAgdmFyIHRhZ19iID0gY2FtbF9jb21wYXJlX3ZhbF90YWcoYik7XG4gICAgICAvLyBmb3J3YXJkX3RhZyA/XG4gICAgICBpZih0YWdfYiA9PSAyNTApIHsgYiA9IGJbMV07IGNvbnRpbnVlIH1cblxuICAgICAgLy8gdGFncyBhcmUgZGlmZmVyZW50XG4gICAgICBpZih0YWdfYSAhPT0gdGFnX2IpIHtcbiAgICAgICAgaWYodGFnX2EgPT0gMTAwMCkge1xuICAgICAgICAgIGlmKHRhZ19iID09IDEyNTUpIHsgLy9pbW1lZGlhdGUgY2FuIGNvbXBhcmUgYWdhaW5zdCBjdXN0b21cbiAgICAgICAgICAgIHJldHVybiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20oYSwgYiwgLTEsIHRvdGFsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgIH1cbiAgICAgICAgaWYodGFnX2IgPT0gMTAwMCkge1xuICAgICAgICAgIGlmKHRhZ19hID09IDEyNTUpIHsgLy9pbW1lZGlhdGUgY2FuIGNvbXBhcmUgYWdhaW5zdCBjdXN0b21cbiAgICAgICAgICAgIHJldHVybiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20oYiwgYSwgMSwgdG90YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gMVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAodGFnX2EgPCB0YWdfYik/LTE6MTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCh0YWdfYSl7XG4gICAgICAgIC8vIDI0NjogTGF6eV90YWcgaGFuZGxlZCBiZWxsb3dcbiAgICAgIGNhc2UgMjQ3OiAvLyBDbG9zdXJlX3RhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGZ1bmN0aW9uYWwgdmFsdWVcIik7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI0ODogLy8gT2JqZWN0XG4gICAgICAgIHZhciB4ID0gY2FtbF9pbnRfY29tcGFyZShhWzJdLCBiWzJdKTtcbiAgICAgICAgaWYgKHggIT0gMCkgcmV0dXJuICh4IHwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNDk6IC8vIEluZml4XG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMjUwOiAvLyBGb3J3YXJkIHRhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGFib3ZlXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgRm9yd2FyZF90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUxOiAvL0Fic3RyYWN0XG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBhYnN0cmFjdCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MjogLy8gT0NhbWwgYnl0ZXNcbiAgICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgICB2YXIgeCA9IGNhbWxfYnl0ZXNfY29tcGFyZShhLCBiKTtcbiAgICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MzogLy8gRG91YmxlX3RhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgRG91YmxlX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTQ6IC8vIERvdWJsZV9hcnJheV90YWdcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlbiwgaGFuZGxlZCBhYm92ZVxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IERvdWJsZV9hcnJheV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyNTU6IC8vIEN1c3RvbV90YWdcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBDdXN0b21fdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNDc6IC8vIEZ1bmN0aW9uXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGZ1bmN0aW9uYWwgdmFsdWVcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjU1OiAvLyBDdXN0b21cbiAgICAgICAgdmFyIGNvbXAgPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oYSk7XG4gICAgICAgIGlmKGNvbXAgIT0gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGIpKXtcbiAgICAgICAgICByZXR1cm4gKGEuY2FtbF9jdXN0b208Yi5jYW1sX2N1c3RvbSk/LTE6MTtcbiAgICAgICAgfVxuICAgICAgICBpZighY29tcClcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBhYnN0cmFjdCB2YWx1ZVwiKTtcbiAgICAgICAgdmFyIHggPSBjb21wKGEsYix0b3RhbCk7XG4gICAgICAgIGlmKHggIT0geCl7IC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIFVOT1JERVJFRFxuICAgICAgICAgIHJldHVybiB0b3RhbD8tMTp4O1xuICAgICAgICB9XG4gICAgICAgIGlmKHggIT09ICh4fDApKXsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHggIT0gMCkgcmV0dXJuICh4IHwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjU2OiAvLyBjb21wYXJlIGZ1bmN0aW9uXG4gICAgICAgIHZhciB4ID0gYS5jb21wYXJlKGIsdG90YWwpO1xuICAgICAgICBpZih4ICE9IHgpIHsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgVU5PUkRFUkVEXG4gICAgICAgICAgcmV0dXJuIHRvdGFsPy0xOng7XG4gICAgICAgIH1cbiAgICAgICAgaWYoeCAhPT0gKHh8MCkpeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCByZXR1cm4gdmFsdWVcbiAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEwMDA6IC8vIE51bWJlclxuICAgICAgICBhID0gK2E7XG4gICAgICAgIGIgPSArYjtcbiAgICAgICAgaWYgKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhICE9IGIpIHtcbiAgICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICAgIGlmIChhID09IGEpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChiID09IGIpIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTAwMTogLy8gVGhlIHJlc3RcbiAgICAgICAgLy8gSGVyZSB3ZSBjYW4gYmUgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcbiAgICAgICAgLy8gMS4gSmF2YVNjcmlwdCBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgLy8gMi4gSmF2YVNjcmlwdCBvYmplY3QgdGhhdCBjYW4gYmUgY29lcmNlZCB0byBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgLy8gMy4gSmF2YVNjcmlwdCBvYmplY3QgdGhhbiBjYW5ub3QgYmUgY29lcmNlZCB0byBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gKDMpIHdpbGwgcmFpc2UgYSBbVHlwZUVycm9yXVxuICAgICAgICAvLyAoMikgd2lsbCBjb2VyY2UgdG8gcHJpbWl0aXZlIHR5cGVzIHVzaW5nIFt2YWx1ZU9mXSBvciBbdG9TdHJpbmddXG4gICAgICAgIC8vICgyKSBhbmQgKDMpLCBhZnRlciBldmVudHVhbCBjb2VyY2lvblxuICAgICAgICAvLyAtIGlmIGEgYW5kIGIgYXJlIHN0cmluZ3MsIGFwcGx5IGxleGljb2dyYXBoaWMgY29tcGFyaXNvblxuICAgICAgICAvLyAtIGlmIGEgb3IgYiBhcmUgbm90IHN0cmluZ3MsIGNvbnZlcnQgYSBhbmQgYiB0byBudW1iZXJcbiAgICAgICAgLy8gICBhbmQgYXBwbHkgc3RhbmRhcmQgY29tcGFyaXNvblxuICAgICAgICAvL1xuICAgICAgICAvLyBFeGNlcHRpb246IGAhPWAgd2lsbCBub3QgY29lcmNlL2NvbnZlcnQgaWYgYm90aCBhIGFuZCBiIGFyZSBvYmplY3RzXG4gICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICBpZiAoYSAhPSBiKSB7XG4gICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgICBpZiAoYSA9PSBhKSByZXR1cm4gMTtcbiAgICAgICAgICBpZiAoYiA9PSBiKSByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTE6IC8vIEphdmFTY3JpcHQgU3ltYm9sLCBubyBvcmRlcmluZy5cbiAgICAgICAgaWYoYSAhPT0gYikge1xuICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOYU47XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTI6IC8vIG9jYW1sIHN0cmluZ3NcbiAgICAgICAgdmFyIGEgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGEpO1xuICAgICAgICB2YXIgYiA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoYik7XG4gICAgICAgIGlmKGEgIT09IGIpIHtcbiAgICAgICAgICBpZihhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1MjA6IC8vIGphdmFzY3JpcHQgc3RyaW5nc1xuICAgICAgICB2YXIgYSA9IGEudG9TdHJpbmcoKTtcbiAgICAgICAgdmFyIGIgPSBiLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmKGEgIT09IGIpIHtcbiAgICAgICAgICBpZihhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjQ2OiAvLyBMYXp5X3RhZ1xuICAgICAgY2FzZSAyNTQ6IC8vIERvdWJsZV9hcnJheVxuICAgICAgZGVmYXVsdDogLy8gQmxvY2sgd2l0aCBvdGhlciB0YWdcbiAgICAgICAgaWYoY2FtbF9pc19jb250aW51YXRpb25fdGFnKHRhZ19hKSkge1xuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGNvbnRpbnVhdGlvbiB2YWx1ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpIHJldHVybiAoYS5sZW5ndGggPCBiLmxlbmd0aCk/LTE6MTtcbiAgICAgICAgaWYgKGEubGVuZ3RoID4gMSkgc3RhY2sucHVzaChhLCBiLCAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgcmV0dXJuIDA7XG4gICAgdmFyIGkgPSBzdGFjay5wb3AoKTtcbiAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgIGlmIChpICsgMSA8IGEubGVuZ3RoKSBzdGFjay5wdXNoKGEsIGIsIGkgKyAxKTtcbiAgICBhID0gYVtpXTtcbiAgICBiID0gYltpXTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmUgKGEsIGIpIHsgcmV0dXJuIGNhbWxfY29tcGFyZV92YWwgKGEsIGIsIHRydWUpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2ludF9jb21wYXJlIG11dGFibGUgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfaW50X2NvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKGEgPCBiKSByZXR1cm4gKC0xKTsgaWYgKGEgPT0gYikgcmV0dXJuIDA7IHJldHVybiAxO1xufVxuLy9Qcm92aWRlczogY2FtbF9lcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2VxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA9PSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX25vdGVxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSAhPSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9ncmVhdGVyZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ncmVhdGVyZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpID49IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJ0aGFuIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZ3JlYXRlcnRoYW4gKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpID4gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbGVzc2VxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfbGVzc2VxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA8PSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9sZXNzdGhhbiBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2xlc3N0aGFuICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA8IDApOyB9XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEZvcm1hdFxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX2Zvcm1hdFxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3BhcnNlX2Zvcm1hdCAoZm10KSB7XG4gIGZtdCA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoZm10KTtcbiAgdmFyIGxlbiA9IGZtdC5sZW5ndGg7XG4gIGlmIChsZW4gPiAzMSkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZm9ybWF0X2ludDogZm9ybWF0IHRvbyBsb25nXCIpO1xuICB2YXIgZiA9XG4gICAgICB7IGp1c3RpZnk6JysnLCBzaWduc3R5bGU6Jy0nLCBmaWxsZXI6JyAnLCBhbHRlcm5hdGU6ZmFsc2UsXG4gICAgICAgIGJhc2U6MCwgc2lnbmVkY29udjpmYWxzZSwgd2lkdGg6MCwgdXBwZXJjYXNlOmZhbHNlLFxuICAgICAgICBzaWduOjEsIHByZWM6LTEsIGNvbnY6J2YnIH07XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgYyA9IGZtdC5jaGFyQXQoaSk7XG4gICAgc3dpdGNoIChjKSB7XG4gICAgY2FzZSAnLSc6XG4gICAgICBmLmp1c3RpZnkgPSAnLSc7IGJyZWFrO1xuICAgIGNhc2UgJysnOiBjYXNlICcgJzpcbiAgICAgIGYuc2lnbnN0eWxlID0gYzsgYnJlYWs7XG4gICAgY2FzZSAnMCc6XG4gICAgICBmLmZpbGxlciA9ICcwJzsgYnJlYWs7XG4gICAgY2FzZSAnIyc6XG4gICAgICBmLmFsdGVybmF0ZSA9IHRydWU7IGJyZWFrO1xuICAgIGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOiBjYXNlICc1JzpcbiAgICBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzpcbiAgICAgIGYud2lkdGggPSAwO1xuICAgICAgd2hpbGUgKGM9Zm10LmNoYXJDb2RlQXQoaSkgLSA0OCwgYyA+PSAwICYmIGMgPD0gOSkge1xuICAgICAgICBmLndpZHRoID0gZi53aWR0aCAqIDEwICsgYzsgaSsrXG4gICAgICB9XG4gICAgICBpLS07XG4gICAgICBicmVhaztcbiAgICBjYXNlICcuJzpcbiAgICAgIGYucHJlYyA9IDA7XG4gICAgICBpKys7XG4gICAgICB3aGlsZSAoYz1mbXQuY2hhckNvZGVBdChpKSAtIDQ4LCBjID49IDAgJiYgYyA8PSA5KSB7XG4gICAgICAgIGYucHJlYyA9IGYucHJlYyAqIDEwICsgYzsgaSsrXG4gICAgICB9XG4gICAgICBpLS07XG4gICAgY2FzZSAnZCc6IGNhc2UgJ2knOlxuICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTsgLyogZmFsbHRocm91Z2ggKi9cbiAgICBjYXNlICd1JzpcbiAgICAgIGYuYmFzZSA9IDEwOyBicmVhaztcbiAgICBjYXNlICd4JzpcbiAgICAgIGYuYmFzZSA9IDE2OyBicmVhaztcbiAgICBjYXNlICdYJzpcbiAgICAgIGYuYmFzZSA9IDE2OyBmLnVwcGVyY2FzZSA9IHRydWU7IGJyZWFrO1xuICAgIGNhc2UgJ28nOlxuICAgICAgZi5iYXNlID0gODsgYnJlYWs7XG4gICAgY2FzZSAnZSc6IGNhc2UgJ2YnOiBjYXNlICdnJzpcbiAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7IGYuY29udiA9IGM7IGJyZWFrO1xuICAgIGNhc2UgJ0UnOiBjYXNlICdGJzogY2FzZSAnRyc6XG4gICAgICBmLnNpZ25lZGNvbnYgPSB0cnVlOyBmLnVwcGVyY2FzZSA9IHRydWU7XG4gICAgICBmLmNvbnYgPSBjLnRvTG93ZXJDYXNlICgpOyBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcmF3YnVmZmVyKSB7XG4gIGlmIChmLnVwcGVyY2FzZSkgcmF3YnVmZmVyID0gcmF3YnVmZmVyLnRvVXBwZXJDYXNlKCk7XG4gIHZhciBsZW4gPSByYXdidWZmZXIubGVuZ3RoO1xuICAvKiBBZGp1c3QgbGVuIHRvIHJlZmxlY3QgYWRkaXRpb25hbCBjaGFycyAoc2lnbiwgZXRjKSAqL1xuICBpZiAoZi5zaWduZWRjb252ICYmIChmLnNpZ24gPCAwIHx8IGYuc2lnbnN0eWxlICE9ICctJykpIGxlbisrO1xuICBpZiAoZi5hbHRlcm5hdGUpIHtcbiAgICBpZiAoZi5iYXNlID09IDgpIGxlbiArPSAxO1xuICAgIGlmIChmLmJhc2UgPT0gMTYpIGxlbiArPSAyO1xuICB9XG4gIC8qIERvIHRoZSBmb3JtYXR0aW5nICovXG4gIHZhciBidWZmZXIgPSBcIlwiO1xuICBpZiAoZi5qdXN0aWZ5ID09ICcrJyAmJiBmLmZpbGxlciA9PSAnICcpXG4gICAgZm9yICh2YXIgaSA9IGxlbjsgaSA8IGYud2lkdGg7IGkrKykgYnVmZmVyICs9ICcgJztcbiAgaWYgKGYuc2lnbmVkY29udikge1xuICAgIGlmIChmLnNpZ24gPCAwKSBidWZmZXIgKz0gJy0nO1xuICAgIGVsc2UgaWYgKGYuc2lnbnN0eWxlICE9ICctJykgYnVmZmVyICs9IGYuc2lnbnN0eWxlO1xuICB9XG4gIGlmIChmLmFsdGVybmF0ZSAmJiBmLmJhc2UgPT0gOCkgYnVmZmVyICs9ICcwJztcbiAgaWYgKGYuYWx0ZXJuYXRlICYmIGYuYmFzZSA9PSAxNikgYnVmZmVyICs9IGYudXBwZXJjYXNlP1wiMFhcIjpcIjB4XCI7XG4gIGlmIChmLmp1c3RpZnkgPT0gJysnICYmIGYuZmlsbGVyID09ICcwJylcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gJzAnO1xuICBidWZmZXIgKz0gcmF3YnVmZmVyO1xuICBpZiAoZi5qdXN0aWZ5ID09ICctJylcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gJyAnO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhidWZmZXIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIGZzX25vZGVfc3VwcG9ydGVkICgpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzICE9PSAndW5kZWZpbmVkJ1xuICAgICAgJiYgdHlwZW9mIGdsb2JhbFRoaXMucHJvY2Vzcy52ZXJzaW9ucyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICYmIHR5cGVvZiBnbG9iYWxUaGlzLnByb2Nlc3MudmVyc2lvbnMubm9kZSAhPT0gJ3VuZGVmaW5lZCcpXG59XG4vL1Byb3ZpZGVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gZnNfbm9kZV9zdXBwb3J0ZWQgKCkge1xuICByZXR1cm4gZmFsc2Vcbn1cblxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVEZXZpY2Vcbi8vUmVxdWlyZXM6IE1sTm9kZUZkLCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9yYWlzZV93aXRoX2FyZ3Ncbi8vUmVxdWlyZXM6IG1ha2VfdW5peF9lcnJfYXJncywgY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIE1sTm9kZURldmljZShyb290KSB7XG4gIHRoaXMuZnMgPSByZXF1aXJlKCdmcycpO1xuICB0aGlzLnJvb3QgPSByb290O1xufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5ubSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuICh0aGlzLnJvb3QgKyBuYW1lKTtcbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuZXhpc3RzID0gZnVuY3Rpb24obmFtZSkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSk/MTowO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5pc0ZpbGUgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuc3RhdFN5bmModGhpcy5ubShuYW1lKSkuaXNGaWxlKCk/MTowO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUubWtkaXIgPSBmdW5jdGlvbihuYW1lLCBtb2RlLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5ta2RpclN5bmModGhpcy5ubShuYW1lKSx7bW9kZTptb2RlfSk7XG4gICAgcmV0dXJuIDBcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5ybWRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLnJtZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICByZXR1cm4gMFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJlYWRkaXIgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMucmVhZGRpclN5bmModGhpcy5ubShuYW1lKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuaXNfZGlyID0gZnVuY3Rpb24obmFtZSkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpLmlzRGlyZWN0b3J5KCk/MTowO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUudW5saW5rID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHZhciBiID0gdGhpcy5mcy5leGlzdHNTeW5jKHRoaXMubm0obmFtZSkpPzE6MDtcbiAgICB0aGlzLmZzLnVubGlua1N5bmModGhpcy5ubShuYW1lKSk7XG4gICAgcmV0dXJuIGI7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKG5hbWUsIGYsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIGNvbnN0cyA9IHJlcXVpcmUoJ2NvbnN0YW50cycpO1xuICB2YXIgcmVzID0gMDtcbiAgZm9yKHZhciBrZXkgaW4gZil7XG4gICAgc3dpdGNoKGtleSl7XG4gICAgY2FzZSBcInJkb25seVwiICA6IHJlcyB8PSBjb25zdHMuT19SRE9OTFk7IGJyZWFrO1xuICAgIGNhc2UgXCJ3cm9ubHlcIiAgOiByZXMgfD0gY29uc3RzLk9fV1JPTkxZOyBicmVhaztcbiAgICBjYXNlIFwiYXBwZW5kXCIgIDpcbiAgICAgIHJlcyB8PSBjb25zdHMuT19XUk9OTFkgfCBjb25zdHMuT19BUFBFTkQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiY3JlYXRlXCIgICA6IHJlcyB8PSBjb25zdHMuT19DUkVBVDsgICAgYnJlYWs7XG4gICAgY2FzZSBcInRydW5jYXRlXCIgOiByZXMgfD0gY29uc3RzLk9fVFJVTkM7ICAgIGJyZWFrO1xuICAgIGNhc2UgXCJleGNsXCIgICAgIDogcmVzIHw9IGNvbnN0cy5PX0VYQ0w7ICAgICBicmVhaztcbiAgICBjYXNlIFwiYmluYXJ5XCIgICA6IHJlcyB8PSBjb25zdHMuT19CSU5BUlk7ICAgYnJlYWs7XG4gICAgY2FzZSBcInRleHRcIiAgICAgOiByZXMgfD0gY29uc3RzLk9fVEVYVDsgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJub25ibG9ja1wiIDogcmVzIHw9IGNvbnN0cy5PX05PTkJMT0NLOyBicmVhaztcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIgZmQgPSB0aGlzLmZzLm9wZW5TeW5jKHRoaXMubm0obmFtZSksIHJlcyk7XG4gICAgdmFyIGlzQ2hhcmFjdGVyRGV2aWNlID0gdGhpcy5mcy5sc3RhdFN5bmModGhpcy5ubShuYW1lKSkuaXNDaGFyYWN0ZXJEZXZpY2UoKTtcbiAgICBmLmlzQ2hhcmFjdGVyRGV2aWNlID0gaXNDaGFyYWN0ZXJEZXZpY2U7XG4gICAgcmV0dXJuIG5ldyBNbE5vZGVGZChmZCwgZik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cblxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5yZW5hbWUgPSBmdW5jdGlvbihvLCBuLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5yZW5hbWVTeW5jKHRoaXMubm0obyksIHRoaXMubm0obikpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnN0YXQgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGpzX3N0YXRzID0gdGhpcy5mcy5zdGF0U3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICByZXR1cm4gdGhpcy5zdGF0c19mcm9tX2pzKGpzX3N0YXRzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5sc3RhdCA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB2YXIganNfc3RhdHMgPSB0aGlzLmZzLmxzdGF0U3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICByZXR1cm4gdGhpcy5zdGF0c19mcm9tX2pzKGpzX3N0YXRzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5zeW1saW5rID0gZnVuY3Rpb24odG9fZGlyLCB0YXJnZXQsIHBhdGgsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLnN5bWxpbmtTeW5jKHRoaXMubm0odGFyZ2V0KSwgdGhpcy5ubShwYXRoKSwgdG9fZGlyID8gJ2RpcicgOiAnZmlsZScpO1xuICAgIHJldHVybiAwO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJlYWRsaW5rID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHZhciBsaW5rID0gdGhpcy5mcy5yZWFkbGlua1N5bmModGhpcy5ubShuYW1lKSwgJ3V0ZjgnKTtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobGluayk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUub3BlbmRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5vcGVuZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5yYWlzZV9ub2RlanNfZXJyb3IgPSBmdW5jdGlvbihlcnIsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSBjYW1sX25hbWVkX3ZhbHVlKFwiVW5peC5Vbml4X2Vycm9yXCIpO1xuICBpZiAocmFpc2VfdW5peCAmJiB1bml4X2Vycm9yKSB7XG4gICAgdmFyIGFyZ3MgPSBtYWtlX3VuaXhfZXJyX2FyZ3MoZXJyLmNvZGUsIGVyci5zeXNjYWxsLCBlcnIucGF0aCwgZXJyLmVycm5vKTtcbiAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuc3RhdHNfZnJvbV9qcyA9IGZ1bmN0aW9uKGpzX3N0YXRzKSB7XG4gIC8qID09PVVuaXguZmlsZV9raW5kPT09XG4gICAqIHR5cGUgZmlsZV9raW5kID1cbiAgICogICAgIFNfUkVHICAgICAgICAgICAgICAgICAgICAgICAoKiogUmVndWxhciBmaWxlICopXG4gICAqICAgfCBTX0RJUiAgICAgICAgICAgICAgICAgICAgICAgKCoqIERpcmVjdG9yeSAqKVxuICAgKiAgIHwgU19DSFIgICAgICAgICAgICAgICAgICAgICAgICgqKiBDaGFyYWN0ZXIgZGV2aWNlICopXG4gICAqICAgfCBTX0JMSyAgICAgICAgICAgICAgICAgICAgICAgKCoqIEJsb2NrIGRldmljZSAqKVxuICAgKiAgIHwgU19MTksgICAgICAgICAgICAgICAgICAgICAgICgqKiBTeW1ib2xpYyBsaW5rICopXG4gICAqICAgfCBTX0ZJRk8gICAgICAgICAgICAgICAgICAgICAgKCoqIE5hbWVkIHBpcGUgKilcbiAgICogICB8IFNfU09DSyAgICAgICAgICAgICAgICAgICAgICAoKiogU29ja2V0ICopXG4gICAqL1xuICB2YXIgZmlsZV9raW5kO1xuICBpZiAoanNfc3RhdHMuaXNGaWxlKCkpIHtcbiAgICBmaWxlX2tpbmQgPSAwO1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICBmaWxlX2tpbmQgPSAxO1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzQ2hhcmFjdGVyRGV2aWNlKCkpIHtcbiAgICBmaWxlX2tpbmQgPSAyO1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzQmxvY2tEZXZpY2UoKSkge1xuICAgIGZpbGVfa2luZCA9IDM7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgIGZpbGVfa2luZCA9IDQ7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNGSUZPKCkpIHtcbiAgICBmaWxlX2tpbmQgPSA1O1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzU29ja2V0KCkpIHtcbiAgICBmaWxlX2tpbmQgPSA2O1xuICB9XG4gIC8qID09PVVuaXguc3RhdHM9PT1cbiAgICogdHlwZSBzdGF0cyA9XG4gICAqICB7IHN0X2RldiA6IGludDsgICAgICAgICAgICAgICAoKiogRGV2aWNlIG51bWJlciAqKVxuICAgKiAgICBzdF9pbm8gOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIElub2RlIG51bWJlciAqKVxuICAgKiAgICBzdF9raW5kIDogZmlsZV9raW5kOyAgICAgICAgKCoqIEtpbmQgb2YgdGhlIGZpbGUgKilcbiAgICogICAgc3RfcGVybSA6IGZpbGVfcGVybTsgICAgICAgICgqKiBBY2Nlc3MgcmlnaHRzICopXG4gICAqICAgIHN0X25saW5rIDogaW50OyAgICAgICAgICAgICAoKiogTnVtYmVyIG9mIGxpbmtzICopXG4gICAqICAgIHN0X3VpZCA6IGludDsgICAgICAgICAgICAgICAoKiogVXNlciBpZCBvZiB0aGUgb3duZXIgKilcbiAgICogICAgc3RfZ2lkIDogaW50OyAgICAgICAgICAgICAgICgqKiBHcm91cCBJRCBvZiB0aGUgZmlsZSdzIGdyb3VwICopXG4gICAqICAgIHN0X3JkZXYgOiBpbnQ7ICAgICAgICAgICAgICAoKiogRGV2aWNlIElEIChpZiBzcGVjaWFsIGZpbGUpICopXG4gICAqICAgIHN0X3NpemUgOiBpbnQ7ICAgICAgICAgICAgICAoKiogU2l6ZSBpbiBieXRlcyAqKVxuICAgKiAgICBzdF9hdGltZSA6IGZsb2F0OyAgICAgICAgICAgKCoqIExhc3QgYWNjZXNzIHRpbWUgKilcbiAgICogICAgc3RfbXRpbWUgOiBmbG9hdDsgICAgICAgICAgICgqKiBMYXN0IG1vZGlmaWNhdGlvbiB0aW1lICopXG4gICAqICAgIHN0X2N0aW1lIDogZmxvYXQ7ICAgICAgICAgICAoKiogTGFzdCBzdGF0dXMgY2hhbmdlIHRpbWUgKilcbiAgICogIH1cbiAgICovXG4gIHJldHVybiBCTE9DSyhcbiAgICAwLFxuICAgIGpzX3N0YXRzLmRldixcbiAgICBqc19zdGF0cy5pbm8sXG4gICAgZmlsZV9raW5kLFxuICAgIGpzX3N0YXRzLm1vZGUsXG4gICAganNfc3RhdHMubmxpbmssXG4gICAganNfc3RhdHMudWlkLFxuICAgIGpzX3N0YXRzLmdpZCxcbiAgICBqc19zdGF0cy5yZGV2LFxuICAgIGpzX3N0YXRzLnNpemUsXG4gICAganNfc3RhdHMuYXRpbWVNcyxcbiAgICBqc19zdGF0cy5tdGltZU1zLFxuICAgIGpzX3N0YXRzLmN0aW1lTXNcbiAgKTtcbn1cblxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sTm9kZURldmljZVxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVEZXZpY2Vcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIE1sTm9kZURldmljZSgpIHtcbn1cblxuLy9Qcm92aWRlczogTWxOb2RlRmRcbi8vUmVxdWlyZXM6IE1sRmlsZSwgY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcsIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfYnl0ZXNfc2V0LCBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gTWxOb2RlRmQoZmQsIGZsYWdzKXtcbiAgdGhpcy5mcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gIHRoaXMuZmQgPSBmZDtcbiAgdGhpcy5mbGFncyA9IGZsYWdzO1xufVxuTWxOb2RlRmQucHJvdG90eXBlID0gbmV3IE1sRmlsZSAoKTtcbk1sTm9kZUZkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sTm9kZUZkO1xuXG5NbE5vZGVGZC5wcm90b3R5cGUudHJ1bmNhdGUgPSBmdW5jdGlvbihsZW4pe1xuICB0cnkge1xuICAgIHRoaXMuZnMuZnRydW5jYXRlU3luYyh0aGlzLmZkLGxlbnwwKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVGZC5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLmZzdGF0U3luYyh0aGlzLmZkKS5zaXplO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZUZkLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKG9mZnNldCxidWYsYnVmX29mZnNldCxsZW4pe1xuICB0cnkge1xuICAgIGlmKHRoaXMuZmxhZ3MuaXNDaGFyYWN0ZXJEZXZpY2UpXG4gICAgICB0aGlzLmZzLndyaXRlU3luYyh0aGlzLmZkLCBidWYsIGJ1Zl9vZmZzZXQsIGxlbik7XG4gICAgZWxzZVxuICAgICAgdGhpcy5mcy53cml0ZVN5bmModGhpcy5mZCwgYnVmLCBidWZfb2Zmc2V0LCBsZW4sIG9mZnNldCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbk1sTm9kZUZkLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24ob2Zmc2V0LGEsYnVmX29mZnNldCxsZW4pe1xuICB0cnkge1xuICAgIGlmKHRoaXMuZmxhZ3MuaXNDaGFyYWN0ZXJEZXZpY2UpXG4gICAgICB2YXIgcmVhZCA9IHRoaXMuZnMucmVhZFN5bmModGhpcy5mZCwgYSwgYnVmX29mZnNldCwgbGVuKTtcbiAgICBlbHNlXG4gICAgICB2YXIgcmVhZCA9IHRoaXMuZnMucmVhZFN5bmModGhpcy5mZCwgYSwgYnVmX29mZnNldCwgbGVuLCBvZmZzZXQpO1xuICAgIHJldHVybiByZWFkO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZUZkLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCl7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5jbG9zZVN5bmModGhpcy5mZCk7XG4gICAgcmV0dXJuIDBcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5cblxuLy9Qcm92aWRlczogTWxOb2RlRmRcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIE1sTm9kZUZkKCl7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZVxuLy9SZXF1aXJlczogTWxOb2RlRmRcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5fZm9yX25vZGUoZmQsIGZsYWdzKXtcbiAgaWYoZmxhZ3MubmFtZSkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgZnMgPSByZXF1aXJlKFwiZnNcIik7XG4gICAgICB2YXIgZmQyID0gZnMub3BlblN5bmMoZmxhZ3MubmFtZSwgXCJyc1wiKTtcbiAgICAgIHJldHVybiBuZXcgTWxOb2RlRmQoZmQyLCBmbGFncyk7XG4gICAgfSBjYXRjaChlKSB7ICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBNbE5vZGVGZChmZCwgZmxhZ3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlKGZkLCBmbGFncyl7XG4gIHJldHVybiBudWxsO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBEdW1teSBmaWxlc3lzdGVtXG5cbi8vUHJvdmlkZXM6IGNhbWxfdHJhaWxpbmdfc2xhc2hcbmZ1bmN0aW9uIGNhbWxfdHJhaWxpbmdfc2xhc2gobmFtZSl7XG4gIHJldHVybiAobmFtZS5zbGljZSgtMSkgIT09IFwiL1wiKSA/IChuYW1lICsgXCIvXCIpIDogbmFtZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jdXJyZW50X2RpclxuLy9SZXF1aXJlczogY2FtbF90cmFpbGluZ19zbGFzaCwgZnNfbm9kZV9zdXBwb3J0ZWRcbmlmKGZzX25vZGVfc3VwcG9ydGVkICgpICYmIGdsb2JhbFRoaXMucHJvY2VzcyAmJiBnbG9iYWxUaGlzLnByb2Nlc3MuY3dkKVxuICB2YXIgY2FtbF9jdXJyZW50X2RpciA9IGdsb2JhbFRoaXMucHJvY2Vzcy5jd2QoKS5yZXBsYWNlKC9cXFxcL2csJy8nKTtcbmVsc2VcbiAgdmFyIGNhbWxfY3VycmVudF9kaXIgPSAgXCIvc3RhdGljXCI7XG5jYW1sX2N1cnJlbnRfZGlyID0gY2FtbF90cmFpbGluZ19zbGFzaChjYW1sX2N1cnJlbnRfZGlyKTtcblxuLy9Qcm92aWRlczogY2FtbF9nZXRfcm9vdFxuLy9SZXF1aXJlczogcGF0aF9pc19hYnNvbHV0ZVxuZnVuY3Rpb24gY2FtbF9nZXRfcm9vdChwYXRoKXtcbiAgdmFyIHggPSBwYXRoX2lzX2Fic29sdXRlKHBhdGgpO1xuICBpZiAoIXgpIHJldHVybjtcbiAgcmV0dXJuIHhbMF0gKyBcIi9cIn1cblxuLy9Qcm92aWRlczogY2FtbF9yb290XG4vL1JlcXVpcmVzOiBjYW1sX2dldF9yb290LCBjYW1sX2N1cnJlbnRfZGlyLCBjYW1sX2ZhaWx3aXRoXG52YXIgY2FtbF9yb290ID0gY2FtbF9nZXRfcm9vdChjYW1sX2N1cnJlbnRfZGlyKSB8fCBjYW1sX2ZhaWx3aXRoKFwidW5hYmxlIHRvIGNvbXB1dGUgY2FtbF9yb290XCIpO1xuXG5cbi8vUHJvdmlkZXM6IE1sRmlsZVxuZnVuY3Rpb24gTWxGaWxlKCl7ICB9XG5cbi8vUHJvdmlkZXM6IHBhdGhfaXNfYWJzb2x1dGVcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiBtYWtlX3BhdGhfaXNfYWJzb2x1dGUoKSB7XG4gIGZ1bmN0aW9uIHBvc2l4KHBhdGgpIHtcbiAgICBpZiAocGF0aC5jaGFyQXQoMCkgPT09ICcvJykgcmV0dXJuIFtcIlwiLCBwYXRoLnN1YnN0cmluZygxKV07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZnVuY3Rpb24gd2luMzIocGF0aCkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2IzZmNjMjQ1ZmIyNTUzOTkwOWVmMWQ1ZWFhMDFkYmY5MmUxNjg2MzMvbGliL3BhdGguanMjTDU2XG4gICAgdmFyIHNwbGl0RGV2aWNlUmUgPSAvXihbYS16QS1aXTp8W1xcXFwvXXsyfVteXFxcXC9dK1tcXFxcL10rW15cXFxcL10rKT8oW1xcXFwvXSk/KFtcXHNcXFNdKj8pJC87XG4gICAgdmFyIHJlc3VsdCA9IHNwbGl0RGV2aWNlUmUuZXhlYyhwYXRoKTtcbiAgICB2YXIgZGV2aWNlID0gcmVzdWx0WzFdIHx8ICcnO1xuICAgIHZhciBpc1VuYyA9IEJvb2xlYW4oZGV2aWNlICYmIGRldmljZS5jaGFyQXQoMSkgIT09ICc6Jyk7XG5cbiAgICAvLyBVTkMgcGF0aHMgYXJlIGFsd2F5cyBhYnNvbHV0ZVxuICAgIGlmIChCb29sZWFuKHJlc3VsdFsyXSB8fCBpc1VuYykpIHtcbiAgICAgIHZhciByb290ID0gKHJlc3VsdFsxXSB8fCAnJyk7XG4gICAgICB2YXIgc2VwID0gKHJlc3VsdFsyXSB8fCAnJyk7XG4gICAgICByZXR1cm4gW3Jvb3QsIHBhdGguc3Vic3RyaW5nKHJvb3QubGVuZ3RoICsgc2VwLmxlbmd0aCldXG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBpZihmc19ub2RlX3N1cHBvcnRlZCAoKSAmJiBnbG9iYWxUaGlzLnByb2Nlc3MgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IHdpbjMyIDogcG9zaXg7XG4gIH1cbiAgZWxzZSByZXR1cm4gcG9zaXhcbn1cbnZhciBwYXRoX2lzX2Fic29sdXRlID0gbWFrZV9wYXRoX2lzX2Fic29sdXRlKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV9wYXRoXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZywgcGF0aF9pc19hYnNvbHV0ZVxuZnVuY3Rpb24gY2FtbF9tYWtlX3BhdGggKG5hbWUpIHtcbiAgbmFtZT1jYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lKTtcbiAgaWYoICFwYXRoX2lzX2Fic29sdXRlKG5hbWUpIClcbiAgICBuYW1lID0gY2FtbF9jdXJyZW50X2RpciArIG5hbWU7XG4gIHZhciBjb21wMCA9IHBhdGhfaXNfYWJzb2x1dGUobmFtZSk7XG4gIHZhciBjb21wID0gY29tcDBbMV0uc3BsaXQoXCIvXCIpO1xuICB2YXIgbmNvbXAgPSBbXVxuICBmb3IodmFyIGkgPSAwOyBpPGNvbXAubGVuZ3RoOyBpKyspe1xuICAgIHN3aXRjaChjb21wW2ldKXtcbiAgICBjYXNlIFwiLi5cIjogaWYobmNvbXAubGVuZ3RoPjEpIG5jb21wLnBvcCgpOyBicmVhaztcbiAgICBjYXNlIFwiLlwiOiBicmVhaztcbiAgICBjYXNlIFwiXCI6IGJyZWFrO1xuICAgIGRlZmF1bHQ6IG5jb21wLnB1c2goY29tcFtpXSk7YnJlYWtcbiAgICB9XG4gIH1cbiAgbmNvbXAudW5zaGlmdChjb21wMFswXSk7XG4gIG5jb21wLm9yaWcgPSBuYW1lO1xuICByZXR1cm4gbmNvbXA7XG59XG5cbi8vUHJvdmlkZXM6anNvb19tb3VudF9wb2ludFxuLy9SZXF1aXJlczogTWxGYWtlRGV2aWNlLCBNbE5vZGVEZXZpY2UsIGNhbWxfcm9vdCwgZnNfbm9kZV9zdXBwb3J0ZWRcbnZhciBqc29vX21vdW50X3BvaW50ID0gW11cbmlmIChmc19ub2RlX3N1cHBvcnRlZCgpKSB7XG4gIGpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpjYW1sX3Jvb3QsZGV2aWNlOm5ldyBNbE5vZGVEZXZpY2UoY2FtbF9yb290KX0pO1xufSBlbHNlIHtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOmNhbWxfcm9vdCxkZXZpY2U6bmV3IE1sRmFrZURldmljZShjYW1sX3Jvb3QpfSk7XG59XG5qc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6XCIvc3RhdGljL1wiLCBkZXZpY2U6bmV3IE1sRmFrZURldmljZShcIi9zdGF0aWMvXCIpfSk7XG5cbi8vUHJvdmlkZXM6Y2FtbF9saXN0X21vdW50X3BvaW50XG4vL1JlcXVpcmVzOiBqc29vX21vdW50X3BvaW50LCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2xpc3RfbW91bnRfcG9pbnQoKXtcbiAgdmFyIHByZXYgPSAwXG4gIGZvcih2YXIgaSA9IDA7IGkgPCBqc29vX21vdW50X3BvaW50Lmxlbmd0aDsgaSsrKXtcbiAgICB2YXIgb2xkID0gcHJldjtcbiAgICBwcmV2ID0gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoanNvb19tb3VudF9wb2ludFtpXS5wYXRoKSwgb2xkXVxuICB9XG4gIHJldHVybiBwcmV2O1xufVxuXG4vL1Byb3ZpZGVzOiByZXNvbHZlX2ZzX2RldmljZVxuLy9SZXF1aXJlczogY2FtbF9tYWtlX3BhdGgsIGpzb29fbW91bnRfcG9pbnQsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX2dldF9yb290LCBNbE5vZGVEZXZpY2UsIGNhbWxfdHJhaWxpbmdfc2xhc2gsIGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiByZXNvbHZlX2ZzX2RldmljZShuYW1lKXtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBwYXRoLmpvaW4oXCIvXCIpO1xuICB2YXIgbmFtZV9zbGFzaCA9IGNhbWxfdHJhaWxpbmdfc2xhc2gobmFtZSk7XG4gIHZhciByZXM7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBqc29vX21vdW50X3BvaW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG0gPSBqc29vX21vdW50X3BvaW50W2ldO1xuICAgIGlmKG5hbWVfc2xhc2guc2VhcmNoKG0ucGF0aCkgPT0gMFxuICAgICAgICYmICghcmVzIHx8IHJlcy5wYXRoLmxlbmd0aCA8IG0ucGF0aC5sZW5ndGgpKVxuICAgICAgcmVzID0ge3BhdGg6bS5wYXRoLGRldmljZTptLmRldmljZSxyZXN0Om5hbWUuc3Vic3RyaW5nKG0ucGF0aC5sZW5ndGgsbmFtZS5sZW5ndGgpfTtcbiAgfVxuICBpZiggIXJlcyAmJiBmc19ub2RlX3N1cHBvcnRlZCgpKSB7XG4gICAgdmFyIHJvb3QgPSBjYW1sX2dldF9yb290KG5hbWUpO1xuICAgIGlmIChyb290ICYmIHJvb3QubWF0Y2goL15bYS16QS1aXTpcXC8kLykpe1xuICAgICAgdmFyIG0gPSB7cGF0aDpyb290LGRldmljZTpuZXcgTWxOb2RlRGV2aWNlKHJvb3QpfTtcbiAgICAgIGpzb29fbW91bnRfcG9pbnQucHVzaChtKTtcbiAgICAgIHJlcyA9IHtwYXRoOm0ucGF0aCxkZXZpY2U6bS5kZXZpY2UscmVzdDpuYW1lLnN1YnN0cmluZyhtLnBhdGgubGVuZ3RoLG5hbWUubGVuZ3RoKX07XG4gICAgfVxuICB9XG4gIGlmKCByZXMgKSByZXR1cm4gcmVzO1xuICBjYW1sX3JhaXNlX3N5c19lcnJvcihcIm5vIGRldmljZSBmb3VuZCBmb3IgXCIgKyBuYW1lX3NsYXNoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tb3VudF9hdXRvbG9hZFxuLy9SZXF1aXJlczogTWxGYWtlRGV2aWNlLCBjYW1sX21ha2VfcGF0aCwganNvb19tb3VudF9wb2ludCwgY2FtbF90cmFpbGluZ19zbGFzaFxuZnVuY3Rpb24gY2FtbF9tb3VudF9hdXRvbG9hZChuYW1lLGYpe1xuICB2YXIgcGF0aCA9IGNhbWxfbWFrZV9wYXRoKG5hbWUpO1xuICB2YXIgbmFtZSA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocGF0aC5qb2luKFwiL1wiKSk7XG4gIGpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpuYW1lLGRldmljZTpuZXcgTWxGYWtlRGV2aWNlKG5hbWUsZil9KVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bm1vdW50XG4vL1JlcXVpcmVzOiBqc29vX21vdW50X3BvaW50LCBjYW1sX21ha2VfcGF0aCwgY2FtbF90cmFpbGluZ19zbGFzaFxuZnVuY3Rpb24gY2FtbF91bm1vdW50KG5hbWUpe1xuICB2YXIgcGF0aCA9IGNhbWxfbWFrZV9wYXRoKG5hbWUpO1xuICB2YXIgbmFtZSA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocGF0aC5qb2luKFwiL1wiKSk7XG4gIHZhciBpZHggPSAtMTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGpzb29fbW91bnRfcG9pbnQubGVuZ3RoOyBpKyspXG4gICAgaWYoanNvb19tb3VudF9wb2ludFtpXS5wYXRoID09IG5hbWUpIGlkeCA9IGk7XG4gIGlmKGlkeCA+IC0xKSBqc29vX21vdW50X3BvaW50LnNwbGljZShpZHgsMSk7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldGN3ZFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpciwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0Y3dkKCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhjYW1sX2N1cnJlbnRfZGlyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY2hkaXJcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9kaXIsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF90cmFpbGluZ19zbGFzaCwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfY2hkaXIoZGlyKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UoZGlyKTtcbiAgaWYocm9vdC5kZXZpY2UuZXhpc3RzKHJvb3QucmVzdCkpIHtcbiAgICBpZihyb290LnJlc3QpIGNhbWxfY3VycmVudF9kaXIgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHJvb3QucGF0aCArIHJvb3QucmVzdCk7XG4gICAgZWxzZSBjYW1sX2N1cnJlbnRfZGlyID0gcm9vdC5wYXRoO1xuICAgIHJldHVybiAwO1xuICB9XG4gIGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlKGNhbWxfanNieXRlc19vZl9zdHJpbmcoZGlyKSk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShuYW1lKXtcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IgKG5hbWUgKyBcIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9ub3RfYV9kaXJcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vdF9hX2RpcihuYW1lKXtcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IgKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19maWxlX2V4aXN0c1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX2ZpbGVfZXhpc3RzIChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJldHVybiByb290LmRldmljZS5leGlzdHMocm9vdC5yZXN0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVhZF9kaXJlY3Rvcnlcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm90X2FfZGlyLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfcmVhZF9kaXJlY3RvcnkobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBhID0gcm9vdC5kZXZpY2UucmVhZGRpcihyb290LnJlc3QpO1xuICB2YXIgbCA9IG5ldyBBcnJheShhLmxlbmd0aCArIDEpO1xuICBsWzBdID0gMDtcbiAgZm9yKHZhciBpPTA7aTxhLmxlbmd0aDtpKyspXG4gICAgbFtpKzFdID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhhW2ldKTtcbiAgcmV0dXJuIGw7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JlbW92ZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUsIHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N5c19yZW1vdmUobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBvayA9IHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QpO1xuICBpZihvayA9PSAwKSBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lzX2RpcmVjdG9yeVxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX2lzX2RpcmVjdG9yeShuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGEgPSByb290LmRldmljZS5pc19kaXIocm9vdC5yZXN0KTtcbiAgcmV0dXJuIGE/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZW5hbWVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZW5hbWUobyxuKXtcbiAgdmFyIG9fcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG8pO1xuICB2YXIgbl9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobik7XG4gIGlmKG9fcm9vdC5kZXZpY2UgIT0gbl9yb290LmRldmljZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zeXNfcmVuYW1lOiBjYW5ub3QgbW92ZSBmaWxlIGJldHdlZW4gdHdvIGZpbGVzeXN0ZW1cIik7XG4gIGlmKCFvX3Jvb3QuZGV2aWNlLnJlbmFtZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zeXNfcmVuYW1lOiBubyBpbXBsZW1lbnRlZFwiKTtcbiAgb19yb290LmRldmljZS5yZW5hbWUob19yb290LnJlc3QsIG5fcm9vdC5yZXN0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfbWtkaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9zeXNfbWtkaXIobmFtZSwgcGVybSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJvb3QuZGV2aWNlLm1rZGlyKHJvb3QucmVzdCxwZXJtKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JtZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfcmFpc2Vfbm90X2FfZGlyXG5mdW5jdGlvbiBjYW1sX3N5c19ybWRpcihuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcm9vdC5kZXZpY2Uucm1kaXIocm9vdC5yZXN0KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbWFwX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfYmFfbWFwX2ZpbGUodmZkLCBraW5kLCBsYXlvdXQsIHNoYXJlZCwgZGltcywgcG9zKSB7XG4gIC8vIHZhciBkYXRhID0gY2FtbF9zeXNfZmRzW3ZmZF07XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2JhX21hcF9maWxlIG5vdCBpbXBsZW1lbnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9tYXBfZmlsZV9ieXRlY29kZVxuLy9SZXF1aXJlczogY2FtbF9iYV9tYXBfZmlsZVxuZnVuY3Rpb24gY2FtbF9iYV9tYXBfZmlsZV9ieXRlY29kZShhcmd2LGFyZ24pe1xuICByZXR1cm4gY2FtbF9iYV9tYXBfZmlsZShhcmd2WzBdLGFyZ3ZbMV0sYXJndlsyXSxhcmd2WzNdLGFyZ3ZbNF0sYXJndls1XSk7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29fY3JlYXRlX2ZpbGVfZXh0ZXJuXG5mdW5jdGlvbiBqc29vX2NyZWF0ZV9maWxlX2V4dGVybihuYW1lLGNvbnRlbnQpe1xuICBpZihnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUpXG4gICAgZ2xvYmFsVGhpcy5qc29vX2NyZWF0ZV9maWxlKG5hbWUsY29udGVudCk7XG4gIGVsc2Uge1xuICAgIGlmKCFnbG9iYWxUaGlzLmNhbWxfZnNfdG1wKSBnbG9iYWxUaGlzLmNhbWxfZnNfdG1wID0gW107XG4gICAgZ2xvYmFsVGhpcy5jYW1sX2ZzX3RtcC5wdXNoKHtuYW1lOm5hbWUsY29udGVudDpjb250ZW50fSk7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZnNfaW5pdFxuLy9SZXF1aXJlczoganNvb19jcmVhdGVfZmlsZVxuZnVuY3Rpb24gY2FtbF9mc19pbml0ICgpe1xuICB2YXIgdG1wPWdsb2JhbFRoaXMuY2FtbF9mc190bXBcbiAgaWYodG1wKXtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgdG1wLmxlbmd0aDsgaSsrKXtcbiAgICAgIGpzb29fY3JlYXRlX2ZpbGUodG1wW2ldLm5hbWUsdG1wW2ldLmNvbnRlbnQpO1xuICAgIH1cbiAgfVxuICBnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUgPSBqc29vX2NyZWF0ZV9maWxlO1xuICBnbG9iYWxUaGlzLmNhbWxfZnNfdG1wID0gW107XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9jcmVhdGVfZmlsZShuYW1lLGNvbnRlbnQpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYoISByb290LmRldmljZS5yZWdpc3RlcikgY2FtbF9mYWlsd2l0aChcImNhbm5vdCByZWdpc3RlciBmaWxlXCIpO1xuICByb290LmRldmljZS5yZWdpc3Rlcihyb290LnJlc3QsY29udGVudCk7XG4gIHJldHVybiAwO1xufVxuXG5cbi8vUHJvdmlkZXM6IGpzb29fY3JlYXRlX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2ZpbGUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGpzb29fY3JlYXRlX2ZpbGUobmFtZSxjb250ZW50KSB7XG4gIHZhciBuYW1lID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhuYW1lKTtcbiAgdmFyIGNvbnRlbnQgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNvbnRlbnQpO1xuICByZXR1cm4gY2FtbF9jcmVhdGVfZmlsZShuYW1lLCBjb250ZW50KTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlYWRfZmlsZV9jb250ZW50XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUsIGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlYWRfZmlsZV9jb250ZW50IChuYW1lKSB7XG4gIHZhciBuYW1lID0gKHR5cGVvZiBuYW1lID09IFwic3RyaW5nXCIpP2NhbWxfc3RyaW5nX29mX2pzYnl0ZXMobmFtZSk6bmFtZTtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYocm9vdC5kZXZpY2UuZXhpc3RzKHJvb3QucmVzdCkpIHtcbiAgICB2YXIgZmlsZSA9IHJvb3QuZGV2aWNlLm9wZW4ocm9vdC5yZXN0LHtyZG9ubHk6MX0pO1xuICAgIHZhciBsZW4gID0gZmlsZS5sZW5ndGgoKTtcbiAgICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICBmaWxlLnJlYWQoMCxidWYsMCxsZW4pO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheShidWYpXG4gIH1cbiAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKSk7XG59XG4iLCIvL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ2V0dGltZW9mZGF5XG4vL0FsaWFzOiB1bml4X2dldHRpbWVvZmRheVxuZnVuY3Rpb24gY2FtbF91bml4X2dldHRpbWVvZmRheSAoKSB7XG4gIHJldHVybiAobmV3IERhdGUoKSkuZ2V0VGltZSgpIC8gMTAwMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3RpbWVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9nZXR0aW1lb2ZkYXlcbi8vQWxpYXM6IHVuaXhfdGltZVxuZnVuY3Rpb24gY2FtbF91bml4X3RpbWUgKCkge1xuICByZXR1cm4gTWF0aC5mbG9vcihjYW1sX3VuaXhfZ2V0dGltZW9mZGF5ICgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dtdGltZVxuLy9BbGlhczogdW5peF9nbXRpbWVcbmZ1bmN0aW9uIGNhbWxfdW5peF9nbXRpbWUgKHQpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSAodCAqIDEwMDApO1xuICB2YXIgZF9udW0gPSBkLmdldFRpbWUoKTtcbiAgdmFyIGphbnVhcnlmaXJzdCA9IChuZXcgRGF0ZShEYXRlLlVUQyhkLmdldFVUQ0Z1bGxZZWFyKCksIDAsIDEpKSkuZ2V0VGltZSgpO1xuICB2YXIgZG95ID0gTWF0aC5mbG9vcigoZF9udW0gLSBqYW51YXJ5Zmlyc3QpIC8gODY0MDAwMDApO1xuICByZXR1cm4gQkxPQ0soMCwgZC5nZXRVVENTZWNvbmRzKCksIGQuZ2V0VVRDTWludXRlcygpLCBkLmdldFVUQ0hvdXJzKCksXG4gICAgICAgICAgICAgICBkLmdldFVUQ0RhdGUoKSwgZC5nZXRVVENNb250aCgpLCBkLmdldFVUQ0Z1bGxZZWFyKCkgLSAxOTAwLFxuICAgICAgICAgICAgICAgZC5nZXRVVENEYXkoKSwgZG95LFxuICAgICAgICAgICAgICAgZmFsc2UgfCAwIC8qIGZvciBVVEMgZGF5bGlnaHQgc2F2aW5ncyB0aW1lIGlzIGZhbHNlICovKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbG9jYWx0aW1lXG4vL0FsaWFzOiB1bml4X2xvY2FsdGltZVxuZnVuY3Rpb24gY2FtbF91bml4X2xvY2FsdGltZSAodCkge1xuICB2YXIgZCA9IG5ldyBEYXRlICh0ICogMTAwMCk7XG4gIHZhciBkX251bSA9IGQuZ2V0VGltZSgpO1xuICB2YXIgamFudWFyeWZpcnN0ID0gKG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwgMCwgMSkpLmdldFRpbWUoKTtcbiAgdmFyIGRveSA9IE1hdGguZmxvb3IoKGRfbnVtIC0gamFudWFyeWZpcnN0KSAvIDg2NDAwMDAwKTtcbiAgdmFyIGphbiA9IG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwgMCwgMSk7XG4gIHZhciBqdWwgPSBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDYsIDEpO1xuICB2YXIgc3RkVGltZXpvbmVPZmZzZXQgPSBNYXRoLm1heChqYW4uZ2V0VGltZXpvbmVPZmZzZXQoKSwganVsLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICByZXR1cm4gQkxPQ0soMCwgZC5nZXRTZWNvbmRzKCksIGQuZ2V0TWludXRlcygpLCBkLmdldEhvdXJzKCksXG4gICAgICAgICAgICAgICBkLmdldERhdGUoKSwgZC5nZXRNb250aCgpLCBkLmdldEZ1bGxZZWFyKCkgLSAxOTAwLFxuICAgICAgICAgICAgICAgZC5nZXREYXkoKSwgZG95LFxuICAgICAgICAgICAgICAgKGQuZ2V0VGltZXpvbmVPZmZzZXQoKSA8IHN0ZFRpbWV6b25lT2Zmc2V0KSB8IDAgLyogZGF5bGlnaHQgc2F2aW5ncyB0aW1lICBmaWVsZC4gKi8pXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ta3RpbWVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb2NhbHRpbWVcbi8vQWxpYXM6IHVuaXhfbWt0aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfbWt0aW1lKHRtKXtcbiAgdmFyIGQgPSAobmV3IERhdGUodG1bNl0rMTkwMCx0bVs1XSx0bVs0XSx0bVszXSx0bVsyXSx0bVsxXSkpLmdldFRpbWUoKTtcbiAgdmFyIHQgPSBNYXRoLmZsb29yKGQgLyAxMDAwKTtcbiAgdmFyIHRtMiA9IGNhbWxfdW5peF9sb2NhbHRpbWUodCk7XG4gIHJldHVybiBCTE9DSygwLHQsdG0yKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9zdGFydHVwIGNvbnN0XG4vL0FsaWFzOiB3aW5fc3RhcnR1cFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXJ0dXAoKSB7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfY2xlYW51cCBjb25zdFxuLy9BbGlhczogd2luX2NsZWFudXBcbmZ1bmN0aW9uIGNhbWxfdW5peF9jbGVhbnVwKCkge31cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbGVkZXNjcl9vZl9mZCBjb25zdFxuLy9BbGlhczogd2luX2hhbmRsZV9mZFxuZnVuY3Rpb24gY2FtbF91bml4X2ZpbGVkZXNjcl9vZl9mZCh4KSB7cmV0dXJuIHg7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaXNhdHR5XG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9BbGlhczogdW5peF9pc2F0dHlcbmZ1bmN0aW9uIGNhbWxfdW5peF9pc2F0dHkoZmlsZURlc2NyaXB0b3IpIHtcbiAgaWYoZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICAgIHZhciB0dHkgPSByZXF1aXJlKCd0dHknKTtcbiAgICByZXR1cm4gdHR5LmlzYXR0eShmaWxlRGVzY3JpcHRvcik/MTowO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2lzYXR0eVxuLy9BbGlhczogdW5peF9pc2F0dHlcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9pc2F0dHkoZmlsZURlc2NyaXB0b3IpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IG1ha2VfdW5peF9lcnJfYXJnc1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbnZhciB1bml4X2Vycm9yID0gW1xuICAvKiA9PT1Vbml4LmVycm9yPT09XG4gICAqXG4gICAqIFRoaXMgYXJyYXkgaXMgaW4gb3JkZXIgb2YgdGhlIHZhcmlhbnQgaW4gT0NhbWxcbiAgICovXG4gIFwiRTJCSUdcIiwgXCJFQUNDRVNcIiwgXCJFQUdBSU5cIiwgXCJFQkFERlwiLCBcIkVCVVNZXCIsIFwiRUNISUxEXCIsIFwiRURFQURMS1wiLCBcIkVET01cIixcbiAgXCJFRVhJU1RcIiwgXCJFRkFVTFRcIiwgXCJFRkJJR1wiLCBcIkVJTlRSXCIsIFwiRUlOVkFMXCIsIFwiRUlPXCIsIFwiRUlTRElSXCIsIFwiRU1GSUxFXCIsXG4gIFwiRU1MSU5LXCIsIFwiRU5BTUVUT09MT05HXCIsIFwiRU5GSUxFXCIsIFwiRU5PREVWXCIsIFwiRU5PRU5UXCIsIFwiRU5PRVhFQ1wiLCBcIkVOT0xDS1wiLFxuICBcIkVOT01FTVwiLCBcIkVOT1NQQ1wiLCBcIkVOT1NZU1wiLCBcIkVOT1RESVJcIiwgXCJFTk9URU1QVFlcIiwgXCJFTk9UVFlcIiwgXCJFTlhJT1wiLFxuICBcIkVQRVJNXCIsIFwiRVBJUEVcIiwgXCJFUkFOR0VcIiwgXCJFUk9GU1wiLCBcIkVTUElQRVwiLCBcIkVTUkNIXCIsIFwiRVhERVZcIiwgXCJFV09VTERCTE9DS1wiLFxuICBcIkVJTlBST0dSRVNTXCIsIFwiRUFMUkVBRFlcIiwgXCJFTk9UU09DS1wiLCBcIkVERVNUQUREUlJFUVwiLCBcIkVNU0dTSVpFXCIsXG4gIFwiRVBST1RPVFlQRVwiLCBcIkVOT1BST1RPT1BUXCIsIFwiRVBST1RPTk9TVVBQT1JUXCIsIFwiRVNPQ0tUTk9TVVBQT1JUXCIsXG4gIFwiRU9QTk9UU1VQUFwiLCBcIkVQRk5PU1VQUE9SVFwiLCBcIkVBRk5PU1VQUE9SVFwiLCBcIkVBRERSSU5VU0VcIiwgXCJFQUREUk5PVEFWQUlMXCIsXG4gIFwiRU5FVERPV05cIiwgXCJFTkVUVU5SRUFDSFwiLCBcIkVORVRSRVNFVFwiLCBcIkVDT05OQUJPUlRFRFwiLCBcIkVDT05OUkVTRVRcIiwgXCJFTk9CVUZTXCIsXG4gIFwiRUlTQ09OTlwiLCBcIkVOT1RDT05OXCIsIFwiRVNIVVRET1dOXCIsIFwiRVRPT01BTllSRUZTXCIsIFwiRVRJTUVET1VUXCIsIFwiRUNPTk5SRUZVU0VEXCIsXG4gIFwiRUhPU1RET1dOXCIsIFwiRUhPU1RVTlJFQUNIXCIsIFwiRUxPT1BcIiwgXCJFT1ZFUkZMT1dcIlxuXTtcbmZ1bmN0aW9uIG1ha2VfdW5peF9lcnJfYXJncyhjb2RlLCBzeXNjYWxsLCBwYXRoLCBlcnJubykge1xuICB2YXIgdmFyaWFudCA9IHVuaXhfZXJyb3IuaW5kZXhPZihjb2RlKTtcbiAgaWYgKHZhcmlhbnQgPCAwKSB7XG4gICAgLy8gRGVmYXVsdCBpZiB1bmRlZmluZWRcbiAgICBpZiAoZXJybm8gPT0gbnVsbCkge1xuICAgICAgZXJybm8gPSAtOTk5OVxuICAgIH1cbiAgICAvLyBJZiBub25lIG9mIHRoZSBhYm92ZSB2YXJpYW50cywgZmFsbGJhY2sgdG8gRVVOS05PV05FUlIoaW50KVxuICAgIHZhcmlhbnQgPSBCTE9DSygwLCBlcnJubyk7XG4gIH1cbiAgdmFyIGFyZ3MgPSBbXG4gICAgdmFyaWFudCxcbiAgICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhzeXNjYWxsIHx8IFwiXCIpLFxuICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHBhdGggfHwgXCJcIilcbiAgXTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9zdGF0XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9zdGF0XG5mdW5jdGlvbiBjYW1sX3VuaXhfc3RhdChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2Uuc3RhdCkge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfc3RhdDogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5zdGF0KHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3N0YXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9zdGF0LCBjYW1sX2ludDY0X29mX2ludDMyXG4vL0FsaWFzOiB1bml4X3N0YXRfNjRcbmZ1bmN0aW9uIGNhbWxfdW5peF9zdGF0XzY0KG5hbWUpIHtcbiAgdmFyIHIgPSBjYW1sX3VuaXhfc3RhdChuYW1lKTtcbiAgcls5XSA9IGNhbWxfaW50NjRfb2ZfaW50MzIocls5XSk7XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbHN0YXRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X2xzdGF0XG5mdW5jdGlvbiBjYW1sX3VuaXhfbHN0YXQobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLmxzdGF0KSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9sc3RhdDogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5sc3RhdChyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc3RhdF82NFxuLy9SZXF1aXJlczogY2FtbF91bml4X2xzdGF0LCBjYW1sX2ludDY0X29mX2ludDMyXG4vL0FsaWFzOiB1bml4X2xzdGF0XzY0XG5mdW5jdGlvbiBjYW1sX3VuaXhfbHN0YXRfNjQobmFtZSkge1xuICB2YXIgciA9IGNhbWxfdW5peF9sc3RhdChuYW1lKTtcbiAgcls5XSA9IGNhbWxfaW50NjRfb2ZfaW50MzIocls5XSk7XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbWtkaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X21rZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfbWtkaXIobmFtZSwgcGVybSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLm1rZGlyKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9ta2Rpcjogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5ta2Rpcihyb290LnJlc3QsIHBlcm0sIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ybWRpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfcm1kaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9ybWRpcihuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2Uucm1kaXIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3JtZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnJtZGlyKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3N5bWxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3N5bWxpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9zeW1saW5rKHRvX2Rpciwgc3JjLCBkc3QpIHtcbiAgdmFyIHNyY19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uoc3JjKTtcbiAgdmFyIGRzdF9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2UoZHN0KTtcbiAgaWYoc3JjX3Jvb3QuZGV2aWNlICE9IGRzdF9yb290LmRldmljZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N5bWxpbms6IGNhbm5vdCBzeW1saW5rIGJldHdlZW4gdHdvIGZpbGVzeXN0ZW1zXCIpO1xuICBpZiAoIXNyY19yb290LmRldmljZS5zeW1saW5rKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9zeW1saW5rOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHNyY19yb290LmRldmljZS5zeW1saW5rKHRvX2Rpciwgc3JjX3Jvb3QucmVzdCwgZHN0X3Jvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JlYWRsaW5rXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9yZWFkbGlua1xuZnVuY3Rpb24gY2FtbF91bml4X3JlYWRsaW5rKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5yZWFkbGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfcmVhZGxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2UucmVhZGxpbmsocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdW5saW5rXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF91bmxpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF91bmxpbmsobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnVubGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfdW5saW5rOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXR1aWRcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL0FsaWFzOiB1bml4X2dldHVpZFxuZnVuY3Rpb24gY2FtbF91bml4X2dldHVpZCh1bml0KSB7XG4gIGlmKGdsb2JhbFRoaXMucHJvY2VzcyAmJiBnbG9iYWxUaGlzLnByb2Nlc3MuZ2V0dWlkKXtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5wcm9jZXNzLmdldHVpZCgpO1xuICB9XG4gIGNhbWxfcmFpc2Vfbm90X2ZvdW5kKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXRwd3VpZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vQWxpYXM6IHVuaXhfZ2V0cHd1aWRcbmZ1bmN0aW9uIGNhbWxfdW5peF9nZXRwd3VpZCh1bml0KSB7XG4gIGNhbWxfcmFpc2Vfbm90X2ZvdW5kKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9oYXNfc3ltbGlua1xuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vQWxpYXM6IHVuaXhfaGFzX3N5bWxpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9oYXNfc3ltbGluayh1bml0KSB7XG4gIHJldHVybiBmc19ub2RlX3N1cHBvcnRlZCgpPzE6MFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfb3BlbmRpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfb3BlbmRpclxuZnVuY3Rpb24gY2FtbF91bml4X29wZW5kaXIocGF0aCkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKHBhdGgpO1xuICBpZiAoIXJvb3QuZGV2aWNlLm9wZW5kaXIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X29wZW5kaXI6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICB2YXIgZGlyX2hhbmRsZSA9IHJvb3QuZGV2aWNlLm9wZW5kaXIocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xuICByZXR1cm4geyBwb2ludGVyIDogZGlyX2hhbmRsZSwgcGF0aDogcGF0aCB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9yZWFkZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogbWFrZV91bml4X2Vycl9hcmdzLCBjYW1sX3JhaXNlX3dpdGhfYXJncywgY2FtbF9uYW1lZF92YWx1ZVxuLy9BbGlhczogdW5peF9yZWFkZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmVhZGRpcihkaXJfaGFuZGxlKSB7XG4gIHZhciBlbnRyeTtcbiAgdHJ5IHtcbiAgICAgIGVudHJ5ID0gZGlyX2hhbmRsZS5wb2ludGVyLnJlYWRTeW5jKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHZhciB1bml4X2Vycm9yID0gY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFQkFERlwiLCBcInJlYWRkaXJcIiwgZGlyX2hhbmRsZS5wYXRoKSk7XG4gIH1cbiAgaWYgKGVudHJ5ID09PSBudWxsKSB7XG4gICAgICBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoZW50cnkubmFtZSk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2Nsb3NlZGlyXG4vL1JlcXVpcmVzOiBtYWtlX3VuaXhfZXJyX2FyZ3MsIGNhbWxfcmFpc2Vfd2l0aF9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlXG4vL0FsaWFzOiB1bml4X2Nsb3NlZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfY2xvc2VkaXIoZGlyX2hhbmRsZSkge1xuICB0cnkge1xuICAgICAgZGlyX2hhbmRsZS5wb2ludGVyLmNsb3NlU3luYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgICB2YXIgdW5peF9lcnJvciA9IGNhbWxfbmFtZWRfdmFsdWUoJ1VuaXguVW5peF9lcnJvcicpO1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRUJBREZcIiwgXCJjbG9zZWRpclwiLCBkaXJfaGFuZGxlLnBhdGgpKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmV3aW5kZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfY2xvc2VkaXIsIGNhbWxfdW5peF9vcGVuZGlyXG4vL0FsaWFzOiB1bml4X3Jld2luZGRpclxuZnVuY3Rpb24gY2FtbF91bml4X3Jld2luZGRpcihkaXJfaGFuZGxlKSB7XG4gIGNhbWxfdW5peF9jbG9zZWRpcihkaXJfaGFuZGxlKTtcbiAgdmFyIG5ld19kaXJfaGFuZGxlID0gY2FtbF91bml4X29wZW5kaXIoZGlyX2hhbmRsZS5wYXRoKTtcbiAgZGlyX2hhbmRsZS5wb2ludGVyID0gbmV3X2Rpcl9oYW5kbGUucG9pbnRlcjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kZmlyc3Rcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF91bml4X29wZW5kaXIsIGNhbWxfdW5peF9yZWFkZGlyXG4vL0FsaWFzOiB3aW5fZmluZGZpcnN0XG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZGZpcnN0KHBhdGgpIHtcbiAgLy8gVGhlIFdpbmRvd3MgY29kZSBhZGRzIHRoaXMgZ2xvYiB0byB0aGUgcGF0aCwgc28gd2UgbmVlZCB0byByZW1vdmUgaXRcbiAgdmFyIHBhdGhfanMgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhwYXRoKTtcbiAgcGF0aF9qcyA9IHBhdGhfanMucmVwbGFjZSgvKF58W1xcXFxcXC9dKVxcKlxcLlxcKiQvLCBcIlwiKTtcbiAgcGF0aCA9IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHBhdGhfanMpO1xuICAvLyAqLiogaXMgbm93IHN0cmlwcGVkXG4gIHZhciBkaXJfaGFuZGxlID0gY2FtbF91bml4X29wZW5kaXIocGF0aCk7XG4gIHZhciBmaXJzdF9lbnRyeSA9IGNhbWxfdW5peF9yZWFkZGlyKGRpcl9oYW5kbGUpO1xuICAvLyBUaGUgV2luZG93cyBiaW5kaW5ncyB0eXBlIGRpcl9oYW5kbGUgYXMgYW4gYGludGAgYnV0IGl0J3Mgbm90IGluIEpTXG4gIHJldHVybiBbMCwgZmlyc3RfZW50cnksIGRpcl9oYW5kbGVdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmluZG5leHRcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9yZWFkZGlyXG4vL0FsaWFzOiB3aW5fZmluZG5leHRcbmZ1bmN0aW9uIGNhbWxfdW5peF9maW5kbmV4dChkaXJfaGFuZGxlKSB7XG4gIHJldHVybiBjYW1sX3VuaXhfcmVhZGRpcihkaXJfaGFuZGxlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbmRjbG9zZVxuLy9SZXF1aXJlczogY2FtbF91bml4X2Nsb3NlZGlyXG4vL0FsaWFzOiB3aW5fZmluZGNsb3NlXG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZGNsb3NlKGRpcl9oYW5kbGUpIHtcbiAgcmV0dXJuIGNhbWxfdW5peF9jbG9zZWRpcihkaXJfaGFuZGxlKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaW5ldF9hZGRyX29mX3N0cmluZyBjb25zdFxuLy9BbGlhczogdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3VuaXhfaW5ldF9hZGRyX29mX3N0cmluZyAoKSB7cmV0dXJuIDA7fVxuXG5cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IE1sRmFrZURldmljZVxuLy9SZXF1aXJlczogTWxGYWtlRmlsZSwgTWxGYWtlRmQsIGNhbWxfY3JlYXRlX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2FycmF5LCBjYW1sX2J5dGVzX29mX3N0cmluZywgY2FtbF9ieXRlc19vZl9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX2lzX21sX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9yYWlzZV93aXRoX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWVzXG4vL1JlcXVpcmVzOiBtYWtlX3VuaXhfZXJyX2FyZ3NcbmZ1bmN0aW9uIE1sRmFrZURldmljZSAocm9vdCwgZikge1xuICB0aGlzLmNvbnRlbnQ9e307XG4gIHRoaXMucm9vdCA9IHJvb3Q7XG4gIHRoaXMubG9va3VwRnVuID0gZjtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUubm0gPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiAodGhpcy5yb290ICsgbmFtZSk7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmNyZWF0ZV9kaXJfaWZfbmVlZGVkID0gZnVuY3Rpb24obmFtZSkge1xuICB2YXIgY29tcCA9IG5hbWUuc3BsaXQoXCIvXCIpO1xuICB2YXIgcmVzID0gXCJcIjtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGNvbXAubGVuZ3RoIC0gMTsgaSsrKXtcbiAgICByZXMgKz0gY29tcFtpXSArIFwiL1wiO1xuICAgIGlmKHRoaXMuY29udGVudFtyZXNdKSBjb250aW51ZTtcbiAgICB0aGlzLmNvbnRlbnRbcmVzXSA9IFN5bWJvbChcImRpcmVjdG9yeVwiKTtcbiAgfVxufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5zbGFzaCA9IGZ1bmN0aW9uKG5hbWUpe1xuICByZXR1cm4gL1xcLyQvLnRlc3QobmFtZSk/bmFtZToobmFtZSArIFwiL1wiKTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUubG9va3VwID0gZnVuY3Rpb24obmFtZSkge1xuICBpZighdGhpcy5jb250ZW50W25hbWVdICYmIHRoaXMubG9va3VwRnVuKSB7XG4gICAgdmFyIHJlcyA9IHRoaXMubG9va3VwRnVuKGNhbWxfc3RyaW5nX29mX2pzYnl0ZXModGhpcy5yb290KSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhuYW1lKSk7XG4gICAgaWYocmVzICE9PSAwKSB7XG4gICAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgICAgdGhpcy5jb250ZW50W25hbWVdPW5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHJlc1sxXSkpO1xuICAgIH1cbiAgfVxufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5leGlzdHMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIC8vIFRoZSByb290IG9mIHRoZSBkZXZpY2UgZXhpc3RzXG4gIGlmKG5hbWUgPT0gXCJcIikgcmV0dXJuIDE7XG4gIC8vIENoZWNrIGlmIGEgZGlyZWN0b3J5IGV4aXN0c1xuICB2YXIgbmFtZV9zbGFzaCA9IHRoaXMuc2xhc2gobmFtZSk7XG4gIGlmKHRoaXMuY29udGVudFtuYW1lX3NsYXNoXSkgcmV0dXJuIDE7XG4gIC8vIENoZWNrIGlmIGEgZmlsZSBleGlzdHNcbiAgdGhpcy5sb29rdXAobmFtZSk7XG4gIHJldHVybiB0aGlzLmNvbnRlbnRbbmFtZV0/MTowO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5pc0ZpbGUgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmKHRoaXMuZXhpc3RzKG5hbWUpICYmICF0aGlzLmlzX2RpcihuYW1lKSkge1xuICAgIHJldHVybiAxXG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuIDBcbiAgfVxufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5ta2RpciA9IGZ1bmN0aW9uKG5hbWUsbW9kZSwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IHJhaXNlX3VuaXggJiYgY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG4gIGlmKHRoaXMuZXhpc3RzKG5hbWUpKSB7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVFWElTVFwiLCBcIm1rZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IEZpbGUgZXhpc3RzXCIpO1xuICAgIH1cbiAgfVxuICB2YXIgcGFyZW50ID0gL14oLiopXFwvW14vXSsvLmV4ZWMobmFtZSk7XG4gIHBhcmVudCA9IChwYXJlbnQgJiYgcGFyZW50WzFdKSB8fCAnJztcbiAgaWYoIXRoaXMuZXhpc3RzKHBhcmVudCkpe1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9FTlRcIiwgXCJta2RpclwiLCB0aGlzLm5tKHBhcmVudCkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihwYXJlbnQgKyBcIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cbiAgaWYoIXRoaXMuaXNfZGlyKHBhcmVudCkpe1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9URElSXCIsIFwibWtkaXJcIiwgdGhpcy5ubShwYXJlbnQpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IocGFyZW50ICsgXCI6IE5vdCBhIGRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cbiAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZCh0aGlzLnNsYXNoKG5hbWUpKTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUucm1kaXIgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHZhciB1bml4X2Vycm9yID0gcmFpc2VfdW5peCAmJiBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcbiAgdmFyIG5hbWVfc2xhc2ggPSAobmFtZSA9PSBcIlwiKT9cIlwiOih0aGlzLnNsYXNoKG5hbWUpKTtcbiAgdmFyIHIgPSBuZXcgUmVnRXhwKFwiXlwiICsgbmFtZV9zbGFzaCArIFwiKFteL10rKVwiKTtcbiAgaWYoIXRoaXMuZXhpc3RzKG5hbWUpKSB7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT0VOVFwiLCBcInJtZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG4gICAgfVxuICB9XG4gIGlmKCF0aGlzLmlzX2RpcihuYW1lKSkge1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9URElSXCIsIFwicm1kaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgfVxuICBmb3IodmFyIG4gaW4gdGhpcy5jb250ZW50KSB7XG4gICAgaWYobi5tYXRjaChyKSkge1xuICAgICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PVEVNUFRZXCIsIFwicm1kaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiOiBEaXJlY3Rvcnkgbm90IGVtcHR5XCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBkZWxldGUgdGhpcy5jb250ZW50W25hbWVfc2xhc2hdO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5yZWFkZGlyID0gZnVuY3Rpb24obmFtZSkge1xuICB2YXIgbmFtZV9zbGFzaCA9IChuYW1lID09IFwiXCIpP1wiXCI6KHRoaXMuc2xhc2gobmFtZSkpO1xuICBpZighdGhpcy5leGlzdHMobmFtZSkpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG4gIH1cbiAgaWYoIXRoaXMuaXNfZGlyKG5hbWUpKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBOb3QgYSBkaXJlY3RvcnlcIik7XG4gIH1cbiAgdmFyIHIgPSBuZXcgUmVnRXhwKFwiXlwiICsgbmFtZV9zbGFzaCArIFwiKFteL10rKVwiKTtcbiAgdmFyIHNlZW4gPSB7fVxuICB2YXIgYSA9IFtdO1xuICBmb3IodmFyIG4gaW4gdGhpcy5jb250ZW50KSB7XG4gICAgdmFyIG0gPSBuLm1hdGNoKHIpO1xuICAgIGlmKG0gJiYgIXNlZW5bbVsxXV0pIHtzZWVuW21bMV1dID0gdHJ1ZTsgYS5wdXNoKG1bMV0pfVxuICB9XG4gIHJldHVybiBhO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5vcGVuZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IHJhaXNlX3VuaXggJiYgY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG5cbiAgdmFyIGEgPSB0aGlzLnJlYWRkaXIobmFtZSk7XG4gIHZhciBjID0gZmFsc2U7XG4gIHZhciBpID0gMDtcbiAgcmV0dXJuIHsgcmVhZFN5bmMgOiAoZnVuY3Rpb24gKCkge1xuICAgIGlmIChjKSB7XG4gICAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFQkFERlwiLCBcImNsb3NlZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IGNsb3NlZGlyIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYoaSA9PSBhLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGVudHJ5ID0gYVtpXTtcbiAgICBpKys7XG4gICAgcmV0dXJuIHsgbmFtZTogZW50cnkgfVxuICB9KVxuICAgICwgY2xvc2VTeW5jOiAoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGMpIHtcbiAgICAgICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFQkFERlwiLCBcImNsb3NlZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IGNsb3NlZGlyIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYyA9IHRydWU7XG4gICAgICBhID0gW107XG4gICAgfSlcbiAgfVxufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5pc19kaXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmKG5hbWUgPT0gXCJcIikgIHJldHVybiB0cnVlO1xuICB2YXIgbmFtZV9zbGFzaCA9IHRoaXMuc2xhc2gobmFtZSk7XG4gIHJldHVybiB0aGlzLmNvbnRlbnRbbmFtZV9zbGFzaF0/MTowO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS51bmxpbmsgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBvayA9IHRoaXMuY29udGVudFtuYW1lXT90cnVlOmZhbHNlO1xuICBkZWxldGUgdGhpcy5jb250ZW50W25hbWVdO1xuICByZXR1cm4gb2s7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihuYW1lLCBmKSB7XG4gIHZhciBmaWxlO1xuICBpZihmLnJkb25seSAmJiBmLndyb25seSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3Jkb25seSBhbmQgT3Blbl93cm9ubHkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICBpZihmLnRleHQgJiYgZi5iaW5hcnkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl90ZXh0IGFuZCBPcGVuX2JpbmFyeSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIHRoaXMubG9va3VwKG5hbWUpO1xuICBpZiAodGhpcy5jb250ZW50W25hbWVdKSB7XG4gICAgaWYgKHRoaXMuaXNfZGlyKG5hbWUpKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBpcyBhIGRpcmVjdG9yeVwiKTtcbiAgICBpZiAoZi5jcmVhdGUgJiYgZi5leGNsKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICAgIGZpbGUgPSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gICAgaWYoZi50cnVuY2F0ZSkgZmlsZS50cnVuY2F0ZSgpO1xuICB9IGVsc2UgaWYgKGYuY3JlYXRlKSB7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgfSBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSAodGhpcy5ubShuYW1lKSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBNbEZha2VGZCh0aGlzLm5tKG5hbWUpLCBmaWxlLCBmKTtcbn1cblxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24obmFtZSwgZikge1xuICB2YXIgZmlsZTtcbiAgaWYoZi5yZG9ubHkgJiYgZi53cm9ubHkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl9yZG9ubHkgYW5kIE9wZW5fd3Jvbmx5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgaWYoZi50ZXh0ICYmIGYuYmluYXJ5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fdGV4dCBhbmQgT3Blbl9iaW5hcnkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICB0aGlzLmxvb2t1cChuYW1lKTtcbiAgaWYgKHRoaXMuY29udGVudFtuYW1lXSkge1xuICAgIGlmICh0aGlzLmlzX2RpcihuYW1lKSkgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogaXMgYSBkaXJlY3RvcnlcIik7XG4gICAgaWYgKGYuY3JlYXRlICYmIGYuZXhjbCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmlsZSBhbHJlYWR5IGV4aXN0c1wiKTtcbiAgICBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICAgIGlmKGYudHJ1bmNhdGUpIGZpbGUudHJ1bmNhdGUoKTtcbiAgfSBlbHNlIGlmIChmLmNyZWF0ZSkge1xuICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgdGhpcy5jb250ZW50W25hbWVdID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9jcmVhdGVfYnl0ZXMoMCkpO1xuICAgIGZpbGUgPSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUgKHRoaXMubm0obmFtZSkpO1xuICB9XG4gIHJldHVybiBuZXcgTWxGYWtlRmQodGhpcy5ubShuYW1lKSwgZmlsZSwgZik7XG59XG5cbk1sRmFrZURldmljZS5wcm90b3R5cGUucmVnaXN0ZXI9IGZ1bmN0aW9uIChuYW1lLGNvbnRlbnQpe1xuICB2YXIgZmlsZTtcbiAgaWYodGhpcy5jb250ZW50W25hbWVdKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICBpZihjYW1sX2lzX21sX2J5dGVzKGNvbnRlbnQpKVxuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShjb250ZW50KTtcbiAgaWYoY2FtbF9pc19tbF9zdHJpbmcoY29udGVudCkpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGNvbnRlbnQpKTtcbiAgZWxzZSBpZihjb250ZW50IGluc3RhbmNlb2YgQXJyYXkpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoY29udGVudCkpO1xuICBlbHNlIGlmKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKVxuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX2pzYnl0ZXMoY29udGVudCkpO1xuICBlbHNlIGlmKGNvbnRlbnQudG9TdHJpbmcpIHtcbiAgICB2YXIgYnl0ZXMgPSBjYW1sX2J5dGVzX29mX3N0cmluZyhjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhjb250ZW50LnRvU3RyaW5nKCkpKTtcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoYnl0ZXMpO1xuICB9XG4gIGlmKGZpbGUpe1xuICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgdGhpcy5jb250ZW50W25hbWVdID0gZmlsZTtcbiAgfVxuICBlbHNlIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IHJlZ2lzdGVyaW5nIGZpbGUgd2l0aCBpbnZhbGlkIGNvbnRlbnQgdHlwZVwiKTtcbn1cblxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sRmFrZURldmljZVxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBNbEZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ibGl0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX2J5dGVzX29mX2FycmF5XG5mdW5jdGlvbiBNbEZha2VGaWxlKGNvbnRlbnQpe1xuICB0aGlzLmRhdGEgPSBjb250ZW50O1xufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUgPSBuZXcgTWxGaWxlICgpO1xuTWxGYWtlRmlsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNbEZha2VGaWxlXG5NbEZha2VGaWxlLnByb3RvdHlwZS50cnVuY2F0ZSA9IGZ1bmN0aW9uKGxlbil7XG4gIHZhciBvbGQgPSB0aGlzLmRhdGE7XG4gIHRoaXMuZGF0YSA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbnwwKTtcbiAgY2FtbF9ibGl0X2J5dGVzKG9sZCwgMCwgdGhpcy5kYXRhLCAwLCBsZW4pO1xufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FtbF9tbF9ieXRlc19sZW5ndGgodGhpcy5kYXRhKTtcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24ob2Zmc2V0LGJ1Zixwb3MsbGVuKXtcbiAgdmFyIGNsZW4gPSB0aGlzLmxlbmd0aCgpO1xuICBpZihvZmZzZXQgKyBsZW4gPj0gY2xlbikge1xuICAgIHZhciBuZXdfc3RyID0gY2FtbF9jcmVhdGVfYnl0ZXMob2Zmc2V0ICsgbGVuKTtcbiAgICB2YXIgb2xkX2RhdGEgPSB0aGlzLmRhdGE7XG4gICAgdGhpcy5kYXRhID0gbmV3X3N0cjtcbiAgICBjYW1sX2JsaXRfYnl0ZXMob2xkX2RhdGEsIDAsIHRoaXMuZGF0YSwgMCwgY2xlbik7XG4gIH1cbiAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoYnVmKSwgcG9zLCB0aGlzLmRhdGEsIG9mZnNldCwgbGVuKTtcbiAgcmV0dXJuIDBcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihvZmZzZXQsYnVmLHBvcyxsZW4pe1xuICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gIGlmKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgbGVuID0gY2xlbiAtIG9mZnNldDtcbiAgfVxuICBpZihsZW4pIHtcbiAgICB2YXIgZGF0YSA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbnwwKTtcbiAgICBjYW1sX2JsaXRfYnl0ZXModGhpcy5kYXRhLCBvZmZzZXQsIGRhdGEsIDAsIGxlbik7XG4gICAgYnVmLnNldChjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGRhdGEpLCBwb3MpO1xuICB9XG4gIHJldHVybiBsZW5cbn1cblxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGZF9vdXRcbi8vUmVxdWlyZXM6IE1sRmFrZUZpbGUsIGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX2JsaXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBNbEZha2VGZF9vdXQoZmQsZmxhZ3MpIHtcbiAgTWxGYWtlRmlsZS5jYWxsKHRoaXMsIGNhbWxfY3JlYXRlX2J5dGVzKDApKTtcbiAgdGhpcy5sb2cgPSAoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIDAgfSk7XG4gIGlmKGZkID09IDEgJiYgdHlwZW9mIGNvbnNvbGUubG9nID09IFwiZnVuY3Rpb25cIilcbiAgICB0aGlzLmxvZyA9IGNvbnNvbGUubG9nO1xuICBlbHNlIGlmKGZkID09IDIgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT0gXCJmdW5jdGlvblwiKVxuICAgIHRoaXMubG9nID0gY29uc29sZS5lcnJvcjtcbiAgZWxzZSBpZih0eXBlb2YgY29uc29sZS5sb2cgPT0gXCJmdW5jdGlvblwiKVxuICAgIHRoaXMubG9nID0gY29uc29sZS5sb2dcbiAgdGhpcy5mbGFncyA9IGZsYWdzO1xufVxuTWxGYWtlRmRfb3V0LnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbigpIHsgcmV0dXJuIDAgfVxuTWxGYWtlRmRfb3V0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChvZmZzZXQsYnVmLHBvcyxsZW4pIHtcbiAgaWYodGhpcy5sb2cpIHtcbiAgICBpZihsZW4gPiAwXG4gICAgICAgJiYgcG9zID49IDBcbiAgICAgICAmJiBwb3MrbGVuIDw9IGJ1Zi5sZW5ndGhcbiAgICAgICAmJiBidWZbcG9zK2xlbi0xXSA9PSAxMClcbiAgICAgIGxlbiAtLTtcbiAgICAvLyBEbyBub3Qgb3V0cHV0IHRoZSBsYXN0IFxcbiBpZiBwcmVzZW50XG4gICAgLy8gYXMgY29uc29sZSBsb2dnaW5nIGRpc3BsYXkgYSBuZXdsaW5lIGF0IHRoZSBlbmRcbiAgICB2YXIgc3JjID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVuKTtcbiAgICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl9hcnJheShidWYpLCBwb3MsIHNyYywgMCwgbGVuKTtcbiAgICB0aGlzLmxvZyhzcmMudG9VdGYxNigpKTtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLmZkICArIFwiOiBmaWxlIGRlc2NyaXB0b3IgYWxyZWFkeSBjbG9zZWRcIik7XG59XG5NbEZha2VGZF9vdXQucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAob2Zmc2V0LCBidWYsIHBvcywgbGVuKSB7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMuZmQgICsgXCI6IGZpbGUgZGVzY3JpcHRvciBpcyB3cml0ZSBvbmx5XCIpO1xufVxuTWxGYWtlRmRfb3V0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5sb2cgPSB1bmRlZmluZWQ7XG59XG5cblxuLy9Qcm92aWRlczogTWxGYWtlRmRcbi8vUmVxdWlyZXM6IE1sRmFrZUZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBNbEZha2VGZChuYW1lLCBmaWxlLGZsYWdzKSB7XG4gIHRoaXMuZmlsZSA9IGZpbGU7XG4gIHRoaXMubmFtZSA9IG5hbWU7XG4gIHRoaXMuZmxhZ3MgPSBmbGFncztcbn1cblxuTWxGYWtlRmQucHJvdG90eXBlLmVycl9jbG9zZWQgPSBmdW5jdGlvbiAoKSB7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubmFtZSAgKyBcIjogZmlsZSBkZXNjcmlwdG9yIGFscmVhZHkgY2xvc2VkXCIpO1xufVxuTWxGYWtlRmQucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uKCkge1xuICBpZih0aGlzLmZpbGUpIHJldHVybiB0aGlzLmZpbGUubGVuZ3RoICgpXG4gIHRoaXMuZXJyX2Nsb3NlZCgpO1xufVxuTWxGYWtlRmQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKG9mZnNldCxidWYscG9zLGxlbikge1xuICBpZih0aGlzLmZpbGUpIHJldHVybiB0aGlzLmZpbGUud3JpdGUob2Zmc2V0LGJ1Zixwb3MsbGVuKVxuICB0aGlzLmVycl9jbG9zZWQoKTtcbn1cbk1sRmFrZUZkLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKG9mZnNldCwgYnVmLCBwb3MsIGxlbikge1xuICBpZih0aGlzLmZpbGUpIHJldHVybiB0aGlzLmZpbGUucmVhZChvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pXG4gIHRoaXMuZXJyX2Nsb3NlZCgpO1xufVxuTWxGYWtlRmQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmZpbGUgPSB1bmRlZmluZWQ7XG59XG4iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdGl2ZSBDYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICovXG4vKiAgZW4gQXV0b21hdGlxdWUuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkICAgICovXG4vKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdpdGggICAgICovXG4vKiAgdGhlIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZpbGUgLi4vTElDRU5TRS4gICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qICRJZDogbGV4aW5nLmMgNjA0NSAyMDA0LTAxLTAxIDE2OjQyOjQzWiBkb2xpZ2V6ICQgKi9cblxuLyogVGhlIHRhYmxlLWRyaXZlbiBhdXRvbWF0b24gZm9yIGxleGVycyBnZW5lcmF0ZWQgYnkgY2FtbGxleC4gKi9cblxuLy9Qcm92aWRlczogY2FtbF9sZXhfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbGV4X2FycmF5KHMpIHtcbiAgcyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocyk7XG4gIHZhciBsID0gcy5sZW5ndGggLyAyO1xuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgYVtpXSA9IChzLmNoYXJDb2RlQXQoMiAqIGkpIHwgKHMuY2hhckNvZGVBdCgyICogaSArIDEpIDw8IDgpKSA8PCAxNiA+PiAxNjtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGV4X2VuZ2luZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9sZXhfYXJyYXksIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbGV4X2VuZ2luZSh0YmwsIHN0YXJ0X3N0YXRlLCBsZXhidWYpIHtcbiAgdmFyIGxleF9idWZmZXIgPSAyO1xuICB2YXIgbGV4X2J1ZmZlcl9sZW4gPSAzO1xuICB2YXIgbGV4X3N0YXJ0X3BvcyA9IDU7XG4gIHZhciBsZXhfY3Vycl9wb3MgPSA2O1xuICB2YXIgbGV4X2xhc3RfcG9zID0gNztcbiAgdmFyIGxleF9sYXN0X2FjdGlvbiA9IDg7XG4gIHZhciBsZXhfZW9mX3JlYWNoZWQgPSA5O1xuICB2YXIgbGV4X2Jhc2UgPSAxO1xuICB2YXIgbGV4X2JhY2t0cmsgPSAyO1xuICB2YXIgbGV4X2RlZmF1bHQgPSAzO1xuICB2YXIgbGV4X3RyYW5zID0gNDtcbiAgdmFyIGxleF9jaGVjayA9IDU7XG5cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHQpIHtcbiAgICB0YmwubGV4X2Jhc2UgPSAgICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYXNlXSk7XG4gICAgdGJsLmxleF9iYWNrdHJrID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFja3Rya10pO1xuICAgIHRibC5sZXhfY2hlY2sgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2NoZWNrXSk7XG4gICAgdGJsLmxleF90cmFucyA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfdHJhbnNdKTtcbiAgICB0YmwubGV4X2RlZmF1bHQgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9kZWZhdWx0XSk7XG4gIH1cblxuICB2YXIgYywgc3RhdGUgPSBzdGFydF9zdGF0ZTtcblxuICB2YXIgYnVmZmVyID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhsZXhidWZbbGV4X2J1ZmZlcl0pO1xuXG4gIGlmIChzdGF0ZSA+PSAwKSB7XG4gICAgLyogRmlyc3QgZW50cnkgKi9cbiAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfc3RhcnRfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gLTE7XG4gIH0gZWxzZSB7XG4gICAgLyogUmVlbnRyeSBhZnRlciByZWZpbGwgKi9cbiAgICBzdGF0ZSA9IC1zdGF0ZSAtIDE7XG4gIH1cbiAgZm9yKDs7KSB7XG4gICAgLyogTG9va3VwIGJhc2UgYWRkcmVzcyBvciBhY3Rpb24gbnVtYmVyIGZvciBjdXJyZW50IHN0YXRlICovXG4gICAgdmFyIGJhc2UgPSB0YmwubGV4X2Jhc2Vbc3RhdGVdO1xuICAgIGlmIChiYXNlIDwgMCkgcmV0dXJuIC1iYXNlLTE7XG4gICAgLyogU2VlIGlmIGl0J3MgYSBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICB2YXIgYmFja3RyayA9IHRibC5sZXhfYmFja3Rya1tzdGF0ZV07XG4gICAgaWYgKGJhY2t0cmsgPj0gMCkge1xuICAgICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gYmFja3RyaztcbiAgICB9XG4gICAgLyogU2VlIGlmIHdlIG5lZWQgYSByZWZpbGwgKi9cbiAgICBpZiAobGV4YnVmW2xleF9jdXJyX3Bvc10gPj0gbGV4YnVmW2xleF9idWZmZXJfbGVuXSl7XG4gICAgICBpZiAobGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPT0gMClcbiAgICAgICAgcmV0dXJuIC1zdGF0ZSAtIDE7XG4gICAgICBlbHNlXG4gICAgICAgIGMgPSAyNTY7XG4gICAgfWVsc2V7XG4gICAgICAvKiBSZWFkIG5leHQgaW5wdXQgY2hhciAqL1xuICAgICAgYyA9IGJ1ZmZlcltsZXhidWZbbGV4X2N1cnJfcG9zXV07XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSArKztcbiAgICB9XG4gICAgLyogRGV0ZXJtaW5lIG5leHQgc3RhdGUgKi9cbiAgICBpZiAodGJsLmxleF9jaGVja1tiYXNlICsgY10gPT0gc3RhdGUpXG4gICAgICBzdGF0ZSA9IHRibC5sZXhfdHJhbnNbYmFzZSArIGNdO1xuICAgIGVsc2VcbiAgICAgIHN0YXRlID0gdGJsLmxleF9kZWZhdWx0W3N0YXRlXTtcbiAgICAvKiBJZiBubyB0cmFuc2l0aW9uIG9uIHRoaXMgY2hhciwgcmV0dXJuIHRvIGxhc3QgYmFja3RyYWNrIHBvaW50ICovXG4gICAgaWYgKHN0YXRlIDwgMCkge1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gPSBsZXhidWZbbGV4X2xhc3RfcG9zXTtcbiAgICAgIGlmIChsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9PSAtMSlcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcImxleGluZzogZW1wdHkgdG9rZW5cIik7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXTtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09IDI1NikgbGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPSAwO1xuICAgIH1cbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiBOZXcgbGV4ZXIgZW5naW5lLCB3aXRoIG1lbW9yeSBvZiBwb3NpdGlvbnMgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8vUHJvdmlkZXM6IGNhbWxfbmV3X2xleF9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfbGV4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2xleF9ydW5fbWVtKHMsIGksIG1lbSwgY3Vycl9wb3MpIHtcbiAgZm9yICg7Oykge1xuICAgIHZhciBkc3QgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoZHN0ID09IDB4ZmYpIHJldHVybjtcbiAgICB2YXIgc3JjID0gcy5jaGFyQ29kZUF0KGkpOyBpKys7XG4gICAgaWYgKHNyYyA9PSAweGZmKVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IGN1cnJfcG9zO1xuICAgIGVsc2VcbiAgICAgIG1lbSBbZHN0ICsgMV0gPSBtZW0gW3NyYyArIDFdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbWxfbGV4X3J1bl90YWcocywgaSwgbWVtKSB7XG4gIGZvciAoOzspIHtcbiAgICB2YXIgZHN0ID0gcy5jaGFyQ29kZUF0KGkpOyBpKys7XG4gICAgaWYgKGRzdCA9PSAweGZmKSByZXR1cm4gO1xuICAgIHZhciBzcmMgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoc3JjID09IDB4ZmYpXG4gICAgICBtZW0gW2RzdCArIDFdID0gLTE7XG4gICAgZWxzZVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IG1lbSBbc3JjICsgMV07XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FtbF9uZXdfbGV4X2VuZ2luZSh0YmwsIHN0YXJ0X3N0YXRlLCBsZXhidWYpIHtcbiAgdmFyIGxleF9idWZmZXIgPSAyO1xuICB2YXIgbGV4X2J1ZmZlcl9sZW4gPSAzO1xuICB2YXIgbGV4X3N0YXJ0X3BvcyA9IDU7XG4gIHZhciBsZXhfY3Vycl9wb3MgPSA2O1xuICB2YXIgbGV4X2xhc3RfcG9zID0gNztcbiAgdmFyIGxleF9sYXN0X2FjdGlvbiA9IDg7XG4gIHZhciBsZXhfZW9mX3JlYWNoZWQgPSA5O1xuICB2YXIgbGV4X21lbSA9IDEwO1xuICB2YXIgbGV4X2Jhc2UgPSAxO1xuICB2YXIgbGV4X2JhY2t0cmsgPSAyO1xuICB2YXIgbGV4X2RlZmF1bHQgPSAzO1xuICB2YXIgbGV4X3RyYW5zID0gNDtcbiAgdmFyIGxleF9jaGVjayA9IDU7XG4gIHZhciBsZXhfYmFzZV9jb2RlID0gNjtcbiAgdmFyIGxleF9iYWNrdHJrX2NvZGUgPSA3O1xuICB2YXIgbGV4X2RlZmF1bHRfY29kZSA9IDg7XG4gIHZhciBsZXhfdHJhbnNfY29kZSA9IDk7XG4gIHZhciBsZXhfY2hlY2tfY29kZSA9IDEwO1xuICB2YXIgbGV4X2NvZGUgPSAxMTtcblxuICBpZiAoIXRibC5sZXhfZGVmYXVsdCkge1xuICAgIHRibC5sZXhfYmFzZSA9ICAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYWNrdHJrXSk7XG4gICAgdGJsLmxleF9jaGVjayA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfY2hlY2tdKTtcbiAgICB0YmwubGV4X3RyYW5zID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF90cmFuc10pO1xuICAgIHRibC5sZXhfZGVmYXVsdCA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2RlZmF1bHRdKTtcbiAgfVxuICBpZiAoIXRibC5sZXhfZGVmYXVsdF9jb2RlKSB7XG4gICAgdGJsLmxleF9iYXNlX2NvZGUgPSAgICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYXNlX2NvZGVdKTtcbiAgICB0YmwubGV4X2JhY2t0cmtfY29kZSA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2JhY2t0cmtfY29kZV0pO1xuICAgIHRibC5sZXhfY2hlY2tfY29kZSA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfY2hlY2tfY29kZV0pO1xuICAgIHRibC5sZXhfdHJhbnNfY29kZSA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfdHJhbnNfY29kZV0pO1xuICAgIHRibC5sZXhfZGVmYXVsdF9jb2RlID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfZGVmYXVsdF9jb2RlXSk7XG4gIH1cbiAgaWYgKHRibC5sZXhfY29kZSA9PSBudWxsKSB0YmwubGV4X2NvZGUgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHRibFtsZXhfY29kZV0pO1xuXG4gIHZhciBjLCBzdGF0ZSA9IHN0YXJ0X3N0YXRlO1xuXG4gIHZhciBidWZmZXIgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGxleGJ1ZltsZXhfYnVmZmVyXSk7XG5cbiAgaWYgKHN0YXRlID49IDApIHtcbiAgICAvKiBGaXJzdCBlbnRyeSAqL1xuICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9zdGFydF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICAvKiBSZWVudHJ5IGFmdGVyIHJlZmlsbCAqL1xuICAgIHN0YXRlID0gLXN0YXRlIC0gMTtcbiAgfVxuICBmb3IoOzspIHtcbiAgICAvKiBMb29rdXAgYmFzZSBhZGRyZXNzIG9yIGFjdGlvbiBudW1iZXIgZm9yIGN1cnJlbnQgc3RhdGUgKi9cbiAgICB2YXIgYmFzZSA9IHRibC5sZXhfYmFzZVtzdGF0ZV07XG4gICAgaWYgKGJhc2UgPCAwKSB7XG4gICAgICB2YXIgcGNfb2ZmID0gdGJsLmxleF9iYXNlX2NvZGVbc3RhdGVdO1xuICAgICAgY2FtbF9sZXhfcnVuX3RhZyh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dKTtcbiAgICAgIHJldHVybiAtYmFzZS0xO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgaXQncyBhIGJhY2t0cmFjayBwb2ludCAqL1xuICAgIHZhciBiYWNrdHJrID0gdGJsLmxleF9iYWNrdHJrW3N0YXRlXTtcbiAgICBpZiAoYmFja3RyayA+PSAwKSB7XG4gICAgICB2YXIgcGNfb2ZmID0gdGJsLmxleF9iYWNrdHJrX2NvZGVbc3RhdGVdO1xuICAgICAgY2FtbF9sZXhfcnVuX3RhZyh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dKTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IGJhY2t0cms7XG4gICAgfVxuICAgIC8qIFNlZSBpZiB3ZSBuZWVkIGEgcmVmaWxsICovXG4gICAgaWYgKGxleGJ1ZltsZXhfY3Vycl9wb3NdID49IGxleGJ1ZltsZXhfYnVmZmVyX2xlbl0pe1xuICAgICAgaWYgKGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID09IDApXG4gICAgICAgIHJldHVybiAtc3RhdGUgLSAxO1xuICAgICAgZWxzZVxuICAgICAgICBjID0gMjU2O1xuICAgIH1lbHNle1xuICAgICAgLyogUmVhZCBuZXh0IGlucHV0IGNoYXIgKi9cbiAgICAgIGMgPSBidWZmZXJbbGV4YnVmW2xleF9jdXJyX3Bvc11dO1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gKys7XG4gICAgfVxuICAgIC8qIERldGVybWluZSBuZXh0IHN0YXRlICovXG4gICAgdmFyIHBzdGF0ZSA9IHN0YXRlIDtcbiAgICBpZiAodGJsLmxleF9jaGVja1tiYXNlICsgY10gPT0gc3RhdGUpXG4gICAgICBzdGF0ZSA9IHRibC5sZXhfdHJhbnNbYmFzZSArIGNdO1xuICAgIGVsc2VcbiAgICAgIHN0YXRlID0gdGJsLmxleF9kZWZhdWx0W3N0YXRlXTtcbiAgICAvKiBJZiBubyB0cmFuc2l0aW9uIG9uIHRoaXMgY2hhciwgcmV0dXJuIHRvIGxhc3QgYmFja3RyYWNrIHBvaW50ICovXG4gICAgaWYgKHN0YXRlIDwgMCkge1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gPSBsZXhidWZbbGV4X2xhc3RfcG9zXTtcbiAgICAgIGlmIChsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9PSAtMSlcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcImxleGluZzogZW1wdHkgdG9rZW5cIik7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXTtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIElmIHNvbWUgdHJhbnNpdGlvbiwgZ2V0IGFuZCBwZXJmb3JtIG1lbW9yeSBtb3ZlcyAqL1xuICAgICAgdmFyIGJhc2VfY29kZSA9IHRibC5sZXhfYmFzZV9jb2RlW3BzdGF0ZV0sIHBjX29mZjtcbiAgICAgIGlmICh0YmwubGV4X2NoZWNrX2NvZGVbYmFzZV9jb2RlICsgY10gPT0gcHN0YXRlKVxuICAgICAgICBwY19vZmYgPSB0YmwubGV4X3RyYW5zX2NvZGVbYmFzZV9jb2RlICsgY107XG4gICAgICBlbHNlXG4gICAgICAgIHBjX29mZiA9IHRibC5sZXhfZGVmYXVsdF9jb2RlW3BzdGF0ZV07XG4gICAgICBpZiAocGNfb2ZmID4gMClcbiAgICAgICAgY2FtbF9sZXhfcnVuX21lbVxuICAgICAgKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0sIGxleGJ1ZltsZXhfY3Vycl9wb3NdKTtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09IDI1NikgbGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPSAwO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWQ1X2NoYW5cbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlLCBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX01ENUluaXQsIGNhbWxfTUQ1VXBkYXRlLCBjYW1sX01ENUZpbmFsXG5mdW5jdGlvbiBjYW1sX21kNV9jaGFuKGNoYW5pZCx0b3JlYWQpe1xuICB2YXIgY3R4ID0gY2FtbF9NRDVJbml0KCk7XG4gIHZhciBidWZmZXIgPSBuZXcgVWludDhBcnJheSg0MDk2KTtcbiAgaWYodG9yZWFkIDwgMCl7XG4gICAgd2hpbGUodHJ1ZSl7XG4gICAgICB2YXIgcmVhZCA9IGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLGJ1ZmZlciwwLGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgaWYocmVhZCA9PSAwKSBicmVhaztcbiAgICAgIGNhbWxfTUQ1VXBkYXRlKGN0eCxidWZmZXIuc3ViYXJyYXkoMCwgcmVhZCksIHJlYWQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSh0b3JlYWQgPiAwKSB7XG4gICAgICB2YXIgcmVhZCA9IGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLGJ1ZmZlciwwLCAodG9yZWFkID4gYnVmZmVyLmxlbmd0aCA/IGJ1ZmZlci5sZW5ndGggOiB0b3JlYWQpKTtcbiAgICAgIGlmKHJlYWQgPT0gMCkgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSgpO1xuICAgICAgY2FtbF9NRDVVcGRhdGUoY3R4LGJ1ZmZlci5zdWJhcnJheSgwLCByZWFkKSwgcmVhZCk7XG4gICAgICB0b3JlYWQgLT0gcmVhZFxuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoY2FtbF9NRDVGaW5hbChjdHgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX3N0cmluZywgY2FtbF9tZDVfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWQ1X3N0cmluZyhzLCBvZnMsIGxlbikge1xuICByZXR1cm4gY2FtbF9tZDVfYnl0ZXMoY2FtbF9ieXRlc19vZl9zdHJpbmcocyksb2ZzLGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfTUQ1VHJhbnNmb3JtXG52YXIgY2FtbF9NRDVUcmFuc2Zvcm0gPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBhZGQgKHgsIHkpIHsgcmV0dXJuICh4ICsgeSkgfCAwOyB9XG4gIGZ1bmN0aW9uIHh4KHEsYSxiLHgscyx0KSB7XG4gICAgYSA9IGFkZChhZGQoYSwgcSksIGFkZCh4LCB0KSk7XG4gICAgcmV0dXJuIGFkZCgoYSA8PCBzKSB8IChhID4+PiAoMzIgLSBzKSksIGIpO1xuICB9XG4gIGZ1bmN0aW9uIGZmKGEsYixjLGQseCxzLHQpIHtcbiAgICByZXR1cm4geHgoKGIgJiBjKSB8ICgofmIpICYgZCksIGEsIGIsIHgsIHMsIHQpO1xuICB9XG4gIGZ1bmN0aW9uIGdnKGEsYixjLGQseCxzLHQpIHtcbiAgICByZXR1cm4geHgoKGIgJiBkKSB8IChjICYgKH5kKSksIGEsIGIsIHgsIHMsIHQpO1xuICB9XG4gIGZ1bmN0aW9uIGhoKGEsYixjLGQseCxzLHQpIHsgcmV0dXJuIHh4KGIgXiBjIF4gZCwgYSwgYiwgeCwgcywgdCk7IH1cbiAgZnVuY3Rpb24gaWkoYSxiLGMsZCx4LHMsdCkgeyByZXR1cm4geHgoYyBeIChiIHwgKH5kKSksIGEsIGIsIHgsIHMsIHQpOyB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICh3LCBidWZmZXIpIHtcbiAgICB2YXIgYSA9IHdbMF0sIGIgPSB3WzFdLCBjID0gd1syXSwgZCA9IHdbM107XG5cbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWyAwXSwgNywgMHhENzZBQTQ3OCk7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsgMV0sIDEyLCAweEU4QzdCNzU2KTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWyAyXSwgMTcsIDB4MjQyMDcwREIpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbIDNdLCAyMiwgMHhDMUJEQ0VFRSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlclsgNF0sIDcsIDB4RjU3QzBGQUYpO1xuICAgIGQgPSBmZihkLCBhLCBiLCBjLCBidWZmZXJbIDVdLCAxMiwgMHg0Nzg3QzYyQSk7XG4gICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlclsgNl0sIDE3LCAweEE4MzA0NjEzKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWyA3XSwgMjIsIDB4RkQ0Njk1MDEpO1xuICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbIDhdLCA3LCAweDY5ODA5OEQ4KTtcbiAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyWyA5XSwgMTIsIDB4OEI0NEY3QUYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbMTBdLCAxNywgMHhGRkZGNUJCMSk7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsxMV0sIDIyLCAweDg5NUNEN0JFKTtcbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWzEyXSwgNywgMHg2QjkwMTEyMik7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsxM10sIDEyLCAweEZEOTg3MTkzKTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWzE0XSwgMTcsIDB4QTY3OTQzOEUpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbMTVdLCAyMiwgMHg0OUI0MDgyMSk7XG5cbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWyAxXSwgNSwgMHhGNjFFMjU2Mik7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsgNl0sIDksIDB4QzA0MEIzNDApO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbMTFdLCAxNCwgMHgyNjVFNUE1MSk7XG4gICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlclsgMF0sIDIwLCAweEU5QjZDN0FBKTtcbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWyA1XSwgNSwgMHhENjJGMTA1RCk7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsxMF0sIDksIDB4MDI0NDE0NTMpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbMTVdLCAxNCwgMHhEOEExRTY4MSk7XG4gICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlclsgNF0sIDIwLCAweEU3RDNGQkM4KTtcbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWyA5XSwgNSwgMHgyMUUxQ0RFNik7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsxNF0sIDksIDB4QzMzNzA3RDYpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbIDNdLCAxNCwgMHhGNEQ1MEQ4Nyk7XG4gICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlclsgOF0sIDIwLCAweDQ1NUExNEVEKTtcbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWzEzXSwgNSwgMHhBOUUzRTkwNSk7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsgMl0sIDksIDB4RkNFRkEzRjgpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbIDddLCAxNCwgMHg2NzZGMDJEOSk7XG4gICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlclsxMl0sIDIwLCAweDhEMkE0QzhBKTtcblxuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbIDVdLCA0LCAweEZGRkEzOTQyKTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWyA4XSwgMTEsIDB4ODc3MUY2ODEpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbMTFdLCAxNiwgMHg2RDlENjEyMik7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsxNF0sIDIzLCAweEZERTUzODBDKTtcbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyWyAxXSwgNCwgMHhBNEJFRUE0NCk7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlclsgNF0sIDExLCAweDRCREVDRkE5KTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyWyA3XSwgMTYsIDB4RjZCQjRCNjApO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbMTBdLCAyMywgMHhCRUJGQkM3MCk7XG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsxM10sIDQsIDB4Mjg5QjdFQzYpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbIDBdLCAxMSwgMHhFQUExMjdGQSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsgM10sIDE2LCAweEQ0RUYzMDg1KTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWyA2XSwgMjMsIDB4MDQ4ODFEMDUpO1xuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbIDldLCA0LCAweEQ5RDREMDM5KTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWzEyXSwgMTEsIDB4RTZEQjk5RTUpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbMTVdLCAxNiwgMHgxRkEyN0NGOCk7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsgMl0sIDIzLCAweEM0QUM1NjY1KTtcblxuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbIDBdLCA2LCAweEY0MjkyMjQ0KTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWyA3XSwgMTAsIDB4NDMyQUZGOTcpO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbMTRdLCAxNSwgMHhBQjk0MjNBNyk7XG4gICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlclsgNV0sIDIxLCAweEZDOTNBMDM5KTtcbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWzEyXSwgNiwgMHg2NTVCNTlDMyk7XG4gICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlclsgM10sIDEwLCAweDhGMENDQzkyKTtcbiAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyWzEwXSwgMTUsIDB4RkZFRkY0N0QpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbIDFdLCAyMSwgMHg4NTg0NUREMSk7XG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsgOF0sIDYsIDB4NkZBODdFNEYpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbMTVdLCAxMCwgMHhGRTJDRTZFMCk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsgNl0sIDE1LCAweEEzMDE0MzE0KTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWzEzXSwgMjEsIDB4NEUwODExQTEpO1xuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbIDRdLCA2LCAweEY3NTM3RTgyKTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWzExXSwgMTAsIDB4QkQzQUYyMzUpO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbIDJdLCAxNSwgMHgyQUQ3RDJCQik7XG4gICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlclsgOV0sIDIxLCAweEVCODZEMzkxKTtcblxuICAgIHdbMF0gPSBhZGQoYSwgd1swXSk7XG4gICAgd1sxXSA9IGFkZChiLCB3WzFdKTtcbiAgICB3WzJdID0gYWRkKGMsIHdbMl0pO1xuICAgIHdbM10gPSBhZGQoZCwgd1szXSk7XG4gIH19KSgpXG5cbi8vUHJvdmlkZXM6IGNhbWxfTUQ1SW5pdFxuZnVuY3Rpb24gY2FtbF9NRDVJbml0KCkge1xuICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDY0KTtcbiAgdmFyIGIzMiA9IG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xuICB2YXIgYjggPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICByZXR1cm4ge2xlbjowLFxuICAgICAgICAgIHc6bmV3IFVpbnQzMkFycmF5KFsweDY3NDUyMzAxLCAweEVGQ0RBQjg5LCAweDk4QkFEQ0ZFLCAweDEwMzI1NDc2XSksXG4gICAgICAgICAgYjMyOmIzMixcbiAgICAgICAgICBiODpiOH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9NRDVVcGRhdGVcbi8vUmVxdWlyZXM6IGNhbWxfTUQ1VHJhbnNmb3JtXG5mdW5jdGlvbiBjYW1sX01ENVVwZGF0ZShjdHgsIGlucHV0LCBpbnB1dF9sZW4pe1xuICB2YXIgaW5fYnVmID0gY3R4LmxlbiAmIDB4M2Y7XG4gIHZhciBpbnB1dF9wb3MgPSAwO1xuICBjdHgubGVuICs9IGlucHV0X2xlbjtcbiAgaWYoaW5fYnVmKXtcbiAgICB2YXIgbWlzc2luZyA9IDY0IC0gaW5fYnVmO1xuICAgIGlmKGlucHV0X2xlbiA8IG1pc3NpbmcpIHtcbiAgICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoMCxpbnB1dF9sZW4pLGluX2J1Zik7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheSgwLG1pc3NpbmcpLGluX2J1Zik7XG4gICAgY2FtbF9NRDVUcmFuc2Zvcm0oY3R4LncsIGN0eC5iMzIpO1xuICAgIGlucHV0X2xlbiAtPSBtaXNzaW5nO1xuICAgIGlucHV0X3BvcyArPSBtaXNzaW5nO1xuICB9XG4gIHdoaWxlKGlucHV0X2xlbiA+PSA2NCl7XG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheShpbnB1dF9wb3MsaW5wdXRfcG9zICsgNjQpLCAwKTtcbiAgICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gICAgaW5wdXRfbGVuIC09IDY0O1xuICAgIGlucHV0X3BvcyArPSA2NDtcbiAgfVxuICBpZihpbnB1dF9sZW4pXG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheShpbnB1dF9wb3MsaW5wdXRfcG9zICsgaW5wdXRfbGVuKSwgMCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfTUQ1RmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfTUQ1VHJhbnNmb3JtXG5mdW5jdGlvbiBjYW1sX01ENUZpbmFsKGN0eCl7XG4gIHZhciBpbl9idWYgPSBjdHgubGVuICYgMHgzZjtcbiAgY3R4LmI4W2luX2J1Zl0gPSAweDgwO1xuICBpbl9idWYgKys7XG4gIGlmKGluX2J1ZiA+IDU2KSB7XG4gICAgZm9yKHZhciBqID0gaW5fYnVmOyBqIDwgNjQ7IGorKyl7XG4gICAgICBjdHguYjhbal0gPSAwO1xuICAgIH1cbiAgICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gICAgZm9yKHZhciBqID0gMDsgaiA8IDU2OyBqKyspe1xuICAgICAgY3R4LmI4W2pdID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yKHZhciBqID0gaW5fYnVmOyBqIDwgNTY7IGorKyl7XG4gICAgICBjdHguYjhbal0gPSAwO1xuICAgIH1cbiAgfVxuICBjdHguYjMyWzE0XSA9IGN0eC5sZW4gPDwgMztcbiAgY3R4LmIzMlsxNV0gPSAoY3R4LmxlbiA+PiAyOSkgJiAweDFGRkZGRkZGO1xuICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gIHZhciB0ID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKylcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IDQ7IGorKylcbiAgICAgIHRbaSAqIDQgKyBqXSA9IChjdHgud1tpXSA+PiAoOCAqIGopKSAmIDB4RkY7XG4gIHJldHVybiB0O1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWQ1X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX3N0cmluZ19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9NRDVJbml0LCBjYW1sX01ENVVwZGF0ZSwgY2FtbF9NRDVGaW5hbFxuZnVuY3Rpb24gY2FtbF9tZDVfYnl0ZXMocywgb2ZzLCBsZW4pIHtcbiAgdmFyIGN0eCA9IGNhbWxfTUQ1SW5pdCgpO1xuICB2YXIgYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMocyk7XG4gIGNhbWxfTUQ1VXBkYXRlKGN0eCxhLnN1YmFycmF5KG9mcywgb2ZzICsgbGVuKSwgbGVuKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGNhbWxfTUQ1RmluYWwoY3R4KSk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIElvXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2Zkc1xudmFyIGNhbWxfc3lzX2ZkcyA9IG5ldyBBcnJheSgzKTtcblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2Zkc1xuZnVuY3Rpb24gY2FtbF9zeXNfY2xvc2UoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3N5c19mZHNbZmRdO1xuICBpZihmaWxlKSBmaWxlLmNsb3NlKCk7XG4gIGRlbGV0ZSBjYW1sX3N5c19mZHNbZmRdO1xuICByZXR1cm4gMDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogTWxGYWtlRmRfb3V0XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2Zkc1xuLy9SZXF1aXJlczogY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZVxuZnVuY3Rpb24gY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlLGlkeCkge1xuICBpZihpZHggPT0gdW5kZWZpbmVkKXtcbiAgICBpZHggPSBjYW1sX3N5c19mZHMubGVuZ3RoO1xuICB9XG4gIGNhbWxfc3lzX2Zkc1tpZHhdID0gZmlsZTtcbiAgcmV0dXJuIGlkeCB8IDA7XG59XG5mdW5jdGlvbiBjYW1sX3N5c19vcGVuIChuYW1lLCBmbGFncywgX3Blcm1zKSB7XG4gIHZhciBmID0ge307XG4gIHdoaWxlKGZsYWdzKXtcbiAgICBzd2l0Y2goZmxhZ3NbMV0pe1xuICAgIGNhc2UgMDogZi5yZG9ubHkgPSAxO2JyZWFrO1xuICAgIGNhc2UgMTogZi53cm9ubHkgPSAxO2JyZWFrO1xuICAgIGNhc2UgMjogZi5hcHBlbmQgPSAxO2JyZWFrO1xuICAgIGNhc2UgMzogZi5jcmVhdGUgPSAxO2JyZWFrO1xuICAgIGNhc2UgNDogZi50cnVuY2F0ZSA9IDE7YnJlYWs7XG4gICAgY2FzZSA1OiBmLmV4Y2wgPSAxOyBicmVhaztcbiAgICBjYXNlIDY6IGYuYmluYXJ5ID0gMTticmVhaztcbiAgICBjYXNlIDc6IGYudGV4dCA9IDE7YnJlYWs7XG4gICAgY2FzZSA4OiBmLm5vbmJsb2NrID0gMTticmVhaztcbiAgICB9XG4gICAgZmxhZ3M9ZmxhZ3NbMl07XG4gIH1cbiAgaWYoZi5yZG9ubHkgJiYgZi53cm9ubHkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl9yZG9ubHkgYW5kIE9wZW5fd3Jvbmx5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgaWYoZi50ZXh0ICYmIGYuYmluYXJ5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGNhbWxfanNieXRlc19vZl9zdHJpbmcobmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fdGV4dCBhbmQgT3Blbl9iaW5hcnkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgZmlsZSA9IHJvb3QuZGV2aWNlLm9wZW4ocm9vdC5yZXN0LGYpO1xuICByZXR1cm4gY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCAoZmlsZSwgdW5kZWZpbmVkKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGZpbGUoZmQsIGZsYWdzKSB7XG4gICAgaWYoZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICAgICAgcmV0dXJuIGNhbWxfc3lzX29wZW5fZm9yX25vZGUoZmQsIGZsYWdzKTtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIG5ldyBNbEZha2VGZF9vdXQoZmQsIGZsYWdzKVxuICB9XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoZmlsZSgwLHtyZG9ubHk6MSxhbHRuYW1lOlwiL2Rldi9zdGRpblwiLGlzQ2hhcmFjdGVyRGV2aWNlOnRydWV9KSwgMCk7XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoZmlsZSgxLHtidWZmZXJlZDoyLHdyb25seToxLGlzQ2hhcmFjdGVyRGV2aWNlOnRydWV9KSwgMSk7XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoZmlsZSgyLHtidWZmZXJlZDoyLHdyb25seToxLGlzQ2hhcmFjdGVyRGV2aWNlOnRydWV9KSwgMik7XG59KSgpXG5cblxuLy8gb2NhbWwgQ2hhbm5lbHNcblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX25hbWUoY2hhbmlkLCBuYW1lKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBjaGFuLm5hbWUgPSBuYW1lO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsc1xudmFyIGNhbWxfbWxfY2hhbm5lbHMgPSBuZXcgQXJyYXkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdCAoKSB7XG4gIHZhciBsID0gMDtcbiAgZm9yKHZhciBjID0gMDsgYyA8IGNhbWxfbWxfY2hhbm5lbHMubGVuZ3RoOyBjKyspe1xuICAgIGlmKGNhbWxfbWxfY2hhbm5lbHNbY10gJiYgY2FtbF9tbF9jaGFubmVsc1tjXS5vcGVuZWQgJiYgY2FtbF9tbF9jaGFubmVsc1tjXS5vdXQpXG4gICAgICBsPVswLGNhbWxfbWxfY2hhbm5lbHNbY10uZmQsbF07XG4gIH1cbiAgcmV0dXJuIGw7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX3N5c19mZHNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19vcGVuXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQgKGZkKSB7XG4gIHZhciBmaWxlID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYoZmlsZS5mbGFncy5yZG9ubHkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiZmQgXCIrIGZkICsgXCIgaXMgcmVhZG9ubHlcIik7XG4gIHZhciBidWZmZXJlZCA9IChmaWxlLmZsYWdzLmJ1ZmZlcmVkICE9PSB1bmRlZmluZWQpID8gZmlsZS5mbGFncy5idWZmZXJlZCA6IDE7XG4gIHZhciBjaGFubmVsID0ge1xuICAgIGZpbGU6ZmlsZSxcbiAgICBvZmZzZXQ6ZmlsZS5mbGFncy5hcHBlbmQ/ZmlsZS5sZW5ndGgoKTowLFxuICAgIGZkOmZkLFxuICAgIG9wZW5lZDp0cnVlLFxuICAgIG91dDp0cnVlLFxuICAgIGJ1ZmZlcl9jdXJyOjAsXG4gICAgYnVmZmVyOm5ldyBVaW50OEFycmF5KDY1NTM2KSxcbiAgICBidWZmZXJlZDpidWZmZXJlZFxuICB9O1xuICBjYW1sX21sX2NoYW5uZWxzW2NoYW5uZWwuZmRdPWNoYW5uZWw7XG4gIHJldHVybiBjaGFubmVsLmZkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9zeXNfZmRzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogY2FtbF9zeXNfb3BlblxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW4gKGZkKSAge1xuICB2YXIgZmlsZSA9IGNhbWxfc3lzX2Zkc1tmZF07XG4gIGlmKGZpbGUuZmxhZ3Mud3Jvbmx5KSBjYW1sX3JhaXNlX3N5c19lcnJvcihcImZkIFwiKyBmZCArIFwiIGlzIHdyaXRlb25seVwiKTtcbiAgdmFyIHJlZmlsbCA9IG51bGw7XG4gIHZhciBjaGFubmVsID0ge1xuICAgIGZpbGU6ZmlsZSxcbiAgICBvZmZzZXQ6ZmlsZS5mbGFncy5hcHBlbmQ/ZmlsZS5sZW5ndGgoKTowLFxuICAgIGZkOmZkLFxuICAgIG9wZW5lZDp0cnVlLFxuICAgIG91dDogZmFsc2UsXG4gICAgYnVmZmVyX2N1cnI6MCxcbiAgICBidWZmZXJfbWF4OjAsXG4gICAgYnVmZmVyOm5ldyBVaW50OEFycmF5KDY1NTM2KSxcbiAgICByZWZpbGw6cmVmaWxsXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2hhbm5lbC5mZF09Y2hhbm5lbDtcbiAgcmV0dXJuIGNoYW5uZWwuZmQ7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5fd2l0aF9mbGFnc1xuLy9SZXF1aXJlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5cbi8vVmVyc2lvbjogPj0gNS4xXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbl93aXRoX2ZsYWdzKGZkLCBmbGFncyl7XG4gIHJldHVybiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbihmZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dF93aXRoX2ZsYWdzXG4vL1JlcXVpcmVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcbi8vVmVyc2lvbjogPj0gNS4xXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRfd2l0aF9mbGFncyhmZCwgZmxhZ3Mpe1xuICByZXR1cm4gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0KGZkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jaGFubmVsX2Rlc2NyaXB0b3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbi8vQWxpYXM6IHdpbl9maWxlZGVzY3Jfb2ZfY2hhbm5lbFxuZnVuY3Rpb24gY2FtbF9jaGFubmVsX2Rlc2NyaXB0b3IoY2hhbmlkKXtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHJldHVybiBjaGFuLmZkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9iaW5hcnlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9zZXRfYmluYXJ5X21vZGUoY2hhbmlkLG1vZGUpe1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgY2hhbi5maWxlLmZsYWdzLnRleHQgPSAhbW9kZVxuICBjaGFuLmZpbGUuZmxhZ3MuYmluYXJ5ID0gbW9kZVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pc19iaW5hcnlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfbWxfaXNfYmluYXJ5X21vZGUoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICByZXR1cm4gY2hhbi5maWxlLmZsYWdzLmJpbmFyeVxufVxuXG4vL0lucHV0IGZyb20gaW5fY2hhbm5lbFxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2Nsb3NlX2NoYW5uZWxcbi8vUmVxdWlyZXM6IGNhbWxfbWxfZmx1c2gsIGNhbWxfbWxfY2hhbm5lbHNcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2Nsb3NlXG5mdW5jdGlvbiBjYW1sX21sX2Nsb3NlX2NoYW5uZWwgKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgaWYoY2hhbi5vcGVuZWQpIHtcbiAgICBjaGFuLm9wZW5lZCA9IGZhbHNlO1xuICAgIGNhbWxfc3lzX2Nsb3NlKGNoYW4uZmQpO1xuICAgIGNoYW4uZmQgPSAtMTtcbiAgICBjaGFuLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDApO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfc2l6ZShjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHJldHVybiBjaGFuLmZpbGUubGVuZ3RoKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9zaXplXzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2Zsb2F0LGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9zaXplXzY0KGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQoY2hhbi5maWxlLmxlbmd0aCAoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX291dHB1dChjaGFuaWQsZikge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgY2hhbi5vdXRwdXQgPSAoZnVuY3Rpb24gKHMpIHtmKHMpfSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGwoY2hhbmlkLGYpIHtcbiAgY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdLnJlZmlsbCA9IGY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZmlsbFxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9yZWZpbGwgKGNoYW4pIHtcbiAgaWYoY2hhbi5yZWZpbGwgIT0gbnVsbCl7XG4gICAgdmFyIHN0ciA9IGNoYW4ucmVmaWxsKCk7XG4gICAgdmFyIHN0cl9hID0gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcoc3RyKTtcbiAgICBpZiAoc3RyX2EubGVuZ3RoID09IDApIHtcbiAgICAgIGNoYW4ucmVmaWxsID0gbnVsbFxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmKGNoYW4uYnVmZmVyLmxlbmd0aCA8IGNoYW4uYnVmZmVyX21heCArIHN0cl9hLmxlbmd0aCl7XG4gICAgICAgIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkoY2hhbi5idWZmZXJfbWF4ICsgc3RyX2EubGVuZ3RoKTtcbiAgICAgICAgYi5zZXQoY2hhbi5idWZmZXIpO1xuICAgICAgICBjaGFuLmJ1ZmZlciA9IGI7XG4gICAgICB9XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoc3RyX2EsY2hhbi5idWZmZXJfbWF4KTtcbiAgICAgIGNoYW4ub2Zmc2V0ICs9IHN0cl9hLmxlbmd0aDtcbiAgICAgIGNoYW4uYnVmZmVyX21heCArPSBzdHJfYS5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBucmVhZCA9IGNoYW4uZmlsZS5yZWFkKGNoYW4ub2Zmc2V0LCBjaGFuLmJ1ZmZlciwgY2hhbi5idWZmZXJfbWF4LCBjaGFuLmJ1ZmZlci5sZW5ndGggLSBjaGFuLmJ1ZmZlcl9tYXgpO1xuICAgIGNoYW4ub2Zmc2V0ICs9IG5yZWFkO1xuICAgIGNoYW4uYnVmZmVyX21heCArPSBucmVhZDtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0IChjaGFuaWQsIGIsIGksIGwpIHtcbiAgdmFyIGJhID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhiKTtcbiAgcmV0dXJuIGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLCBiYSwgaSwgbClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9iaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9tbF9pbnB1dF9ibG9ja1xuLy9SZXF1aXJlczogY2FtbF9iYV90b190eXBlZF9hcnJheVxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9iaWdhcnJheSAoY2hhbmlkLCBiLCBpLCBsKSB7XG4gIHZhciBiYSA9IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYik7XG4gIHJldHVybiBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYmEsIGksIGwpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfcmVmaWxsLCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2Jsb2NrIChjaGFuaWQsIGJhLCBpLCBsKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICB2YXIgbiA9IGw7XG4gIHZhciBhdmFpbCA9IGNoYW4uYnVmZmVyX21heCAtIGNoYW4uYnVmZmVyX2N1cnI7XG4gIGlmKGwgPD0gYXZhaWwpIHtcbiAgICBiYS5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VycixjaGFuLmJ1ZmZlcl9jdXJyICsgbCksIGkpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gbDtcbiAgfVxuICBlbHNlIGlmKGF2YWlsID4gMCkge1xuICAgIGJhLnNldChjaGFuLmJ1ZmZlci5zdWJhcnJheShjaGFuLmJ1ZmZlcl9jdXJyLGNoYW4uYnVmZmVyX2N1cnIgKyBhdmFpbCksIGkpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYXZhaWw7XG4gICAgbiA9IGF2YWlsO1xuICB9IGVsc2Uge1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gICAgdmFyIGF2YWlsID0gY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycjtcbiAgICBpZihuID4gYXZhaWwpIG4gPSBhdmFpbDtcbiAgICBiYS5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VycixjaGFuLmJ1ZmZlcl9jdXJyICsgbiksIGkpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gbjtcbiAgfVxuICByZXR1cm4gbiB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUsIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcywgY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfcmVmaWxsLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWUgKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgdmFyIGhlYWRlciA9IG5ldyBVaW50OEFycmF5KGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSk7XG4gIGZ1bmN0aW9uIGJsb2NrKGJ1ZmZlciwgb2Zmc2V0LCBuKSB7XG4gICAgdmFyIHIgPSAwO1xuICAgIHdoaWxlKHIgPCBuKXtcbiAgICAgIGlmKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KXtcbiAgICAgICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgICAgIGNhbWxfcmVmaWxsKGNoYW4pO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KVxuICAgICAgICBicmVhaztcbiAgICAgIGJ1ZmZlcltvZmZzZXQrcl0gPSBjaGFuLmJ1ZmZlcltjaGFuLmJ1ZmZlcl9jdXJyXTtcbiAgICAgIGNoYW4uYnVmZmVyX2N1cnIrKztcbiAgICAgIHIrKztcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cbiAgdmFyIHIgPSBibG9jayhoZWFkZXIsIDAsIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSk7XG4gIGlmKHIgPT0gMClcbiAgICBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIGVsc2UgaWYgKHIgPCBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpXG4gICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiB0cnVuY2F0ZWQgb2JqZWN0XCIpO1xuICB2YXIgbGVuID0gY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSAoY2FtbF9ieXRlc19vZl9hcnJheShoZWFkZXIpLCAwKTtcbiAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbiArIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSk7XG4gIGJ1Zi5zZXQoaGVhZGVyLDApO1xuICB2YXIgciA9IGJsb2NrKGJ1ZiwgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplLCBsZW4pXG4gIGlmKHIgPCBsZW4pXG4gICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiB0cnVuY2F0ZWQgb2JqZWN0IFwiICsgciArIFwiICBcIiArIGxlbik7XG4gIHZhciBvZmZzZXQgPSBbMF07XG4gIHZhciByZXMgPSBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fYnl0ZXMoY2FtbF9ieXRlc19vZl9hcnJheShidWYpLCBvZmZzZXQpO1xuICBjaGFuLm9mZnNldCA9IGNoYW4ub2Zmc2V0ICsgb2Zmc2V0WzBdO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX3RvX291dHNpZGVfaGVhcFxuLy9SZXF1aXJlczogY2FtbF9pbnB1dF92YWx1ZVxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV90b19vdXRzaWRlX2hlYXAoYykge1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZShjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9jaGFyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlLCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX3JlZmlsbFxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9jaGFyIChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIGlmKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KXtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICBjaGFuLmJ1ZmZlcl9tYXggPSAwO1xuICAgIGNhbWxfcmVmaWxsKGNoYW4pO1xuICB9XG4gIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heClcbiAgICBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIHZhciByZXMgPSBjaGFuLmJ1ZmZlcltjaGFuLmJ1ZmZlcl9jdXJyXTtcbiAgY2hhbi5idWZmZXJfY3VycisrO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2ludFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9tbF9pbnB1dF9jaGFyLCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2ludCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICB2YXIgcmVzID0gMDtcbiAgZm9yKHZhciBpID0gMDsgaSA8IDQ7IGkrKyl7XG4gICAgcmVzID0gKHJlcyA8PCA4KSArIGNhbWxfbWxfaW5wdXRfY2hhcihjaGFuaWQpIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zZWVrX2luXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9zZWVrX2luKGNoYW5pZCwgcG9zKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBpZiAoY2hhbi5yZWZpbGwgIT0gbnVsbCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJJbGxlZ2FsIHNlZWtcIik7XG4gIGlmKHBvcyA+PSBjaGFuLm9mZnNldCAtIGNoYW4uYnVmZmVyX21heFxuICAgICAmJiBwb3MgPD0gY2hhbi5vZmZzZXRcbiAgICAgJiYgY2hhbi5maWxlLmZsYWdzLmJpbmFyeSkge1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSBjaGFuLmJ1ZmZlcl9tYXggLSAoY2hhbi5vZmZzZXQgLSBwb3MpO1xuICB9IGVsc2Uge1xuICAgIGNoYW4ub2Zmc2V0ID0gcG9zO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19pblxuLy9SZXF1aXJlczogY2FtbF9zZWVrX2luXG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfaW4oY2hhbmlkLHBvcyl7XG4gIHJldHVybiBjYW1sX3NlZWtfaW4oY2hhbmlkLHBvcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19pbl82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19mbG9hdCwgY2FtbF9zZWVrX2luXG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfaW5fNjQoY2hhbmlkLHBvcyl7XG4gIHZhciBwb3MgPSBjYW1sX2ludDY0X3RvX2Zsb2F0KHBvcyk7XG4gIHJldHVybiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Bvc19pblxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9wb3NfaW4oY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICByZXR1cm4gY2hhbi5vZmZzZXQgLSAoY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycikgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3Bvc19pblxuLy9SZXF1aXJlczogY2FtbF9wb3NfaW5cbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX2luKGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9wb3NfaW4oY2hhbmlkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3NfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsIGNhbWxfcG9zX2luXG5mdW5jdGlvbiBjYW1sX21sX3Bvc19pbl82NChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQoY2FtbF9wb3NfaW4oY2hhbmlkKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX3JlZmlsbFxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmUoY2hhbmlkKXtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHZhciBwID0gY2hhbi5idWZmZXJfY3VycjtcbiAgZG8ge1xuICAgIGlmKHAgPj0gY2hhbi5idWZmZXJfbWF4KSB7XG4gICAgICBpZihjaGFuLmJ1ZmZlcl9jdXJyID4gMCkge1xuICAgICAgICBjaGFuLmJ1ZmZlci5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VyciksMCk7XG4gICAgICAgIHAgLT0gY2hhbi5idWZmZXJfY3VycjtcbiAgICAgICAgY2hhbi5idWZmZXJfbWF4IC09IGNoYW4uYnVmZmVyX2N1cnI7XG4gICAgICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgICAgfVxuICAgICAgaWYoY2hhbi5idWZmZXJfbWF4ID49IGNoYW4uYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gLShjaGFuLmJ1ZmZlcl9tYXgpIHwgMDtcbiAgICAgIH1cbiAgICAgIHZhciBwcmV2X21heCA9IGNoYW4uYnVmZmVyX21heDtcbiAgICAgIGNhbWxfcmVmaWxsIChjaGFuKTtcbiAgICAgIGlmKHByZXZfbWF4ID09IGNoYW4uYnVmZmVyX21heCkge1xuICAgICAgICByZXR1cm4gLShjaGFuLmJ1ZmZlcl9tYXgpIHwgMDtcbiAgICAgIH1cbiAgICB9XG4gIH0gd2hpbGUgKGNoYW4uYnVmZmVyW3ArK10gIT0gMTApO1xuICByZXR1cm4gKHAgLSBjaGFuLmJ1ZmZlcl9jdXJyKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZmx1c2hcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxzXG4vL1JlcXVpcmVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgaWYoISBjaGFuLm9wZW5lZCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJDYW5ub3QgZmx1c2ggYSBjbG9zZWQgY2hhbm5lbFwiKTtcbiAgaWYoIWNoYW4uYnVmZmVyIHx8IGNoYW4uYnVmZmVyX2N1cnIgPT0gMCkgcmV0dXJuIDA7XG4gIGlmKGNoYW4ub3V0cHV0KSB7XG4gICAgY2hhbi5vdXRwdXQoY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGNoYW4uYnVmZmVyLCAwLCBjaGFuLmJ1ZmZlcl9jdXJyKSk7XG4gIH0gZWxzZSB7XG4gICAgY2hhbi5maWxlLndyaXRlKGNoYW4ub2Zmc2V0LCBjaGFuLmJ1ZmZlciwgMCwgY2hhbi5idWZmZXJfY3Vycik7XG4gIH1cbiAgY2hhbi5vZmZzZXQgKz0gY2hhbi5idWZmZXJfY3VycjtcbiAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gIHJldHVybiAwO1xufVxuXG4vL291dHB1dCB0byBvdXRfY2hhbm5lbFxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF90YVxuLy9SZXF1aXJlczogY2FtbF9tbF9mbHVzaCxjYW1sX21sX2J5dGVzX2xlbmd0aFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X3RhKGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbikge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgaWYoISBjaGFuLm9wZW5lZCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJDYW5ub3Qgb3V0cHV0IHRvIGEgY2xvc2VkIGNoYW5uZWxcIik7XG4gIGJ1ZmZlciA9IGJ1ZmZlci5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbik7XG4gIGlmKGNoYW4uYnVmZmVyX2N1cnIgKyBidWZmZXIubGVuZ3RoID4gY2hhbi5idWZmZXIubGVuZ3RoKSB7XG4gICAgdmFyIGIgPSBuZXcgVWludDhBcnJheShjaGFuLmJ1ZmZlcl9jdXJyICsgYnVmZmVyLmxlbmd0aCk7XG4gICAgYi5zZXQoY2hhbi5idWZmZXIpO1xuICAgIGNoYW4uYnVmZmVyID0gYlxuICB9XG4gIHN3aXRjaChjaGFuLmJ1ZmZlcmVkKXtcbiAgY2FzZSAwOiAvLyBVbmJ1ZmZlcmVkXG4gICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlciwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoO1xuICAgIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCk7XG4gICAgYnJlYWtcbiAgY2FzZSAxOiAvLyBCdWZmZXJlZCAodGhlIGRlZmF1bHQpXG4gICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlciwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoO1xuICAgIGlmKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXIubGVuZ3RoKVxuICAgICAgY2FtbF9tbF9mbHVzaCAoY2hhbmlkKTtcbiAgICBicmVhaztcbiAgY2FzZSAyOiAvLyBCdWZmZXJlZCAob25seSBmb3Igc3Rkb3V0IGFuZCBzdGRlcnIpXG4gICAgdmFyIGlkID0gYnVmZmVyLmxhc3RJbmRleE9mKDEwKVxuICAgIGlmKGlkIDwgMCkge1xuICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlciwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICBpZihjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyLmxlbmd0aClcbiAgICAgICAgY2FtbF9tbF9mbHVzaCAoY2hhbmlkKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLnN1YmFycmF5KDAsIGlkICsgMSksIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBpZCArIDE7XG4gICAgICBjYW1sX21sX2ZsdXNoIChjaGFuaWQpO1xuICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlci5zdWJhcnJheShpZCArIDEpLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYnVmZmVyLmxlbmd0aCAtIGlkIC0gMTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX21sX291dHB1dF90YVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKSB7XG4gIHZhciBidWZmZXIgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGJ1ZmZlcik7XG4gIHJldHVybiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2JpZ2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5LCBjYW1sX21sX291dHB1dF90YVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfYmlnYXJyYXkoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKSB7XG4gIHZhciBidWZmZXIgPSBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJ1ZmZlcik7XG4gIHJldHVybiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pO1xufVxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXQoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKXtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X2J5dGVzKGNoYW5pZCxjYW1sX2J5dGVzX29mX3N0cmluZyhidWZmZXIpLG9mZnNldCxsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9jaGFyXG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfY2hhciAoY2hhbmlkLGMpIHtcbiAgdmFyIHMgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLDEpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZywgY2FtbF9tbF9vdXRwdXQsY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZSAoY2hhbmlkLHYsZmxhZ3MpIHtcbiAgdmFyIHMgPSBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcodiwgZmxhZ3MpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSk7XG4gIHJldHVybiAwO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc2Vla19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3Mpe1xuICBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBjaGFuLm9mZnNldCA9IHBvcztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfc2Vla19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19vdXQoY2hhbmlkLHBvcyl7XG4gIHJldHVybiBjYW1sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19vdXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfc2Vla19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19vdXRfNjQoY2hhbmlkLHBvcyl7XG4gIHZhciBwb3MgPSBjYW1sX2ludDY0X3RvX2Zsb2F0KHBvcyk7XG4gIHJldHVybiBjYW1sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wb3Nfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX21sX2ZsdXNoXG5mdW5jdGlvbiBjYW1sX3Bvc19vdXQoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICByZXR1cm4gY2hhbi5vZmZzZXQgKyBjaGFuLmJ1ZmZlcl9jdXJyXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dFxuLy9SZXF1aXJlczogY2FtbF9wb3Nfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX3Bvc19vdXQoY2hhbmlkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3Nfb3V0XzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2Zsb2F0LCBjYW1sX3Bvc19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX291dF82NChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQgKGNhbWxfcG9zX291dChjaGFuaWQpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfaW50XG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X2ludCAoY2hhbmlkLGkpIHtcbiAgdmFyIGFyciA9IFsoaT4+MjQpICYgMHhGRiwoaT4+MTYpICYgMHhGRiwoaT4+OCkgJiAweEZGLGkgJiAweEZGIF07XG4gIHZhciBzID0gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoYXJyKTtcbiAgY2FtbF9tbF9vdXRwdXQoY2hhbmlkLHMsMCw0KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pc19idWZmZXJlZFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9pc19idWZmZXJlZChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXS5idWZmZXJlZCA/IDEgOiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2J1ZmZlcmVkXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX21sX2ZsdXNoXG5mdW5jdGlvbiBjYW1sX21sX3NldF9idWZmZXJlZChjaGFuaWQsdikge1xuICBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF0uYnVmZmVyZWQgPSB2O1xuICBpZighdikgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICByZXR1cm4gMFxufVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBUaGUgcnVuLXRpbWUgbGlicmFyeSBmb3IgbGV4ZXJzIGdlbmVyYXRlZCBieSBjYW1sbGV4ICopXG5cbnR5cGUgcG9zaXRpb24gPSB7XG4gIHBvc19mbmFtZSA6IHN0cmluZztcbiAgcG9zX2xudW0gOiBpbnQ7XG4gIHBvc19ib2wgOiBpbnQ7XG4gIHBvc19jbnVtIDogaW50O1xufVxuXG5sZXQgZHVtbXlfcG9zID0ge1xuICBwb3NfZm5hbWUgPSBcIlwiO1xuICBwb3NfbG51bSA9IDA7XG4gIHBvc19ib2wgPSAwO1xuICBwb3NfY251bSA9IC0xO1xufVxuXG50eXBlIGxleGJ1ZiA9XG4gIHsgcmVmaWxsX2J1ZmYgOiBsZXhidWYgLT4gdW5pdDtcbiAgICBtdXRhYmxlIGxleF9idWZmZXIgOiBieXRlcztcbiAgICBtdXRhYmxlIGxleF9idWZmZXJfbGVuIDogaW50O1xuICAgIG11dGFibGUgbGV4X2Fic19wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfc3RhcnRfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2N1cnJfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2xhc3RfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2xhc3RfYWN0aW9uIDogaW50O1xuICAgIG11dGFibGUgbGV4X2VvZl9yZWFjaGVkIDogYm9vbDtcbiAgICBtdXRhYmxlIGxleF9tZW0gOiBpbnQgYXJyYXk7XG4gICAgbXV0YWJsZSBsZXhfc3RhcnRfcCA6IHBvc2l0aW9uO1xuICAgIG11dGFibGUgbGV4X2N1cnJfcCA6IHBvc2l0aW9uO1xuICB9XG5cbnR5cGUgbGV4X3RhYmxlcyA9XG4gIHsgbGV4X2Jhc2U6IHN0cmluZztcbiAgICBsZXhfYmFja3Ryazogc3RyaW5nO1xuICAgIGxleF9kZWZhdWx0OiBzdHJpbmc7XG4gICAgbGV4X3RyYW5zOiBzdHJpbmc7XG4gICAgbGV4X2NoZWNrOiBzdHJpbmc7XG4gICAgbGV4X2Jhc2VfY29kZSA6IHN0cmluZztcbiAgICBsZXhfYmFja3Rya19jb2RlIDogc3RyaW5nO1xuICAgIGxleF9kZWZhdWx0X2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X3RyYW5zX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2NoZWNrX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2NvZGU6IHN0cmluZzt9XG5cbmV4dGVybmFsIGNfZW5naW5lIDogbGV4X3RhYmxlcyAtPiBpbnQgLT4gbGV4YnVmIC0+IGludCA9IFwiY2FtbF9sZXhfZW5naW5lXCJcbmV4dGVybmFsIGNfbmV3X2VuZ2luZSA6IGxleF90YWJsZXMgLT4gaW50IC0+IGxleGJ1ZiAtPiBpbnRcbiAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9uZXdfbGV4X2VuZ2luZVwiXG5cbmxldCBlbmdpbmUgdGJsIHN0YXRlIGJ1ZiA9XG4gIGxldCByZXN1bHQgPSBjX2VuZ2luZSB0Ymwgc3RhdGUgYnVmIGluXG4gIGlmIHJlc3VsdCA+PSAwICYmIGJ1Zi5sZXhfY3Vycl9wICE9IGR1bW15X3BvcyB0aGVuIGJlZ2luXG4gICAgYnVmLmxleF9zdGFydF9wIDwtIGJ1Zi5sZXhfY3Vycl9wO1xuICAgIGJ1Zi5sZXhfY3Vycl9wIDwtIHtidWYubGV4X2N1cnJfcFxuICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHBvc19jbnVtID0gYnVmLmxleF9hYnNfcG9zICsgYnVmLmxleF9jdXJyX3Bvc307XG4gIGVuZDtcbiAgcmVzdWx0XG5cblxubGV0IG5ld19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiA9XG4gIGxldCByZXN1bHQgPSBjX25ld19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiBpblxuICBpZiByZXN1bHQgPj0gMCAmJiBidWYubGV4X2N1cnJfcCAhPSBkdW1teV9wb3MgdGhlbiBiZWdpblxuICAgIGJ1Zi5sZXhfc3RhcnRfcCA8LSBidWYubGV4X2N1cnJfcDtcbiAgICBidWYubGV4X2N1cnJfcCA8LSB7YnVmLmxleF9jdXJyX3BcbiAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBwb3NfY251bSA9IGJ1Zi5sZXhfYWJzX3BvcyArIGJ1Zi5sZXhfY3Vycl9wb3N9O1xuICBlbmQ7XG4gIHJlc3VsdFxuXG5sZXQgbGV4X3JlZmlsbCByZWFkX2Z1biBhdXhfYnVmZmVyIGxleGJ1ZiA9XG4gIGxldCByZWFkID1cbiAgICByZWFkX2Z1biBhdXhfYnVmZmVyIChCeXRlcy5sZW5ndGggYXV4X2J1ZmZlcikgaW5cbiAgbGV0IG4gPVxuICAgIGlmIHJlYWQgPiAwXG4gICAgdGhlbiByZWFkXG4gICAgZWxzZSAobGV4YnVmLmxleF9lb2ZfcmVhY2hlZCA8LSB0cnVlOyAwKSBpblxuICAoKiBDdXJyZW50IHN0YXRlIG9mIHRoZSBidWZmZXI6XG4gICAgICAgIDwtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLT5cbiAgICAgICAgfCAganVuayB8ICAgICAgdmFsaWQgZGF0YSAgICAgfCAgIGp1bmsgICAgfFxuICAgICAgICBeICAgICAgIF4gICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICBeXG4gICAgICAgIDAgICAgc3RhcnRfcG9zICAgICAgICAgICAgIGJ1ZmZlcl9lbmQgICAgQnl0ZXMubGVuZ3RoIGJ1ZmZlclxuICAqKVxuICBpZiBsZXhidWYubGV4X2J1ZmZlcl9sZW4gKyBuID4gQnl0ZXMubGVuZ3RoIGxleGJ1Zi5sZXhfYnVmZmVyIHRoZW4gYmVnaW5cbiAgICAoKiBUaGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqKVxuICAgIGlmIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zICsgblxuICAgICAgIDw9IEJ5dGVzLmxlbmd0aCBsZXhidWYubGV4X2J1ZmZlclxuICAgIHRoZW4gYmVnaW5cbiAgICAgICgqIEJ1dCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgaWYgd2UgcmVjbGFpbSB0aGUganVuayBhdCB0aGUgYmVnaW5uaW5nXG4gICAgICAgICBvZiB0aGUgYnVmZmVyICopXG4gICAgICBCeXRlcy5ibGl0IGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zXG4gICAgICAgICAgICAgICAgICBsZXhidWYubGV4X2J1ZmZlciAwXG4gICAgICAgICAgICAgICAgICAobGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MpXG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICgqIFdlIG11c3QgZ3JvdyB0aGUgYnVmZmVyLiAgRG91YmxpbmcgaXRzIHNpemUgd2lsbCBwcm92aWRlIGVub3VnaFxuICAgICAgICAgc3BhY2Ugc2luY2UgbiA8PSBTdHJpbmcubGVuZ3RoIGF1eF9idWZmZXIgPD0gU3RyaW5nLmxlbmd0aCBidWZmZXIuXG4gICAgICAgICBXYXRjaCBvdXQgZm9yIHN0cmluZyBsZW5ndGggb3ZlcmZsb3csIHRob3VnaC4gKilcbiAgICAgIGxldCBuZXdsZW4gPVxuICAgICAgICBJbnQubWluICgyICogQnl0ZXMubGVuZ3RoIGxleGJ1Zi5sZXhfYnVmZmVyKSBTeXMubWF4X3N0cmluZ19sZW5ndGggaW5cbiAgICAgIGlmIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zICsgbiA+IG5ld2xlblxuICAgICAgdGhlbiBmYWlsd2l0aCBcIkxleGluZy5sZXhfcmVmaWxsOiBjYW5ub3QgZ3JvdyBidWZmZXJcIjtcbiAgICAgIGxldCBuZXdidWYgPSBCeXRlcy5jcmVhdGUgbmV3bGVuIGluXG4gICAgICAoKiBDb3B5IHRoZSB2YWxpZCBkYXRhIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5ldyBidWZmZXIgKilcbiAgICAgIEJ5dGVzLmJsaXQgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9zdGFydF9wb3NcbiAgICAgICAgICAgICAgICAgIG5ld2J1ZiAwXG4gICAgICAgICAgICAgICAgICAobGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MpO1xuICAgICAgbGV4YnVmLmxleF9idWZmZXIgPC0gbmV3YnVmXG4gICAgZW5kO1xuICAgICgqIFJlYWxsb2NhdGlvbiBvciBub3QsIHdlIGhhdmUgc2hpZnRlZCB0aGUgZGF0YSBsZWZ0IGJ5XG4gICAgICAgc3RhcnRfcG9zIGNoYXJhY3RlcnM7IHVwZGF0ZSB0aGUgcG9zaXRpb25zICopXG4gICAgbGV0IHMgPSBsZXhidWYubGV4X3N0YXJ0X3BvcyBpblxuICAgIGxleGJ1Zi5sZXhfYWJzX3BvcyA8LSBsZXhidWYubGV4X2Fic19wb3MgKyBzO1xuICAgIGxleGJ1Zi5sZXhfY3Vycl9wb3MgPC0gbGV4YnVmLmxleF9jdXJyX3BvcyAtIHM7XG4gICAgbGV4YnVmLmxleF9zdGFydF9wb3MgPC0gMDtcbiAgICBsZXhidWYubGV4X2xhc3RfcG9zIDwtIGxleGJ1Zi5sZXhfbGFzdF9wb3MgLSBzO1xuICAgIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiA8LSBsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBzIDtcbiAgICBsZXQgdCA9IGxleGJ1Zi5sZXhfbWVtIGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCB0LTEgZG9cbiAgICAgIGxldCB2ID0gdC4oaSkgaW5cbiAgICAgIGlmIHYgPj0gMCB0aGVuXG4gICAgICAgIHQuKGkpIDwtIHYtc1xuICAgIGRvbmVcbiAgZW5kO1xuICAoKiBUaGVyZSBpcyBub3cgZW5vdWdoIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqKVxuICBCeXRlcy5ibGl0IGF1eF9idWZmZXIgMCBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X2J1ZmZlcl9sZW4gbjtcbiAgbGV4YnVmLmxleF9idWZmZXJfbGVuIDwtIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiArIG5cblxubGV0IHplcm9fcG9zID0ge1xuICBwb3NfZm5hbWUgPSBcIlwiO1xuICBwb3NfbG51bSA9IDE7XG4gIHBvc19ib2wgPSAwO1xuICBwb3NfY251bSA9IDA7XG59XG5cbmxldCBmcm9tX2Z1bmN0aW9uID8od2l0aF9wb3NpdGlvbnMgPSB0cnVlKSBmID1cbiAgeyByZWZpbGxfYnVmZiA9IGxleF9yZWZpbGwgZiAoQnl0ZXMuY3JlYXRlIDUxMik7XG4gICAgbGV4X2J1ZmZlciA9IEJ5dGVzLmNyZWF0ZSAxMDI0O1xuICAgIGxleF9idWZmZXJfbGVuID0gMDtcbiAgICBsZXhfYWJzX3BvcyA9IDA7XG4gICAgbGV4X3N0YXJ0X3BvcyA9IDA7XG4gICAgbGV4X2N1cnJfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9wb3MgPSAwO1xuICAgIGxleF9sYXN0X2FjdGlvbiA9IDA7XG4gICAgbGV4X21lbSA9IFt8fF07XG4gICAgbGV4X2VvZl9yZWFjaGVkID0gZmFsc2U7XG4gICAgbGV4X3N0YXJ0X3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICAgIGxleF9jdXJyX3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICB9XG5cbmxldCBmcm9tX2NoYW5uZWwgP3dpdGhfcG9zaXRpb25zIGljID1cbiAgZnJvbV9mdW5jdGlvbiA/d2l0aF9wb3NpdGlvbnMgKGZ1biBidWYgbiAtPiBpbnB1dCBpYyBidWYgMCBuKVxuXG5sZXQgZnJvbV9zdHJpbmcgPyh3aXRoX3Bvc2l0aW9ucyA9IHRydWUpIHMgPVxuICB7IHJlZmlsbF9idWZmID0gKGZ1biBsZXhidWYgLT4gbGV4YnVmLmxleF9lb2ZfcmVhY2hlZCA8LSB0cnVlKTtcbiAgICBsZXhfYnVmZmVyID0gQnl0ZXMub2Zfc3RyaW5nIHM7ICgqIGhhdmUgdG8gbWFrZSBhIGNvcHkgZm9yIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdW5zYWZlLXN0cmluZyBtb2RlICopXG4gICAgbGV4X2J1ZmZlcl9sZW4gPSBTdHJpbmcubGVuZ3RoIHM7XG4gICAgbGV4X2Fic19wb3MgPSAwO1xuICAgIGxleF9zdGFydF9wb3MgPSAwO1xuICAgIGxleF9jdXJyX3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9hY3Rpb24gPSAwO1xuICAgIGxleF9tZW0gPSBbfHxdO1xuICAgIGxleF9lb2ZfcmVhY2hlZCA9IHRydWU7XG4gICAgbGV4X3N0YXJ0X3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICAgIGxleF9jdXJyX3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICB9XG5cbmxldCBzZXRfcG9zaXRpb24gbGV4YnVmIHBvc2l0aW9uID1cbiAgbGV4YnVmLmxleF9jdXJyX3AgIDwtIHtwb3NpdGlvbiB3aXRoIHBvc19mbmFtZSA9IGxleGJ1Zi5sZXhfY3Vycl9wLnBvc19mbmFtZX07XG4gIGxleGJ1Zi5sZXhfYWJzX3BvcyA8LSBwb3NpdGlvbi5wb3NfY251bVxuXG5sZXQgc2V0X2ZpbGVuYW1lIGxleGJ1ZiBmbmFtZSA9XG4gIGxleGJ1Zi5sZXhfY3Vycl9wIDwtIHtsZXhidWYubGV4X2N1cnJfcCB3aXRoIHBvc19mbmFtZSA9IGZuYW1lfVxuXG5sZXQgd2l0aF9wb3NpdGlvbnMgbGV4YnVmID0gbGV4YnVmLmxleF9jdXJyX3AgIT0gZHVtbXlfcG9zXG5cbmxldCBsZXhlbWUgbGV4YnVmID1cbiAgbGV0IGxlbiA9IGxleGJ1Zi5sZXhfY3Vycl9wb3MgLSBsZXhidWYubGV4X3N0YXJ0X3BvcyBpblxuICBCeXRlcy5zdWJfc3RyaW5nIGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGxlblxuXG5sZXQgc3ViX2xleGVtZSBsZXhidWYgaTEgaTIgPVxuICBsZXQgbGVuID0gaTItaTEgaW5cbiAgQnl0ZXMuc3ViX3N0cmluZyBsZXhidWYubGV4X2J1ZmZlciBpMSBsZW5cblxubGV0IHN1Yl9sZXhlbWVfb3B0IGxleGJ1ZiBpMSBpMiA9XG4gIGlmIGkxID49IDAgdGhlbiBiZWdpblxuICAgIGxldCBsZW4gPSBpMi1pMSBpblxuICAgIFNvbWUgKEJ5dGVzLnN1Yl9zdHJpbmcgbGV4YnVmLmxleF9idWZmZXIgaTEgbGVuKVxuICBlbmQgZWxzZSBiZWdpblxuICAgIE5vbmVcbiAgZW5kXG5cbmxldCBzdWJfbGV4ZW1lX2NoYXIgbGV4YnVmIGkgPSBCeXRlcy5nZXQgbGV4YnVmLmxleF9idWZmZXIgaVxuXG5sZXQgc3ViX2xleGVtZV9jaGFyX29wdCBsZXhidWYgaSA9XG4gIGlmIGkgPj0gMCB0aGVuXG4gICAgU29tZSAoQnl0ZXMuZ2V0IGxleGJ1Zi5sZXhfYnVmZmVyIGkpXG4gIGVsc2VcbiAgICBOb25lXG5cblxubGV0IGxleGVtZV9jaGFyIGxleGJ1ZiBpID1cbiAgQnl0ZXMuZ2V0IGxleGJ1Zi5sZXhfYnVmZmVyIChsZXhidWYubGV4X3N0YXJ0X3BvcyArIGkpXG5cbmxldCBsZXhlbWVfc3RhcnQgbGV4YnVmID0gbGV4YnVmLmxleF9zdGFydF9wLnBvc19jbnVtXG5sZXQgbGV4ZW1lX2VuZCBsZXhidWYgPSBsZXhidWYubGV4X2N1cnJfcC5wb3NfY251bVxuXG5sZXQgbGV4ZW1lX3N0YXJ0X3AgbGV4YnVmID0gbGV4YnVmLmxleF9zdGFydF9wXG5sZXQgbGV4ZW1lX2VuZF9wIGxleGJ1ZiA9IGxleGJ1Zi5sZXhfY3Vycl9wXG5cbmxldCBuZXdfbGluZSBsZXhidWYgPVxuICBsZXQgbGNwID0gbGV4YnVmLmxleF9jdXJyX3AgaW5cbiAgaWYgbGNwICE9IGR1bW15X3BvcyB0aGVuXG4gICAgbGV4YnVmLmxleF9jdXJyX3AgPC1cbiAgICAgIHsgbGNwIHdpdGhcbiAgICAgICAgcG9zX2xudW0gPSBsY3AucG9zX2xudW0gKyAxO1xuICAgICAgICBwb3NfYm9sID0gbGNwLnBvc19jbnVtO1xuICAgICAgfVxuXG5cblxuKCogRGlzY2FyZCBkYXRhIGxlZnQgaW4gbGV4ZXIgYnVmZmVyLiAqKVxuXG5sZXQgZmx1c2hfaW5wdXQgbGIgPVxuICBsYi5sZXhfY3Vycl9wb3MgPC0gMDtcbiAgbGIubGV4X2Fic19wb3MgPC0gMDtcbiAgbGV0IGxjcCA9IGxiLmxleF9jdXJyX3AgaW5cbiAgaWYgbGNwICE9IGR1bW15X3BvcyB0aGVuXG4gICAgbGIubGV4X2N1cnJfcCA8LSB7emVyb19wb3Mgd2l0aCBwb3NfZm5hbWUgPSBsY3AucG9zX2ZuYW1lfTtcbiAgbGIubGV4X2J1ZmZlcl9sZW4gPC0gMDtcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBQcmludGZcblxudHlwZSB0ID0gZXhuID0gLi5cblxubGV0IHByaW50ZXJzID0gQXRvbWljLm1ha2UgW11cblxubGV0IGxvY2ZtdCA9IGZvcm1hdF9vZl9zdHJpbmcgXCJGaWxlIFxcXCIlc1xcXCIsIGxpbmUgJWQsIGNoYXJhY3RlcnMgJWQtJWQ6ICVzXCJcblxubGV0IGZpZWxkIHggaSA9XG4gIGxldCBmID0gT2JqLmZpZWxkIHggaSBpblxuICBpZiBub3QgKE9iai5pc19ibG9jayBmKSB0aGVuXG4gICAgc3ByaW50ZiBcIiVkXCIgKE9iai5tYWdpYyBmIDogaW50KSAgICAgICAgICAgKCogY2FuIGFsc28gYmUgYSBjaGFyICopXG4gIGVsc2UgaWYgT2JqLnRhZyBmID0gT2JqLnN0cmluZ190YWcgdGhlblxuICAgIHNwcmludGYgXCIlU1wiIChPYmoubWFnaWMgZiA6IHN0cmluZylcbiAgZWxzZSBpZiBPYmoudGFnIGYgPSBPYmouZG91YmxlX3RhZyB0aGVuXG4gICAgc3RyaW5nX29mX2Zsb2F0IChPYmoubWFnaWMgZiA6IGZsb2F0KVxuICBlbHNlXG4gICAgXCJfXCJcblxubGV0IHJlYyBvdGhlcl9maWVsZHMgeCBpID1cbiAgaWYgaSA+PSBPYmouc2l6ZSB4IHRoZW4gXCJcIlxuICBlbHNlIHNwcmludGYgXCIsICVzJXNcIiAoZmllbGQgeCBpKSAob3RoZXJfZmllbGRzIHggKGkrMSkpXG5cbmxldCBmaWVsZHMgeCA9XG4gIG1hdGNoIE9iai5zaXplIHggd2l0aFxuICB8IDAgLT4gXCJcIlxuICB8IDEgLT4gXCJcIlxuICB8IDIgLT4gc3ByaW50ZiBcIiglcylcIiAoZmllbGQgeCAxKVxuICB8IF8gLT4gc3ByaW50ZiBcIiglcyVzKVwiIChmaWVsZCB4IDEpIChvdGhlcl9maWVsZHMgeCAyKVxuXG5sZXQgdXNlX3ByaW50ZXJzIHggPVxuICBsZXQgcmVjIGNvbnYgPSBmdW5jdGlvblxuICAgIHwgaGQgOjogdGwgLT5cbiAgICAgICAgKG1hdGNoIGhkIHggd2l0aFxuICAgICAgICAgfCBOb25lIHwgZXhjZXB0aW9uIF8gLT4gY29udiB0bFxuICAgICAgICAgfCBTb21lIHMgLT4gU29tZSBzKVxuICAgIHwgW10gLT4gTm9uZSBpblxuICBjb252IChBdG9taWMuZ2V0IHByaW50ZXJzKVxuXG5sZXQgdG9fc3RyaW5nX2RlZmF1bHQgPSBmdW5jdGlvblxuICB8IE91dF9vZl9tZW1vcnkgLT4gXCJPdXQgb2YgbWVtb3J5XCJcbiAgfCBTdGFja19vdmVyZmxvdyAtPiBcIlN0YWNrIG92ZXJmbG93XCJcbiAgfCBNYXRjaF9mYWlsdXJlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis1KSBcIlBhdHRlcm4gbWF0Y2hpbmcgZmFpbGVkXCJcbiAgfCBBc3NlcnRfZmFpbHVyZShmaWxlLCBsaW5lLCBjaGFyKSAtPlxuICAgICAgc3ByaW50ZiBsb2NmbXQgZmlsZSBsaW5lIGNoYXIgKGNoYXIrNikgXCJBc3NlcnRpb24gZmFpbGVkXCJcbiAgfCBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZShmaWxlLCBsaW5lLCBjaGFyKSAtPlxuICAgICAgc3ByaW50ZiBsb2NmbXQgZmlsZSBsaW5lIGNoYXIgKGNoYXIrNikgXCJVbmRlZmluZWQgcmVjdXJzaXZlIG1vZHVsZVwiXG4gIHwgeCAtPlxuICAgICAgbGV0IHggPSBPYmoucmVwciB4IGluXG4gICAgICBpZiBPYmoudGFnIHggPD4gMCB0aGVuXG4gICAgICAgIChPYmoubWFnaWMgKE9iai5maWVsZCB4IDApIDogc3RyaW5nKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgY29uc3RydWN0b3IgPVxuICAgICAgICAgIChPYmoubWFnaWMgKE9iai5maWVsZCAoT2JqLmZpZWxkIHggMCkgMCkgOiBzdHJpbmcpIGluXG4gICAgICAgIGNvbnN0cnVjdG9yIF4gKGZpZWxkcyB4KVxuXG5sZXQgdG9fc3RyaW5nIGUgPVxuICBtYXRjaCB1c2VfcHJpbnRlcnMgZSB3aXRoXG4gIHwgU29tZSBzIC0+IHNcbiAgfCBOb25lIC0+IHRvX3N0cmluZ19kZWZhdWx0IGVcblxubGV0IHByaW50IGZjdCBhcmcgPVxuICB0cnlcbiAgICBmY3QgYXJnXG4gIHdpdGggeCAtPlxuICAgIGVwcmludGYgXCJVbmNhdWdodCBleGNlcHRpb246ICVzXFxuXCIgKHRvX3N0cmluZyB4KTtcbiAgICBmbHVzaCBzdGRlcnI7XG4gICAgcmFpc2UgeFxuXG5sZXQgY2F0Y2ggZmN0IGFyZyA9XG4gIHRyeVxuICAgIGZjdCBhcmdcbiAgd2l0aCB4IC0+XG4gICAgZmx1c2ggc3Rkb3V0O1xuICAgIGVwcmludGYgXCJVbmNhdWdodCBleGNlcHRpb246ICVzXFxuXCIgKHRvX3N0cmluZyB4KTtcbiAgICBleGl0IDJcblxudHlwZSByYXdfYmFja3RyYWNlX3Nsb3RcbnR5cGUgcmF3X2JhY2t0cmFjZV9lbnRyeSA9IHByaXZhdGUgaW50XG50eXBlIHJhd19iYWNrdHJhY2UgPSByYXdfYmFja3RyYWNlX2VudHJ5IGFycmF5XG5cbmxldCByYXdfYmFja3RyYWNlX2VudHJpZXMgYnQgPSBidFxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZTpcbiAgdW5pdCAtPiByYXdfYmFja3RyYWNlID0gXCJjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZVwiXG5cbmV4dGVybmFsIHJhaXNlX3dpdGhfYmFja3RyYWNlOiBleG4gLT4gcmF3X2JhY2t0cmFjZSAtPiAnYVxuICA9IFwiJXJhaXNlX3dpdGhfYmFja3RyYWNlXCJcblxudHlwZSBiYWNrdHJhY2Vfc2xvdCA9XG4gIHwgS25vd25fbG9jYXRpb24gb2Yge1xuICAgICAgaXNfcmFpc2UgICAgOiBib29sO1xuICAgICAgZmlsZW5hbWUgICAgOiBzdHJpbmc7XG4gICAgICBsaW5lX251bWJlciA6IGludDtcbiAgICAgIHN0YXJ0X2NoYXIgIDogaW50O1xuICAgICAgZW5kX2NoYXIgICAgOiBpbnQ7XG4gICAgICBpc19pbmxpbmUgICA6IGJvb2w7XG4gICAgICBkZWZuYW1lICAgICA6IHN0cmluZztcbiAgICB9XG4gIHwgVW5rbm93bl9sb2NhdGlvbiBvZiB7XG4gICAgICBpc19yYWlzZSA6IGJvb2xcbiAgICB9XG5cbigqIHRvIGF2b2lkIHdhcm5pbmcgKilcbmxldCBfID0gW0tub3duX2xvY2F0aW9uIHsgaXNfcmFpc2UgPSBmYWxzZTsgZmlsZW5hbWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX251bWJlciA9IDA7IHN0YXJ0X2NoYXIgPSAwOyBlbmRfY2hhciA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2lubGluZSA9IGZhbHNlOyBkZWZuYW1lID0gXCJcIiB9O1xuICAgICAgICAgVW5rbm93bl9sb2NhdGlvbiB7IGlzX3JhaXNlID0gZmFsc2UgfV1cblxuZXh0ZXJuYWwgY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3Q6XG4gIHJhd19iYWNrdHJhY2Vfc2xvdCAtPiBiYWNrdHJhY2Vfc2xvdCA9IFwiY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdFwiXG5cbmV4dGVybmFsIGNvbnZlcnRfcmF3X2JhY2t0cmFjZTpcbiAgcmF3X2JhY2t0cmFjZSAtPiBiYWNrdHJhY2Vfc2xvdCBhcnJheSA9IFwiY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2VcIlxuXG5sZXQgY29udmVydF9yYXdfYmFja3RyYWNlIGJ0ID1cbiAgdHJ5IFNvbWUgKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSBidClcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5sZXQgZm9ybWF0X2JhY2t0cmFjZV9zbG90IHBvcyBzbG90ID1cbiAgbGV0IGluZm8gaXNfcmFpc2UgPVxuICAgIGlmIGlzX3JhaXNlIHRoZW5cbiAgICAgIGlmIHBvcyA9IDAgdGhlbiBcIlJhaXNlZCBhdFwiIGVsc2UgXCJSZS1yYWlzZWQgYXRcIlxuICAgIGVsc2VcbiAgICAgIGlmIHBvcyA9IDAgdGhlbiBcIlJhaXNlZCBieSBwcmltaXRpdmUgb3BlcmF0aW9uIGF0XCIgZWxzZSBcIkNhbGxlZCBmcm9tXCJcbiAgaW5cbiAgbWF0Y2ggc2xvdCB3aXRoXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBsIC0+XG4gICAgICBpZiBsLmlzX3JhaXNlIHRoZW5cbiAgICAgICAgKCogY29tcGlsZXItaW5zZXJ0ZWQgcmUtcmFpc2UsIHNraXBwZWQgKikgTm9uZVxuICAgICAgZWxzZVxuICAgICAgICBTb21lIChzcHJpbnRmIFwiJXMgdW5rbm93biBsb2NhdGlvblwiIChpbmZvIGZhbHNlKSlcbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+XG4gICAgICBTb21lIChzcHJpbnRmIFwiJXMgJXMgaW4gZmlsZSBcXFwiJXNcXFwiJXMsIGxpbmUgJWQsIGNoYXJhY3RlcnMgJWQtJWRcIlxuICAgICAgICAgICAgICAoaW5mbyBsLmlzX3JhaXNlKSBsLmRlZm5hbWUgbC5maWxlbmFtZVxuICAgICAgICAgICAgICAoaWYgbC5pc19pbmxpbmUgdGhlbiBcIiAoaW5saW5lZClcIiBlbHNlIFwiXCIpXG4gICAgICAgICAgICAgIGwubGluZV9udW1iZXIgbC5zdGFydF9jaGFyIGwuZW5kX2NoYXIpXG5cbmxldCBwcmludF9leGNlcHRpb25fYmFja3RyYWNlIG91dGNoYW4gYmFja3RyYWNlID1cbiAgbWF0Y2ggYmFja3RyYWNlIHdpdGhcbiAgfCBOb25lIC0+XG4gICAgICBmcHJpbnRmIG91dGNoYW5cbiAgICAgICAgXCIoUHJvZ3JhbSBub3QgbGlua2VkIHdpdGggLWcsIGNhbm5vdCBwcmludCBzdGFjayBiYWNrdHJhY2UpXFxuXCJcbiAgfCBTb21lIGEgLT5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICAgICAgbWF0Y2ggZm9ybWF0X2JhY2t0cmFjZV9zbG90IGkgYS4oaSkgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSBzdHIgLT4gZnByaW50ZiBvdXRjaGFuIFwiJXNcXG5cIiBzdHJcbiAgICAgIGRvbmVcblxubGV0IHByaW50X3Jhd19iYWNrdHJhY2Ugb3V0Y2hhbiByYXdfYmFja3RyYWNlID1cbiAgcHJpbnRfZXhjZXB0aW9uX2JhY2t0cmFjZSBvdXRjaGFuIChjb252ZXJ0X3Jhd19iYWNrdHJhY2UgcmF3X2JhY2t0cmFjZSlcblxuKCogY29uZnVzaW5nbHkgbmFtZWQ6IHByaW50cyB0aGUgZ2xvYmFsIGN1cnJlbnQgYmFja3RyYWNlICopXG5sZXQgcHJpbnRfYmFja3RyYWNlIG91dGNoYW4gPVxuICBwcmludF9yYXdfYmFja3RyYWNlIG91dGNoYW4gKGdldF9yYXdfYmFja3RyYWNlICgpKVxuXG5sZXQgYmFja3RyYWNlX3RvX3N0cmluZyBiYWNrdHJhY2UgPVxuICBtYXRjaCBiYWNrdHJhY2Ugd2l0aFxuICB8IE5vbmUgLT5cbiAgICAgXCIoUHJvZ3JhbSBub3QgbGlua2VkIHdpdGggLWcsIGNhbm5vdCBwcmludCBzdGFjayBiYWNrdHJhY2UpXFxuXCJcbiAgfCBTb21lIGEgLT5cbiAgICAgIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAxMDI0IGluXG4gICAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgICAgIG1hdGNoIGZvcm1hdF9iYWNrdHJhY2Vfc2xvdCBpIGEuKGkpIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICB8IFNvbWUgc3RyIC0+IGJwcmludGYgYiBcIiVzXFxuXCIgc3RyXG4gICAgICBkb25lO1xuICAgICAgQnVmZmVyLmNvbnRlbnRzIGJcblxubGV0IHJhd19iYWNrdHJhY2VfdG9fc3RyaW5nIHJhd19iYWNrdHJhY2UgPVxuICBiYWNrdHJhY2VfdG9fc3RyaW5nIChjb252ZXJ0X3Jhd19iYWNrdHJhY2UgcmF3X2JhY2t0cmFjZSlcblxubGV0IGJhY2t0cmFjZV9zbG90X2lzX3JhaXNlID0gZnVuY3Rpb25cbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+IGwuaXNfcmFpc2VcbiAgfCBVbmtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19yYWlzZVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfaXNfaW5saW5lID0gZnVuY3Rpb25cbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+IGwuaXNfaW5saW5lXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBfIC0+IGZhbHNlXG5cbnR5cGUgbG9jYXRpb24gPSB7XG4gIGZpbGVuYW1lIDogc3RyaW5nO1xuICBsaW5lX251bWJlciA6IGludDtcbiAgc3RhcnRfY2hhciA6IGludDtcbiAgZW5kX2NoYXIgOiBpbnQ7XG59XG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9sb2NhdGlvbiA9IGZ1bmN0aW9uXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBfIC0+IE5vbmVcbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+XG4gICAgU29tZSB7XG4gICAgICBmaWxlbmFtZSAgICA9IGwuZmlsZW5hbWU7XG4gICAgICBsaW5lX251bWJlciA9IGwubGluZV9udW1iZXI7XG4gICAgICBzdGFydF9jaGFyICA9IGwuc3RhcnRfY2hhcjtcbiAgICAgIGVuZF9jaGFyICAgID0gbC5lbmRfY2hhcjtcbiAgICB9XG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9kZWZuYW1lID0gZnVuY3Rpb25cbiAgfCBVbmtub3duX2xvY2F0aW9uIF9cbiAgfCBLbm93bl9sb2NhdGlvbiB7IGRlZm5hbWUgPSBcIlwiIH0gLT4gTm9uZVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gU29tZSBsLmRlZm5hbWVcblxubGV0IGJhY2t0cmFjZV9zbG90cyByYXdfYmFja3RyYWNlID1cbiAgKCogVGhlIGRvY3VtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBndWFyYW50ZWVzIHRoYXQgU29tZSBpc1xuICAgICByZXR1cm5lZCBvbmx5IGlmIGEgcGFydCBvZiB0aGUgdHJhY2UgaXMgdXNhYmxlLiBUaGlzIGdpdmVzIHVzXG4gICAgIGEgYml0IG1vcmUgd29yayB0aGFuIGp1c3QgY29udmVydF9yYXdfYmFja3RyYWNlLCBidXQgaXQgbWFrZXMgdGhlXG4gICAgIEFQSSBtb3JlIHVzZXItZnJpZW5kbHkgLS0gb3RoZXJ3aXNlIG1vc3QgdXNlcnMgd291bGQgaGF2ZSB0b1xuICAgICByZWltcGxlbWVudCB0aGUgXCJQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgc29ycnlcIiBsb2dpY1xuICAgICB0aGVtc2VsdmVzLiAqKVxuICBtYXRjaCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UgcmF3X2JhY2t0cmFjZSB3aXRoXG4gICAgfCBOb25lIC0+IE5vbmVcbiAgICB8IFNvbWUgYmFja3RyYWNlIC0+XG4gICAgICBsZXQgdXNhYmxlX3Nsb3QgPSBmdW5jdGlvblxuICAgICAgICB8IFVua25vd25fbG9jYXRpb24gXyAtPiBmYWxzZVxuICAgICAgICB8IEtub3duX2xvY2F0aW9uIF8gLT4gdHJ1ZSBpblxuICAgICAgbGV0IHJlYyBleGlzdHNfdXNhYmxlID0gZnVuY3Rpb25cbiAgICAgICAgfCAoLTEpIC0+IGZhbHNlXG4gICAgICAgIHwgaSAtPiB1c2FibGVfc2xvdCBiYWNrdHJhY2UuKGkpIHx8IGV4aXN0c191c2FibGUgKGkgLSAxKSBpblxuICAgICAgaWYgZXhpc3RzX3VzYWJsZSAoQXJyYXkubGVuZ3RoIGJhY2t0cmFjZSAtIDEpXG4gICAgICB0aGVuIFNvbWUgYmFja3RyYWNlXG4gICAgICBlbHNlIE5vbmVcblxubGV0IGJhY2t0cmFjZV9zbG90c19vZl9yYXdfZW50cnkgZW50cnkgPVxuICBiYWNrdHJhY2Vfc2xvdHMgW3wgZW50cnkgfF1cblxubW9kdWxlIFNsb3QgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gYmFja3RyYWNlX3Nsb3RcbiAgbGV0IGZvcm1hdCA9IGZvcm1hdF9iYWNrdHJhY2Vfc2xvdFxuICBsZXQgaXNfcmFpc2UgPSBiYWNrdHJhY2Vfc2xvdF9pc19yYWlzZVxuICBsZXQgaXNfaW5saW5lID0gYmFja3RyYWNlX3Nsb3RfaXNfaW5saW5lXG4gIGxldCBsb2NhdGlvbiA9IGJhY2t0cmFjZV9zbG90X2xvY2F0aW9uXG4gIGxldCBuYW1lID0gYmFja3RyYWNlX3Nsb3RfZGVmbmFtZVxuZW5kXG5cbmxldCByYXdfYmFja3RyYWNlX2xlbmd0aCBidCA9IEFycmF5Lmxlbmd0aCBidFxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZV9zbG90IDpcbiAgcmF3X2JhY2t0cmFjZSAtPiBpbnQgLT4gcmF3X2JhY2t0cmFjZV9zbG90ID0gXCJjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdFwiXG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlX25leHRfc2xvdCA6XG4gIHJhd19iYWNrdHJhY2Vfc2xvdCAtPiByYXdfYmFja3RyYWNlX3Nsb3Qgb3B0aW9uXG4gID0gXCJjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90XCJcblxuKCogY29uZnVzaW5nbHkgbmFtZWQ6XG4gICByZXR1cm5zIHRoZSAqc3RyaW5nKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnbG9iYWwgY3VycmVudCBiYWNrdHJhY2UgKilcbmxldCBnZXRfYmFja3RyYWNlICgpID0gcmF3X2JhY2t0cmFjZV90b19zdHJpbmcgKGdldF9yYXdfYmFja3RyYWNlICgpKVxuXG5leHRlcm5hbCByZWNvcmRfYmFja3RyYWNlOiBib29sIC0+IHVuaXQgPSBcImNhbWxfcmVjb3JkX2JhY2t0cmFjZVwiXG5leHRlcm5hbCBiYWNrdHJhY2Vfc3RhdHVzOiB1bml0IC0+IGJvb2wgPSBcImNhbWxfYmFja3RyYWNlX3N0YXR1c1wiXG5cbmxldCByZWMgcmVnaXN0ZXJfcHJpbnRlciBmbiA9XG4gIGxldCBvbGRfcHJpbnRlcnMgPSBBdG9taWMuZ2V0IHByaW50ZXJzIGluXG4gIGxldCBuZXdfcHJpbnRlcnMgPSBmbiA6OiBvbGRfcHJpbnRlcnMgaW5cbiAgbGV0IHN1Y2Nlc3MgPSBBdG9taWMuY29tcGFyZV9hbmRfc2V0IHByaW50ZXJzIG9sZF9wcmludGVycyBuZXdfcHJpbnRlcnMgaW5cbiAgaWYgbm90IHN1Y2Nlc3MgdGhlbiByZWdpc3Rlcl9wcmludGVyIGZuXG5cbmV4dGVybmFsIGdldF9jYWxsc3RhY2s6IGludCAtPiByYXdfYmFja3RyYWNlID0gXCJjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFja1wiXG5cbmxldCBleG5fc2xvdCB4ID1cbiAgbGV0IHggPSBPYmoucmVwciB4IGluXG4gIGlmIE9iai50YWcgeCA9IDAgdGhlbiBPYmouZmllbGQgeCAwIGVsc2UgeFxuXG5sZXQgZXhuX3Nsb3RfaWQgeCA9XG4gIGxldCBzbG90ID0gZXhuX3Nsb3QgeCBpblxuICAoT2JqLm9iaiAoT2JqLmZpZWxkIHNsb3QgMSkgOiBpbnQpXG5cbmxldCBleG5fc2xvdF9uYW1lIHggPVxuICBsZXQgc2xvdCA9IGV4bl9zbG90IHggaW5cbiAgKE9iai5vYmogKE9iai5maWVsZCBzbG90IDApIDogc3RyaW5nKVxuXG5leHRlcm5hbCBnZXRfZGVidWdfaW5mb19zdGF0dXMgOiB1bml0IC0+IGludCA9IFwiY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1c1wiXG5cbigqIERlc2NyaXB0aW9ucyBmb3IgZXJyb3JzIGluIHN0YXJ0dXAuaC4gU2VlIGFsc28gYmFja3RyYWNlLmMgKilcbmxldCBlcnJvcnMgPSBbfCBcIlwiO1xuICAoKiBGSUxFX05PVF9GT1VORCAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgbm90IGZvdW5kKVwiO1xuICAoKiBCQURfQllURUNPREUgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGFwcGVhcnMgdG8gYmUgY29ycnVwdClcIjtcbiAgKCogV1JPTkdfTUFHSUMgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGhhcyB3cm9uZyBtYWdpYyBudW1iZXIpXCI7XG4gICgqIE5PX0ZEUyAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgY2Fubm90IGJlIG9wZW5lZDtcXG4gXFxcbiAgICAgIC0tIHRvbyBtYW55IG9wZW4gZmlsZXMuIFRyeSBydW5uaW5nIHdpdGggT0NBTUxSVU5QQVJBTT1iPTIpXCJcbnxdXG5cbmxldCBkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGV4biByYXdfYmFja3RyYWNlID1cbiAgZXByaW50ZiBcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gJXNcXG5cIiAodG9fc3RyaW5nIGV4bik7XG4gIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2U7XG4gIGxldCBzdGF0dXMgPSBnZXRfZGVidWdfaW5mb19zdGF0dXMgKCkgaW5cbiAgaWYgc3RhdHVzIDwgMCB0aGVuXG4gICAgcHJlcnJfZW5kbGluZSBlcnJvcnMuKGFicyBzdGF0dXMpO1xuICBmbHVzaCBzdGRlcnJcblxubGV0IHVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyID0gcmVmIGRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXJcblxubGV0IHNldF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBmbiA9IHVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIDo9IGZuXG5cbmxldCBlbXB0eV9iYWNrdHJhY2UgOiByYXdfYmFja3RyYWNlID0gW3wgfF1cblxubGV0IHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKSA9XG4gIHRyeVxuICAgIGdldF9yYXdfYmFja3RyYWNlICgpXG4gIHdpdGggXyAoKiBPdXRfb2ZfbWVtb3J5PyAqKSAtPlxuICAgIGVtcHR5X2JhY2t0cmFjZVxuXG5sZXQgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbicgZXhuIGRlYnVnZ2VyX2luX3VzZSA9XG4gIHRyeVxuICAgICgqIEdldCB0aGUgYmFja3RyYWNlIG5vdywgaW4gY2FzZSBvbmUgb2YgdGhlIFthdF9leGl0XSBmdW5jdGlvblxuICAgICAgIGRlc3Ryb3lzIGl0LiAqKVxuICAgIGxldCByYXdfYmFja3RyYWNlID1cbiAgICAgIGlmIGRlYnVnZ2VyX2luX3VzZSAoKiBTYW1lIHRlc3QgYXMgaW4gW3J1bnRpbWUvcHJpbnRleGMuY10gKikgdGhlblxuICAgICAgICBlbXB0eV9iYWNrdHJhY2VcbiAgICAgIGVsc2VcbiAgICAgICAgdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpXG4gICAgaW5cbiAgICAodHJ5IFN0ZGxpYi5kb19hdF9leGl0ICgpIHdpdGggXyAtPiAoKSk7XG4gICAgdHJ5XG4gICAgICAhdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZXhuIHJhd19iYWNrdHJhY2VcbiAgICB3aXRoIGV4bicgLT5cbiAgICAgIGxldCByYXdfYmFja3RyYWNlJyA9IHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgZXByaW50ZiBcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gJXNcXG5cIiAodG9fc3RyaW5nIGV4bik7XG4gICAgICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlO1xuICAgICAgZXByaW50ZiBcIkZhdGFsIGVycm9yIGluIHVuY2F1Z2h0IGV4Y2VwdGlvbiBoYW5kbGVyOiBleGNlcHRpb24gJXNcXG5cIlxuICAgICAgICAodG9fc3RyaW5nIGV4bicpO1xuICAgICAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZSc7XG4gICAgICBmbHVzaCBzdGRlcnJcbiAgd2l0aFxuICAgIHwgT3V0X29mX21lbW9yeSAtPlxuICAgICAgICBwcmVycl9lbmRsaW5lXG4gICAgICAgICAgXCJGYXRhbCBlcnJvcjogb3V0IG9mIG1lbW9yeSBpbiB1bmNhdWdodCBleGNlcHRpb24gaGFuZGxlclwiXG5cbigqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IFtjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbl0gaW5cbiAgIFtydW50aW1lL3ByaW50ZXhjLmNdIHdoaWNoIGV4cGVjdHMgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4gKilcbmxldCBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uIGV4biBkZWJ1Z2dlcl9pbl91c2UgPVxuICB0cnlcbiAgICBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJyBleG4gZGVidWdnZXJfaW5fdXNlXG4gIHdpdGggXyAtPlxuICAgICgqIFRoZXJlIGlzIG5vdCBtdWNoIHdlIGNhbiBkbyBhdCB0aGlzIHBvaW50ICopXG4gICAgKClcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gJ2EgLT4gdW5pdFxuICA9IFwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZVwiXG5cbmxldCAoKSA9XG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIFwiUHJpbnRleGMuaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblwiXG4gICAgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblxuIiwiIyAxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiBcbiAgbW9kdWxlIExleGluZyA9IHN0cnVjdFxuICAgICgqIE92ZXJyaWRlIHRoZSBMZXhpbmcuZW5naW5lIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IHBvc2l0aW9uIHJlY29yZFxuICAgICAgIGVhY2ggdGltZSBhIHJ1bGUgaXMgbWF0Y2hlZC4gUmVkdWNlcyB0b3RhbCBwYXJzZSB0aW1lIGJ5IGFyb3VuZCAzMCUuXG4gICAgICAgSWRlYSBzdG9sZW4gZnJvbSB5b2pzb24gKilcblxuICAgIGluY2x1ZGUgTGV4aW5nXG5cbiAgICBleHRlcm5hbCBjX2VuZ2luZSA6IGxleF90YWJsZXMgLT4gaW50IC0+IGxleGJ1ZiAtPiBpbnQgPSBcImNhbWxfbGV4X2VuZ2luZVwiXG5cbiAgICBsZXQgZW5naW5lIHRibCBzdGF0ZSBidWYgPVxuICAgICAgbGV0IHJlc3VsdCA9IGNfZW5naW5lIHRibCBzdGF0ZSBidWYgaW5cbiAgICAgICgqXG4gICAgICBpZiByZXN1bHQgPj0gMCB0aGVuIGJlZ2luXG4gICAgICAgIGJ1Zi5sZXhfc3RhcnRfcCA8LSBidWYubGV4X2N1cnJfcDtcbiAgICAgICAgYnVmLmxleF9jdXJyX3AgPC0ge2J1Zi5sZXhfY3Vycl9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHBvc19jbnVtID0gYnVmLmxleF9hYnNfcG9zICsgYnVmLmxleF9jdXJyX3Bvc307XG4gICAgICBlbmQ7XG4gICAgICAqKVxuICAgICAgcmVzdWx0XG4gIGVuZFxuICBvcGVuIFRva2Vuc1xuXG5cbiAgbW9kdWxlIHR5cGUgTGV4ID0gc2lnXG4gICAgdmFsIHJlYWQgOiBMZXhpbmcubGV4YnVmIC0+IFRva2Vucy50b2tlblxuICBlbmRcblxuICBtb2R1bGUgTWFrZSAoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgOiBMZXggPSBzdHJ1Y3RcblxuIyAzMyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcbmxldCBfX29jYW1sX2xleF90YWJsZXMgPSB7XG4gIExleGluZy5sZXhfYmFzZSA9XG4gICBcIlxcMDAwXFwwMDBcXDIyOVxcMjU1XFwwMTdcXDAwMFxcMjMyXFwyNTVcXDAwM1xcMDAwXFwyMzRcXDI1NVxcMTI2XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDExM1xcMDAwXFwwMDBcXDAwMFxcMDAxXFwwMDBcXDAwMVxcMDAwXFwwMDJcXDAwMFxcMTIzXFwwMDBcXDI0M1xcMjU1XFwyNDRcXDI1NVxcXG4gICAgXFwyNDVcXDI1NVxcMjQ2XFwyNTVcXDI0N1xcMjU1XFwyNDhcXDI1NVxcMjQ5XFwyNTVcXDI1MFxcMjU1XFwyNTFcXDI1NVxcMjUyXFwyNTVcXFxuICAgIFxcMDAxXFwwMDBcXDAwMlxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMlxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwM1xcMDAwXFwyNTRcXDI1NVxcMDAzXFwwMDBcXDAwMVxcMDAwXFwwMTFcXDAwMFxcMjUzXFwyNTVcXDIzOVxcMjU1XFwwMDNcXDAwMFxcXG4gICAgXFwwMTBcXDAwMFxcMDExXFwwMDBcXDAwNVxcMDAwXFwyNDJcXDI1NVxcMDIwXFwwMDBcXDAxOVxcMDAwXFwwNDhcXDAwMFxcMDc2XFwwMDBcXFxuICAgIFxcMDY3XFwwMDBcXDA2M1xcMDAwXFwwNzVcXDAwMFxcMDg0XFwwMDBcXDI0MVxcMjU1XFwwODVcXDAwMFxcMDgzXFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwwNzVcXDAwMFxcMDcxXFwwMDBcXDA4M1xcMDAwXFwwODRcXDAwMFxcMDkzXFwwMDBcXDI0MFxcMjU1XFwwOTVcXDAwMFxcXG4gICAgXFwwOTNcXDAwMFxcMDg5XFwwMDBcXDA5NVxcMDAwXFwwODVcXDAwMFxcMDgxXFwwMDBcXDAwMVxcMDAwXFwwMzJcXDAwMFxcMTU1XFwwMDBcXFxuICAgIFxcMTg2XFwwMDBcXDIwOVxcMDAwXFwyMTlcXDAwMFxcMjI5XFwwMDBcXDI0MFxcMDAwXFwyNTBcXDAwMFxcMDE4XFwwMDFcXDA2NlxcMDAxXFxcbiAgICBcXDIzNlxcMjU1XFwyMzVcXDI1NVxcMDk0XFwwMDFcXDExN1xcMDAxXFwxNTVcXDAwMVxcMTc4XFwwMDFcXDA1M1xcMDAwXFwyMzFcXDI1NVxcXG4gICAgXFwwODhcXDAwMVxcMjUyXFwyNTVcXDI1M1xcMjU1XFwyNTRcXDI1NVxcMDE0XFwwMDBcXDI1NVxcMjU1XCI7XG4gIExleGluZy5sZXhfYmFja3RyayA9XG4gICBcIlxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMjZcXDAwMFxcMjU1XFwyNTVcXDAyMlxcMDAwXFwyNTVcXDI1NVxcMDI2XFwwMDBcXDAxN1xcMDAwXFxcbiAgICBcXDAxN1xcMDAwXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDE4XFwwMDBcXDI1NVxcMjU1XFwwMThcXDAwMFxcMjU1XFwyNTVcXDAxOFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAyNVxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAzXFwwMDBcXDI1NVxcMjU1XCI7XG4gIExleGluZy5sZXhfZGVmYXVsdCA9XG4gICBcIlxcMDAxXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDc5XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OVxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4NlxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwODlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXCI7XG4gIExleGluZy5sZXhfdHJhbnMgPVxuICAgXCJcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDA0XFwwMDBcXDAwM1xcMDAwXFwwMDBcXDAwMFxcMDA0XFwwMDBcXDAwNFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDA0XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDRcXDAwMFxcMDAwXFwwMDBcXDAwNlxcMDAwXFwwMDRcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDE5XFwwMDBcXDAxOFxcMDAwXFwwMDBcXDAwMFxcMDEwXFwwMDBcXDAxNVxcMDAwXFwwMTNcXDAwMFxcMDcxXFwwMDBcXDAwMlxcMDAwXFxcbiAgICBcXDAwN1xcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcXG4gICAgXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAxNFxcMDAwXFwwODdcXDAwMFxcMDE3XFwwMDBcXDA5M1xcMDAwXFwwMTZcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDg2XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMTFcXDAwMFxcMDU5XFwwMDBcXDA3N1xcMDAwXFwwMDBcXDAwMFxcMDc3XFwwMDBcXDAwOVxcMDAwXFwwMzhcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwMDBcXDAwMFxcMDIxXFwwMDBcXDAwMFxcMDAwXFwwMjBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwNjlcXDAwMFxcMDM0XFwwMDBcXDAzMFxcMDAwXFwwNTBcXDAwMFxcMDcwXFwwMDBcXDAyNVxcMDAwXFwwMjlcXDAwMFxcXG4gICAgXFwwMzNcXDAwMFxcMDEyXFwwMDBcXDA2MFxcMDAwXFwwNDNcXDAwMFxcMDMxXFwwMDBcXDAzNlxcMDAwXFwwMjRcXDAwMFxcMDUzXFwwMDBcXFxuICAgIFxcMDUxXFwwMDBcXDAzOFxcMDAwXFwwMjdcXDAwMFxcMDMyXFwwMDBcXDAyNlxcMDAwXFwwMjhcXDAwMFxcMDM1XFwwMDBcXDAzN1xcMDAwXFxcbiAgICBcXDA0NFxcMDAwXFwwNDJcXDAwMFxcMDQ1XFwwMDBcXDAyM1xcMDAwXFwwNDZcXDAwMFxcMDIyXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNDdcXDAwMFxcMDcxXFwwMDBcXFxuICAgIFxcMDgwXFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFxcbiAgICBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwN1xcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcXG4gICAgXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDA0OFxcMDAwXFwwNzBcXDAwMFxcMDQ5XFwwMDBcXFxuICAgIFxcMDQzXFwwMDBcXDAzOFxcMDAwXFwwNTJcXDAwMFxcMDU0XFwwMDBcXDA1NVxcMDAwXFwwNTZcXDAwMFxcMDU3XFwwMDBcXDA1OFxcMDAwXFxcbiAgICBcXDA1MlxcMDAwXFwwNjNcXDAwMFxcMDYxXFwwMDBcXDA2MlxcMDAwXFwwNDBcXDAwMFxcMDY0XFwwMDBcXDA2NVxcMDAwXFwwNjZcXDAwMFxcXG4gICAgXFwwNjdcXDAwMFxcMDY4XFwwMDBcXDA2MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXFxuICAgIFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwMDBcXDAwMFxcMDcwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc4XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDQxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAzOVxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFxcbiAgICBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc1XFwwMDBcXDAwMFxcMDAwXFwwNzVcXDAwMFxcMDczXFwwMDBcXFxuICAgIFxcMDA1XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFxcbiAgICBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcXG4gICAgXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXFxuICAgIFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3M1xcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3OVxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwOTFcXDAwMFxcMDAwXFwwMDBcXDA4MVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDkyXFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwODJcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OFxcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDAwMFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMDg1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDA5MFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFwiO1xuICBMZXhpbmcubGV4X2NoZWNrID1cbiAgIFwiXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwNFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAwNFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDA0XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwN1xcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAyXFwwMDBcXDAwMFxcMDAwXFwwOTJcXDAwMFxcMDAwXFwwMDBcXDA4NlxcMDAwXFxcbiAgICBcXDAwMlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDA3XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAxMFxcMDAwXFwwNzBcXDAwMFxcMjU1XFwyNTVcXDA3MFxcMDAwXFwwMDBcXDAwMFxcMDY5XFwwMDBcXFxuICAgIFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFxcbiAgICBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDA5XFwwMDBcXDAyNFxcMDAwXFwwMjVcXDAwMFxcMDM5XFwwMDBcXDAwN1xcMDAwXFwwMDBcXDAwMFxcMDI4XFwwMDBcXFxuICAgIFxcMDMyXFwwMDBcXDAwMFxcMDAwXFwwMTBcXDAwMFxcMDQyXFwwMDBcXDAzMFxcMDAwXFwwMzVcXDAwMFxcMDAwXFwwMDBcXDAxMVxcMDAwXFxcbiAgICBcXDAxMlxcMDAwXFwwMzRcXDAwMFxcMDI2XFwwMDBcXDAzMVxcMDAwXFwwMDBcXDAwMFxcMDI3XFwwMDBcXDAyNFxcMDAwXFwwMzZcXDAwMFxcXG4gICAgXFwwNDBcXDAwMFxcMDQxXFwwMDBcXDA0NFxcMDAwXFwwMDBcXDAwMFxcMDQ1XFwwMDBcXDAwMFxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXFxuICAgIFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFxcbiAgICBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcXG4gICAgXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXFxuICAgIFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDQ2XFwwMDBcXDAwOFxcMDAwXFxcbiAgICBcXDAwNlxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcXG4gICAgXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXFxuICAgIFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwNDdcXDAwMFxcMDA4XFwwMDBcXDA0OFxcMDAwXFxcbiAgICBcXDA0OVxcMDAwXFwwNTBcXDAwMFxcMDUxXFwwMDBcXDA1M1xcMDAwXFwwNTRcXDAwMFxcMDU1XFwwMDBcXDA1NlxcMDAwXFwwNTdcXDAwMFxcXG4gICAgXFwwNThcXDAwMFxcMDU5XFwwMDBcXDA2MFxcMDAwXFwwNjFcXDAwMFxcMDEzXFwwMDBcXDA2M1xcMDAwXFwwNjRcXDAwMFxcMDY1XFwwMDBcXFxuICAgIFxcMDY2XFwwMDBcXDA2N1xcMDAwXFwwNjhcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFxcbiAgICBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMjU1XFwyNTVcXDAwOFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwNlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAxM1xcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMTNcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcXG4gICAgXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3M1xcMDAwXFwyNTVcXDI1NVxcMDczXFwwMDBcXDA3MlxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcXG4gICAgXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXFxuICAgIFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFxcbiAgICBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzJcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFxcbiAgICBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzhcXDAwMFxcMDg2XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDA3OFxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDg4XFwwMDBcXDI1NVxcMjU1XFwwNzlcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzhcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDA3OFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwNlxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwwNzhcXDAwMFxcMjU1XFwyNTVcXDA4OFxcMDAwXFwyNTVcXDI1NVxcMDc4XFwwMDBcXDI1NVxcMjU1XFwwNzhcXDAwMFxcMDc4XFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDgyXFwwMDBcXDA4MlxcMDAwXFxcbiAgICBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzlcXDAwMFxcMDgyXFwwMDBcXFxuICAgIFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODNcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4MlxcMDAwXFxcbiAgICBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwyNTVcXDI1NVxcMDgzXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwODhcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcIjtcbiAgTGV4aW5nLmxleF9iYXNlX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9iYWNrdHJrX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9kZWZhdWx0X2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF90cmFuc19jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfY2hlY2tfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X2NvZGUgPVxuICAgXCJcIjtcbn1cblxubGV0IHJlYyByZWFkIGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX3JlYyBsZXhidWYgMFxuYW5kIF9fb2NhbWxfbGV4X3JlYWRfcmVjIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNTcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQk9PTCB0cnVlIClcbiMgMjcxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMSAtPlxuIyA1OSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBCT09MIGZhbHNlIClcbiMgMjc2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMiAtPlxuIyA2MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBOVUxMIClcbiMgMjgxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMyAtPlxuIyA2MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBPUyApXG4jIDI4NiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDQgLT5cbiMgNjUgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggT0UgKVxuIyAyOTEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA1IC0+XG4jIDY3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIEFTIClcbiMgMjk2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgNiAtPlxuIyA2OSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBBRSApXG4jIDMwMSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDcgLT5cbiMgNzEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIGlmIENvbXBsaWFuY2UubGV4X3R1cGxlIFRTIHRoZW4gVFNcbiAgICAgIGVsc2UgTGV4eGVyX3V0aWxzLmxleF9lcnJvciAoXCJ1bmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgXiAoTGV4aW5nLmxleGVtZSBsZXhidWYpIF4gXCInXCIpXG4gICAgKVxuIyAzMDkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA4IC0+XG4jIDc2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBpZiBDb21wbGlhbmNlLmxleF90dXBsZSBURSB0aGVuIFRFXG4gICAgICBlbHNlIExleHhlcl91dGlscy5sZXhfZXJyb3IgKFwidW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiIF4gKExleGluZy5sZXhlbWUgbGV4YnVmKSBeIFwiJ1wiKVxuICAgIClcbiMgMzE3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgOSAtPlxuIyA4MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgaWYgQ29tcGxpYW5jZS5sZXhfdmFyaWFudCBWUyB0aGVuIFZTXG4gICAgICBlbHNlIExleHhlcl91dGlscy5sZXhfZXJyb3IgKFwidW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiIF4gKExleGluZy5sZXhlbWUgbGV4YnVmKSBeIFwiJ1wiKVxuICAgIClcbiMgMzI1IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTAgLT5cbiMgODYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIGlmIENvbXBsaWFuY2UubGV4X3ZhcmlhbnQgVkUgdGhlbiBWRVxuICAgICAgZWxzZSBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIChcInVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiBeIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikgXiBcIidcIilcbiAgICApXG4jIDMzMyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDExIC0+XG4jIDkxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENPTU1BIClcbiMgMzM4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTIgLT5cbiMgOTMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ09MT04gKVxuIyAzNDMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxMyAtPlxuIyA5NSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDb21wbGlhbmNlLmxleF9udW1iZXIgTkVHSU5GSU5JVFkgKVxuIyAzNDggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxNCAtPlxuIyA5NyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDb21wbGlhbmNlLmxleF9udW1iZXIgSU5GSU5JVFkgKVxuIyAzNTMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxNSAtPlxuIyA5OSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDb21wbGlhbmNlLmxleF9udW1iZXIgSU5GSU5JVFkgKVxuIyAzNTggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxNiAtPlxuIyAxMDEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ29tcGxpYW5jZS5sZXhfbnVtYmVyIE5BTiApXG4jIDM2MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE3IC0+XG4jIDEwMyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgbWF0Y2ggTGV4eGVyX3V0aWxzLnN0cmluZzJudW0gKExleGluZy5sZXhlbWUgbGV4YnVmKSB3aXRoXG4gICAgICB8IElOVCBfIGFzIHRvayAtPiBDb21wbGlhbmNlLmxleF9pbnRlZ2VyIHRva1xuICAgICAgfCBMQVJHRUlOVCBfIGFzIHRvayAtPiBDb21wbGlhbmNlLmxleF9sYXJnZWludCB0b2tcbiAgICAgIHwgdG9rIC0+IHRva1xuICAgIClcbiMgMzczIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTggLT5cbiMgMTEwIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENvbXBsaWFuY2UubGV4X251bWJlciAoRkxPQVQgKGZsb2F0X29mX3N0cmluZyAoTGV4aW5nLmxleGVtZSBsZXhidWYpKSkgKVxuIyAzNzggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxOSAtPlxuIyAxMTIgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggU1RSSU5HIFwiXCIgKVxuIyAzODMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyMCAtPlxubGV0XG4jIDExMyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNcbiMgMzg5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuPSBMZXhpbmcuc3ViX2xleGVtZSBsZXhidWYgKGxleGJ1Zi5MZXhpbmcubGV4X3N0YXJ0X3BvcyArIDEpIChsZXhidWYuTGV4aW5nLmxleF9jdXJyX3BvcyArIC0xKSBpblxuIyAxMTQgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggU1RSSU5HIChMZXh4ZXJfdXRpbHMudW5lc2NhcGVfc3RyaW5nIHMpIClcbiMgMzkzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjEgLT5cbiMgMTE2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIEVPRiApXG4jIDM5OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIyIC0+XG4jIDExOCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCByZWFkIGxleGJ1ZiApXG4jIDQwMyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIzIC0+XG4jIDEyMCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBMZXh4ZXJfdXRpbHMudXBkYXRlX3BvcyBsZXhidWY7IHJlYWQgbGV4YnVmOyApXG4jIDQwOCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDI0IC0+XG4jIDEyMiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgbWF0Y2ggQ29tcGxpYW5jZS5jb21tZW50X2NoZWNrICgpIHdpdGhcbiAgICAgIHwgT2sgKCkgLT4gcmVhZF9jb21tZW50IGxleGJ1ZjsgcmVhZCBsZXhidWZcbiAgICAgIHwgRXJyb3IgZXJyIC0+ICBDT01QTElBTkNFX0VSUk9SIGVyclxuICAgIClcbiMgNDE3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjUgLT5cbiMgMTI4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBtYXRjaCBDb21wbGlhbmNlLmNvbW1lbnRfY2hlY2sgKCkgd2l0aFxuICAgICAgfCBPayAoKSAtPiByZWFkIGxleGJ1ZlxuICAgICAgfCBFcnJvciBlcnIgLT4gIENPTVBMSUFOQ0VfRVJST1IgZXJyXG4gICAgKVxuIyA0MjYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyNiAtPlxuIyAxMzQgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggTGV4eGVyX3V0aWxzLmxleF9lcnJvciAoXCJ1bmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgXiAoTGV4aW5nLmxleGVtZSBsZXhidWYpIF4gXCInXCIpIClcbiMgNDMxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX3JlYyBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfY29tbWVudCBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9jb21tZW50X3JlYyBsZXhidWYgODhcbmFuZCBfX29jYW1sX2xleF9yZWFkX2NvbW1lbnRfcmVjIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgMTM5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoICgpIClcbiMgNDQzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMSAtPlxuIyAxNDEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggTGV4eGVyX3V0aWxzLnVwZGF0ZV9wb3MgbGV4YnVmOyByZWFkX2NvbW1lbnQgbGV4YnVmIClcbiMgNDQ4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMiAtPlxuIyAxNDMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggTGV4eGVyX3V0aWxzLmxleF9lcnJvciBcInVuZXhwZWN0ZWQgRU9GIGluIGNvbW1lbnRcIiApXG4jIDQ1MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDMgLT5cbiMgMTQ1IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIHJlYWRfY29tbWVudCBsZXhidWYgKVxuIyA0NTggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfY29tbWVudF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbjs7XG5cbiMgMTQ3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiBcbiAgZW5kXG5cbiMgNDY5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuIiwibW9kdWxlIFlvanNvbiA9IFN0ZC5Zb2pzb25cbm9wZW4gQnJyXG5cbnR5cGUgbWV0aG9kJyA9IEdldCB8IFBvc3RcblxubGV0IGpzdHJfb2ZfbWV0aG9kID0gZnVuY3Rpb24gR2V0IC0+IEpzdHIudiBcIkdFVFwiIHwgUG9zdCAtPiBKc3RyLnYgXCJQT1NUXCJcblxubW9kdWxlIFR5cGVzID0gc3RydWN0XG4gIHR5cGUgb3JkZXIgPSBBc2NlbmRpbmcgfCBEZXNjZW5kaW5nIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHNvcnQgPVxuICAgIHwgQWxidW1cbiAgICB8IEFsYnVtQXJ0aXN0XG4gICAgfCBBcnRpc3RcbiAgICB8IEJ1ZGdldFxuICAgIHwgQ29tbXVuaXR5UmF0aW5nXG4gICAgfCBDcml0aWNSYXRpbmdcbiAgICB8IERhdGVDcmVhdGVkXG4gICAgfCBEYXRlUGxheWVkXG4gICAgfCBQbGF5Q291bnRcbiAgICB8IFByZW1pZXJlRGF0ZVxuICAgIHwgUHJvZHVjdGlvblllYXJcbiAgICB8IFNvcnROYW1lXG4gICAgfCBSYW5kb21cbiAgICB8IFJldmVudWVcbiAgICB8IFJ1bnRpbWVcbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuZW5kXG5cbnR5cGUgdXNlciA9IHtcbiAgbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJOYW1lXCJdXG4gIHNlcnZlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJTZXJ2ZXJJZFwiXVxuICBzZXJ2ZXJfbmFtZSA6IHN0cmluZyBvcHRpb247IFtAZGVmYXVsdCBOb25lXSBbQGtleSBcIlNlcnZlck5hbWVcIl1cbiAgaWQgOiBzdHJpbmc7IFtAa2V5IFwiSWRcIl1cbn1cbltAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxubW9kdWxlIHR5cGUgUXVlcnkgPSBzaWdcbiAgdHlwZSBwYXRoX3BhcmFtc1xuICB0eXBlIHBhcmFtcyBbQEBkZXJpdmluZyB5b2pzb25dXG4gIHR5cGUgcmVzcG9uc2UgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHZhbCBtZXRob2QnIDogbWV0aG9kJ1xuICB2YWwgZW5kcG9pbnQgOiBwYXRoX3BhcmFtcyAtPiBzdHJpbmdcbmVuZFxuXG5tb2R1bGUgQXV0aGVudGljYXRlX2J5X25hbWUgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcblxuICB0eXBlIHBhcmFtcyA9IHsgdXNlcm5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiVXNlcm5hbWVcIl0gcHcgOiBzdHJpbmcgW0BrZXkgXCJQd1wiXSB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHJlc3BvbnNlID0ge1xuICAgIHVzZXIgOiB1c2VyOyBbQGtleSBcIlVzZXJcIl1cbiAgICBhY2Nlc3NfdG9rZW4gOiBzdHJpbmc7IFtAa2V5IFwiQWNjZXNzVG9rZW5cIl1cbiAgICBzZXJ2ZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVySWRcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgbGV0IG1ldGhvZCcgPSBQb3N0XG4gIGxldCBlbmRwb2ludCBfID0gXCIvVXNlcnMvQXV0aGVudGljYXRlQnlOYW1lXCJcbmVuZFxuXG5tb2R1bGUgSXRlbSA9IHN0cnVjdFxuICB0eXBlIGltYWdlX2JsdXJfaGFzaCA9IChzdHJpbmcgKiBzdHJpbmcpIGxpc3RcblxuICBsZXQgaW1hZ2VfYmx1cl9oYXNoX29mX3lvanNvbiB5ID1cbiAgICBsZXQgYXNzb2MgPSBZb2pzb24uU2FmZS5VdGlsLnRvX2Fzc29jIHkgaW5cbiAgICBMaXN0Lm1hcCAoZnVuIChrZXksIHYpIC0+IChrZXksIFlvanNvbi5TYWZlLlV0aWwudG9fc3RyaW5nIHYpKSBhc3NvY1xuXG4gIGxldCB5b2pzb25fb2ZfaW1hZ2VfYmx1cl9oYXNoIGkgOiBZb2pzb24uU2FmZS50ID1cbiAgICBsZXQgYXNzb2MgPSBMaXN0Lm1hcCAoZnVuIChrZXksIHYpIC0+IChrZXksIGBTdHJpbmcgdikpIGkgaW5cbiAgICBgQXNzb2MgYXNzb2NcblxuICB0eXBlIGltYWdlX2JsdXJfaGFzaGVzID0ge1xuICAgIHByaW1hcnkgOiBpbWFnZV9ibHVyX2hhc2ggb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwiUHJpbWFyeVwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICB0eXBlIHR5cGVfID1cbiAgICB8IEFnZ3JlZ2F0ZUZvbGRlclxuICAgIHwgQXVkaW9cbiAgICB8IEF1ZGlvQm9va1xuICAgIHwgQmFzZVBsdWdpbkZvbGRlclxuICAgIHwgQm9va1xuICAgIHwgQm94U2V0XG4gICAgfCBDaGFubmVsXG4gICAgfCBDaGFubmVsRm9sZGVySXRlbVxuICAgIHwgQ29sbGVjdGlvbkZvbGRlclxuICAgIHwgRXBpc29kZVxuICAgIHwgRm9sZGVyXG4gICAgfCBHZW5yZVxuICAgIHwgTGl2ZVR2Q2hhbm5lbFxuICAgIHwgTGl2ZVR2UHJvZ3JhbVxuICAgIHwgTWFudWFsUGxheWxpc3RzRm9sZGVyXG4gICAgfCBNb3ZpZVxuICAgIHwgTXVzaWNBbGJ1bVxuICAgIHwgTXVzaWNBcnRpc3RcbiAgICB8IE11c2ljR2VucmVcbiAgICB8IE11c2ljVmlkZW9cbiAgICB8IFBlcnNvblxuICAgIHwgUGhvdG9cbiAgICB8IFBob3RvQWxidW1cbiAgICB8IFBsYXlsaXN0XG4gICAgfCBQbGF5bGlzdHNGb2xkZXJcbiAgICB8IFByb2dyYW1cbiAgICB8IFJlY29yZGluZ1xuICAgIHwgU2Vhc29uXG4gICAgfCBTZXJpZXNcbiAgICB8IFN0dWRpb1xuICAgIHwgVHJhaWxlclxuICAgIHwgVHZDaGFubmVsXG4gICAgfCBUdlByb2dyYW1cbiAgICB8IFVzZXJSb290Rm9sZGVyXG4gICAgfCBVc2VyVmlld1xuICAgIHwgVmlkZW9cbiAgICB8IFllYXJcbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgZmllbGQgPVxuICAgIHwgQWlyVGltZVxuICAgIHwgQmFzaWNTeW5jSW5mb1xuICAgIHwgQ2FuRGVsZXRlXG4gICAgfCBDYW5Eb3dubG9hZFxuICAgIHwgQ2hhbm5lbEltYWdlXG4gICAgfCBDaGFubmVsSW5mb1xuICAgIHwgQ2hhcHRlcnNcbiAgICB8IENoaWxkQ291bnRcbiAgICB8IEN1bXVsYXRpdmVSdW5UaW1lVGlja3NcbiAgICB8IEN1c3RvbVJhdGluZ1xuICAgIHwgRGF0ZUNyZWF0ZWRcbiAgICB8IERhdGVMYXN0TWVkaWFBZGRlZFxuICAgIHwgRGF0ZUxhc3RSZWZyZXNoZWRcbiAgICB8IERhdGVMYXN0U2F2ZWRcbiAgICB8IERpc3BsYXlQcmVmZXJlbmNlc0lkXG4gICAgfCBFbmFibGVNZWRpYVNvdXJjZURpc3BsYXlcbiAgICB8IEV0YWdcbiAgICB8IEV4dGVybmFsRXRhZ1xuICAgIHwgRXh0ZXJuYWxTZXJpZXNJZFxuICAgIHwgRXh0ZXJuYWxVcmxzXG4gICAgfCBFeHRyYUlkc1xuICAgIHwgR2VucmVzXG4gICAgfCBIZWlnaHRcbiAgICB8IEhvbWVQYWdlVXJsXG4gICAgfCBJbmhlcml0ZWRQYXJlbnRhbFJhdGluZ1ZhbHVlXG4gICAgfCBJc0hEXG4gICAgfCBJdGVtQ291bnRzXG4gICAgfCBMb2NhbFRyYWlsZXJDb3VudFxuICAgIHwgTWVkaWFTb3VyY2VDb3VudFxuICAgIHwgTWVkaWFTb3VyY2VzXG4gICAgfCBNZWRpYVN0cmVhbXNcbiAgICB8IE9yaWdpbmFsVGl0bGVcbiAgICB8IE92ZXJ2aWV3XG4gICAgfCBQYXJlbnRJZFxuICAgIHwgUGF0aFxuICAgIHwgUGVvcGxlXG4gICAgfCBQbGF5QWNjZXNzXG4gICAgfCBQcmVzZW50YXRpb25VbmlxdWVLZXlcbiAgICB8IFByaW1hcnlJbWFnZUFzcGVjdFJhdGlvXG4gICAgfCBQcm9kdWN0aW9uTG9jYXRpb25zXG4gICAgfCBQcm92aWRlcklkc1xuICAgIHwgUmVjdXJzaXZlSXRlbUNvdW50XG4gICAgfCBSZWZyZXNoU3RhdGVcbiAgICB8IFJlbW90ZVRyYWlsZXJzXG4gICAgfCBTY3JlZW5zaG90SW1hZ2VUYWdzXG4gICAgfCBTZWFzb25Vc2VyRGF0YVxuICAgIHwgU2VyaWVzUHJlc2VudGF0aW9uVW5pcXVlS2V5XG4gICAgfCBTZXJpZXNQcmltYXJ5SW1hZ2VcbiAgICB8IFNlcmllc1N0dWRpb1xuICAgIHwgU2VydmljZU5hbWVcbiAgICB8IFNldHRpbmdzXG4gICAgfCBTb3J0TmFtZVxuICAgIHwgU3BlY2lhbEVwaXNvZGVOdW1iZXJzXG4gICAgfCBTcGVjaWFsRmVhdHVyZUNvdW50XG4gICAgfCBTdHVkaW9zXG4gICAgfCBTeW5jSW5mb1xuICAgIHwgVGFnbGluZXNcbiAgICB8IFRhZ3NcbiAgICB8IFRoZW1lU29uZ0lkc1xuICAgIHwgVGhlbWVWaWRlb0lkc1xuICAgIHwgV2lkdGhcbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gICgqIFRoZSBbVHlwZV0gZmllbGQgaXMgYWN0dWFsbHkgYSBqc29uIHN0cmluZyBidXQgd2Ugd2FudCB0byBzZWUgaXQgYXMgYVxuICAgICB2YXJpYW50ICh3aGljaCBpcyBhIGxpc3Qgb2Ygb25lIHN0cmluZykgKilcbiAgdHlwZSB0eXBlX3N0ciA9IHR5cGVfXG5cbiAgbGV0IHR5cGVfc3RyX29mX3lvanNvbiBqID1cbiAgICBsZXQgcyA9IFlvanNvbi5TYWZlLlV0aWwudG9fc3RyaW5nIGogaW5cbiAgICB0eXBlX19vZl95b2pzb24gKGBMaXN0IFsgYFN0cmluZyBzIF0pXG5cbiAgbGV0IHlvanNvbl9vZl90eXBlX3N0ciB0cyA9XG4gICAgbWF0Y2ggeW9qc29uX29mX3R5cGVfIHRzIHdpdGggYExpc3QgWyBqc29uIF0gLT4ganNvbiB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgdHlwZSB0ID0ge1xuICAgIG5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiTmFtZVwiXVxuICAgIHNvcnRfbmFtZSA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJTb3J0TmFtZVwiXVxuICAgIGlkIDogc3RyaW5nOyBbQGtleSBcIklkXCJdXG4gICAgcGF0aCA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJQYXRoXCJdXG4gICAgYWxidW1faWQgOiBzdHJpbmcgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwiQWxidW1JZFwiXVxuICAgIHBhcmVudF9pZCA6IHN0cmluZyBvcHRpb24gb3B0aW9uO1xuICAgICAgICAoKiBbUGFyZW50SWRdIG1pZ2h0IGFic2VudCwgW251bGxdLCBvciBhIHN0cmluZyAqKVxuICAgICAgICBbQHlvanNvbi5vcHRpb25dXG4gICAgICAgIFtAa2V5IFwiUGFyZW50SWRcIl1cbiAgICBzZXJ2ZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVySWRcIl1cbiAgICBpbWFnZV9ibHVyX2hhc2hlcyA6IGltYWdlX2JsdXJfaGFzaGVzOyBbQGtleSBcIkltYWdlQmx1ckhhc2hlc1wiXVxuICAgIHR5cGVfIDogdHlwZV9zdHI7IFtAa2V5IFwiVHlwZVwiXVxuICAgIGNvbGxlY3Rpb25fdHlwZSA6IHN0cmluZyBvcHRpb247XG4gICAgICAgIFtAZGVmYXVsdCBOb25lXSBbQHlvanNvbl9kcm9wX2RlZmF1bHQgKCA9ICldIFtAa2V5IFwiQ29sbGVjdGlvblR5cGVcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5lbmRcblxubW9kdWxlIEl0ZW1zID0gc3RydWN0XG4gIHR5cGUgcGF0aF9wYXJhbXMgPSB1bml0XG5cbiAgdHlwZSBwYXJhbXMgPSB7XG4gICAgaWRzIDogc3RyaW5nIGxpc3Q7IFtAZGVmYXVsdCBbXV0gW0B5b2pzb25fZHJvcF9kZWZhdWx0ICggPSApXSBbQGtleSBcImlkc1wiXVxuICAgIHBhcmVudF9pZCA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJwYXJlbnRJZFwiXVxuICAgIHVzZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwidXNlcklkXCJdXG4gICAgZmllbGRzIDogSXRlbS5maWVsZCBsaXN0O1xuICAgIGluY2x1ZGVfaXRlbV90eXBlcyA6IEl0ZW0udHlwZV8gbGlzdDsgW0BrZXkgXCJpbmNsdWRlSXRlbVR5cGVzXCJdXG4gICAgc3RhcnRfaW5kZXggOiBpbnQgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwic3RhcnRJbmRleFwiXVxuICAgIGxpbWl0IDogaW50IG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXVxuICAgIHNvcnRfb3JkZXIgOiBUeXBlcy5vcmRlciBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJzb3J0T3JkZXJcIl1cbiAgICBzb3J0X2J5IDogVHlwZXMuc29ydCBsaXN0OyBbQGtleSBcInNvcnRCeVwiXVxuICAgIHJlY3Vyc2l2ZSA6IGJvb2w7XG4gICAgZW5hYmxlX3VzZXJfZGF0YSA6IGJvb2w7IFtAa2V5IFwiZW5hYmxlVXNlckRhdGFcIl1cbiAgICBlbmFibGVfaW1hZ2VzIDogYm9vbDsgW0BrZXkgXCJlbmFibGVJbWFnZXNcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSByZXNwb25zZSA9IHtcbiAgICBpdGVtcyA6IEl0ZW0udCBsaXN0OyBbQGtleSBcIkl0ZW1zXCJdXG4gICAgdG90YWxfcmVjb3JkX2NvdW50IDogaW50OyBbQGtleSBcIlRvdGFsUmVjb3JkQ291bnRcIl1cbiAgICBzdGFydF9pbmRleCA6IGludDsgW0BrZXkgXCJTdGFydEluZGV4XCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIGxldCBtZXRob2QnID0gR2V0XG4gIGxldCBlbmRwb2ludCBfID0gXCIvSXRlbXNcIlxuZW5kXG5cbm1vZHVsZSBWaWV3cyA9IHN0cnVjdFxuICB0eXBlIHBhdGhfcGFyYW1zID0geyB1c2VyX2lkIDogc3RyaW5nIH1cblxuICB0eXBlIHBhcmFtcyA9IHtcbiAgICBpbmNsdWRlX2V4dGVybmFsX2NvbnRlbnQgOiBib29sOyBbQGtleSBcImluY2x1ZGVFeHRlcm5hbENvbnRlbnRcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSByZXNwb25zZSA9IHtcbiAgICBpdGVtcyA6IEl0ZW0udCBsaXN0OyBbQGtleSBcIkl0ZW1zXCJdXG4gICAgdG90YWxfcmVjb3JkX2NvdW50IDogaW50OyBbQGtleSBcIlRvdGFsUmVjb3JkQ291bnRcIl1cbiAgICBzdGFydF9pbmRleCA6IGludDsgW0BrZXkgXCJTdGFydEluZGV4XCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIGxldCBtZXRob2QnID0gR2V0XG4gIGxldCBlbmRwb2ludCBwcCA9IFByaW50Zi5zcHJpbnRmIFwiL1VzZXJzLyVzL1ZpZXdzXCIgcHAudXNlcl9pZFxuZW5kXG5cbm1vZHVsZSBWaXJ0dWFsX2ZvbGRlcnMgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcbiAgdHlwZSBwYXJhbXMgPSB1bml0IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHZpcnR1YWxfZm9sZGVyID0ge1xuICAgIG5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiTmFtZVwiXVxuICAgIGxvY2F0aW9ucyA6IHN0cmluZyBsaXN0OyBbQGtleSBcIkxvY2F0aW9uc1wiXVxuICAgIGl0ZW1faWQgOiBzdHJpbmc7IFtAa2V5IFwiSXRlbUlkXCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIHR5cGUgcmVzcG9uc2UgPSB2aXJ0dWFsX2ZvbGRlciBsaXN0IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICBsZXQgbWV0aG9kJyA9IEdldFxuICBsZXQgZW5kcG9pbnQgXyA9IFByaW50Zi5zcHJpbnRmIFwiL0xpYnJhcnkvVmlydHVhbEZvbGRlcnNcIlxuZW5kXG5cbm1vZHVsZSBTeXN0ZW0gPSBzdHJ1Y3RcbiAgbW9kdWxlIEluZm8gPSBzdHJ1Y3RcbiAgICB0eXBlIHBhdGhfcGFyYW1zID0gdW5pdFxuICAgIHR5cGUgcGFyYW1zID0gdW5pdCBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgICB0eXBlIHJlc3BvbnNlID0ge1xuICAgICAgbG9jYWxfYWRkcmVzcyA6IHN0cmluZyBvcHRpb247IFtAZGVmYXVsdCBOb25lXSBbQGtleSBcIkxvY2FsQWRyZXNzXCJdXG4gICAgICBzZXJ2ZXJfbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJTZXJ2ZXJOYW1lXCJdXG4gICAgICBwcm9kdWN0X25hbWUgOiBzdHJpbmcgb3B0aW9uOyBbQGRlZmF1bHQgTm9uZV0gW0BrZXkgXCJQcm9kdWN0TmFtZVwiXVxuICAgICAgb3BlcmF0aW5nX3N5c3RlbSA6IHN0cmluZyBvcHRpb247IFtAZGVmYXVsdCBOb25lXSBbQGtleSBcIk9wZXJhdGluZ1N5c3RlbVwiXVxuICAgICAgaWQgOiBzdHJpbmc7IFtAa2V5IFwiSWRcIl1cbiAgICB9XG4gICAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gICAgbGV0IG1ldGhvZCcgPSBHZXRcbiAgICBsZXQgZW5kcG9pbnQgXyA9IFwiL1N5c3RlbS9JbmZvXCJcbiAgZW5kXG5lbmRcblxubGV0IGF1dGhvcml6YXRpb24gP3Rva2VuICgpID1cbiAgbGV0IHRva2VuID1cbiAgICBtYXRjaCB0b2tlbiB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgdCAtPiBQcmludGYuc3ByaW50ZiBcIiwgVG9rZW49JVNcIiB0XG4gIGluXG4gIFByaW50Zi5zcHJpbnRmXG4gICAgXCJNZWRpYUJyb3dzZXIgQ2xpZW50PVxcXCJPY2FtaXhcXFwiLCBEZXZpY2U9XFxcIkZpcmVmb3hcXFwiLCBEZXZpY2VJZD1cXFwiJXNcXFwiLCBcXFxuICAgICBWZXJzaW9uPVxcXCIwLjFcXFwiJXNcIlxuICAgIFwiYWJjZGVmXCIgdG9rZW5cblxubGV0IHJlcXVlc3QgKHR5cGUgcHAgcCByKSA/YmFzZV91cmwgP3Rva2VuID9oZWFkZXJzXG4gICAgKG1vZHVsZSBRIDogUXVlcnlcbiAgICAgIHdpdGggdHlwZSBwYXRoX3BhcmFtcyA9IHBwXG4gICAgICAgYW5kIHR5cGUgcGFyYW1zID0gcFxuICAgICAgIGFuZCB0eXBlIHJlc3BvbnNlID0gcikgKHBhcmFtcyA6IHApIChwYXRoX3BhcmFtcyA6IHBwKSA6IHIgRnV0Lm9yX2Vycm9yID1cbiAgbGV0IG9wZW4gQnJyX2lvLkZldGNoIGluXG4gIGxldCB1cmkgPVxuICAgIEpzdHIuKFxuICAgICAgVXJpLm9mX2pzdHIgP2Jhc2U6KE9wdGlvbi5tYXAgdiBiYXNlX3VybCkgKHYgKFEuZW5kcG9pbnQgcGF0aF9wYXJhbXMpKSlcbiAgICB8PiBSZXN1bHQuZ2V0X29rXG4gIGluXG4gIGxldCBhdXRob3JpemF0aW9uID0gYXV0aG9yaXphdGlvbiA/dG9rZW4gKCkgaW5cbiAgbGV0IGhlYWRlcnMgPVxuICAgIEhlYWRlcnMub2ZfYXNzb2MgP2luaXQ6aGVhZGVyc1xuICAgICAgSnN0ci5cbiAgICAgICAgW1xuICAgICAgICAgICh2IFwiY29udGVudC10eXBlXCIsIHYgXCJ0ZXh0L2pzb25cIik7XG4gICAgICAgICAgKHYgXCJYLUVtYnktQXV0aG9yaXphdGlvblwiLCB2IGF1dGhvcml6YXRpb24pO1xuICAgICAgICBdXG4gIGluXG4gIGxldCBtZXRob2QnID0ganN0cl9vZl9tZXRob2QgUS5tZXRob2QnIGluXG4gIGxldCBpbml0LCB1cmwgPVxuICAgIG1hdGNoIFEubWV0aG9kJyB3aXRoXG4gICAgfCBHZXQgLT5cbiAgICAgICAgbGV0IHBhcmFtcyA9XG4gICAgICAgICAgcGFyYW1zIHw+IFEueW9qc29uX29mX3BhcmFtcyB8PiBZb2pzb24uU2FmZS50b19zdHJpbmcgfD4gSnN0ci52XG4gICAgICAgICAgfD4gSnNvbi5kZWNvZGUgfD4gUmVzdWx0LmdldF9vayB8PiBVcmkuUGFyYW1zLm9mX29ialxuICAgICAgICBpblxuICAgICAgICBsZXQgdXJpX3dpdGhfcGFyYW1zID0gVXJpLndpdGhfcXVlcnlfcGFyYW1zIHVyaSBwYXJhbXMgaW5cbiAgICAgICAgKFJlcXVlc3QuaW5pdCB+aGVhZGVycyB+bWV0aG9kJyAoKSwgVXJpLnRvX2pzdHIgdXJpX3dpdGhfcGFyYW1zKVxuICAgIHwgUG9zdCAtPlxuICAgICAgICBsZXQgYm9keSA9XG4gICAgICAgICAgcGFyYW1zIHw+IFEueW9qc29uX29mX3BhcmFtcyB8PiBZb2pzb24uU2FmZS50b19zdHJpbmcgfD4gSnN0ci52XG4gICAgICAgICAgfD4gQm9keS5vZl9qc3RyXG4gICAgICAgIGluXG4gICAgICAgIChSZXF1ZXN0LmluaXQgfmhlYWRlcnMgfm1ldGhvZCcgfmJvZHkgKCksIFVyaS50b19qc3RyIHVyaSlcbiAgaW5cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KiByZXMgPSByZXF1ZXN0IEBAIFJlcXVlc3QudiB+aW5pdCB1cmwgaW5cbiAgbGV0KyBqc29uID0gUmVzcG9uc2UuYXNfYm9keSByZXMgfD4gQm9keS50ZXh0IGluXG4gIGxldCB5b2pzb24gPSBZb2pzb24uU2FmZS5mcm9tX3N0cmluZyAoSnN0ci50b19zdHJpbmcganNvbikgaW5cbiAgdHJ5IFEucmVzcG9uc2Vfb2ZfeW9qc29uIHlvanNvblxuICB3aXRoIGUgLT5cbiAgICBDb25zb2xlLmxvZyBbIFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBkZWNvZGluZyByZXNwb25zZTogXCI7IGpzb24gXTtcbiAgICBDb25zb2xlLmxvZyBbIGUgXTtcbiAgICByYWlzZSBlXG4iLCJvcGVuISBTdGRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyX2lvXG5tb2R1bGUgQXBpID0gRGF0YV9zb3VyY2UuSmVsbHlmaW5fYXBpXG5cbigqIFByb3Bvc2l0aW9uOlxuICAgLSBVc2UgcHJpbWFyeSBrZXkgdG8gcHJvdmlkZSBmaWx0ZXJpbmdcbiAgIC0gVXNlIGluZGV4IGtleXMgdG8gcHJvdmlkZSBzb3J0c1xuXG4gICBCaWcgcHJpbWFyeSBrZXlzIGRyaXZlIHRoZSBjb3N0IG9mIFtnZXRfYWxsX2tleXNdIHVwLlxuICAgV2UgY291bGQgZGVsZWdhdGUgc29tZSBmaWx0ZXJpbmcgdG8gdGhlIGluZGV4IGtleXMgaWYgbmVjZXNzYXJ5LlxuXG4gICAgV2UgY291bGQgYWxzbyB0cmllZCB0byBwcmUtcHJvY2VzcyBvciBjb21wcmVzcyB0aGUga2V5cyAqKVxuXG5sZXQgdF90b19qdiBlbmNvZGVyIHQgPVxuICBlbmNvZGVyIHQgfD4gWW9qc29uLlNhZmUudG9fc3RyaW5nIHw+IEpzdHIub2Zfc3RyaW5nIHw+IEJyci5Kc29uLmRlY29kZVxuICB8PiBSZXN1bHQuZ2V0X2V4blxuXG5sZXQganZfdG9fdCBkZWNvZGVyIGogPVxuICBsZXQganNvbiA9IEJyci5Kc29uLmVuY29kZSBqIGluXG4gIE9rIChKc3RyLnRvX3N0cmluZyBqc29uIHw+IFlvanNvbi5TYWZlLmZyb21fc3RyaW5nIHw+IGRlY29kZXIpXG5cbm1vZHVsZSBPcmRlcnJlZF9pdGVtcyA9IHN0cnVjdFxuICB0eXBlIHQgPSB7IGlkIDogaW50OyBpdGVtIDogc3RyaW5nIG9wdGlvbiB9IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICBtb2R1bGUgS2V5ID0gc3RydWN0XG4gICAgdHlwZSB0ID0gaW50XG5cbiAgICBsZXQgdG9fanYgayA9IEp2Lm9mX2ludCBrXG4gICAgbGV0IG9mX2p2IGogPSBKdi50b19pbnQgalxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5JZCBcImlkXCJcbiAgZW5kXG5cbiAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X2RhdGVfYWRkZWRcIlxuICBsZXQgdG9fanYgdCA9IHRfdG9fanYgeW9qc29uX29mX3QgdFxuICBsZXQgb2ZfanYgaiA9IGp2X3RvX3QgdF9vZl95b2pzb24gaiB8PiBSZXN1bHQuZ2V0X2V4blxuICBsZXQgZ2V0X2tleSB0ID0gdC5pZFxuZW5kXG5cbm1vZHVsZSBJdGVtcyA9IHN0cnVjdFxuICBvcGVuIERhdGFfc291cmNlLkplbGx5ZmluLkFwaVxuXG4gIHR5cGUgc29ydHMgPSB7IGRhdGVfYWRkZWQgOiBpbnQ7IHZpZXdzIDogc3RyaW5nIGxpc3Q7IHNvcnRfbmFtZSA6IHN0cmluZyB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHQgPSB7IHNvcnRzIDogc29ydHM7IGl0ZW0gOiBJdGVtLnQgfSBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgbGV0IGNvbXBhcmUgdCB0JyA9IFN0cmluZy5jb21wYXJlIHQuc29ydHMuc29ydF9uYW1lIHQnLnNvcnRzLnNvcnRfbmFtZVxuXG4gIG1vZHVsZSBLZXkgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBzdHJpbmcgKiBzdHJpbmcgKiBzdHJpbmcgbGlzdFxuXG4gICAgbGV0IHRvX2p2IChpZCwgc29ydF9uYW1lLCB2aWV3cykgPVxuICAgICAgbGV0IGlkID0gSnYub2Zfc3RyaW5nIGlkIGluXG4gICAgICBsZXQgc29ydF9uYW1lID0gSnYub2Zfc3RyaW5nIHNvcnRfbmFtZSBpblxuICAgICAgbGV0IHZpZXdzID0gSnYub2ZfbGlzdCBKdi5vZl9zdHJpbmcgdmlld3MgaW5cbiAgICAgIEp2Lm9mX2p2X2FycmF5IFt8IGlkOyBzb3J0X25hbWU7IHZpZXdzIHxdXG5cbiAgICBsZXQgb2ZfanYgaiA9XG4gICAgICBtYXRjaCBKdi50b19qdl9hcnJheSBqIHdpdGhcbiAgICAgIHwgW3wgaWQ7IHNvcnRfbmFtZTsgdmlld3MgfF0gLT5cbiAgICAgICAgICBsZXQgaWQgPSBKdi50b19zdHJpbmcgaWQgaW5cbiAgICAgICAgICBsZXQgc29ydF9uYW1lID0gSnYudG9fc3RyaW5nIHNvcnRfbmFtZSBpblxuICAgICAgICAgIGxldCB2aWV3cyA9IEp2LnRvX2xpc3QgSnYudG9fc3RyaW5nIHZpZXdzIGluXG4gICAgICAgICAgKGlkLCBzb3J0X25hbWUsIHZpZXdzKVxuICAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IHBhdGggPVxuICAgICAgSW5kZXhlZF9kYi5LZXlfcGF0aC4oXG4gICAgICAgIFMgW3wgSWQgXCJpdGVtLklkXCI7IElkIFwiaXRlbS5OYW1lXCI7IElkIFwic29ydHMudmlld3NcIiB8XSlcbiAgICAoKiBcIml0ZW0uSWQsaXRlbS5zb3J0cy5zb3J0X25hbWVcIiAqKVxuICAgICgqIHBjIDExMG1zIFwibGV0IHBhdGggPSBcIml0ZW0uSWRcIiopXG4gICAgICAgKCogcGMgMjE0bXMgXCJsZXQgcGF0aCA9IFwiaXRlbS5JZCwgaXRlbS5OYW1lXCIqKVxuICBlbmRcblxuICBtb2R1bGUgS2V5X2RhdGVfYWRkZWQgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBpbnRcblxuICAgIGxldCB0b19qdiBrID0gSnYub2ZfaW50IGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX2ludCBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwic29ydHMuZGF0ZV9hZGRlZFwiXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfaWQgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBzdHJpbmdcblxuICAgIGxldCB0b19qdiBrID0gSnYub2Zfc3RyaW5nIGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX3N0cmluZyBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwiaXRlbS5JZFwiXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfdmlld19raW5kID0gc3RydWN0XG4gICAgKCogdG9kbzogdXNlIGEgZW51bSBmb3Iga2luZHMgKilcbiAgICB0eXBlIHQgPSB7IHR5cGUnIDogc3RyaW5nOyB2aWV3cyA6IHN0cmluZyBsaXN0IH1cblxuICAgIGxldCB0b19qdiBfayA9IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IG9mX2p2IGogPVxuICAgICAgbWF0Y2ggSnYuKHRvX2p2X2FycmF5IGopIHdpdGhcbiAgICAgIHwgW3wgdHlwZSc7IHZpZXdzIHxdIC0+XG4gICAgICAgICAgeyB0eXBlJyA9IEp2LnRvX3N0cmluZyB0eXBlJzsgdmlld3MgPSBKdi4odG9fbGlzdCB0b19zdHJpbmcgdmlld3MpIH1cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5TIFt8IElkIFwiaXRlbS5UeXBlXCI7IElkIFwic29ydHMudmlld3NcIiB8XVxuICBlbmRcblxuICBtb2R1bGUgS2V5X3R5cGVfbmFtZSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IHsgY29sbGVjdGlvbl90eXBlIDogc3RyaW5nOyBzb3J0X25hbWUgOiBzdHJpbmcgfVxuXG4gICAgbGV0IHRvX2p2IF90ID0gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgb2ZfanYgaiA9XG4gICAgICBtYXRjaCBKdi4odG9fanZfYXJyYXkgaikgd2l0aFxuICAgICAgfCBbfCBjb2xsZWN0aW9uX3R5cGU7IHNvcnRfbmFtZSB8XSAtPlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25fdHlwZSA9IEp2LnRvX3N0cmluZyBjb2xsZWN0aW9uX3R5cGU7XG4gICAgICAgICAgICBzb3J0X25hbWUgPSBKdi50b19zdHJpbmcgc29ydF9uYW1lO1xuICAgICAgICAgIH1cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBwYXRoID1cbiAgICAgIEluZGV4ZWRfZGIuS2V5X3BhdGguUyBbfCBJZCBcIml0ZW0uQ29sbGVjdGlvblR5cGVcIjsgSWQgXCJzb3J0cy5zb3J0X25hbWVcIiB8XVxuICBlbmRcblxuICBsZXQgbmFtZSA9IFwiaXRlbXNcIlxuICBsZXQgdG9fanYgdCA9IHRfdG9fanYgeW9qc29uX29mX3QgdFxuICBsZXQgb2ZfanYgaiA9IGp2X3RvX3QgdF9vZl95b2pzb24gaiB8PiBSZXN1bHQuZ2V0X2V4blxuICBsZXQgZ2V0X2tleSB0ID0gKHQuc29ydHMuc29ydF9uYW1lLCB0Lml0ZW0uSXRlbS5pZCwgdC5zb3J0cy52aWV3cylcbmVuZFxuXG5tb2R1bGUgVmlydHVhbF9mb2xkZXIgPSBzdHJ1Y3RcbiAgb3BlbiBEYXRhX3NvdXJjZS5KZWxseWZpbl9hcGlcblxuICAoKiB0b2RvOiBtdWx0aXNlcnZlcjogd2Ugc2hvdWxkIGFkZCBhIHNlcnZlcl9pZCBrZXkgKilcbiAgdHlwZSB0ID0gVmlydHVhbF9mb2xkZXJzLnZpcnR1YWxfZm9sZGVyIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICBtb2R1bGUgS2V5ID0gc3RydWN0XG4gICAgdHlwZSB0ID0gc3RyaW5nXG5cbiAgICBsZXQgdG9fanYgayA9IEp2Lm9mX3N0cmluZyBrXG4gICAgbGV0IG9mX2p2IGogPSBKdi50b19zdHJpbmcgalxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5JZCBcIkl0ZW1JZFwiXG4gIGVuZFxuXG4gIGxldCBuYW1lID0gXCJ2aXJ0dWFsX2ZvbGRlcnNcIlxuICBsZXQgdG9fanYgdCA9IHRfdG9fanYgeW9qc29uX29mX3QgdFxuICBsZXQgb2ZfanYgaiA9IGp2X3RvX3QgdF9vZl95b2pzb24gaiB8PiBSZXN1bHQuZ2V0X2V4blxuICBsZXQgZ2V0X2tleSB0ID0gdC5WaXJ0dWFsX2ZvbGRlcnMuaXRlbV9pZFxuZW5kXG5cbm1vZHVsZSBPcmRlcnJlZF9pdGVtc19zdG9yZSA9IEluZGV4ZWRfZGIuTWFrZV9vYmplY3Rfc3RvcmUgKE9yZGVycmVkX2l0ZW1zKVxubW9kdWxlIEl0ZW1zX3N0b3JlID0gSW5kZXhlZF9kYi5NYWtlX29iamVjdF9zdG9yZSAoSXRlbXMpXG5tb2R1bGUgVmlydHVhbF9mb2xkZXJfc3RvcmUgPSBJbmRleGVkX2RiLk1ha2Vfb2JqZWN0X3N0b3JlIChWaXJ0dWFsX2ZvbGRlcilcblxubW9kdWxlIEl0ZW1zQnlEYXRlQWRkZWQgPVxuICBJbmRleGVkX2RiLk1ha2VfaW5kZXhcbiAgICAoc3RydWN0XG4gICAgICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfZGF0ZV9hZGRlZFwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X2RhdGVfYWRkZWQpXG5cbm1vZHVsZSBJdGVtc0J5Vmlld0FuZEtpbmQgPVxuICBJbmRleGVkX2RiLk1ha2VfaW5kZXhcbiAgICAoc3RydWN0XG4gICAgICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfdmlld19hbmRfa2luZFwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X3ZpZXdfa2luZClcblxubW9kdWxlIEl0ZW1zQnlJZCA9XG4gIEluZGV4ZWRfZGIuTWFrZV9pbmRleFxuICAgIChzdHJ1Y3RcbiAgICAgIGxldCBuYW1lID0gXCJpdGVtc19ieV9pZFwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X2lkKVxuXG5tb2R1bGUgSXRlbXNCeVR5cGVBbmROYW1lID1cbiAgSW5kZXhlZF9kYi5NYWtlX2luZGV4XG4gICAgKHN0cnVjdFxuICAgICAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X3R5cGVfYW5kX25hbWVcIlxuICAgIGVuZClcbiAgICAoSXRlbXMpXG4gICAgKEl0ZW1zLktleV90eXBlX25hbWUpXG4iLCJvcGVuISBTdGRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyXG5vcGVuIEJycl9pby5JbmRleGVkX2RiXG5tb2R1bGUgU291cmNlID0gRGF0YV9zb3VyY2UuSmVsbHlmaW5cbm1vZHVsZSBPSSA9IFN0b3Jlcy5PcmRlcnJlZF9pdGVtc19zdG9yZVxubW9kdWxlIEkgPSBTdG9yZXMuSXRlbXNfc3RvcmVcbm1vZHVsZSBWRiA9IFN0b3Jlcy5WaXJ0dWFsX2ZvbGRlcl9zdG9yZVxub3BlbiBTb3VyY2UuQXBpXG5cbigqIEl0ZW1zIEhpZXJhcmNoeVxuXG4gICBVc2VyUm9vdEZvbGRlciAoXCJNZWRpYSBGb2xkZXJzXCIgXCJlOWQ1MDc1YTU1NWMxY2JjMzk0ZWVjNGNlZjI5NTI3NFwiKVxuICAgICAgICAgICAgICAgICAgKEdldHMgdGhlIHJvb3QgZm9sZGVyIGZyb20gYSB1c2VyJ3MgbGlicmFyeS4gKVxuICAgXiBDb2xsZWN0aW9uRm9sZGVyIChcIk11c2ljTGliXCIgXCIxNTA4NDhjZDRmNDRiOWFlMzJlYzVhNzkzNGRlMzljZVwiKVxuXG4gICBBZ2dyZWdhdGVGb2xkZXIgKFwicm9vdFwiIFwiZjI3Y2FhMzdlNTE0MjIyNWNjZWRlZDQ4ZjY1NTM1MDJcIilcbiAgIF4gRm9sZGVyIChcIm1lZGlhXCIgXCI5MmZkZTcxZDBlYzU3N2I1MzFlN2IzNDI3YjIyM2JlZFwiKVxuICAgXiBGb2xkZXIrIDwtIE11c2ljQXJ0aXN0IDwtIE11c2ljQWxidW0gPC0gQXVkaW9cblxuICAgSmVsbHlmaW4gY29uc2lkZXJzIHRoYXQgRm9sZGVyIChcIm1lZGlhXCIgXCI5MmZkZTcxZDBlYzU3N2I1MzFlN2IzNDI3YjIyM2JlZFwiKSA9PSBDb2xsZWN0aW9uRm9sZGVyIChcIk11c2ljTGliXCIgXCIxNTA4NDhjZDRmNDRiOWFlMzJlYzVhNzkzNGRlMzljZVwiKVxuXG4gICBUaGlzIGVxdWFsaXR5IGNhbiBiZSByZXRyaXZlZCBieSBxdWVyeWluZyB0aGUgXCJWaXJ0dWFsRm9sZGVyc1wiIGFuZCBsb29rIGF0XG4gICB0aGUgbG9jYXRpb25zJyBwYXRocy4gVW5mb3J0dW5hdGVseSB0aGlzIGlzIG5vdCBhY2Nlc3NpYmxlIHRvIHVucHJpdmlsZWRnZWQgdXNlcnMuLi5cblxuICAgVG8gYWN0dWFsbHkga25vdyB3aGljaCBmb2xkZXJzIGFyZSBwYXJ0IG9mIGEgdXNlciB2aWV3IHdlIG5lZWQgdG8gcXVlcnkgdGhlXG4gICBpdGVtcyB0aGF0IGhhdmUgdGhpcyB2aWV3J3MgaWQgYXMgYSBbcGFyZW50SWRdLiBUaGUgYWN0dWFsIFtwYXJlbnRJZF0gb2ZcbiAgIHRoZXNlIGl0ZW1zIHdpbGwgYmUgZGlmZmVyZW50IGFuZCBhcmUgdGhlIGlkcyBhY3R1YWwgZm9sZGVycyB0aGF0XG4gICBjb25zdGl0dXRlIHRoaXMgdmlldy5cblxuICAgRm9yIHNpbXBsaWNpdHkgKD8pIHdlIGNvbnNpZGVyIHRoYXQgYW4gaXRlbSBpcyBwYXJ0IG9mIGEgdmlldyBpZiBpdHMgcGF0aCBpc1xuICAgcHJlZml4ZWQgYnkgb25lIG9mIHRoZSB2aWV3J3MgdmlydHVhbCBmb2xkZXIgbG9jYXRpb25zLlxuKilcblxubGV0IGNodW5rX3NpemUgPSA1MDBcbmxldCBpbmNsdWRlX2l0ZW1fdHlwZXMgPSBbIFNvdXJjZS5BcGkuSXRlbS5NdXNpY0FydGlzdDsgTXVzaWNBbGJ1bTsgQXVkaW8gXVxuXG5sZXQgZmV0Y2hfdG90YWxfaXRlbV9jb3VudCBzb3VyY2UgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQrIHJlcyA9XG4gICAgU291cmNlLnF1ZXJ5IHNvdXJjZVxuICAgICAgKG1vZHVsZSBTb3VyY2UuQXBpLkl0ZW1zKVxuICAgICAgU291cmNlLkFwaS5JdGVtcy5cbiAgICAgICAge1xuICAgICAgICAgICgqIHRvZG8gbWFrZSBzb3J0IGV4cGxpY2l0IChieSBkYXRlIGFkZGVkIGRhdGUpKilcbiAgICAgICAgICBpZHMgPSBbXTtcbiAgICAgICAgICBwYXJlbnRfaWQgPSBOb25lO1xuICAgICAgICAgIHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkO1xuICAgICAgICAgIGZpZWxkcyA9IFtdO1xuICAgICAgICAgIGluY2x1ZGVfaXRlbV90eXBlcztcbiAgICAgICAgICBzdGFydF9pbmRleCA9IE5vbmU7XG4gICAgICAgICAgbGltaXQgPSBTb21lIDA7XG4gICAgICAgICAgc29ydF9vcmRlciA9IFNvbWUgQXNjZW5kaW5nO1xuICAgICAgICAgIHNvcnRfYnkgPSBbIERhdGVDcmVhdGVkIF07XG4gICAgICAgICAgcmVjdXJzaXZlID0gdHJ1ZTtcbiAgICAgICAgICBlbmFibGVfdXNlcl9kYXRhID0gZmFsc2U7XG4gICAgICAgICAgZW5hYmxlX2ltYWdlcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAoKVxuICBpblxuICByZXMudG90YWxfcmVjb3JkX2NvdW50XG5cbnR5cGUgZGJfaW5mb3MgPSB7XG4gIGxhc3Rfa2V5IDogaW50IG9wdGlvbjtcbiAgbGFzdF92YWx1ZSA6IFN0b3Jlcy5PcmRlcnJlZF9pdGVtcy50IG9wdGlvbjtcbn1cblxubGV0IGdldF9kYl9pbmZvcyBpZGIgPVxuICBsZXQgaW5mb3MsIHNldF9pbmZvcyA9IEZ1dC5jcmVhdGUgKCkgaW5cbiAgbGV0IHRyYW5zYWN0aW9uID0gRGF0YWJhc2UudHJhbnNhY3Rpb24gWyAobW9kdWxlIE9JKSBdIH5tb2RlOlJlYWRvbmx5IGlkYiBpblxuICBsZXQgc3RvcmUgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBPSSkgdHJhbnNhY3Rpb24gaW5cbiAgbGV0IHJlcSA9IE9JLm9wZW5fY3Vyc29yIH5kaXJlY3Rpb246UHJldiBzdG9yZSBpblxuICBsZXQgbGFzdF9rZXkgPSByZWYgTm9uZSBpblxuICBsZXQgXyA9XG4gICAgUmVxdWVzdC5vbl9zdWNjZXNzIHJlcSB+ZjooZnVuIF8gcSAtPlxuICAgICAgICBtYXRjaCBSZXF1ZXN0LnJlc3VsdCBxIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IHNldF9pbmZvcyB7IGxhc3Rfa2V5ID0gIWxhc3Rfa2V5OyBsYXN0X3ZhbHVlID0gTm9uZSB9XG4gICAgICAgIHwgU29tZSBjdXJzb3IgLT4gKFxuICAgICAgICAgICAgaWYgT3B0aW9uLmlzX25vbmUgIWxhc3Rfa2V5IHRoZW5cbiAgICAgICAgICAgICAgbGFzdF9rZXkgOj0gT0kuQ3Vyc29yX3dpdGhfdmFsdWUua2V5IGN1cnNvcjtcbiAgICAgICAgICAgIG1hdGNoIE9JLkN1cnNvcl93aXRoX3ZhbHVlLnZhbHVlIGN1cnNvciB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgKHsgaXRlbSA9IFNvbWUgXzsgXyB9IGFzIGl0ZW0pIC0+XG4gICAgICAgICAgICAgICAgc2V0X2luZm9zIHsgbGFzdF9rZXkgPSAhbGFzdF9rZXk7IGxhc3RfdmFsdWUgPSBTb21lIGl0ZW0gfVxuICAgICAgICAgICAgfCBfIC0+IE9JLkN1cnNvcl93aXRoX3ZhbHVlLmNvbnRpbnVlIGN1cnNvcikpXG4gIGluXG4gIGluZm9zXG5cbmxldCBpc19kYl9jb25zaXN0ZW50IH5zb3VyY2U6XyB+bGFzdF9zb3VyY2VfaXRlbV9rZXkgZGJfc3luY19pbmZvcyA9XG4gIGxldCBsYXN0X2tleSA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDooLTEpIGRiX3N5bmNfaW5mb3MubGFzdF9rZXkgaW5cbiAgaWYgbGFzdF9rZXkgPiBsYXN0X3NvdXJjZV9pdGVtX2tleSB0aGVuXG4gICAgKCogVGhlcmUgYXJlIGZld2VyIGl0ZW1zIGluIHRoZSBzb3VyY2UgdGhhbiBleHBlY3RlZCAqKVxuICAgIGZhbHNlXG4gIGVsc2VcbiAgICAoKiBUb2RvOiBjaGVjayB0aGF0IHRoZSBsYXN0IGtub3duIGl0ZW0gaXMgdGhlIHNhbWUgdGhhbiBpbiB0aGUgc291cmNlICopXG4gICAgdHJ1ZVxuXG50eXBlIHN0YXR1cyA9XG4gIHwgVW5rbm93blxuICB8IEluX3N5bmNcbiAgfCBJbmNvbnNpc3RlbnRcbiAgfCBOZXdfaXRlbXMgb2Yge1xuICAgICAgZmlyc3RfbWlzc2luZ19rZXkgOiBpbnQ7XG4gICAgICBmaXJzdF91bmZldGNoZWRfa2V5IDogaW50O1xuICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXkgOiBpbnQ7XG4gICAgfVxuICB8IFBhcnRpYWxfZmV0Y2ggb2YgeyBmaXJzdF91bmZldGNoZWRfa2V5IDogaW50OyBsYXN0X3NvdXJjZV9pdGVtX2tleSA6IGludCB9XG5cbnR5cGUgcHJvZ3Jlc3MgPSB7IHRvdGFsIDogaW50OyByZW1haW5pbmcgOiBpbnQgfVxudHlwZSByZXBvcnQgPSB7IHN0YXR1cyA6IHN0YXR1czsgc3luY19wcm9ncmVzcyA6IHByb2dyZXNzIG9wdGlvbiB9XG5cbmxldCBpbml0aWFsX3JlcG9ydCA9IHsgc3RhdHVzID0gVW5rbm93bjsgc3luY19wcm9ncmVzcyA9IE5vbmUgfVxuXG5sZXQgbG9nX3N0YXR1cyA9IGZ1bmN0aW9uXG4gIHwgVW5rbm93biAtPiBDb25zb2xlLmluZm8gWyBcIkRhdGFiYXNlIHN0YXR1cyBpcyB1bmtub3duXCIgXVxuICB8IEluX3N5bmMgLT4gQ29uc29sZS5pbmZvIFsgXCJEYXRhYmFzZSBpcyBzeW5jaHJvbml6ZWRcIiBdXG4gIHwgSW5jb25zaXN0ZW50IC0+IENvbnNvbGUud2FybiBbIFwiRGF0YWJhc2UgaXMgb3V0LW9mLXN5bmNcIiBdXG4gIHwgTmV3X2l0ZW1zIHsgZmlyc3RfbWlzc2luZ19rZXk7IGZpcnN0X3VuZmV0Y2hlZF9rZXk7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH1cbiAgICAtPlxuICAgICAgQ29uc29sZS5pbmZvXG4gICAgICAgIFtcbiAgICAgICAgICBcIk5ldyBpdGVtcyB3ZXJlIGFkZGVkIHRvIHRoZSBzb3VyY2UuXCI7XG4gICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXkgLSBmaXJzdF9taXNzaW5nX2tleSArIDE7XG4gICAgICAgICAgXCJuZXcgaXRlbXNcIjtcbiAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSAtIGZpcnN0X3VuZmV0Y2hlZF9rZXkgKyAxO1xuICAgICAgICAgIFwidW5mZXRjaGVkIGl0ZW1zXCI7XG4gICAgICAgIF1cbiAgfCBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfSAtPlxuICAgICAgQ29uc29sZS5pbmZvXG4gICAgICAgIFtcbiAgICAgICAgICBcIlNvbWUgaXRlbXMgaGF2ZSBub3QgYmVlbiBmZXRjaGVkIHlldC5cIjtcbiAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSAtIGZpcnN0X3VuZmV0Y2hlZF9rZXkgKyAxO1xuICAgICAgICAgIFwidW5mZXRjaGVkIGl0ZW1zXCI7XG4gICAgICAgIF1cblxubGV0IGNoZWNrX3N0YXR1cyB+c291cmNlIGlkYiA9XG4gIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgbGV0KiBkYl9pbmZvcyA9IGdldF9kYl9pbmZvcyBpZGIgaW5cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KyB0b3RhbF9pdGVtX2NvdW50ID0gZmV0Y2hfdG90YWxfaXRlbV9jb3VudCBzb3VyY2UgaW5cbiAgKCogS2V5cyBzdGFydCBhdCAwLCBpdCdzIG5hdHVyYWwgdG8gY291bnQgaXRlbSBieSBzdGFydGluZyB3aXRoIDAgKilcbiAgbGV0IGxhc3Rfc291cmNlX2l0ZW1fa2V5ID0gdG90YWxfaXRlbV9jb3VudCAtIDEgaW5cbiAgaWYgbm90IChpc19kYl9jb25zaXN0ZW50IH5zb3VyY2Ugfmxhc3Rfc291cmNlX2l0ZW1fa2V5IGRiX2luZm9zKSB0aGVuXG4gICAgSW5jb25zaXN0ZW50XG4gIGVsc2VcbiAgICBtYXRjaCBkYl9pbmZvcyB3aXRoXG4gICAgfCB7IGxhc3Rfa2V5ID0gTm9uZTsgbGFzdF92YWx1ZSA9IE5vbmUgfSAtPlxuICAgICAgICAoKiBUaGUgZGIgaGFzIG5vdCB5ZXQgYmVlbiBwb3B1bGF0ZWQgd2l0aCBwbGFjZWhvbGRlcnMgKilcbiAgICAgICAgTmV3X2l0ZW1zXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlyc3RfbWlzc2luZ19rZXkgPSAwO1xuICAgICAgICAgICAgZmlyc3RfdW5mZXRjaGVkX2tleSA9IDA7XG4gICAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleTtcbiAgICAgICAgICB9XG4gICAgfCB7IGxhc3Rfa2V5ID0gU29tZSBrZXk7IGxhc3RfdmFsdWUgPSBpdGVtIH0gd2hlbiBrZXkgPCBsYXN0X3NvdXJjZV9pdGVtX2tleVxuICAgICAgLT5cbiAgICAgICAgKCogTmV3IGl0ZW1zIHdlcmUgYWRkZWQgdG8gdGhlIHNvdXJjZSBzaW5jZSB0aGUgbGFzdCBzeW5jICopXG4gICAgICAgIGxldCBmaXJzdF91bmZldGNoZWRfa2V5ID1cbiAgICAgICAgICBtYXRjaCBpdGVtIHdpdGggTm9uZSAtPiAwIHwgU29tZSB7IGlkOyBfIH0gLT4gaWQgKyAxXG4gICAgICAgIGluXG4gICAgICAgIE5ld19pdGVtc1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpcnN0X21pc3Npbmdfa2V5ID0ga2V5ICsgMTtcbiAgICAgICAgICAgIGZpcnN0X3VuZmV0Y2hlZF9rZXk7XG4gICAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleTtcbiAgICAgICAgICB9XG4gICAgfCB7IGxhc3Rfa2V5ID0gU29tZSBrZXk7IGxhc3RfdmFsdWUgPSBpdGVtIH0gd2hlbiBrZXkgPSBsYXN0X3NvdXJjZV9pdGVtX2tleVxuICAgICAgLT4gKFxuICAgICAgICBtYXRjaCBpdGVtIHdpdGhcbiAgICAgICAgfCBTb21lIHsgaWQ7IF8gfSB3aGVuIGlkID0ga2V5IC0+IEluX3N5bmNcbiAgICAgICAgfCBTb21lIHsgaWQ7IF8gfSAtPlxuICAgICAgICAgICAgUGFydGlhbF9mZXRjaCB7IGZpcnN0X3VuZmV0Y2hlZF9rZXkgPSBpZCArIDE7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH1cbiAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleSA9IDA7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH0pXG4gICAgfCBfIC0+IEluY29uc2lzdGVudFxuXG5sZXQgdXBkYXRlX3ZpZXdzIHNvdXJjZSBpZGIgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQrIHZpZXdzID1cbiAgICBTb3VyY2UucXVlcnkgc291cmNlXG4gICAgICAobW9kdWxlIFNvdXJjZS5BcGkuVmlld3MpXG4gICAgICB7IGluY2x1ZGVfZXh0ZXJuYWxfY29udGVudCA9IGZhbHNlIH1cbiAgICAgIHsgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQgfVxuICBpblxuICBMaXN0Lml0ZXIgdmlld3MuaXRlbXMgfmY6KGZ1biAoaXRlbSA6IEl0ZW0udCkgLT5cbiAgICAgIGxldCBvcGVuIEJycl9pby5JbmRleGVkX2RiIGluXG4gICAgICBsZXQgdHJhbnNhY3Rpb24gPVxuICAgICAgICBEYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgT0kpOyAobW9kdWxlIEkpIF0gfm1vZGU6UmVhZHdyaXRlIGlkYlxuICAgICAgaW5cbiAgICAgIGxldCBzX2l0ZW1zID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgSSkgdHJhbnNhY3Rpb24gaW5cbiAgICAgIGxldCBzb3J0X25hbWUgPSBPcHRpb24udmFsdWUgaXRlbS5zb3J0X25hbWUgfmRlZmF1bHQ6aXRlbS5uYW1lIGluXG4gICAgICBJLnB1dCB7IHNvcnRzID0geyBkYXRlX2FkZGVkID0gLTE7IHZpZXdzID0gW107IHNvcnRfbmFtZSB9OyBpdGVtIH0gc19pdGVtc1xuICAgICAgfD4gaWdub3JlKTtcbiAgdmlld3NcblxubGV0IGRlZHVjZV92aXJ0dWFsX2ZvbGRlcnNfZnJvbV92aWV3cyBzb3VyY2UgKHZpZXdzIDogVmlld3MucmVzcG9uc2UpID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0IHBhcmVudF9pZHNfb2Zfdmlld19jaGlsZHJlbiB7IEl0ZW0uaWQ7IF8gfSA9XG4gICAgbGV0KyByZXMgPVxuICAgICAgU291cmNlLnF1ZXJ5IHNvdXJjZVxuICAgICAgICAobW9kdWxlIFNvdXJjZS5BcGkuSXRlbXMpXG4gICAgICAgIFNvdXJjZS5BcGkuSXRlbXMuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWRzID0gW107XG4gICAgICAgICAgICBwYXJlbnRfaWQgPSBTb21lIGlkO1xuICAgICAgICAgICAgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQ7XG4gICAgICAgICAgICBmaWVsZHMgPSBbIFBhcmVudElkIF07XG4gICAgICAgICAgICBpbmNsdWRlX2l0ZW1fdHlwZXMgPSBbXTtcbiAgICAgICAgICAgIHN0YXJ0X2luZGV4ID0gTm9uZTtcbiAgICAgICAgICAgIGxpbWl0ID0gTm9uZTtcbiAgICAgICAgICAgIHNvcnRfb3JkZXIgPSBOb25lO1xuICAgICAgICAgICAgc29ydF9ieSA9IFtdO1xuICAgICAgICAgICAgcmVjdXJzaXZlID0gZmFsc2U7XG4gICAgICAgICAgICBlbmFibGVfdXNlcl9kYXRhID0gZmFsc2U7XG4gICAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAoKVxuICAgIGluXG4gICAgTGlzdC5mb2xkX2xlZnQgfmluaXQ6U3RyaW5nLlNldC5lbXB0eSByZXMuaXRlbXNcbiAgICAgIH5mOihmdW4gc2V0IHsgSXRlbS5wYXJlbnRfaWQ7IF8gfSAtPlxuICAgICAgICBtYXRjaCBwYXJlbnRfaWQgd2l0aFxuICAgICAgICB8IE5vbmUgfCBTb21lIE5vbmUgLT4gc2V0XG4gICAgICAgIHwgU29tZSAoU29tZSBwaWQpIC0+IFN0cmluZy5TZXQuYWRkIHBpZCBzZXQpXG4gIGluXG4gIGxldCBwYXRoc19vZl9wYXJlbnRzIHBhcmVudHMgPVxuICAgIGxldCsgcmVzID1cbiAgICAgIFNvdXJjZS5xdWVyeSBzb3VyY2VcbiAgICAgICAgKG1vZHVsZSBTb3VyY2UuQXBpLkl0ZW1zKVxuICAgICAgICBTb3VyY2UuQXBpLkl0ZW1zLlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkcyA9IFN0cmluZy5TZXQudG9fbGlzdCBwYXJlbnRzO1xuICAgICAgICAgICAgcGFyZW50X2lkID0gTm9uZTtcbiAgICAgICAgICAgIHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkO1xuICAgICAgICAgICAgZmllbGRzID0gWyBQYXRoIF07XG4gICAgICAgICAgICBpbmNsdWRlX2l0ZW1fdHlwZXMgPSBbXTtcbiAgICAgICAgICAgIHN0YXJ0X2luZGV4ID0gTm9uZTtcbiAgICAgICAgICAgIGxpbWl0ID0gTm9uZTtcbiAgICAgICAgICAgIHNvcnRfb3JkZXIgPSBOb25lO1xuICAgICAgICAgICAgc29ydF9ieSA9IFtdO1xuICAgICAgICAgICAgcmVjdXJzaXZlID0gZmFsc2U7XG4gICAgICAgICAgICBlbmFibGVfdXNlcl9kYXRhID0gZmFsc2U7XG4gICAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAoKVxuICAgIGluXG4gICAgTGlzdC5maWx0ZXJfbWFwIHJlcy5pdGVtcyB+ZjooZnVuIHsgSXRlbS5pZDsgcGF0aDsgXyB9IC0+XG4gICAgICAgIE9wdGlvbi5tYXAgKGZ1biBwYXRoIC0+IChpZCwgcGF0aCkpIHBhdGgpXG4gIGluXG4gIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgbGV0KyByZXN1bHQgPVxuICAgIExpc3QubWFwIHZpZXdzLml0ZW1zIH5mOihmdW4gKHsgSXRlbS5pZDsgXyB9IGFzIHZpZXcpIC0+XG4gICAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgIGxldCogcGFyZW50cyA9IHBhcmVudF9pZHNfb2Zfdmlld19jaGlsZHJlbiB2aWV3IGluXG4gICAgICAgIGxldCsgcGF0aHMgPSBwYXRoc19vZl9wYXJlbnRzIHBhcmVudHMgaW5cbiAgICAgICAgKGlkLCBwYXRocykpXG4gICAgfD4gRnV0Lm9mX2xpc3RcbiAgaW5cbiAgUmVzdWx0LmZsYXR0ZW5fbCByZXN1bHRcblxubGV0IHZpZXdzX29mX3BhdGggKHZmb2xkZXJzIDogKHN0cmluZyAqIChzdHJpbmcgKiBzdHJpbmcpIGxpc3QpIGxpc3QpIHBhdGggPVxuICAoKiBXZSBsb29rIGF0IHRoZSBwcmVmaXggb2YgYSBwYXRoIHRvIGRldGVybWluZSB3aGljaCB2aXJ0dWFsX2ZvbGRlciAoYW5kIHRodXNcbiAgICAgdmlldykgaXQncyBhIHBhcnQgb2YuICopXG4gIExpc3QuZmlsdGVyX21hcCB2Zm9sZGVycyB+ZjooZnVuICh2aWV3X2lkLCBsb2NhdGlvbnMpIC0+XG4gICAgICBpZiBMaXN0LmV4aXN0cyBsb2NhdGlvbnMgfmY6KGZ1biAoXywgcHJlKSAtPiBTdHJpbmcucHJlZml4IH5wcmUgcGF0aCkgdGhlblxuICAgICAgICBTb21lIHZpZXdfaWRcbiAgICAgIGVsc2UgTm9uZSlcblxubGV0IHN5bmMgPyhyZXBvcnQgPSBmdW4gXyAtPiAoKSkgfihzb3VyY2UgOiBTb3VyY2UuY29ubmV4aW9uKSBpZGIgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQgbWFrZV9wbGFjZWhvbGRlcnMgZmlyc3QgbGFzdCA9XG4gICAgKCogdG9kbzogZXJyb3IgaGFuZGxpbmcgKilcbiAgICBsZXQgdHJhbnNhY3Rpb24gPVxuICAgICAgRGF0YWJhc2UudHJhbnNhY3Rpb24gWyAobW9kdWxlIE9JKSBdIH5tb2RlOlJlYWR3cml0ZSBpZGJcbiAgICBpblxuICAgIGxldCBzdG9yZSA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB0cmFuc2FjdGlvbiBpblxuICAgIGZvciBpID0gZmlyc3QgdG8gbGFzdCBkb1xuICAgICAgaWdub3JlIEBAIE9JLnB1dCB7IGlkID0gaTsgaXRlbSA9IE5vbmUgfSBzdG9yZVxuICAgIGRvbmVcbiAgaW5cbiAgbGV0IGZldGNoX21pc3NpbmdfaXRlbXMgZmlyc3QgbGFzdCA9XG4gICAgbGV0IG9wZW4gU291cmNlIGluXG4gICAgbGV0KiB2aWV3cyA9IHVwZGF0ZV92aWV3cyBzb3VyY2UgaWRiIGluXG4gICAgbGV0KiB2Zm9sZGVycyA9IGRlZHVjZV92aXJ0dWFsX2ZvbGRlcnNfZnJvbV92aWV3cyBzb3VyY2Ugdmlld3MgaW5cbiAgICBsZXQgKCkgPSBDb25zb2xlLmluZm8gWyBcIkZldGNoaW5nIGl0ZW1zXCI7IGZpcnN0OyBcInRvXCI7IGxhc3Q7IFwiOlwiIF0gaW5cbiAgICBsZXQgZmV0Y2hfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgICBsZXQgdG90YWwgPSBsYXN0IC0gZmlyc3QgKyAxIGluXG4gICAgbGV0IHJlYyBlbnF1ZXVlIH5zdGFydF9pbmRleCB0b2RvID1cbiAgICAgIGlmIHRvZG8gPiAwIHRoZW4gKFxuICAgICAgICBsZXQgbGltaXQgPSBtaW4gdG9kbyBjaHVua19zaXplIGluXG4gICAgICAgIGxldCByZXEgPVxuICAgICAgICAgIEFwaS5JdGVtcy5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgKCogdG9kbyBtYWtlIHNvcnQgZXhwbGljaXQgKGJ5IGRhdGUgYWRkZWQgZGF0ZSkgKilcbiAgICAgICAgICAgICAgaWRzID0gW107XG4gICAgICAgICAgICAgIHBhcmVudF9pZCA9IE5vbmU7XG4gICAgICAgICAgICAgIHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkO1xuICAgICAgICAgICAgICBmaWVsZHMgPSBbIFBhcmVudElkOyBQYXRoIF07XG4gICAgICAgICAgICAgIGluY2x1ZGVfaXRlbV90eXBlcztcbiAgICAgICAgICAgICAgc3RhcnRfaW5kZXggPSBTb21lIHN0YXJ0X2luZGV4O1xuICAgICAgICAgICAgICBsaW1pdCA9IFNvbWUgbGltaXQ7XG4gICAgICAgICAgICAgIHNvcnRfb3JkZXIgPSBTb21lIEFzY2VuZGluZztcbiAgICAgICAgICAgICAgc29ydF9ieSA9IFsgRGF0ZUNyZWF0ZWQgXTtcbiAgICAgICAgICAgICAgcmVjdXJzaXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgZW5hYmxlX3VzZXJfZGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgaW5cbiAgICAgICAgUXVldWUuYWRkIHJlcSBmZXRjaF9xdWV1ZTtcbiAgICAgICAgZW5xdWV1ZSB+c3RhcnRfaW5kZXg6KHN0YXJ0X2luZGV4ICsgbGltaXQpICh0b2RvIC0gbGltaXQpKVxuICAgIGluXG4gICAgZW5xdWV1ZSB+c3RhcnRfaW5kZXg6Zmlyc3QgdG90YWw7XG4gICAgbGV0IHRvdGFsX3F1ZXJpZXMgPSBRdWV1ZS5sZW5ndGggZmV0Y2hfcXVldWUgaW5cbiAgICBsZXQgcmVjIHJ1bl9xdWV1ZSA/KHRocmVhZHMgPSAxKSBxID1cbiAgICAgIGFzc2VydCAodGhyZWFkcyA+IDApO1xuICAgICAgbGV0IHJlYyB0YWtlX24gYWNjIG4gPVxuICAgICAgICBpZiBuID0gMCB0aGVuIExpc3QucmV2IGFjY1xuICAgICAgICBlbHNlXG4gICAgICAgICAgbWF0Y2ggUXVldWUudGFrZV9vcHQgcSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+IExpc3QucmV2IGFjY1xuICAgICAgICAgIHwgU29tZSBlbHQgLT4gdGFrZV9uIChlbHQgOjogYWNjKSAobiAtIDEpXG4gICAgICBpblxuICAgICAgbGV0IGYgcmVxID1cbiAgICAgICAgbGV0KyB7IEFwaS5JdGVtcy5zdGFydF9pbmRleDsgaXRlbXM7IF8gfSA9XG4gICAgICAgICAgcXVlcnkgc291cmNlIChtb2R1bGUgQXBpLkl0ZW1zKSByZXEgKClcbiAgICAgICAgaW5cbiAgICAgICAgbGV0ICgpID1cbiAgICAgICAgICByZXBvcnRcbiAgICAgICAgICBAQCBTb21lXG4gICAgICAgICAgICAgICB7IHRvdGFsID0gdG90YWxfcXVlcmllczsgcmVtYWluaW5nID0gUXVldWUubGVuZ3RoIGZldGNoX3F1ZXVlIH1cbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGlkYl9wdXQgfnN0YXJ0X2luZGV4IGl0ZW1zID1cbiAgICAgICAgICBsZXQgb3BlbiBCcnJfaW8uSW5kZXhlZF9kYiBpblxuICAgICAgICAgIGxldCB0cmFuc2FjdGlvbiA9XG4gICAgICAgICAgICBEYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgT0kpOyAobW9kdWxlIEkpIF0gfm1vZGU6UmVhZHdyaXRlIGlkYlxuICAgICAgICAgIGluXG4gICAgICAgICAgbGV0IHNfbGlzdCA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB0cmFuc2FjdGlvbiBpblxuICAgICAgICAgIGxldCBzX2l0ZW1zID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgSSkgdHJhbnNhY3Rpb24gaW5cbiAgICAgICAgICBMaXN0Lml0ZXJpIGl0ZW1zIH5mOihmdW4gaW5kZXggKHsgQXBpLkl0ZW0uaWQ7IHBhdGg7IF8gfSBhcyBpdGVtKSAtPlxuICAgICAgICAgICAgICBsZXQgaW5kZXggPSBzdGFydF9pbmRleCArIGluZGV4IGluXG4gICAgICAgICAgICAgIGxldCBwYXRoID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OlwiXCIgcGF0aCBpblxuICAgICAgICAgICAgICBsZXQgdmlld3MgPSB2aWV3c19vZl9wYXRoIHZmb2xkZXJzIHBhdGggaW5cbiAgICAgICAgICAgICAgbGV0IHNvcnRfbmFtZSA9IE9wdGlvbi52YWx1ZSBpdGVtLnNvcnRfbmFtZSB+ZGVmYXVsdDppdGVtLm5hbWUgaW5cbiAgICAgICAgICAgICAgaWdub3JlIChPSS5wdXQgeyBpZCA9IGluZGV4OyBpdGVtID0gU29tZSBpZCB9IHNfbGlzdCk7XG4gICAgICAgICAgICAgIGlnbm9yZVxuICAgICAgICAgICAgICAgIChJLnB1dFxuICAgICAgICAgICAgICAgICAgIHsgc29ydHMgPSB7IGRhdGVfYWRkZWQgPSBpbmRleDsgdmlld3M7IHNvcnRfbmFtZSB9OyBpdGVtIH1cbiAgICAgICAgICAgICAgICAgICBzX2l0ZW1zKSlcbiAgICAgICAgaW5cbiAgICAgICAgaWRiX3B1dCB+c3RhcnRfaW5kZXggaXRlbXNcbiAgICAgIGluXG4gICAgICBsZXQgcmVxcyA9IHRha2VfbiBbXSB0aHJlYWRzIGluXG4gICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICBsZXQqIHJlcXMgPSBGdXQub2ZfbGlzdCAoTGlzdC5tYXAgfmYgcmVxcykgaW5cbiAgICAgIGlmIExpc3QuaXNfZW1wdHkgcmVxcyB0aGVuIEZ1dC5vayAoKSBlbHNlIHJ1bl9xdWV1ZSBxXG4gICAgaW5cbiAgICBydW5fcXVldWUgZmV0Y2hfcXVldWVcbiAgaW5cbiAgZnVuY3Rpb25cbiAgfCBOZXdfaXRlbXMgeyBmaXJzdF9taXNzaW5nX2tleTsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfVxuICAgIC0+XG4gICAgICBtYWtlX3BsYWNlaG9sZGVycyBmaXJzdF9taXNzaW5nX2tleSBsYXN0X3NvdXJjZV9pdGVtX2tleTtcbiAgICAgIGZldGNoX21pc3NpbmdfaXRlbXMgZmlyc3RfdW5mZXRjaGVkX2tleSBsYXN0X3NvdXJjZV9pdGVtX2tleVxuICB8IFBhcnRpYWxfZmV0Y2ggeyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9IC0+XG4gICAgICBmZXRjaF9taXNzaW5nX2l0ZW1zIGZpcnN0X3VuZmV0Y2hlZF9rZXkgbGFzdF9zb3VyY2VfaXRlbV9rZXlcbiAgfCBJbmNvbnNpc3RlbnQgLT4gRnV0Lm9rICgpXG4gIHwgXyAtPiBGdXQub2sgKClcblxubGV0IGNoZWNrX2FuZF9zeW5jID9yZXBvcnQgfnNvdXJjZSBpZGIgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQqIHN0YXR1cyA9IGNoZWNrX3N0YXR1cyB+c291cmNlIGlkYiBpblxuICBsZXQgaW5pdGlhbCA9IHsgaW5pdGlhbF9yZXBvcnQgd2l0aCBzdGF0dXMgfSBpblxuICBsZXQgcmVwb3J0JyA9XG4gICAgT3B0aW9uLm1hcFxuICAgICAgKGZ1biByZXBvcnQgLT5cbiAgICAgICAgbGV0ICgpID0gKCogU2VuZCBhIGZpcnN0IHJlcG9ydCAqKSByZXBvcnQgaW5pdGlhbCBpblxuICAgICAgICBmdW4gc3luY19wcm9ncmVzcyAtPiByZXBvcnQgeyBpbml0aWFsIHdpdGggc3luY19wcm9ncmVzcyB9KVxuICAgICAgcmVwb3J0XG4gIGluXG4gIGxldCsgKCkgPSBzeW5jID9yZXBvcnQ6cmVwb3J0JyB+c291cmNlIGlkYiBzdGF0dXMgaW5cbiAgT3B0aW9uLml0ZXJcbiAgICAoZnVuIHJlcG9ydCAtPiByZXBvcnQgeyBzdGF0dXMgPSBJbl9zeW5jOyBzeW5jX3Byb2dyZXNzID0gTm9uZSB9KVxuICAgIHJlcG9ydFxuIiwidHlwZSBsYW5nJyA9IEZyIHwgRW5cblxubW9kdWxlIENvbmZpZyA6IEJycl9sd2RfdWkuVHJhbnNsYXRlZC5Db25maWcgd2l0aCB0eXBlIGxhbmcgPSBsYW5nJyA9IHN0cnVjdFxuICB0eXBlIGxhbmcgPSBsYW5nJ1xuXG4gIGxldCBzdHJpbmdzID1cbiAgICBbXG4gICAgICAoKEZyLCBcImNsaWNrXCIpLCBcIkNsaXF1ZXogc3VyIGxlIGJvdXRvbiAhXCIpO1xuICAgICAgKChFbiwgXCJjbGlja1wiKSwgXCJDbGljayBvbiB0aGUgQnV0dG9uICFcIik7XG4gICAgXVxuXG4gIGxldCBhY3RpdmUgPSBMd2QudmFyIEZyXG5cbiAgbGV0IGdldCBsYW5nIHN0cmluZyA9XG4gICAgTGlzdC5hc3NvY19vcHQgKGxhbmcsIHN0cmluZykgc3RyaW5ncyB8PiBPcHRpb24udmFsdWUgfmRlZmF1bHQ6c3RyaW5nXG5lbmRcblxubGV0IHNldCwgX3MgPSBCcnJfbHdkX3VpLlRyYW5zbGF0ZWQubWFrZSAobW9kdWxlIENvbmZpZylcbmxldCBfcyBzIGYgPSBMd2QubWFwIChfcyBzKSB+ZlxuIiwiaW5jbHVkZSBEYi5Xb3JrZXJfYXBpLlN0YXJ0X2NsaWVudCAoc3RydWN0XG4gIGxldCB1cmwgPSBcIi4vZGJfd29ya2VyLmJjLmpzXCJcbmVuZClcbiIsIm9wZW4gSW1wb3J0XG5vcGVuIEJyclxuXG50eXBlIHNlcnZlciA9IHtcbiAgY29ubmV4aW9uIDogRFMuY29ubmV4aW9uO1xuICBzdGF0dXMgOiBEYi5TeW5jLnJlcG9ydCBMd2QudmFyO1xuICByZWZyZXNoIDogdW5pdCBMd2QudmFyO1xufVxuXG5sZXQgY29ubmV4aW9ucyA6IChzdHJpbmcgKiBEUy5jb25uZXhpb24pIEx3ZF9zZXEudCBMd2QudmFyID1cbiAgQnJyX2x3ZF91aS5QZXJzaXN0ZW50LnZhciB+a2V5OlwidWlfc2VydmVyc1wiIEx3ZF9zZXEuZW1wdHlcblxubGV0IGNvbm5lY3QgKHNlcnZlcl9pZCwgeyBjb25uZXhpb247IHN0YXR1czsgcmVmcmVzaCB9KSA9XG4gIGxldCBfID1cbiAgICBXb3JrZXJfY2xpZW50Lmxpc3RlbiBTZXJ2ZXJzX3N0YXR1c191cGRhdGUgfmY6KGZ1biAoaWQsIHJlcG9ydCkgLT5cbiAgICAgICAgKCogVE9ETzogc3Vic2NyaWJlIHRvIGEgc3BlY2lmaWMgc2VydmVyJ3MgdXBkYXRlcyAqKVxuICAgICAgICBsZXQgcHJldmlvdXNfc3RhdHVzID0gTHdkLnBlZWsgc3RhdHVzIGluXG4gICAgICAgIGlmIFN0cmluZy5lcXVhbCBzZXJ2ZXJfaWQgaWQgdGhlbiAoXG4gICAgICAgICAgTHdkLnNldCBzdGF0dXMgcmVwb3J0O1xuICAgICAgICAgIG1hdGNoIChwcmV2aW91c19zdGF0dXMuc3luY19wcm9ncmVzcywgcmVwb3J0LnN5bmNfcHJvZ3Jlc3MpIHdpdGhcbiAgICAgICAgICB8IFNvbWUgeyByZW1haW5pbmc7IF8gfSwgU29tZSB7IHJlbWFpbmluZyA9IHJlbWFpbmluZyc7IF8gfVxuICAgICAgICAgICAgd2hlbiByZW1haW5pbmcgPD4gcmVtYWluaW5nJyAtPlxuICAgICAgICAgICAgICBMd2Quc2V0IHJlZnJlc2ggKClcbiAgICAgICAgICB8IFNvbWUgeyByZW1haW5pbmc7IF8gfSwgTm9uZSAtPiBMd2Quc2V0IHJlZnJlc2ggKClcbiAgICAgICAgICB8IF8gLT4gKCkpKVxuICBpblxuICBpZ25vcmUgKFdvcmtlcl9jbGllbnQucXVlcnkgQEAgQWRkX3NlcnZlcnMgWyAoc2VydmVyX2lkLCBjb25uZXhpb24pIF0pXG5cbmxldCBzZXJ2ZXJzX3dpdGhfc3RhdHVzID1cbiAgTHdkX3NlcS5tYXBcbiAgICAoZnVuIChpZCwgY29ubmV4aW9uKSAtPlxuICAgICAgbGV0IHN0YXR1cyA9IEx3ZC52YXIgRGIuU3luYy5pbml0aWFsX3JlcG9ydCBpblxuICAgICAgbGV0IHJlZnJlc2ggPSBMd2QudmFyICgpIGluXG4gICAgICBsZXQgc2VydmVyID0gKGlkLCB7IGNvbm5leGlvbjsgc3RhdHVzOyByZWZyZXNoIH0pIGluXG4gICAgICBjb25uZWN0IHNlcnZlcjtcbiAgICAgIHNlcnZlcilcbiAgICAoTHdkLmdldCBjb25uZXhpb25zKVxuXG5sZXQgbmV3X2Nvbm5leGlvbiB+YmFzZV91cmwgfnVzZXJuYW1lIH5wYXNzd29yZCA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgY29ubmV4aW9uID0gRFMuY29ubmVjdCB7IGJhc2VfdXJsOyB1c2VybmFtZTsgcGFzc3dvcmQgfSBpblxuICBsZXQgc2VydmVyX2lkID0gY29ubmV4aW9uLmF1dGhfcmVzcG9uc2Uuc2VydmVyX2lkIGluXG4gICgqIFRPRE8gQ0hFQ0sgU0VSVkVSIElEICopXG4gIEx3ZC51cGRhdGVcbiAgICAoZnVuIHNlcnZlcnMgLT4gTHdkX3NlcS4oY29uY2F0IHNlcnZlcnMgKGVsZW1lbnQgKHNlcnZlcl9pZCwgY29ubmV4aW9uKSkpKVxuICAgIGNvbm5leGlvbnNcblxubW9kdWxlIENvbm5lY3RfZm9ybSA9IHN0cnVjdFxuICBvcGVuIEJycl9sd2RfdWkuRm9ybVxuXG4gIHR5cGUgdCA9IHtcbiAgICB1cmwgOiBzdHJpbmcgRmllbGQudmFsaWRhdGlvbjtcbiAgICB1c2VybmFtZSA6IHN0cmluZyBGaWVsZC52YWxpZGF0aW9uO1xuICAgIHBhc3N3b3JkIDogc3RyaW5nIEZpZWxkLnZhbGlkYXRpb247XG4gIH1cblxuICBsZXQgZGVmYXVsdCA9IHsgdXJsID0gRW1wdHk7IHVzZXJuYW1lID0gRW1wdHk7IHBhc3N3b3JkID0gRW1wdHkgfVxuXG4gIGxldCBmaWVsZHMgPVxuICAgIGxldCB1cmxfZmllbGQgPVxuICAgICAgZmllbGRcbiAgICAgICAgKEx3ZC5wdXJlXG4gICAgICAgIEBAIEZpZWxkLnRleHRfaW5wdXQgfnJlcXVpcmVkOnRydWUgKFNvbWUgXCJodHRwOi8vbG9jYWxob3N0OjgwOTZcIikpXG4gICAgICAgIChmdW4gdCB2IC0+IHsgdCB3aXRoIHVybCA9IHYgfSlcbiAgICBpblxuICAgIGxldCB1c2VybmFtZV9maWVsZCA9XG4gICAgICBmaWVsZFxuICAgICAgICAoTHdkLnB1cmUgQEAgRmllbGQudGV4dF9pbnB1dCB+cmVxdWlyZWQ6dHJ1ZSBOb25lKVxuICAgICAgICAoZnVuIHQgdiAtPiB7IHQgd2l0aCB1c2VybmFtZSA9IHYgfSlcbiAgICBpblxuICAgIGxldCBwYXNzd29yZF9maWVsZCA9XG4gICAgICBmaWVsZFxuICAgICAgICAoTHdkLnB1cmUgQEAgRmllbGQucGFzc3dvcmRfaW5wdXQgfnJlcXVpcmVkOnRydWUgTm9uZSlcbiAgICAgICAgKGZ1biB0IHYgLT4geyB0IHdpdGggcGFzc3dvcmQgPSB2IH0pXG4gICAgaW5cbiAgICBsZXQgc3VibWl0ID1cbiAgICAgIGZpZWxkIChMd2QucHVyZSBAQCBGaWVsZC5zdWJtaXQgKGBQIFwiQ29ubmVjdFwiKSkgKGZ1biB0IF92IC0+IHQpXG4gICAgaW5cbiAgICBMd2QucmV0dXJuXG4gICAgICAoTHdkX3NlcS5vZl9saXN0IFsgdXJsX2ZpZWxkOyB1c2VybmFtZV9maWVsZDsgcGFzc3dvcmRfZmllbGQ7IHN1Ym1pdCBdKVxuZW5kXG5cbmxldCB1aV9mb3JtICgpID1cbiAgbGV0IG9wZW4gQnJyX2x3ZF91aS5Gb3JtIGluXG4gIGNyZWF0ZVxuICAgIChtb2R1bGUgQ29ubmVjdF9mb3JtKVxuICAgIChmdW4gdCAtPlxuICAgICAgQ29uc29sZS5sb2cgWyBcIkZvcm0gc3VibWl0dGVkOlwiOyB0IF07XG4gICAgICBtYXRjaCB0IHdpdGhcbiAgICAgICgqIEZJWE1FOiB2YWxpZGF0aW9uIGFscmVhZHkgaGFwcGVuZWQsIGl0J3MgcmVkdW5kYW50IHRvIGhhdmUgdG8gbWF0Y2ggKilcbiAgICAgIHwgeyB1cmwgPSBPayB1cmw7IHVzZXJuYW1lID0gT2sgdXNlcm5hbWU7IHBhc3N3b3JkID0gT2sgcGFzc3dvcmQgfSAtPlxuICAgICAgICAgIENvbnNvbGUubG9nIFsgXCJGb3JtIHN1Ym1pdHRlZDpcIjsgdXJsOyB1c2VybmFtZSBdO1xuICAgICAgICAgIGlnbm9yZSBAQCBuZXdfY29ubmV4aW9uIH5iYXNlX3VybDp1cmwgfnVzZXJuYW1lIH5wYXNzd29yZFxuICAgICAgfCBfIC0+ICgpKVxuXG5sZXQgdWlfc3RhdHVzIHNlcnZlciA9XG4gIGxldCBzdGF0dXMgPVxuICAgIEx3ZC5tYXAgKEx3ZC5nZXQgc2VydmVyLnN0YXR1cykgfmY6KGZ1biB7IHN0YXR1czsgc3luY19wcm9ncmVzcyB9IC0+XG4gICAgICAgIG1hdGNoIChzdGF0dXMsIHN5bmNfcHJvZ3Jlc3MpIHdpdGhcbiAgICAgICAgfCBJbl9zeW5jLCBOb25lIC0+IEVsLnR4dCcgXCJTeW5jaHJvbml6ZWRcIlxuICAgICAgICB8IF8sIFNvbWUgeyBEYi5TeW5jLnRvdGFsOyByZW1haW5pbmcgfSAtPlxuICAgICAgICAgICAgRWwudHh0J1xuICAgICAgICAgICAgQEAgUHJpbnRmLnNwcmludGYgXCJTeW5jIGluIHByb2dyZXNzOiAlaS8laVwiICh0b3RhbCAtIHJlbWFpbmluZylcbiAgICAgICAgICAgICAgICAgdG90YWxcbiAgICAgICAgfCBfIC0+IEVsLnR4dCcgXCJEZXN5bmNocm9uaXplZFwiKVxuICBpblxuICBzdGF0dXNcblxubGV0IGZ1dF90b19sd2QgfmluaXQgZiA9XG4gIGxldCB2ID0gTHdkLnZhciBpbml0IGluXG4gIGxldCAoKSA9IEZ1dC5hd2FpdCBmIChMd2Quc2V0IHYpIGluXG4gIEx3ZC5nZXQgdlxuXG5sZXQgc2VydmVyc19saWJyYXJpZXMgPVxuICBMd2Rfc2VxLm1hcFxuICAgIChmdW4gKHNlcnZlcl9pZCwgeyByZWZyZXNoOyBfIH0pIC0+XG4gICAgICBsZXQgdmlld3MgPVxuICAgICAgICBMd2QuYmluZCAoTHdkLmdldCByZWZyZXNoKSB+ZjooZnVuICgpIC0+XG4gICAgICAgICAgICBXb3JrZXJfY2xpZW50LnF1ZXJ5IChHZXRfc2VydmVyX2xpYnJhcmllcyBzZXJ2ZXJfaWQpXG4gICAgICAgICAgICB8PiBGdXQubWFwIChSZXN1bHQuZ2V0X29yIH5kZWZhdWx0OltdKVxuICAgICAgICAgICAgfD4gZnV0X3RvX2x3ZCB+aW5pdDpbXSlcbiAgICAgIGluXG4gICAgICAoc2VydmVyX2lkLCB2aWV3cykpXG4gICAgc2VydmVyc193aXRoX3N0YXR1c1xuXG5sZXQgdWkgKCkgPVxuICBsZXQgc3RhdHVzZXMgPVxuICAgIEx3ZF9zZXEubWFwIChmdW4gKF8sIHNlcnZlcikgLT4gdWlfc3RhdHVzIHNlcnZlcikgc2VydmVyc193aXRoX3N0YXR1c1xuICBpblxuICBsZXQgdWlfZm9ybSA9XG4gICAgTHdkLm1hcCBzZXJ2ZXJzX3dpdGhfc3RhdHVzIH5mOihmdW4gcyAtPlxuICAgICAgICBtYXRjaCBMd2Rfc2VxLnZpZXcgcyB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gTHdkX3NlcS5lbGVtZW50IEBAIEVsd2QuZGl2IFsgYFIgKHVpX2Zvcm0gKCkpIF1cbiAgICAgICAgfCBfIC0+IEx3ZF9zZXEuZW1wdHkpXG4gIGluXG4gIEVsd2QuZGl2IFsgYFMgKEx3ZF9zZXEubGlmdCB1aV9mb3JtKTsgYFMgKEx3ZF9zZXEubGlmdCBzdGF0dXNlcykgXVxuIiwib3BlbiEgSW1wb3J0XG5vcGVuIEJyclxub3BlbiBCcnJfbHdkXG5cbnR5cGUgcGxheXN0YXRlID0ge1xuICBwbGF5bGlzdCA6IERiLlZpZXcudCBvcHRpb24gTHdkLnZhcjtcbiAgY3VycmVudF9pbmRleCA6IGludCBMd2QudmFyO1xufVxuXG50eXBlIHQgPSBFbHdkLnQgTHdkLnRcblxubGV0IHBsYXlzdGF0ZSA9IHsgcGxheWxpc3QgPSBMd2QudmFyIE5vbmU7IGN1cnJlbnRfaW5kZXggPSBMd2QudmFyIDAgfVxuXG50eXBlIG5vd19wbGF5aW5nID0geyBpdGVtIDogRFMuQXBpLkl0ZW0udDsgdXJsIDogc3RyaW5nIH1cblxubGV0IG5vd19wbGF5aW5nID0gTHdkLnZhciBOb25lXG5cbigqIHNlZSBodHRwczovL2dpdGh1Yi5jb20vamVsbHlmaW4vamVsbHlmaW4vYmxvYi80Nzg2OTAxYmI3OTZjM2U5MTJmMTNiNjg2NTcxZmRlOGQxNmY0OWM1L3Rlc3RzL0plbGx5ZmluLk1vZGVsLlRlc3RzL1Rlc3QlMjBEYXRhL0RldmljZVByb2ZpbGUtRmlyZWZveC5qc29uICopXG5cbigqKiBQbGF5YmFjayBpc3N1ZSB3aXRoIGFsYWMgZmlsZXMgKGFuZCBwcm9iYWJseSBhbGwgY29kZWNzIG5vbi1uYXRpdmVseVxuICAgICAgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyKVxuICAgIC0gU29tZSBjbGllbnRzIChzb25peGQpIGdpdmUgdXAsIG1wdiBiYXNlZCBwbGF5ZXJzIHdvcmsuXG4gICAgLSBUaGUgb2ZmaWNpYWwgY2xpZW50IG1hbmFnZSB0byBwbGF5IHRoZSBmaWxlIGJ1dCBnaXZlcyBhIGJsb2IgdG8gdGhlIGF1ZGlvXG4gICAgICBwbGF5ZXIgaW5zdGVhZCBvZiBhIGhscyB1cmwgYXMgaXQgZG9lcyBmb3Igb3RoZXIgZmlsZXMuXG4gICAgLSBKZWxseWZpbiBzaG91bGQgdXNlIHRoZSBkZXZpY2UgaWQgYW5kIGFzc29jaWF0ZWQgY2FwYWJpbGl0aWVzIHRvXG4gICAgICBhdXRvbWF0aWNhbGx5IHRyYW5zY29kZSwgc2hvdWxkbid0IGl0ID9cblxuKilcbmxldCBhdWRpb191cmwgKHNlcnZlciA6IERTLmNvbm5leGlvbikgaXRlbV9pZCA9XG4gIFByaW50Zi5zcHJpbnRmXG4gICAgXCIlcy9BdWRpby8lcy91bml2ZXJzYWw/YXBpX2tleT0lcyZhdWRpb0NvZGVjPWFhYyZjb250YWluZXI9b3B1cyxtcDMsYWFjLG00YSxtNGIsZmxhYyx3YXYsb2dnJnRyYW5zY29kaW5nQ29udGFpbmVyPXRzJnRyYW5zY29kaW5nUHJvdG9jb2w9aGxzXCJcbiAgICBzZXJ2ZXIuYmFzZV91cmwgaXRlbV9pZCBzZXJ2ZXIuYXV0aF9yZXNwb25zZS5hY2Nlc3NfdG9rZW5cblxubW9kdWxlIFBsYXliYWNrX2NvbnRyb2xsZXIgKFAgOiBzaWdcbiAgdmFsIGZldGNoIDpcbiAgICBEYi5WaWV3LnQgLT5cbiAgICBpbnQgYXJyYXkgLT5cbiAgICAoRGIuU3RvcmVzLkl0ZW1zLnQgb3B0aW9uIGFycmF5LCBEYi5Xb3JrZXJfYXBpLmVycm9yKSBGdXQucmVzdWx0XG5lbmQpID1cbnN0cnVjdFxuICBsZXQgc2V0X3BsYXlfdXJsIHBsYXlsaXN0IGN1cnJlbnRfaW5kZXggPVxuICAgIG1hdGNoIHBsYXlsaXN0IHdpdGhcbiAgICB8IE5vbmUgLT4gRnV0Lm9rICgpXG4gICAgfCBTb21lIHBsYXlsaXN0IC0+XG4gICAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgIGxldCsgaXRlbSA9XG4gICAgICAgICAgbGV0KyByZXN1bHQgPSBQLmZldGNoIHBsYXlsaXN0IFt8IGN1cnJlbnRfaW5kZXggfF0gaW5cbiAgICAgICAgICBtYXRjaCByZXN1bHQgd2l0aFxuICAgICAgICAgIHwgW3wgU29tZSB7IERiLlN0b3Jlcy5JdGVtcy5pdGVtOyBfIH0gfF0gLT5cbiAgICAgICAgICAgICAgbGV0IHsgRFMuQXBpLkl0ZW0uc2VydmVyX2lkOyBpZDsgYWxidW1faWQ7IG5hbWU7IF8gfSA9IGl0ZW0gaW5cbiAgICAgICAgICAgICAgbGV0IHNlcnZlcnMgPSBMd2Rfc2VxLnRvX2xpc3QgKEx3ZC5wZWVrIFNlcnZlcnMuY29ubmV4aW9ucykgaW5cbiAgICAgICAgICAgICAgbGV0IGNvbm5leGlvbiA6IERTLmNvbm5leGlvbiA9IExpc3QuYXNzcSBzZXJ2ZXJfaWQgc2VydmVycyBpblxuICAgICAgICAgICAgICBsZXQgdXJsID0gYXVkaW9fdXJsIGNvbm5leGlvbiBpZCBpblxuICAgICAgICAgICAgICBsZXQgKCkgPSBDb25zb2xlLmxvZyBbIFwiTm93IHBsYXlpbmc6XCI7IG5hbWU7IEp2Lm9mX3N0cmluZyB1cmwgXSBpblxuICAgICAgICAgICAgICBsZXQgKCkgPVxuICAgICAgICAgICAgICAgIGxldCBvcGVuIEJycl9pby5NZWRpYS5TZXNzaW9uIGluXG4gICAgICAgICAgICAgICAgbGV0IHNlc3Npb24gPSBvZl9uYXZpZ2F0b3IgRy5uYXZpZ2F0b3IgaW5cbiAgICAgICAgICAgICAgICBsZXQgaW1hZ2VfaWQgPSBPcHRpb24udmFsdWUgfmRlZmF1bHQ6aWQgYWxidW1faWQgaW5cbiAgICAgICAgICAgICAgICBsZXQgaW1nX3NyYyA9XG4gICAgICAgICAgICAgICAgICBQcmludGYuc3ByaW50ZlxuICAgICAgICAgICAgICAgICAgICBcIiVzL0l0ZW1zLyVzL0ltYWdlcy9QcmltYXJ5P3dpZHRoPTUwMCZmb3JtYXQ9SnBnXCJcbiAgICAgICAgICAgICAgICAgICAgY29ubmV4aW9uLmJhc2VfdXJsIGltYWdlX2lkXG4gICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBuYW1lIGluXG4gICAgICAgICAgICAgICAgbGV0IGFsYnVtID0gXCJcIiBpblxuICAgICAgICAgICAgICAgIGxldCBhcnRpc3QgPSBcIlwiIGluXG4gICAgICAgICAgICAgICAgbGV0IGFydHdvcmsgPVxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgTWVkaWFfbWV0YWRhdGEuc3JjID0gaW1nX3NyYztcbiAgICAgICAgICAgICAgICAgICAgICBzaXplcyA9IFwiNTAweDUwMFwiO1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGUnID0gXCJpbWFnZS9qcGVnXCI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICBDb25zb2xlLmxvZyBbIGFydHdvcmsgXTtcbiAgICAgICAgICAgICAgICBzZXRfbWV0YWRhdGEgc2Vzc2lvbiB7IHRpdGxlOyBhcnRpc3Q7IGFsYnVtOyBhcnR3b3JrIH1cbiAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgeyBpdGVtOyB1cmwgfVxuICAgICAgICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgaW5cbiAgICAgICAgTHdkLnNldCBub3dfcGxheWluZyAoU29tZSBpdGVtKVxuXG4gIGxldCByZXNldF9wbGF5bGlzdCBwbGF5bGlzdCA9XG4gICAgaWdub3JlIEBAIHNldF9wbGF5X3VybCAoU29tZSBwbGF5bGlzdCkgMDtcbiAgICBMd2Quc2V0IHBsYXlzdGF0ZS5wbGF5bGlzdCAoU29tZSBwbGF5bGlzdCk7XG4gICAgTHdkLnNldCBwbGF5c3RhdGUuY3VycmVudF9pbmRleCAwXG5cbiAgbGV0IG1ha2UgKCkgPVxuICAgIGxldCBhdWRpb19lbHQgPVxuICAgICAgRWwuYXVkaW9cbiAgICAgICAgfmF0OlxuICAgICAgICAgIFtcbiAgICAgICAgICAgIEF0LnYgKEpzdHIudiBcImNvbnRyb2xzXCIpIChKc3RyLnYgXCJ0cnVlXCIpO1xuICAgICAgICAgICAgQXQudiAoSnN0ci52IFwiYXV0b3BsYXlcIikgKEpzdHIudiBcInRydWVcIik7XG4gICAgICAgICAgICBBdC52IChKc3RyLnYgXCJwcmVsb2FkXCIpIChKc3RyLnYgXCJhdXRvXCIpO1xuICAgICAgICAgIF1cbiAgICAgICAgW11cbiAgICBpblxuICAgIGxldCBzZXRfc3JjIHVybCA9IEVsLnNldF9hdCAoSnN0ci52IFwic3JjXCIpIChTb21lIChKc3RyLnYgdXJsKSkgYXVkaW9fZWx0IGluXG4gICAgbGV0IF9hdXRvX3BsYXkgPVxuICAgICAgKCogV2UgY2Fubm90IHJlbHkgb24gdGhlIG1haW4gW0x3ZF0gb2JzZXJ2ZXIgZm9yIHBsYXliYWNrIGNvbnRyb2wgYmVjYXVzZVxuICAgICAgICAgaXQgaXMgdGllZCB0byB0aGUgW3JlcXVlc3RBbmltYXRpb25GcmFtZXNdIGNhbGxiYWNrLiBUaGlzIHByZXZlbnQgdGhlXG4gICAgICAgICBwbGF5ZXIgdG8gc3RhcnQgcGxheWluZyB0aGUgbmV4dCBzb25nIGlmIHRoZSB0YWIgaXMgaW4gdGhlIGJhY2tncm91bmQuXG4gICAgICAqKVxuICAgICAgbGV0IHJvb3QgPSBMd2Qub2JzZXJ2ZSAoTHdkLmdldCBub3dfcGxheWluZykgaW5cbiAgICAgIEx3ZC5zZXRfb25faW52YWxpZGF0ZSByb290IChmdW4gXyAtPlxuICAgICAgICAgIG1hdGNoIEx3ZC5xdWlja19zYW1wbGUgcm9vdCB3aXRoXG4gICAgICAgICAgfCBTb21lIHsgdXJsOyBfIH0gLT4gc2V0X3NyYyB1cmxcbiAgICAgICAgICB8IE5vbmUgLT4gKCkpO1xuICAgICAgTHdkLnF1aWNrX3NhbXBsZSByb290IHw+IGlnbm9yZVxuICAgIGluXG4gICAgbGV0IG5leHQgKCkgPVxuICAgICAgbGV0IHBsYXlsaXN0ID0gTHdkLnBlZWsgcGxheXN0YXRlLnBsYXlsaXN0IGluXG4gICAgICBsZXQgY3VycmVudF9pbmRleCA9IEx3ZC5wZWVrIHBsYXlzdGF0ZS5jdXJyZW50X2luZGV4IGluXG4gICAgICBsZXQgbmV4dF9pbmRleCA9IGN1cnJlbnRfaW5kZXggKyAxIGluXG4gICAgICBpZ25vcmUgQEAgc2V0X3BsYXlfdXJsIHBsYXlsaXN0IG5leHRfaW5kZXg7XG4gICAgICBMd2Quc2V0IHBsYXlzdGF0ZS5jdXJyZW50X2luZGV4IG5leHRfaW5kZXhcbiAgICBpblxuICAgIGxldCBwcmV2ICgpID1cbiAgICAgIGxldCBwbGF5bGlzdCA9IEx3ZC5wZWVrIHBsYXlzdGF0ZS5wbGF5bGlzdCBpblxuICAgICAgbGV0IGN1cnJlbnRfaW5kZXggPSBMd2QucGVlayBwbGF5c3RhdGUuY3VycmVudF9pbmRleCBpblxuICAgICAgbGV0IG5leHRfaW5kZXggPSBtYXggMCAoY3VycmVudF9pbmRleCAtIDEpIGluXG4gICAgICBpZ25vcmUgQEAgc2V0X3BsYXlfdXJsIHBsYXlsaXN0IG5leHRfaW5kZXg7XG4gICAgICBMd2Quc2V0IHBsYXlzdGF0ZS5jdXJyZW50X2luZGV4IG5leHRfaW5kZXhcbiAgICBpblxuICAgIGxldCBzZXRfcG9zaXRpb25fc3RhdGUgPVxuICAgICAgKCogRW5hYmxlIGNvbnRyb2wgZnJvbSBPUyAqKVxuICAgICAgbGV0IG9wZW4gQnJyX2lvLk1lZGlhLlNlc3Npb24gaW5cbiAgICAgIGxldCBzZXNzaW9uID0gb2ZfbmF2aWdhdG9yIEcubmF2aWdhdG9yIGluXG4gICAgICBsZXQgc2V0X3Bvc2l0aW9uX3N0YXRlICgpID1cbiAgICAgICAgbGV0IGR1cmF0aW9uID0gRWwucHJvcCAoRWwuUHJvcC5mbG9hdCAoSnN0ci52IFwiZHVyYXRpb25cIikpIGF1ZGlvX2VsdCBpblxuICAgICAgICBpZiBub3QgKEZsb2F0LmlzX25hbiBkdXJhdGlvbikgdGhlblxuICAgICAgICAgIGxldCBwbGF5YmFja19yYXRlID1cbiAgICAgICAgICAgIEVsLnByb3AgKEVsLlByb3AuZmxvYXQgKEpzdHIudiBcInBsYXliYWNrUmF0ZVwiKSkgYXVkaW9fZWx0XG4gICAgICAgICAgaW5cbiAgICAgICAgICBsZXQgcG9zaXRpb24gPVxuICAgICAgICAgICAgRWwucHJvcCAoRWwuUHJvcC5mbG9hdCAoSnN0ci52IFwiY3VycmVudFRpbWVcIikpIGF1ZGlvX2VsdFxuICAgICAgICAgIGluXG4gICAgICAgICAgc2V0X3Bvc2l0aW9uX3N0YXRlIH5kdXJhdGlvbiB+cGxheWJhY2tfcmF0ZSB+cG9zaXRpb24gc2Vzc2lvblxuICAgICAgaW5cbiAgICAgIHNldF9hY3Rpb25faGFuZGxlciBzZXNzaW9uIEFjdGlvbi5uZXh0X3RyYWNrIG5leHQ7XG4gICAgICBzZXRfYWN0aW9uX2hhbmRsZXIgc2Vzc2lvbiBBY3Rpb24ucHJldmlvdXNfdHJhY2sgcHJldjtcbiAgICAgIHNldF9wb3NpdGlvbl9zdGF0ZVxuICAgIGluXG4gICAgbGV0IG9uX2Vycm9yIGV2ID1cbiAgICAgIEV2LnN0b3BfaW1tZWRpYXRlX3Byb3BhZ2F0aW9uIGV2O1xuICAgICAgRXYucHJldmVudF9kZWZhdWx0IGV2O1xuICAgICAgQ29uc29sZS5sb2dcbiAgICAgICAgW1xuICAgICAgICAgIFwiQSBwbGF5YmFjayBlcnJvciBoYXBwZW5lZC4gVGhpcyBpcyBwcm9iYWJseSBkdWUgdG8gYSBjb2RlYyBcXFxuICAgICAgICAgICB1bnN1cHBvcnRlZCBieSB0aGUgYnJvd3Nlci5cIjtcbiAgICAgICAgICBldjtcbiAgICAgICAgXTtcbiAgICAgIG5leHQgKClcbiAgICBpblxuICAgIGxldCBuZXh0IF8gPSBuZXh0ICgpIGluXG4gICAgbGV0ICgpID1cbiAgICAgIGxldCB0YXJnZXQgPSBFbC5hc190YXJnZXQgYXVkaW9fZWx0IGluXG4gICAgICBpZ25vcmUgQEAgRXYubGlzdGVuIEV2LmVuZGVkIG5leHQgdGFyZ2V0O1xuICAgICAgaWdub3JlIEBAIEV2Lmxpc3RlbiBFdi5lcnJvciBvbl9lcnJvciB0YXJnZXQ7XG4gICAgICBpZ25vcmUgQEAgRXYubGlzdGVuIEV2LnBsYXkgKGZ1biBfIC0+IHNldF9wb3NpdGlvbl9zdGF0ZSAoKSkgdGFyZ2V0XG4gICAgaW5cbiAgICBsZXQgYnRuX25leHQgPVxuICAgICAgQnJyX2x3ZF91aS5CdXR0b24udiB+ZXY6WyBgUCAoRWx3ZC5oYW5kbGVyIEV2LmNsaWNrIG5leHQpIF0gKGBQIFwiTkVYVFwiKVxuICAgIGluXG4gICAgbGV0IG9wZW4gQnJyX2x3ZF91aSBpblxuICAgIGxldCBub3dfcGxheWluZyA9XG4gICAgICBsZXQgdHJhY2tfY292ZXIgPVxuICAgICAgICBsZXQgc3R5bGUgPVxuICAgICAgICAgIEx3ZC5tYXAgKEx3ZC5nZXQgbm93X3BsYXlpbmcpIH5mOihmdW4gbnAgLT5cbiAgICAgICAgICAgICAgbGV0IHNyYyA9XG4gICAgICAgICAgICAgICAgbWF0Y2ggbnAgd2l0aFxuICAgICAgICAgICAgICAgIHwgTm9uZSAtPiBcInRyYWNrLnBuZ1wiXG4gICAgICAgICAgICAgICAgfCBTb21lIHsgaXRlbSA9IHsgaWQ7IGFsYnVtX2lkOyBzZXJ2ZXJfaWQ7IF8gfTsgXyB9IC0+XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbWFnZV9pZCA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDppZCBhbGJ1bV9pZCBpblxuICAgICAgICAgICAgICAgICAgICBsZXQgc2VydmVycyA9XG4gICAgICAgICAgICAgICAgICAgICAgTHdkX3NlcS50b19saXN0IChMd2QucGVlayBTZXJ2ZXJzLmNvbm5leGlvbnMpXG4gICAgICAgICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb25uZXhpb24gOiBEUy5jb25uZXhpb24gPVxuICAgICAgICAgICAgICAgICAgICAgIExpc3QuYXNzcSBzZXJ2ZXJfaWQgc2VydmVyc1xuICAgICAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgICAgICAoKiB0b2RvOiB0aGlzIGlzIGRvbmUgaW4gbXVsdGlwbGUgcGxhY2VzLCB3ZSBzaG91bGQgZmFjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgIHRoYXQgb3V0LiAqKVxuICAgICAgICAgICAgICAgICAgICBQcmludGYuc3ByaW50ZlxuICAgICAgICAgICAgICAgICAgICAgIFwiJXMvSXRlbXMvJXMvSW1hZ2VzL1ByaW1hcnk/d2lkdGg9NTAwJmZvcm1hdD1KcGdcIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbm5leGlvbi5iYXNlX3VybCBpbWFnZV9pZFxuICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICBQcmludGYuc3ByaW50ZiBcImJhY2tncm91bmQtaW1hZ2U6IHVybCglUylcIiBzcmMpXG4gICAgICAgIGluXG4gICAgICAgIGxldCBhdCA9XG4gICAgICAgICAgQXR0cnMuKFxuICAgICAgICAgICAgYWRkIEF0Lk5hbWUuY2xhc3MnIChgUCBcIm5vdy1wbGF5aW5nLWNvdmVyXCIpIFtdXG4gICAgICAgICAgICB8PiBhZGQgQXQuTmFtZS5zdHlsZSAoYFIgc3R5bGUpKVxuICAgICAgICBpblxuICAgICAgICBFbHdkLmRpdiB+YXQgW11cbiAgICAgIGluXG4gICAgICBsZXQgdHJhY2tfZGV0YWlscyA9XG4gICAgICAgIEx3ZC5tYXAgKEx3ZC5nZXQgbm93X3BsYXlpbmcpIH5mOihmdW5jdGlvblxuICAgICAgICAgIHwgTm9uZSAtPiBFbC50eHQnIFwiTm90aGluZyBwbGF5aW5nXCJcbiAgICAgICAgICB8IFNvbWUgeyBpdGVtID0geyBuYW1lOyBfIH07IF8gfSAtPiBFbC50eHQnIG5hbWUpXG4gICAgICBpblxuICAgICAgbGV0IGF0ID1cbiAgICAgICAgQXR0cnMuKFxuICAgICAgICAgIGFkZCBBdC5OYW1lLmNsYXNzJyAoYFAgXCJib3hcIikgW11cbiAgICAgICAgICB8PiBhZGQgQXQuTmFtZS5jbGFzcycgKGBQIFwibm93LXBsYXlpbmctZGlzcGxheVwiKSlcbiAgICAgIGluXG4gICAgICBFbHdkLmRpdiB+YXQgWyBgUiB0cmFja19jb3ZlcjsgYFIgdHJhY2tfZGV0YWlscyBdXG4gICAgaW5cbiAgICBsZXQgYXQgPVxuICAgICAgQXR0cnMuKFxuICAgICAgICBhZGQgQXQuTmFtZS5jbGFzcycgKGBQIFwicGxheWVyLXdyYXBwZXJcIikgW11cbiAgICAgICAgfD4gYWRkIEF0Lk5hbWUuY2xhc3MnIChgUCBcImJveFwiKSlcbiAgICBpblxuICAgIEVsd2QuZGl2IH5hdCBbIGBSIG5vd19wbGF5aW5nOyBgUCBhdWRpb19lbHQ7IGBSIGJ0bl9uZXh0IF1cbmVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgIEJlbm9pdCBWYXVnb24sIEVOU1RBICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBQYWRkaW5nIHBvc2l0aW9uLiAqKVxudHlwZSBwYWR0eSA9XG4gIHwgTGVmdCAgICgqIFRleHQgaXMgbGVmdCBqdXN0aWZpZWQgKCctJyBvcHRpb24pLiAgICAgICAgICAgICAgICopXG4gIHwgUmlnaHQgICgqIFRleHQgaXMgcmlnaHQganVzdGlmaWVkIChubyAnLScgb3B0aW9uKS4gICAgICAgICAgICopXG4gIHwgWmVyb3MgICgqIFRleHQgaXMgcmlnaHQganVzdGlmaWVkIGJ5IHplcm9zIChzZWUgJzAnIG9wdGlvbikuICopXG5cbigqKiopXG5cbigqIEludGVnZXIgY29udmVyc2lvbi4gKilcbnR5cGUgaW50X2NvbnYgPVxuICB8IEludF9kIHwgSW50X3BkIHwgSW50X3NkICAgICAgICAoKiAgJWQgfCAlK2QgfCAlIGQgICopXG4gIHwgSW50X2kgfCBJbnRfcGkgfCBJbnRfc2kgICAgICAgICgqICAlaSB8ICUraSB8ICUgaSAgKilcbiAgfCBJbnRfeCB8IEludF9DeCAgICAgICAgICAgICAgICAgKCogICV4IHwgJSN4ICAgICAgICAqKVxuICB8IEludF9YIHwgSW50X0NYICAgICAgICAgICAgICAgICAoKiAgJVggfCAlI1ggICAgICAgICopXG4gIHwgSW50X28gfCBJbnRfQ28gICAgICAgICAgICAgICAgICgqICAlbyB8ICUjbyAgICAgICAgKilcbiAgfCBJbnRfdSAgICAgICAgICAgICAgICAgICAgICAgICAgKCogICV1ICAgICAgICAgICAgICAqKVxuICB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAgICAgICAoKiAgJSNkIHwgJSNpIHwgJSN1ICopXG5cbigqIEZsb2F0IGNvbnZlcnNpb24uICopXG50eXBlIGZsb2F0X2ZsYWdfY29udiA9XG4gIHwgRmxvYXRfZmxhZ18gICAgICAgICAgICAgICAgICAgICgqICVbZmVFZ0dGaEhdICopXG4gIHwgRmxvYXRfZmxhZ19wICAgICAgICAgICAgICAgICAgICgqICUrW2ZlRWdHRmhIXSAqKVxuICB8IEZsb2F0X2ZsYWdfcyAgICAgICAgICAgICAgICAgICAoKiAlIFtmZUVnR0ZoSF0gKilcbnR5cGUgZmxvYXRfa2luZF9jb252ID1cbiAgfCBGbG9hdF9mICAgICAgICAgICAgICAgICAgICAgICAgKCogICVmIHwgJStmIHwgJSBmICAqKVxuICB8IEZsb2F0X2UgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWUgfCAlK2UgfCAlIGUgICopXG4gIHwgRmxvYXRfRSAgICAgICAgICAgICAgICAgICAgICAgICgqICAlRSB8ICUrRSB8ICUgRSAgKilcbiAgfCBGbG9hdF9nICAgICAgICAgICAgICAgICAgICAgICAgKCogICVnIHwgJStnIHwgJSBnICAqKVxuICB8IEZsb2F0X0cgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUcgfCAlK0cgfCAlIEcgICopXG4gIHwgRmxvYXRfRiAgICAgICAgICAgICAgICAgICAgICAgICgqICAlRiB8ICUrRiB8ICUgRiAgKilcbiAgfCBGbG9hdF9oICAgICAgICAgICAgICAgICAgICAgICAgKCogICVoIHwgJStoIHwgJSBoICAqKVxuICB8IEZsb2F0X0ggICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUggfCAlK0ggfCAlIEggICopXG4gIHwgRmxvYXRfQ0YgICAgICAgICAgICAgICAgICAgICAgICgqICAlI0Z8ICUrI0Z8ICUgI0YgKilcbnR5cGUgZmxvYXRfY29udiA9IGZsb2F0X2ZsYWdfY29udiAqIGZsb2F0X2tpbmRfY29udlxuXG4oKioqKVxuXG4oKiBDaGFyIHNldHMgKHNlZSAlWy4uLl0pIGFyZSBiaXRtYXBzIGltcGxlbWVudGVkIGFzIDMyLWNoYXIgc3RyaW5ncy4gKilcbnR5cGUgY2hhcl9zZXQgPSBzdHJpbmdcblxuKCoqKilcblxuKCogQ291bnRlciB1c2VkIGluIFNjYW5mLiAqKVxudHlwZSBjb3VudGVyID1cbiAgfCBMaW5lX2NvdW50ZXIgICAgICgqICAlbCAgICAgICopXG4gIHwgQ2hhcl9jb3VudGVyICAgICAoKiAgJW4gICAgICAqKVxuICB8IFRva2VuX2NvdW50ZXIgICAgKCogICVOLCAlTCAgKilcblxuKCoqKilcblxuKCogUGFkZGluZyBvZiBzdHJpbmdzIGFuZCBudW1iZXJzLiAqKVxudHlwZSAoJ2EsICdiKSBwYWRkaW5nID1cbiAgKCogTm8gcGFkZGluZyAoZXg6IFwiJWRcIikgKilcbiAgfCBOb19wYWRkaW5nICA6ICgnYSwgJ2EpIHBhZGRpbmdcbiAgKCogTGl0ZXJhbCBwYWRkaW5nIChleDogXCIlOGRcIikgKilcbiAgfCBMaXRfcGFkZGluZyA6IHBhZHR5ICogaW50IC0+ICgnYSwgJ2EpIHBhZGRpbmdcbiAgKCogUGFkZGluZyBhcyBleHRyYSBhcmd1bWVudCAoZXg6IFwiJSpkXCIpICopXG4gIHwgQXJnX3BhZGRpbmcgOiBwYWR0eSAtPiAoaW50IC0+ICdhLCAnYSkgcGFkZGluZ1xuXG4oKiBTb21lIGZvcm1hdHMsIHN1Y2ggYXMgJV9kLFxuICAgb25seSBhY2NlcHQgYW4gb3B0aW9uYWwgbnVtYmVyIGFzIHBhZGRpbmcgb3B0aW9uIChubyBleHRyYSBhcmd1bWVudCkgKilcbnR5cGUgcGFkX29wdGlvbiA9IGludCBvcHRpb25cblxuKCogUHJlY2lzaW9uIG9mIGZsb2F0cyBhbmQgJzAnLXBhZGRpbmcgb2YgaW50ZWdlcnMuICopXG50eXBlICgnYSwgJ2IpIHByZWNpc2lvbiA9XG4gICgqIE5vIHByZWNpc2lvbiAoZXg6IFwiJWZcIikgKilcbiAgfCBOb19wcmVjaXNpb24gOiAoJ2EsICdhKSBwcmVjaXNpb25cbiAgKCogTGl0ZXJhbCBwcmVjaXNpb24gKGV4OiBcIiUuM2ZcIikgKilcbiAgfCBMaXRfcHJlY2lzaW9uIDogaW50IC0+ICgnYSwgJ2EpIHByZWNpc2lvblxuICAoKiBQcmVjaXNpb24gYXMgZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUuKmZcIikgKilcbiAgfCBBcmdfcHJlY2lzaW9uIDogKGludCAtPiAnYSwgJ2EpIHByZWNpc2lvblxuXG4oKiBTb21lIGZvcm1hdHMsIHN1Y2ggYXMgJV9mLFxuICAgb25seSBhY2NlcHQgYW4gb3B0aW9uYWwgbnVtYmVyIGFzIHByZWNpc2lvbiBvcHRpb24gKG5vIGV4dHJhIGFyZ3VtZW50KSAqKVxudHlwZSBwcmVjX29wdGlvbiA9IGludCBvcHRpb25cblxuKCogc2VlIHRoZSBDdXN0b20gZm9ybWF0IGNvbWJpbmF0b3IgKilcbnR5cGUgKCdhLCAnYiwgJ2MpIGN1c3RvbV9hcml0eSA9XG4gIHwgQ3VzdG9tX3plcm8gOiAoJ2EsIHN0cmluZywgJ2EpIGN1c3RvbV9hcml0eVxuICB8IEN1c3RvbV9zdWNjIDogKCdhLCAnYiwgJ2MpIGN1c3RvbV9hcml0eSAtPlxuICAgICgnYSwgJ3ggLT4gJ2IsICd4IC0+ICdjKSBjdXN0b21fYXJpdHlcblxuKCoqKilcblxuKCogICAgICAgIFJlbGF0aW9uYWwgZm9ybWF0IHR5cGVzXG5cbkluIHRoZSBmaXJzdCBmb3JtYXQrZ2FkdHMgaW1wbGVtZW50YXRpb24sIHRoZSB0eXBlIGZvciAlKC4uJSkgaW4gdGhlXG5mbXQgR0FEVCB3YXMgYXMgZm9sbG93czpcblxufCBGb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgcGFkX29wdGlvbiAqICgnZDEsICdxMSwgJ2QyLCAncTIpIHJlYWRlcl9uYl91bmlmaWVyICpcbiAgICAoJ3gsICdiLCAnYywgJ2QxLCAncTEsICd1KSBmbXR0eSAqXG4gICAgKCd1LCAnYiwgJ2MsICdxMSwgJ2UxLCAnZikgZm10IC0+XG4gICAgICAoKCd4LCAnYiwgJ2MsICdkMiwgJ3EyLCAndSkgZm9ybWF0NiAtPiAneCwgJ2IsICdjLCAnZDEsICdlMSwgJ2YpIGZtdFxuXG5Ob3RpY2UgdGhhdCB0aGUgJ3UgcGFyYW1ldGVyIGluICdmIHBvc2l0aW9uIGluIHRoZSBmb3JtYXQgYXJndW1lbnRcbigoJ3gsIC4uLCAndSkgZm9ybWF0NiAtPiAuLikgaXMgZXF1YWwgdG8gdGhlICd1IHBhcmFtZXRlciBpbiAnYVxucG9zaXRpb24gaW4gdGhlIGZvcm1hdCB0YWlsICgoJ3UsIC4uLCAnZikgZm10KS4gVGhpcyBtZWFucyB0aGF0IHRoZVxudHlwZSBvZiB0aGUgZXhwZWN0ZWQgZm9ybWF0IHBhcmFtZXRlciBkZXBlbmRzIG9mIHdoZXJlIHRoZSAlKC4uLiUpXG5hcmUgaW4gdGhlIGZvcm1hdCBzdHJpbmc6XG5cbiAgIyBQcmludGYucHJpbnRmIFwiJSglKVwiXG4gIC0gOiAodW5pdCwgb3V0X2NoYW5uZWwsIHVuaXQsICdfYSwgJ19hLCB1bml0KVxuICAgICAgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDYgLT4gdW5pdFxuICA9IDxmdW4+XG4gICMgUHJpbnRmLnByaW50ZiBcIiUoJSklZFwiXG4gIC0gOiAoaW50IC0+IHVuaXQsIG91dF9jaGFubmVsLCB1bml0LCAnX2EsICdfYSwgaW50IC0+IHVuaXQpXG4gICAgICBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NiAtPiBpbnQgLT4gdW5pdFxuICA9IDxmdW4+XG5cbk9uIHRoZSBjb250cmFyeSwgdGhlIGxlZ2FjeSB0eXBlciBnaXZlcyBhIGNsZXZlciB0eXBlIHRoYXQgZG9lcyBub3RcbmRlcGVuZCBvbiB0aGUgcG9zaXRpb24gb2YgJSguLiUpIGluIHRoZSBmb3JtYXQgc3RyaW5nLiBGb3IgZXhhbXBsZSxcbiUoJSkgd2lsbCBoYXZlIHRoZSBwb2x5bW9ycGhpYyB0eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKTogaXQgY2FuXG5iZSBjb25jYXRlbmF0ZWQgdG8gYW55IGZvcm1hdCB0eXBlLCBhbmQgb25seSBlbmZvcmNlcyB0aGUgY29uc3RyYWludFxudGhhdCBpdHMgJ2EgYW5kICdmIHBhcmFtZXRlcnMgYXJlIGVxdWFsIChubyBmb3JtYXQgYXJndW1lbnRzKSBhbmQgJ2RcbmFuZCAnZSBhcmUgZXF1YWwgKG5vIHJlYWRlciBhcmd1bWVudCkuXG5cblRoZSB3ZWFrZW5pbmcgb2YgdGhpcyBwYXJhbWV0ZXIgdHlwZSBpbiB0aGUgR0FEVCB2ZXJzaW9uIGJyb2tlIHVzZXJcbmNvZGUgKGluIGZhY3QgaXQgZXNzZW50aWFsbHkgbWFkZSAlKC4uLiUpIHVudXNhYmxlIGV4Y2VwdCBhdCB0aGUgbGFzdFxucG9zaXRpb24gb2YgYSBmb3JtYXQpLiBJbiBwYXJ0aWN1bGFyLCB0aGUgZm9sbG93aW5nIHdvdWxkIG5vdCB3b3JrXG5hbnltb3JlOlxuXG4gIGZ1biBzZXAgLT5cbiAgICBGb3JtYXQucHJpbnRmIFwiZm9vJSglKWJhciUoJSliYXpcIiBzZXAgc2VwXG5cbkFzIHRoZSB0eXBlLWNoZWNrZXIgd291bGQgcmVxdWlyZSB0d28gKmluY29tcGF0aWJsZSogdHlwZXMgZm9yIHRoZSAlKCUpXG5pbiBkaWZmZXJlbnQgcG9zaXRpb25zLlxuXG5UaGUgc29sdXRpb24gdG8gcmVnYWluIGEgZ2VuZXJhbCB0eXBlIGZvciAlKC4uJSkgaXMgdG8gZ2VuZXJhbGl6ZSB0aGlzXG50ZWNobmlxdWUsIG5vdCBvbmx5IG9uIHRoZSAnZCwgJ2UgcGFyYW1ldGVycywgYnV0IG9uIGFsbCBzaXhcbnBhcmFtZXRlcnMgb2YgYSBmb3JtYXQ6IHdlIGludHJvZHVjZSBhIFwicmVsYXRpb25hbFwiIHR5cGVcbiAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbndob3NlIHZhbHVlcyBhcmUgcHJvb2ZzIHRoYXQgKCdhMSwgLi4sICdmMSkgYW5kICgnYTIsIC4uLCAnZjIpIG1vcmFsbHlcbmNvcnJlc3BvbmQgdG8gdGhlIHNhbWUgZm9ybWF0IHR5cGU6ICdhMSBpcyBvYnRhaW5lZCBmcm9tICdmMSwnYjEsJ2MxXG5pbiB0aGUgZXhhY3Qgc2FtZSB3YXkgdGhhdCAnYTIgaXMgb2J0YWluZWQgZnJvbSAnZjIsJ2IyLCdjMiwgZXRjLlxuXG5Gb3IgZXhhbXBsZSwgdGhlIHJlbGF0aW9uIGJldHdlZW4gdHdvIGZvcm1hdCB0eXBlcyBiZWdpbm5pbmcgd2l0aCBhIENoYXJcbnBhcmFtZXRlciBpcyBhcyBmb2xsb3dzOlxuXG58IENoYXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAgKilcbiAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgKGNoYXIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgY2hhciAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuSW4gdGhlIGdlbmVyYWwgY2FzZSwgdGhlIHRlcm0gc3RydWN0dXJlIG9mIGZtdHR5X3JlbCBpcyAoYWxtb3N0WzFdKVxuaXNvbW9ycGhpYyB0byB0aGUgZm10dHkgb2YgdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uOiBldmVyeVxuY29uc3RydWN0b3IgaXMgcmUtcmVhZCB3aXRoIGEgYmluYXJ5LCByZWxhdGlvbmFsIHR5cGUsIGluc3RlYWQgb2YgdGhlXG5wcmV2aW91cyB1bmFyeSB0eXBpbmcuIGZtdHR5IGNhbiB0aGVuIGJlIHJlLWRlZmluZWQgYXMgdGhlIGRpYWdvbmFsIG9mXG5mbXR0eV9yZWw6XG5cbiAgdHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgPVxuICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmLFxuICAgICAgICAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9yZWxcblxuT25jZSB3ZSBoYXZlIHRoaXMgZm10dHlfcmVsIHR5cGUgaW4gcGxhY2UsIHdlIGNhbiBnaXZlIHRoZSBtb3JlXG5nZW5lcmFsIHR5cGUgdG8gJSguLi4lKTpcblxufCBGb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgcGFkX29wdGlvbiAqXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMiwgJ2IsICdjLCAnajIsICdkLCAnYSkgZm10dHlfcmVsICpcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IsICdjLCAnajIsICdlLCAnZikgZm10XG5cbldlIGFjY2VwdCBhbnkgZm9ybWF0ICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NikgKHRoaXMgaXNcbmNvbXBsZXRlbHkgdW5yZWxhdGVkIHRvIHRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IGZvcm1hdCksIGJ1dCBhbHNvXG5yZXF1aXJlIGEgcHJvb2YgdGhhdCB0aGlzIGZvcm1hdCBpcyBpbiByZWxhdGlvbiB0byBhbm90aGVyIGZvcm1hdCB0aGF0XG5pcyBjb25jYXRlbmFibGUgdG8gdGhlIGZvcm1hdCB0YWlsLiBXaGVuIGV4ZWN1dGluZyBhICUoLi4uJSkgZm9ybWF0XG4oaW4gY2FtbGludGVybmFsRm9ybWF0Lm1sOm1ha2VfcHJpbnRmIG9yIHNjYW5mLm1sOm1ha2Vfc2NhbmYpLCB3ZVxudHJhbnN0eXBlIHRoZSBmb3JtYXQgYWxvbmcgdGhpcyByZWxhdGlvbiB1c2luZyB0aGUgJ3JlY2FzdCcgZnVuY3Rpb25cbnRvIHRyYW5zcG9zZSBiZXR3ZWVuIHJlbGF0ZWQgZm9ybWF0IHR5cGVzLlxuXG4gIHZhbCByZWNhc3QgOlxuICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSkgZm10XG4gIC0+ICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIC0+ICgnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXRcblxuTk9URSBbMV06IHRoZSB0eXBpbmcgb2YgRm9ybWF0X3N1YnN0X3R5IHJlcXVpcmVzIG5vdCBvbmUgZm9ybWF0IHR5cGUsIGJ1dFxudHdvLCBvbmUgdG8gZXN0YWJsaXNoIHRoZSBsaW5rIGJldHdlZW4gdGhlIGZvcm1hdCBhcmd1bWVudCBhbmQgdGhlXG5maXJzdCBzaXggcGFyYW1ldGVycywgYW5kIHRoZSBvdGhlciBmb3IgdGhlIGxpbmsgYmV0d2VlbiB0aGUgZm9ybWF0XG5hcmd1bWVudCBhbmQgdGhlIGxhc3Qgc2l4IHBhcmFtZXRlcnMuXG5cbnwgRm9ybWF0X3N1YnN0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZDEsICdhMSkgZm10dHlfcmVsICpcbiAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZDIsICdhMikgZm10dHlfcmVsICpcbiAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2UxLCAnZjEsXG4gICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG5XaGVuIHdlIGdlbmVyYXRlIGEgZm9ybWF0IEFTVCwgd2UgZ2VuZXJhdGUgZXhhY3RseSB0aGUgc2FtZSB3aXRuZXNzXG5mb3IgYm90aCByZWxhdGlvbnMsIGFuZCB0aGUgd2l0bmVzcy1jb252ZXJzaW9uIGZ1bmN0aW9ucyBpblxuY2FtbGludGVybmFsRm9ybWF0IGRvIHJlbHkgb24gdGhpcyBpbnZhcmlhbnQuIEZvciBleGFtcGxlLCB0aGVcbmZ1bmN0aW9uIHRoYXQgcHJvdmVzIHRoYXQgdGhlIHJlbGF0aW9uIGlzIHRyYW5zaXRpdmVcblxuICB2YWwgdHJhbnMgOlxuICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICAtPiAoJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMixcbiAgICAgICdhMywgJ2IzLCAnYzMsICdkMywgJ2UzLCAnZjMpIGZtdHR5X3JlbFxuICAtPiAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMywgJ2IzLCAnYzMsICdkMywgJ2UzLCAnZjMpIGZtdHR5X3JlbFxuXG5kb2VzIGFzc3VtZSB0aGF0IHRoZSB0d28gaW5wdXRzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSB0ZXJtIHN0cnVjdHVyZVxuKGFuZCBpcyBvbmx5IGV2ZXJ5IHVzZWQgZm9yIGFyZ3VtZW50IHdpdG5lc3NlcyBvZiB0aGVcbkZvcm1hdF9zdWJzdF90eSBjb25zdHJ1Y3RvcikuXG4qKVxuXG4oKiBUeXBlIG9mIGEgYmxvY2sgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSBibG9ja190eXBlID1cbiAgfCBQcF9oYm94ICAgKCogSG9yaXpvbnRhbCBibG9jayBubyBsaW5lIGJyZWFraW5nICopXG4gIHwgUHBfdmJveCAgICgqIFZlcnRpY2FsIGJsb2NrIGVhY2ggYnJlYWsgbGVhZHMgdG8gYSBuZXcgbGluZSAqKVxuICB8IFBwX2h2Ym94ICAoKiBIb3Jpem9udGFsLXZlcnRpY2FsIGJsb2NrOiBzYW1lIGFzIHZib3gsIGV4Y2VwdCBpZiB0aGlzIGJsb2NrXG4gICAgICAgICAgICAgICAgIGlzIHNtYWxsIGVub3VnaCB0byBmaXQgb24gYSBzaW5nbGUgbGluZSAqKVxuICB8IFBwX2hvdmJveCAoKiBIb3Jpem9udGFsIG9yIFZlcnRpY2FsIGJsb2NrOiBicmVha3MgbGVhZCB0byBuZXcgbGluZVxuICAgICAgICAgICAgICAgICBvbmx5IHdoZW4gbmVjZXNzYXJ5IHRvIHByaW50IHRoZSBjb250ZW50IG9mIHRoZSBibG9jayAqKVxuICB8IFBwX2JveCAgICAoKiBIb3Jpem9udGFsIG9yIEluZGVudCBibG9jazogYnJlYWtzIGxlYWQgdG8gbmV3IGxpbmVcbiAgICAgICAgICAgICAgICAgb25seSB3aGVuIG5lY2Vzc2FyeSB0byBwcmludCB0aGUgY29udGVudCBvZiB0aGUgYmxvY2ssIG9yXG4gICAgICAgICAgICAgICAgIHdoZW4gaXQgbGVhZHMgdG8gYSBuZXcgaW5kZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgbGluZSAqKVxuICB8IFBwX2ZpdHMgICAoKiBJbnRlcm5hbCB1c2FnZTogd2hlbiBhIGJsb2NrIGZpdHMgb24gYSBzaW5nbGUgbGluZSAqKVxuXG4oKiBGb3JtYXR0aW5nIGVsZW1lbnQgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSBmb3JtYXR0aW5nX2xpdCA9XG4gIHwgQ2xvc2VfYm94ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBdICAgKilcbiAgfCBDbG9zZV90YWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQH0gICAqKVxuICB8IEJyZWFrIG9mIHN0cmluZyAqIGludCAqIGludCAgICAgICAgICAoKiBALCB8IEAgIHwgQDsgfCBAOzw+ICopXG4gIHwgRkZsdXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEA/ICAgKilcbiAgfCBGb3JjZV9uZXdsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQFxcbiAgKilcbiAgfCBGbHVzaF9uZXdsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQC4gICAqKVxuICB8IE1hZ2ljX3NpemUgb2Ygc3RyaW5nICogaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAPG4+ICopXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBAICAgKilcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQCUlICAqKVxuICB8IFNjYW5faW5kaWMgb2YgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAWCAgICopXG5cbigqIEZvcm1hdHRpbmcgZWxlbWVudCB1c2VkIGJ5IHRoZSBGb3JtYXQgcHJldHR5LXByaW50ZXIuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXR0aW5nX2dlbiA9XG4gIHwgT3Blbl90YWcgOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPiAgICAgICgqIEB7ICAgKilcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW5cbiAgfCBPcGVuX2JveCA6ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+ICAgICAgKCogQFsgICAqKVxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXR0aW5nX2dlblxuXG4oKioqKVxuXG4oKiBMaXN0IG9mIGZvcm1hdCB0eXBlIGVsZW1lbnRzLiAqKVxuKCogSW4gcGFydGljdWxhciB1c2VkIHRvIHJlcHJlc2VudCAlKC4uLiUpIGFuZCAley4uLiV9IGNvbnRlbnRzLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSA9XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmLFxuICAgICAgJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfcmVsXG5hbmQgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCA9XG4gIHwgQ2hhcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVjICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoY2hhciAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGNoYXIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgU3RyaW5nX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVzICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoc3RyaW5nIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgc3RyaW5nIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEludF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlZCAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGludCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnQzMl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWxkICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQzMiAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludDMyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IE5hdGl2ZWludF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbmQgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKG5hdGl2ZWludCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIG5hdGl2ZWludCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnQ2NF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUxkICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQ2NCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludDY0IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEZsb2F0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlZiAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGZsb2F0IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgZmxvYXQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgQm9vbF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVCICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoYm9vbCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGJvb2wgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbiAgfCBGb3JtYXRfYXJnX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXsuLi4lfSAqKVxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5ICpcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMilcbiAgICAgICAgICAgZm10dHlfcmVsXG4gIHwgRm9ybWF0X3N1YnN0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAgICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2QxLCAnYTEpIGZtdHR5X3JlbCAqXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzIsICdiMiwgJ2MyLCAnajIsICdkMiwgJ2EyKSBmbXR0eV9yZWwgKlxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZTEsICdmMSxcbiAgICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiMiwgJ2MyLCAnajIsICdlMiwgJ2YyKVxuICAgICAgICAgICBmbXR0eV9yZWxcblxuICAoKiBQcmludGYgYW5kIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcnMuICopXG4gIHwgQWxwaGFfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVhICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdiMSAtPiAneCAtPiAnYzEpIC0+ICd4IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdiMiAtPiAneCAtPiAnYzIpIC0+ICd4IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IFRoZXRhX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAldCAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnYjEgLT4gJ2MxKSAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnYjIgLT4gJ2MyKSAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBBbnlfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFVzZWQgZm9yIGN1c3RvbSBmb3JtYXRzICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgneCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICd4IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gICgqIFNjYW5mIHNwZWNpZmljIGNvbnN0cnVjdG9yLiAqKVxuICB8IFJlYWRlcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlciAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCd4IC0+ICdhMSwgJ2IxLCAnYzEsICgnYjEgLT4gJ3gpIC0+ICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ3ggLT4gJ2EyLCAnYjIsICdjMiwgKCdiMiAtPiAneCkgLT4gJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfciAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICgnYjEgLT4gJ3gpIC0+ICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgKCdiMiAtPiAneCkgLT4gJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbiAgfCBFbmRfb2ZfZm10dHkgOlxuICAgICAgKCdmMSwgJ2IxLCAnYzEsICdkMSwgJ2QxLCAnZjEsXG4gICAgICAgJ2YyLCAnYjIsICdjMiwgJ2QyLCAnZDIsICdmMikgZm10dHlfcmVsXG5cbigqKiopXG5cbigqIExpc3Qgb2YgZm9ybWF0IGVsZW1lbnRzLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgPVxuICB8IENoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChjaGFyIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENhbWxfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVDICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChjaGFyIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFN0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVzICopXG4gICAgICAoJ3gsIHN0cmluZyAtPiAnYSkgcGFkZGluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENhbWxfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVTICopXG4gICAgICAoJ3gsIHN0cmluZyAtPiAnYSkgcGFkZGluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQzMiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbFtkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGludDMyIC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgTmF0aXZlaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJW5bZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBuYXRpdmVpbnQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQ2NCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlTFtkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGludDY0IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRmxvYXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtmZUVnR0ZoSF0gKilcbiAgICAgIGZsb2F0X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBmbG9hdCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEJvb2wgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbYkJdICopXG4gICAgICAoJ3gsIGJvb2wgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGbHVzaCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlISAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBhYmMgKilcbiAgICAgIHN0cmluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENoYXJfbGl0ZXJhbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIHggKilcbiAgICAgIGNoYXIgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICB8IEZvcm1hdF9hcmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV7Li4uJX0gKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgICAgcGFkX29wdGlvbiAqXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzIsICdiLCAnYywgJ2oyLCAnZCwgJ2EpIGZtdHR5X3JlbCAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYiwgJ2MsICdqMiwgJ2UsICdmKSBmbXRcblxuICAoKiBQcmludGYgYW5kIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3Rvci4gKilcbiAgfCBBbHBoYSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYSAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdiIC0+ICd4IC0+ICdjKSAtPiAneCAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBUaGV0YSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAldCAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdiIC0+ICdjKSAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICAoKiBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3I6ICopXG4gIHwgRm9ybWF0dGluZ19saXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQF8gKilcbiAgICAgIGZvcm1hdHRpbmdfbGl0ICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRm9ybWF0dGluZ19nZW4gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBfICopXG4gICAgICAoJ2ExLCAnYiwgJ2MsICdkMSwgJ2UxLCAnZjEpIGZvcm1hdHRpbmdfZ2VuICpcbiAgICAgICgnZjEsICdiLCAnYywgJ2UxLCAnZTIsICdmMikgZm10IC0+ICgnYTEsICdiLCAnYywgJ2QxLCAnZTIsICdmMikgZm10XG5cbiAgKCogU2NhbmYgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IFJlYWRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVyICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCAtPiAnYSwgJ2IsICdjLCAoJ2IgLT4gJ3gpIC0+ICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fY2hhcl9zZXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbLi4uXSAqKVxuICAgICAgcGFkX29wdGlvbiAqIGNoYXJfc2V0ICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoc3RyaW5nIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbbmxOTF0gKilcbiAgICAgIGNvdW50ZXIgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChpbnQgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgU2Nhbl9uZXh0X2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJTBjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJZ25vcmVkX3BhcmFtIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGlnbm9yZWQgKiAoJ3gsICdiLCAnYywgJ3ksICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICAoKiBDdXN0b20gcHJpbnRpbmcgZm9ybWF0IChQUiM2NDUyLCBHUFIjMTQwKVxuXG4gICAgIFdlIGluY2x1ZGUgYSB0eXBlIEN1c3RvbSBvZiBcImN1c3RvbSBjb252ZXJ0ZXJzXCIsIHdoZXJlIGFuXG4gICAgIGFyYml0cmFyeSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IG9uZSBvciBtb3JlXG4gICAgIGFyZ3VtZW50cy4gVGhlcmUgaXMgbm8gc3ludGF4IGZvciBjdXN0b20gY29udmVydGVycywgaXQgaXMgb25seVxuICAgICBpbnRlbmRlZCBmb3IgY3VzdG9tIHByb2Nlc3NvcnMgdGhhdCB3aXNoIHRvIHJlbHkgb24gdGhlXG4gICAgIHN0ZGxpYi1kZWZpbmVkIGZvcm1hdCBHQURUcy5cblxuICAgICBGb3IgaW5zdGFuY2UgYSBwcmUtcHJvY2Vzc29yIGNvdWxkIGNob29zZSB0byBpbnRlcnByZXQgc3RyaW5nc1xuICAgICBwcmVmaXhlZCB3aXRoIFtcIiFcIl0gYXMgZm9ybWF0IHN0cmluZ3Mgd2hlcmUgWyV7eyAuLi4gfX1dIGlzXG4gICAgIGEgc3BlY2lhbCBmb3JtIHRvIHBhc3MgYSB0b19zdHJpbmcgZnVuY3Rpb24sIHNvIHRoYXQgb25lIGNvdWxkXG4gICAgIHdyaXRlOlxuXG4gICAgIHtbXG4gICAgICAgdHlwZSB0ID0geyB4IDogaW50OyB5IDogaW50IH1cblxuICAgICAgIGxldCBzdHJpbmdfb2ZfdCB0ID0gUHJpbnRmLnNwcmludGYgXCJ7IHggPSAlZDsgeSA9ICVkIH1cIiB0LnggdC55XG5cbiAgICAgICBQcmludGYucHJpbnRmICFcInQgPSAle3tzdHJpbmdfb2ZfdH19XCIgeyB4ID0gNDI7IHkgPSA0MiB9XG4gICAgIF19XG4gICopXG4gIHwgQ3VzdG9tIDpcbiAgICAgICgnYSwgJ3gsICd5KSBjdXN0b21fYXJpdHkgKiAodW5pdCAtPiAneCkgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoJ3ksICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogZW5kIG9mIGEgZm9ybWF0IHNwZWNpZmljYXRpb24gKilcbiAgfCBFbmRfb2ZfZm9ybWF0IDpcbiAgICAgICAgKCdmLCAnYiwgJ2MsICdlLCAnZSwgJ2YpIGZtdFxuXG4oKioqKVxuXG4oKiBUeXBlIGZvciBpZ25vcmVkIHBhcmFtZXRlcnMgKHNlZSBcIiVfXCIpLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBpZ25vcmVkID1cbiAgfCBJZ25vcmVkX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2MgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9DICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfcyAqKVxuICAgICAgcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfUyAqKVxuICAgICAgcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9pbnQzMiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9sZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9uZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9pbnQ2NCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9MZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mbG9hdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9mICopXG4gICAgICBwYWRfb3B0aW9uICogcHJlY19vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Jvb2wgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX0IgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3suLi4lfSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfKC4uLiUpICopXG4gICAgICBwYWRfb3B0aW9uICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9yZWFkZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9yICopXG4gICAgICAoJ2EsICdiLCAnYywgKCdiIC0+ICd4KSAtPiAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9bLi4uXSAqKVxuICAgICAgcGFkX29wdGlvbiAqIGNoYXJfc2V0IC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9bbmxOTF0gKilcbiAgICAgIGNvdW50ZXIgLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXzBjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgPVxuICBGb3JtYXQgb2YgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAqIHN0cmluZ1xuXG5sZXQgcmVjIGVyYXNlX3JlbCA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgLlxuICAoYSwgYiwgYywgZCwgZSwgZixcbiAgIGcsIGgsIGksIGosIGssIGwpIGZtdHR5X3JlbCAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHlcbj0gZnVuY3Rpb25cbiAgfCBDaGFyX3R5IHJlc3QgLT5cbiAgICBDaGFyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIFN0cmluZ190eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBJbnRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludDMyX3R5IHJlc3QgLT5cbiAgICBJbnQzMl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSW50NjRfdHkgcmVzdCAtPlxuICAgIEludDY0X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPlxuICAgIE5hdGl2ZWludF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIEZsb2F0X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBCb29sX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgZXJhc2VfcmVsIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIF90eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MSwgZXJhc2VfcmVsIHJlc3QpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPlxuICAgIEFscGhhX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgVGhldGFfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEFueV90eSByZXN0IC0+XG4gICAgQW55X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPlxuICAgIFJlYWRlcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBFbmRfb2ZfZm10dHkgLT4gRW5kX29mX2ZtdHR5XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHR5cGUgY29uY2F0ZW5hdGlvbiAqKVxuXG4oKiBDb25jYXRlbmF0ZSB0d28gZm9ybWF0IHR5cGVzLiAqKVxuKCogVXNlZCBieTpcbiAgICogcmVhZGVyX25iX3VuaWZpZXJfb2ZfZm10dHkgdG8gY291bnQgcmVhZGVycyBpbiBhbiBmbXR0eSxcbiAgICogU2NhbmYudGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyB0byBleHRyYWN0IHJlYWRlcnMgaW5zaWRlICUoLi4uJSksXG4gICAqIENhbWxpbnRlcm5hbEZvcm1hdC5mbXR0eV9vZl9pZ25vcmVkX2Zvcm1hdCB0byBleHRyYWN0IGZvcm1hdCB0eXBlLiAqKVxuXG4oKlxubGV0IHJlYyBjb25jYXRfZm10dHkgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCAuXG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGYsIGIsIGMsIGUsIGcsIGgpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGcsIGgpIGZtdHR5ID1cbiopXG5sZXQgcmVjIGNvbmNhdF9mbXR0eSA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMlxuICAgICAgIGcxIGoxIGcyIGoyXG4gIC5cbiAgICAoZzEsIGIxLCBjMSwgajEsIGQxLCBhMSxcbiAgICAgZzIsIGIyLCBjMiwgajIsIGQyLCBhMikgZm10dHlfcmVsIC0+XG4gICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbCAtPlxuICAgIChnMSwgYjEsIGMxLCBqMSwgZTEsIGYxLFxuICAgICBnMiwgYjIsIGMyLCBqMiwgZTIsIGYyKSBmbXR0eV9yZWwgPVxuZnVuIGZtdHR5MSBmbXR0eTIgLT4gbWF0Y2ggZm10dHkxIHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgLT5cbiAgICBDaGFyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBTdHJpbmdfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIEludF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludDMyX3R5IHJlc3QgLT5cbiAgICBJbnQzMl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+XG4gICAgTmF0aXZlaW50X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50NjRfdHkgcmVzdCAtPlxuICAgIEludDY0X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIEZsb2F0X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgQm9vbF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBBbHBoYV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFRoZXRhX3R5IHJlc3QgLT5cbiAgICBUaGV0YV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEFueV90eSByZXN0IC0+XG4gICAgQW55X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBSZWFkZXJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEVuZF9vZl9mbXR0eSAtPiBmbXR0eTJcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCBjb25jYXRlbmF0aW9uICopXG5cbigqIENvbmNhdGVuYXRlIHR3byBmb3JtYXRzLiAqKVxubGV0IHJlYyBjb25jYXRfZm10IDogdHlwZSBhIGIgYyBkIGUgZiBnIGggLlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoZiwgYiwgYywgZSwgZywgaCkgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGcsIGgpIGZtdCA9XG5mdW4gZm10MSBmbXQyIC0+IG1hdGNoIGZtdDEgd2l0aFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIFN0cmluZyAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIENhbWxfc3RyaW5nIChwYWQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgSW50MzIgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludDY0IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBDaGFyIChyZXN0KSAtPlxuICAgIENoYXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgQ2FtbF9jaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgQm9vbCAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBBbHBoYSByZXN0IC0+XG4gICAgQWxwaGEgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFRoZXRhIHJlc3QgLT5cbiAgICBUaGV0YSAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ3VzdG9tIChhcml0eSwgZiwgcmVzdCkgLT5cbiAgICBDdXN0b20gKGFyaXR5LCBmLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBSZWFkZXIgcmVzdCAtPlxuICAgIFJlYWRlciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRmx1c2ggcmVzdCAtPlxuICAgIEZsdXNoIChjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgU3RyaW5nX2xpdGVyYWwgKHN0ciwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgQ2hhcl9saXRlcmFsICAgKGNociwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBGb3JtYXRfYXJnIChwYWQsIGZtdHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmcgICAocGFkLCBmbXR0eSwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRm9ybWF0X3N1YnN0IChwYWQsIGZtdHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdCAocGFkLCBmbXR0eSwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCByZXN0KSAtPlxuICAgIFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIHJlc3QpIC0+XG4gICAgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgU2Nhbl9uZXh0X2NoYXIgKHJlc3QpIC0+XG4gICAgU2Nhbl9uZXh0X2NoYXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICBJZ25vcmVkX3BhcmFtIChpZ24sIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIHJlc3QpIC0+XG4gICAgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCByZXN0KSAtPlxuICAgIEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICBmbXQyXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBHYWJyaWVsIFNjaGVyZXIsIHByb2pldCBQYXJ0b3V0LCBJTlJJQSBQYXJpcy1TYWNsYXkgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDIwIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIENhbWxpbnRlcm5hbEF0b21pYyBpcyBhIGRlcGVuZGVuY3kgb2YgU3RkbGliLCBzbyBpdCBpcyBjb21waWxlZCB3aXRoXG4gICAtbm9wZXJ2YXNpdmVzLiAqKVxuZXh0ZXJuYWwgKCA9PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxXCJcbmV4dGVybmFsICggKyApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgaWdub3JlIDogJ2EgLT4gdW5pdCA9IFwiJWlnbm9yZVwiXG5cbigqIFdlIGFyZSBub3QgcmV1c2luZyAoJ2EgcmVmKSBkaXJlY3RseSB0byBtYWtlIGl0IGVhc2llciB0byByZWFzb25cbiAgIGFib3V0IGF0b21pY2l0eSBpZiB3ZSB3aXNoIHRvOiBldmVuIGluIGEgc2VxdWVudGlhbCBpbXBsZW1lbnRhdGlvbixcbiAgIHNpZ25hbHMgYW5kIG90aGVyIGFzeW5jaHJvbm91cyBjYWxsYmFja3MgbWlnaHQgYnJlYWsgYXRvbWljaXR5LiAqKVxudHlwZSAnYSB0ID0ge211dGFibGUgdjogJ2F9XG5cbmxldCBtYWtlIHYgPSB7dn1cbmxldCBnZXQgciA9IHIudlxubGV0IHNldCByIHYgPSByLnYgPC0gdlxuXG4oKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgc2V0IHRvIG5ldmVyIGJlIGlubGluZWQ6IEZsYW1iZGEgaXNcbiAgIGFsbG93ZWQgdG8gbW92ZSBzdXJyb3VuZGluZyBjb2RlIGluc2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbixcbiAgIGluY2x1ZGluZyBhbGxvY2F0aW9ucy4gKilcblxubGV0W0BpbmxpbmUgbmV2ZXJdIGV4Y2hhbmdlIHIgdiA9XG4gICgqIEJFR0lOIEFUT01JQyAqKVxuICBsZXQgY3VyID0gci52IGluXG4gIHIudiA8LSB2O1xuICAoKiBFTkQgQVRPTUlDICopXG4gIGN1clxuXG5sZXRbQGlubGluZSBuZXZlcl0gY29tcGFyZV9hbmRfc2V0IHIgc2VlbiB2ID1cbiAgKCogQkVHSU4gQVRPTUlDICopXG4gIGxldCBjdXIgPSByLnYgaW5cbiAgaWYgY3VyID09IHNlZW4gdGhlbiAoXG4gICAgci52IDwtIHY7XG4gICAgKCogRU5EIEFUT01JQyAqKVxuICAgIHRydWVcbiAgKSBlbHNlXG4gICAgZmFsc2VcblxubGV0W0BpbmxpbmUgbmV2ZXJdIGZldGNoX2FuZF9hZGQgciBuID1cbiAgKCogQkVHSU4gQVRPTUlDICopXG4gIGxldCBjdXIgPSByLnYgaW5cbiAgci52IDwtIChjdXIgKyBuKTtcbiAgKCogRU5EIEFUT01JQyAqKVxuICBjdXJcblxubGV0IGluY3IgciA9IGlnbm9yZSAoZmV0Y2hfYW5kX2FkZCByIDEpXG5sZXQgZGVjciByID0gaWdub3JlIChmZXRjaF9hbmRfYWRkIHIgKC0xKSlcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRXhjZXB0aW9ucyAqKVxuXG5leHRlcm5hbCByZWdpc3Rlcl9uYW1lZF92YWx1ZSA6IHN0cmluZyAtPiAnYSAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZVwiXG5cbmxldCAoKSA9XG4gICgqIGZvciBydW50aW1lL2ZhaWxfbmF0LmMgKilcbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQZXJ2YXNpdmVzLmFycmF5X2JvdW5kX2Vycm9yXCJcbiAgICAoSW52YWxpZF9hcmd1bWVudCBcImluZGV4IG91dCBvZiBib3VuZHNcIilcblxuZXh0ZXJuYWwgcmFpc2UgOiBleG4gLT4gJ2EgPSBcIiVyYWlzZVwiXG5leHRlcm5hbCByYWlzZV9ub3RyYWNlIDogZXhuIC0+ICdhID0gXCIlcmFpc2Vfbm90cmFjZVwiXG5cbmxldCBmYWlsd2l0aCBzID0gcmFpc2UoRmFpbHVyZSBzKVxubGV0IGludmFsaWRfYXJnIHMgPSByYWlzZShJbnZhbGlkX2FyZ3VtZW50IHMpXG5cbmV4Y2VwdGlvbiBFeGl0XG5leGNlcHRpb24gTWF0Y2hfZmFpbHVyZSA9IE1hdGNoX2ZhaWx1cmVcbmV4Y2VwdGlvbiBBc3NlcnRfZmFpbHVyZSA9IEFzc2VydF9mYWlsdXJlXG5leGNlcHRpb24gSW52YWxpZF9hcmd1bWVudCA9IEludmFsaWRfYXJndW1lbnRcbmV4Y2VwdGlvbiBGYWlsdXJlID0gRmFpbHVyZVxuZXhjZXB0aW9uIE5vdF9mb3VuZCA9IE5vdF9mb3VuZFxuZXhjZXB0aW9uIE91dF9vZl9tZW1vcnkgPSBPdXRfb2ZfbWVtb3J5XG5leGNlcHRpb24gU3RhY2tfb3ZlcmZsb3cgPSBTdGFja19vdmVyZmxvd1xuZXhjZXB0aW9uIFN5c19lcnJvciA9IFN5c19lcnJvclxuZXhjZXB0aW9uIEVuZF9vZl9maWxlID0gRW5kX29mX2ZpbGVcbmV4Y2VwdGlvbiBEaXZpc2lvbl9ieV96ZXJvID0gRGl2aXNpb25fYnlfemVyb1xuZXhjZXB0aW9uIFN5c19ibG9ja2VkX2lvID0gU3lzX2Jsb2NrZWRfaW9cbmV4Y2VwdGlvbiBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZSA9IFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlXG5cbigqIENvbXBvc2l0aW9uIG9wZXJhdG9ycyAqKVxuXG5leHRlcm5hbCAoIHw+ICkgOiAnYSAtPiAoJ2EgLT4gJ2IpIC0+ICdiID0gXCIlcmV2YXBwbHlcIlxuZXh0ZXJuYWwgKCBAQCApIDogKCdhIC0+ICdiKSAtPiAnYSAtPiAnYiA9IFwiJWFwcGx5XCJcblxuKCogRGVidWdnaW5nICopXG5cbmV4dGVybmFsIF9fTE9DX18gOiBzdHJpbmcgPSBcIiVsb2NfTE9DXCJcbmV4dGVybmFsIF9fRklMRV9fIDogc3RyaW5nID0gXCIlbG9jX0ZJTEVcIlxuZXh0ZXJuYWwgX19MSU5FX18gOiBpbnQgPSBcIiVsb2NfTElORVwiXG5leHRlcm5hbCBfX01PRFVMRV9fIDogc3RyaW5nID0gXCIlbG9jX01PRFVMRVwiXG5leHRlcm5hbCBfX1BPU19fIDogc3RyaW5nICogaW50ICogaW50ICogaW50ID0gXCIlbG9jX1BPU1wiXG5leHRlcm5hbCBfX0ZVTkNUSU9OX18gOiBzdHJpbmcgPSBcIiVsb2NfRlVOQ1RJT05cIlxuXG5leHRlcm5hbCBfX0xPQ19PRl9fIDogJ2EgLT4gc3RyaW5nICogJ2EgPSBcIiVsb2NfTE9DXCJcbmV4dGVybmFsIF9fTElORV9PRl9fIDogJ2EgLT4gaW50ICogJ2EgPSBcIiVsb2NfTElORVwiXG5leHRlcm5hbCBfX1BPU19PRl9fIDogJ2EgLT4gKHN0cmluZyAqIGludCAqIGludCAqIGludCkgKiAnYSA9IFwiJWxvY19QT1NcIlxuXG4oKiBDb21wYXJpc29ucyAqKVxuXG5leHRlcm5hbCAoID0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcXVhbFwiXG5leHRlcm5hbCAoIDw+ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXF1YWxcIlxuZXh0ZXJuYWwgKCA8ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc3RoYW5cIlxuZXh0ZXJuYWwgKCA+ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZ3JlYXRlcnRoYW5cIlxuZXh0ZXJuYWwgKCA8PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWxlc3NlcXVhbFwiXG5leHRlcm5hbCAoID49ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZ3JlYXRlcmVxdWFsXCJcbmV4dGVybmFsIGNvbXBhcmUgOiAnYSAtPiAnYSAtPiBpbnQgPSBcIiVjb21wYXJlXCJcblxubGV0IG1pbiB4IHkgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgeVxuXG5leHRlcm5hbCAoID09ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXFcIlxuZXh0ZXJuYWwgKCAhPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJW5vdGVxXCJcblxuKCogQm9vbGVhbiBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIG5vdCA6IGJvb2wgLT4gYm9vbCA9IFwiJWJvb2xub3RcIlxuZXh0ZXJuYWwgKCAmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuZXh0ZXJuYWwgKCAmJiApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1YW5kXCJcbmV4dGVybmFsICggb3IgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdW9yXCJcbmV4dGVybmFsICggfHwgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdW9yXCJcblxuKCogSW50ZWdlciBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsICggfi0gKSA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgKCB+KyApIDogaW50IC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHN1Y2MgOiBpbnQgLT4gaW50ID0gXCIlc3VjY2ludFwiXG5leHRlcm5hbCBwcmVkIDogaW50IC0+IGludCA9IFwiJXByZWRpbnRcIlxuZXh0ZXJuYWwgKCArICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFkZGludFwiXG5leHRlcm5hbCAoIC0gKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlc3ViaW50XCJcbmV4dGVybmFsICggKiApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgKCAvICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWRpdmludFwiXG5leHRlcm5hbCAoIG1vZCApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxuXG5sZXQgYWJzIHggPSBpZiB4ID49IDAgdGhlbiB4IGVsc2UgLXhcblxuZXh0ZXJuYWwgKCBsYW5kICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFuZGludFwiXG5leHRlcm5hbCAoIGxvciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVvcmludFwiXG5leHRlcm5hbCAoIGx4b3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIleG9yaW50XCJcblxubGV0IGxub3QgeCA9IHggbHhvciAoLTEpXG5cbmV4dGVybmFsICggbHNsICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCAoIGxzciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc3JpbnRcIlxuZXh0ZXJuYWwgKCBhc3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcblxubGV0IG1heF9pbnQgPSAoLTEpIGxzciAxXG5sZXQgbWluX2ludCA9IG1heF9pbnQgKyAxXG5cbigqIEZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgKCB+LS4gKSA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlbmVnZmxvYXRcIlxuZXh0ZXJuYWwgKCB+Ky4gKSA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgKCArLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVhZGRmbG9hdFwiXG5leHRlcm5hbCAoIC0uICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJXN1YmZsb2F0XCJcbmV4dGVybmFsICggKi4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlbXVsZmxvYXRcIlxuZXh0ZXJuYWwgKCAvLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVkaXZmbG9hdFwiXG5leHRlcm5hbCAoICoqICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9wb3dlcl9mbG9hdFwiIFwicG93XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cF9mbG9hdFwiIFwiZXhwXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cG0xIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwbTFfZmxvYXRcIiBcImNhbWxfZXhwbTFcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvcyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NfZmxvYXRcIiBcImFjb3NcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5fZmxvYXRcIiBcImFzaW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5fZmxvYXRcIiBcImF0YW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbjIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuMl9mbG9hdFwiIFwiYXRhbjJcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgaHlwb3QgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgPSBcImNhbWxfaHlwb3RfZmxvYXRcIiBcImNhbWxfaHlwb3RcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zX2Zsb2F0XCIgXCJjb3NcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Nvc2hfZmxvYXRcIiBcImNvc2hcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvc2ggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hY29zaF9mbG9hdFwiIFwiY2FtbF9hY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2dfZmxvYXRcIiBcImxvZ1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cxMCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzEwX2Zsb2F0XCIgXCJsb2cxMFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cxcCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzFwX2Zsb2F0XCIgXCJjYW1sX2xvZzFwXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Npbl9mbG9hdFwiIFwic2luXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zaW5oX2Zsb2F0XCIgXCJzaW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFzaW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbmhfZmxvYXRcIiBcImNhbWxfYXNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc3FydCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NxcnRfZmxvYXRcIiBcInNxcnRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuX2Zsb2F0XCIgXCJ0YW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3RhbmhfZmxvYXRcIiBcInRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuaF9mbG9hdFwiIFwiY2FtbF9hdGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjZWlsIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY2VpbF9mbG9hdFwiIFwiY2VpbFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBmbG9vciA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb29yX2Zsb2F0XCIgXCJmbG9vclwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhYnNfZmxvYXQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFic2Zsb2F0XCJcbmV4dGVybmFsIGNvcHlzaWduIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXRcbiAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2NvcHlzaWduX2Zsb2F0XCIgXCJjYW1sX2NvcHlzaWduXCJcbiAgICAgICAgICAgICAgICAgIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RfZmxvYXQgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbW9kX2Zsb2F0XCIgXCJmbW9kXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZyZXhwIDogZmxvYXQgLT4gZmxvYXQgKiBpbnQgPSBcImNhbWxfZnJleHBfZmxvYXRcIlxuZXh0ZXJuYWwgbGRleHAgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gKGludCBbQHVudGFnZ2VkXSkgLT4gKGZsb2F0IFtAdW5ib3hlZF0pID1cbiAgXCJjYW1sX2xkZXhwX2Zsb2F0XCIgXCJjYW1sX2xkZXhwX2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbW9kZiA6IGZsb2F0IC0+IGZsb2F0ICogZmxvYXQgPSBcImNhbWxfbW9kZl9mbG9hdFwiXG5leHRlcm5hbCBmbG9hdCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgZmxvYXRfb2ZfaW50IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCB0cnVuY2F0ZSA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuZXh0ZXJuYWwgaW50X29mX2Zsb2F0IDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBmbG9hdF9vZl9iaXRzIDogaW50NjQgLT4gZmxvYXRcbiAgPSBcImNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c1wiIFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzX3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxubGV0IGluZmluaXR5ID1cbiAgZmxvYXRfb2ZfYml0cyAweDdGX0YwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IG5lZ19pbmZpbml0eSA9XG4gIGZsb2F0X29mX2JpdHMgMHhGRl9GMF8wMF8wMF8wMF8wMF8wMF8wMExcbmxldCBuYW4gPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRjBfMDBfMDBfMDBfMDBfMDBfMDFMXG5sZXQgbWF4X2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDdGX0VGX0ZGX0ZGX0ZGX0ZGX0ZGX0ZGTFxubGV0IG1pbl9mbG9hdCA9XG4gIGZsb2F0X29mX2JpdHMgMHgwMF8xMF8wMF8wMF8wMF8wMF8wMF8wMExcbmxldCBlcHNpbG9uX2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDNDX0IwXzAwXzAwXzAwXzAwXzAwXzAwTFxuXG50eXBlIGZwY2xhc3MgPVxuICAgIEZQX25vcm1hbFxuICB8IEZQX3N1Ym5vcm1hbFxuICB8IEZQX3plcm9cbiAgfCBGUF9pbmZpbml0ZVxuICB8IEZQX25hblxuZXh0ZXJuYWwgY2xhc3NpZnlfZmxvYXQgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gZnBjbGFzcyA9XG4gIFwiY2FtbF9jbGFzc2lmeV9mbG9hdFwiIFwiY2FtbF9jbGFzc2lmeV9mbG9hdF91bmJveGVkXCIgW0BAbm9hbGxvY11cblxuKCogU3RyaW5nIGFuZCBieXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgLS0gbW9yZSBpbiBtb2R1bGVzIFN0cmluZyBhbmQgQnl0ZXMgKilcblxuZXh0ZXJuYWwgc3RyaW5nX2xlbmd0aCA6IHN0cmluZyAtPiBpbnQgPSBcIiVzdHJpbmdfbGVuZ3RoXCJcbmV4dGVybmFsIGJ5dGVzX2xlbmd0aCA6IGJ5dGVzIC0+IGludCA9IFwiJWJ5dGVzX2xlbmd0aFwiXG5leHRlcm5hbCBieXRlc19jcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX2J5dGVzXCJcbmV4dGVybmFsIHN0cmluZ19ibGl0IDogc3RyaW5nIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfc3RyaW5nXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIGJ5dGVzX2JsaXQgOiBieXRlcyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuXG5sZXQgKCBeICkgczEgczIgPVxuICBsZXQgbDEgPSBzdHJpbmdfbGVuZ3RoIHMxIGFuZCBsMiA9IHN0cmluZ19sZW5ndGggczIgaW5cbiAgbGV0IHMgPSBieXRlc19jcmVhdGUgKGwxICsgbDIpIGluXG4gIHN0cmluZ19ibGl0IHMxIDAgcyAwIGwxO1xuICBzdHJpbmdfYmxpdCBzMiAwIHMgbDEgbDI7XG4gIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgc1xuXG4oKiBDaGFyYWN0ZXIgb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZSBDaGFyICopXG5cbmV4dGVybmFsIGludF9vZl9jaGFyIDogY2hhciAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCB1bnNhZmVfY2hhcl9vZl9pbnQgOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcbmxldCBjaGFyX29mX2ludCBuID1cbiAgaWYgbiA8IDAgfHwgbiA+IDI1NSB0aGVuIGludmFsaWRfYXJnIFwiY2hhcl9vZl9pbnRcIiBlbHNlIHVuc2FmZV9jaGFyX29mX2ludCBuXG5cbigqIFVuaXQgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBpZ25vcmUgOiAnYSAtPiB1bml0ID0gXCIlaWdub3JlXCJcblxuKCogUGFpciBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGZzdCA6ICdhICogJ2IgLT4gJ2EgPSBcIiVmaWVsZDBcIlxuZXh0ZXJuYWwgc25kIDogJ2EgKiAnYiAtPiAnYiA9IFwiJWZpZWxkMVwiXG5cbigqIFJlZmVyZW5jZXMgKilcblxudHlwZSAnYSByZWYgPSB7IG11dGFibGUgY29udGVudHMgOiAnYSB9XG5leHRlcm5hbCByZWYgOiAnYSAtPiAnYSByZWYgPSBcIiVtYWtlbXV0YWJsZVwiXG5leHRlcm5hbCAoICEgKSA6ICdhIHJlZiAtPiAnYSA9IFwiJWZpZWxkMFwiXG5leHRlcm5hbCAoIDo9ICkgOiAnYSByZWYgLT4gJ2EgLT4gdW5pdCA9IFwiJXNldGZpZWxkMFwiXG5leHRlcm5hbCBpbmNyIDogaW50IHJlZiAtPiB1bml0ID0gXCIlaW5jclwiXG5leHRlcm5hbCBkZWNyIDogaW50IHJlZiAtPiB1bml0ID0gXCIlZGVjclwiXG5cbigqIFJlc3VsdCB0eXBlICopXG5cbnR5cGUgKCdhLCdiKSByZXN1bHQgPSBPayBvZiAnYSB8IEVycm9yIG9mICdiXG5cbigqIFN0cmluZyBjb252ZXJzaW9uIGZ1bmN0aW9ucyAqKVxuXG5leHRlcm5hbCBmb3JtYXRfaW50IDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5leHRlcm5hbCBmb3JtYXRfZmxvYXQgOiBzdHJpbmcgLT4gZmxvYXQgLT4gc3RyaW5nID0gXCJjYW1sX2Zvcm1hdF9mbG9hdFwiXG5cbmxldCBzdHJpbmdfb2ZfYm9vbCBiID1cbiAgaWYgYiB0aGVuIFwidHJ1ZVwiIGVsc2UgXCJmYWxzZVwiXG5sZXQgYm9vbF9vZl9zdHJpbmcgPSBmdW5jdGlvblxuICB8IFwidHJ1ZVwiIC0+IHRydWVcbiAgfCBcImZhbHNlXCIgLT4gZmFsc2VcbiAgfCBfIC0+IGludmFsaWRfYXJnIFwiYm9vbF9vZl9zdHJpbmdcIlxuXG5sZXQgYm9vbF9vZl9zdHJpbmdfb3B0ID0gZnVuY3Rpb25cbiAgfCBcInRydWVcIiAtPiBTb21lIHRydWVcbiAgfCBcImZhbHNlXCIgLT4gU29tZSBmYWxzZVxuICB8IF8gLT4gTm9uZVxuXG5sZXQgc3RyaW5nX29mX2ludCBuID1cbiAgZm9ybWF0X2ludCBcIiVkXCIgblxuXG5leHRlcm5hbCBpbnRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludCA9IFwiY2FtbF9pbnRfb2Zfc3RyaW5nXCJcblxubGV0IGludF9vZl9zdHJpbmdfb3B0IHMgPVxuICAoKiBUT0RPOiBwcm92aWRlIHRoaXMgZGlyZWN0bHkgYXMgYSBub24tcmFpc2luZyBwcmltaXRpdmUuICopXG4gIHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxuZXh0ZXJuYWwgc3RyaW5nX2dldCA6IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9IFwiJXN0cmluZ19zYWZlX2dldFwiXG5cbmxldCB2YWxpZF9mbG9hdF9sZXhlbSBzID1cbiAgbGV0IGwgPSBzdHJpbmdfbGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPj0gbCB0aGVuIHMgXiBcIi5cIiBlbHNlXG4gICAgbWF0Y2ggc3RyaW5nX2dldCBzIGkgd2l0aFxuICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPiBsb29wIChpICsgMSlcbiAgICB8IF8gLT4gc1xuICBpblxuICBsb29wIDBcblxubGV0IHN0cmluZ19vZl9mbG9hdCBmID0gdmFsaWRfZmxvYXRfbGV4ZW0gKGZvcm1hdF9mbG9hdCBcIiUuMTJnXCIgZilcblxuZXh0ZXJuYWwgZmxvYXRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGZsb2F0ID0gXCJjYW1sX2Zsb2F0X29mX3N0cmluZ1wiXG5cbmxldCBmbG9hdF9vZl9zdHJpbmdfb3B0IHMgPVxuICAoKiBUT0RPOiBwcm92aWRlIHRoaXMgZGlyZWN0bHkgYXMgYSBub24tcmFpc2luZyBwcmltaXRpdmUuICopXG4gIHRyeSBTb21lIChmbG9hdF9vZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG4oKiBMaXN0IG9wZXJhdGlvbnMgLS0gbW9yZSBpbiBtb2R1bGUgTGlzdCAqKVxuXG5sZXQgcmVjICggQCApIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICAgIFtdIC0+IGwyXG4gIHwgaGQgOjogdGwgLT4gaGQgOjogKHRsIEAgbDIpXG5cbigqIEkvTyBvcGVyYXRpb25zICopXG5cbnR5cGUgaW5fY2hhbm5lbFxudHlwZSBvdXRfY2hhbm5lbFxuXG5leHRlcm5hbCBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDogaW50IC0+IG91dF9jaGFubmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcIlxuZXh0ZXJuYWwgb3Blbl9kZXNjcmlwdG9yX2luIDogaW50IC0+IGluX2NoYW5uZWwgPSBcImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXCJcblxubGV0IHN0ZGluID0gb3Blbl9kZXNjcmlwdG9yX2luIDBcbmxldCBzdGRvdXQgPSBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDFcbmxldCBzdGRlcnIgPSBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDJcblxuKCogR2VuZXJhbCBvdXRwdXQgZnVuY3Rpb25zICopXG5cbnR5cGUgb3Blbl9mbGFnID1cbiAgICBPcGVuX3Jkb25seSB8IE9wZW5fd3Jvbmx5IHwgT3Blbl9hcHBlbmRcbiAgfCBPcGVuX2NyZWF0IHwgT3Blbl90cnVuYyB8IE9wZW5fZXhjbFxuICB8IE9wZW5fYmluYXJ5IHwgT3Blbl90ZXh0IHwgT3Blbl9ub25ibG9ja1xuXG5leHRlcm5hbCBvcGVuX2Rlc2MgOiBzdHJpbmcgLT4gb3Blbl9mbGFnIGxpc3QgLT4gaW50IC0+IGludCA9IFwiY2FtbF9zeXNfb3BlblwiXG5cbmV4dGVybmFsIHNldF9vdXRfY2hhbm5lbF9uYW1lOiBvdXRfY2hhbm5lbCAtPiBzdHJpbmcgLT4gdW5pdCA9XG4gIFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXCJcblxubGV0IG9wZW5fb3V0X2dlbiBtb2RlIHBlcm0gbmFtZSA9XG4gIGxldCBjID0gb3Blbl9kZXNjcmlwdG9yX291dChvcGVuX2Rlc2MgbmFtZSBtb2RlIHBlcm0pIGluXG4gIHNldF9vdXRfY2hhbm5lbF9uYW1lIGMgbmFtZTtcbiAgY1xuXG5sZXQgb3Blbl9vdXQgbmFtZSA9XG4gIG9wZW5fb3V0X2dlbiBbT3Blbl93cm9ubHk7IE9wZW5fY3JlYXQ7IE9wZW5fdHJ1bmM7IE9wZW5fdGV4dF0gMG82NjYgbmFtZVxuXG5sZXQgb3Blbl9vdXRfYmluIG5hbWUgPVxuICBvcGVuX291dF9nZW4gW09wZW5fd3Jvbmx5OyBPcGVuX2NyZWF0OyBPcGVuX3RydW5jOyBPcGVuX2JpbmFyeV0gMG82NjYgbmFtZVxuXG5leHRlcm5hbCBmbHVzaCA6IG91dF9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfZmx1c2hcIlxuXG5leHRlcm5hbCBvdXRfY2hhbm5lbHNfbGlzdCA6IHVuaXQgLT4gb3V0X2NoYW5uZWwgbGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3RcIlxuXG5sZXQgZmx1c2hfYWxsICgpID1cbiAgbGV0IHJlYyBpdGVyID0gZnVuY3Rpb25cbiAgICAgIFtdIC0+ICgpXG4gICAgfCBhOjpsIC0+XG4gICAgICAgIGJlZ2luIHRyeVxuICAgICAgICAgICAgZmx1c2ggYVxuICAgICAgICB3aXRoIFN5c19lcnJvciBfIC0+XG4gICAgICAgICAgKCkgKCogaWdub3JlIGNoYW5uZWxzIGNsb3NlZCBkdXJpbmcgYSBwcmVjZWRpbmcgZmx1c2guICopXG4gICAgICAgIGVuZDtcbiAgICAgICAgaXRlciBsXG4gIGluIGl0ZXIgKG91dF9jaGFubmVsc19saXN0ICgpKVxuXG5leHRlcm5hbCB1bnNhZmVfb3V0cHV0IDogb3V0X2NoYW5uZWwgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dHB1dF9ieXRlc1wiXG5leHRlcm5hbCB1bnNhZmVfb3V0cHV0X3N0cmluZyA6IG91dF9jaGFubmVsIC0+IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dHB1dFwiXG5cbmV4dGVybmFsIG91dHB1dF9jaGFyIDogb3V0X2NoYW5uZWwgLT4gY2hhciAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9jaGFyXCJcblxubGV0IG91dHB1dF9ieXRlcyBvYyBzID1cbiAgdW5zYWZlX291dHB1dCBvYyBzIDAgKGJ5dGVzX2xlbmd0aCBzKVxuXG5sZXQgb3V0cHV0X3N0cmluZyBvYyBzID1cbiAgdW5zYWZlX291dHB1dF9zdHJpbmcgb2MgcyAwIChzdHJpbmdfbGVuZ3RoIHMpXG5cbmxldCBvdXRwdXQgb2MgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJvdXRwdXRcIlxuICBlbHNlIHVuc2FmZV9vdXRwdXQgb2MgcyBvZnMgbGVuXG5cbmxldCBvdXRwdXRfc3Vic3RyaW5nIG9jIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBzdHJpbmdfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIm91dHB1dF9zdWJzdHJpbmdcIlxuICBlbHNlIHVuc2FmZV9vdXRwdXRfc3RyaW5nIG9jIHMgb2ZzIGxlblxuXG5leHRlcm5hbCBvdXRwdXRfYnl0ZSA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9jaGFyXCJcbmV4dGVybmFsIG91dHB1dF9iaW5hcnlfaW50IDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfb3V0cHV0X2ludFwiXG5cbmV4dGVybmFsIG1hcnNoYWxfdG9fY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+ICdhIC0+IHVuaXQgbGlzdCAtPiB1bml0XG4gICAgID0gXCJjYW1sX291dHB1dF92YWx1ZVwiXG5sZXQgb3V0cHV0X3ZhbHVlIGNoYW4gdiA9IG1hcnNoYWxfdG9fY2hhbm5lbCBjaGFuIHYgW11cblxuZXh0ZXJuYWwgc2Vla19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX291dFwiXG5leHRlcm5hbCBwb3Nfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX3Bvc19vdXRcIlxuZXh0ZXJuYWwgb3V0X2NoYW5uZWxfbGVuZ3RoIDogb3V0X2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZVwiXG5leHRlcm5hbCBjbG9zZV9vdXRfY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfY2xvc2VfY2hhbm5lbFwiXG5sZXQgY2xvc2Vfb3V0IG9jID0gZmx1c2ggb2M7IGNsb3NlX291dF9jaGFubmVsIG9jXG5sZXQgY2xvc2Vfb3V0X25vZXJyIG9jID1cbiAgKHRyeSBmbHVzaCBvYyB3aXRoIF8gLT4gKCkpO1xuICAodHJ5IGNsb3NlX291dF9jaGFubmVsIG9jIHdpdGggXyAtPiAoKSlcbmV4dGVybmFsIHNldF9iaW5hcnlfbW9kZV9vdXQgOiBvdXRfY2hhbm5lbCAtPiBib29sIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXCJcblxuKCogR2VuZXJhbCBpbnB1dCBmdW5jdGlvbnMgKilcblxuZXh0ZXJuYWwgc2V0X2luX2NoYW5uZWxfbmFtZTogaW5fY2hhbm5lbCAtPiBzdHJpbmcgLT4gdW5pdCA9XG4gIFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXCJcblxubGV0IG9wZW5faW5fZ2VuIG1vZGUgcGVybSBuYW1lID1cbiAgbGV0IGMgPSBvcGVuX2Rlc2NyaXB0b3JfaW4ob3Blbl9kZXNjIG5hbWUgbW9kZSBwZXJtKSBpblxuICBzZXRfaW5fY2hhbm5lbF9uYW1lIGMgbmFtZTtcbiAgY1xuXG5sZXQgb3Blbl9pbiBuYW1lID1cbiAgb3Blbl9pbl9nZW4gW09wZW5fcmRvbmx5OyBPcGVuX3RleHRdIDAgbmFtZVxuXG5sZXQgb3Blbl9pbl9iaW4gbmFtZSA9XG4gIG9wZW5faW5fZ2VuIFtPcGVuX3Jkb25seTsgT3Blbl9iaW5hcnldIDAgbmFtZVxuXG5leHRlcm5hbCBpbnB1dF9jaGFyIDogaW5fY2hhbm5lbCAtPiBjaGFyID0gXCJjYW1sX21sX2lucHV0X2NoYXJcIlxuXG5leHRlcm5hbCB1bnNhZmVfaW5wdXQgOiBpbl9jaGFubmVsIC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gaW50XG4gICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfaW5wdXRcIlxuXG5sZXQgaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJpbnB1dFwiXG4gIGVsc2UgdW5zYWZlX2lucHV0IGljIHMgb2ZzIGxlblxuXG5sZXQgcmVjIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgbGVuIDw9IDAgdGhlbiAoKSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSB1bnNhZmVfaW5wdXQgaWMgcyBvZnMgbGVuIGluXG4gICAgaWYgciA9IDBcbiAgICB0aGVuIHJhaXNlIEVuZF9vZl9maWxlXG4gICAgZWxzZSB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgKG9mcyArIHIpIChsZW4gLSByKVxuICBlbmRcblxubGV0IHJlYWxseV9pbnB1dCBpYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYnl0ZXNfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcInJlYWxseV9pbnB1dFwiXG4gIGVsc2UgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIG9mcyBsZW5cblxubGV0IHJlYWxseV9pbnB1dF9zdHJpbmcgaWMgbGVuID1cbiAgbGV0IHMgPSBieXRlc19jcmVhdGUgbGVuIGluXG4gIHJlYWxseV9pbnB1dCBpYyBzIDAgbGVuO1xuICBieXRlc191bnNhZmVfdG9fc3RyaW5nIHNcblxuZXh0ZXJuYWwgaW5wdXRfc2Nhbl9saW5lIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lXCJcblxubGV0IGlucHV0X2xpbmUgY2hhbiA9XG4gIGxldCByZWMgYnVpbGRfcmVzdWx0IGJ1ZiBwb3MgPSBmdW5jdGlvblxuICAgIFtdIC0+IGJ1ZlxuICB8IGhkIDo6IHRsIC0+XG4gICAgICBsZXQgbGVuID0gYnl0ZXNfbGVuZ3RoIGhkIGluXG4gICAgICBieXRlc19ibGl0IGhkIDAgYnVmIChwb3MgLSBsZW4pIGxlbjtcbiAgICAgIGJ1aWxkX3Jlc3VsdCBidWYgKHBvcyAtIGxlbikgdGwgaW5cbiAgbGV0IHJlYyBzY2FuIGFjY3UgbGVuID1cbiAgICBsZXQgbiA9IGlucHV0X3NjYW5fbGluZSBjaGFuIGluXG4gICAgaWYgbiA9IDAgdGhlbiBiZWdpbiAgICAgICAgICAgICAgICAgICAoKiBuID0gMDogd2UgYXJlIGF0IEVPRiAqKVxuICAgICAgbWF0Y2ggYWNjdSB3aXRoXG4gICAgICAgIFtdIC0+IHJhaXNlIEVuZF9vZl9maWxlXG4gICAgICB8IF8gIC0+IGJ1aWxkX3Jlc3VsdCAoYnl0ZXNfY3JlYXRlIGxlbikgbGVuIGFjY3VcbiAgICBlbmQgZWxzZSBpZiBuID4gMCB0aGVuIGJlZ2luICAgICAgICAgICgqIG4gPiAwOiBuZXdsaW5lIGZvdW5kIGluIGJ1ZmZlciAqKVxuICAgICAgbGV0IHJlcyA9IGJ5dGVzX2NyZWF0ZSAobiAtIDEpIGluXG4gICAgICBpZ25vcmUgKHVuc2FmZV9pbnB1dCBjaGFuIHJlcyAwIChuIC0gMSkpO1xuICAgICAgaWdub3JlIChpbnB1dF9jaGFyIGNoYW4pOyAgICAgICAgICAgKCogc2tpcCB0aGUgbmV3bGluZSAqKVxuICAgICAgbWF0Y2ggYWNjdSB3aXRoXG4gICAgICAgIFtdIC0+IHJlc1xuICAgICAgfCAgXyAtPiBsZXQgbGVuID0gbGVuICsgbiAtIDEgaW5cbiAgICAgICAgICAgICAgYnVpbGRfcmVzdWx0IChieXRlc19jcmVhdGUgbGVuKSBsZW4gKHJlcyA6OiBhY2N1KVxuICAgIGVuZCBlbHNlIGJlZ2luICAgICAgICAgICAgICAgICAgICAgICAgKCogbiA8IDA6IG5ld2xpbmUgbm90IGZvdW5kICopXG4gICAgICBsZXQgYmVnID0gYnl0ZXNfY3JlYXRlICgtbikgaW5cbiAgICAgIGlnbm9yZSh1bnNhZmVfaW5wdXQgY2hhbiBiZWcgMCAoLW4pKTtcbiAgICAgIHNjYW4gKGJlZyA6OiBhY2N1KSAobGVuIC0gbilcbiAgICBlbmRcbiAgaW4gYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyAoc2NhbiBbXSAwKVxuXG5leHRlcm5hbCBpbnB1dF9ieXRlIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfY2hhclwiXG5leHRlcm5hbCBpbnB1dF9iaW5hcnlfaW50IDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfaW50XCJcbmV4dGVybmFsIGlucHV0X3ZhbHVlIDogaW5fY2hhbm5lbCAtPiAnYSA9IFwiY2FtbF9pbnB1dF92YWx1ZVwiXG5leHRlcm5hbCBzZWVrX2luIDogaW5fY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX2luXCJcbmV4dGVybmFsIHBvc19pbiA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX3Bvc19pblwiXG5leHRlcm5hbCBpbl9jaGFubmVsX2xlbmd0aCA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZVwiXG5leHRlcm5hbCBjbG9zZV9pbiA6IGluX2NoYW5uZWwgLT4gdW5pdCA9IFwiY2FtbF9tbF9jbG9zZV9jaGFubmVsXCJcbmxldCBjbG9zZV9pbl9ub2VyciBpYyA9ICh0cnkgY2xvc2VfaW4gaWMgd2l0aCBfIC0+ICgpKVxuZXh0ZXJuYWwgc2V0X2JpbmFyeV9tb2RlX2luIDogaW5fY2hhbm5lbCAtPiBib29sIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGVcIlxuXG4oKiBPdXRwdXQgZnVuY3Rpb25zIG9uIHN0YW5kYXJkIG91dHB1dCAqKVxuXG5sZXQgcHJpbnRfY2hhciBjID0gb3V0cHV0X2NoYXIgc3Rkb3V0IGNcbmxldCBwcmludF9zdHJpbmcgcyA9IG91dHB1dF9zdHJpbmcgc3Rkb3V0IHNcbmxldCBwcmludF9ieXRlcyBzID0gb3V0cHV0X2J5dGVzIHN0ZG91dCBzXG5sZXQgcHJpbnRfaW50IGkgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCAoc3RyaW5nX29mX2ludCBpKVxubGV0IHByaW50X2Zsb2F0IGYgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCAoc3RyaW5nX29mX2Zsb2F0IGYpXG5sZXQgcHJpbnRfZW5kbGluZSBzID1cbiAgb3V0cHV0X3N0cmluZyBzdGRvdXQgczsgb3V0cHV0X2NoYXIgc3Rkb3V0ICdcXG4nOyBmbHVzaCBzdGRvdXRcbmxldCBwcmludF9uZXdsaW5lICgpID0gb3V0cHV0X2NoYXIgc3Rkb3V0ICdcXG4nOyBmbHVzaCBzdGRvdXRcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBlcnJvciAqKVxuXG5sZXQgcHJlcnJfY2hhciBjID0gb3V0cHV0X2NoYXIgc3RkZXJyIGNcbmxldCBwcmVycl9zdHJpbmcgcyA9IG91dHB1dF9zdHJpbmcgc3RkZXJyIHNcbmxldCBwcmVycl9ieXRlcyBzID0gb3V0cHV0X2J5dGVzIHN0ZGVyciBzXG5sZXQgcHJlcnJfaW50IGkgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciAoc3RyaW5nX29mX2ludCBpKVxubGV0IHByZXJyX2Zsb2F0IGYgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciAoc3RyaW5nX29mX2Zsb2F0IGYpXG5sZXQgcHJlcnJfZW5kbGluZSBzID1cbiAgb3V0cHV0X3N0cmluZyBzdGRlcnIgczsgb3V0cHV0X2NoYXIgc3RkZXJyICdcXG4nOyBmbHVzaCBzdGRlcnJcbmxldCBwcmVycl9uZXdsaW5lICgpID0gb3V0cHV0X2NoYXIgc3RkZXJyICdcXG4nOyBmbHVzaCBzdGRlcnJcblxuKCogSW5wdXQgZnVuY3Rpb25zIG9uIHN0YW5kYXJkIGlucHV0ICopXG5cbmxldCByZWFkX2xpbmUgKCkgPSBmbHVzaCBzdGRvdXQ7IGlucHV0X2xpbmUgc3RkaW5cbmxldCByZWFkX2ludCAoKSA9IGludF9vZl9zdHJpbmcocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9pbnRfb3B0ICgpID0gaW50X29mX3N0cmluZ19vcHQocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9mbG9hdCAoKSA9IGZsb2F0X29mX3N0cmluZyhyZWFkX2xpbmUoKSlcbmxldCByZWFkX2Zsb2F0X29wdCAoKSA9IGZsb2F0X29mX3N0cmluZ19vcHQocmVhZF9saW5lKCkpXG5cbigqIE9wZXJhdGlvbnMgb24gbGFyZ2UgZmlsZXMgKilcblxubW9kdWxlIExhcmdlRmlsZSA9XG4gIHN0cnVjdFxuICAgIGV4dGVybmFsIHNlZWtfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50NjQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX291dF82NFwiXG4gICAgZXh0ZXJuYWwgcG9zX291dCA6IG91dF9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX3Bvc19vdXRfNjRcIlxuICAgIGV4dGVybmFsIG91dF9jaGFubmVsX2xlbmd0aCA6IG91dF9jaGFubmVsIC0+IGludDY0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFwiXG4gICAgZXh0ZXJuYWwgc2Vla19pbiA6IGluX2NoYW5uZWwgLT4gaW50NjQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX2luXzY0XCJcbiAgICBleHRlcm5hbCBwb3NfaW4gOiBpbl9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX3Bvc19pbl82NFwiXG4gICAgZXh0ZXJuYWwgaW5fY2hhbm5lbF9sZW5ndGggOiBpbl9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFwiXG4gIGVuZFxuXG4oKiBGb3JtYXRzICopXG5cbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDZcbiAgID0gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2XG4gICA9IEZvcm1hdCBvZiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZtdFxuICAgICAgICAgICAgICAgKiBzdHJpbmdcblxudHlwZSAoJ2EsICdiLCAnYywgJ2QpIGZvcm1hdDQgPSAoJ2EsICdiLCAnYywgJ2MsICdjLCAnZCkgZm9ybWF0NlxuXG50eXBlICgnYSwgJ2IsICdjKSBmb3JtYXQgPSAoJ2EsICdiLCAnYywgJ2MpIGZvcm1hdDRcblxubGV0IHN0cmluZ19vZl9mb3JtYXQgKEZvcm1hdCAoX2ZtdCwgc3RyKSkgPSBzdHJcblxuZXh0ZXJuYWwgZm9ybWF0X29mX3N0cmluZyA6XG4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT5cbiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiA9IFwiJWlkZW50aXR5XCJcblxubGV0ICggXl4gKSAoRm9ybWF0IChmbXQxLCBzdHIxKSkgKEZvcm1hdCAoZm10Miwgc3RyMikpID1cbiAgRm9ybWF0IChDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuY29uY2F0X2ZtdCBmbXQxIGZtdDIsXG4gICAgICAgICAgc3RyMSBeIFwiJSxcIiBeIHN0cjIpXG5cbigqIE1pc2NlbGxhbmVvdXMgKilcblxuZXh0ZXJuYWwgc3lzX2V4aXQgOiBpbnQgLT4gJ2EgPSBcImNhbWxfc3lzX2V4aXRcIlxuXG5sZXQgZXhpdF9mdW5jdGlvbiA9IENhbWxpbnRlcm5hbEF0b21pYy5tYWtlIGZsdXNoX2FsbFxuXG5sZXQgcmVjIGF0X2V4aXQgZiA9XG4gIGxldCBtb2R1bGUgQXRvbWljID0gQ2FtbGludGVybmFsQXRvbWljIGluXG4gICgqIE1QUiM3MjUzLCBNUFIjNzc5NjogbWFrZSBzdXJlIFwiZlwiIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSAqKVxuICBsZXQgZl95ZXRfdG9fcnVuID0gQXRvbWljLm1ha2UgdHJ1ZSBpblxuICBsZXQgb2xkX2V4aXQgPSBBdG9taWMuZ2V0IGV4aXRfZnVuY3Rpb24gaW5cbiAgbGV0IG5ld19leGl0ICgpID1cbiAgICBpZiBBdG9taWMuY29tcGFyZV9hbmRfc2V0IGZfeWV0X3RvX3J1biB0cnVlIGZhbHNlIHRoZW4gZiAoKSA7XG4gICAgb2xkX2V4aXQgKClcbiAgaW5cbiAgbGV0IHN1Y2Nlc3MgPSBBdG9taWMuY29tcGFyZV9hbmRfc2V0IGV4aXRfZnVuY3Rpb24gb2xkX2V4aXQgbmV3X2V4aXQgaW5cbiAgaWYgbm90IHN1Y2Nlc3MgdGhlbiBhdF9leGl0IGZcblxubGV0IGRvX2F0X2V4aXQgKCkgPSAoQ2FtbGludGVybmFsQXRvbWljLmdldCBleGl0X2Z1bmN0aW9uKSAoKVxuXG5sZXQgZXhpdCByZXRjb2RlID1cbiAgZG9fYXRfZXhpdCAoKTtcbiAgc3lzX2V4aXQgcmV0Y29kZVxuXG5sZXQgXyA9IHJlZ2lzdGVyX25hbWVkX3ZhbHVlIFwiUGVydmFzaXZlcy5kb19hdF9leGl0XCIgZG9fYXRfZXhpdFxuXG5leHRlcm5hbCBtYWpvciA6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9nY19tYWpvclwiXG5leHRlcm5hbCBuYWtlZF9wb2ludGVyc19jaGVja2VkIDogdW5pdCAtPiBib29sXG4gID0gXCJjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkXCJcbmxldCAoKSA9IGlmIG5ha2VkX3BvaW50ZXJzX2NoZWNrZWQgKCkgdGhlbiBhdF9leGl0IG1ham9yXG5cbigqTU9EVUxFX0FMSUFTRVMqKVxubW9kdWxlIEFyZyAgICAgICAgICA9IEFyZ1xubW9kdWxlIEFycmF5ICAgICAgICA9IEFycmF5XG5tb2R1bGUgQXJyYXlMYWJlbHMgID0gQXJyYXlMYWJlbHNcbm1vZHVsZSBBdG9taWMgICAgICAgPSBBdG9taWNcbm1vZHVsZSBCaWdhcnJheSAgICAgPSBCaWdhcnJheVxubW9kdWxlIEJvb2wgICAgICAgICA9IEJvb2xcbm1vZHVsZSBCdWZmZXIgICAgICAgPSBCdWZmZXJcbm1vZHVsZSBCeXRlcyAgICAgICAgPSBCeXRlc1xubW9kdWxlIEJ5dGVzTGFiZWxzICA9IEJ5dGVzTGFiZWxzXG5tb2R1bGUgQ2FsbGJhY2sgICAgID0gQ2FsbGJhY2tcbm1vZHVsZSBDaGFyICAgICAgICAgPSBDaGFyXG5tb2R1bGUgQ29tcGxleCAgICAgID0gQ29tcGxleFxubW9kdWxlIERpZ2VzdCAgICAgICA9IERpZ2VzdFxubW9kdWxlIEVpdGhlciAgICAgICA9IEVpdGhlclxubW9kdWxlIEVwaGVtZXJvbiAgICA9IEVwaGVtZXJvblxubW9kdWxlIEZpbGVuYW1lICAgICA9IEZpbGVuYW1lXG5tb2R1bGUgRmxvYXQgICAgICAgID0gRmxvYXRcbm1vZHVsZSBGb3JtYXQgICAgICAgPSBGb3JtYXRcbm1vZHVsZSBGdW4gICAgICAgICAgPSBGdW5cbm1vZHVsZSBHYyAgICAgICAgICAgPSBHY1xubW9kdWxlIEdlbmxleCAgICAgICA9IEdlbmxleFxubW9kdWxlIEhhc2h0YmwgICAgICA9IEhhc2h0Ymxcbm1vZHVsZSBJbl9jaGFubmVsICAgPSBJbl9jaGFubmVsXG5tb2R1bGUgSW50ICAgICAgICAgID0gSW50XG5tb2R1bGUgSW50MzIgICAgICAgID0gSW50MzJcbm1vZHVsZSBJbnQ2NCAgICAgICAgPSBJbnQ2NFxubW9kdWxlIExhenkgICAgICAgICA9IExhenlcbm1vZHVsZSBMZXhpbmcgICAgICAgPSBMZXhpbmdcbm1vZHVsZSBMaXN0ICAgICAgICAgPSBMaXN0XG5tb2R1bGUgTGlzdExhYmVscyAgID0gTGlzdExhYmVsc1xubW9kdWxlIE1hcCAgICAgICAgICA9IE1hcFxubW9kdWxlIE1hcnNoYWwgICAgICA9IE1hcnNoYWxcbm1vZHVsZSBNb3JlTGFiZWxzICAgPSBNb3JlTGFiZWxzXG5tb2R1bGUgTmF0aXZlaW50ICAgID0gTmF0aXZlaW50XG5tb2R1bGUgT2JqICAgICAgICAgID0gT2JqXG5tb2R1bGUgT28gICAgICAgICAgID0gT29cbm1vZHVsZSBPcHRpb24gICAgICAgPSBPcHRpb25cbm1vZHVsZSBPdXRfY2hhbm5lbCAgPSBPdXRfY2hhbm5lbFxubW9kdWxlIFBhcnNpbmcgICAgICA9IFBhcnNpbmdcbm1vZHVsZSBQZXJ2YXNpdmVzICAgPSBQZXJ2YXNpdmVzXG5tb2R1bGUgUHJpbnRleGMgICAgID0gUHJpbnRleGNcbm1vZHVsZSBQcmludGYgICAgICAgPSBQcmludGZcbm1vZHVsZSBRdWV1ZSAgICAgICAgPSBRdWV1ZVxubW9kdWxlIFJhbmRvbSAgICAgICA9IFJhbmRvbVxubW9kdWxlIFJlc3VsdCAgICAgICA9IFJlc3VsdFxubW9kdWxlIFNjYW5mICAgICAgICA9IFNjYW5mXG5tb2R1bGUgU2VxICAgICAgICAgID0gU2VxXG5tb2R1bGUgU2V0ICAgICAgICAgID0gU2V0XG5tb2R1bGUgU3RhY2sgICAgICAgID0gU3RhY2tcbm1vZHVsZSBTdGRMYWJlbHMgICAgPSBTdGRMYWJlbHNcbm1vZHVsZSBTdHJlYW0gICAgICAgPSBTdHJlYW1cbm1vZHVsZSBTdHJpbmcgICAgICAgPSBTdHJpbmdcbm1vZHVsZSBTdHJpbmdMYWJlbHMgPSBTdHJpbmdMYWJlbHNcbm1vZHVsZSBTeXMgICAgICAgICAgPSBTeXNcbm1vZHVsZSBVY2hhciAgICAgICAgPSBVY2hhclxubW9kdWxlIFVuaXQgICAgICAgICA9IFVuaXRcbm1vZHVsZSBXZWFrICAgICAgICAgPSBXZWFrXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG5pbmNsdWRlIEludFxuXG50eXBlIHQgPSBpbnRcbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG5cbmxldCB6ZXJvID0gMFxubGV0IG9uZSA9IDFcbmxldCBtaW51c19vbmUgPSAtMVxubGV0IGFkZCA9ICggKyApXG5sZXQgc3ViID0gKCAtIClcbmxldCBtdWwgPSAoICogKVxubGV0IGRpdiA9ICggLyApXG5sZXQgc3VjYyA9IHN1Y2NcbmxldCBwcmVkID0gcHJlZFxubGV0IGFicyA9IGFic1xubGV0IG1heF9pbnQgPSBtYXhfaW50XG5sZXQgbWluX2ludCA9IG1pbl9pbnRcbmxldCBlcXVhbCAoYSA6IGludCkgYiA9IFN0ZGxpYi4oID0gKSBhIGJcbmxldCBjb21wYXJlIChhIDogaW50KSBiID0gY29tcGFyZSBhIGJcblxuKCogdXNlIEZOVjpcbiAgIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zvd2xlciVFMiU4MCU5M05vbGwlRTIlODAlOTNWb19oYXNoX2Z1bmN0aW9uICopXG5sZXQgaGFzaCAobiA6IGludCkgOiBpbnQgPVxuICBsZXQgb2Zmc2V0X2Jhc2lzID0gMHhjYmYyOWNlNDg0MjIyMzI1TCBpblxuICBsZXQgcHJpbWUgPSAweDEwMDAwMDAwMWIzTCBpblxuXG4gIGxldCBoID0gcmVmIG9mZnNldF9iYXNpcyBpblxuICBmb3IgayA9IDAgdG8gNyBkb1xuICAgIChoIDo9IEludDY0LihtdWwgIWggcHJpbWUpKTtcbiAgICAoKiBoIDo9IGggeG9yIChrLXRoIGJ5dGUgb2YgbikgKilcbiAgICBoIDo9IEludDY0Lihsb2d4b3IgIWggKG9mX2ludCAoKG4gbHNyIChrICogOCkpIGxhbmQgMHhmZikpKVxuICBkb25lO1xuICAoKiB0cnVuY2F0ZSBiYWNrIHRvIGludCBhbmQgcmVtb3ZlIHNpZ24gKilcbiAgSW50NjQudG9faW50ICFoIGxhbmQgbWF4X2ludFxuXG5sZXQgcmFuZ2UgaSBqIHlpZWxkID1cbiAgbGV0IHJlYyB1cCBpIGogeWllbGQgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIHlpZWxkIGlcbiAgICBlbHNlIChcbiAgICAgIHlpZWxkIGk7XG4gICAgICB1cCAoaSArIDEpIGogeWllbGRcbiAgICApXG4gIGFuZCBkb3duIGkgaiB5aWVsZCA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgeWllbGQgaVxuICAgIGVsc2UgKFxuICAgICAgeWllbGQgaTtcbiAgICAgIGRvd24gKGkgLSAxKSBqIHlpZWxkXG4gICAgKVxuICBpblxuICBpZiBpIDw9IGogdGhlblxuICAgIHVwIGkgaiB5aWVsZFxuICBlbHNlXG4gICAgZG93biBpIGogeWllbGRcblxubGV0IHJhbmdlJyBpIGogeWllbGQgPVxuICBpZiBpIDwgaiB0aGVuXG4gICAgcmFuZ2UgaSAoaiAtIDEpIHlpZWxkXG4gIGVsc2UgaWYgaSA9IGogdGhlblxuICAgICgpXG4gIGVsc2VcbiAgICByYW5nZSBpIChqICsgMSkgeWllbGRcblxubGV0IHNpZ24gaSA9IGNvbXBhcmUgaSAwXG5sZXQgbmVnIGkgPSAtaVxuXG5sZXQgcG93IGEgYiA9XG4gIGxldCByZWMgYXV4IGFjYyA9IGZ1bmN0aW9uXG4gICAgfCAxIC0+IGFjY1xuICAgIHwgbiAtPlxuICAgICAgaWYgbiBtb2QgMiA9IDAgdGhlblxuICAgICAgICBhdXggKGFjYyAqIGFjYykgKG4gLyAyKVxuICAgICAgZWxzZVxuICAgICAgICBhY2MgKiBhdXggKGFjYyAqIGFjYykgKG4gLyAyKVxuICBpblxuICBtYXRjaCBiIHdpdGhcbiAgfCAwIC0+XG4gICAgaWYgYSA9IDAgdGhlblxuICAgICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJwb3c6IHVuZGVmaW5lZCB2YWx1ZSAwXjBcIilcbiAgICBlbHNlXG4gICAgICAxXG4gIHwgYiB3aGVuIGIgPCAwIC0+XG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJwb3c6IGNhbid0IHJhaXNlIGludCB0byBuZWdhdGl2ZSBwb3dlclwiKVxuICB8IGIgLT4gYXV4IGEgYlxuXG5tb2R1bGUgSW5maXggOiBzaWdcbiAgdmFsICggPSApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPD4gKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoIDwgKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoID4gKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoIDw9ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCA+PSApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggLS0gKSA6IHQgLT4gdCAtPiB0IGl0ZXJcbiAgdmFsICggLS1eICkgOiB0IC0+IHQgLT4gdCBpdGVyXG4gIHZhbCAoICsgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIC0gKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIH4tICkgOiB0IC0+IHRcbiAgdmFsICggKiApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggLyApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggKiogKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIG1vZCApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggbGFuZCApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggbG9yICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCBseG9yICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgbG5vdCA6IHQgLT4gdFxuICB2YWwgKCBsc2wgKSA6IHQgLT4gaW50IC0+IHRcbiAgdmFsICggbHNyICkgOiB0IC0+IGludCAtPiB0XG4gIHZhbCAoIGFzciApIDogdCAtPiBpbnQgLT4gdFxuZW5kID0gc3RydWN0XG4gIGluY2x1ZGUgU3RkbGliXG5cbiAgbGV0ICggLS0gKSA9IHJhbmdlXG4gIGxldCAoIC0tXiApID0gcmFuZ2UnXG4gIGxldCAoICoqICkgPSBwb3dcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbmxldCBtaW4gOiB0IC0+IHQgLT4gdCA9IFN0ZGxpYi5taW5cbmxldCBtYXggOiB0IC0+IHQgLT4gdCA9IFN0ZGxpYi5tYXhcblxubGV0IGZsb29yX2RpdiBhIG4gPVxuICBpZiBhIDwgMCAmJiBuID49IDAgdGhlblxuICAgICgoYSArIDEpIC8gbikgLSAxXG4gIGVsc2UgaWYgYSA+IDAgJiYgbiA8IDAgdGhlblxuICAgICgoYSAtIDEpIC8gbikgLSAxXG4gIGVsc2VcbiAgICBhIC8gblxuXG5sZXQgYm9vbF9uZXEgKGEgOiBib29sKSBiID0gU3RkbGliLiggPD4gKSBhIGJcblxubGV0IHJlbSBhIG4gPVxuICBsZXQgeSA9IGEgbW9kIG4gaW5cbiAgaWYgYm9vbF9uZXEgKHkgPCAwKSAobiA8IDApICYmIHkgPD4gMCB0aGVuXG4gICAgeSArIG5cbiAgZWxzZVxuICAgIHlcblxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG50eXBlICdhIHJhbmRvbV9nZW4gPSBSYW5kb20uU3RhdGUudCAtPiAnYVxuXG5sZXQgcmFuZG9tIG4gc3QgPSBSYW5kb20uU3RhdGUuaW50IHN0IG5cbmxldCByYW5kb21fc21hbGwgPSByYW5kb20gMTAwXG5sZXQgcmFuZG9tX3JhbmdlIGkgaiBzdCA9IGkgKyByYW5kb20gKGogLSBpKSBzdFxubGV0IHBwIGZtdCA9IEZvcm1hdC5wcF9wcmludF9pbnQgZm10XG5sZXQgbW9zdF9zaWduaWZpY2FudF9iaXQgPSAtMSBseG9yICgtMSBsc3IgMSlcbmxldCB0b19zdHJpbmcgPSBzdHJpbmdfb2ZfaW50XG5sZXQgb2Zfc3RyaW5nIHMgPSB0cnkgU29tZSAoaW50X29mX3N0cmluZyBzKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5sZXQgb2Zfc3RyaW5nX2V4biA9IFN0ZGxpYi5pbnRfb2Zfc3RyaW5nXG5sZXQgdG9fZmxvYXQgPSBmbG9hdF9vZl9pbnRcbmxldCBvZl9mbG9hdCA9IGludF9vZl9mbG9hdFxuXG50eXBlIG91dHB1dCA9IGNoYXIgLT4gdW5pdFxuXG4oKiBhYnN0cmFjdCBwcmludGVyICopXG5sZXQgdG9fYmluYXJ5X2dlbiAob3V0IDogb3V0cHV0KSBuID1cbiAgbGV0IG4gPVxuICAgIGlmIG4gPCAwIHRoZW4gKFxuICAgICAgb3V0ICctJztcbiAgICAgIC1uXG4gICAgKSBlbHNlXG4gICAgICBuXG4gIGluXG4gIG91dCAnMCc7XG4gIG91dCAnYic7XG4gIGxldCByZWMgbG9vcCBzdGFydGVkIGJpdCBuID1cbiAgICBpZiBiaXQgPSAwIHRoZW4gKFxuICAgICAgaWYgbm90IHN0YXJ0ZWQgdGhlbiBvdXQgJzAnXG4gICAgKSBlbHNlIChcbiAgICAgIGxldCBiID0gbiBsYW5kIGJpdCBpblxuICAgICAgaWYgYiA9IDAgdGhlbiAoXG4gICAgICAgIGlmIHN0YXJ0ZWQgdGhlbiBvdXQgJzAnO1xuICAgICAgICBsb29wIHN0YXJ0ZWQgKGJpdCBsc3IgMSkgblxuICAgICAgKSBlbHNlIChcbiAgICAgICAgb3V0ICcxJztcbiAgICAgICAgbG9vcCB0cnVlIChiaXQgbHNyIDEpIG5cbiAgICAgIClcbiAgICApXG4gIGluXG4gIGxvb3AgZmFsc2UgbW9zdF9zaWduaWZpY2FudF9iaXQgblxuXG5sZXQgcHBfYmluYXJ5IG91dCBuID0gdG9fYmluYXJ5X2dlbiAoRm9ybWF0LnBwX3ByaW50X2NoYXIgb3V0KSBuXG5cbmxldCB0b19zdHJpbmdfYmluYXJ5IG4gPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxNiBpblxuICB0b19iaW5hcnlfZ2VuIChCdWZmZXIuYWRkX2NoYXIgYnVmKSBuO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCByYW5nZV9ieSB+c3RlcCBpIGogeWllbGQgPVxuICBsZXQgcmVjIHJhbmdlIGkgaiB5aWVsZCA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgeWllbGQgaVxuICAgIGVsc2UgKFxuICAgICAgeWllbGQgaTtcbiAgICAgIHJhbmdlIChpICsgc3RlcCkgaiB5aWVsZFxuICAgIClcbiAgaW5cbiAgaWYgc3RlcCA9IDAgdGhlblxuICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiQ0NJbnQucmFuZ2VfYnlcIilcbiAgZWxzZSBpZlxuICAgIGlmIHN0ZXAgPiAwIHRoZW5cbiAgICAgIGkgPiBqXG4gICAgZWxzZVxuICAgICAgaSA8IGpcbiAgdGhlblxuICAgICgpXG4gIGVsc2VcbiAgICByYW5nZSBpICgoKGogLSBpKSAvIHN0ZXAgKiBzdGVwKSArIGkpIHlpZWxkXG5cbigqXG4gIGZyb20gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGFtbWluZ193ZWlnaHRcblxuICAvL1RoaXMgdXNlcyBmZXdlciBhcml0aG1ldGljIG9wZXJhdGlvbnMgdGhhbiBhbnkgb3RoZXIga25vd25cbiAgLy9pbXBsZW1lbnRhdGlvbiBvbiBtYWNoaW5lcyB3aXRoIHNsb3cgbXVsdGlwbGljYXRpb24uXG4gIC8vSXQgdXNlcyAxNyBhcml0aG1ldGljIG9wZXJhdGlvbnMuXG4gIGludCBwb3Bjb3VudF8yKHVpbnQ2NF90IHgpIHtcbiAgICB4IC09ICh4ID4+IDEpICYgbTE7ICAgICAgICAgICAgIC8vcHV0IGNvdW50IG9mIGVhY2ggMiBiaXRzIGludG8gdGhvc2UgMiBiaXRzXG4gICAgeCA9ICh4ICYgbTIpICsgKCh4ID4+IDIpICYgbTIpOyAvL3B1dCBjb3VudCBvZiBlYWNoIDQgYml0cyBpbnRvIHRob3NlIDQgYml0c1xuICAgIHggPSAoeCArICh4ID4+IDQpKSAmIG00OyAgICAgICAgLy9wdXQgY291bnQgb2YgZWFjaCA4IGJpdHMgaW50byB0aG9zZSA4IGJpdHNcbiAgICB4ICs9IHggPj4gIDg7ICAvL3B1dCBjb3VudCBvZiBlYWNoIDE2IGJpdHMgaW50byB0aGVpciBsb3dlc3QgOCBiaXRzXG4gICAgeCArPSB4ID4+IDE2OyAgLy9wdXQgY291bnQgb2YgZWFjaCAzMiBiaXRzIGludG8gdGhlaXIgbG93ZXN0IDggYml0c1xuICAgIHggKz0geCA+PiAzMjsgIC8vcHV0IGNvdW50IG9mIGVhY2ggNjQgYml0cyBpbnRvIHRoZWlyIGxvd2VzdCA4IGJpdHNcbiAgICByZXR1cm4geCAmIDB4N2Y7XG4gIH1cblxuICAgbTEgPSAweDU1NTU1NTU1NTU1NTU1NTVcbiAgIG0yID0gMHgzMzMzMzMzMzMzMzMzMzMzXG4gICBtNCA9IDB4MGYwZjBmMGYwZjBmMGYwZlxuKilcbmxldCBwb3Bjb3VudCAoYiA6IGludCkgOiBpbnQgPVxuICBsZXQgbTEgPSAweDU1NTU1NTU1NTU1NTU1NTVMIGluXG4gIGxldCBtMiA9IDB4MzMzMzMzMzMzMzMzMzMzM0wgaW5cbiAgbGV0IG00ID0gMHgwZjBmMGYwZjBmMGYwZjBmTCBpblxuICBsZXQgb3BlbiBJbnQ2NCBpblxuICBsZXQgYiA9IG9mX2ludCBiIGluXG4gICgqIGludC0+aW50NjQgKilcbiAgbGV0IGIgPSBsb2dhbmQgYiAweDdmZmZmZmZmZmZmZmZmZmZMIGluXG5cbiAgKCogcmVtb3ZlIHNpZ24gYml0LCB3ZSBkZWFsIHdpdGggdWludDY0IGhlcmUgKilcbiAgbGV0IGIgPSBzdWIgYiAobG9nYW5kIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgMSkgbTEpIGluXG4gIGxldCBiID0gYWRkIChsb2dhbmQgYiBtMikgKGxvZ2FuZCAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDIpIG0yKSBpblxuICBsZXQgYiA9IGxvZ2FuZCAoYWRkIGIgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiA0KSkgbTQgaW5cbiAgbGV0IGIgPSBhZGQgYiAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDgpIGluXG4gIGxldCBiID0gYWRkIGIgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAxNikgaW5cbiAgbGV0IGIgPSBhZGQgYiAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDMyKSBpblxuICBsZXQgYiA9IGxvZ2FuZCBiIDB4N2ZMIGluXG4gIHRvX2ludCBiXG5cbmxldCBsb2dhbmQgPSAoIGxhbmQgKVxubGV0IGxvZ29yID0gKCBsb3IgKVxubGV0IGxvZ3hvciA9ICggbHhvciApXG5sZXQgbG9nbm90ID0gbG5vdFxubGV0IHNoaWZ0X2xlZnQgPSAoIGxzbCApXG5sZXQgc2hpZnRfcmlnaHQgPSAoIGFzciApXG5sZXQgc2hpZnRfcmlnaHRfbG9naWNhbCA9ICggbHNyIClcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG4gICBUaGlzIGlzIGEgbGFnZ2VkLUZpYm9uYWNjaSBGKDU1LCAyNCwgKykgd2l0aCBhIG1vZGlmaWVkIGFkZGl0aW9uXG4gICBmdW5jdGlvbiB0byBlbmhhbmNlIHRoZSBtaXhpbmcgb2YgYml0cy5cbiAgIElmIHdlIHVzZSBub3JtYWwgYWRkaXRpb24sIHRoZSBsb3ctb3JkZXIgYml0IGZhaWxzIHRlc3RzIDEgYW5kIDdcbiAgIG9mIHRoZSBEaWVoYXJkIHRlc3Qgc3VpdGUsIGFuZCBiaXRzIDEgYW5kIDIgYWxzbyBmYWlsIHRlc3QgNy5cbiAgIElmIHdlIHVzZSBtdWx0aXBsaWNhdGlvbiBhcyBzdWdnZXN0ZWQgYnkgTWFyc2FnbGlhLCBpdCBkb2Vzbid0IGZhcmVcbiAgIG11Y2ggYmV0dGVyLlxuICAgQnkgbWl4aW5nIHRoZSBiaXRzIG9mIG9uZSBvZiB0aGUgbnVtYmVycyBiZWZvcmUgYWRkaXRpb24gKFhPUiB0aGVcbiAgIDUgaGlnaC1vcmRlciBiaXRzIGludG8gdGhlIGxvdy1vcmRlciBiaXRzKSwgd2UgZ2V0IGEgZ2VuZXJhdG9yIHRoYXRcbiAgIHBhc3NlcyBhbGwgdGhlIERpZWhhcmQgdGVzdHMuXG4qKVxuXG5leHRlcm5hbCByYW5kb21fc2VlZDogdW5pdCAtPiBpbnQgYXJyYXkgPSBcImNhbWxfc3lzX3JhbmRvbV9zZWVkXCJcblxubW9kdWxlIFN0YXRlID0gc3RydWN0XG5cbiAgdHlwZSB0ID0geyBzdCA6IGludCBhcnJheTsgbXV0YWJsZSBpZHggOiBpbnQgfVxuXG4gIGxldCBuZXdfc3RhdGUgKCkgPSB7IHN0ID0gQXJyYXkubWFrZSA1NSAwOyBpZHggPSAwIH1cbiAgbGV0IGFzc2lnbiBzdDEgc3QyID1cbiAgICBBcnJheS5ibGl0IHN0Mi5zdCAwIHN0MS5zdCAwIDU1O1xuICAgIHN0MS5pZHggPC0gc3QyLmlkeFxuXG5cbiAgbGV0IGZ1bGxfaW5pdCBzIHNlZWQgPVxuICAgIGxldCBjb21iaW5lIGFjY3UgeCA9IERpZ2VzdC5zdHJpbmcgKGFjY3UgXiBJbnQudG9fc3RyaW5nIHgpIGluXG4gICAgbGV0IGV4dHJhY3QgZCA9XG4gICAgICBDaGFyLmNvZGUgZC5bMF0gKyAoQ2hhci5jb2RlIGQuWzFdIGxzbCA4KSArIChDaGFyLmNvZGUgZC5bMl0gbHNsIDE2KVxuICAgICAgKyAoQ2hhci5jb2RlIGQuWzNdIGxzbCAyNClcbiAgICBpblxuICAgIGxldCBzZWVkID0gaWYgQXJyYXkubGVuZ3RoIHNlZWQgPSAwIHRoZW4gW3wgMCB8XSBlbHNlIHNlZWQgaW5cbiAgICBsZXQgbCA9IEFycmF5Lmxlbmd0aCBzZWVkIGluXG4gICAgZm9yIGkgPSAwIHRvIDU0IGRvXG4gICAgICBzLnN0LihpKSA8LSBpO1xuICAgIGRvbmU7XG4gICAgbGV0IGFjY3UgPSByZWYgXCJ4XCIgaW5cbiAgICBmb3IgaSA9IDAgdG8gNTQgKyBJbnQubWF4IDU1IGwgZG9cbiAgICAgIGxldCBqID0gaSBtb2QgNTUgaW5cbiAgICAgIGxldCBrID0gaSBtb2QgbCBpblxuICAgICAgYWNjdSA6PSBjb21iaW5lICFhY2N1IHNlZWQuKGspO1xuICAgICAgcy5zdC4oaikgPC0gKHMuc3QuKGopIGx4b3IgZXh0cmFjdCAhYWNjdSkgbGFuZCAweDNGRkZGRkZGOyAgKCogUFIjNTU3NSAqKVxuICAgIGRvbmU7XG4gICAgcy5pZHggPC0gMFxuXG5cbiAgbGV0IG1ha2Ugc2VlZCA9XG4gICAgbGV0IHJlc3VsdCA9IG5ld19zdGF0ZSAoKSBpblxuICAgIGZ1bGxfaW5pdCByZXN1bHQgc2VlZDtcbiAgICByZXN1bHRcblxuXG4gIGxldCBtYWtlX3NlbGZfaW5pdCAoKSA9IG1ha2UgKHJhbmRvbV9zZWVkICgpKVxuXG4gIGxldCBjb3B5IHMgPVxuICAgIGxldCByZXN1bHQgPSBuZXdfc3RhdGUgKCkgaW5cbiAgICBhc3NpZ24gcmVzdWx0IHM7XG4gICAgcmVzdWx0XG5cblxuICAoKiBSZXR1cm5zIDMwIHJhbmRvbSBiaXRzIGFzIGFuIGludGVnZXIgMCA8PSB4IDwgMTA3Mzc0MTgyNCAqKVxuICBsZXQgYml0cyBzID1cbiAgICBzLmlkeCA8LSAocy5pZHggKyAxKSBtb2QgNTU7XG4gICAgbGV0IGN1cnZhbCA9IHMuc3QuKHMuaWR4KSBpblxuICAgIGxldCBuZXd2YWwgPSBzLnN0Ligocy5pZHggKyAyNCkgbW9kIDU1KVxuICAgICAgICAgICAgICAgICArIChjdXJ2YWwgbHhvciAoKGN1cnZhbCBsc3IgMjUpIGxhbmQgMHgxRikpIGluXG4gICAgbGV0IG5ld3ZhbDMwID0gbmV3dmFsIGxhbmQgMHgzRkZGRkZGRiBpbiAgKCogUFIjNTU3NSAqKVxuICAgIHMuc3QuKHMuaWR4KSA8LSBuZXd2YWwzMDtcbiAgICBuZXd2YWwzMFxuXG5cbiAgbGV0IHJlYyBpbnRhdXggcyBuID1cbiAgICBsZXQgciA9IGJpdHMgcyBpblxuICAgIGxldCB2ID0gciBtb2QgbiBpblxuICAgIGlmIHIgLSB2ID4gMHgzRkZGRkZGRiAtIG4gKyAxIHRoZW4gaW50YXV4IHMgbiBlbHNlIHZcblxuICBsZXQgaW50IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kID4gMHgzRkZGRkZGRiB8fCBib3VuZCA8PSAwXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnRcIlxuICAgIGVsc2UgaW50YXV4IHMgYm91bmRcblxuICBsZXQgcmVjIGludDYzYXV4IHMgbiA9XG4gICAgbGV0IG1heF9pbnRfMzIgPSAoMSBsc2wgMzApICsgMHgzRkZGRkZGRiBpbiAoKiAweDdGRkZGRkZGICopXG4gICAgbGV0IGIxID0gYml0cyBzIGluXG4gICAgbGV0IGIyID0gYml0cyBzIGluXG4gICAgbGV0IChyLCBtYXhfaW50KSA9XG4gICAgICBpZiBuIDw9IG1heF9pbnRfMzIgdGhlblxuICAgICAgICAoKiAzMSByYW5kb20gYml0cyBvbiBib3RoIDY0LWJpdCBPQ2FtbCBhbmQgSmF2YVNjcmlwdC5cbiAgICAgICAgICAgVXNlIHVwcGVyIDE1IGJpdHMgb2YgYjEgYW5kIDE2IGJpdHMgb2YgYjIuICopXG4gICAgICAgIGxldCBicG9zID1cbiAgICAgICAgICAoKChiMiBsYW5kIDB4M0ZGRkMwMDApIGxzbCAxKSBsb3IgKGIxIGxzciAxNSkpXG4gICAgICAgIGluXG4gICAgICAgICAgKGJwb3MsIG1heF9pbnRfMzIpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBiMyA9IGJpdHMgcyBpblxuICAgICAgICAoKiA2MiByYW5kb20gYml0cyBvbiA2NC1iaXQgT0NhbWw7IHVucmVhY2hhYmxlIG9uIEphdmFTY3JpcHQuXG4gICAgICAgICAgIFVzZSB1cHBlciAyMCBiaXRzIG9mIGIxIGFuZCAyMSBiaXRzIG9mIGIyIGFuZCBiMy4gKilcbiAgICAgICAgbGV0IGJwb3MgPVxuICAgICAgICAgICgoKChiMyBsYW5kIDB4M0ZGRkZFMDApIGxzbCAxMikgbG9yIChiMiBsc3IgOSkpIGxzbCAyMClcbiAgICAgICAgICAgIGxvciAoYjEgbHNyIDEwKVxuICAgICAgICBpblxuICAgICAgICAgIChicG9zLCBtYXhfaW50KVxuICAgIGluXG4gICAgbGV0IHYgPSByIG1vZCBuIGluXG4gICAgaWYgciAtIHYgPiBtYXhfaW50IC0gbiArIDEgdGhlbiBpbnQ2M2F1eCBzIG4gZWxzZSB2XG5cbiAgbGV0IGZ1bGxfaW50IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDAgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJSYW5kb20uZnVsbF9pbnRcIlxuICAgIGVsc2UgaWYgYm91bmQgPiAweDNGRkZGRkZGIHRoZW5cbiAgICAgIGludDYzYXV4IHMgYm91bmRcbiAgICBlbHNlXG4gICAgICBpbnRhdXggcyBib3VuZFxuXG5cbiAgbGV0IHJlYyBpbnQzMmF1eCBzIG4gPVxuICAgIGxldCBiMSA9IEludDMyLm9mX2ludCAoYml0cyBzKSBpblxuICAgIGxldCBiMiA9IEludDMyLnNoaWZ0X2xlZnQgKEludDMyLm9mX2ludCAoYml0cyBzIGxhbmQgMSkpIDMwIGluXG4gICAgbGV0IHIgPSBJbnQzMi5sb2dvciBiMSBiMiBpblxuICAgIGxldCB2ID0gSW50MzIucmVtIHIgbiBpblxuICAgIGlmIEludDMyLnN1YiByIHYgPiBJbnQzMi5hZGQgKEludDMyLnN1YiBJbnQzMi5tYXhfaW50IG4pIDFsXG4gICAgdGhlbiBpbnQzMmF1eCBzIG5cbiAgICBlbHNlIHZcblxuICBsZXQgaW50MzIgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPD0gMGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLmludDMyXCJcbiAgICBlbHNlIGludDMyYXV4IHMgYm91bmRcblxuXG4gIGxldCByZWMgaW50NjRhdXggcyBuID1cbiAgICBsZXQgYjEgPSBJbnQ2NC5vZl9pbnQgKGJpdHMgcykgaW5cbiAgICBsZXQgYjIgPSBJbnQ2NC5zaGlmdF9sZWZ0IChJbnQ2NC5vZl9pbnQgKGJpdHMgcykpIDMwIGluXG4gICAgbGV0IGIzID0gSW50NjQuc2hpZnRfbGVmdCAoSW50NjQub2ZfaW50IChiaXRzIHMgbGFuZCA3KSkgNjAgaW5cbiAgICBsZXQgciA9IEludDY0LmxvZ29yIGIxIChJbnQ2NC5sb2dvciBiMiBiMykgaW5cbiAgICBsZXQgdiA9IEludDY0LnJlbSByIG4gaW5cbiAgICBpZiBJbnQ2NC5zdWIgciB2ID4gSW50NjQuYWRkIChJbnQ2NC5zdWIgSW50NjQubWF4X2ludCBuKSAxTFxuICAgIHRoZW4gaW50NjRhdXggcyBuXG4gICAgZWxzZSB2XG5cbiAgbGV0IGludDY0IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDBMXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQ2NFwiXG4gICAgZWxzZSBpbnQ2NGF1eCBzIGJvdW5kXG5cblxuICBsZXQgbmF0aXZlaW50ID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyBib3VuZCAtPiBOYXRpdmVpbnQub2ZfaW50MzIgKGludDMyIHMgKE5hdGl2ZWludC50b19pbnQzMiBib3VuZCkpXG4gICAgZWxzZSBmdW4gcyBib3VuZCAtPiBJbnQ2NC50b19uYXRpdmVpbnQgKGludDY0IHMgKEludDY0Lm9mX25hdGl2ZWludCBib3VuZCkpXG5cblxuICAoKiBSZXR1cm5zIGEgZmxvYXQgMCA8PSB4IDw9IDEgd2l0aCBhdCBtb3N0IDYwIGJpdHMgb2YgcHJlY2lzaW9uLiAqKVxuICBsZXQgcmF3ZmxvYXQgcyA9XG4gICAgbGV0IHNjYWxlID0gMTA3Mzc0MTgyNC4wICAoKiAyXjMwICopXG4gICAgYW5kIHIxID0gU3RkbGliLmZsb2F0IChiaXRzIHMpXG4gICAgYW5kIHIyID0gU3RkbGliLmZsb2F0IChiaXRzIHMpXG4gICAgaW4gKHIxIC8uIHNjYWxlICsuIHIyKSAvLiBzY2FsZVxuXG5cbiAgbGV0IGZsb2F0IHMgYm91bmQgPSByYXdmbG9hdCBzICouIGJvdW5kXG5cbiAgbGV0IGJvb2wgcyA9IChiaXRzIHMgbGFuZCAxID0gMClcblxuICBsZXQgYml0czMyIHMgPVxuICAgIGxldCBiMSA9IEludDMyLihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDE0KSBpbiAgKCogMTYgYml0cyAqKVxuICAgIGxldCBiMiA9IEludDMyLihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDE0KSBpbiAgKCogMTYgYml0cyAqKVxuICAgIEludDMyLihsb2dvciBiMSAoc2hpZnRfbGVmdCBiMiAxNikpXG5cbiAgbGV0IGJpdHM2NCBzID1cbiAgICBsZXQgYjEgPSBJbnQ2NC4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSA5KSBpbiAgKCogMjEgYml0cyAqKVxuICAgIGxldCBiMiA9IEludDY0LihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDkpIGluICAoKiAyMSBiaXRzICopXG4gICAgbGV0IGIzID0gSW50NjQuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgOCkgaW4gICgqIDIyIGJpdHMgKilcbiAgICBJbnQ2NC4obG9nb3IgYjEgKGxvZ29yIChzaGlmdF9sZWZ0IGIyIDIxKSAoc2hpZnRfbGVmdCBiMyA0MikpKVxuXG4gIGxldCBuYXRpdmViaXRzID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyAtPiBOYXRpdmVpbnQub2ZfaW50MzIgKGJpdHMzMiBzKVxuICAgIGVsc2UgZnVuIHMgLT4gSW50NjQudG9fbmF0aXZlaW50IChiaXRzNjQgcylcblxuZW5kXG5cbigqIFRoaXMgaXMgdGhlIHN0YXRlIHlvdSBnZXQgd2l0aCBbaW5pdCAyNzE4MjgxOF0gYW5kIHRoZW4gYXBwbHlpbmdcbiAgIHRoZSBcImxhbmQgMHgzRkZGRkZGRlwiIGZpbHRlciB0byB0aGVtLiAgU2VlICM1NTc1LCAjNTc5MywgIzU5NzcuICopXG5sZXQgZGVmYXVsdCA9IHtcbiAgU3RhdGUuc3QgPSBbfFxuICAgICAgMHgzYWUyNTIyYjsgMHgxZDhkNDYzNDsgMHgxNWI0ZmFkMDsgMHgxOGIxNGFjZTsgMHgxMmY4YTNjNDsgMHgzYjA4NmM0NztcbiAgICAgIDB4MTZkNDY3ZDY7IDB4MTAxZDkxYzc7IDB4MzIxZGYxNzc7IDB4MDE3NmMxOTM7IDB4MWZmNzJiZjE7IDB4MWU4ODkxMDk7XG4gICAgICAweDBiNDY0YjE4OyAweDJiODZiOTdjOyAweDA4OTFkYTQ4OyAweDAzMTM3NDYzOyAweDA4NWFjNWExOyAweDE1ZDYxZjJmO1xuICAgICAgMHgzYmNlZDM1OTsgMHgyOWMxYzEzMjsgMHgzYTg2NzY2ZTsgMHgzNjZkOGM4NjsgMHgxZjViNjIyMjsgMHgzY2UxYjU5ZjtcbiAgICAgIDB4MmViZjc4ZTE7IDB4MjdjZDFiODY7IDB4MjU4ZjNkYzM7IDB4Mzg5YTgxOTQ7IDB4MDJlNGM0NGM7IDB4MThjNDNmN2Q7XG4gICAgICAweDBmNmU1MzRmOyAweDFlN2RmMzU5OyAweDA1NWQwYjdlOyAweDEwZTg0ZTdlOyAweDEyNjE5OGU0OyAweDBlNzcyMmNiO1xuICAgICAgMHgxY2JlZGUyODsgMHgzMzkxYjk2NDsgMHgzZDQwZTkyYTsgMHgwYzU5OTMzZDsgMHgwYjhjZDBiNzsgMHgyNGVmZmYxYztcbiAgICAgIDB4MjgwM2ZkYWE7IDB4MDhlYmM3MmU7IDB4MGY1MjJlMzI7IDB4MDUzOThlZGM7IDB4MjE0NGEwNGM7IDB4MGFlZjNjYmQ7XG4gICAgICAweDAxYWQ0NzE5OyAweDM1YjkzY2Q2OyAweDJhNTU5ZDRmOyAweDFlNmZkNzY4OyAweDI2ZTI3ZjM2OyAweDE4NmYxOGMzO1xuICAgICAgMHgyZmJmOTY3YTtcbiAgICB8XTtcbiAgU3RhdGUuaWR4ID0gMDtcbn1cblxubGV0IGJpdHMgKCkgPSBTdGF0ZS5iaXRzIGRlZmF1bHRcbmxldCBpbnQgYm91bmQgPSBTdGF0ZS5pbnQgZGVmYXVsdCBib3VuZFxubGV0IGZ1bGxfaW50IGJvdW5kID0gU3RhdGUuZnVsbF9pbnQgZGVmYXVsdCBib3VuZFxubGV0IGludDMyIGJvdW5kID0gU3RhdGUuaW50MzIgZGVmYXVsdCBib3VuZFxubGV0IG5hdGl2ZWludCBib3VuZCA9IFN0YXRlLm5hdGl2ZWludCBkZWZhdWx0IGJvdW5kXG5sZXQgaW50NjQgYm91bmQgPSBTdGF0ZS5pbnQ2NCBkZWZhdWx0IGJvdW5kXG5sZXQgZmxvYXQgc2NhbGUgPSBTdGF0ZS5mbG9hdCBkZWZhdWx0IHNjYWxlXG5sZXQgYm9vbCAoKSA9IFN0YXRlLmJvb2wgZGVmYXVsdFxubGV0IGJpdHMzMiAoKSA9IFN0YXRlLmJpdHMzMiBkZWZhdWx0XG5sZXQgYml0czY0ICgpID0gU3RhdGUuYml0czY0IGRlZmF1bHRcbmxldCBuYXRpdmViaXRzICgpID0gU3RhdGUubmF0aXZlYml0cyBkZWZhdWx0XG5cbmxldCBmdWxsX2luaXQgc2VlZCA9IFN0YXRlLmZ1bGxfaW5pdCBkZWZhdWx0IHNlZWRcbmxldCBpbml0IHNlZWQgPSBTdGF0ZS5mdWxsX2luaXQgZGVmYXVsdCBbfCBzZWVkIHxdXG5sZXQgc2VsZl9pbml0ICgpID0gZnVsbF9pbml0IChyYW5kb21fc2VlZCgpKVxuXG4oKiBNYW5pcHVsYXRpbmcgdGhlIGN1cnJlbnQgc3RhdGUuICopXG5cbmxldCBnZXRfc3RhdGUgKCkgPSBTdGF0ZS5jb3B5IGRlZmF1bHRcbmxldCBzZXRfc3RhdGUgcyA9IFN0YXRlLmFzc2lnbiBkZWZhdWx0IHNcblxuKCoqKioqKioqKioqKioqKioqKioqXG5cbigqIFRlc3QgZnVuY3Rpb25zLiAgTm90IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5LlxuICAgVGhlIFtjaGlzcXVhcmVdIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBuID4gMTByLlxuICAgSXQgcmV0dXJucyBhIHRyaXBsZSAobG93LCBhY3R1YWwsIGhpZ2gpLlxuICAgSWYgbG93IDw9IGFjdHVhbCA8PSBoaWdoLCB0aGUgW2ddIGZ1bmN0aW9uIHBhc3NlZCB0aGUgdGVzdCxcbiAgIG90aGVyd2lzZSBpdCBmYWlsZWQuXG5cbiAgU29tZSByZXN1bHRzOlxuXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDUwMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwMCAxMDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDI0XG5pbml0IDI5OTc5MjY0MzsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAxNDE0MjEzNjsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmIDEwMjQ7IGNoaXNxdWFyZSBkaWZmIDEwMDAwMCAxMDI0XG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYgMTAwOyBjaGlzcXVhcmUgZGlmZiAxMDAwMDAgMTAwXG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYyIDEwMjQ7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmMiAxMDA7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAwXG5pbml0IDE0MTQyMTM2OyBpbml0X2RpZmYyIDEwMDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDBcbmluaXQgMjk5NzkyNjQzOyBpbml0X2RpZmYyIDEwMDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDBcbi0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTM2Ljc1NDQ0Njc5NjYzMjQ2NSwgOTk3LjUsIDEwNjMuMjQ1NTUzMjAzMzY3NTQpXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4OS43NDAwMDAwMDAwMDUyMzg3LCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDQ4NTguNTc4NjQzNzYyNjksIDUwNDUuNSwgNTE0MS40MjEzNTYyMzczMSlcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9XG4oOTM2Ljc1NDQ0Njc5NjYzMjQ2NSwgOTQ0LjgwNTk5OTk5OTk4MjMwNSwgMTA2My4yNDU1NTMyMDMzNjc1NClcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDE5LjE5NzQ0MDAwMDAwMzU1LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDU5LjMxNzc2MDAwMDAwNTM2LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDM5Ljk4NDYzOTk5OTk5NTEyLCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDU0LjM4MjA3OTk5OTk5NTc3LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDkwLjA5NjAwMDAwMDAwNSwgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDc2Ljc4NzIwMDAwMDAwNjEyLCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDg1LjE3NjAwMDAwMDAwNjc1MjEsIDEyMC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4NS4yMTYwMDAwMDAwMDAzNDkyLCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODAuNjIyMDAwMDAwMDAzMDI2OCwgMTIwLilcblxuKilcblxuKCogUmV0dXJuIHRoZSBzdW0gb2YgdGhlIHNxdWFyZXMgb2YgdltpMCxpMVsgKilcbmxldCByZWMgc3Vtc3EgdiBpMCBpMSA9XG4gIGlmIGkwID49IGkxIHRoZW4gMC4wXG4gIGVsc2UgaWYgaTEgPSBpMCArIDEgdGhlbiBTdGRsaWIuZmxvYXQgdi4oaTApICouIFN0ZGxpYi5mbG9hdCB2LihpMClcbiAgZWxzZSBzdW1zcSB2IGkwICgoaTAraTEpLzIpICsuIHN1bXNxIHYgKChpMCtpMSkvMikgaTFcblxuXG5sZXQgY2hpc3F1YXJlIGcgbiByID1cbiAgaWYgbiA8PSAxMCAqIHIgdGhlbiBpbnZhbGlkX2FyZyBcImNoaXNxdWFyZVwiO1xuICBsZXQgZiA9IEFycmF5Lm1ha2UgciAwIGluXG4gIGZvciBpID0gMSB0byBuIGRvXG4gICAgbGV0IHQgPSBnIHIgaW5cbiAgICBmLih0KSA8LSBmLih0KSArIDFcbiAgZG9uZTtcbiAgbGV0IHQgPSBzdW1zcSBmIDAgclxuICBhbmQgciA9IFN0ZGxpYi5mbG9hdCByXG4gIGFuZCBuID0gU3RkbGliLmZsb2F0IG4gaW5cbiAgbGV0IHNyID0gMi4wICouIHNxcnQgciBpblxuICAociAtLiBzciwgICAociAqLiB0IC8uIG4pIC0uIG4sICAgciArLiBzcilcblxuXG4oKiBUaGlzIGlzIHRvIHRlc3QgZm9yIGxpbmVhciBkZXBlbmRlbmNpZXMgYmV0d2VlbiBzdWNjZXNzaXZlIHJhbmRvbSBudW1iZXJzLlxuKilcbmxldCBzdCA9IHJlZiAwXG5sZXQgaW5pdF9kaWZmIHIgPSBzdCA6PSBpbnQgclxubGV0IGRpZmYgciA9XG4gIGxldCB4MSA9ICFzdFxuICBhbmQgeDIgPSBpbnQgclxuICBpblxuICBzdCA6PSB4MjtcbiAgaWYgeDEgPj0geDIgdGhlblxuICAgIHgxIC0geDJcbiAgZWxzZVxuICAgIHIgKyB4MSAtIHgyXG5cblxubGV0IHN0MSA9IHJlZiAwXG5hbmQgc3QyID0gcmVmIDBcblxuXG4oKiBUaGlzIGlzIHRvIHRlc3QgZm9yIHF1YWRyYXRpYyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBzdWNjZXNzaXZlIHJhbmRvbVxuICAgbnVtYmVycy5cbiopXG5sZXQgaW5pdF9kaWZmMiByID0gc3QxIDo9IGludCByOyBzdDIgOj0gaW50IHJcbmxldCBkaWZmMiByID1cbiAgbGV0IHgxID0gIXN0MVxuICBhbmQgeDIgPSAhc3QyXG4gIGFuZCB4MyA9IGludCByXG4gIGluXG4gIHN0MSA6PSB4MjtcbiAgc3QyIDo9IHgzO1xuICAoeDMgLSB4MiAtIHgyICsgeDEgKyAyKnIpIG1vZCByXG5cblxuKioqKioqKioqKioqKioqKioqKiopXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEFuIGFsaWFzIGZvciB0aGUgdHlwZSBvZiBsaXN0cy4gKilcbnR5cGUgJ2EgdCA9ICdhIGxpc3QgPSBbXSB8ICg6Oikgb2YgJ2EgKiAnYSBsaXN0XG5cbigqIExpc3Qgb3BlcmF0aW9ucyAqKVxuXG5sZXQgcmVjIGxlbmd0aF9hdXggbGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBsZW5cbiAgfCBfOjpsIC0+IGxlbmd0aF9hdXggKGxlbiArIDEpIGxcblxubGV0IGxlbmd0aCBsID0gbGVuZ3RoX2F1eCAwIGxcblxubGV0IGNvbnMgYSBsID0gYTo6bFxuXG5sZXQgaGQgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhaWx3aXRoIFwiaGRcIlxuICB8IGE6Ol8gLT4gYVxuXG5sZXQgdGwgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhaWx3aXRoIFwidGxcIlxuICB8IF86OmwgLT4gbFxuXG5sZXQgbnRoIGwgbiA9XG4gIGlmIG4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0Lm50aFwiIGVsc2VcbiAgbGV0IHJlYyBudGhfYXV4IGwgbiA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBmYWlsd2l0aCBcIm50aFwiXG4gICAgfCBhOjpsIC0+IGlmIG4gPSAwIHRoZW4gYSBlbHNlIG50aF9hdXggbCAobi0xKVxuICBpbiBudGhfYXV4IGwgblxuXG5sZXQgbnRoX29wdCBsIG4gPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5udGhcIiBlbHNlXG4gIGxldCByZWMgbnRoX2F1eCBsIG4gPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgYTo6bCAtPiBpZiBuID0gMCB0aGVuIFNvbWUgYSBlbHNlIG50aF9hdXggbCAobi0xKVxuICBpbiBudGhfYXV4IGwgblxuXG5sZXQgYXBwZW5kID0gKEApXG5cbmxldCByZWMgcmV2X2FwcGVuZCBsMSBsMiA9XG4gIG1hdGNoIGwxIHdpdGhcbiAgICBbXSAtPiBsMlxuICB8IGEgOjogbCAtPiByZXZfYXBwZW5kIGwgKGEgOjogbDIpXG5cbmxldCByZXYgbCA9IHJldl9hcHBlbmQgbCBbXVxuXG5sZXQgcmVjIGluaXRfdGFpbHJlY19hdXggYWNjIGkgbiBmID1cbiAgaWYgaSA+PSBuIHRoZW4gYWNjXG4gIGVsc2UgaW5pdF90YWlscmVjX2F1eCAoZiBpIDo6IGFjYykgKGkrMSkgbiBmXG5cbmxldCByZWMgaW5pdF9hdXggaSBuIGYgPVxuICBpZiBpID49IG4gdGhlbiBbXVxuICBlbHNlXG4gICAgbGV0IHIgPSBmIGkgaW5cbiAgICByIDo6IGluaXRfYXV4IChpKzEpIG4gZlxuXG5sZXQgcmV2X2luaXRfdGhyZXNob2xkID1cbiAgbWF0Y2ggU3lzLmJhY2tlbmRfdHlwZSB3aXRoXG4gIHwgU3lzLk5hdGl2ZSB8IFN5cy5CeXRlY29kZSAtPiAxMF8wMDBcbiAgKCogV2UgZG9uJ3Qga25vdyB0aGUgc2l6ZSBvZiB0aGUgc3RhY2ssIGJldHRlciBiZSBzYWZlIGFuZCBhc3N1bWUgaXQnc1xuICAgICBzbWFsbC4gKilcbiAgfCBTeXMuT3RoZXIgXyAtPiA1MFxuXG5sZXQgaW5pdCBsZW4gZiA9XG4gIGlmIGxlbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QuaW5pdFwiIGVsc2VcbiAgaWYgbGVuID4gcmV2X2luaXRfdGhyZXNob2xkIHRoZW4gcmV2IChpbml0X3RhaWxyZWNfYXV4IFtdIDAgbGVuIGYpXG4gIGVsc2UgaW5pdF9hdXggMCBsZW4gZlxuXG5sZXQgcmVjIGZsYXR0ZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgbDo6ciAtPiBsIEAgZmxhdHRlbiByXG5cbmxldCBjb25jYXQgPSBmbGF0dGVuXG5cbmxldCByZWMgbWFwIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgYTo6bCAtPiBsZXQgciA9IGYgYSBpbiByIDo6IG1hcCBmIGxcblxubGV0IHJlYyBtYXBpIGkgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW11cbiAgfCBhOjpsIC0+IGxldCByID0gZiBpIGEgaW4gciA6OiBtYXBpIChpICsgMSkgZiBsXG5cbmxldCBtYXBpIGYgbCA9IG1hcGkgMCBmIGxcblxubGV0IHJldl9tYXAgZiBsID1cbiAgbGV0IHJlYyBybWFwX2YgYWNjdSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2N1XG4gICAgfCBhOjpsIC0+IHJtYXBfZiAoZiBhIDo6IGFjY3UpIGxcbiAgaW5cbiAgcm1hcF9mIFtdIGxcblxuXG5sZXQgcmVjIGl0ZXIgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gKClcbiAgfCBhOjpsIC0+IGYgYTsgaXRlciBmIGxcblxubGV0IHJlYyBpdGVyaSBpIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+ICgpXG4gIHwgYTo6bCAtPiBmIGkgYTsgaXRlcmkgKGkgKyAxKSBmIGxcblxubGV0IGl0ZXJpIGYgbCA9IGl0ZXJpIDAgZiBsXG5cbmxldCByZWMgZm9sZF9sZWZ0IGYgYWNjdSBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gICAgW10gLT4gYWNjdVxuICB8IGE6OmwgLT4gZm9sZF9sZWZ0IGYgKGYgYWNjdSBhKSBsXG5cbmxldCByZWMgZm9sZF9yaWdodCBmIGwgYWNjdSA9XG4gIG1hdGNoIGwgd2l0aFxuICAgIFtdIC0+IGFjY3VcbiAgfCBhOjpsIC0+IGYgYSAoZm9sZF9yaWdodCBmIGwgYWNjdSlcblxubGV0IHJlYyBtYXAyIGYgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gW11cbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IGxldCByID0gZiBhMSBhMiBpbiByIDo6IG1hcDIgZiBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QubWFwMlwiXG5cbmxldCByZXZfbWFwMiBmIGwxIGwyID1cbiAgbGV0IHJlYyBybWFwMl9mIGFjY3UgbDEgbDIgPVxuICAgIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICB8IChbXSwgW10pIC0+IGFjY3VcbiAgICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcm1hcDJfZiAoZiBhMSBhMiA6OiBhY2N1KSBsMSBsMlxuICAgIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5yZXZfbWFwMlwiXG4gIGluXG4gIHJtYXAyX2YgW10gbDEgbDJcblxuXG5sZXQgcmVjIGl0ZXIyIGYgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gKClcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IGYgYTEgYTI7IGl0ZXIyIGYgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0Lml0ZXIyXCJcblxubGV0IHJlYyBmb2xkX2xlZnQyIGYgYWNjdSBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBhY2N1XG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmb2xkX2xlZnQyIGYgKGYgYWNjdSBhMSBhMikgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmZvbGRfbGVmdDJcIlxuXG5sZXQgcmVjIGZvbGRfcmlnaHQyIGYgbDEgbDIgYWNjdSA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBhY2N1XG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmIGExIGEyIChmb2xkX3JpZ2h0MiBmIGwxIGwyIGFjY3UpXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb2xkX3JpZ2h0MlwiXG5cbmxldCByZWMgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgICBbXSAtPiB0cnVlXG4gIHwgYTo6bCAtPiBwIGEgJiYgZm9yX2FsbCBwIGxcblxubGV0IHJlYyBleGlzdHMgcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IHAgYSB8fCBleGlzdHMgcCBsXG5cbmxldCByZWMgZm9yX2FsbDIgcCBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiB0cnVlXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBwIGExIGEyICYmIGZvcl9hbGwyIHAgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmZvcl9hbGwyXCJcblxubGV0IHJlYyBleGlzdHMyIHAgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gZmFsc2VcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHAgYTEgYTIgfHwgZXhpc3RzMiBwIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5leGlzdHMyXCJcblxubGV0IHJlYyBtZW0geCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IGNvbXBhcmUgYSB4ID0gMCB8fCBtZW0geCBsXG5cbmxldCByZWMgbWVtcSB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWxzZVxuICB8IGE6OmwgLT4gYSA9PSB4IHx8IG1lbXEgeCBsXG5cbmxldCByZWMgYXNzb2MgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgKGEsYik6OmwgLT4gaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gYiBlbHNlIGFzc29jIHggbFxuXG5sZXQgcmVjIGFzc29jX29wdCB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBOb25lXG4gIHwgKGEsYik6OmwgLT4gaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gU29tZSBiIGVsc2UgYXNzb2Nfb3B0IHggbFxuXG5sZXQgcmVjIGFzc3EgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgKGEsYik6OmwgLT4gaWYgYSA9PSB4IHRoZW4gYiBlbHNlIGFzc3EgeCBsXG5cbmxldCByZWMgYXNzcV9vcHQgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gTm9uZVxuICB8IChhLGIpOjpsIC0+IGlmIGEgPT0geCB0aGVuIFNvbWUgYiBlbHNlIGFzc3Ffb3B0IHggbFxuXG5sZXQgcmVjIG1lbV9hc3NvYyB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBmYWxzZVxuICB8IChhLCBfKSA6OiBsIC0+IGNvbXBhcmUgYSB4ID0gMCB8fCBtZW1fYXNzb2MgeCBsXG5cbmxldCByZWMgbWVtX2Fzc3EgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gZmFsc2VcbiAgfCAoYSwgXykgOjogbCAtPiBhID09IHggfHwgbWVtX2Fzc3EgeCBsXG5cbmxldCByZWMgcmVtb3ZlX2Fzc29jIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgKGEsIF8gYXMgcGFpcikgOjogbCAtPlxuICAgICAgaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gbCBlbHNlIHBhaXIgOjogcmVtb3ZlX2Fzc29jIHggbFxuXG5sZXQgcmVjIHJlbW92ZV9hc3NxIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgKGEsIF8gYXMgcGFpcikgOjogbCAtPiBpZiBhID09IHggdGhlbiBsIGVsc2UgcGFpciA6OiByZW1vdmVfYXNzcSB4IGxcblxubGV0IHJlYyBmaW5kIHAgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiB4IGVsc2UgZmluZCBwIGxcblxubGV0IHJlYyBmaW5kX29wdCBwID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIFNvbWUgeCBlbHNlIGZpbmRfb3B0IHAgbFxuXG5sZXQgcmVjIGZpbmRfbWFwIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZiB4IHdpdGhcbiAgICAgICB8IFNvbWUgXyBhcyByZXN1bHQgLT4gcmVzdWx0XG4gICAgICAgfCBOb25lIC0+IGZpbmRfbWFwIGYgbFxuICAgICBlbmRcblxubGV0IGZpbmRfYWxsIHAgPVxuICBsZXQgcmVjIGZpbmQgYWNjdSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gcmV2IGFjY3VcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4gZmluZCAoeCA6OiBhY2N1KSBsIGVsc2UgZmluZCBhY2N1IGwgaW5cbiAgZmluZCBbXVxuXG5sZXQgZmlsdGVyID0gZmluZF9hbGxcblxubGV0IGZpbHRlcmkgcCBsID1cbiAgbGV0IHJlYyBhdXggaSBhY2MgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJldiBhY2NcbiAgfCB4OjpsIC0+IGF1eCAoaSArIDEpIChpZiBwIGkgeCB0aGVuIHg6OmFjYyBlbHNlIGFjYykgbFxuICBpblxuICBhdXggMCBbXSBsXG5cbmxldCBmaWx0ZXJfbWFwIGYgPVxuICBsZXQgcmVjIGF1eCBhY2N1ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHJldiBhY2N1XG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGF1eCBhY2N1IGxcbiAgICAgICAgfCBTb21lIHYgLT4gYXV4ICh2IDo6IGFjY3UpIGxcbiAgaW5cbiAgYXV4IFtdXG5cbmxldCBjb25jYXRfbWFwIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHJldiBhY2NcbiAgICB8IHggOjogbCAtPlxuICAgICAgIGxldCB4cyA9IGYgeCBpblxuICAgICAgIGF1eCBmIChyZXZfYXBwZW5kIHhzIGFjYykgbFxuICBpbiBhdXggZiBbXSBsXG5cbmxldCBmb2xkX2xlZnRfbWFwIGYgYWNjdSBsID1cbiAgbGV0IHJlYyBhdXggYWNjdSBsX2FjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gYWNjdSwgcmV2IGxfYWNjdVxuICAgIHwgeCA6OiBsIC0+XG4gICAgICAgIGxldCBhY2N1LCB4ID0gZiBhY2N1IHggaW5cbiAgICAgICAgYXV4IGFjY3UgKHggOjogbF9hY2N1KSBsIGluXG4gIGF1eCBhY2N1IFtdIGxcblxubGV0IHBhcnRpdGlvbiBwIGwgPVxuICBsZXQgcmVjIHBhcnQgeWVzIG5vID0gZnVuY3Rpb25cbiAgfCBbXSAtPiAocmV2IHllcywgcmV2IG5vKVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBwYXJ0ICh4IDo6IHllcykgbm8gbCBlbHNlIHBhcnQgeWVzICh4IDo6IG5vKSBsIGluXG4gIHBhcnQgW10gW10gbFxuXG5sZXQgcGFydGl0aW9uX21hcCBwIGwgPVxuICBsZXQgcmVjIHBhcnQgbGVmdCByaWdodCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gKHJldiBsZWZ0LCByZXYgcmlnaHQpXG4gIHwgeCA6OiBsIC0+XG4gICAgIGJlZ2luIG1hdGNoIHAgeCB3aXRoXG4gICAgICAgfCBFaXRoZXIuTGVmdCB2IC0+IHBhcnQgKHYgOjogbGVmdCkgcmlnaHQgbFxuICAgICAgIHwgRWl0aGVyLlJpZ2h0IHYgLT4gcGFydCBsZWZ0ICh2IDo6IHJpZ2h0KSBsXG4gICAgIGVuZFxuICBpblxuICBwYXJ0IFtdIFtdIGxcblxubGV0IHJlYyBzcGxpdCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gKFtdLCBbXSlcbiAgfCAoeCx5KTo6bCAtPlxuICAgICAgbGV0IChyeCwgcnkpID0gc3BsaXQgbCBpbiAoeDo6cngsIHk6OnJ5KVxuXG5sZXQgcmVjIGNvbWJpbmUgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gW11cbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IChhMSwgYTIpIDo6IGNvbWJpbmUgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmNvbWJpbmVcIlxuXG4oKiogc29ydGluZyAqKVxuXG5sZXQgcmVjIG1lcmdlIGNtcCBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIGwyIC0+IGwyXG4gIHwgbDEsIFtdIC0+IGwxXG4gIHwgaDEgOjogdDEsIGgyIDo6IHQyIC0+XG4gICAgICBpZiBjbXAgaDEgaDIgPD0gMFxuICAgICAgdGhlbiBoMSA6OiBtZXJnZSBjbXAgdDEgbDJcbiAgICAgIGVsc2UgaDIgOjogbWVyZ2UgY21wIGwxIHQyXG5cblxubGV0IHN0YWJsZV9zb3J0IGNtcCBsID1cbiAgbGV0IHJlYyByZXZfbWVyZ2UgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGlmIGNtcCBoMSBoMiA8PSAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlIHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2UgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHJldl9tZXJnZV9yZXYgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGlmIGNtcCBoMSBoMiA+IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2VfcmV2IGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyBzb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9IGlmIGNtcCB4MSB4MiA8PSAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXSBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgaWYgY21wIHgxIHgyIDw9IDAgdGhlblxuICAgICAgICAgICAgaWYgY21wIHgyIHgzIDw9IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzIDw9IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPD0gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgyIHgzIDw9IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSByZXZfc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSByZXZfc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlX3JldiBzMSBzMiBbXSwgdGwpXG4gIGFuZCByZXZfc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPSBpZiBjbXAgeDEgeDIgPiAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXSBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgaWYgY21wIHgxIHgyID4gMCB0aGVuXG4gICAgICAgICAgICBpZiBjbXAgeDIgeDMgPiAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA+IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPiAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDIgeDMgPiAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSBzb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2UgczEgczIgW10sIHRsKVxuICBpblxuICBsZXQgbGVuID0gbGVuZ3RoIGwgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIGwgZWxzZSBmc3QgKHNvcnQgbGVuIGwpXG5cblxubGV0IHNvcnQgPSBzdGFibGVfc29ydFxubGV0IGZhc3Rfc29ydCA9IHN0YWJsZV9zb3J0XG5cbigqIE5vdGU6IG9uIGEgbGlzdCBvZiBsZW5ndGggYmV0d2VlbiBhYm91dCAxMDAwMDAgKGRlcGVuZGluZyBvbiB0aGUgbWlub3JcbiAgIGhlYXAgc2l6ZSBhbmQgdGhlIHR5cGUgb2YgdGhlIGxpc3QpIGFuZCBTeXMubWF4X2FycmF5X3NpemUsIGl0IGlzXG4gICBhY3R1YWxseSBmYXN0ZXIgdG8gdXNlIHRoZSBmb2xsb3dpbmcsIGJ1dCBpdCBtaWdodCBhbHNvIHVzZSBtb3JlIG1lbW9yeVxuICAgYmVjYXVzZSB0aGUgYXJndW1lbnQgbGlzdCBjYW5ub3QgYmUgZGVhbGxvY2F0ZWQgaW5jcmVtZW50YWxseS5cblxuICAgQWxzbywgdGhlcmUgc2VlbXMgdG8gYmUgYSBidWcgaW4gdGhpcyBjb2RlIG9yIGluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2Ygb2JqX3RydW5jYXRlLlxuXG5leHRlcm5hbCBvYmpfdHJ1bmNhdGUgOiAnYSBhcnJheSAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfdHJ1bmNhdGVcIlxuXG5sZXQgYXJyYXlfdG9fbGlzdF9pbl9wbGFjZSBhID1cbiAgbGV0IGwgPSBBcnJheS5sZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgYWNjdSBuIHAgPVxuICAgIGlmIHAgPD0gMCB0aGVuIGFjY3UgZWxzZSBiZWdpblxuICAgICAgaWYgcCA9IG4gdGhlbiBiZWdpblxuICAgICAgICBvYmpfdHJ1bmNhdGUgYSBwO1xuICAgICAgICBsb29wIChhLihwLTEpIDo6IGFjY3UpIChuLTEwMDApIChwLTEpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBsb29wIChhLihwLTEpIDo6IGFjY3UpIG4gKHAtMSlcbiAgICAgIGVuZFxuICAgIGVuZFxuICBpblxuICBsb29wIFtdIChsLTEwMDApIGxcblxuXG5sZXQgc3RhYmxlX3NvcnQgY21wIGwgPVxuICBsZXQgYSA9IEFycmF5Lm9mX2xpc3QgbCBpblxuICBBcnJheS5zdGFibGVfc29ydCBjbXAgYTtcbiAgYXJyYXlfdG9fbGlzdF9pbl9wbGFjZSBhXG5cbiopXG5cblxuKCoqIHNvcnRpbmcgKyByZW1vdmluZyBkdXBsaWNhdGVzICopXG5cbmxldCBzb3J0X3VuaXEgY21wIGwgPVxuICBsZXQgcmVjIHJldl9tZXJnZSBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgbGV0IGMgPSBjbXAgaDEgaDIgaW5cbiAgICAgICAgaWYgYyA9IDAgdGhlbiByZXZfbWVyZ2UgdDEgdDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIGlmIGMgPCAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlIHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2UgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHJldl9tZXJnZV9yZXYgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGxldCBjID0gY21wIGgxIGgyIGluXG4gICAgICAgIGlmIGMgPSAwIHRoZW4gcmV2X21lcmdlX3JldiB0MSB0MiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgaWYgYyA+IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2VfcmV2IGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyBzb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MV0gZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyXSBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4M10gZWxzZSBbeDM7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHJldl9zb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHJldl9zb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2VfcmV2IHMxIHMyIFtdLCB0bClcbiAgYW5kIHJldl9zb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MV0gZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyXSBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4M10gZWxzZSBbeDM7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHNvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlIHMxIHMyIFtdLCB0bClcbiAgaW5cbiAgbGV0IGxlbiA9IGxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IDIgdGhlbiBsIGVsc2UgZnN0IChzb3J0IGxlbiBsKVxuXG5cbmxldCByZWMgY29tcGFyZV9sZW5ndGhzIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IFtdLCBfIC0+IC0xXG4gIHwgXywgW10gLT4gMVxuICB8IF8gOjogbDEsIF8gOjogbDIgLT4gY29tcGFyZV9sZW5ndGhzIGwxIGwyXG47O1xuXG5sZXQgcmVjIGNvbXBhcmVfbGVuZ3RoX3dpdGggbCBuID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT5cbiAgICBpZiBuID0gMCB0aGVuIDAgZWxzZVxuICAgICAgaWYgbiA+IDAgdGhlbiAtMSBlbHNlIDFcbiAgfCBfIDo6IGwgLT5cbiAgICBpZiBuIDw9IDAgdGhlbiAxIGVsc2VcbiAgICAgIGNvbXBhcmVfbGVuZ3RoX3dpdGggbCAobi0xKVxuOztcblxuKCoqIHsxIENvbXBhcmlzb259ICopXG5cbigqIE5vdGU6IHdlIGFyZSAqbm90KiBzaG9ydGN1dHRpbmcgdGhlIGxpc3QgYnkgdXNpbmdcbiAgIFtMaXN0LmNvbXBhcmVfbGVuZ3Roc10gZmlyc3Q7IHRoaXMgbWF5IGJlIHNsb3dlciBvbiBsb25nIGxpc3RzXG4gICBpbW1lZGlhdGVseSBzdGFydCB3aXRoIGRpc3RpbmN0IGVsZW1lbnRzLiBJdCBpcyBhbHNvIGluY29ycmVjdCBmb3JcbiAgIFtjb21wYXJlXSBiZWxvdywgYW5kIGl0IGlzIGJldHRlciAocHJpbmNpcGxlIG9mIGxlYXN0IHN1cnByaXNlKSB0b1xuICAgdXNlIHRoZSBzYW1lIGFwcHJvYWNoIGZvciBib3RoIGZ1bmN0aW9ucy4gKilcbmxldCByZWMgZXF1YWwgZXEgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiB0cnVlXG4gIHwgW10sIF86Ol8gfCBfOjpfLCBbXSAtPiBmYWxzZVxuICB8IGExOjpsMSwgYTI6OmwyIC0+IGVxIGExIGEyICYmIGVxdWFsIGVxIGwxIGwyXG5cbmxldCByZWMgY29tcGFyZSBjbXAgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF86Ol8gLT4gLTFcbiAgfCBfOjpfLCBbXSAtPiAxXG4gIHwgYTE6OmwxLCBhMjo6bDIgLT5cbiAgICBsZXQgYyA9IGNtcCBhMSBhMiBpblxuICAgIGlmIGMgPD4gMCB0aGVuIGNcbiAgICBlbHNlIGNvbXBhcmUgY21wIGwxIGwyXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgbCA9XG4gIGxldCByZWMgYXV4IGwgKCkgPSBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFNlcS5OaWxcbiAgICB8IHggOjogdGFpbCAtPiBTZXEuQ29ucyAoeCwgYXV4IHRhaWwpXG4gIGluXG4gIGF1eCBsXG5cbmxldCBvZl9zZXEgc2VxID1cbiAgbGV0IHJlYyBkaXJlY3QgZGVwdGggc2VxIDogXyBsaXN0ID1cbiAgICBpZiBkZXB0aD0wXG4gICAgdGhlblxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+IHg6OmFjYykgW10gc2VxXG4gICAgICB8PiByZXYgKCogdGFpbHJlYyAqKVxuICAgIGVsc2UgbWF0Y2ggc2VxKCkgd2l0aFxuICAgICAgfCBTZXEuTmlsIC0+IFtdXG4gICAgICB8IFNlcS5Db25zICh4LCBuZXh0KSAtPiB4IDo6IGRpcmVjdCAoZGVwdGgtMSkgbmV4dFxuICBpblxuICBkaXJlY3QgNTAwIHNlcVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBPcGVyYXRpb25zIG9uIGludGVybmFsIHJlcHJlc2VudGF0aW9ucyBvZiB2YWx1ZXMgKilcblxudHlwZSB0XG5cbnR5cGUgcmF3X2RhdGEgPSBuYXRpdmVpbnRcblxuZXh0ZXJuYWwgcmVwciA6ICdhIC0+IHQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBvYmogOiB0IC0+ICdhID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgbWFnaWMgOiAnYSAtPiAnYiA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGlzX2ludCA6IHQgLT4gYm9vbCA9IFwiJW9ial9pc19pbnRcIlxubGV0IFtAaW5saW5lIGFsd2F5c10gaXNfYmxvY2sgYSA9IG5vdCAoaXNfaW50IGEpXG5leHRlcm5hbCB0YWcgOiB0IC0+IGludCA9IFwiY2FtbF9vYmpfdGFnXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHNldF90YWcgOiB0IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX29ial9zZXRfdGFnXCJcbmV4dGVybmFsIHNpemUgOiB0IC0+IGludCA9IFwiJW9ial9zaXplXCJcbmV4dGVybmFsIHJlYWNoYWJsZV93b3JkcyA6IHQgLT4gaW50ID0gXCJjYW1sX29ial9yZWFjaGFibGVfd29yZHNcIlxuZXh0ZXJuYWwgZmllbGQgOiB0IC0+IGludCAtPiB0ID0gXCIlb2JqX2ZpZWxkXCJcbmV4dGVybmFsIHNldF9maWVsZCA6IHQgLT4gaW50IC0+IHQgLT4gdW5pdCA9IFwiJW9ial9zZXRfZmllbGRcIlxuZXh0ZXJuYWwgZmxvYXRhcnJheV9nZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCA9IFwiY2FtbF9mbG9hdGFycmF5X2dldFwiXG5leHRlcm5hbCBmbG9hdGFycmF5X3NldCA6XG4gICAgZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiY2FtbF9mbG9hdGFycmF5X3NldFwiXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBkb3VibGVfZmllbGQgeCBpID0gZmxvYXRhcnJheV9nZXQgKG9iaiB4IDogZmxvYXRhcnJheSkgaVxubGV0IFtAaW5saW5lIGFsd2F5c10gc2V0X2RvdWJsZV9maWVsZCB4IGkgdiA9XG4gIGZsb2F0YXJyYXlfc2V0IChvYmogeCA6IGZsb2F0YXJyYXkpIGkgdlxuZXh0ZXJuYWwgcmF3X2ZpZWxkIDogdCAtPiBpbnQgLT4gcmF3X2RhdGEgPSBcImNhbWxfb2JqX3Jhd19maWVsZFwiXG5leHRlcm5hbCBzZXRfcmF3X2ZpZWxkIDogdCAtPiBpbnQgLT4gcmF3X2RhdGEgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfb2JqX3NldF9yYXdfZmllbGRcIlxuXG5leHRlcm5hbCBuZXdfYmxvY2sgOiBpbnQgLT4gaW50IC0+IHQgPSBcImNhbWxfb2JqX2Jsb2NrXCJcbmV4dGVybmFsIGR1cCA6IHQgLT4gdCA9IFwiY2FtbF9vYmpfZHVwXCJcbmV4dGVybmFsIHRydW5jYXRlIDogdCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfdHJ1bmNhdGVcIlxuZXh0ZXJuYWwgYWRkX29mZnNldCA6IHQgLT4gSW50MzIudCAtPiB0ID0gXCJjYW1sX29ial9hZGRfb2Zmc2V0XCJcbmV4dGVybmFsIHdpdGhfdGFnIDogaW50IC0+IHQgLT4gdCA9IFwiY2FtbF9vYmpfd2l0aF90YWdcIlxuXG5sZXQgZmlyc3Rfbm9uX2NvbnN0YW50X2NvbnN0cnVjdG9yX3RhZyA9IDBcbmxldCBsYXN0X25vbl9jb25zdGFudF9jb25zdHJ1Y3Rvcl90YWcgPSAyNDVcblxubGV0IGxhenlfdGFnID0gMjQ2XG5sZXQgY2xvc3VyZV90YWcgPSAyNDdcbmxldCBvYmplY3RfdGFnID0gMjQ4XG5sZXQgaW5maXhfdGFnID0gMjQ5XG5sZXQgZm9yd2FyZF90YWcgPSAyNTBcblxubGV0IG5vX3NjYW5fdGFnID0gMjUxXG5cbmxldCBhYnN0cmFjdF90YWcgPSAyNTFcbmxldCBzdHJpbmdfdGFnID0gMjUyXG5sZXQgZG91YmxlX3RhZyA9IDI1M1xubGV0IGRvdWJsZV9hcnJheV90YWcgPSAyNTRcbmxldCBjdXN0b21fdGFnID0gMjU1XG5sZXQgZmluYWxfdGFnID0gY3VzdG9tX3RhZ1xuXG5cbmxldCBpbnRfdGFnID0gMTAwMFxubGV0IG91dF9vZl9oZWFwX3RhZyA9IDEwMDFcbmxldCB1bmFsaWduZWRfdGFnID0gMTAwMlxuXG5tb2R1bGUgQ2xvc3VyZSA9IHN0cnVjdFxuICB0eXBlIGluZm8gPSB7XG4gICAgYXJpdHk6IGludDtcbiAgICBzdGFydF9lbnY6IGludDtcbiAgfVxuXG4gIGxldCBpbmZvX29mX3JhdyAoaW5mbyA6IG5hdGl2ZWludCkgPVxuICAgIGxldCBvcGVuIE5hdGl2ZWludCBpblxuICAgIGxldCBhcml0eSA9XG4gICAgICAoKiBzaWduZWQ6IG5lZ2F0aXZlIGZvciB0dXBsZWQgZnVuY3Rpb25zICopXG4gICAgICBpZiBTeXMud29yZF9zaXplID0gNjQgdGhlblxuICAgICAgICB0b19pbnQgKHNoaWZ0X3JpZ2h0IGluZm8gNTYpXG4gICAgICBlbHNlXG4gICAgICAgIHRvX2ludCAoc2hpZnRfcmlnaHQgaW5mbyAyNClcbiAgICBpblxuICAgIGxldCBzdGFydF9lbnYgPVxuICAgICAgKCogc3RhcnRfZW52IGlzIHVuc2lnbmVkLCBidXQgd2Uga25vdyBpdCBjYW4gYWx3YXlzIGZpdCBhbiBPQ2FtbFxuICAgICAgICAgaW50ZWdlciBzbyB3ZSB1c2UgW3RvX2ludF0gaW5zdGVhZCBvZiBbdW5zaWduZWRfdG9faW50XS4gKilcbiAgICAgIHRvX2ludCAoc2hpZnRfcmlnaHRfbG9naWNhbCAoc2hpZnRfbGVmdCBpbmZvIDgpIDkpIGluXG4gICAgeyBhcml0eTsgc3RhcnRfZW52IH1cblxuICAoKiBub3RlOiB3ZSBleHBlY3QgYSBjbG9zdXJlLCBub3QgYW4gaW5maXggcG9pbnRlciAqKVxuICBsZXQgaW5mbyAob2JqIDogdCkgPVxuICAgIGFzc2VydCAodGFnIG9iaiA9IGNsb3N1cmVfdGFnKTtcbiAgICBpbmZvX29mX3JhdyAocmF3X2ZpZWxkIG9iaiAxKVxuZW5kXG5cbm1vZHVsZSBFeHRlbnNpb25fY29uc3RydWN0b3IgPVxuc3RydWN0XG4gIHR5cGUgdCA9IGV4dGVuc2lvbl9jb25zdHJ1Y3RvclxuICBsZXQgb2ZfdmFsIHggPVxuICAgIGxldCB4ID0gcmVwciB4IGluXG4gICAgbGV0IHNsb3QgPVxuICAgICAgaWYgKGlzX2Jsb2NrIHgpICYmICh0YWcgeCkgPD4gb2JqZWN0X3RhZyAmJiAoc2l6ZSB4KSA+PSAxIHRoZW4gZmllbGQgeCAwXG4gICAgICBlbHNlIHhcbiAgICBpblxuICAgIGxldCBuYW1lID1cbiAgICAgIGlmIChpc19ibG9jayBzbG90KSAmJiAodGFnIHNsb3QpID0gb2JqZWN0X3RhZyB0aGVuIGZpZWxkIHNsb3QgMFxuICAgICAgZWxzZSBpbnZhbGlkX2FyZyBcIk9iai5leHRlbnNpb25fY29uc3RydWN0b3JcIlxuICAgIGluXG4gICAgICBpZiAodGFnIG5hbWUpID0gc3RyaW5nX3RhZyB0aGVuIChvYmogc2xvdCA6IHQpXG4gICAgICBlbHNlIGludmFsaWRfYXJnIFwiT2JqLmV4dGVuc2lvbl9jb25zdHJ1Y3RvclwiXG5cbiAgbGV0IFtAaW5saW5lIGFsd2F5c10gbmFtZSAoc2xvdCA6IHQpID1cbiAgICAob2JqIChmaWVsZCAocmVwciBzbG90KSAwKSA6IHN0cmluZylcblxuICBsZXQgW0BpbmxpbmUgYWx3YXlzXSBpZCAoc2xvdCA6IHQpID1cbiAgICAob2JqIChmaWVsZCAocmVwciBzbG90KSAxKSA6IGludClcbmVuZFxuXG5sZXQgZXh0ZW5zaW9uX2NvbnN0cnVjdG9yID0gRXh0ZW5zaW9uX2NvbnN0cnVjdG9yLm9mX3ZhbFxubGV0IGV4dGVuc2lvbl9uYW1lID0gRXh0ZW5zaW9uX2NvbnN0cnVjdG9yLm5hbWVcbmxldCBleHRlbnNpb25faWQgPSBFeHRlbnNpb25fY29uc3RydWN0b3IuaWRcblxubW9kdWxlIEVwaGVtZXJvbiA9IHN0cnVjdFxuICB0eXBlIG9ial90ID0gdFxuXG4gIHR5cGUgdCAoKiogZXBoZW1lcm9uICopXG5cbiAgICgqKiBUbyBjaGFuZ2UgaW4gc3luYyB3aXRoIHdlYWsuaCAqKVxuICBsZXQgYWRkaXRpb25hbF92YWx1ZXMgPSAyXG4gIGxldCBtYXhfZXBoZV9sZW5ndGggPSBTeXMubWF4X2FycmF5X2xlbmd0aCAtIGFkZGl0aW9uYWxfdmFsdWVzXG5cbiAgZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IHQgPSBcImNhbWxfZXBoZV9jcmVhdGVcIjs7XG4gIGxldCBjcmVhdGUgbCA9XG4gICAgaWYgbm90ICgwIDw9IGwgJiYgbCA8PSBtYXhfZXBoZV9sZW5ndGgpIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiT2JqLkVwaGVtZXJvbi5jcmVhdGVcIjtcbiAgICBjcmVhdGUgbFxuXG4gIGxldCBsZW5ndGggeCA9IHNpemUocmVwciB4KSAtIGFkZGl0aW9uYWxfdmFsdWVzXG5cbiAgbGV0IHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBtc2cgPVxuICAgIGlmIG5vdCAoMCA8PSBvICYmIG8gPCBsZW5ndGggZSkgdGhlblxuICAgICAgaW52YWxpZF9hcmcgbXNnXG5cbiAgZXh0ZXJuYWwgZ2V0X2tleTogdCAtPiBpbnQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2tleVwiXG4gIGxldCBnZXRfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi5nZXRfa2V5XCI7XG4gICAgZ2V0X2tleSBlIG9cblxuICBleHRlcm5hbCBnZXRfa2V5X2NvcHk6IHQgLT4gaW50IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9rZXlfY29weVwiXG4gIGxldCBnZXRfa2V5X2NvcHkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLmdldF9rZXlfY29weVwiO1xuICAgIGdldF9rZXlfY29weSBlIG9cblxuICBleHRlcm5hbCBzZXRfa2V5OiB0IC0+IGludCAtPiBvYmpfdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfc2V0X2tleVwiXG4gIGxldCBzZXRfa2V5IGUgbyB4ID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLnNldF9rZXlcIjtcbiAgICBzZXRfa2V5IGUgbyB4XG5cbiAgZXh0ZXJuYWwgdW5zZXRfa2V5OiB0IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfdW5zZXRfa2V5XCJcbiAgbGV0IHVuc2V0X2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24udW5zZXRfa2V5XCI7XG4gICAgdW5zZXRfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGNoZWNrX2tleTogdCAtPiBpbnQgLT4gYm9vbCA9IFwiY2FtbF9lcGhlX2NoZWNrX2tleVwiXG4gIGxldCBjaGVja19rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLmNoZWNrX2tleVwiO1xuICAgIGNoZWNrX2tleSBlIG9cblxuICBleHRlcm5hbCBibGl0X2tleSA6IHQgLT4gaW50IC0+IHQgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgPSBcImNhbWxfZXBoZV9ibGl0X2tleVwiXG5cbiAgbGV0IGJsaXRfa2V5IGUxIG8xIGUyIG8yIGwgPVxuICAgIGlmIGwgPCAwIHx8IG8xIDwgMCB8fCBvMSA+IGxlbmd0aCBlMSAtIGxcbiAgICAgICB8fCBvMiA8IDAgfHwgbzIgPiBsZW5ndGggZTIgLSBsXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIk9iai5FcGhlbWVyb24uYmxpdF9rZXlcIlxuICAgIGVsc2UgaWYgbCA8PiAwIHRoZW4gYmxpdF9rZXkgZTEgbzEgZTIgbzIgbFxuXG4gIGV4dGVybmFsIGdldF9kYXRhOiB0IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9kYXRhXCJcbiAgZXh0ZXJuYWwgZ2V0X2RhdGFfY29weTogdCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfZGF0YV9jb3B5XCJcbiAgZXh0ZXJuYWwgc2V0X2RhdGE6IHQgLT4gb2JqX3QgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3NldF9kYXRhXCJcbiAgZXh0ZXJuYWwgdW5zZXRfZGF0YTogdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfdW5zZXRfZGF0YVwiXG4gIGV4dGVybmFsIGNoZWNrX2RhdGE6IHQgLT4gYm9vbCA9IFwiY2FtbF9lcGhlX2NoZWNrX2RhdGFcIlxuICBleHRlcm5hbCBibGl0X2RhdGEgOiB0IC0+IHQgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX2JsaXRfZGF0YVwiXG5cbmVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBJbnRlcm5hbHMgb2YgZm9yY2luZyBsYXp5IHZhbHVlcy4gKilcblxudHlwZSAnYSB0ID0gJ2EgbGF6eV90XG5cbmV4Y2VwdGlvbiBVbmRlZmluZWRcblxubGV0IHJhaXNlX3VuZGVmaW5lZCA9IE9iai5yZXByIChmdW4gKCkgLT4gcmFpc2UgVW5kZWZpbmVkKVxuXG5leHRlcm5hbCBtYWtlX2ZvcndhcmQgOiBPYmoudCAtPiBPYmoudCAtPiB1bml0ID0gXCJjYW1sX29ial9tYWtlX2ZvcndhcmRcIlxuXG4oKiBBc3N1bWUgW2Jsa10gaXMgYSBibG9jayB3aXRoIHRhZyBsYXp5ICopXG5sZXQgZm9yY2VfbGF6eV9ibG9jayAoYmxrIDogJ2FyZyBsYXp5X3QpID1cbiAgbGV0IGNsb3N1cmUgPSAoT2JqLm9iaiAoT2JqLmZpZWxkIChPYmoucmVwciBibGspIDApIDogdW5pdCAtPiAnYXJnKSBpblxuICBPYmouc2V0X2ZpZWxkIChPYmoucmVwciBibGspIDAgcmFpc2VfdW5kZWZpbmVkO1xuICB0cnlcbiAgICBsZXQgcmVzdWx0ID0gY2xvc3VyZSAoKSBpblxuICAgIG1ha2VfZm9yd2FyZCAoT2JqLnJlcHIgYmxrKSAoT2JqLnJlcHIgcmVzdWx0KTtcbiAgICByZXN1bHRcbiAgd2l0aCBlIC0+XG4gICAgT2JqLnNldF9maWVsZCAoT2JqLnJlcHIgYmxrKSAwIChPYmoucmVwciAoZnVuICgpIC0+IHJhaXNlIGUpKTtcbiAgICByYWlzZSBlXG5cblxuKCogQXNzdW1lIFtibGtdIGlzIGEgYmxvY2sgd2l0aCB0YWcgbGF6eSAqKVxubGV0IGZvcmNlX3ZhbF9sYXp5X2Jsb2NrIChibGsgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgKE9iai5yZXByIGJsaykgMCkgOiB1bml0IC0+ICdhcmcpIGluXG4gIE9iai5zZXRfZmllbGQgKE9iai5yZXByIGJsaykgMCByYWlzZV91bmRlZmluZWQ7XG4gIGxldCByZXN1bHQgPSBjbG9zdXJlICgpIGluXG4gIG1ha2VfZm9yd2FyZCAoT2JqLnJlcHIgYmxrKSAoT2JqLnJlcHIgcmVzdWx0KTtcbiAgcmVzdWx0XG5cblxuKCogW2ZvcmNlXSBpcyBub3QgdXNlZCwgc2luY2UgW0xhenkuZm9yY2VdIGlzIGRlY2xhcmVkIGFzIGEgcHJpbWl0aXZlXG4gICB3aG9zZSBjb2RlIGlubGluZXMgdGhlIHRhZyB0ZXN0cyBvZiBpdHMgYXJndW1lbnQsIGV4Y2VwdCB3aGVuIGFmbFxuICAgaW5zdHJ1bWVudGF0aW9uIGlzIHR1cm5lZCBvbi4gKilcblxubGV0IGZvcmNlIChsenYgOiAnYXJnIGxhenlfdCkgPVxuICAoKiBVc2luZyBbU3lzLm9wYXF1ZV9pZGVudGl0eV0gcHJldmVudHMgdHdvIHBvdGVudGlhbCBwcm9ibGVtczpcbiAgICAgLSBJZiB0aGUgdmFsdWUgaXMga25vd24gdG8gaGF2ZSBGb3J3YXJkX3RhZywgdGhlbiBpdHMgdGFnIGNvdWxkIGhhdmVcbiAgICAgICBjaGFuZ2VkIGR1cmluZyBHQywgc28gdGhhdCBpbmZvcm1hdGlvbiBtdXN0IGJlIGZvcmdvdHRlbiAoc2VlIEdQUiM3MTNcbiAgICAgICBhbmQgaXNzdWUgIzczMDEpXG4gICAgIC0gSWYgdGhlIHZhbHVlIGlzIGtub3duIHRvIGJlIGltbXV0YWJsZSwgdGhlbiBpZiB0aGUgY29tcGlsZXJcbiAgICAgICBjYW5ub3QgcHJvdmUgdGhhdCB0aGUgbGFzdCBicmFuY2ggaXMgbm90IHRha2VuIGl0IHdpbGwgaXNzdWUgYVxuICAgICAgIHdhcm5pbmcgNTkgKG1vZGlmaWNhdGlvbiBvZiBhbiBpbW11dGFibGUgdmFsdWUpICopXG4gIGxldCBsenYgPSBTeXMub3BhcXVlX2lkZW50aXR5IGx6diBpblxuICBsZXQgeCA9IE9iai5yZXByIGx6diBpblxuICBsZXQgdCA9IE9iai50YWcgeCBpblxuICBpZiB0ID0gT2JqLmZvcndhcmRfdGFnIHRoZW4gKE9iai5vYmogKE9iai5maWVsZCB4IDApIDogJ2FyZykgZWxzZVxuICBpZiB0IDw+IE9iai5sYXp5X3RhZyB0aGVuIChPYmoub2JqIHggOiAnYXJnKVxuICBlbHNlIGZvcmNlX2xhenlfYmxvY2sgbHp2XG5cblxubGV0IGZvcmNlX3ZhbCAobHp2IDogJ2FyZyBsYXp5X3QpID1cbiAgbGV0IHggPSBPYmoucmVwciBsenYgaW5cbiAgbGV0IHQgPSBPYmoudGFnIHggaW5cbiAgaWYgdCA9IE9iai5mb3J3YXJkX3RhZyB0aGVuIChPYmoub2JqIChPYmouZmllbGQgeCAwKSA6ICdhcmcpIGVsc2VcbiAgaWYgdCA8PiBPYmoubGF6eV90YWcgdGhlbiAoT2JqLm9iaiB4IDogJ2FyZylcbiAgZWxzZSBmb3JjZV92YWxfbGF6eV9ibG9jayBsenZcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAnYSB0ID0gJ2Egb3B0aW9uID0gTm9uZSB8IFNvbWUgb2YgJ2FcblxubGV0IG5vbmUgPSBOb25lXG5sZXQgc29tZSB2ID0gU29tZSB2XG5sZXQgdmFsdWUgbyB+ZGVmYXVsdCA9IG1hdGNoIG8gd2l0aCBTb21lIHYgLT4gdiB8IE5vbmUgLT4gZGVmYXVsdFxubGV0IGdldCA9IGZ1bmN0aW9uIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIm9wdGlvbiBpcyBOb25lXCJcbmxldCBiaW5kIG8gZiA9IG1hdGNoIG8gd2l0aCBOb25lIC0+IE5vbmUgfCBTb21lIHYgLT4gZiB2XG5sZXQgam9pbiA9IGZ1bmN0aW9uIFNvbWUgbyAtPiBvIHwgTm9uZSAtPiBOb25lXG5sZXQgbWFwIGYgbyA9IG1hdGNoIG8gd2l0aCBOb25lIC0+IE5vbmUgfCBTb21lIHYgLT4gU29tZSAoZiB2KVxubGV0IGZvbGQgfm5vbmUgfnNvbWUgPSBmdW5jdGlvbiBTb21lIHYgLT4gc29tZSB2IHwgTm9uZSAtPiBub25lXG5sZXQgaXRlciBmID0gZnVuY3Rpb24gU29tZSB2IC0+IGYgdiB8IE5vbmUgLT4gKClcbmxldCBpc19ub25lID0gZnVuY3Rpb24gTm9uZSAtPiB0cnVlIHwgU29tZSBfIC0+IGZhbHNlXG5sZXQgaXNfc29tZSA9IGZ1bmN0aW9uIE5vbmUgLT4gZmFsc2UgfCBTb21lIF8gLT4gdHJ1ZVxuXG5sZXQgZXF1YWwgZXEgbzAgbzEgPSBtYXRjaCBvMCwgbzEgd2l0aFxufCBTb21lIHYwLCBTb21lIHYxIC0+IGVxIHYwIHYxXG58IE5vbmUsIE5vbmUgLT4gdHJ1ZVxufCBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIGNtcCBvMCBvMSA9IG1hdGNoIG8wLCBvMSB3aXRoXG58IFNvbWUgdjAsIFNvbWUgdjEgLT4gY21wIHYwIHYxXG58IE5vbmUsIE5vbmUgLT4gMFxufCBOb25lLCBTb21lIF8gLT4gLTFcbnwgU29tZSBfLCBOb25lIC0+IDFcblxubGV0IHRvX3Jlc3VsdCB+bm9uZSA9IGZ1bmN0aW9uIE5vbmUgLT4gRXJyb3Igbm9uZSB8IFNvbWUgdiAtPiBPayB2XG5sZXQgdG9fbGlzdCA9IGZ1bmN0aW9uIE5vbmUgLT4gW10gfCBTb21lIHYgLT4gW3ZdXG5sZXQgdG9fc2VxID0gZnVuY3Rpb24gTm9uZSAtPiBTZXEuZW1wdHkgfCBTb21lIHYgLT4gU2VxLnJldHVybiB2XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgKCdhLCAnZSkgdCA9ICgnYSwgJ2UpIHJlc3VsdCA9IE9rIG9mICdhIHwgRXJyb3Igb2YgJ2VcblxubGV0IG9rIHYgPSBPayB2XG5sZXQgZXJyb3IgZSA9IEVycm9yIGVcbmxldCB2YWx1ZSByIH5kZWZhdWx0ID0gbWF0Y2ggciB3aXRoIE9rIHYgLT4gdiB8IEVycm9yIF8gLT4gZGVmYXVsdFxubGV0IGdldF9vayA9IGZ1bmN0aW9uIE9rIHYgLT4gdiB8IEVycm9yIF8gLT4gaW52YWxpZF9hcmcgXCJyZXN1bHQgaXMgRXJyb3IgX1wiXG5sZXQgZ2V0X2Vycm9yID0gZnVuY3Rpb24gRXJyb3IgZSAtPiBlIHwgT2sgXyAtPiBpbnZhbGlkX2FyZyBcInJlc3VsdCBpcyBPayBfXCJcbmxldCBiaW5kIHIgZiA9IG1hdGNoIHIgd2l0aCBPayB2IC0+IGYgdiB8IEVycm9yIF8gYXMgZSAtPiBlXG5sZXQgam9pbiA9IGZ1bmN0aW9uIE9rIHIgLT4gciB8IEVycm9yIF8gYXMgZSAtPiBlXG5sZXQgbWFwIGYgPSBmdW5jdGlvbiBPayB2IC0+IE9rIChmIHYpIHwgRXJyb3IgXyBhcyBlIC0+IGVcbmxldCBtYXBfZXJyb3IgZiA9IGZ1bmN0aW9uIEVycm9yIGUgLT4gRXJyb3IgKGYgZSkgfCBPayBfIGFzIHYgLT4gdlxubGV0IGZvbGQgfm9rIH5lcnJvciA9IGZ1bmN0aW9uIE9rIHYgLT4gb2sgdiB8IEVycm9yIGUgLT4gZXJyb3IgZVxubGV0IGl0ZXIgZiA9IGZ1bmN0aW9uIE9rIHYgLT4gZiB2IHwgRXJyb3IgXyAtPiAoKVxubGV0IGl0ZXJfZXJyb3IgZiA9IGZ1bmN0aW9uIEVycm9yIGUgLT4gZiBlIHwgT2sgXyAtPiAoKVxubGV0IGlzX29rID0gZnVuY3Rpb24gT2sgXyAtPiB0cnVlIHwgRXJyb3IgXyAtPiBmYWxzZVxubGV0IGlzX2Vycm9yID0gZnVuY3Rpb24gRXJyb3IgXyAtPiB0cnVlIHwgT2sgXyAtPiBmYWxzZVxuXG5sZXQgZXF1YWwgfm9rIH5lcnJvciByMCByMSA9IG1hdGNoIHIwLCByMSB3aXRoXG58IE9rIHYwLCBPayB2MSAtPiBvayB2MCB2MVxufCBFcnJvciBlMCwgRXJyb3IgZTEgLT4gZXJyb3IgZTAgZTFcbnwgXywgXyAtPiBmYWxzZVxuXG5sZXQgY29tcGFyZSB+b2sgfmVycm9yIHIwIHIxID0gbWF0Y2ggcjAsIHIxIHdpdGhcbnwgT2sgdjAsIE9rIHYxIC0+IG9rIHYwIHYxXG58IEVycm9yIGUwLCBFcnJvciBlMSAtPiBlcnJvciBlMCBlMVxufCBPayBfLCBFcnJvciBfIC0+IC0xXG58IEVycm9yIF8sIE9rIF8gLT4gMVxuXG5sZXQgdG9fb3B0aW9uID0gZnVuY3Rpb24gT2sgdiAtPiBTb21lIHYgfCBFcnJvciBfIC0+IE5vbmVcbmxldCB0b19saXN0ID0gZnVuY3Rpb24gT2sgdiAtPiBbdl0gfCBFcnJvciBfIC0+IFtdXG5sZXQgdG9fc2VxID0gZnVuY3Rpb24gT2sgdiAtPiBTZXEucmV0dXJuIHYgfCBFcnJvciBfIC0+IFNlcS5lbXB0eVxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIFV0aWxzIGFyb3VuZCBjaGFyfVxuXG4gICAgQHNpbmNlIDAuMTQgKilcblxuaW5jbHVkZSBDaGFyXG5cbmxldCBwcF9idWYgPSBCdWZmZXIuYWRkX2NoYXJcbmxldCBwcCA9IEZvcm1hdC5wcF9wcmludF9jaGFyXG5sZXQgb2ZfaW50X2V4biA9IENoYXIuY2hyXG5sZXQgb2ZfaW50IGMgPSB0cnkgU29tZSAob2ZfaW50X2V4biBjKSB3aXRoIEludmFsaWRfYXJndW1lbnQgXyAtPiBOb25lXG5sZXQgdG9faW50ID0gQ2hhci5jb2RlXG5sZXQgdG9fc3RyaW5nIGMgPSBTdHJpbmcubWFrZSAxIGNcblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldCAoID0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPSApXG4gIGxldCAoIDw+ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDw+IClcbiAgbGV0ICggPCApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8IClcbiAgbGV0ICggPiApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+IClcbiAgbGV0ICggPD0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPD0gKVxuICBsZXQgKCA+PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+PSApXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBDaGFyYWN0ZXIgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBjb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaHI6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgY2hyIG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJDaGFyLmNoclwiIGVsc2UgdW5zYWZlX2NociBuXG5cbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZTogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCBieXRlc191bnNhZmVfc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuXG5sZXQgZXNjYXBlZCA9IGZ1bmN0aW9uXG4gIHwgJ1xcJycgLT4gXCJcXFxcJ1wiXG4gIHwgJ1xcXFwnIC0+IFwiXFxcXFxcXFxcIlxuICB8ICdcXG4nIC0+IFwiXFxcXG5cIlxuICB8ICdcXHQnIC0+IFwiXFxcXHRcIlxuICB8ICdcXHInIC0+IFwiXFxcXHJcIlxuICB8ICdcXGInIC0+IFwiXFxcXGJcIlxuICB8ICcgJyAuLiAnficgYXMgYyAtPlxuICAgICAgbGV0IHMgPSBieXRlc19jcmVhdGUgMSBpblxuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDAgYztcbiAgICAgIHVuc2FmZV90b19zdHJpbmcgc1xuICB8IGMgLT5cbiAgICAgIGxldCBuID0gY29kZSBjIGluXG4gICAgICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSA0IGluXG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMCAnXFxcXCc7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMSAodW5zYWZlX2NociAoNDggKyBuIC8gMTAwKSk7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMiAodW5zYWZlX2NociAoNDggKyAobiAvIDEwKSBtb2QgMTApKTtcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAzICh1bnNhZmVfY2hyICg0OCArIG4gbW9kIDEwKSk7XG4gICAgICB1bnNhZmVfdG9fc3RyaW5nIHNcblxubGV0IGxvd2VyY2FzZSA9IGZ1bmN0aW9uXG4gIHwgJ0EnIC4uICdaJ1xuICB8ICdcXDE5MicgLi4gJ1xcMjE0J1xuICB8ICdcXDIxNicgLi4gJ1xcMjIyJyBhcyBjIC0+XG4gICAgdW5zYWZlX2Nocihjb2RlIGMgKyAzMilcbiAgfCBjIC0+IGNcblxubGV0IHVwcGVyY2FzZSA9IGZ1bmN0aW9uXG4gIHwgJ2EnIC4uICd6J1xuICB8ICdcXDIyNCcgLi4gJ1xcMjQ2J1xuICB8ICdcXDI0OCcgLi4gJ1xcMjU0JyBhcyBjIC0+XG4gICAgdW5zYWZlX2Nocihjb2RlIGMgLSAzMilcbiAgfCBjIC0+IGNcblxubGV0IGxvd2VyY2FzZV9hc2NpaSA9IGZ1bmN0aW9uXG4gIHwgJ0EnIC4uICdaJyBhcyBjIC0+IHVuc2FmZV9jaHIoY29kZSBjICsgMzIpXG4gIHwgYyAtPiBjXG5cbmxldCB1cHBlcmNhc2VfYXNjaWkgPSBmdW5jdGlvblxuICB8ICdhJyAuLiAneicgYXMgYyAtPiB1bnNhZmVfY2hyKGNvZGUgYyAtIDMyKVxuICB8IGMgLT4gY1xuXG50eXBlIHQgPSBjaGFyXG5cbmxldCBjb21wYXJlIGMxIGMyID0gY29kZSBjMSAtIGNvZGUgYzJcbmxldCBlcXVhbCAoYzE6IHQpIChjMjogdCkgPSBjb21wYXJlIGMxIGMyID0gMFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHQgPSBpbnRcblxubGV0IHplcm8gPSAwXG5sZXQgb25lID0gMVxubGV0IG1pbnVzX29uZSA9IC0xXG5leHRlcm5hbCBuZWcgOiBpbnQgLT4gaW50ID0gXCIlbmVnaW50XCJcbmV4dGVybmFsIGFkZCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYWRkaW50XCJcbmV4dGVybmFsIHN1YiA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlc3ViaW50XCJcbmV4dGVybmFsIG11bCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbXVsaW50XCJcbmV4dGVybmFsIGRpdiA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlZGl2aW50XCJcbmV4dGVybmFsIHJlbSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbW9kaW50XCJcbmV4dGVybmFsIHN1Y2MgOiBpbnQgLT4gaW50ID0gXCIlc3VjY2ludFwiXG5leHRlcm5hbCBwcmVkIDogaW50IC0+IGludCA9IFwiJXByZWRpbnRcIlxubGV0IGFicyB4ID0gaWYgeCA+PSAwIHRoZW4geCBlbHNlIC14XG5sZXQgbWF4X2ludCA9ICgtMSkgbHNyIDFcbmxldCBtaW5faW50ID0gbWF4X2ludCArIDFcbmV4dGVybmFsIGxvZ2FuZCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYW5kaW50XCJcbmV4dGVybmFsIGxvZ29yIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVvcmludFwiXG5leHRlcm5hbCBsb2d4b3IgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJXhvcmludFwiXG5sZXQgbG9nbm90IHggPSBsb2d4b3IgeCAoLTEpXG5leHRlcm5hbCBzaGlmdF9sZWZ0IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc2xpbnRcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFzcmludFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodF9sb2dpY2FsIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc3JpbnRcIlxubGV0IGVxdWFsIDogaW50IC0+IGludCAtPiBib29sID0gKCA9IClcbmxldCBjb21wYXJlIDogaW50IC0+IGludCAtPiBpbnQgPSBTdGRsaWIuY29tcGFyZVxubGV0IG1pbiB4IHkgOiB0ID0gaWYgeCA8PSB5IHRoZW4geCBlbHNlIHlcbmxldCBtYXggeCB5IDogdCA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5leHRlcm5hbCB0b19mbG9hdCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcblxuKCpcbmV4dGVybmFsIGludF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX2ludF9vZl9zdHJpbmdcIlxubGV0IG9mX3N0cmluZyBzID0gdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcykgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuKilcblxuZXh0ZXJuYWwgZm9ybWF0X2ludCA6IHN0cmluZyAtPiBpbnQgLT4gc3RyaW5nID0gXCJjYW1sX2Zvcm1hdF9pbnRcIlxubGV0IHRvX3N0cmluZyB4ID0gZm9ybWF0X2ludCBcIiVkXCIgeFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBCeXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBzdHJpbmcubWwuXG4gICBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIFwiZHVwbGljYXRlZFwiIGNvbW1lbnQgYWJvdmUgdGhlaXIgZGVmaW5pdGlvbi5cbiopXG5cbmV4dGVybmFsIGxlbmd0aCA6IGJ5dGVzIC0+IGludCA9IFwiJWJ5dGVzX2xlbmd0aFwiXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc19zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCB1bnNhZmVfZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9maWxsX2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuZXh0ZXJuYWwgdW5zYWZlX29mX3N0cmluZyA6IHN0cmluZyAtPiBieXRlcyA9IFwiJWJ5dGVzX29mX3N0cmluZ1wiXG5cbmV4dGVybmFsIHVuc2FmZV9ibGl0IDogYnl0ZXMgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9ieXRlc1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB1bnNhZmVfYmxpdF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5sZXQgbWFrZSBuIGMgPVxuICBsZXQgcyA9IGNyZWF0ZSBuIGluXG4gIHVuc2FmZV9maWxsIHMgMCBuIGM7XG4gIHNcblxubGV0IGluaXQgbiBmID1cbiAgbGV0IHMgPSBjcmVhdGUgbiBpblxuICBmb3IgaSA9IDAgdG8gbiAtIDEgZG9cbiAgICB1bnNhZmVfc2V0IHMgaSAoZiBpKVxuICBkb25lO1xuICBzXG5cbmxldCBlbXB0eSA9IGNyZWF0ZSAwXG5cbmxldCBjb3B5IHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gIHVuc2FmZV9ibGl0IHMgMCByIDAgbGVuO1xuICByXG5cbmxldCB0b19zdHJpbmcgYiA9IHVuc2FmZV90b19zdHJpbmcgKGNvcHkgYilcbmxldCBvZl9zdHJpbmcgcyA9IGNvcHkgKHVuc2FmZV9vZl9zdHJpbmcgcylcblxubGV0IHN1YiBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5zdWIgLyBCeXRlcy5zdWJcIlxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gICAgdW5zYWZlX2JsaXQgcyBvZnMgciAwIGxlbjtcbiAgICByXG4gIGVuZFxuXG5sZXQgc3ViX3N0cmluZyBiIG9mcyBsZW4gPSB1bnNhZmVfdG9fc3RyaW5nIChzdWIgYiBvZnMgbGVuKVxuXG4oKiBhZGRpdGlvbiB3aXRoIGFuIG92ZXJmbG93IGNoZWNrICopXG5sZXQgKCsrKSBhIGIgPVxuICBsZXQgYyA9IGEgKyBiIGluXG4gIG1hdGNoIGEgPCAwLCBiIDwgMCwgYyA8IDAgd2l0aFxuICB8IHRydWUgLCB0cnVlICwgZmFsc2VcbiAgfCBmYWxzZSwgZmFsc2UsIHRydWUgIC0+IGludmFsaWRfYXJnIFwiQnl0ZXMuZXh0ZW5kXCIgKCogb3ZlcmZsb3cgKilcbiAgfCBfIC0+IGNcblxubGV0IGV4dGVuZCBzIGxlZnQgcmlnaHQgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgKysgbGVmdCArKyByaWdodCBpblxuICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgbGV0IChzcmNvZmYsIGRzdG9mZikgPSBpZiBsZWZ0IDwgMCB0aGVuIC1sZWZ0LCAwIGVsc2UgMCwgbGVmdCBpblxuICBsZXQgY3B5bGVuID0gSW50Lm1pbiAobGVuZ3RoIHMgLSBzcmNvZmYpIChsZW4gLSBkc3RvZmYpIGluXG4gIGlmIGNweWxlbiA+IDAgdGhlbiB1bnNhZmVfYmxpdCBzIHNyY29mZiByIGRzdG9mZiBjcHlsZW47XG4gIHJcblxubGV0IGZpbGwgcyBvZnMgbGVuIGMgPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5maWxsIC8gQnl0ZXMuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgcyBvZnMgbGVuIGNcblxubGV0IGJsaXQgczEgb2ZzMSBzMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBzMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggczIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ5dGVzLmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IHMxIG9mczEgczIgb2ZzMiBsZW5cblxubGV0IGJsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IG9mczEgPCAwIHx8IG9mczEgPiBzdHJpbmdfbGVuZ3RoIHMxIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBzMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmJsaXQgLyBCeXRlcy5ibGl0X3N0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX2JsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW5cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpdGVyIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZih1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGl0ZXJpIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgZW5zdXJlX2dlICh4OmludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIkJ5dGVzLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZW1wdHlcbiAgfCBsIC0+IGxldCBzZXBsZW4gPSBsZW5ndGggc2VwIGluXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoY3JlYXRlIChzdW1fbGVuZ3RocyAwIHNlcGxlbiBsKSlcbiAgICAgICAgICAgIDAgc2VwIHNlcGxlbiBsXG5cbmxldCBjYXQgczEgczIgPVxuICBsZXQgbDEgPSBsZW5ndGggczEgaW5cbiAgbGV0IGwyID0gbGVuZ3RoIHMyIGluXG4gIGxldCByID0gY3JlYXRlIChsMSArIGwyKSBpblxuICB1bnNhZmVfYmxpdCBzMSAwIHIgMCBsMTtcbiAgdW5zYWZlX2JsaXQgczIgMCByIGwxIGwyO1xuICByXG5cblxuZXh0ZXJuYWwgY2hhcl9jb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGNoYXJfY2hyOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IGkgPSByZWYgMCBpblxuICB3aGlsZSAhaSA8IGxlbiAmJiBpc19zcGFjZSAodW5zYWZlX2dldCBzICFpKSBkb1xuICAgIGluY3IgaVxuICBkb25lO1xuICBsZXQgaiA9IHJlZiAobGVuIC0gMSkgaW5cbiAgd2hpbGUgIWogPj0gIWkgJiYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAhaikgZG9cbiAgICBkZWNyIGpcbiAgZG9uZTtcbiAgaWYgIWogPj0gIWkgdGhlblxuICAgIHN1YiBzICFpICghaiAtICFpICsgMSlcbiAgZWxzZVxuICAgIGVtcHR5XG5cbmxldCBlc2NhcGVkIHMgPVxuICBsZXQgbiA9IHJlZiAwIGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICBuIDo9ICFuICtcbiAgICAgIChtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFxuJyB8ICdcXHQnIHwgJ1xccicgfCAnXFxiJyAtPiAyXG4gICAgICAgfCAnICcgLi4gJ34nIC0+IDFcbiAgICAgICB8IF8gLT4gNClcbiAgZG9uZTtcbiAgaWYgIW4gPSBsZW5ndGggcyB0aGVuIGNvcHkgcyBlbHNlIGJlZ2luXG4gICAgbGV0IHMnID0gY3JlYXRlICFuIGluXG4gICAgbiA6PSAwO1xuICAgIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICAgIGJlZ2luIG1hdGNoIHVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgIHwgKCdcXFwiJyB8ICdcXFxcJykgYXMgYyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gY1xuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ24nXG4gICAgICB8ICdcXHQnIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAndCdcbiAgICAgIHwgJ1xccicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICdyJ1xuICAgICAgfCAnXFxiJyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ2InXG4gICAgICB8ICgnICcgLi4gJ34nKSBhcyBjIC0+IHVuc2FmZV9zZXQgcycgIW4gY1xuICAgICAgfCBjIC0+XG4gICAgICAgICAgbGV0IGEgPSBjaGFyX2NvZGUgYyBpblxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyBhIC8gMTAwKSk7XG4gICAgICAgICAgaW5jciBuO1xuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gKGNoYXJfY2hyICg0OCArIChhIC8gMTApIG1vZCAxMCkpO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyBhIG1vZCAxMCkpO1xuICAgICAgZW5kO1xuICAgICAgaW5jciBuXG4gICAgZG9uZTtcbiAgICBzJ1xuICBlbmRcblxubGV0IG1hcCBmIHMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGwgPSAwIHRoZW4gcyBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkbyB1bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBzIGkpKSBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBtYXBpIGYgcyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgbCA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgcyBpKSkgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgZm9sZF9sZWZ0IGYgeCBhID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgciA6PSBmICFyICh1bnNhZmVfZ2V0IGEgaSlcbiAgZG9uZTtcbiAgIXJcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IHMgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgcyBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPSBtYXAgQ2hhci51cHBlcmNhc2VfYXNjaWkgc1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID0gbWFwIENoYXIubG93ZXJjYXNlX2FzY2lpIHNcblxubGV0IGFwcGx5MSBmIHMgPVxuICBpZiBsZW5ndGggcyA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNvcHkgcyBpblxuICAgIHVuc2FmZV9zZXQgciAwIChmKHVuc2FmZV9nZXQgcyAwKSk7XG4gICAgclxuICBlbmRcblxubGV0IGNhcGl0YWxpemVfYXNjaWkgcyA9IGFwcGx5MSBDaGFyLnVwcGVyY2FzZV9hc2NpaSBzXG5sZXQgdW5jYXBpdGFsaXplX2FzY2lpIHMgPSBhcHBseTEgQ2hhci5sb3dlcmNhc2VfYXNjaWkgc1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHN0YXJ0c193aXRoIH5wcmVmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fcHJlID0gbGVuZ3RoIHByZWZpeCBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3ByZSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyBpIDw+IHVuc2FmZV9nZXQgcHJlZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gbGVuX3MgPj0gbGVuX3ByZSAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGVuZHNfd2l0aCB+c3VmZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3N1ZiA9IGxlbmd0aCBzdWZmaXggaW5cbiAgbGV0IGRpZmYgPSBsZW5fcyAtIGxlbl9zdWYgaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9zdWYgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgKGRpZmYgKyBpKSA8PiB1bnNhZmVfZ2V0IHN1ZmZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGRpZmYgPj0gMCAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4IHMgYyA9IGluZGV4X3JlYyBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIGluZGV4X3JlY19vcHQgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgaW5kZXhfcmVjX29wdCBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tIC8gQnl0ZXMuaW5kZXhfZnJvbVwiIGVsc2VcbiAgaW5kZXhfcmVjIHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWMgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSByaW5kZXhfcmVjIHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4IHMgYyA9IHJpbmRleF9yZWMgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfb3B0IHMgYyA9IHJpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG50eXBlIHQgPSBieXRlc1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2J5dGVzX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG4oKiBEZXByZWNhdGVkIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCB2aWEgb3RoZXIgZGVwcmVjYXRlZCBmdW5jdGlvbnMgKilcbltAQEBvY2FtbC53YXJuaW5nIFwiLTNcIl1cbmxldCB1cHBlcmNhc2UgcyA9IG1hcCBDaGFyLnVwcGVyY2FzZSBzXG5sZXQgbG93ZXJjYXNlIHMgPSBtYXAgQ2hhci5sb3dlcmNhc2Ugc1xuXG5sZXQgY2FwaXRhbGl6ZSBzID0gYXBwbHkxIENoYXIudXBwZXJjYXNlIHNcbmxldCB1bmNhcGl0YWxpemUgcyA9IGFwcGx5MSBDaGFyLmxvd2VyY2FzZSBzXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcyA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPSBsZW5ndGggcyB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IGdldCBzIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIHMgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID0gbGVuZ3RoIHMgdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBnZXQgcyBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IG4gPSByZWYgMCBpblxuICBsZXQgYnVmID0gcmVmIChtYWtlIDI1NiAnXFwwMDAnKSBpblxuICBsZXQgcmVzaXplICgpID1cbiAgICAoKiByZXNpemUgKilcbiAgICBsZXQgbmV3X2xlbiA9IEludC5taW4gKDIgKiBsZW5ndGggIWJ1ZikgU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGluXG4gICAgaWYgbGVuZ3RoICFidWYgPSBuZXdfbGVuIHRoZW4gZmFpbHdpdGggXCJCeXRlcy5vZl9zZXE6IGNhbm5vdCBncm93IGJ5dGVzXCI7XG4gICAgbGV0IG5ld19idWYgPSBtYWtlIG5ld19sZW4gJ1xcMDAwJyBpblxuICAgIGJsaXQgIWJ1ZiAwIG5ld19idWYgMCAhbjtcbiAgICBidWYgOj0gbmV3X2J1ZlxuICBpblxuICBTZXEuaXRlclxuICAgIChmdW4gYyAtPlxuICAgICAgIGlmICFuID0gbGVuZ3RoICFidWYgdGhlbiByZXNpemUoKTtcbiAgICAgICBzZXQgIWJ1ZiAhbiBjO1xuICAgICAgIGluY3IgbilcbiAgICBpO1xuICBzdWIgIWJ1ZiAwICFuXG5cbigqKiB7NiBCaW5hcnkgZW5jb2RpbmcvZGVjb2Rpbmcgb2YgaW50ZWdlcnN9ICopXG5cbigqIFRoZSBnZXRfIGZ1bmN0aW9ucyBhcmUgYWxsIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5cbmV4dGVybmFsIHVuc2FmZV9nZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlYnl0ZXNfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfZ2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX2J5dGVzX2dldDE2dVwiXG5leHRlcm5hbCBnZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlYnl0ZXNfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX2J5dGVzX2dldDE2XCJcbmV4dGVybmFsIGdldF9pbnQzMl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiA9IFwiJWNhbWxfYnl0ZXNfZ2V0MzJcIlxuZXh0ZXJuYWwgZ2V0X2ludDY0X25lIDogYnl0ZXMgLT4gaW50IC0+IGludDY0ID0gXCIlY2FtbF9ieXRlc19nZXQ2NFwiXG5cbmV4dGVybmFsIHVuc2FmZV9zZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfdWludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZ1XCJcbmV4dGVybmFsIHNldF9pbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgc2V0X2ludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQxNlwiXG5leHRlcm5hbCBzZXRfaW50MzJfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50MzIgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MzJcIlxuZXh0ZXJuYWwgc2V0X2ludDY0X25lIDogYnl0ZXMgLT4gaW50IC0+IGludDY0IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDY0XCJcbmV4dGVybmFsIHN3YXAxNiA6IGludCAtPiBpbnQgPSBcIiVic3dhcDE2XCJcbmV4dGVybmFsIHN3YXAzMiA6IGludDMyIC0+IGludDMyID0gXCIlYnN3YXBfaW50MzJcIlxuZXh0ZXJuYWwgc3dhcDY0IDogaW50NjQgLT4gaW50NjQgPSBcIiVic3dhcF9pbnQ2NFwiXG5cbmxldCB1bnNhZmVfZ2V0X3VpbnQxNl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHN3YXAxNiAodW5zYWZlX2dldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIHVuc2FmZV9nZXRfdWludDE2X25lIGIgaVxuXG5sZXQgdW5zYWZlX2dldF91aW50MTZfYmUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGlcbiAgZWxzZSBzd2FwMTYgKHVuc2FmZV9nZXRfdWludDE2X25lIGIgaSlcblxubGV0IGdldF9pbnQ4IGIgaSA9XG4gICgoZ2V0X3VpbnQ4IGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSA4KSkgYXNyIChTeXMuaW50X3NpemUgLSA4KVxuXG5sZXQgZ2V0X3VpbnQxNl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAxNiAoZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IGdldF91aW50MTZfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDE2IChnZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSBnZXRfdWludDE2X25lIGIgaVxuXG5sZXQgZ2V0X2ludDE2X25lIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9uZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDE2X2xlIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9sZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDE2X2JlIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9iZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDMyX2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDMyIChnZXRfaW50MzJfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQzMl9uZSBiIGlcblxubGV0IGdldF9pbnQzMl9iZSBiIGkgPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMzIgKGdldF9pbnQzMl9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDMyX25lIGIgaVxuXG5sZXQgZ2V0X2ludDY0X2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IChnZXRfaW50NjRfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQ2NF9uZSBiIGlcblxubGV0IGdldF9pbnQ2NF9iZSBiIGkgPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwNjQgKGdldF9pbnQ2NF9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDY0X25lIGIgaVxuXG5sZXQgdW5zYWZlX3NldF91aW50MTZfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2UgdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIHhcblxubGV0IHVuc2FmZV9zZXRfdWludDE2X2JlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgeCBlbHNlXG4gIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSAoc3dhcDE2IHgpXG5cbmxldCBzZXRfaW50MTZfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHNldF9pbnQxNl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDE2X2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2Ugc2V0X2ludDE2X25lIGIgaSB4XG5cbmxldCBzZXRfaW50MzJfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQzMl9uZSBiIGkgKHN3YXAzMiB4KVxuICBlbHNlIHNldF9pbnQzMl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDMyX2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDMyX25lIGIgaSAoc3dhcDMyIHgpXG4gIGVsc2Ugc2V0X2ludDMyX25lIGIgaSB4XG5cbmxldCBzZXRfaW50NjRfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQ2NF9uZSBiIGkgKHN3YXA2NCB4KVxuICBlbHNlIHNldF9pbnQ2NF9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDY0X2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDY0X25lIGIgaSAoc3dhcDY0IHgpXG4gIGVsc2Ugc2V0X2ludDY0X25lIGIgaSB4XG5cbmxldCBzZXRfdWludDggPSBzZXRfaW50OFxubGV0IHNldF91aW50MTZfbmUgPSBzZXRfaW50MTZfbmVcbmxldCBzZXRfdWludDE2X2JlID0gc2V0X2ludDE2X2JlXG5sZXQgc2V0X3VpbnQxNl9sZSA9IHNldF9pbnQxNl9sZVxuXG4oKiBVVEYgY29kZWNzIGFuZCB2YWxpZGF0aW9ucyAqKVxuXG5sZXQgZGVjX2ludmFsaWQgPSBVY2hhci51dGZfZGVjb2RlX2ludmFsaWRcbmxldFtAaW5saW5lXSBkZWNfcmV0IG4gdSA9IFVjaGFyLnV0Zl9kZWNvZGUgbiAoVWNoYXIudW5zYWZlX29mX2ludCB1KVxuXG4oKiBJbiBjYXNlIG9mIGRlY29kaW5nIGVycm9yLCBpZiB3ZSBlcnJvciBvbiB0aGUgZmlyc3QgYnl0ZSwgd2VcbiAgIGNvbnN1bWUgdGhlIGJ5dGUsIG90aGVyd2lzZSB3ZSBjb25zdW1lIHRoZSBbbl0gYnl0ZXMgcHJlY2VlZGluZ1xuICAgdGhlIGVycm9yaW5nIGJ5dGUuXG5cbiAgIFRoaXMgbWVhbnMgdGhhdCBpZiBhIGNsaWVudCB1c2VzIGRlY29kZXMgd2l0aG91dCBjYXJpbmcgYWJvdXRcbiAgIHZhbGlkaXR5IGl0IG5hdHVyYWxseSByZXBsYWNlIGJvZ3VzIGRhdGEgd2l0aCBVY2hhci5yZXAgYWNjb3JkaW5nXG4gICB0byB0aGUgV0hBVFdHIEVuY29kaW5nIHN0YW5kYXJkLiBPdGhlciBzY2hlbWVzIGFyZSBwb3NzaWJsZSBieVxuICAgY29uc3VsdGluZyB0aGUgbnVtYmVyIG9mIHVzZWQgYnl0ZXMgb24gaW52YWxpZCBkZWNvZGVzLiBGb3IgbW9yZVxuICAgZGV0YWlscyBzZWUgaHR0cHM6Ly9oc2l2b25lbi5maS9icm9rZW4tdXRmLTgvXG5cbiAgIEZvciB0aGlzIHJlYXNvbiBpbiBbZ2V0X3V0Zl84X3VjaGFyXSB3ZSBncmFkdWFsbHkgY2hlY2sgdGhlIG5leHRcbiAgIGJ5dGUgaXMgYXZhaWxhYmxlIHJhdGhlciB0aGFuIGRvaW5nIGl0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZVxuICAgZmlyc3QgYnl0ZS4gQ29udHJhc3Qgd2l0aCBbaXNfdmFsaWRfdXRmXzhdLiAqKVxuXG4oKiBVVEYtOCAqKVxuXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194QkYgYiA9IGIgbHNyIDYgPD4gMGIxMFxubGV0W0BpbmxpbmVdIG5vdF9pbl94QTBfdG9feEJGIGIgPSBiIGxzciA1IDw+IDBiMTAxXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194OUYgYiA9IGIgbHNyIDUgPD4gMGIxMDBcbmxldFtAaW5saW5lXSBub3RfaW5feDkwX3RvX3hCRiBiID0gYiA8IDB4OTAgfHwgMHhCRiA8IGJcbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3g4RiBiID0gYiBsc3IgNCA8PiAweDhcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzIgYjAgYjEgPVxuICAoKGIwIGxhbmQgMHgxRikgbHNsIDYpIGxvclxuICAoKGIxIGxhbmQgMHgzRikpXG5cbmxldFtAaW5saW5lXSB1dGZfOF91Y2hhcl8zIGIwIGIxIGIyID1cbiAgKChiMCBsYW5kIDB4MEYpIGxzbCAxMikgbG9yXG4gICgoYjEgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSlcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMgPVxuICAoKGIwIGxhbmQgMHgwNykgbHNsIDE4KSBsb3JcbiAgKChiMSBsYW5kIDB4M0YpIGxzbCAxMikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjMgbGFuZCAweDNGKSlcblxubGV0IGdldF91dGZfOF91Y2hhciBiIGkgPVxuICBsZXQgYjAgPSBnZXRfdWludDggYiBpIGluICgqIHJhaXNlcyBpZiBbaV0gaXMgbm90IGEgdmFsaWQgaW5kZXguICopXG4gIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQ4IGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgbWF0Y2ggQ2hhci51bnNhZmVfY2hyIGIwIHdpdGggKCogU2VlIFRoZSBVbmljb2RlIFN0YW5kYXJkLCBUYWJsZSAzLjcgKilcbiAgfCAnXFx4MDAnIC4uICdcXHg3RicgLT4gZGVjX3JldCAxIGIwXG4gIHwgJ1xceEMyJyAuLiAnXFx4REYnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGRlY19yZXQgMiAodXRmXzhfdWNoYXJfMiBiMCBiMSlcbiAgfCAnXFx4RTAnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3hBMF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhFMScgLi4gJ1xceEVDJyB8ICdcXHhFRScgLi4gJ1xceEVGJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGRlY19yZXQgMyAodXRmXzhfdWNoYXJfMyBiMCBiMSBiMilcbiAgfCAnXFx4RUQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OUYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhGMCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDkwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjEnIC4uICdcXHhGMycgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OEYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBsZXQgYjMgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIzIHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBkZWNfcmV0IDQgKHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMpXG4gIHwgXyAtPiBkZWNfaW52YWxpZCAxXG5cbmxldCBzZXRfdXRmXzhfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50OCBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHgwMDdGIC0+XG4gICAgICBzZXRfdWludDggYiBpIHU7XG4gICAgICAxXG4gIHwgdSB3aGVuIHUgPD0gMHgwN0ZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhDMCBsb3IgKHUgbHNyIDYpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICAyKVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RTAgbG9yICh1IGxzciAxMikpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgMylcbiAgfCB1IHdoZW4gdSA8PSAweDEwRkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RjAgbG9yICh1IGxzciAxOCkpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgMTIpIGxhbmQgMHgzRikpO1xuICAgICAgIHNldCBiIChpICsgMikgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgNClcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzggYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDggaW5cbiAgICBtYXRjaCBDaGFyLnVuc2FmZV9jaHIgKGdldCBiIGkpIHdpdGhcbiAgICB8ICdcXHgwMCcgLi4gJ1xceDdGJyAtPiBsb29wIG1heCBiIChpICsgMSlcbiAgICB8ICdcXHhDMicgLi4gJ1xceERGJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFMCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94QTBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEUxJyAuLiAnXFx4RUMnIHwgJ1xceEVFJyAuLiAnXFx4RUYnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDIgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFRCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feDlGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYwJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g5MF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDIpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYxJyAuLiAnXFx4RjMnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjQnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3g4RiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCBfIC0+IGZhbHNlXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkJFICopXG5cbmxldCBnZXRfdXRmXzE2YmVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2YmVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfYmUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmJlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkxFICopXG5cbmxldCBnZXRfdXRmXzE2bGVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2bGVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfbGUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmxlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBHYWxsaXVtLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFN0cmluZyBvcGVyYXRpb25zLCBiYXNlZCBvbiBieXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zLiBXaGVuIHlvdSBtb2RpZnkgdGhlIG9uZSBpbiB0aGlzIGZpbGUgeW91IG5lZWQgdG9cbiAgIG1vZGlmeSBpdHMgZHVwbGljYXRlIGluIGJ5dGVzLm1sLlxuICAgVGhlc2UgZnVuY3Rpb25zIGhhdmUgYSBcImR1cGxpY2F0ZWRcIiBjb21tZW50IGFib3ZlIHRoZWlyIGRlZmluaXRpb24uXG4qKVxuXG5leHRlcm5hbCBsZW5ndGggOiBzdHJpbmcgLT4gaW50ID0gXCIlc3RyaW5nX2xlbmd0aFwiXG5leHRlcm5hbCBnZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9IFwiJXN0cmluZ19zYWZlX3NldFwiXG5leHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX3N0cmluZ1wiXG5leHRlcm5hbCB1bnNhZmVfZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVzdHJpbmdfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfYmxpdCA6IHN0cmluZyAtPiBpbnQgLT4gIGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdW5zYWZlX2ZpbGwgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfZmlsbF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5tb2R1bGUgQiA9IEJ5dGVzXG5cbmxldCBidHMgPSBCLnVuc2FmZV90b19zdHJpbmdcbmxldCBib3MgPSBCLnVuc2FmZV9vZl9zdHJpbmdcblxubGV0IG1ha2UgbiBjID1cbiAgQi5tYWtlIG4gYyB8PiBidHNcbmxldCBpbml0IG4gZiA9XG4gIEIuaW5pdCBuIGYgfD4gYnRzXG5sZXQgZW1wdHkgPSBcIlwiXG5sZXQgY29weSBzID1cbiAgQi5jb3B5IChib3MgcykgfD4gYnRzXG5sZXQgb2ZfYnl0ZXMgPSBCLnRvX3N0cmluZ1xubGV0IHRvX2J5dGVzID0gQi5vZl9zdHJpbmdcbmxldCBzdWIgcyBvZnMgbGVuID1cbiAgQi5zdWIgKGJvcyBzKSBvZnMgbGVuIHw+IGJ0c1xubGV0IGZpbGwgPVxuICBCLmZpbGxcbmxldCBibGl0ID1cbiAgQi5ibGl0X3N0cmluZ1xuXG5sZXQgZW5zdXJlX2dlICh4OmludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb25jYXRcIlxuXG5sZXQgcmVjIHN1bV9sZW5ndGhzIGFjYyBzZXBsZW4gPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY1xuICB8IGhkIDo6IFtdIC0+IGxlbmd0aCBoZCArIGFjY1xuICB8IGhkIDo6IHRsIC0+IHN1bV9sZW5ndGhzIChlbnN1cmVfZ2UgKGxlbmd0aCBoZCArIHNlcGxlbiArIGFjYykgYWNjKSBzZXBsZW4gdGxcblxubGV0IHJlYyB1bnNhZmVfYmxpdHMgZHN0IHBvcyBzZXAgc2VwbGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBkc3RcbiAgfCBoZCA6OiBbXSAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTsgZHN0XG4gIHwgaGQgOjogdGwgLT5cbiAgICB1bnNhZmVfYmxpdCBoZCAwIGRzdCBwb3MgKGxlbmd0aCBoZCk7XG4gICAgdW5zYWZlX2JsaXQgc2VwIDAgZHN0IChwb3MgKyBsZW5ndGggaGQpIHNlcGxlbjtcbiAgICB1bnNhZmVfYmxpdHMgZHN0IChwb3MgKyBsZW5ndGggaGQgKyBzZXBsZW4pIHNlcCBzZXBsZW4gdGxcblxubGV0IGNvbmNhdCBzZXAgPSBmdW5jdGlvblxuICAgIFtdIC0+IFwiXCJcbiAgfCBsIC0+IGxldCBzZXBsZW4gPSBsZW5ndGggc2VwIGluIGJ0cyBAQFxuICAgICAgICAgIHVuc2FmZV9ibGl0c1xuICAgICAgICAgICAgKEIuY3JlYXRlIChzdW1fbGVuZ3RocyAwIHNlcGxlbiBsKSlcbiAgICAgICAgICAgIDAgc2VwIHNlcGxlbiBsXG5cbmxldCBjYXQgPSAoIF4gKVxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaXRlciBmIHMgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvIGYgKHVuc2FmZV9nZXQgcyBpKSBkb25lXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpdGVyaSBmIHMgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvIGYgaSAodW5zYWZlX2dldCBzIGkpIGRvbmVcblxubGV0IG1hcCBmIHMgPVxuICBCLm1hcCBmIChib3MgcykgfD4gYnRzXG5sZXQgbWFwaSBmIHMgPVxuICBCLm1hcGkgZiAoYm9zIHMpIHw+IGJ0c1xubGV0IGZvbGRfcmlnaHQgZiB4IGEgPVxuICBCLmZvbGRfcmlnaHQgZiAoYm9zIHgpIGFcbmxldCBmb2xkX2xlZnQgZiBhIHggPVxuICBCLmZvbGRfbGVmdCBmIGEgKGJvcyB4KVxubGV0IGV4aXN0cyBmIHMgPVxuICBCLmV4aXN0cyBmIChib3MgcylcbmxldCBmb3JfYWxsIGYgcyA9XG4gIEIuZm9yX2FsbCBmIChib3MgcylcblxuKCogQmV3YXJlOiB3ZSBjYW5ub3QgdXNlIEIudHJpbSBvciBCLmVzY2FwZSBiZWNhdXNlIHRoZXkgYWx3YXlzIG1ha2UgYVxuICAgY29weSwgYnV0IFN0cmluZy5tbGkgc3BlbGxzIG91dCBzb21lIGNhc2VzIHdoZXJlIHdlIGFyZSBub3QgYWxsb3dlZFxuICAgdG8gbWFrZSBhIGNvcHkuICopXG5cbmxldCBpc19zcGFjZSA9IGZ1bmN0aW9uXG4gIHwgJyAnIHwgJ1xcMDEyJyB8ICdcXG4nIHwgJ1xccicgfCAnXFx0JyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgdHJpbSBzID1cbiAgaWYgcyA9IFwiXCIgdGhlbiBzXG4gIGVsc2UgaWYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAwKSB8fCBpc19zcGFjZSAodW5zYWZlX2dldCBzIChsZW5ndGggcyAtIDEpKVxuICAgIHRoZW4gYnRzIChCLnRyaW0gKGJvcyBzKSlcbiAgZWxzZSBzXG5cbmxldCBlc2NhcGVkIHMgPVxuICBsZXQgcmVjIGVzY2FwZV9pZl9uZWVkZWQgcyBuIGkgPVxuICAgIGlmIGkgPj0gbiB0aGVuIHMgZWxzZVxuICAgICAgbWF0Y2ggdW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFwwMDAnLi4nXFwwMzEnIHwgJ1xcMTI3Jy4uICdcXDI1NScgLT5cbiAgICAgICAgICBidHMgKEIuZXNjYXBlZCAoYm9zIHMpKVxuICAgICAgfCBfIC0+IGVzY2FwZV9pZl9uZWVkZWQgcyBuIChpKzEpXG4gIGluXG4gIGVzY2FwZV9pZl9uZWVkZWQgcyAobGVuZ3RoIHMpIDBcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXggcyBjID0gaW5kZXhfcmVjIHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWNfb3B0IHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIGluZGV4X3JlY19vcHQgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb20gLyBCeXRlcy5pbmRleF9mcm9tXCIgZWxzZVxuICAgIGluZGV4X3JlYyBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgcmluZGV4X3JlYyBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIHJpbmRleF9yZWMgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleCBzIGMgPSByaW5kZXhfcmVjIHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgcmluZGV4X3JlY19vcHQgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSByaW5kZXhfcmVjX29wdCBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X29wdCBzIGMgPSByaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJjb250YWluc19mcm9tIHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5yY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChyaW5kZXhfcmVjIHMgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPVxuICBCLnVwcGVyY2FzZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID1cbiAgQi5sb3dlcmNhc2VfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCBjYXBpdGFsaXplX2FzY2lpIHMgPVxuICBCLmNhcGl0YWxpemVfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCB1bmNhcGl0YWxpemVfYXNjaWkgcyA9XG4gIEIudW5jYXBpdGFsaXplX2FzY2lpIChib3MgcykgfD4gYnRzXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBzdGFydHNfd2l0aCB+cHJlZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3ByZSA9IGxlbmd0aCBwcmVmaXggaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9wcmUgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgaSA8PiB1bnNhZmVfZ2V0IHByZWZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGxlbl9zID49IGxlbl9wcmUgJiYgYXV4IDBcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGVuZHNfd2l0aCB+c3VmZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3N1ZiA9IGxlbmd0aCBzdWZmaXggaW5cbiAgbGV0IGRpZmYgPSBsZW5fcyAtIGxlbl9zdWYgaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9zdWYgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgKGRpZmYgKyBpKSA8PiB1bnNhZmVfZ2V0IHN1ZmZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGRpZmYgPj0gMCAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgc3BsaXRfb25fY2hhciBzZXAgcyA9XG4gIGxldCByID0gcmVmIFtdIGluXG4gIGxldCBqID0gcmVmIChsZW5ndGggcykgaW5cbiAgZm9yIGkgPSBsZW5ndGggcyAtIDEgZG93bnRvIDAgZG9cbiAgICBpZiB1bnNhZmVfZ2V0IHMgaSA9IHNlcCB0aGVuIGJlZ2luXG4gICAgICByIDo9IHN1YiBzIChpICsgMSkgKCFqIC0gaSAtIDEpIDo6ICFyO1xuICAgICAgaiA6PSBpXG4gICAgZW5kXG4gIGRvbmU7XG4gIHN1YiBzIDAgIWogOjogIXJcblxuKCogRGVwcmVjYXRlZCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgdmlhIG90aGVyIGRlcHJlY2F0ZWQgZnVuY3Rpb25zICopXG5bQEBAb2NhbWwud2FybmluZyBcIi0zXCJdXG5sZXQgdXBwZXJjYXNlIHMgPVxuICBCLnVwcGVyY2FzZSAoYm9zIHMpIHw+IGJ0c1xubGV0IGxvd2VyY2FzZSBzID1cbiAgQi5sb3dlcmNhc2UgKGJvcyBzKSB8PiBidHNcbmxldCBjYXBpdGFsaXplIHMgPVxuICBCLmNhcGl0YWxpemUgKGJvcyBzKSB8PiBidHNcbmxldCB1bmNhcGl0YWxpemUgcyA9XG4gIEIudW5jYXBpdGFsaXplIChib3MgcykgfD4gYnRzXG5cbnR5cGUgdCA9IHN0cmluZ1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHN0cmluZyAtPiBzdHJpbmcgLT4gYm9vbCA9IFwiY2FtbF9zdHJpbmdfZXF1YWxcIiBbQEBub2FsbG9jXVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPSBib3MgcyB8PiBCLnRvX3NlcVxuXG5sZXQgdG9fc2VxaSBzID0gYm9zIHMgfD4gQi50b19zZXFpXG5cbmxldCBvZl9zZXEgZyA9IEIub2Zfc2VxIGcgfD4gYnRzXG5cbigqIFVURiBkZWNvZGVycyBhbmQgdmFsaWRhdG9ycyAqKVxuXG5sZXQgZ2V0X3V0Zl84X3VjaGFyIHMgaSA9IEIuZ2V0X3V0Zl84X3VjaGFyIChib3MgcykgaVxubGV0IGlzX3ZhbGlkX3V0Zl84IHMgPSBCLmlzX3ZhbGlkX3V0Zl84IChib3MgcylcblxubGV0IGdldF91dGZfMTZiZV91Y2hhciBzIGkgPSBCLmdldF91dGZfMTZiZV91Y2hhciAoYm9zIHMpIGlcbmxldCBpc192YWxpZF91dGZfMTZiZSBzID0gQi5pc192YWxpZF91dGZfMTZiZSAoYm9zIHMpXG5cbmxldCBnZXRfdXRmXzE2bGVfdWNoYXIgcyBpID0gQi5nZXRfdXRmXzE2bGVfdWNoYXIgKGJvcyBzKSBpXG5sZXQgaXNfdmFsaWRfdXRmXzE2bGUgcyA9IEIuaXNfdmFsaWRfdXRmXzE2bGUgKGJvcyBzKVxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nL2RlY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG5leHRlcm5hbCBnZXRfdWludDggOiBzdHJpbmcgLT4gaW50IC0+IGludCA9IFwiJXN0cmluZ19zYWZlX2dldFwiXG5leHRlcm5hbCBnZXRfdWludDE2X25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX3N0cmluZ19nZXQxNlwiXG5leHRlcm5hbCBnZXRfaW50MzJfbmUgOiBzdHJpbmcgLT4gaW50IC0+IGludDMyID0gXCIlY2FtbF9zdHJpbmdfZ2V0MzJcIlxuZXh0ZXJuYWwgZ2V0X2ludDY0X25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQ2NCA9IFwiJWNhbWxfc3RyaW5nX2dldDY0XCJcblxubGV0IGdldF9pbnQ4IHMgaSA9IEIuZ2V0X2ludDggKGJvcyBzKSBpXG5sZXQgZ2V0X3VpbnQxNl9sZSBzIGkgPSBCLmdldF91aW50MTZfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X3VpbnQxNl9iZSBzIGkgPSBCLmdldF91aW50MTZfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X25lIHMgaSA9IEIuZ2V0X2ludDE2X25lIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9sZSBzIGkgPSBCLmdldF9pbnQxNl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfYmUgcyBpID0gQi5nZXRfaW50MTZfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDMyX2xlIHMgaSA9IEIuZ2V0X2ludDMyX2xlIChib3MgcykgaVxubGV0IGdldF9pbnQzMl9iZSBzIGkgPSBCLmdldF9pbnQzMl9iZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50NjRfbGUgcyBpID0gQi5nZXRfaW50NjRfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDY0X2JlIHMgaSA9IEIuZ2V0X2ludDY0X2JlIChib3MgcykgaVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgYXJyYXlzLiAqKVxudHlwZSAnYSB0ID0gJ2EgYXJyYXlcblxuKCogQXJyYXkgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBsZW5ndGggOiAnYSBhcnJheSAtPiBpbnQgPSBcIiVhcnJheV9sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgPSBcIiVhcnJheV9zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlYXJyYXlfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhID0gXCIlYXJyYXlfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiJWFycmF5X3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgbWFrZTogaW50IC0+ICdhIC0+ICdhIGFycmF5ID0gXCJjYW1sX21ha2VfdmVjdFwiXG5leHRlcm5hbCBjcmVhdGU6IGludCAtPiAnYSAtPiAnYSBhcnJheSA9IFwiY2FtbF9tYWtlX3ZlY3RcIlxuZXh0ZXJuYWwgdW5zYWZlX3N1YiA6ICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfc3ViXCJcbmV4dGVybmFsIGFwcGVuZF9wcmltIDogJ2EgYXJyYXkgLT4gJ2EgYXJyYXkgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfYXBwZW5kXCJcbmV4dGVybmFsIGNvbmNhdCA6ICdhIGFycmF5IGxpc3QgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfY29uY2F0XCJcbmV4dGVybmFsIHVuc2FmZV9ibGl0IDpcbiAgJ2EgYXJyYXkgLT4gaW50IC0+ICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9hcnJheV9ibGl0XCJcbmV4dGVybmFsIHVuc2FmZV9maWxsIDpcbiAgJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2FycmF5X2ZpbGxcIlxuZXh0ZXJuYWwgY3JlYXRlX2Zsb2F0OiBpbnQgLT4gZmxvYXQgYXJyYXkgPSBcImNhbWxfbWFrZV9mbG9hdF92ZWN0XCJcbmxldCBtYWtlX2Zsb2F0ID0gY3JlYXRlX2Zsb2F0XG5cbm1vZHVsZSBGbG9hdGFycmF5ID0gc3RydWN0XG4gIGV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiBmbG9hdGFycmF5ID0gXCJjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlXCJcbiAgZXh0ZXJuYWwgbGVuZ3RoIDogZmxvYXRhcnJheSAtPiBpbnQgPSBcIiVmbG9hdGFycmF5X2xlbmd0aFwiXG4gIGV4dGVybmFsIGdldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRhcnJheV9zYWZlX2dldFwiXG4gIGV4dGVybmFsIHNldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0IC0+IHVuaXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfc2V0XCJcbiAgZXh0ZXJuYWwgdW5zYWZlX2dldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRhcnJheV91bnNhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgdW5zYWZlX3NldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0IC0+IHVuaXRcbiAgICAgID0gXCIlZmxvYXRhcnJheV91bnNhZmVfc2V0XCJcbmVuZFxuXG5sZXQgaW5pdCBsIGYgPVxuICBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZVxuICBpZiBsIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuaW5pdFwiXG4gICgqIFNlZSAjNjU3NS4gV2UgY291bGQgYWxzbyBjaGVjayBmb3IgbWF4aW11bSBhcnJheSBzaXplLCBidXQgdGhpcyBkZXBlbmRzXG4gICAgIG9uIHdoZXRoZXIgd2UgY3JlYXRlIGEgZmxvYXQgYXJyYXkgb3IgYSByZWd1bGFyIG9uZS4uLiAqKVxuICBlbHNlXG4gICBsZXQgcmVzID0gY3JlYXRlIGwgKGYgMCkgaW5cbiAgIGZvciBpID0gMSB0byBwcmVkIGwgZG9cbiAgICAgdW5zYWZlX3NldCByZXMgaSAoZiBpKVxuICAgZG9uZTtcbiAgIHJlc1xuXG5sZXQgbWFrZV9tYXRyaXggc3ggc3kgaW5pdCA9XG4gIGxldCByZXMgPSBjcmVhdGUgc3ggW3x8XSBpblxuICBmb3IgeCA9IDAgdG8gcHJlZCBzeCBkb1xuICAgIHVuc2FmZV9zZXQgcmVzIHggKGNyZWF0ZSBzeSBpbml0KVxuICBkb25lO1xuICByZXNcblxubGV0IGNyZWF0ZV9tYXRyaXggPSBtYWtlX21hdHJpeFxuXG5sZXQgY29weSBhID1cbiAgbGV0IGwgPSBsZW5ndGggYSBpbiBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZSB1bnNhZmVfc3ViIGEgMCBsXG5cbmxldCBhcHBlbmQgYTEgYTIgPVxuICBsZXQgbDEgPSBsZW5ndGggYTEgaW5cbiAgaWYgbDEgPSAwIHRoZW4gY29weSBhMlxuICBlbHNlIGlmIGxlbmd0aCBhMiA9IDAgdGhlbiB1bnNhZmVfc3ViIGExIDAgbDFcbiAgZWxzZSBhcHBlbmRfcHJpbSBhMSBhMlxuXG5sZXQgc3ViIGEgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuc3ViXCJcbiAgZWxzZSB1bnNhZmVfc3ViIGEgb2ZzIGxlblxuXG5sZXQgZmlsbCBhIG9mcyBsZW4gdiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgYSBvZnMgbGVuIHZcblxubGV0IGJsaXQgYTEgb2ZzMSBhMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBhMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggYTIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IGExIG9mczEgYTIgb2ZzMiBsZW5cblxubGV0IGl0ZXIgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBpdGVyMiBmIGEgYiA9XG4gIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIkFycmF5Lml0ZXIyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gIGVsc2VcbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpIGRvbmVcblxubGV0IG1hcCBmIGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCAoZih1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgZm9yIGkgPSAxIHRvIGwgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHIgaSAoZih1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgbWFwMiBmIGEgYiA9XG4gIGxldCBsYSA9IGxlbmd0aCBhIGluXG4gIGxldCBsYiA9IGxlbmd0aCBiIGluXG4gIGlmIGxhIDw+IGxiIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIkFycmF5Lm1hcDI6IGFycmF5cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCJcbiAgZWxzZSBiZWdpblxuICAgIGlmIGxhID0gMCB0aGVuIFt8fF0gZWxzZSBiZWdpblxuICAgICAgbGV0IHIgPSBjcmVhdGUgbGEgKGYgKHVuc2FmZV9nZXQgYSAwKSAodW5zYWZlX2dldCBiIDApKSBpblxuICAgICAgZm9yIGkgPSAxIHRvIGxhIC0gMSBkb1xuICAgICAgICB1bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBhIGkpICh1bnNhZmVfZ2V0IGIgaSkpXG4gICAgICBkb25lO1xuICAgICAgclxuICAgIGVuZFxuICBlbmRcblxubGV0IGl0ZXJpIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgbWFwaSBmIGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCAoZiAwICh1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgZm9yIGkgPSAxIHRvIGwgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHIgaSAoZiBpICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgdG9fbGlzdCBhID1cbiAgbGV0IHJlYyB0b2xpc3QgaSByZXMgPVxuICAgIGlmIGkgPCAwIHRoZW4gcmVzIGVsc2UgdG9saXN0IChpIC0gMSkgKHVuc2FmZV9nZXQgYSBpIDo6IHJlcykgaW5cbiAgdG9saXN0IChsZW5ndGggYSAtIDEpIFtdXG5cbigqIENhbm5vdCB1c2UgTGlzdC5sZW5ndGggaGVyZSBiZWNhdXNlIHRoZSBMaXN0IG1vZHVsZSBkZXBlbmRzIG9uIEFycmF5LiAqKVxubGV0IHJlYyBsaXN0X2xlbmd0aCBhY2N1ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBhY2N1XG4gIHwgXzo6dCAtPiBsaXN0X2xlbmd0aCAoc3VjYyBhY2N1KSB0XG5cbmxldCBvZl9saXN0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbfHxdXG4gIHwgaGQ6OnRsIGFzIGwgLT5cbiAgICAgIGxldCBhID0gY3JlYXRlIChsaXN0X2xlbmd0aCAwIGwpIGhkIGluXG4gICAgICBsZXQgcmVjIGZpbGwgaSA9IGZ1bmN0aW9uXG4gICAgICAgICAgW10gLT4gYVxuICAgICAgICB8IGhkOjp0bCAtPiB1bnNhZmVfc2V0IGEgaSBoZDsgZmlsbCAoaSsxKSB0bCBpblxuICAgICAgZmlsbCAxIHRsXG5cbmxldCBmb2xkX2xlZnQgZiB4IGEgPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICByIDo9IGYgIXIgKHVuc2FmZV9nZXQgYSBpKVxuICBkb25lO1xuICAhclxuXG5sZXQgZm9sZF9sZWZ0X21hcCBmIGFjYyBpbnB1dF9hcnJheSA9XG4gIGxldCBsZW4gPSBsZW5ndGggaW5wdXRfYXJyYXkgaW5cbiAgaWYgbGVuID0gMCB0aGVuIChhY2MsIFt8fF0pIGVsc2UgYmVnaW5cbiAgICBsZXQgYWNjLCBlbHQgPSBmIGFjYyAodW5zYWZlX2dldCBpbnB1dF9hcnJheSAwKSBpblxuICAgIGxldCBvdXRwdXRfYXJyYXkgPSBjcmVhdGUgbGVuIGVsdCBpblxuICAgIGxldCBhY2MgPSByZWYgYWNjIGluXG4gICAgZm9yIGkgPSAxIHRvIGxlbiAtIDEgZG9cbiAgICAgIGxldCBhY2MnLCBlbHQgPSBmICFhY2MgKHVuc2FmZV9nZXQgaW5wdXRfYXJyYXkgaSkgaW5cbiAgICAgIGFjYyA6PSBhY2MnO1xuICAgICAgdW5zYWZlX3NldCBvdXRwdXRfYXJyYXkgaSBlbHQ7XG4gICAgZG9uZTtcbiAgICAhYWNjLCBvdXRwdXRfYXJyYXlcbiAgZW5kXG5cbmxldCBmb2xkX3JpZ2h0IGYgYSB4ID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IGxlbmd0aCBhIC0gMSBkb3dudG8gMCBkb1xuICAgIHIgOj0gZiAodW5zYWZlX2dldCBhIGkpICFyXG4gIGRvbmU7XG4gICFyXG5cbmxldCBleGlzdHMgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBhIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IGZvcl9hbGwgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiB0cnVlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiBsb29wIChzdWNjIGkpXG4gICAgZWxzZSBmYWxzZSBpblxuICBsb29wIDBcblxubGV0IGZvcl9hbGwyIHAgbDEgbDIgPVxuICBsZXQgbjEgPSBsZW5ndGggbDFcbiAgYW5kIG4yID0gbGVuZ3RoIGwyIGluXG4gIGlmIG4xIDw+IG4yIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5mb3JfYWxsMlwiXG4gIGVsc2UgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuMSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgbDEgaSkgKHVuc2FmZV9nZXQgbDIgaSkgdGhlbiBsb29wIChzdWNjIGkpXG4gICAgZWxzZSBmYWxzZSBpblxuICBsb29wIDBcblxubGV0IGV4aXN0czIgcCBsMSBsMiA9XG4gIGxldCBuMSA9IGxlbmd0aCBsMVxuICBhbmQgbjIgPSBsZW5ndGggbDIgaW5cbiAgaWYgbjEgPD4gbjIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmV4aXN0czJcIlxuICBlbHNlIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbjEgdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBsMSBpKSAodW5zYWZlX2dldCBsMiBpKSB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmxldCBtZW0geCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgY29tcGFyZSAodW5zYWZlX2dldCBhIGkpIHggPSAwIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IG1lbXEgeCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgeCA9PSAodW5zYWZlX2dldCBhIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IGZpbmRfb3B0IHAgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gTm9uZVxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgIGlmIHAgeCB0aGVuIFNvbWUgeFxuICAgICAgZWxzZSBsb29wIChzdWNjIGkpXG4gIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9tYXAgZiBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggZiAodW5zYWZlX2dldCBhIGkpIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBsb29wIChzdWNjIGkpXG4gICAgICB8IFNvbWUgXyBhcyByIC0+IHJcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBzcGxpdCB4ID1cbiAgaWYgeCA9IFt8fF0gdGhlbiBbfHxdLCBbfHxdXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgYTAsIGIwID0gdW5zYWZlX2dldCB4IDAgaW5cbiAgICBsZXQgbiA9IGxlbmd0aCB4IGluXG4gICAgbGV0IGEgPSBjcmVhdGUgbiBhMCBpblxuICAgIGxldCBiID0gY3JlYXRlIG4gYjAgaW5cbiAgICBmb3IgaSA9IDEgdG8gbiAtIDEgZG9cbiAgICAgIGxldCBhaSwgYmkgPSB1bnNhZmVfZ2V0IHggaSBpblxuICAgICAgdW5zYWZlX3NldCBhIGkgYWk7XG4gICAgICB1bnNhZmVfc2V0IGIgaSBiaVxuICAgIGRvbmU7XG4gICAgYSwgYlxuICBlbmRcblxubGV0IGNvbWJpbmUgYSBiID1cbiAgbGV0IG5hID0gbGVuZ3RoIGEgaW5cbiAgbGV0IG5iID0gbGVuZ3RoIGIgaW5cbiAgaWYgbmEgPD4gbmIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmNvbWJpbmVcIjtcbiAgaWYgbmEgPSAwIHRoZW4gW3x8XVxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHggPSBjcmVhdGUgbmEgKHVuc2FmZV9nZXQgYSAwLCB1bnNhZmVfZ2V0IGIgMCkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbmEgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHggaSAodW5zYWZlX2dldCBhIGksIHVuc2FmZV9nZXQgYiBpKVxuICAgIGRvbmU7XG4gICAgeFxuICBlbmRcblxuZXhjZXB0aW9uIEJvdHRvbSBvZiBpbnRcbmxldCBzb3J0IGNtcCBhID1cbiAgbGV0IG1heHNvbiBsIGkgPVxuICAgIGxldCBpMzEgPSBpK2kraSsxIGluXG4gICAgbGV0IHggPSByZWYgaTMxIGluXG4gICAgaWYgaTMxKzIgPCBsIHRoZW4gYmVnaW5cbiAgICAgIGlmIGNtcCAoZ2V0IGEgaTMxKSAoZ2V0IGEgKGkzMSsxKSkgPCAwIHRoZW4geCA6PSBpMzErMTtcbiAgICAgIGlmIGNtcCAoZ2V0IGEgIXgpIChnZXQgYSAoaTMxKzIpKSA8IDAgdGhlbiB4IDo9IGkzMSsyO1xuICAgICAgIXhcbiAgICBlbmQgZWxzZVxuICAgICAgaWYgaTMxKzEgPCBsICYmIGNtcCAoZ2V0IGEgaTMxKSAoZ2V0IGEgKGkzMSsxKSkgPCAwXG4gICAgICB0aGVuIGkzMSsxXG4gICAgICBlbHNlIGlmIGkzMSA8IGwgdGhlbiBpMzEgZWxzZSByYWlzZSAoQm90dG9tIGkpXG4gIGluXG4gIGxldCByZWMgdHJpY2tsZWRvd24gbCBpIGUgPVxuICAgIGxldCBqID0gbWF4c29uIGwgaSBpblxuICAgIGlmIGNtcCAoZ2V0IGEgaikgZSA+IDAgdGhlbiBiZWdpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICB0cmlja2xlZG93biBsIGogZTtcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgc2V0IGEgaSBlO1xuICAgIGVuZDtcbiAgaW5cbiAgbGV0IHRyaWNrbGUgbCBpIGUgPSB0cnkgdHJpY2tsZWRvd24gbCBpIGUgd2l0aCBCb3R0b20gaSAtPiBzZXQgYSBpIGUgaW5cbiAgbGV0IHJlYyBidWJibGVkb3duIGwgaSA9XG4gICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgYnViYmxlZG93biBsIGpcbiAgaW5cbiAgbGV0IGJ1YmJsZSBsIGkgPSB0cnkgYnViYmxlZG93biBsIGkgd2l0aCBCb3R0b20gaSAtPiBpIGluXG4gIGxldCByZWMgdHJpY2tsZXVwIGkgZSA9XG4gICAgbGV0IGZhdGhlciA9IChpIC0gMSkgLyAzIGluXG4gICAgYXNzZXJ0IChpIDw+IGZhdGhlcik7XG4gICAgaWYgY21wIChnZXQgYSBmYXRoZXIpIGUgPCAwIHRoZW4gYmVnaW5cbiAgICAgIHNldCBhIGkgKGdldCBhIGZhdGhlcik7XG4gICAgICBpZiBmYXRoZXIgPiAwIHRoZW4gdHJpY2tsZXVwIGZhdGhlciBlIGVsc2Ugc2V0IGEgMCBlO1xuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBzZXQgYSBpIGU7XG4gICAgZW5kO1xuICBpblxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGZvciBpID0gKGwgKyAxKSAvIDMgLSAxIGRvd250byAwIGRvIHRyaWNrbGUgbCBpIChnZXQgYSBpKTsgZG9uZTtcbiAgZm9yIGkgPSBsIC0gMSBkb3dudG8gMiBkb1xuICAgIGxldCBlID0gKGdldCBhIGkpIGluXG4gICAgc2V0IGEgaSAoZ2V0IGEgMCk7XG4gICAgdHJpY2tsZXVwIChidWJibGUgaSAwKSBlO1xuICBkb25lO1xuICBpZiBsID4gMSB0aGVuIChsZXQgZSA9IChnZXQgYSAxKSBpbiBzZXQgYSAxIChnZXQgYSAwKTsgc2V0IGEgMCBlKVxuXG5cbmxldCBjdXRvZmYgPSA1XG5sZXQgc3RhYmxlX3NvcnQgY21wIGEgPVxuICBsZXQgbWVyZ2Ugc3JjMW9mcyBzcmMxbGVuIHNyYzIgc3JjMm9mcyBzcmMybGVuIGRzdCBkc3RvZnMgPVxuICAgIGxldCBzcmMxciA9IHNyYzFvZnMgKyBzcmMxbGVuIGFuZCBzcmMyciA9IHNyYzJvZnMgKyBzcmMybGVuIGluXG4gICAgbGV0IHJlYyBsb29wIGkxIHMxIGkyIHMyIGQgPVxuICAgICAgaWYgY21wIHMxIHMyIDw9IDAgdGhlbiBiZWdpblxuICAgICAgICBzZXQgZHN0IGQgczE7XG4gICAgICAgIGxldCBpMSA9IGkxICsgMSBpblxuICAgICAgICBpZiBpMSA8IHNyYzFyIHRoZW5cbiAgICAgICAgICBsb29wIGkxIChnZXQgYSBpMSkgaTIgczIgKGQgKyAxKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYmxpdCBzcmMyIGkyIGRzdCAoZCArIDEpIChzcmMyciAtIGkyKVxuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgc2V0IGRzdCBkIHMyO1xuICAgICAgICBsZXQgaTIgPSBpMiArIDEgaW5cbiAgICAgICAgaWYgaTIgPCBzcmMyciB0aGVuXG4gICAgICAgICAgbG9vcCBpMSBzMSBpMiAoZ2V0IHNyYzIgaTIpIChkICsgMSlcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGJsaXQgYSBpMSBkc3QgKGQgKyAxKSAoc3JjMXIgLSBpMSlcbiAgICAgIGVuZFxuICAgIGluIGxvb3Agc3JjMW9mcyAoZ2V0IGEgc3JjMW9mcykgc3JjMm9mcyAoZ2V0IHNyYzIgc3JjMm9mcykgZHN0b2ZzO1xuICBpblxuICBsZXQgaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgIGZvciBpID0gMCB0byBsZW4gLSAxIGRvXG4gICAgICBsZXQgZSA9IChnZXQgYSAoc3Jjb2ZzICsgaSkpIGluXG4gICAgICBsZXQgaiA9IHJlZiAoZHN0b2ZzICsgaSAtIDEpIGluXG4gICAgICB3aGlsZSAoIWogPj0gZHN0b2ZzICYmIGNtcCAoZ2V0IGRzdCAhaikgZSA+IDApIGRvXG4gICAgICAgIHNldCBkc3QgKCFqICsgMSkgKGdldCBkc3QgIWopO1xuICAgICAgICBkZWNyIGo7XG4gICAgICBkb25lO1xuICAgICAgc2V0IGRzdCAoIWogKyAxKSBlO1xuICAgIGRvbmU7XG4gIGluXG4gIGxldCByZWMgc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiA9XG4gICAgaWYgbGVuIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuIGVsc2UgYmVnaW5cbiAgICAgIGxldCBsMSA9IGxlbiAvIDIgaW5cbiAgICAgIGxldCBsMiA9IGxlbiAtIGwxIGluXG4gICAgICBzb3J0dG8gKHNyY29mcyArIGwxKSBkc3QgKGRzdG9mcyArIGwxKSBsMjtcbiAgICAgIHNvcnR0byBzcmNvZnMgYSAoc3Jjb2ZzICsgbDIpIGwxO1xuICAgICAgbWVyZ2UgKHNyY29mcyArIGwyKSBsMSBkc3QgKGRzdG9mcyArIGwxKSBsMiBkc3QgZHN0b2ZzO1xuICAgIGVuZDtcbiAgaW5cbiAgbGV0IGwgPSBsZW5ndGggYSBpblxuICBpZiBsIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gMCBhIDAgbCBlbHNlIGJlZ2luXG4gICAgbGV0IGwxID0gbCAvIDIgaW5cbiAgICBsZXQgbDIgPSBsIC0gbDEgaW5cbiAgICBsZXQgdCA9IG1ha2UgbDIgKGdldCBhIDApIGluXG4gICAgc29ydHRvIGwxIHQgMCBsMjtcbiAgICBzb3J0dG8gMCBhIGwyIGwxO1xuICAgIG1lcmdlIGwyIGwxIHQgMCBsMiBhIDA7XG4gIGVuZFxuXG5cbmxldCBmYXN0X3NvcnQgPSBzdGFibGVfc29ydFxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICB0aGVuXG4gICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICBTZXEuQ29ucyAoeCwgYXV4IChpKzEpKVxuICAgIGVsc2UgU2VxLk5pbFxuICBpblxuICBhdXggMFxuXG5sZXQgdG9fc2VxaSBhID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA8IGxlbmd0aCBhXG4gICAgdGhlblxuICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gICAgZWxzZSBTZXEuTmlsXG4gIGluXG4gIGF1eCAwXG5cbmxldCBvZl9yZXZfbGlzdCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW3x8XVxuICB8IGhkOjp0bCBhcyBsIC0+XG4gICAgICBsZXQgbGVuID0gbGlzdF9sZW5ndGggMCBsIGluXG4gICAgICBsZXQgYSA9IGNyZWF0ZSBsZW4gaGQgaW5cbiAgICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgICBbXSAtPiBhXG4gICAgICAgIHwgaGQ6OnRsIC0+IHVuc2FmZV9zZXQgYSBpIGhkOyBmaWxsIChpLTEpIHRsXG4gICAgICBpblxuICAgICAgZmlsbCAobGVuLTIpIHRsXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCBsID0gU2VxLmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+IHg6OmFjYykgW10gaSBpblxuICBvZl9yZXZfbGlzdCBsXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFNldHMgb3ZlciBvcmRlcmVkIHR5cGVzICopXG5cbm1vZHVsZSB0eXBlIE9yZGVyZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGNvbXBhcmU6IHQgLT4gdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFMgPVxuICBzaWdcbiAgICB0eXBlIGVsdFxuICAgIHR5cGUgdFxuICAgIHZhbCBlbXB0eTogdFxuICAgIHZhbCBpc19lbXB0eTogdCAtPiBib29sXG4gICAgdmFsIG1lbTogZWx0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBhZGQ6IGVsdCAtPiB0IC0+IHRcbiAgICB2YWwgc2luZ2xldG9uOiBlbHQgLT4gdFxuICAgIHZhbCByZW1vdmU6IGVsdCAtPiB0IC0+IHRcbiAgICB2YWwgdW5pb246IHQgLT4gdCAtPiB0XG4gICAgdmFsIGludGVyOiB0IC0+IHQgLT4gdFxuICAgIHZhbCBkaXNqb2ludDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZGlmZjogdCAtPiB0IC0+IHRcbiAgICB2YWwgY29tcGFyZTogdCAtPiB0IC0+IGludFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgc3Vic2V0OiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBpdGVyOiAoZWx0IC0+IHVuaXQpIC0+IHQgLT4gdW5pdFxuICAgIHZhbCBtYXA6IChlbHQgLT4gZWx0KSAtPiB0IC0+IHRcbiAgICB2YWwgZm9sZDogKGVsdCAtPiAnYSAtPiAnYSkgLT4gdCAtPiAnYSAtPiAnYVxuICAgIHZhbCBmb3JfYWxsOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gYm9vbFxuICAgIHZhbCBleGlzdHM6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBib29sXG4gICAgdmFsIGZpbHRlcjogKGVsdCAtPiBib29sKSAtPiB0IC0+IHRcbiAgICB2YWwgZmlsdGVyX21hcDogKGVsdCAtPiBlbHQgb3B0aW9uKSAtPiB0IC0+IHRcbiAgICB2YWwgcGFydGl0aW9uOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gdCAqIHRcbiAgICB2YWwgY2FyZGluYWw6IHQgLT4gaW50XG4gICAgdmFsIGVsZW1lbnRzOiB0IC0+IGVsdCBsaXN0XG4gICAgdmFsIG1pbl9lbHQ6IHQgLT4gZWx0XG4gICAgdmFsIG1pbl9lbHRfb3B0OiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgbWF4X2VsdDogdCAtPiBlbHRcbiAgICB2YWwgbWF4X2VsdF9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBjaG9vc2U6IHQgLT4gZWx0XG4gICAgdmFsIGNob29zZV9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBzcGxpdDogZWx0IC0+IHQgLT4gdCAqIGJvb2wgKiB0XG4gICAgdmFsIGZpbmQ6IGVsdCAtPiB0IC0+IGVsdFxuICAgIHZhbCBmaW5kX29wdDogZWx0IC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2ZpcnN0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0XG4gICAgdmFsIGZpbmRfZmlyc3Rfb3B0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2xhc3Q6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgICB2YWwgZmluZF9sYXN0X29wdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgb2ZfbGlzdDogZWx0IGxpc3QgLT4gdFxuICAgIHZhbCB0b19zZXFfZnJvbSA6IGVsdCAtPiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCB0b19zZXEgOiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCB0b19yZXZfc2VxIDogdCAtPiBlbHQgU2VxLnRcbiAgICB2YWwgYWRkX3NlcSA6IGVsdCBTZXEudCAtPiB0IC0+IHRcbiAgICB2YWwgb2Zfc2VxIDogZWx0IFNlcS50IC0+IHRcbiAgZW5kXG5cbm1vZHVsZSBNYWtlKE9yZDogT3JkZXJlZFR5cGUpID1cbiAgc3RydWN0XG4gICAgdHlwZSBlbHQgPSBPcmQudFxuICAgIHR5cGUgdCA9IEVtcHR5IHwgTm9kZSBvZiB7bDp0OyB2OmVsdDsgcjp0OyBoOmludH1cblxuICAgICgqIFNldHMgYXJlIHJlcHJlc2VudGVkIGJ5IGJhbGFuY2VkIGJpbmFyeSB0cmVlcyAodGhlIGhlaWdodHMgb2YgdGhlXG4gICAgICAgY2hpbGRyZW4gZGlmZmVyIGJ5IGF0IG1vc3QgMiAqKVxuXG4gICAgbGV0IGhlaWdodCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZSB7aH0gLT4gaFxuXG4gICAgKCogQ3JlYXRlcyBhIG5ldyBub2RlIHdpdGggbGVmdCBzb24gbCwgdmFsdWUgdiBhbmQgcmlnaHQgc29uIHIuXG4gICAgICAgV2UgbXVzdCBoYXZlIGFsbCBlbGVtZW50cyBvZiBsIDwgdiA8IGFsbCBlbGVtZW50cyBvZiByLlxuICAgICAgIGwgYW5kIHIgbXVzdCBiZSBiYWxhbmNlZCBhbmQgfCBoZWlnaHQgbCAtIGhlaWdodCByIHwgPD0gMi5cbiAgICAgICBJbmxpbmUgZXhwYW5zaW9uIG9mIGhlaWdodCBmb3IgYmV0dGVyIHNwZWVkLiAqKVxuXG4gICAgbGV0IGNyZWF0ZSBsIHYgciA9XG4gICAgICBsZXQgaGwgPSBtYXRjaCBsIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGxldCBociA9IG1hdGNoIHIgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgTm9kZXtsOyB2OyByOyBoPShpZiBobCA+PSBociB0aGVuIGhsICsgMSBlbHNlIGhyICsgMSl9XG5cbiAgICAoKiBTYW1lIGFzIGNyZWF0ZSwgYnV0IHBlcmZvcm1zIG9uZSBzdGVwIG9mIHJlYmFsYW5jaW5nIGlmIG5lY2Vzc2FyeS5cbiAgICAgICBBc3N1bWVzIGwgYW5kIHIgYmFsYW5jZWQgYW5kIHwgaGVpZ2h0IGwgLSBoZWlnaHQgciB8IDw9IDMuXG4gICAgICAgSW5saW5lIGV4cGFuc2lvbiBvZiBjcmVhdGUgZm9yIGJldHRlciBzcGVlZCBpbiB0aGUgbW9zdCBmcmVxdWVudCBjYXNlXG4gICAgICAgd2hlcmUgbm8gcmViYWxhbmNpbmcgaXMgcmVxdWlyZWQuICopXG5cbiAgICBsZXQgYmFsIGwgdiByID1cbiAgICAgIGxldCBobCA9IG1hdGNoIGwgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgbGV0IGhyID0gbWF0Y2ggciB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBpZiBobCA+IGhyICsgMiB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LmJhbFwiXG4gICAgICAgIHwgTm9kZXtsPWxsOyB2PWx2OyByPWxyfSAtPlxuICAgICAgICAgICAgaWYgaGVpZ2h0IGxsID49IGhlaWdodCBsciB0aGVuXG4gICAgICAgICAgICAgIGNyZWF0ZSBsbCBsdiAoY3JlYXRlIGxyIHYgcilcbiAgICAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbWF0Y2ggbHIgd2l0aFxuICAgICAgICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LmJhbFwiXG4gICAgICAgICAgICAgIHwgTm9kZXtsPWxybDsgdj1scnY7IHI9bHJyfS0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsbCBsdiBscmwpIGxydiAoY3JlYXRlIGxyciB2IHIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlIGlmIGhyID4gaGwgKyAyIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggciB3aXRoXG4gICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgfCBOb2Rle2w9cmw7IHY9cnY7IHI9cnJ9IC0+XG4gICAgICAgICAgICBpZiBoZWlnaHQgcnIgPj0gaGVpZ2h0IHJsIHRoZW5cbiAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbCB2IHJsKSBydiByclxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBybCB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9cmxsOyB2PXJsdjsgcj1ybHJ9IC0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsIHYgcmxsKSBybHYgKGNyZWF0ZSBybHIgcnYgcnIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlXG4gICAgICAgIE5vZGV7bDsgdjsgcjsgaD0oaWYgaGwgPj0gaHIgdGhlbiBobCArIDEgZWxzZSBociArIDEpfVxuXG4gICAgKCogSW5zZXJ0aW9uIG9mIG9uZSBlbGVtZW50ICopXG5cbiAgICBsZXQgcmVjIGFkZCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9kZXtsPUVtcHR5OyB2PXg7IHI9RW1wdHk7IGg9MX1cbiAgICAgIHwgTm9kZXtsOyB2OyByfSBhcyB0IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIHQgZWxzZVxuICAgICAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBsbCA9IGFkZCB4IGwgaW5cbiAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiB0IGVsc2UgYmFsIGxsIHYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCByciA9IGFkZCB4IHIgaW5cbiAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiB0IGVsc2UgYmFsIGwgdiByclxuXG4gICAgbGV0IHNpbmdsZXRvbiB4ID0gTm9kZXtsPUVtcHR5OyB2PXg7IHI9RW1wdHk7IGg9MX1cblxuICAgICgqIEJld2FyZTogdGhvc2UgdHdvIGZ1bmN0aW9ucyBhc3N1bWUgdGhhdCB0aGUgYWRkZWQgdiBpcyAqc3RyaWN0bHkqXG4gICAgICAgc21hbGxlciAob3IgYmlnZ2VyKSB0aGFuIGFsbCB0aGUgcHJlc2VudCBlbGVtZW50cyBpbiB0aGUgdHJlZTsgaXRcbiAgICAgICBkb2VzIG5vdCB0ZXN0IGZvciBlcXVhbGl0eSB3aXRoIHRoZSBjdXJyZW50IG1pbiAob3IgbWF4KSBlbGVtZW50LlxuICAgICAgIEluZGVlZCwgdGhleSBhcmUgb25seSB1c2VkIGR1cmluZyB0aGUgXCJqb2luXCIgb3BlcmF0aW9uIHdoaWNoXG4gICAgICAgcmVzcGVjdHMgdGhpcyBwcmVjb25kaXRpb24uXG4gICAgKilcblxuICAgIGxldCByZWMgYWRkX21pbl9lbGVtZW50IHggPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBzaW5nbGV0b24geFxuICAgICAgfCBOb2RlIHtsOyB2OyByfSAtPlxuICAgICAgICBiYWwgKGFkZF9taW5fZWxlbWVudCB4IGwpIHYgclxuXG4gICAgbGV0IHJlYyBhZGRfbWF4X2VsZW1lbnQgeCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IHNpbmdsZXRvbiB4XG4gICAgICB8IE5vZGUge2w7IHY7IHJ9IC0+XG4gICAgICAgIGJhbCBsIHYgKGFkZF9tYXhfZWxlbWVudCB4IHIpXG5cbiAgICAoKiBTYW1lIGFzIGNyZWF0ZSBhbmQgYmFsLCBidXQgbm8gYXNzdW1wdGlvbnMgYXJlIG1hZGUgb24gdGhlXG4gICAgICAgcmVsYXRpdmUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IHJlYyBqb2luIGwgdiByID1cbiAgICAgIG1hdGNoIChsLCByKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgLT4gYWRkX21pbl9lbGVtZW50IHYgclxuICAgICAgfCAoXywgRW1wdHkpIC0+IGFkZF9tYXhfZWxlbWVudCB2IGxcbiAgICAgIHwgKE5vZGV7bD1sbDsgdj1sdjsgcj1scjsgaD1saH0sIE5vZGV7bD1ybDsgdj1ydjsgcj1ycjsgaD1yaH0pIC0+XG4gICAgICAgICAgaWYgbGggPiByaCArIDIgdGhlbiBiYWwgbGwgbHYgKGpvaW4gbHIgdiByKSBlbHNlXG4gICAgICAgICAgaWYgcmggPiBsaCArIDIgdGhlbiBiYWwgKGpvaW4gbCB2IHJsKSBydiByciBlbHNlXG4gICAgICAgICAgY3JlYXRlIGwgdiByXG5cbiAgICAoKiBTbWFsbGVzdCBhbmQgZ3JlYXRlc3QgZWxlbWVudCBvZiBhIHNldCAqKVxuXG4gICAgbGV0IHJlYyBtaW5fZWx0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bD1FbXB0eTsgdn0gLT4gdlxuICAgICAgfCBOb2Rle2x9IC0+IG1pbl9lbHQgbFxuXG4gICAgbGV0IHJlYyBtaW5fZWx0X29wdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZXtsPUVtcHR5OyB2fSAtPiBTb21lIHZcbiAgICAgIHwgTm9kZXtsfSAtPiBtaW5fZWx0X29wdCBsXG5cbiAgICBsZXQgcmVjIG1heF9lbHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXt2OyByPUVtcHR5fSAtPiB2XG4gICAgICB8IE5vZGV7cn0gLT4gbWF4X2VsdCByXG5cbiAgICBsZXQgcmVjIG1heF9lbHRfb3B0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2Rle3Y7IHI9RW1wdHl9IC0+IFNvbWUgdlxuICAgICAgfCBOb2Rle3J9IC0+IG1heF9lbHRfb3B0IHJcblxuICAgICgqIFJlbW92ZSB0aGUgc21hbGxlc3QgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2V0ICopXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9taW5fZWx0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQucmVtb3ZlX21pbl9lbHRcIlxuICAgICAgfCBOb2Rle2w9RW1wdHk7IHJ9IC0+IHJcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBiYWwgKHJlbW92ZV9taW5fZWx0IGwpIHYgclxuXG4gICAgKCogTWVyZ2UgdHdvIHRyZWVzIGwgYW5kIHIgaW50byBvbmUuXG4gICAgICAgQWxsIGVsZW1lbnRzIG9mIGwgbXVzdCBwcmVjZWRlIHRoZSBlbGVtZW50cyBvZiByLlxuICAgICAgIEFzc3VtZSB8IGhlaWdodCBsIC0gaGVpZ2h0IHIgfCA8PSAyLiAqKVxuXG4gICAgbGV0IG1lcmdlIHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT4gYmFsIHQxIChtaW5fZWx0IHQyKSAocmVtb3ZlX21pbl9lbHQgdDIpXG5cbiAgICAoKiBNZXJnZSB0d28gdHJlZXMgbCBhbmQgciBpbnRvIG9uZS5cbiAgICAgICBBbGwgZWxlbWVudHMgb2YgbCBtdXN0IHByZWNlZGUgdGhlIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgTm8gYXNzdW1wdGlvbiBvbiB0aGUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IGNvbmNhdCB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+IGpvaW4gdDEgKG1pbl9lbHQgdDIpIChyZW1vdmVfbWluX2VsdCB0MilcblxuICAgICgqIFNwbGl0dGluZy4gIHNwbGl0IHggcyByZXR1cm5zIGEgdHJpcGxlIChsLCBwcmVzZW50LCByKSB3aGVyZVxuICAgICAgICAtIGwgaXMgdGhlIHNldCBvZiBlbGVtZW50cyBvZiBzIHRoYXQgYXJlIDwgeFxuICAgICAgICAtIHIgaXMgdGhlIHNldCBvZiBlbGVtZW50cyBvZiBzIHRoYXQgYXJlID4geFxuICAgICAgICAtIHByZXNlbnQgaXMgZmFsc2UgaWYgcyBjb250YWlucyBubyBlbGVtZW50IGVxdWFsIHRvIHgsXG4gICAgICAgICAgb3IgdHJ1ZSBpZiBzIGNvbnRhaW5zIGFuIGVsZW1lbnQgZXF1YWwgdG8geC4gKilcblxuICAgIGxldCByZWMgc3BsaXQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKEVtcHR5LCBmYWxzZSwgRW1wdHkpXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gKGwsIHRydWUsIHIpXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgKGxsLCBwcmVzLCBybCkgPSBzcGxpdCB4IGwgaW4gKGxsLCBwcmVzLCBqb2luIHJsIHYgcilcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgKGxyLCBwcmVzLCBycikgPSBzcGxpdCB4IHIgaW4gKGpvaW4gbCB2IGxyLCBwcmVzLCBycilcblxuICAgICgqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBzZXQgb3BlcmF0aW9ucyAqKVxuXG4gICAgbGV0IGVtcHR5ID0gRW1wdHlcblxuICAgIGxldCBpc19lbXB0eSA9IGZ1bmN0aW9uIEVtcHR5IC0+IHRydWUgfCBfIC0+IGZhbHNlXG5cbiAgICBsZXQgcmVjIG1lbSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gZmFsc2VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgYyA9IDAgfHwgbWVtIHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIHJlbW92ZSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGV7bDsgdjsgcn0gYXMgdCkgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gbWVyZ2UgbCByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgICBsZXQgbGwgPSByZW1vdmUgeCBsIGluXG4gICAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiB0XG4gICAgICAgICAgICAgIGVsc2UgYmFsIGxsIHYgclxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgcnIgPSByZW1vdmUgeCByIGluXG4gICAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiB0XG4gICAgICAgICAgICAgIGVsc2UgYmFsIGwgdiByclxuXG4gICAgbGV0IHJlYyB1bmlvbiBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdDIpIC0+IHQyXG4gICAgICB8ICh0MSwgRW1wdHkpIC0+IHQxXG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjE7IGg9aDF9LCBOb2Rle2w9bDI7IHY9djI7IHI9cjI7IGg9aDJ9KSAtPlxuICAgICAgICAgIGlmIGgxID49IGgyIHRoZW5cbiAgICAgICAgICAgIGlmIGgyID0gMSB0aGVuIGFkZCB2MiBzMSBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIGxldCAobDIsIF8sIHIyKSA9IHNwbGl0IHYxIHMyIGluXG4gICAgICAgICAgICAgIGpvaW4gKHVuaW9uIGwxIGwyKSB2MSAodW5pb24gcjEgcjIpXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBpZiBoMSA9IDEgdGhlbiBhZGQgdjEgczIgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBsZXQgKGwxLCBfLCByMSkgPSBzcGxpdCB2MiBzMSBpblxuICAgICAgICAgICAgICBqb2luICh1bmlvbiBsMSBsMikgdjIgKHVuaW9uIHIxIHIyKVxuICAgICAgICAgICAgZW5kXG5cbiAgICBsZXQgcmVjIGludGVyIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBFbXB0eVxuICAgICAgfCAoXywgRW1wdHkpIC0+IEVtcHR5XG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjF9LCB0MikgLT5cbiAgICAgICAgICBtYXRjaCBzcGxpdCB2MSB0MiB3aXRoXG4gICAgICAgICAgICAobDIsIGZhbHNlLCByMikgLT5cbiAgICAgICAgICAgICAgY29uY2F0IChpbnRlciBsMSBsMikgKGludGVyIHIxIHIyKVxuICAgICAgICAgIHwgKGwyLCB0cnVlLCByMikgLT5cbiAgICAgICAgICAgICAgam9pbiAoaW50ZXIgbDEgbDIpIHYxIChpbnRlciByMSByMilcblxuICAgICgqIFNhbWUgYXMgc3BsaXQsIGJ1dCBjb21wdXRlIHRoZSBsZWZ0IGFuZCByaWdodCBzdWJ0cmVlc1xuICAgICAgIG9ubHkgaWYgdGhlIHBpdm90IGVsZW1lbnQgaXMgbm90IGluIHRoZSBzZXQuICBUaGUgcmlnaHQgc3VidHJlZVxuICAgICAgIGlzIGNvbXB1dGVkIG9uIGRlbWFuZC4gKilcblxuICAgIHR5cGUgc3BsaXRfYmlzID1cbiAgICAgIHwgRm91bmRcbiAgICAgIHwgTm90Rm91bmQgb2YgdCAqICh1bml0IC0+IHQpXG5cbiAgICBsZXQgcmVjIHNwbGl0X2JpcyB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb3RGb3VuZCAoRW1wdHksIChmdW4gKCkgLT4gRW1wdHkpKVxuICAgICAgfCBOb2Rle2w7IHY7IHI7IF99IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIEZvdW5kXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBtYXRjaCBzcGxpdF9iaXMgeCBsIHdpdGhcbiAgICAgICAgICAgIHwgRm91bmQgLT4gRm91bmRcbiAgICAgICAgICAgIHwgTm90Rm91bmQgKGxsLCBybCkgLT4gTm90Rm91bmQgKGxsLCAoZnVuICgpIC0+IGpvaW4gKHJsICgpKSB2IHIpKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIG1hdGNoIHNwbGl0X2JpcyB4IHIgd2l0aFxuICAgICAgICAgICAgfCBGb3VuZCAtPiBGb3VuZFxuICAgICAgICAgICAgfCBOb3RGb3VuZCAobHIsIHJyKSAtPiBOb3RGb3VuZCAoam9pbiBsIHYgbHIsIHJyKVxuXG4gICAgbGV0IHJlYyBkaXNqb2ludCBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgfCAoXywgRW1wdHkpIC0+IHRydWVcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMX0sIHQyKSAtPlxuICAgICAgICAgIGlmIHMxID09IHMyIHRoZW4gZmFsc2VcbiAgICAgICAgICBlbHNlIG1hdGNoIHNwbGl0X2JpcyB2MSB0MiB3aXRoXG4gICAgICAgICAgICAgIE5vdEZvdW5kKGwyLCByMikgLT4gZGlzam9pbnQgbDEgbDIgJiYgZGlzam9pbnQgcjEgKHIyICgpKVxuICAgICAgICAgICAgfCBGb3VuZCAtPiBmYWxzZVxuXG4gICAgbGV0IHJlYyBkaWZmIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBFbXB0eVxuICAgICAgfCAodDEsIEVtcHR5KSAtPiB0MVxuICAgICAgfCAoTm9kZXtsPWwxOyB2PXYxOyByPXIxfSwgdDIpIC0+XG4gICAgICAgICAgbWF0Y2ggc3BsaXQgdjEgdDIgd2l0aFxuICAgICAgICAgICAgKGwyLCBmYWxzZSwgcjIpIC0+XG4gICAgICAgICAgICAgIGpvaW4gKGRpZmYgbDEgbDIpIHYxIChkaWZmIHIxIHIyKVxuICAgICAgICAgIHwgKGwyLCB0cnVlLCByMikgLT5cbiAgICAgICAgICAgICAgY29uY2F0IChkaWZmIGwxIGwyKSAoZGlmZiByMSByMilcblxuICAgIHR5cGUgZW51bWVyYXRpb24gPSBFbmQgfCBNb3JlIG9mIGVsdCAqIHQgKiBlbnVtZXJhdGlvblxuXG4gICAgbGV0IHJlYyBjb25zX2VudW0gcyBlID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gY29uc19lbnVtIGwgKE1vcmUodiwgciwgZSkpXG5cbiAgICBsZXQgcmVjIGNvbXBhcmVfYXV4IGUxIGUyID1cbiAgICAgICAgbWF0Y2ggKGUxLCBlMikgd2l0aFxuICAgICAgICAoRW5kLCBFbmQpIC0+IDBcbiAgICAgIHwgKEVuZCwgXykgIC0+IC0xXG4gICAgICB8IChfLCBFbmQpIC0+IDFcbiAgICAgIHwgKE1vcmUodjEsIHIxLCBlMSksIE1vcmUodjIsIHIyLCBlMikpIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB2MSB2MiBpblxuICAgICAgICAgIGlmIGMgPD4gMFxuICAgICAgICAgIHRoZW4gY1xuICAgICAgICAgIGVsc2UgY29tcGFyZV9hdXggKGNvbnNfZW51bSByMSBlMSkgKGNvbnNfZW51bSByMiBlMilcblxuICAgIGxldCBjb21wYXJlIHMxIHMyID1cbiAgICAgIGNvbXBhcmVfYXV4IChjb25zX2VudW0gczEgRW5kKSAoY29uc19lbnVtIHMyIEVuZClcblxuICAgIGxldCBlcXVhbCBzMSBzMiA9XG4gICAgICBjb21wYXJlIHMxIHMyID0gMFxuXG4gICAgbGV0IHJlYyBzdWJzZXQgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICBFbXB0eSwgXyAtPlxuICAgICAgICAgIHRydWVcbiAgICAgIHwgXywgRW1wdHkgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBOb2RlIHtsPWwxOyB2PXYxOyByPXIxfSwgKE5vZGUge2w9bDI7IHY9djI7IHI9cjJ9IGFzIHQyKSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgdjEgdjIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBzdWJzZXQgbDEgbDIgJiYgc3Vic2V0IHIxIHIyXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBzdWJzZXQgKE5vZGUge2w9bDE7IHY9djE7IHI9RW1wdHk7IGg9MH0pIGwyICYmIHN1YnNldCByMSB0MlxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHN1YnNldCAoTm9kZSB7bD1FbXB0eTsgdj12MTsgcj1yMTsgaD0wfSkgcjIgJiYgc3Vic2V0IGwxIHQyXG5cbiAgICBsZXQgcmVjIGl0ZXIgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+ICgpXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gaXRlciBmIGw7IGYgdjsgaXRlciBmIHJcblxuICAgIGxldCByZWMgZm9sZCBmIHMgYWNjdSA9XG4gICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGZvbGQgZiByIChmIHYgKGZvbGQgZiBsIGFjY3UpKVxuXG4gICAgbGV0IHJlYyBmb3JfYWxsIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiB0cnVlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gcCB2ICYmIGZvcl9hbGwgcCBsICYmIGZvcl9hbGwgcCByXG5cbiAgICBsZXQgcmVjIGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gZmFsc2VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBwIHYgfHwgZXhpc3RzIHAgbCB8fCBleGlzdHMgcCByXG5cbiAgICBsZXQgcmVjIGZpbHRlciBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGV7bDsgdjsgcn0pIGFzIHQgLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCBsJyA9IGZpbHRlciBwIGwgaW5cbiAgICAgICAgICBsZXQgcHYgPSBwIHYgaW5cbiAgICAgICAgICBsZXQgcicgPSBmaWx0ZXIgcCByIGluXG4gICAgICAgICAgaWYgcHYgdGhlblxuICAgICAgICAgICAgaWYgbD09bCcgJiYgcj09cicgdGhlbiB0IGVsc2Ugam9pbiBsJyB2IHInXG4gICAgICAgICAgZWxzZSBjb25jYXQgbCcgcidcblxuICAgIGxldCByZWMgcGFydGl0aW9uIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAoRW1wdHksIEVtcHR5KVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgKCogY2FsbCBbcF0gaW4gdGhlIGV4cGVjdGVkIGxlZnQtdG8tcmlnaHQgb3JkZXIgKilcbiAgICAgICAgICBsZXQgKGx0LCBsZikgPSBwYXJ0aXRpb24gcCBsIGluXG4gICAgICAgICAgbGV0IHB2ID0gcCB2IGluXG4gICAgICAgICAgbGV0IChydCwgcmYpID0gcGFydGl0aW9uIHAgciBpblxuICAgICAgICAgIGlmIHB2XG4gICAgICAgICAgdGhlbiAoam9pbiBsdCB2IHJ0LCBjb25jYXQgbGYgcmYpXG4gICAgICAgICAgZWxzZSAoY29uY2F0IGx0IHJ0LCBqb2luIGxmIHYgcmYpXG5cbiAgICBsZXQgcmVjIGNhcmRpbmFsID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gMFxuICAgICAgfCBOb2Rle2w7IHJ9IC0+IGNhcmRpbmFsIGwgKyAxICsgY2FyZGluYWwgclxuXG4gICAgbGV0IHJlYyBlbGVtZW50c19hdXggYWNjdSA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGFjY3VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBlbGVtZW50c19hdXggKHYgOjogZWxlbWVudHNfYXV4IGFjY3UgcikgbFxuXG4gICAgbGV0IGVsZW1lbnRzIHMgPVxuICAgICAgZWxlbWVudHNfYXV4IFtdIHNcblxuICAgIGxldCBjaG9vc2UgPSBtaW5fZWx0XG5cbiAgICBsZXQgY2hvb3NlX29wdCA9IG1pbl9lbHRfb3B0XG5cbiAgICBsZXQgcmVjIGZpbmQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIHZcbiAgICAgICAgICBlbHNlIGZpbmQgeCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgdjBcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYwIGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9vcHRfYXV4IHYwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIFNvbWUgdjBcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdjAgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3Rfb3B0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9sYXN0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYwIGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3QgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2IGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0X29wdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgU29tZSB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdjAgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9vcHQgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9vcHQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBTb21lIHZcbiAgICAgICAgICBlbHNlIGZpbmRfb3B0IHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgdHJ5X2pvaW4gbCB2IHIgPVxuICAgICAgKCogW2pvaW4gbCB2IHJdIGNhbiBvbmx5IGJlIGNhbGxlZCB3aGVuIChlbGVtZW50cyBvZiBsIDwgdiA8XG4gICAgICAgICBlbGVtZW50cyBvZiByKTsgdXNlIFt0cnlfam9pbiBsIHYgcl0gd2hlbiB0aGlzIHByb3BlcnR5IG1heVxuICAgICAgICAgbm90IGhvbGQsIGJ1dCB5b3UgaG9wZSBpdCBkb2VzIGhvbGQgaW4gdGhlIGNvbW1vbiBjYXNlICopXG4gICAgICBpZiAobCA9IEVtcHR5IHx8IE9yZC5jb21wYXJlIChtYXhfZWx0IGwpIHYgPCAwKVxuICAgICAgJiYgKHIgPSBFbXB0eSB8fCBPcmQuY29tcGFyZSB2IChtaW5fZWx0IHIpIDwgMClcbiAgICAgIHRoZW4gam9pbiBsIHYgclxuICAgICAgZWxzZSB1bmlvbiBsIChhZGQgdiByKVxuXG4gICAgbGV0IHJlYyBtYXAgZiA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gYXMgdCAtPlxuICAgICAgICAgKCogZW5mb3JjZSBsZWZ0LXRvLXJpZ2h0IGV2YWx1YXRpb24gb3JkZXIgKilcbiAgICAgICAgIGxldCBsJyA9IG1hcCBmIGwgaW5cbiAgICAgICAgIGxldCB2JyA9IGYgdiBpblxuICAgICAgICAgbGV0IHInID0gbWFwIGYgciBpblxuICAgICAgICAgaWYgbCA9PSBsJyAmJiB2ID09IHYnICYmIHIgPT0gcicgdGhlbiB0XG4gICAgICAgICBlbHNlIHRyeV9qb2luIGwnIHYnIHInXG5cbiAgICBsZXQgdHJ5X2NvbmNhdCB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+IHRyeV9qb2luIHQxIChtaW5fZWx0IHQyKSAocmVtb3ZlX21pbl9lbHQgdDIpXG5cbiAgICBsZXQgcmVjIGZpbHRlcl9tYXAgZiA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gYXMgdCAtPlxuICAgICAgICAgKCogZW5mb3JjZSBsZWZ0LXRvLXJpZ2h0IGV2YWx1YXRpb24gb3JkZXIgKilcbiAgICAgICAgIGxldCBsJyA9IGZpbHRlcl9tYXAgZiBsIGluXG4gICAgICAgICBsZXQgdicgPSBmIHYgaW5cbiAgICAgICAgIGxldCByJyA9IGZpbHRlcl9tYXAgZiByIGluXG4gICAgICAgICBiZWdpbiBtYXRjaCB2JyB3aXRoXG4gICAgICAgICAgIHwgU29tZSB2JyAtPlxuICAgICAgICAgICAgICBpZiBsID09IGwnICYmIHYgPT0gdicgJiYgciA9PSByJyB0aGVuIHRcbiAgICAgICAgICAgICAgZWxzZSB0cnlfam9pbiBsJyB2JyByJ1xuICAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgdHJ5X2NvbmNhdCBsJyByJ1xuICAgICAgICAgZW5kXG5cbiAgICBsZXQgb2Zfc29ydGVkX2xpc3QgbCA9XG4gICAgICBsZXQgcmVjIHN1YiBuIGwgPVxuICAgICAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICAgICAgfCAwLCBsIC0+IEVtcHR5LCBsXG4gICAgICAgIHwgMSwgeDAgOjogbCAtPiBOb2RlIHtsPUVtcHR5OyB2PXgwOyByPUVtcHR5OyBoPTF9LCBsXG4gICAgICAgIHwgMiwgeDAgOjogeDEgOjogbCAtPlxuICAgICAgICAgICAgTm9kZXtsPU5vZGV7bD1FbXB0eTsgdj14MDsgcj1FbXB0eTsgaD0xfTsgdj14MTsgcj1FbXB0eTsgaD0yfSwgbFxuICAgICAgICB8IDMsIHgwIDo6IHgxIDo6IHgyIDo6IGwgLT5cbiAgICAgICAgICAgIE5vZGV7bD1Ob2Rle2w9RW1wdHk7IHY9eDA7IHI9RW1wdHk7IGg9MX07IHY9eDE7XG4gICAgICAgICAgICAgICAgIHI9Tm9kZXtsPUVtcHR5OyB2PXgyOyByPUVtcHR5OyBoPTF9OyBoPTJ9LCBsXG4gICAgICAgIHwgbiwgbCAtPlxuICAgICAgICAgIGxldCBubCA9IG4gLyAyIGluXG4gICAgICAgICAgbGV0IGxlZnQsIGwgPSBzdWIgbmwgbCBpblxuICAgICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICAgIHwgW10gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgfCBtaWQgOjogbCAtPlxuICAgICAgICAgICAgbGV0IHJpZ2h0LCBsID0gc3ViIChuIC0gbmwgLSAxKSBsIGluXG4gICAgICAgICAgICBjcmVhdGUgbGVmdCBtaWQgcmlnaHQsIGxcbiAgICAgIGluXG4gICAgICBmc3QgKHN1YiAoTGlzdC5sZW5ndGggbCkgbClcblxuICAgIGxldCBvZl9saXN0IGwgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IGVtcHR5XG4gICAgICB8IFt4MF0gLT4gc2luZ2xldG9uIHgwXG4gICAgICB8IFt4MDsgeDFdIC0+IGFkZCB4MSAoc2luZ2xldG9uIHgwKVxuICAgICAgfCBbeDA7IHgxOyB4Ml0gLT4gYWRkIHgyIChhZGQgeDEgKHNpbmdsZXRvbiB4MCkpXG4gICAgICB8IFt4MDsgeDE7IHgyOyB4M10gLT4gYWRkIHgzIChhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSkpXG4gICAgICB8IFt4MDsgeDE7IHgyOyB4MzsgeDRdIC0+IGFkZCB4NCAoYWRkIHgzIChhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSkpKVxuICAgICAgfCBfIC0+IG9mX3NvcnRlZF9saXN0IChMaXN0LnNvcnRfdW5pcSBPcmQuY29tcGFyZSBsKVxuXG4gICAgbGV0IGFkZF9zZXEgaSBtID1cbiAgICAgIFNlcS5mb2xkX2xlZnQgKGZ1biBzIHggLT4gYWRkIHggcykgbSBpXG5cbiAgICBsZXQgb2Zfc2VxIGkgPSBhZGRfc2VxIGkgZW1wdHlcblxuICAgIGxldCByZWMgc2VxX29mX2VudW1fIGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICAgIHwgRW5kIC0+IFNlcS5OaWxcbiAgICAgIHwgTW9yZSAoeCwgdCwgcmVzdCkgLT4gU2VxLkNvbnMgKHgsIHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fc2VxIGMgPSBzZXFfb2ZfZW51bV8gKGNvbnNfZW51bSBjIEVuZClcblxuICAgIGxldCByZWMgc25vY19lbnVtIHMgZSA9XG4gICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IHNub2NfZW51bSByIChNb3JlKHYsIGwsIGUpKVxuXG4gICAgbGV0IHJlYyByZXZfc2VxX29mX2VudW1fIGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICAgIHwgRW5kIC0+IFNlcS5OaWxcbiAgICAgIHwgTW9yZSAoeCwgdCwgcmVzdCkgLT4gU2VxLkNvbnMgKHgsIHJldl9zZXFfb2ZfZW51bV8gKHNub2NfZW51bSB0IHJlc3QpKVxuXG4gICAgbGV0IHRvX3Jldl9zZXEgYyA9IHJldl9zZXFfb2ZfZW51bV8gKHNub2NfZW51bSBjIEVuZClcblxuICAgIGxldCB0b19zZXFfZnJvbSBsb3cgcyA9XG4gICAgICBsZXQgcmVjIGF1eCBsb3cgcyBjID0gbWF0Y2ggcyB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gY1xuICAgICAgICB8IE5vZGUge2w7IHI7IHY7IF99IC0+XG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBPcmQuY29tcGFyZSB2IGxvdyB3aXRoXG4gICAgICAgICAgICAgIHwgMCAtPiBNb3JlICh2LCByLCBjKVxuICAgICAgICAgICAgICB8IG4gd2hlbiBuPDAgLT4gYXV4IGxvdyByIGNcbiAgICAgICAgICAgICAgfCBfIC0+IGF1eCBsb3cgbCAoTW9yZSAodiwgciwgYykpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGluXG4gICAgICBzZXFfb2ZfZW51bV8gKGF1eCBsb3cgcyBFbmQpXG4gIGVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSB7IG11dGFibGUgYyA6ICdhIGxpc3Q7IG11dGFibGUgbGVuIDogaW50OyB9XG5cbmV4Y2VwdGlvbiBFbXB0eVxuXG5sZXQgY3JlYXRlICgpID0geyBjID0gW107IGxlbiA9IDA7IH1cblxubGV0IGNsZWFyIHMgPSBzLmMgPC0gW107IHMubGVuIDwtIDBcblxubGV0IGNvcHkgcyA9IHsgYyA9IHMuYzsgbGVuID0gcy5sZW47IH1cblxubGV0IHB1c2ggeCBzID0gcy5jIDwtIHggOjogcy5jOyBzLmxlbiA8LSBzLmxlbiArIDFcblxubGV0IHBvcCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6dGwgLT4gcy5jIDwtIHRsOyBzLmxlbiA8LSBzLmxlbiAtIDE7IGhkXG4gIHwgW10gICAgIC0+IHJhaXNlIEVtcHR5XG5cbmxldCBwb3Bfb3B0IHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjp0bCAtPiBzLmMgPC0gdGw7IHMubGVuIDwtIHMubGVuIC0gMTsgU29tZSBoZFxuICB8IFtdICAgICAtPiBOb25lXG5cbmxldCB0b3AgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6Ol8gLT4gaGRcbiAgfCBbXSAgICAtPiByYWlzZSBFbXB0eVxuXG5sZXQgdG9wX29wdCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6XyAtPiBTb21lIGhkXG4gIHwgW10gICAgLT4gTm9uZVxuXG5sZXQgaXNfZW1wdHkgcyA9IChzLmMgPSBbXSlcblxubGV0IGxlbmd0aCBzID0gcy5sZW5cblxubGV0IGl0ZXIgZiBzID0gTGlzdC5pdGVyIGYgcy5jXG5cbmxldCBmb2xkIGYgYWNjIHMgPSBMaXN0LmZvbGRfbGVmdCBmIGFjYyBzLmNcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID0gTGlzdC50b19zZXEgcy5jXG5cbmxldCBhZGRfc2VxIHEgaSA9IFNlcS5pdGVyIChmdW4geCAtPiBwdXNoIHggcSkgaVxuXG5sZXQgb2Zfc2VxIGcgPVxuICBsZXQgcyA9IGNyZWF0ZSgpIGluXG4gIGFkZF9zZXEgcyBnO1xuICBzXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgIEZyYW5jb2lzIFBvdHRpZXIsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgIEplcmVtaWUgRGltaW5vLCBKYW5lIFN0cmVldCBFdXJvcGUgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDAyIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4Y2VwdGlvbiBFbXB0eVxuXG50eXBlICdhIGNlbGwgPVxuICB8IE5pbFxuICB8IENvbnMgb2YgeyBjb250ZW50OiAnYTsgbXV0YWJsZSBuZXh0OiAnYSBjZWxsIH1cblxudHlwZSAnYSB0ID0ge1xuICBtdXRhYmxlIGxlbmd0aDogaW50O1xuICBtdXRhYmxlIGZpcnN0OiAnYSBjZWxsO1xuICBtdXRhYmxlIGxhc3Q6ICdhIGNlbGxcbn1cblxubGV0IGNyZWF0ZSAoKSA9IHtcbiAgbGVuZ3RoID0gMDtcbiAgZmlyc3QgPSBOaWw7XG4gIGxhc3QgPSBOaWxcbn1cblxubGV0IGNsZWFyIHEgPVxuICBxLmxlbmd0aCA8LSAwO1xuICBxLmZpcnN0IDwtIE5pbDtcbiAgcS5sYXN0IDwtIE5pbFxuXG5sZXQgYWRkIHggcSA9XG4gIGxldCBjZWxsID0gQ29ucyB7XG4gICAgY29udGVudCA9IHg7XG4gICAgbmV4dCA9IE5pbFxuICB9IGluXG4gIG1hdGNoIHEubGFzdCB3aXRoXG4gIHwgTmlsIC0+XG4gICAgcS5sZW5ndGggPC0gMTtcbiAgICBxLmZpcnN0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcbiAgfCBDb25zIGxhc3QgLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCArIDE7XG4gICAgbGFzdC5uZXh0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcblxubGV0IHB1c2ggPVxuICBhZGRcblxubGV0IHBlZWsgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50IH0gLT4gY29udGVudFxuXG5sZXQgcGVla19vcHQgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiBOb25lXG4gIHwgQ29ucyB7IGNvbnRlbnQgfSAtPiBTb21lIGNvbnRlbnRcblxubGV0IHRvcCA9XG4gIHBlZWtcblxubGV0IHRha2UgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0ID0gTmlsIH0gLT5cbiAgICBjbGVhciBxO1xuICAgIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBjb250ZW50XG5cbmxldCB0YWtlX29wdCBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IE5vbmVcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCA9IE5pbCB9IC0+XG4gICAgY2xlYXIgcTtcbiAgICBTb21lIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBTb21lIGNvbnRlbnRcblxubGV0IHBvcCA9XG4gIHRha2VcblxubGV0IGNvcHkgPVxuICBsZXQgcmVjIGNvcHkgcV9yZXMgcHJldiBjZWxsID1cbiAgICBtYXRjaCBjZWxsIHdpdGhcbiAgICB8IE5pbCAtPiBxX3Jlcy5sYXN0IDwtIHByZXY7IHFfcmVzXG4gICAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgICBsZXQgcmVzID0gQ29ucyB7IGNvbnRlbnQ7IG5leHQgPSBOaWwgfSBpblxuICAgICAgYmVnaW4gbWF0Y2ggcHJldiB3aXRoXG4gICAgICB8IE5pbCAtPiBxX3Jlcy5maXJzdCA8LSByZXNcbiAgICAgIHwgQ29ucyBwIC0+IHAubmV4dCA8LSByZXNcbiAgICAgIGVuZDtcbiAgICAgIGNvcHkgcV9yZXMgcmVzIG5leHRcbiAgaW5cbiAgZnVuIHEgLT4gY29weSB7IGxlbmd0aCA9IHEubGVuZ3RoOyBmaXJzdCA9IE5pbDsgbGFzdCA9IE5pbCB9IE5pbCBxLmZpcnN0XG5cbmxldCBpc19lbXB0eSBxID1cbiAgcS5sZW5ndGggPSAwXG5cbmxldCBsZW5ndGggcSA9XG4gIHEubGVuZ3RoXG5cbmxldCBpdGVyID1cbiAgbGV0IHJlYyBpdGVyIGYgY2VsbCA9XG4gICAgbWF0Y2ggY2VsbCB3aXRoXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGYgY29udGVudDtcbiAgICAgIGl0ZXIgZiBuZXh0XG4gIGluXG4gIGZ1biBmIHEgLT4gaXRlciBmIHEuZmlyc3RcblxubGV0IGZvbGQgPVxuICBsZXQgcmVjIGZvbGQgZiBhY2N1IGNlbGwgPVxuICAgIG1hdGNoIGNlbGwgd2l0aFxuICAgIHwgTmlsIC0+IGFjY3VcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGxldCBhY2N1ID0gZiBhY2N1IGNvbnRlbnQgaW5cbiAgICAgIGZvbGQgZiBhY2N1IG5leHRcbiAgaW5cbiAgZnVuIGYgYWNjdSBxIC0+IGZvbGQgZiBhY2N1IHEuZmlyc3RcblxubGV0IHRyYW5zZmVyIHExIHEyID1cbiAgaWYgcTEubGVuZ3RoID4gMCB0aGVuXG4gICAgbWF0Y2ggcTIubGFzdCB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMS5sZW5ndGg7XG4gICAgICBxMi5maXJzdCA8LSBxMS5maXJzdDtcbiAgICAgIHEyLmxhc3QgPC0gcTEubGFzdDtcbiAgICAgIGNsZWFyIHExXG4gICAgfCBDb25zIGxhc3QgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMi5sZW5ndGggKyBxMS5sZW5ndGg7XG4gICAgICBsYXN0Lm5leHQgPC0gcTEuZmlyc3Q7XG4gICAgICBxMi5sYXN0IDwtIHExLmxhc3Q7XG4gICAgICBjbGVhciBxMVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHEgPVxuICBsZXQgcmVjIGF1eCBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgfCBOaWwgLT4gU2VxLk5pbFxuICAgIHwgQ29ucyB7IGNvbnRlbnQ9eDsgbmV4dDsgfSAtPiBTZXEuQ29ucyAoeCwgYXV4IG5leHQpXG4gIGluXG4gIGF1eCBxLmZpcnN0XG5cbmxldCBhZGRfc2VxIHEgaSA9IFNlcS5pdGVyIChmdW4geCAtPiBwdXNoIHggcSkgaVxuXG5sZXQgb2Zfc2VxIGcgPVxuICBsZXQgcSA9IGNyZWF0ZSgpIGluXG4gIGFkZF9zZXEgcSBnO1xuICBxXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgIERhbmllbCBkZSBSYXVnbGF1ZHJlLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgJ2EgdCA9ICdhIGNlbGwgb3B0aW9uXG5hbmQgJ2EgY2VsbCA9IHsgbXV0YWJsZSBjb3VudCA6IGludDsgbXV0YWJsZSBkYXRhIDogJ2EgZGF0YSB9XG5hbmQgJ2EgZGF0YSA9XG4gICAgU2VtcHR5XG4gIHwgU2NvbnMgb2YgJ2EgKiAnYSBkYXRhXG4gIHwgU2FwcCBvZiAnYSBkYXRhICogJ2EgZGF0YVxuICB8IFNsYXp5IG9mICdhIGRhdGEgTGF6eS50XG4gIHwgU2dlbiBvZiAnYSBnZW5cbiAgfCBTYnVmZmlvIDogYnVmZmlvIC0+IGNoYXIgZGF0YVxuYW5kICdhIGdlbiA9IHsgbXV0YWJsZSBjdXJyIDogJ2Egb3B0aW9uIG9wdGlvbjsgZnVuYyA6IGludCAtPiAnYSBvcHRpb24gfVxuYW5kIGJ1ZmZpbyA9XG4gIHsgaWMgOiBpbl9jaGFubmVsOyBidWZmIDogYnl0ZXM7IG11dGFibGUgbGVuIDogaW50OyBtdXRhYmxlIGluZCA6IGludCB9XG5cbmV4Y2VwdGlvbiBGYWlsdXJlXG5leGNlcHRpb24gRXJyb3Igb2Ygc3RyaW5nXG5cbmxldCBjb3VudCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiAwXG4gIHwgU29tZSB7IGNvdW50IH0gLT4gY291bnRcbmxldCBkYXRhID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IFNlbXB0eVxuICB8IFNvbWUgeyBkYXRhIH0gLT4gZGF0YVxuXG5sZXQgZmlsbF9idWZmIGIgPVxuICBiLmxlbiA8LSBpbnB1dCBiLmljIGIuYnVmZiAwIChCeXRlcy5sZW5ndGggYi5idWZmKTsgYi5pbmQgPC0gMFxuXG5cbmxldCByZWMgZ2V0X2RhdGEgOiB0eXBlIHYuIGludCAtPiB2IGRhdGEgLT4gdiBkYXRhID0gZnVuIGNvdW50IGQgLT4gbWF0Y2ggZCB3aXRoXG4gKCogUmV0dXJucyBlaXRoZXIgU2VtcHR5IG9yIFNjb25zKGEsIF8pIGV2ZW4gd2hlbiBkIGlzIGEgZ2VuZXJhdG9yXG4gICAgb3IgYSBidWZmZXIuIEluIHRob3NlIGNhc2VzLCB0aGUgaXRlbSBhIGlzIHNlZW4gYXMgZXh0cmFjdGVkIGZyb21cbiB0aGUgZ2VuZXJhdG9yL2J1ZmZlci5cbiBUaGUgY291bnQgcGFyYW1ldGVyIGlzIHVzZWQgZm9yIGNhbGxpbmcgYFNnZW4tZnVuY3Rpb25zJy4gICopXG4gICBTZW1wdHkgfCBTY29ucyAoXywgXykgLT4gZFxuIHwgU2FwcCAoZDEsIGQyKSAtPlxuICAgICBiZWdpbiBtYXRjaCBnZXRfZGF0YSBjb3VudCBkMSB3aXRoXG4gICAgICAgU2NvbnMgKGEsIGQxMSkgLT4gU2NvbnMgKGEsIFNhcHAgKGQxMSwgZDIpKVxuICAgICB8IFNlbXB0eSAtPiBnZXRfZGF0YSBjb3VudCBkMlxuICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgIGVuZFxuIHwgU2dlbiB7Y3VyciA9IFNvbWUgTm9uZX0gLT4gU2VtcHR5XG4gfCBTZ2VuICh7Y3VyciA9IFNvbWUoU29tZSBhKX0gYXMgZykgLT5cbiAgICAgZy5jdXJyIDwtIE5vbmU7IFNjb25zKGEsIGQpXG4gfCBTZ2VuIGcgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZy5mdW5jIGNvdW50IHdpdGhcbiAgICAgICBOb25lIC0+IGcuY3VyciA8LSBTb21lKE5vbmUpOyBTZW1wdHlcbiAgICAgfCBTb21lIGEgLT4gU2NvbnMoYSwgZClcbiAgICAgICAgICgqIFdhcm5pbmc6IGFueW9uZSB1c2luZyBnIHRoaW5rcyB0aGF0IGFuIGl0ZW0gaGFzIGJlZW4gcmVhZCAqKVxuICAgICBlbmRcbiB8IFNidWZmaW8gYiAtPlxuICAgICBpZiBiLmluZCA+PSBiLmxlbiB0aGVuIGZpbGxfYnVmZiBiO1xuICAgICBpZiBiLmxlbiA9PSAwIHRoZW4gU2VtcHR5IGVsc2VcbiAgICAgICBsZXQgciA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmIGIuaW5kIGluXG4gICAgICAgKCogV2FybmluZzogYW55b25lIHVzaW5nIGcgdGhpbmtzIHRoYXQgYW4gaXRlbSBoYXMgYmVlbiByZWFkICopXG4gICAgICAgYi5pbmQgPC0gc3VjYyBiLmluZDsgU2NvbnMociwgZClcbiB8IFNsYXp5IGYgLT4gZ2V0X2RhdGEgY291bnQgKExhenkuZm9yY2UgZilcblxuXG5sZXQgcmVjIHBlZWtfZGF0YSA6IHR5cGUgdi4gdiBjZWxsIC0+IHYgb3B0aW9uID0gZnVuIHMgLT5cbiAoKiBjb25zdWx0IHRoZSBmaXJzdCBpdGVtIG9mIHMgKilcbiBtYXRjaCBzLmRhdGEgd2l0aFxuICAgU2VtcHR5IC0+IE5vbmVcbiB8IFNjb25zIChhLCBfKSAtPiBTb21lIGFcbiB8IFNhcHAgKF8sIF8pIC0+XG4gICAgIGJlZ2luIG1hdGNoIGdldF9kYXRhIHMuY291bnQgcy5kYXRhIHdpdGhcbiAgICAgICBTY29ucyhhLCBfKSBhcyBkIC0+IHMuZGF0YSA8LSBkOyBTb21lIGFcbiAgICAgfCBTZW1wdHkgLT4gTm9uZVxuICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgIGVuZFxuIHwgU2xhenkgZiAtPiBzLmRhdGEgPC0gKExhenkuZm9yY2UgZik7IHBlZWtfZGF0YSBzXG4gfCBTZ2VuIHtjdXJyID0gU29tZSBhfSAtPiBhXG4gfCBTZ2VuIGcgLT4gbGV0IHggPSBnLmZ1bmMgcy5jb3VudCBpbiBnLmN1cnIgPC0gU29tZSB4OyB4XG4gfCBTYnVmZmlvIGIgLT5cbiAgICAgaWYgYi5pbmQgPj0gYi5sZW4gdGhlbiBmaWxsX2J1ZmYgYjtcbiAgICAgaWYgYi5sZW4gPT0gMCB0aGVuIGJlZ2luIHMuZGF0YSA8LSBTZW1wdHk7IE5vbmUgZW5kXG4gICAgIGVsc2UgU29tZSAoQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmYgYi5pbmQpXG5cblxubGV0IHBlZWsgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gTm9uZVxuICB8IFNvbWUgcyAtPiBwZWVrX2RhdGEgc1xuXG5cbmxldCByZWMganVua19kYXRhIDogdHlwZSB2LiB2IGNlbGwgLT4gdW5pdCA9IGZ1biBzIC0+XG4gIG1hdGNoIHMuZGF0YSB3aXRoXG4gICAgU2NvbnMgKF8sIGQpIC0+IHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IHMuZGF0YSA8LSBkXG4gIHwgU2dlbiAoe2N1cnIgPSBTb21lIF99IGFzIGcpIC0+IHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IGcuY3VyciA8LSBOb25lXG4gIHwgU2J1ZmZpbyBiIC0+XG4gICAgICBpZiBiLmluZCA+PSBiLmxlbiB0aGVuIGZpbGxfYnVmZiBiO1xuICAgICAgaWYgYi5sZW4gPT0gMCB0aGVuIHMuZGF0YSA8LSBTZW1wdHlcbiAgICAgIGVsc2UgKHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IGIuaW5kIDwtIHN1Y2MgYi5pbmQpXG4gIHwgXyAtPlxuICAgICAgbWF0Y2ggcGVla19kYXRhIHMgd2l0aFxuICAgICAgICBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgXyAtPiBqdW5rX2RhdGEgc1xuXG5cbmxldCBqdW5rID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSBkYXRhIC0+IGp1bmtfZGF0YSBkYXRhXG5cbmxldCByZWMgbmdldF9kYXRhIG4gcyA9XG4gIGlmIG4gPD0gMCB0aGVuIFtdLCBzLmRhdGEsIDBcbiAgZWxzZVxuICAgIG1hdGNoIHBlZWtfZGF0YSBzIHdpdGhcbiAgICAgIFNvbWUgYSAtPlxuICAgICAgICBqdW5rX2RhdGEgcztcbiAgICAgICAgbGV0IChhbCwgZCwgaykgPSBuZ2V0X2RhdGEgKHByZWQgbikgcyBpbiBhIDo6IGFsLCBTY29ucyAoYSwgZCksIHN1Y2Mga1xuICAgIHwgTm9uZSAtPiBbXSwgcy5kYXRhLCAwXG5cblxubGV0IG5wZWVrX2RhdGEgbiBzID1cbiAgbGV0IChhbCwgZCwgbGVuKSA9IG5nZXRfZGF0YSBuIHMgaW5cbiAgcy5jb3VudCA8LSAocy5jb3VudCAtIGxlbik7XG4gIHMuZGF0YSA8LSBkO1xuICBhbFxuXG5cbmxldCBucGVlayBuID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSBkIC0+IG5wZWVrX2RhdGEgbiBkXG5cbmxldCBuZXh0IHMgPVxuICBtYXRjaCBwZWVrIHMgd2l0aFxuICAgIFNvbWUgYSAtPiBqdW5rIHM7IGFcbiAgfCBOb25lIC0+IHJhaXNlIEZhaWx1cmVcblxuXG5sZXQgZW1wdHkgcyA9XG4gIG1hdGNoIHBlZWsgcyB3aXRoXG4gICAgU29tZSBfIC0+IHJhaXNlIEZhaWx1cmVcbiAgfCBOb25lIC0+ICgpXG5cblxubGV0IGl0ZXIgZiBzdHJtID1cbiAgbGV0IHJlYyBkb19yZWMgKCkgPVxuICAgIG1hdGNoIHBlZWsgc3RybSB3aXRoXG4gICAgICBTb21lIGEgLT4ganVuayBzdHJtOyBpZ25vcmUoZiBhKTsgZG9fcmVjICgpXG4gICAgfCBOb25lIC0+ICgpXG4gIGluXG4gIGRvX3JlYyAoKVxuXG5cbigqIFN0cmVhbSBidWlsZGluZyBmdW5jdGlvbnMgKilcblxubGV0IGZyb20gZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNnZW4ge2N1cnIgPSBOb25lOyBmdW5jID0gZn19XG5cbmxldCBvZl9saXN0IGwgPVxuICBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBMaXN0LmZvbGRfcmlnaHQgKGZ1biB4IGwgLT4gU2NvbnMgKHgsIGwpKSBsIFNlbXB0eX1cblxuXG5sZXQgb2Zfc3RyaW5nIHMgPVxuICBsZXQgY291bnQgPSByZWYgMCBpblxuICBmcm9tIChmdW4gXyAtPlxuICAgICgqIFdlIGNhbm5vdCB1c2UgdGhlIGluZGV4IHBhc3NlZCBieSB0aGUgW2Zyb21dIGZ1bmN0aW9uIGRpcmVjdGx5XG4gICAgICAgYmVjYXVzZSBpdCByZXR1cm5zIHRoZSBjdXJyZW50IHN0cmVhbSBjb3VudCwgd2l0aCBhYnNvbHV0ZWx5IG5vXG4gICAgICAgZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCBzdGFydCBmcm9tIDAuIEZvciBleGFtcGxlLCBpbiB0aGUgY2FzZVxuICAgICAgIG9mIFtTdHJlYW0uaWNvbnMgJ2MnIChTdHJlYW0uZnJvbV9zdHJpbmcgXCJhYlwiKV0sIHRoZSBmaXJzdFxuICAgICAgIGFjY2VzcyB0byB0aGUgc3RyaW5nIHdpbGwgYmUgbWFkZSB3aXRoIGNvdW50IFsxXSBhbHJlYWR5LlxuICAgICopXG4gICAgbGV0IGMgPSAhY291bnQgaW5cbiAgICBpZiBjIDwgU3RyaW5nLmxlbmd0aCBzXG4gICAgdGhlbiAoaW5jciBjb3VudDsgU29tZSBzLltjXSlcbiAgICBlbHNlIE5vbmUpXG5cblxubGV0IG9mX2J5dGVzIHMgPVxuICBsZXQgY291bnQgPSByZWYgMCBpblxuICBmcm9tIChmdW4gXyAtPlxuICAgIGxldCBjID0gIWNvdW50IGluXG4gICAgaWYgYyA8IEJ5dGVzLmxlbmd0aCBzXG4gICAgdGhlbiAoaW5jciBjb3VudDsgU29tZSAoQnl0ZXMuZ2V0IHMgYykpXG4gICAgZWxzZSBOb25lKVxuXG5cbmxldCBvZl9jaGFubmVsIGljID1cbiAgU29tZSB7Y291bnQgPSAwO1xuICAgICAgICBkYXRhID0gU2J1ZmZpbyB7aWMgPSBpYzsgYnVmZiA9IEJ5dGVzLmNyZWF0ZSA0MDk2OyBsZW4gPSAwOyBpbmQgPSAwfX1cblxuXG4oKiBTdHJlYW0gZXhwcmVzc2lvbnMgYnVpbGRlcnMgKilcblxubGV0IGlhcHAgaSBzID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2FwcCAoZGF0YSBpLCBkYXRhIHMpfVxubGV0IGljb25zIGkgcyA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNjb25zIChpLCBkYXRhIHMpfVxubGV0IGlzaW5nIGkgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTY29ucyAoaSwgU2VtcHR5KX1cblxubGV0IGxhcHAgZiBzID1cbiAgU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2xhenkgKGxhenkoU2FwcCAoZGF0YSAoZiAoKSksIGRhdGEgcykpKX1cblxubGV0IGxjb25zIGYgcyA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KFNjb25zIChmICgpLCBkYXRhIHMpKSl9XG5sZXQgbHNpbmcgZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KFNjb25zIChmICgpLCBTZW1wdHkpKSl9XG5cbmxldCBzZW1wdHkgPSBOb25lXG5sZXQgc2xhenkgZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KGRhdGEgKGYgKCkpKSl9XG5cbigqIEZvciBkZWJ1Z2dpbmcgdXNlICopXG5cbmxldCByZWMgZHVtcCA6IHR5cGUgdi4gKHYgLT4gdW5pdCkgLT4gdiB0IC0+IHVuaXQgPSBmdW4gZiBzIC0+XG4gIHByaW50X3N0cmluZyBcIntjb3VudCA9IFwiO1xuICBwcmludF9pbnQgKGNvdW50IHMpO1xuICBwcmludF9zdHJpbmcgXCI7IGRhdGEgPSBcIjtcbiAgZHVtcF9kYXRhIGYgKGRhdGEgcyk7XG4gIHByaW50X3N0cmluZyBcIn1cIjtcbiAgcHJpbnRfbmV3bGluZSAoKVxuYW5kIGR1bXBfZGF0YSA6IHR5cGUgdi4gKHYgLT4gdW5pdCkgLT4gdiBkYXRhIC0+IHVuaXQgPSBmdW4gZiAtPlxuICBmdW5jdGlvblxuICAgIFNlbXB0eSAtPiBwcmludF9zdHJpbmcgXCJTZW1wdHlcIlxuICB8IFNjb25zIChhLCBkKSAtPlxuICAgICAgcHJpbnRfc3RyaW5nIFwiU2NvbnMgKFwiO1xuICAgICAgZiBhO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiLCBcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQ7XG4gICAgICBwcmludF9zdHJpbmcgXCIpXCJcbiAgfCBTYXBwIChkMSwgZDIpIC0+XG4gICAgICBwcmludF9zdHJpbmcgXCJTYXBwIChcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQxO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiLCBcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQyO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiKVwiXG4gIHwgU2xhenkgXyAtPiBwcmludF9zdHJpbmcgXCJTbGF6eVwiXG4gIHwgU2dlbiBfIC0+IHByaW50X3N0cmluZyBcIlNnZW5cIlxuICB8IFNidWZmaW8gXyAtPiBwcmludF9zdHJpbmcgXCJTYnVmZmlvXCJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgIFBpZXJyZSBXZWlzIGFuZCBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTkgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRXh0ZW5zaWJsZSBidWZmZXJzICopXG5cbnR5cGUgdCA9XG4ge211dGFibGUgYnVmZmVyIDogYnl0ZXM7XG4gIG11dGFibGUgcG9zaXRpb24gOiBpbnQ7XG4gIG11dGFibGUgbGVuZ3RoIDogaW50O1xuICBpbml0aWFsX2J1ZmZlciA6IGJ5dGVzfVxuKCogSW52YXJpYW50czogYWxsIHBhcnRzIG9mIHRoZSBjb2RlIHByZXNlcnZlIHRoZSBpbnZhcmlhbnRzIHRoYXQ6XG4gICAtIFswIDw9IGIucG9zaXRpb24gPD0gYi5sZW5ndGhdXG4gICAtIFtiLmxlbmd0aCA9IEJ5dGVzLmxlbmd0aCBiLmJ1ZmZlcl1cblxuICAgTm90ZSBpbiBwYXJ0aWN1bGFyIHRoYXQgW2IucG9zaXRpb24gPSBiLmxlbmd0aF0gaXMgbGVnYWwsXG4gICBpdCBtZWFucyB0aGF0IHRoZSBidWZmZXIgaXMgZnVsbCBhbmQgd2lsbCBoYXZlIHRvIGJlIGV4dGVuZGVkXG4gICBiZWZvcmUgYW55IGZ1cnRoZXIgYWRkaXRpb24uICopXG5cbmxldCBjcmVhdGUgbiA9XG4gbGV0IG4gPSBpZiBuIDwgMSB0aGVuIDEgZWxzZSBuIGluXG4gbGV0IG4gPSBpZiBuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGVsc2UgbiBpblxuIGxldCBzID0gQnl0ZXMuY3JlYXRlIG4gaW5cbiB7YnVmZmVyID0gczsgcG9zaXRpb24gPSAwOyBsZW5ndGggPSBuOyBpbml0aWFsX2J1ZmZlciA9IHN9XG5cbmxldCBjb250ZW50cyBiID0gQnl0ZXMuc3ViX3N0cmluZyBiLmJ1ZmZlciAwIGIucG9zaXRpb25cbmxldCB0b19ieXRlcyBiID0gQnl0ZXMuc3ViIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxuXG5sZXQgc3ViIGIgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBiLnBvc2l0aW9uIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuc3ViXCJcbiAgZWxzZSBCeXRlcy5zdWJfc3RyaW5nIGIuYnVmZmVyIG9mcyBsZW5cblxuXG5sZXQgYmxpdCBzcmMgc3Jjb2ZmIGRzdCBkc3RvZmYgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBzcmNvZmYgPCAwIHx8IHNyY29mZiA+IHNyYy5wb3NpdGlvbiAtIGxlblxuICAgICAgICAgICAgIHx8IGRzdG9mZiA8IDAgfHwgZHN0b2ZmID4gKEJ5dGVzLmxlbmd0aCBkc3QpIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYmxpdFwiXG4gIGVsc2VcbiAgICBCeXRlcy51bnNhZmVfYmxpdCBzcmMuYnVmZmVyIHNyY29mZiBkc3QgZHN0b2ZmIGxlblxuXG5cbmxldCBudGggYiBvZnMgPVxuICBpZiBvZnMgPCAwIHx8IG9mcyA+PSBiLnBvc2l0aW9uIHRoZW5cbiAgIGludmFsaWRfYXJnIFwiQnVmZmVyLm50aFwiXG4gIGVsc2UgQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmZlciBvZnNcblxuXG5sZXQgbGVuZ3RoIGIgPSBiLnBvc2l0aW9uXG5cbmxldCBjbGVhciBiID0gYi5wb3NpdGlvbiA8LSAwXG5cbmxldCByZXNldCBiID1cbiAgYi5wb3NpdGlvbiA8LSAwO1xuICBiLmJ1ZmZlciA8LSBiLmluaXRpYWxfYnVmZmVyO1xuICBiLmxlbmd0aCA8LSBCeXRlcy5sZW5ndGggYi5idWZmZXJcblxuKCogW3Jlc2l6ZSBiIG1vcmVdIGVuc3VyZXMgdGhhdCBbYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5sZW5ndGhdIGhvbGRzXG4gICBieSBkeW5hbWljYWxseSBleHRlbmRpbmcgW2IuYnVmZmVyXSBpZiBuZWNlc3NhcnkgLS0gYW5kIHRodXNcbiAgIGluY3JlYXNpbmcgW2IubGVuZ3RoXS5cblxuICAgSW4gcGFydGljdWxhciwgYWZ0ZXIgW3Jlc2l6ZSBiIG1vcmVdIGlzIGNhbGxlZCwgYSBkaXJlY3QgYWNjZXNzIG9mXG4gICBzaXplIFttb3JlXSBhdCBbYi5wb3NpdGlvbl0gd2lsbCBhbHdheXMgYmUgaW4tYm91bmRzLCBzbyB0aGF0XG4gICAodW5zYWZlX3tnZXQsc2V0fSkgbWF5IGJlIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxuKilcbmxldCByZXNpemUgYiBtb3JlID1cbiAgbGV0IG9sZF9wb3MgPSBiLnBvc2l0aW9uIGluXG4gIGxldCBvbGRfbGVuID0gYi5sZW5ndGggaW5cbiAgbGV0IG5ld19sZW4gPSByZWYgb2xkX2xlbiBpblxuICB3aGlsZSBvbGRfcG9zICsgbW9yZSA+ICFuZXdfbGVuIGRvIG5ld19sZW4gOj0gMiAqICFuZXdfbGVuIGRvbmU7XG4gIGlmICFuZXdfbGVuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gYmVnaW5cbiAgICBpZiBvbGRfcG9zICsgbW9yZSA8PSBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICB0aGVuIG5ld19sZW4gOj0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgZWxzZSBmYWlsd2l0aCBcIkJ1ZmZlci5hZGQ6IGNhbm5vdCBncm93IGJ1ZmZlclwiXG4gIGVuZDtcbiAgbGV0IG5ld19idWZmZXIgPSBCeXRlcy5jcmVhdGUgIW5ld19sZW4gaW5cbiAgKCogUFIjNjE0ODogbGV0J3Mga2VlcCB1c2luZyBbYmxpdF0gcmF0aGVyIHRoYW4gW3Vuc2FmZV9ibGl0XSBpblxuICAgICB0aGlzIHRyaWNreSBmdW5jdGlvbiB0aGF0IGlzIHNsb3cgYW55d2F5LiAqKVxuICBCeXRlcy5ibGl0IGIuYnVmZmVyIDAgbmV3X2J1ZmZlciAwIGIucG9zaXRpb247XG4gIGIuYnVmZmVyIDwtIG5ld19idWZmZXI7XG4gIGIubGVuZ3RoIDwtICFuZXdfbGVuO1xuICBhc3NlcnQgKGIucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoKTtcbiAgYXNzZXJ0IChvbGRfcG9zICsgbW9yZSA8PSBiLmxlbmd0aCk7XG4gICgpXG4gICgqIE5vdGU6IHRoZXJlIGFyZSB2YXJpb3VzIHNpdHVhdGlvbnMgKHByZWVtcHRpdmUgdGhyZWFkcywgc2lnbmFscyBhbmRcbiAgICAgZ2MgZmluYWxpemVycykgd2hlcmUgT0NhbWwgY29kZSBtYXkgYmUgcnVuIGFzeW5jaHJvbm91c2x5OyBpblxuICAgICBwYXJ0aWN1bGFyLCB0aGVyZSBtYXkgYmUgYSByYWNlIHdpdGggYW5vdGhlciB1c2VyIG9mIFtiXSwgY2hhbmdpbmdcbiAgICAgaXRzIG11dGFibGUgZmllbGRzIGluIHRoZSBtaWRkbGUgb2YgdGhlIFtyZXNpemVdIGNhbGwuIFRoZSBCdWZmZXJcbiAgICAgbW9kdWxlIGRvZXMgbm90IHByb3ZpZGUgYW55IGNvcnJlY3RuZXNzIGd1YXJhbnRlZSBpZiB0aGF0IGhhcHBlbnMsXG4gICAgIGJ1dCB3ZSBtdXN0IHN0aWxsIGVuc3VyZSB0aGF0IHRoZSBkYXRhc3RydWN0dXJlIGludmFyaWFudHMgaG9sZCBmb3JcbiAgICAgbWVtb3J5LXNhZmV0eSAtLSBhcyB3ZSBwbGFuIHRvIHVzZSBbdW5zYWZlX3tnZXQsc2V0fV0uXG5cbiAgICAgVGhlcmUgYXJlIHR3byBwb3RlbnRpYWwgYWxsb2NhdGlvbiBwb2ludHMgaW4gdGhpcyBmdW5jdGlvbixcbiAgICAgW3JlZl0gYW5kIFtCeXRlcy5jcmVhdGVdLCBidXQgYWxsIHJlYWRzIGFuZCB3cml0ZXMgdG8gdGhlIGZpZWxkc1xuICAgICBvZiBbYl0gaGFwcGVuIGJlZm9yZSBib3RoIG9mIHRoZW0gb3IgYWZ0ZXIgYm90aCBvZiB0aGVtLlxuXG4gICAgIFdlIHRoZXJlZm9yZSBhc3N1bWUgdGhhdCBbYi5wb3NpdGlvbl0gbWF5IGNoYW5nZSBhdCB0aGVzZSBhbGxvY2F0aW9ucyxcbiAgICAgYW5kIGNoZWNrIHRoYXQgdGhlIFtiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aF0gcG9zdGNvbmRpdGlvblxuICAgICBob2xkcyBmb3IgYm90aCB2YWx1ZXMgb2YgW2IucG9zaXRpb25dLCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGZ1bmN0aW9uXG4gICAgIGlzIGNhbGxlZC4gTW9yZSBwcmVjaXNlbHksIHRoZSBmb2xsb3dpbmcgaW52YXJpYW50cyBtdXN0IGhvbGQgaWYgdGhlXG4gICAgIGZ1bmN0aW9uIHJldHVybnMgY29ycmVjdGx5LCBpbiBhZGRpdGlvbiB0byB0aGUgdXN1YWwgYnVmZmVyIGludmFyaWFudHM6XG4gICAgIC0gW29sZChiLnBvc2l0aW9uKSArIG1vcmUgPD0gbmV3KGIubGVuZ3RoKV1cbiAgICAgLSBbbmV3KGIucG9zaXRpb24pICsgbW9yZSA8PSBuZXcoYi5sZW5ndGgpXVxuICAgICAtIFtvbGQoYi5sZW5ndGgpIDw9IG5ldyhiLmxlbmd0aCldXG5cbiAgICAgTm90ZTogW2IucG9zaXRpb24gKyBtb3JlIDw9IG9sZChiLmxlbmd0aCldIGRvZXMgKm5vdCpcbiAgICAgaG9sZCBpbiBnZW5lcmFsLCBhcyBpdCBpcyBwcmVjaXNlbHkgdGhlIGNhc2Ugd2hlcmUgeW91IG5lZWRcbiAgICAgdG8gY2FsbCBbcmVzaXplXSB0byBpbmNyZWFzZSBbYi5sZW5ndGhdLlxuXG4gICAgIE5vdGU6IFthc3NlcnRdIGFib3ZlIGRvZXMgbm90IG1lYW4gdGhhdCB3ZSBrbm93IHRoZSBjb25kaXRpb25zXG4gICAgIGFsd2F5cyBob2xkLCBidXQgdGhhdCB0aGUgZnVuY3Rpb24gbWF5IHJldHVybiBjb3JyZWN0bHlcbiAgICAgb25seSBpZiB0aGV5IGhvbGQuXG5cbiAgICAgTm90ZTogdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBkb2VzIG5vdCBuZWVkXG4gICAgIHRvIGJlIGNoZWNrZWQgd2l0aCB0aGlzIGxldmVsIG9mIHNjcnV0aW55LCBnaXZlbiB0aGF0IHRoZXlcbiAgICAgcmVhZC93cml0ZSB0aGUgYnVmZmVyIGltbWVkaWF0ZWx5IGFmdGVyIGNoZWNraW5nIHRoYXRcbiAgICAgW2IucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoXSBob2xkIG9yIGNhbGxpbmcgW3Jlc2l6ZV0uXG4gICopXG5cbmxldCBhZGRfY2hhciBiIGMgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiAxO1xuICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIHBvcyBjO1xuICBiLnBvc2l0aW9uIDwtIHBvcyArIDFcblxubGV0IHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heCA9IDRcbmxldCB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4ID0gNFxuXG5sZXQgcmVjIGFkZF91dGZfOF91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfOF9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl84X3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heDsgYWRkX3V0Zl84X3VjaGFyIGIgdSlcbiAgZWxzZSAoYi5wb3NpdGlvbiA8LSBwb3MgKyBuKVxuXG5sZXQgcmVjIGFkZF91dGZfMTZiZV91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4O1xuICBsZXQgbiA9IEJ5dGVzLnNldF91dGZfMTZiZV91Y2hhciBiLmJ1ZmZlciBwb3MgdSBpblxuICBpZiBuID0gMFxuICB0aGVuIChyZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4OyBhZGRfdXRmXzE2YmVfdWNoYXIgYiB1KVxuICBlbHNlIChiLnBvc2l0aW9uIDwtIHBvcyArIG4pXG5cbmxldCByZWMgYWRkX3V0Zl8xNmxlX3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl8xNmxlX3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7IGFkZF91dGZfMTZsZV91Y2hhciBiIHUpXG4gIGVsc2UgKGIucG9zaXRpb24gPC0gcG9zICsgbilcblxubGV0IGFkZF9zdWJzdHJpbmcgYiBzIG9mZnNldCBsZW4gPVxuICBpZiBvZmZzZXQgPCAwIHx8IGxlbiA8IDAgfHwgb2Zmc2V0ID4gU3RyaW5nLmxlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYWRkX3N1YnN0cmluZy9hZGRfc3ViYnl0ZXNcIjtcbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIG9mZnNldCBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbjtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9zdWJieXRlcyBiIHMgb2Zmc2V0IGxlbiA9XG4gIGFkZF9zdWJzdHJpbmcgYiAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBzKSBvZmZzZXQgbGVuXG5cbmxldCBhZGRfc3RyaW5nIGIgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIDAgYi5idWZmZXIgYi5wb3NpdGlvbiBsZW47XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfYnl0ZXMgYiBzID0gYWRkX3N0cmluZyBiIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHMpXG5cbmxldCBhZGRfYnVmZmVyIGIgYnMgPVxuICBhZGRfc3ViYnl0ZXMgYiBicy5idWZmZXIgMCBicy5wb3NpdGlvblxuXG4oKiB0aGlzIChwcml2YXRlKSBmdW5jdGlvbiBjb3VsZCBtb3ZlIGludG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgKilcbmxldCByZWFsbHlfaW5wdXRfdXBfdG8gaWMgYnVmIG9mcyBsZW4gPVxuICBsZXQgcmVjIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQgfm9mcyB+dG9fcmVhZCA9XG4gICAgaWYgdG9fcmVhZCA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGlucHV0IGljIGJ1ZiBvZnMgdG9fcmVhZCBpblxuICAgICAgaWYgciA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGFscmVhZHlfcmVhZCA9IGFscmVhZHlfcmVhZCArIHIgaW5cbiAgICAgICAgbGV0IG9mcyA9IG9mcyArIHIgaW5cbiAgICAgICAgbGV0IHRvX3JlYWQgPSB0b19yZWFkIC0gciBpblxuICAgICAgICBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkIH5vZnMgfnRvX3JlYWRcbiAgICAgIGVuZFxuICAgIGVuZFxuICBpbiBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkOjAgfm9mcyB+dG9fcmVhZDpsZW5cblxuXG5sZXQgdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuID1cbiAgaWYgYi5wb3NpdGlvbiArIGxlbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgbGVuO1xuICBsZXQgbiA9IHJlYWxseV9pbnB1dF91cF90byBpYyBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbiBpblxuICAoKiBUaGUgYXNzZXJ0aW9uIGJlbG93IG1heSBmYWlsIGluIHdlaXJkIHNjZW5hcmlvIHdoZXJlXG4gICAgIHRocmVhZGVkL2ZpbmFsaXplciBjb2RlLCBydW4gYXN5bmNocm9ub3VzbHkgZHVyaW5nIHRoZVxuICAgICBbcmVhbGx5X2lucHV0X3VwX3RvXSBjYWxsLCByYWNlcyBvbiB0aGUgYnVmZmVyOyB3ZSBkb24ndCBlbnN1cmVcbiAgICAgY29ycmVjdG5lc3MgaW4gdGhpcyBjYXNlLCBidXQgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgaW52YXJpYW50cyBmb3JcbiAgICAgbWVtb3J5LXNhZmV0eSAoc2VlIGRpc2N1c3Npb24gb2YgW3Jlc2l6ZV0pLiAqKVxuICBhc3NlcnQgKGIucG9zaXRpb24gKyBuIDw9IGIubGVuZ3RoKTtcbiAgYi5wb3NpdGlvbiA8LSBiLnBvc2l0aW9uICsgbjtcbiAgblxuXG5sZXQgYWRkX2NoYW5uZWwgYiBpYyBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IGxlbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuICAgKCogUFIjNTAwNCAqKVxuICAgIGludmFsaWRfYXJnIFwiQnVmZmVyLmFkZF9jaGFubmVsXCI7XG4gIGxldCBuID0gdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuIGluXG4gICgqIEl0IGlzIGludGVudGlvbmFsIHRoYXQgYSBjb25zdW1lciBjYXRjaGluZyBFbmRfb2ZfZmlsZVxuICAgICB3aWxsIHNlZSB0aGUgZGF0YSB3cml0dGVuIChzZWUgIzY3MTksICM3MTM2KS4gKilcbiAgaWYgbiA8IGxlbiB0aGVuIHJhaXNlIEVuZF9vZl9maWxlO1xuICAoKVxuXG5sZXQgb3V0cHV0X2J1ZmZlciBvYyBiID1cbiAgb3V0cHV0IG9jIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxuXG5sZXQgY2xvc2luZyA9IGZ1bmN0aW9uXG4gIHwgJygnIC0+ICcpJ1xuICB8ICd7JyAtPiAnfSdcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4oKiBvcGVuaW5nIGFuZCBjbG9zaW5nOiBvcGVuIGFuZCBjbG9zZSBjaGFyYWN0ZXJzLCB0eXBpY2FsbHkgKCBhbmQgKVxuICAgazogYmFsYW5jZSBvZiBvcGVuaW5nIGFuZCBjbG9zaW5nIGNoYXJzXG4gICBzOiB0aGUgc3RyaW5nIHdoZXJlIHdlIGFyZSBzZWFyY2hpbmdcbiAgIHN0YXJ0OiB0aGUgaW5kZXggd2hlcmUgd2Ugc3RhcnQgdGhlIHNlYXJjaC4gKilcbmxldCBhZHZhbmNlX3RvX2Nsb3Npbmcgb3BlbmluZyBjbG9zaW5nIGsgcyBzdGFydCA9XG4gIGxldCByZWMgYWR2YW5jZSBrIGkgbGltID1cbiAgICBpZiBpID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gICAgaWYgcy5baV0gPSBvcGVuaW5nIHRoZW4gYWR2YW5jZSAoayArIDEpIChpICsgMSkgbGltIGVsc2VcbiAgICBpZiBzLltpXSA9IGNsb3NpbmcgdGhlblxuICAgICAgaWYgayA9IDAgdGhlbiBpIGVsc2UgYWR2YW5jZSAoayAtIDEpIChpICsgMSkgbGltXG4gICAgZWxzZSBhZHZhbmNlIGsgKGkgKyAxKSBsaW0gaW5cbiAgYWR2YW5jZSBrIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMpXG5cbmxldCBhZHZhbmNlX3RvX25vbl9hbHBoYSBzIHN0YXJ0ID1cbiAgbGV0IHJlYyBhZHZhbmNlIGkgbGltID1cbiAgICBpZiBpID49IGxpbSB0aGVuIGxpbSBlbHNlXG4gICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgIHwgJ2EnIC4uICd6JyB8ICdBJyAuLiAnWicgfCAnMCcgLi4gJzknIHwgJ18nIC0+IGFkdmFuY2UgKGkgKyAxKSBsaW1cbiAgICB8IF8gLT4gaSBpblxuICBhZHZhbmNlIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMpXG5cbigqIFdlIGFyZSBqdXN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYW4gaWRlbnQgaW4gcywgc3RhcnRpbmcgYXQgc3RhcnQuICopXG5sZXQgZmluZF9pZGVudCBzIHN0YXJ0IGxpbSA9XG4gIGlmIHN0YXJ0ID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIG1hdGNoIHMuW3N0YXJ0XSB3aXRoXG4gICgqIFBhcmVudGhlc2l6ZWQgaWRlbnQgPyAqKVxuICB8ICcoJyB8ICd7JyBhcyBjIC0+XG4gICAgIGxldCBuZXdfc3RhcnQgPSBzdGFydCArIDEgaW5cbiAgICAgbGV0IHN0b3AgPSBhZHZhbmNlX3RvX2Nsb3NpbmcgYyAoY2xvc2luZyBjKSAwIHMgbmV3X3N0YXJ0IGluXG4gICAgIFN0cmluZy5zdWIgcyBuZXdfc3RhcnQgKHN0b3AgLSBzdGFydCAtIDEpLCBzdG9wICsgMVxuICAoKiBSZWd1bGFyIGlkZW50ICopXG4gIHwgXyAtPlxuICAgICBsZXQgc3RvcCA9IGFkdmFuY2VfdG9fbm9uX2FscGhhIHMgKHN0YXJ0ICsgMSkgaW5cbiAgICAgU3RyaW5nLnN1YiBzIHN0YXJ0IChzdG9wIC0gc3RhcnQpLCBzdG9wXG5cbigqIFN1YnN0aXR1dGUgJGlkZW50LCAkKGlkZW50KSwgb3IgJHtpZGVudH0gaW4gcyxcbiAgICBhY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9uIG1hcHBpbmcgZi4gKilcbmxldCBhZGRfc3Vic3RpdHV0ZSBiIGYgcyA9XG4gIGxldCBsaW0gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBzdWJzdCBwcmV2aW91cyBpID1cbiAgICBpZiBpIDwgbGltIHRoZW4gYmVnaW5cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJyQnIGFzIGN1cnJlbnQgd2hlbiBwcmV2aW91cyA9ICdcXFxcJyAtPlxuICAgICAgICAgYWRkX2NoYXIgYiBjdXJyZW50O1xuICAgICAgICAgc3Vic3QgJyAnIChpICsgMSlcbiAgICAgIHwgJyQnIC0+XG4gICAgICAgICBsZXQgaiA9IGkgKyAxIGluXG4gICAgICAgICBsZXQgaWRlbnQsIG5leHRfaSA9IGZpbmRfaWRlbnQgcyBqIGxpbSBpblxuICAgICAgICAgYWRkX3N0cmluZyBiIChmIGlkZW50KTtcbiAgICAgICAgIHN1YnN0ICcgJyBuZXh0X2lcbiAgICAgIHwgY3VycmVudCB3aGVuIHByZXZpb3VzID09ICdcXFxcJyAtPlxuICAgICAgICAgYWRkX2NoYXIgYiAnXFxcXCc7XG4gICAgICAgICBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCAnICcgKGkgKyAxKVxuICAgICAgfCAnXFxcXCcgYXMgY3VycmVudCAtPlxuICAgICAgICAgc3Vic3QgY3VycmVudCAoaSArIDEpXG4gICAgICB8IGN1cnJlbnQgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgY3VycmVudDtcbiAgICAgICAgIHN1YnN0IGN1cnJlbnQgKGkgKyAxKVxuICAgIGVuZCBlbHNlXG4gICAgaWYgcHJldmlvdXMgPSAnXFxcXCcgdGhlbiBhZGRfY2hhciBiIHByZXZpb3VzIGluXG4gIHN1YnN0ICcgJyAwXG5cbmxldCB0cnVuY2F0ZSBiIGxlbiA9XG4gICAgaWYgbGVuIDwgMCB8fCBsZW4gPiBsZW5ndGggYiB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci50cnVuY2F0ZVwiXG4gICAgZWxzZVxuICAgICAgYi5wb3NpdGlvbiA8LSBsZW5cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBiID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgKCogTm90ZSB0aGF0IGIucG9zaXRpb24gaXMgbm90IGEgY29uc3RhbnQgYW5kIGNhbm5vdCBiZSBsaWZ0ZWQgb3V0IG9mIGF1eCAqKVxuICAgIGlmIGkgPj0gYi5wb3NpdGlvbiB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmZXIgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgYiA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICgqIE5vdGUgdGhhdCBiLnBvc2l0aW9uIGlzIG5vdCBhIGNvbnN0YW50IGFuZCBjYW5ub3QgYmUgbGlmdGVkIG91dCBvZiBhdXggKilcbiAgICBpZiBpID49IGIucG9zaXRpb24gdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZmVyIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgYWRkX3NlcSBiIHNlcSA9IFNlcS5pdGVyIChhZGRfY2hhciBiKSBzZXFcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGIgPSBjcmVhdGUgMzIgaW5cbiAgYWRkX3NlcSBiIGk7XG4gIGJcblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDE2IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQxNnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQzMiA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQzMnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ2NCA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NHVcIlxuZXh0ZXJuYWwgc3dhcDE2IDogaW50IC0+IGludCA9IFwiJWJzd2FwMTZcIlxuZXh0ZXJuYWwgc3dhcDMyIDogaW50MzIgLT4gaW50MzIgPSBcIiVic3dhcF9pbnQzMlwiXG5leHRlcm5hbCBzd2FwNjQgOiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWJzd2FwX2ludDY0XCJcblxuXG5sZXQgYWRkX2ludDggYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyAxIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMTtcbiAgdW5zYWZlX3NldF9pbnQ4IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDIgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiAyO1xuICB1bnNhZmVfc2V0X2ludDE2IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQzMl9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDQgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA0O1xuICB1bnNhZmVfc2V0X2ludDMyIGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQ2NF9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDggaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA4O1xuICB1bnNhZmVfc2V0X2ludDY0IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9sZSBiIHggPVxuICBhZGRfaW50MTZfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50MTZfYmUgYiB4ID1cbiAgYWRkX2ludDE2X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXAxNiB4KVxuXG5sZXQgYWRkX2ludDMyX2xlIGIgeCA9XG4gIGFkZF9pbnQzMl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQzMl9iZSBiIHggPVxuICBhZGRfaW50MzJfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDMyIHgpXG5cbmxldCBhZGRfaW50NjRfbGUgYiB4ID1cbiAgYWRkX2ludDY0X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDY0X2JlIGIgeCA9XG4gIGFkZF9pbnQ2NF9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwNjQgeClcblxubGV0IGFkZF91aW50OCA9IGFkZF9pbnQ4XG5sZXQgYWRkX3VpbnQxNl9uZSA9IGFkZF9pbnQxNl9uZVxubGV0IGFkZF91aW50MTZfbGUgPSBhZGRfaW50MTZfbGVcbmxldCBhZGRfdWludDE2X2JlID0gYWRkX2ludDE2X2JlXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVub2l0IFZhdWdvbiwgRU5TVEEgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICgqIFRvb2xzIHRvIG1hbmlwdWxhdGUgc2Nhbm5pbmcgc2V0IG9mIGNoYXJzIChzZWUgJVsuLi5dKSAqKVxuXG50eXBlIG11dGFibGVfY2hhcl9zZXQgPSBieXRlc1xuXG4oKiBDcmVhdGUgYSBmcmVzaCwgZW1wdHksIG11dGFibGUgY2hhciBzZXQuICopXG5sZXQgY3JlYXRlX2NoYXJfc2V0ICgpID0gQnl0ZXMubWFrZSAzMiAnXFwwMDAnXG5cbigqIEFkZCBhIGNoYXIgaW4gYSBtdXRhYmxlIGNoYXIgc2V0LiAqKVxubGV0IGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCBjID1cbiAgbGV0IGluZCA9IGludF9vZl9jaGFyIGMgaW5cbiAgbGV0IHN0cl9pbmQgPSBpbmQgbHNyIDMgYW5kIG1hc2sgPSAxIGxzbCAoaW5kIGxhbmQgMGIxMTEpIGluXG4gIEJ5dGVzLnNldCBjaGFyX3NldCBzdHJfaW5kXG4gICAgKGNoYXJfb2ZfaW50IChpbnRfb2ZfY2hhciAoQnl0ZXMuZ2V0IGNoYXJfc2V0IHN0cl9pbmQpIGxvciBtYXNrKSlcblxubGV0IGZyZWV6ZV9jaGFyX3NldCBjaGFyX3NldCA9XG4gIEJ5dGVzLnRvX3N0cmluZyBjaGFyX3NldFxuXG4oKiBDb21wdXRlIHRoZSBjb21wbGVtZW50IG9mIGEgY2hhciBzZXQuICopXG5sZXQgcmV2X2NoYXJfc2V0IGNoYXJfc2V0ID1cbiAgbGV0IGNoYXJfc2V0JyA9IGNyZWF0ZV9jaGFyX3NldCAoKSBpblxuICBmb3IgaSA9IDAgdG8gMzEgZG9cbiAgICBCeXRlcy5zZXQgY2hhcl9zZXQnIGlcbiAgICAgIChjaGFyX29mX2ludCAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgaSkgbHhvciAweEZGKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgY2hhcl9zZXQnXG5cbigqIFJldHVybiB0cnVlIGlmIGEgYGMnIGlzIGluIGBjaGFyX3NldCcuICopXG5sZXQgaXNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYyA9XG4gIGxldCBpbmQgPSBpbnRfb2ZfY2hhciBjIGluXG4gIGxldCBzdHJfaW5kID0gaW5kIGxzciAzIGFuZCBtYXNrID0gMSBsc2wgKGluZCBsYW5kIDBiMTExKSBpblxuICAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgc3RyX2luZCkgbGFuZCBtYXNrKSA8PiAwXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAoKiBJZ25vcmVkIHBhcmFtIGNvbnZlcnNpb24gKilcblxuKCogR0FEVCB1c2VkIHRvIGFic3RyYWN0IGFuIGV4aXN0ZW50aWFsIHR5cGUgcGFyYW1ldGVyLiAqKVxuKCogU2VlIHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdC4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmIgPSBQYXJhbV9mb3JtYXRfRUJCIDpcbiAgICAoJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmJcblxuKCogQ29tcHV0ZSBhIHBhZGRpbmcgYXNzb2NpYXRlZCB0byBhIHBhZF9vcHRpb24gKHNlZSBcIiVfNDJkXCIpLiAqKVxubGV0IHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5vX3BhZGRpbmdcbiAgfCBTb21lIHdpZHRoIC0+IExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpXG5cbigqIENvbXB1dGUgYSBwcmVjaXNpb24gYXNzb2NpYXRlZCB0byBhIHByZWNfb3B0aW9uIChzZWUgXCIlXy40MmZcIikuICopXG5sZXQgcHJlY19vZl9wcmVjX29wdCBwcmVjX29wdCA9IG1hdGNoIHByZWNfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5vX3ByZWNpc2lvblxuICB8IFNvbWUgbmRlYyAtPiBMaXRfcHJlY2lzaW9uIG5kZWNcblxuKCogVHVybiBhbiBpZ25vcmVkIHBhcmFtIGludG8gaXRzIGVxdWl2YWxlbnQgbm90LWlnbm9yZWQgZm9ybWF0IG5vZGUuICopXG4oKiBVc2VkIGZvciBmb3JtYXQgcHJldHR5LXByaW50aW5nIGFuZCBTY2FuZi4gKilcbmxldCBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQgOiB0eXBlIGEgYiBjIGQgZSBmIHggeSAuXG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT4gKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhcmFtX2Zvcm1hdF9lYmIgPVxuZnVuIGlnbiBmbXQgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDaGFyIGZtdClcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKENhbWxfY2hhciBmbXQpXG4gIHwgSWdub3JlZF9zdHJpbmcgcGFkX29wdCAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFN0cmluZyAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIHBhZF9vcHQgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDYW1sX3N0cmluZyAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2ludCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoSW50IChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfaW50MzIgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChJbnQzMiAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKE5hdGl2ZWludCAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX2ludDY0IChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoSW50NjQgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9mbG9hdCAocGFkX29wdCwgcHJlY19vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEZsb2F0ICgoRmxvYXRfZmxhZ18sIEZsb2F0X2YpLFxuICAgICAgICAgICAgICBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBwcmVjX29mX3ByZWNfb3B0IHByZWNfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfYm9vbCBwYWRfb3B0IC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQm9vbCAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCBmbXQpKVxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgZm10KSlcbiAgfCBJZ25vcmVkX3JlYWRlciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFJlYWRlciBmbXQpXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdCkpXG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXQpKVxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX25leHRfY2hhciBmbXQpXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFR5cGVzICopXG5cbnR5cGUgKCdiLCAnYykgYWNjX2Zvcm1hdHRpbmdfZ2VuID1cbiAgfCBBY2Nfb3Blbl90YWcgb2YgKCdiLCAnYykgYWNjXG4gIHwgQWNjX29wZW5fYm94IG9mICgnYiwgJ2MpIGFjY1xuXG4oKiBSZXZlcnNlZCBsaXN0IG9mIHByaW50aW5nIGF0b21zLiAqKVxuKCogVXNlZCB0byBhY2N1bXVsYXRlIHByaW50ZiBhcmd1bWVudHMuICopXG5hbmQgKCdiLCAnYykgYWNjID1cbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgb2YgKCdiLCAnYykgYWNjICogZm9ybWF0dGluZ19saXRcbiAgICAgICgqIFNwZWNpYWwgZm10dGluZyAoYm94KSAqKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiBvZiAoJ2IsICdjKSBhY2MgKiAoJ2IsICdjKSBhY2NfZm9ybWF0dGluZ19nZW5cbiAgICAgICgqIFNwZWNpYWwgZm10dGluZyAoYm94KSAqKVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmcgICAgICgqIExpdGVyYWwgc3RyaW5nICopXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAgIG9mICgnYiwgJ2MpIGFjYyAqIGNoYXIgICAgICAgKCogTGl0ZXJhbCBjaGFyICopXG4gIHwgQWNjX2RhdGFfc3RyaW5nICAgIG9mICgnYiwgJ2MpIGFjYyAqIHN0cmluZyAgICAgKCogR2VuZXJhdGVkIHN0cmluZyAqKVxuICB8IEFjY19kYXRhX2NoYXIgICAgICBvZiAoJ2IsICdjKSBhY2MgKiBjaGFyICAgICAgICgqIEdlbmVyYXRlZCBjaGFyICopXG4gIHwgQWNjX2RlbGF5ICAgICAgICAgIG9mICgnYiwgJ2MpIGFjYyAqICgnYiAtPiAnYylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIERlbGF5ZWQgcHJpbnRpbmcgKCVhLCAldCkgKilcbiAgfCBBY2NfZmx1c2ggICAgICAgICAgb2YgKCdiLCAnYykgYWNjICAgICAgICAgICAgICAoKiBGbHVzaCAqKVxuICB8IEFjY19pbnZhbGlkX2FyZyAgICBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmdcbiAgICAgICgqIFJhaXNlIEludmFsaWRfYXJndW1lbnQgbXNnICopXG4gIHwgRW5kX29mX2FjY1xuXG4oKiBMaXN0IG9mIGhldGVyb2dlbmVvdXMgdmFsdWVzLiAqKVxuKCogVXNlZCB0byBhY2N1bXVsYXRlIHNjYW5mIGNhbGxiYWNrIGFyZ3VtZW50cy4gKilcbnR5cGUgKCdhLCAnYikgaGV0ZXJfbGlzdCA9XG4gIHwgQ29ucyA6ICdjICogKCdhLCAnYikgaGV0ZXJfbGlzdCAtPiAoJ2MgLT4gJ2EsICdiKSBoZXRlcl9saXN0XG4gIHwgTmlsIDogKCdiLCAnYikgaGV0ZXJfbGlzdFxuXG4oKiBFeGlzdGVudGlhbCBCbGFjayBCb3hlcy4gKilcbigqIFVzZWQgdG8gYWJzdHJhY3Qgc29tZSBleGlzdGVudGlhbCB0eXBlIHBhcmFtZXRlcnMuICopXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcgYW5kIGFuIGZtdHR5LiAqKVxuKCogU2VlIHRoZSB0eXBlX3BhZGRpbmcgZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRkaW5nX2ZtdHR5X2ViYiA9IFBhZGRpbmdfZm10dHlfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkZGluZ19mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGFuIGZtdHR5LiAqKVxuKCogU2VlIHRoZSB0eXBlX3BhZHByZWMgZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRwcmVjX2ZtdHR5X2ViYiA9IFBhZHByZWNfZm10dHlfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ3opIHByZWNpc2lvbiAqICgneiwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkcHJlY19mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZyBhbmQgYW4gZm10LiAqKVxuKCogU2VlIG1ha2VfcGFkZGluZ19mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2UsICdmKSBwYWRkaW5nX2ZtdF9lYmIgPSBQYWRkaW5nX2ZtdF9FQkIgOlxuICAgICAoXywgJ3ggLT4gJ2EpIHBhZGRpbmcgKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZSwgJ2YpIHBhZGRpbmdfZm10X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwcmVjaXNpb24gYW5kIGFuIGZtdC4gKilcbigqIFNlZSBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2UsICdmKSBwcmVjaXNpb25fZm10X2ViYiA9IFByZWNpc2lvbl9mbXRfRUJCIDpcbiAgICAgKF8sICd4IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZSwgJ2YpIHByZWNpc2lvbl9mbXRfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhbiBmbXQuICopXG4oKiBTZWUgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgYW5kIHBhcnNlX2Zvcm1hdCBmdW5jdGlvbnMuICopXG50eXBlICgncCwgJ2IsICdjLCAnZSwgJ2YpIHBhZHByZWNfZm10X2ViYiA9IFBhZHByZWNfZm10X0VCQiA6XG4gICAgICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksICdwIC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgncCwgJ2IsICdjLCAnZSwgJ2YpIHBhZHByZWNfZm10X2ViYlxuXG4oKiBBYnN0cmFjdCB0aGUgJ2EgYW5kICdkIHBhcmFtZXRlcnMgb2YgYW4gZm10LiAqKVxuKCogT3V0cHV0IHR5cGUgb2YgdGhlIGZvcm1hdCBwYXJzaW5nIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2IsICdjLCAnZSwgJ2YpIGZtdF9lYmIgPSBGbXRfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ2IsICdjLCAnZSwgJ2YpIGZtdF9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGFuIGZtdHR5IGFuZCBhbiBmbXQuICopXG4oKiBTZWUgdGhlIHR5cGVfZm9ybWF0X2dlbiBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdF9mbXR0eV9lYmIgPSBGbXRfZm10dHlfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGZtdCAqXG4gICAgICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10X2ZtdHR5X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYW4gZm10dHkgYW5kIGFuIGZtdC4gKilcbigqIFNlZSB0aGUgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9mbXRfZWJiID0gRm10dHlfZm10X0VCQiA6XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBmbXR0eSAqXG4gICAgICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXRfZm10dHlfZWJiIC0+XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9mbXRfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBmbXR0eSB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgZm9ybWF0IHR5cGVzLiAqKVxudHlwZSBmbXR0eV9lYmIgPSBGbXR0eV9FQkIgOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT4gZm10dHlfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBwYWRkaW5nIHR5cGUgcGFyYW1ldGVycy4gKilcbigqIFVzZWQgdG8gY29tcGFyZSBwYWRkaW5ncy4gKilcbnR5cGUgcGFkZGluZ19lYmIgPSBQYWRkaW5nX0VCQiA6ICgnYSwgJ2IpIHBhZGRpbmcgLT4gcGFkZGluZ19lYmJcblxuKCogQWJzdHJhY3QgYWxsIHByZWNpc2lvbiB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgcHJlY2lzaW9ucy4gKilcbnR5cGUgcHJlY2lzaW9uX2ViYiA9IFByZWNpc2lvbl9FQkIgOiAoJ2EsICdiKSBwcmVjaXNpb24gLT4gcHJlY2lzaW9uX2ViYlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIENvbnN0YW50cyAqKVxuXG4oKiBEZWZhdWx0IHByZWNpc2lvbiBmb3IgZmxvYXQgcHJpbnRpbmcuICopXG5sZXQgZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYgPVxuICBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HIHwgRmxvYXRfaCB8IEZsb2F0X0hcbiAgfCBGbG9hdF9DRiAtPiAtNlxuICAoKiBGb3IgJWggJUggYW5kICUjRiBmb3JtYXRzLCBhIG5lZ2F0aXZlIHByZWNpc2lvbiBtZWFucyBcImFzIG1hbnkgZGlnaXRzIGFzXG4gICAgIG5lY2Vzc2FyeVwiLiAgRm9yIHRoZSBvdGhlciBGUCBmb3JtYXRzLCB3ZSB0YWtlIHRoZSBhYnNvbHV0ZSB2YWx1ZVxuICAgICBvZiB0aGUgcHJlY2lzaW9uLCBoZW5jZSA2IGRpZ2l0cyBieSBkZWZhdWx0LiAqKVxuICB8IEZsb2F0X0YgLT4gMTJcbiAgKCogRGVmYXVsdCBwcmVjaXNpb24gZm9yIE9DYW1sIGZsb2F0IHByaW50aW5nICglRikuICopXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRXh0ZXJuYWxzICopXG5cbmV4dGVybmFsIGZvcm1hdF9mbG9hdDogc3RyaW5nIC0+IGZsb2F0IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9mb3JtYXRfZmxvYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5leHRlcm5hbCBmb3JtYXRfaW50MzI6IHN0cmluZyAtPiBpbnQzMiAtPiBzdHJpbmdcbiAgPSBcImNhbWxfaW50MzJfZm9ybWF0XCJcbmV4dGVybmFsIGZvcm1hdF9uYXRpdmVpbnQ6IHN0cmluZyAtPiBuYXRpdmVpbnQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX25hdGl2ZWludF9mb3JtYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDY0OiBzdHJpbmcgLT4gaW50NjQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2ludDY0X2Zvcm1hdFwiXG5leHRlcm5hbCBoZXhzdHJpbmdfb2ZfZmxvYXQ6IGZsb2F0IC0+IGludCAtPiBjaGFyIC0+IHN0cmluZ1xuICA9IFwiY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXRcIlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgKCogVG9vbHMgdG8gcHJldHR5LXByaW50IGZvcm1hdHMgKilcblxuKCogVHlwZSBvZiBleHRlbnNpYmxlIGNoYXJhY3RlciBidWZmZXJzLiAqKVxudHlwZSBidWZmZXIgPSB7XG4gIG11dGFibGUgaW5kIDogaW50O1xuICBtdXRhYmxlIGJ5dGVzIDogYnl0ZXM7XG59XG5cbigqIENyZWF0ZSBhIGZyZXNoIGJ1ZmZlci4gKilcbmxldCBidWZmZXJfY3JlYXRlIGluaXRfc2l6ZSA9IHsgaW5kID0gMDsgYnl0ZXMgPSBCeXRlcy5jcmVhdGUgaW5pdF9zaXplIH1cblxuKCogQ2hlY2sgc2l6ZSBvZiB0aGUgYnVmZmVyIGFuZCBncm93IGl0IGlmIG5lZWRlZC4gKilcbmxldCBidWZmZXJfY2hlY2tfc2l6ZSBidWYgb3ZlcmhlYWQgPVxuICBsZXQgbGVuID0gQnl0ZXMubGVuZ3RoIGJ1Zi5ieXRlcyBpblxuICBsZXQgbWluX2xlbiA9IGJ1Zi5pbmQgKyBvdmVyaGVhZCBpblxuICBpZiBtaW5fbGVuID4gbGVuIHRoZW4gKFxuICAgIGxldCBuZXdfbGVuID0gSW50Lm1heCAobGVuICogMikgbWluX2xlbiBpblxuICAgIGxldCBuZXdfc3RyID0gQnl0ZXMuY3JlYXRlIG5ld19sZW4gaW5cbiAgICBCeXRlcy5ibGl0IGJ1Zi5ieXRlcyAwIG5ld19zdHIgMCBsZW47XG4gICAgYnVmLmJ5dGVzIDwtIG5ld19zdHI7XG4gIClcblxuKCogQWRkIHRoZSBjaGFyYWN0ZXIgYGMnIHRvIHRoZSBidWZmZXIgYGJ1ZicuICopXG5sZXQgYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjID1cbiAgYnVmZmVyX2NoZWNrX3NpemUgYnVmIDE7XG4gIEJ5dGVzLnNldCBidWYuYnl0ZXMgYnVmLmluZCBjO1xuICBidWYuaW5kIDwtIGJ1Zi5pbmQgKyAxXG5cbigqIEFkZCB0aGUgc3RyaW5nIGBzJyB0byB0aGUgYnVmZmVyIGBidWYnLiAqKVxubGV0IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBzID1cbiAgbGV0IHN0cl9sZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgYnVmZmVyX2NoZWNrX3NpemUgYnVmIHN0cl9sZW47XG4gIFN0cmluZy5ibGl0IHMgMCBidWYuYnl0ZXMgYnVmLmluZCBzdHJfbGVuO1xuICBidWYuaW5kIDwtIGJ1Zi5pbmQgKyBzdHJfbGVuXG5cbigqIEdldCB0aGUgY29udGVudCBvZiB0aGUgYnVmZmVyLiAqKVxubGV0IGJ1ZmZlcl9jb250ZW50cyBidWYgPVxuICBCeXRlcy5zdWJfc3RyaW5nIGJ1Zi5ieXRlcyAwIGJ1Zi5pbmRcblxuKCoqKilcblxuKCogQ29udmVydCBhbiBpbnRlZ2VyIGNvbnZlcnNpb24gdG8gY2hhci4gKilcbmxldCBjaGFyX29mX2ljb252IGljb252ID0gbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9kIHwgSW50X3BkIHwgSW50X3NkIHwgSW50X0NkIC0+ICdkJyB8IEludF9pIHwgSW50X3BpIHwgSW50X3NpXG4gIHwgSW50X0NpIC0+ICdpJyB8IEludF94IHwgSW50X0N4IC0+ICd4JyB8IEludF9YIHwgSW50X0NYIC0+ICdYJyB8IEludF9vXG4gIHwgSW50X0NvIC0+ICdvJyB8IEludF91IHwgSW50X0N1IC0+ICd1J1xuXG4oKiBDb252ZXJ0IGEgZmxvYXQgY29udmVyc2lvbiB0byBjaGFyLiAqKVxuKCogYGNGJyB3aWxsIGJlICdGJyBmb3IgZGlzcGxheWluZyBmb3JtYXQgYW5kICdnJyB0byBjYWxsIGxpYmMgcHJpbnRmICopXG5sZXQgY2hhcl9vZl9mY29udiA/KGNGPSdGJykgZmNvbnYgPSBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2YgLT4gJ2YnIHwgRmxvYXRfZSAtPiAnZSdcbiAgfCBGbG9hdF9FIC0+ICdFJyB8IEZsb2F0X2cgLT4gJ2cnXG4gIHwgRmxvYXRfRyAtPiAnRycgfCBGbG9hdF9GIC0+IGNGXG4gIHwgRmxvYXRfaCAtPiAnaCcgfCBGbG9hdF9IIC0+ICdIJ1xuICB8IEZsb2F0X0NGIC0+ICdGJ1xuXG5cbigqIENvbnZlcnQgYSBzY2FubmluZyBjb3VudGVyIHRvIGNoYXIuICopXG5sZXQgY2hhcl9vZl9jb3VudGVyIGNvdW50ZXIgPSBtYXRjaCBjb3VudGVyIHdpdGhcbiAgfCBMaW5lX2NvdW50ZXIgIC0+ICdsJ1xuICB8IENoYXJfY291bnRlciAgLT4gJ24nXG4gIHwgVG9rZW5fY291bnRlciAtPiAnTidcblxuKCoqKilcblxuKCogUHJpbnQgYSBjaGFyX3NldCBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBPQ2FtbCBmb3JtYXQgbGV4aWNhbCBjb252ZW50aW9uLiAqKVxubGV0IGJwcmludF9jaGFyX3NldCBidWYgY2hhcl9zZXQgPVxuICBsZXQgcmVjIHByaW50X3N0YXJ0IHNldCA9XG4gICAgbGV0IGlzX2Fsb25lIGMgPVxuICAgICAgbGV0IGJlZm9yZSwgYWZ0ZXIgPSBDaGFyLihjaHIgKGNvZGUgYyAtIDEpLCBjaHIgKGNvZGUgYyArIDEpKSBpblxuICAgICAgaXNfaW5fY2hhcl9zZXQgc2V0IGNcbiAgICAgICYmIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IGJlZm9yZSAmJiBpc19pbl9jaGFyX3NldCBzZXQgYWZ0ZXIpIGluXG4gICAgaWYgaXNfYWxvbmUgJ10nIHRoZW4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXSc7XG4gICAgcHJpbnRfb3V0IHNldCAxO1xuICAgIGlmIGlzX2Fsb25lICctJyB0aGVuIGJ1ZmZlcl9hZGRfY2hhciBidWYgJy0nO1xuICBhbmQgcHJpbnRfb3V0IHNldCBpID1cbiAgICBpZiBpIDwgMjU2IHRoZW5cbiAgICAgIGlmIGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgaSkgdGhlbiBwcmludF9maXJzdCBzZXQgaVxuICAgICAgZWxzZSBwcmludF9vdXQgc2V0IChpICsgMSlcbiAgYW5kIHByaW50X2ZpcnN0IHNldCBpID1cbiAgICBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICB8ICdcXDI1NScgLT4gcHJpbnRfY2hhciBidWYgMjU1O1xuICAgIHwgJ10nIHwgJy0nIC0+IHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICB8IF8gLT4gcHJpbnRfc2Vjb25kIHNldCAoaSArIDEpO1xuICBhbmQgcHJpbnRfc2Vjb25kIHNldCBpID1cbiAgICBpZiBpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGkpIHRoZW5cbiAgICAgIG1hdGNoIGNoYXJfb2ZfaW50IGkgd2l0aFxuICAgICAgfCAnXFwyNTUnIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIDI1NDtcbiAgICAgICAgcHJpbnRfY2hhciBidWYgMjU1O1xuICAgICAgfCAnXScgfCAnLScgd2hlbiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgKGkgKyAxKSkpIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIChpIC0gMSk7XG4gICAgICAgIHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICAgIHwgXyB3aGVuIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCAoaSArIDEpKSkgLT5cbiAgICAgICAgcHJpbnRfY2hhciBidWYgKGkgLSAxKTtcbiAgICAgICAgcHJpbnRfY2hhciBidWYgaTtcbiAgICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDIpO1xuICAgICAgfCBfIC0+XG4gICAgICAgIHByaW50X2luIHNldCAoaSAtIDEpIChpICsgMik7XG4gICAgZWxzZSAoXG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaSAtIDEpO1xuICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDEpO1xuICAgIClcbiAgYW5kIHByaW50X2luIHNldCBpIGogPVxuICAgIGlmIGogPSAyNTYgfHwgbm90IChpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGopKSB0aGVuIChcbiAgICAgIHByaW50X2NoYXIgYnVmIGk7XG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaW50X29mX2NoYXIgJy0nKTtcbiAgICAgIHByaW50X2NoYXIgYnVmIChqIC0gMSk7XG4gICAgICBpZiBqIDwgMjU2IHRoZW4gcHJpbnRfb3V0IHNldCAoaiArIDEpO1xuICAgICkgZWxzZVxuICAgICAgcHJpbnRfaW4gc2V0IGkgKGogKyAxKTtcbiAgYW5kIHByaW50X2NoYXIgYnVmIGkgPSBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICB8ICclJyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gICAgfCAnQCcgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0AnO1xuICAgIHwgYyAgIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgYztcbiAgaW5cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnWyc7XG4gIHByaW50X3N0YXJ0IChcbiAgICBpZiBpc19pbl9jaGFyX3NldCBjaGFyX3NldCAnXFwwMDAnXG4gICAgdGhlbiAoIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ14nOyByZXZfY2hhcl9zZXQgY2hhcl9zZXQgKVxuICAgIGVsc2UgY2hhcl9zZXRcbiAgKTtcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXSdcblxuKCoqKilcblxuKCogUHJpbnQgYSBwYWR0eSBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eSA9IG1hdGNoIHBhZHR5IHdpdGhcbiAgfCBMZWZ0ICAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICctJ1xuICB8IFJpZ2h0IC0+ICgpXG4gIHwgWmVyb3MgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnMCdcblxuKCogUHJpbnQgdGhlICdfJyBvZiBhbiBpZ25vcmVkIGZsYWcgaWYgbmVlZGVkLiAqKVxubGV0IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnID1cbiAgaWYgaWduX2ZsYWcgdGhlbiBidWZmZXJfYWRkX2NoYXIgYnVmICdfJ1xuXG4oKioqKVxuXG5sZXQgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB3aWR0aCAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgd2lkdGgpXG5cbigqKiopXG5cbigqIFByaW50IHBhZGRpbmcgaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wYWRkaW5nIDogdHlwZSBhIGIgLiBidWZmZXIgLT4gKGEsIGIpIHBhZGRpbmcgLT4gdW5pdCA9XG5mdW4gYnVmIHBhZCAtPiBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgLT4gKClcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIG4pIC0+XG4gICAgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgbik7XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHkgLT5cbiAgICBicHJpbnRfcGFkdHkgYnVmIHBhZHR5O1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyonXG5cbigqIFByaW50IHByZWNpc2lvbiBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3ByZWNpc2lvbiA6IHR5cGUgYSBiIC4gYnVmZmVyIC0+IChhLCBiKSBwcmVjaXNpb24gLT4gdW5pdCA9XG4gIGZ1biBidWYgcHJlYyAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgfCBOb19wcmVjaXNpb24gLT4gKClcbiAgfCBMaXRfcHJlY2lzaW9uIG4gLT5cbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcuJztcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgbik7XG4gIHwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIi4qXCJcblxuKCoqKilcblxuKCogUHJpbnQgdGhlIG9wdGlvbmFsICcrJywgJyAnIG9yICcjJyBhc3NvY2lhdGVkIHRvIGFuIGludCBjb252ZXJzaW9uLiAqKVxubGV0IGJwcmludF9pY29udl9mbGFnIGJ1ZiBpY29udiA9IG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfcGQgfCBJbnRfcGkgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKydcbiAgfCBJbnRfc2QgfCBJbnRfc2kgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnICdcbiAgfCBJbnRfQ3ggfCBJbnRfQ1ggfCBJbnRfQ28gfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyMnXG4gIHwgSW50X2QgfCBJbnRfaSB8IEludF94IHwgSW50X1ggfCBJbnRfbyB8IEludF91IC0+ICgpXG5cbigqIFByaW50IGFuIGNvbXBsZXRlIGludCBmb3JtYXQgaW4gYSBidWZmZXIgKGV4OiBcIiUzLipkXCIpLiAqKVxubGV0IGJwcmludF9pbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2ljb252X2ZsYWcgYnVmIGljb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2ljb252IGljb252KVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQgZm9ybWF0IGluIGEgYnVmZmVyLiAqKVxubGV0IGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyBjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfaWNvbnZfZmxhZyBidWYgaWNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9pY29udiBpY29udilcblxuKCoqKilcblxuKCogUHJpbnQgdGhlIG9wdGlvbmFsICcrJywgJyAnIGFuZC9vciAnIycgYXNzb2NpYXRlZCB0byBhIGZsb2F0IGNvbnZlcnNpb24uICopXG5sZXQgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252ID1cbiAgYmVnaW4gbWF0Y2ggZnN0IGZjb252IHdpdGhcbiAgfCBGbG9hdF9mbGFnX3AgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKydcbiAgfCBGbG9hdF9mbGFnX3MgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnICdcbiAgfCBGbG9hdF9mbGFnXyAtPiAoKSBlbmQ7XG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfQ0YgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnIydcbiAgfCBGbG9hdF9mIHwgRmxvYXRfZSB8IEZsb2F0X0UgfCBGbG9hdF9nIHwgRmxvYXRfR1xuICB8IEZsb2F0X0YgfCBGbG9hdF9oIHwgRmxvYXRfSCAtPiAoKVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZsb2F0IGZvcm1hdCBpbiBhIGJ1ZmZlciAoZXg6IFwiJSsqLjNmXCIpLiAqKVxubGV0IGJwcmludF9mbG9hdF9mbXQgYnVmIGlnbl9mbGFnIGZjb252IHBhZCBwcmVjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfZmNvbnYgZmNvbnYpXG5cbigqIENvbXB1dGUgdGhlIGxpdGVyYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgRm9ybWF0dGluZ19saXQuICopXG4oKiBVc2VkIGJ5IFByaW50ZiBhbmQgU2NhbmYgd2hlcmUgZm9ybWF0dGluZyBpcyBub3QgaW50ZXJwcmV0ZWQuICopXG5sZXQgc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZvcm1hdHRpbmdfbGl0ID0gbWF0Y2ggZm9ybWF0dGluZ19saXQgd2l0aFxuICB8IENsb3NlX2JveCAgICAgICAgICAgIC0+IFwiQF1cIlxuICB8IENsb3NlX3RhZyAgICAgICAgICAgIC0+IFwiQH1cIlxuICB8IEJyZWFrIChzdHIsIF8sIF8pICAgIC0+IHN0clxuICB8IEZGbHVzaCAgICAgICAgICAgICAgIC0+IFwiQD9cIlxuICB8IEZvcmNlX25ld2xpbmUgICAgICAgIC0+IFwiQFxcblwiXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgLT4gXCJALlwiXG4gIHwgTWFnaWNfc2l6ZSAoc3RyLCBfKSAgLT4gc3RyXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgLT4gXCJAQFwiXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgLT4gXCJAJVwiXG4gIHwgU2Nhbl9pbmRpYyBjIC0+IFwiQFwiIF4gKFN0cmluZy5tYWtlIDEgYylcblxuKCoqKilcblxuKCogUHJpbnQgYSBsaXRlcmFsIGNoYXIgaW4gYSBidWZmZXIsIGVzY2FwZSAnJScgYnkgXCIlJVwiLiAqKVxubGV0IGJwcmludF9jaGFyX2xpdGVyYWwgYnVmIGNociA9IG1hdGNoIGNociB3aXRoXG4gIHwgJyUnIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUlXCJcbiAgfCBfIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgY2hyXG5cbigqIFByaW50IGEgbGl0ZXJhbCBzdHJpbmcgaW4gYSBidWZmZXIsIGVzY2FwZSBhbGwgJyUnIGJ5IFwiJSVcIi4gKilcbmxldCBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIHN0ciA9XG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHN0ciAtIDEgZG9cbiAgICBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBzdHIuW2ldXG4gIGRvbmVcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHByZXR0eS1wcmludGluZyAqKVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZvcm1hdCB0eXBlIChhbiBmbXR0eSkgaW4gYSBidWZmZXIuICopXG5sZXQgcmVjIGJwcmludF9mbXR0eSA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgLlxuICAgIGJ1ZmZlciAtPiAoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCkgZm10dHlfcmVsIC0+IHVuaXQgPVxuZnVuIGJ1ZiBmbXR0eSAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0ICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWNcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlc1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludF90eSByZXN0ICAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVpXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgSW50MzJfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWxpXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlbmlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludDY0X3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVMaVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgRmxvYXRfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWZcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBCb29sX3R5IHJlc3QgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlQlwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEFscGhhX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVhXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgVGhldGFfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXRcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBBbnlfdHkgcmVzdCAgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlP1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IFJlYWRlcl90eSByZXN0ICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVyXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJV9yXCI7XG4gICAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgRm9ybWF0X2FyZ190eSAoc3ViX2ZtdHR5LCByZXN0KSAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV7XCI7IGJwcmludF9mbXR0eSBidWYgc3ViX2ZtdHR5O1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV9XCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHN1Yl9mbXR0eSwgXywgcmVzdCkgLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlKFwiOyBicHJpbnRfZm10dHkgYnVmIHN1Yl9mbXR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlKVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBFbmRfb2ZfZm10dHkgLT4gKClcblxuKCoqKilcblxubGV0IHJlYyBpbnRfb2ZfY3VzdG9tX2FyaXR5IDogdHlwZSBhIGIgYyAuXG4gIChhLCBiLCBjKSBjdXN0b21fYXJpdHkgLT4gaW50ID1cbiAgZnVuY3Rpb25cbiAgfCBDdXN0b21femVybyAtPiAwXG4gIHwgQ3VzdG9tX3N1Y2MgeCAtPiAxICsgaW50X29mX2N1c3RvbV9hcml0eSB4XG5cbigqIFByaW50IGEgY29tcGxldGUgZm9ybWF0IGluIGEgYnVmZmVyLiAqKVxubGV0IGJwcmludF9mbXQgYnVmIGZtdCA9XG4gIGxldCByZWMgZm10aXRlciA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBib29sIC0+IHVuaXQgPVxuICBmdW4gZm10IGlnbl9mbGFnIC0+IG1hdGNoIGZtdCB3aXRoXG4gICAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3MnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ1MnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfaW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWM7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyAnbCc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ24nO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ0wnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfZmxvYXRfZm10IGJ1ZiBpZ25fZmxhZyBmY29udiBwYWQgcHJlYztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgQ2hhciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdjJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0MnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdCJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEFscGhhIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ2EnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBUaGV0YSByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICd0JzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ3VzdG9tIChhcml0eSwgXywgcmVzdCkgLT5cbiAgICAgIGZvciBfaSA9IDEgdG8gaW50X29mX2N1c3RvbV9hcml0eSBhcml0eSBkb1xuICAgICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJz8nO1xuICAgICAgZG9uZTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFJlYWRlciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdyJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRmx1c2ggcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJSFcIjtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcblxuICAgIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgc3RyO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuICAgIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBjaHI7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3snO1xuICAgICAgYnByaW50X2ZtdHR5IGJ1ZiBmbXR0eTsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ30nO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0OyBidWZmZXJfYWRkX2NoYXIgYnVmICcoJztcbiAgICAgIGJwcmludF9mbXR0eSBidWYgZm10dHk7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICcpJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiB3aWR0aF9vcHQ7IGJwcmludF9jaGFyX3NldCBidWYgY2hhcl9zZXQ7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9jb3VudGVyIGNvdW50ZXIpO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiBcIjBjXCI7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgICAgbGV0IFBhcmFtX2Zvcm1hdF9FQkIgZm10JyA9IHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdCBpZ24gcmVzdCBpblxuICAgICAgZm10aXRlciBmbXQnIHRydWU7XG5cbiAgICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiAoc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQpO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuICAgIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpIC0+XG4gICAgICBiZWdpbiBtYXRjaCBmbXRpbmdfZ2VuIHdpdGhcbiAgICAgIHwgT3Blbl90YWcgKEZvcm1hdCAoXywgc3RyKSkgLT5cbiAgICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiQHtcIjsgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIHN0clxuICAgICAgfCBPcGVuX2JveCAoRm9ybWF0IChfLCBzdHIpKSAtPlxuICAgICAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCJAW1wiOyBidWZmZXJfYWRkX3N0cmluZyBidWYgc3RyXG4gICAgICBlbmQ7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IEVuZF9vZl9mb3JtYXQgLT4gKClcblxuICBpbiBmbXRpdGVyIGZtdCBmYWxzZVxuXG4oKioqKVxuXG4oKiBDb252ZXJ0IGEgZm9ybWF0IHRvIHN0cmluZy4gKilcbmxldCBzdHJpbmdfb2ZfZm10IGZtdCA9XG4gIGxldCBidWYgPSBidWZmZXJfY3JlYXRlIDE2IGluXG4gIGJwcmludF9mbXQgYnVmIGZtdDtcbiAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBUeXBlIGV4dHJhY3Rpb24gKilcblxudHlwZSAoXywgXykgZXEgPSBSZWZsIDogKCdhLCAnYSkgZXFcblxuKCogSW52YXJpYW50OiB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBpZGVudGl0eSBvbiB2YWx1ZXMuXG5cbiAgIEluIHBhcnRpY3VsYXIsIGlmICh0eTEsIHR5MikgaGF2ZSBlcXVhbCB2YWx1ZXMsIHRoZW5cbiAgICh0cmFucyAoc3ltbSB0eTEpIHR5MikgcmVzcGVjdHMgdGhlICd0cmFucycgcHJlY29uZGl0aW9uLiAqKVxubGV0IHJlYyBzeW1tIDogdHlwZSBhMSBiMSBjMSBkMSBlMSBmMSBhMiBiMiBjMiBkMiBlMiBmMiAuXG4gICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWxcbi0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyLFxuICAgIGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdHR5X3JlbFxuPSBmdW5jdGlvblxuICB8IENoYXJfdHkgcmVzdCAtPiBDaGFyX3R5IChzeW1tIHJlc3QpXG4gIHwgSW50X3R5IHJlc3QgLT4gSW50X3R5IChzeW1tIHJlc3QpXG4gIHwgSW50MzJfdHkgcmVzdCAtPiBJbnQzMl90eSAoc3ltbSByZXN0KVxuICB8IEludDY0X3R5IHJlc3QgLT4gSW50NjRfdHkgKHN5bW0gcmVzdClcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPiBOYXRpdmVpbnRfdHkgKHN5bW0gcmVzdClcbiAgfCBGbG9hdF90eSByZXN0IC0+IEZsb2F0X3R5IChzeW1tIHJlc3QpXG4gIHwgQm9vbF90eSByZXN0IC0+IEJvb2xfdHkgKHN5bW0gcmVzdClcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPiBTdHJpbmdfdHkgKHN5bW0gcmVzdClcbiAgfCBUaGV0YV90eSByZXN0IC0+IFRoZXRhX3R5IChzeW1tIHJlc3QpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPiBBbHBoYV90eSAoc3ltbSByZXN0KVxuICB8IEFueV90eSByZXN0IC0+IEFueV90eSAoc3ltbSByZXN0KVxuICB8IFJlYWRlcl90eSByZXN0IC0+IFJlYWRlcl90eSAoc3ltbSByZXN0KVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT4gSWdub3JlZF9yZWFkZXJfdHkgKHN5bW0gcmVzdClcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgc3ltbSByZXN0KVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTIsIHR5MSwgc3ltbSByZXN0KVxuICB8IEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcblxubGV0IHJlYyBmbXR0eV9yZWxfZGV0IDogdHlwZSBhMSBiIGMgZDEgZTEgZjEgYTIgZDIgZTIgZjIgLlxuICAoYTEsIGIsIGMsIGQxLCBlMSwgZjEsXG4gICBhMiwgYiwgYywgZDIsIGUyLCBmMikgZm10dHlfcmVsIC0+XG4gICAgKChmMSwgZjIpIGVxIC0+IChhMSwgYTIpIGVxKVxuICAqICgoYTEsIGEyKSBlcSAtPiAoZjEsIGYyKSBlcSlcbiAgKiAoKGUxLCBlMikgZXEgLT4gKGQxLCBkMikgZXEpXG4gICogKChkMSwgZDIpIGVxIC0+IChlMSwgZTIpIGVxKVxuPSBmdW5jdGlvblxuICB8IEVuZF9vZl9mbXR0eSAtPlxuICAgIChmdW4gUmVmbCAtPiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBSZWZsKVxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG5cbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBlZCBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcbiAgfCBGb3JtYXRfYXJnX3R5IChfdHksIHJlc3QpIC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxKSB0eTIgaW5cbiAgICBsZXQgYWcsIGdhLCBkaiwgamQgPSBmbXR0eV9yZWxfZGV0IHR5IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBsZXQgUmVmbCA9IGFnIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZ2EgUmVmbCBpbiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBsZXQgUmVmbCA9IGRqIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gamQgUmVmbCBpbiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcblxuKCogUHJlY29uZGl0aW9uOiB3ZSBhc3N1bWUgdGhhdCB0aGUgdHdvIGZtdHR5X3JlbCBhcmd1bWVudHMgaGF2ZSBlcXVhbFxuICAgdmFsdWVzIChhdCBwb3NzaWJseSBkaXN0aW5jdCB0eXBlcyk7IHRoaXMgaW52YXJpYW50IGNvbWVzIGZyb20gdGhlIHdheVxuICAgZm10dHlfcmVsIHdpdG5lc3NlcyBhcmUgcHJvZHVjZWQgYnkgdGhlIHR5cGUtY2hlY2tlclxuXG4gICBUaGUgY29kZSBiZWxvdyB1c2VzIChhc3NlcnQgZmFsc2UpIHdoZW4gdGhpcyBhc3N1bXB0aW9uIGlzIGJyb2tlbi4gVGhlXG4gICBjb2RlIHBhdHRlcm4gaXMgdGhlIGZvbGxvd2luZzpcblxuICAgICB8IEZvbyB4LCBGb28geSAtPlxuICAgICAgICgqIGNhc2Ugd2hlcmUgaW5kZWVkIGJvdGggdmFsdWVzXG4gICAgICAgICAgc3RhcnQgd2l0aCBjb25zdHJ1Y3RvciBGb28gKilcbiAgICAgfCBGb28gXywgX1xuICAgICB8IF8sIEZvbyBfIC0+XG4gICAgICAgKCogZGlmZmVyZW50IGhlYWQgY29uc3RydWN0b3JzOiBicm9rZW4gcHJlY29uZGl0aW9uICopXG4gICAgICAgYXNzZXJ0IGZhbHNlXG4qKVxuYW5kIHRyYW5zIDogdHlwZVxuICBhMSBiMSBjMSBkMSBlMSBmMVxuICBhMiBiMiBjMiBkMiBlMiBmMlxuICBhMyBiMyBjMyBkMyBlMyBmM1xuLlxuICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsXG4tPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMixcbiAgICBhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eV9yZWxcbi0+IChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgIGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5X3JlbFxuPSBmdW4gdHkxIHR5MiAtPiBtYXRjaCB0eTEsIHR5MiB3aXRoXG4gIHwgQ2hhcl90eSByZXN0MSwgQ2hhcl90eSByZXN0MiAtPiBDaGFyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBTdHJpbmdfdHkgcmVzdDEsIFN0cmluZ190eSByZXN0MiAtPiBTdHJpbmdfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEJvb2xfdHkgcmVzdDEsIEJvb2xfdHkgcmVzdDIgLT4gQm9vbF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSW50X3R5IHJlc3QxLCBJbnRfdHkgcmVzdDIgLT4gSW50X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJbnQzMl90eSByZXN0MSwgSW50MzJfdHkgcmVzdDIgLT4gSW50MzJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEludDY0X3R5IHJlc3QxLCBJbnQ2NF90eSByZXN0MiAtPiBJbnQ2NF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QxLCBOYXRpdmVpbnRfdHkgcmVzdDIgLT4gTmF0aXZlaW50X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBGbG9hdF90eSByZXN0MSwgRmxvYXRfdHkgcmVzdDIgLT4gRmxvYXRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuXG4gIHwgQWxwaGFfdHkgcmVzdDEsIEFscGhhX3R5IHJlc3QyIC0+IEFscGhhX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBBbHBoYV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEFscGhhX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBUaGV0YV90eSByZXN0MSwgVGhldGFfdHkgcmVzdDIgLT4gVGhldGFfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFRoZXRhX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgVGhldGFfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEFueV90eSByZXN0MSwgQW55X3R5IHJlc3QyIC0+IEFueV90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgQW55X3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgQW55X3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBSZWFkZXJfdHkgcmVzdDEsIFJlYWRlcl90eSByZXN0MiAtPiBSZWFkZXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFJlYWRlcl90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIFJlYWRlcl90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdDEsIElnbm9yZWRfcmVhZGVyX3R5IHJlc3QyIC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgSWdub3JlZF9yZWFkZXJfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEZvcm1hdF9hcmdfdHkgKHR5MSwgcmVzdDEpLCBGb3JtYXRfYXJnX3R5ICh0eTIsIHJlc3QyKSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHRyYW5zIHR5MSB0eTIsIHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEZvcm1hdF9hcmdfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBGb3JtYXRfYXJnX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MTEsIHR5MTIsIHJlc3QxKSxcbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MjEsIHR5MjIsIHJlc3QyKSAtPlxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MTIpIHR5MjEgaW5cbiAgICBsZXQgXywgZjIsIF8sIGY0ID0gZm10dHlfcmVsX2RldCB0eSBpblxuICAgIGxldCBSZWZsID0gZjIgUmVmbCBpblxuICAgIGxldCBSZWZsID0gZjQgUmVmbCBpblxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxMSwgdHkyMiwgdHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgRm9ybWF0X3N1YnN0X3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRm9ybWF0X3N1YnN0X3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBFbmRfb2ZfZm10dHksIEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcbiAgfCBFbmRfb2ZfZm10dHksIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRW5kX29mX2ZtdHR5IC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcmVjIGZtdHR5X29mX2Zvcm1hdHRpbmdfZ2VuIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmb3JtYXR0aW5nX2dlbiAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gZm9ybWF0dGluZ19nZW4gLT4gbWF0Y2ggZm9ybWF0dGluZ19nZW4gd2l0aFxuICB8IE9wZW5fdGFnIChGb3JtYXQgKGZtdCwgXykpIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBPcGVuX2JveCAoRm9ybWF0IChmbXQsIF8pKSAtPiBmbXR0eV9vZl9mbXQgZm10XG5cbigqIEV4dHJhY3QgdGhlIHR5cGUgcmVwcmVzZW50YXRpb24gKGFuIGZtdHR5KSBvZiBhIGZvcm1hdC4gKilcbmFuZCBmbXR0eV9vZl9mbXQgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGZtdHR5IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG5cbiAgfCBJbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEludDMyIChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludDMyX3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IE5hdGl2ZWludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChOYXRpdmVpbnRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgSW50NjQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50NjRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgRmxvYXQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoRmxvYXRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG5cbiAgfCBDaGFyIHJlc3QgICAgICAgICAgICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBDYW1sX2NoYXIgcmVzdCAgICAgICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBCb29sIChwYWQsIHJlc3QpICAgICAgICAgICAtPlxuICAgICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKEJvb2xfdHkgKGZtdHR5X29mX2ZtdCByZXN0KSlcbiAgfCBBbHBoYSByZXN0ICAgICAgICAgICAgICAgICAtPiBBbHBoYV90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgVGhldGEgcmVzdCAgICAgICAgICAgICAgICAgLT4gVGhldGFfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IEN1c3RvbSAoYXJpdHksIF8sIHJlc3QpICAgIC0+IGZtdHR5X29mX2N1c3RvbSBhcml0eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgUmVhZGVyIHJlc3QgICAgICAgICAgICAgICAgLT4gUmVhZGVyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEZvcm1hdF9hcmcgKF8sIHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBGb3JtYXRfc3Vic3QgKF8sIHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHksIHR5LCBmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEZsdXNoIHJlc3QgICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBDaGFyX2xpdGVyYWwgKF8sIHJlc3QpICAgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT4gU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPiBJbnRfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgICAgICAgIC0+IENoYXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgIC0+IGZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IGlnbiByZXN0XG4gIHwgRm9ybWF0dGluZ19saXQgKF8sIHJlc3QpICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgIC0+XG4gICAgY29uY2F0X2ZtdHR5IChmbXR0eV9vZl9mb3JtYXR0aW5nX2dlbiBmbXRpbmdfZ2VuKSAoZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBFbmRfb2ZfZm9ybWF0ICAgICAgICAgICAgICAtPiBFbmRfb2ZfZm10dHlcblxuYW5kIGZtdHR5X29mX2N1c3RvbSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgKHksIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBhcml0eSBmbXR0eSAtPiBtYXRjaCBhcml0eSB3aXRoXG4gIHwgQ3VzdG9tX3plcm8gLT4gZm10dHlcbiAgfCBDdXN0b21fc3VjYyBhcml0eSAtPiBBbnlfdHkgKGZtdHR5X29mX2N1c3RvbSBhcml0eSBmbXR0eSlcblxuKCogRXh0cmFjdCB0aGUgZm10dHkgb2YgYW4gaWdub3JlZCBwYXJhbWV0ZXIgZm9sbG93ZWQgYnkgdGhlIHJlc3Qgb2ZcbiAgIHRoZSBmb3JtYXQuICopXG5hbmQgZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT5cbiAgICAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQgKF8sIF8pICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQzMiAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQ2NCAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mbG9hdCAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIF8gICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKF8sIGZtdHR5KSAtPiBjb25jYXRfZm10dHkgZm10dHkgKGZtdHR5X29mX2ZtdCBmbXQpXG4gIHwgSWdub3JlZF9yZWFkZXIgICAgICAgICAgICAgICAgICAtPiBJZ25vcmVkX3JlYWRlcl90eSAoZm10dHlfb2ZfZm10IGZtdClcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcblxuKCogQWRkIGFuIEludF90eSBub2RlIGlmIHBhZGRpbmcgaXMgdGFrZW4gYXMgYW4gZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUqc1wiKS4gKilcbmFuZCBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IDogdHlwZSB4IGEgYiBjIGQgZSBmIC5cbiAgICAoeCwgYSkgcGFkZGluZyAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKHgsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbiAgZnVuIHBhZCBmbXR0eSAtPiBtYXRjaCBwYWQgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAgICAtPiBmbXR0eVxuICAgIHwgTGl0X3BhZGRpbmcgXyAtPiBmbXR0eVxuICAgIHwgQXJnX3BhZGRpbmcgXyAtPiBJbnRfdHkgZm10dHlcblxuKCogQWRkIGFuIEludF90eSBub2RlIGlmIHByZWNpc2lvbiBpcyB0YWtlbiBhcyBhbiBleHRyYSBhcmd1bWVudCAoZXg6IFwiJS4qZlwiKS4qKVxuYW5kIGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSA6IHR5cGUgeCBhIGIgYyBkIGUgZiAuXG4gICAgKHgsIGEpIHByZWNpc2lvbiAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKHgsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbiAgZnVuIHByZWMgZm10dHkgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgfCBOb19wcmVjaXNpb24gICAgLT4gZm10dHlcbiAgICB8IExpdF9wcmVjaXNpb24gXyAtPiBmbXR0eVxuICAgIHwgQXJnX3ByZWNpc2lvbiAgIC0+IEludF90eSBmbXR0eVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCB0eXBpbmcgKilcblxuKCogRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgZm9ybWF0IGRvZXMgbm90IG1hdGNoIGEgZ2l2ZW4gZm9ybWF0IHR5cGUuICopXG5leGNlcHRpb24gVHlwZV9taXNtYXRjaFxuXG4oKiBUeXBlIGEgcGFkZGluZy4gKilcbigqIFRha2UgYW4gSW50X3R5IGZyb20gdGhlIGZtdHR5IGlmIHRoZSBpbnRlZ2VyIHNob3VsZCBiZSBrZXB0IGFzIGFyZ3VtZW50LiAqKVxuKCogUmFpc2UgVHlwZV9taXNtYXRjaCBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgdHlwZV9wYWRkaW5nIDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhZGRpbmdfZm10dHlfZWJiID1cbmZ1biBwYWQgZm10dHkgLT4gbWF0Y2ggcGFkLCBmbXR0eSB3aXRoXG4gIHwgTm9fcGFkZGluZywgXyAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoTm9fcGFkZGluZywgZm10dHkpXG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgXyAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoTGl0X3BhZGRpbmcgKHBhZHR5LHcpLGZtdHR5KVxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBJbnRfdHkgcmVzdCAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoQXJnX3BhZGRpbmcgcGFkdHkscmVzdClcbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogQ29udmVydCBhICh1cGFkZGluZywgdXByZWNpc2lvbikgdG8gYSAocGFkZGluZywgcHJlY2lzaW9uKS4gKilcbigqIFRha2Ugb25lIG9yIHR3byBJbnRfdHkgZnJvbSB0aGUgZm10dHkgaWYgbmVlZGVkLiAqKVxuKCogUmFpc2UgVHlwZV9taXNtYXRjaCBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgdHlwZV9wYWRwcmVjIDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgeiAuXG4gICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6KSBwcmVjaXNpb24gLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhZHByZWNfZm10dHlfZWJiID1cbmZ1biBwYWQgcHJlYyBmbXR0eSAtPiBtYXRjaCBwcmVjLCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgfCBOb19wcmVjaXNpb24sIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgTm9fcHJlY2lzaW9uLCByZXN0KVxuICB8IExpdF9wcmVjaXNpb24gcCwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgcmVzdCkgLT5cbiAgICBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBMaXRfcHJlY2lzaW9uIHAsIHJlc3QpXG4gIHwgQXJnX3ByZWNpc2lvbiwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgSW50X3R5IHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgQXJnX3ByZWNpc2lvbiwgcmVzdClcbiAgfCBfLCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBUeXBlIGEgZm9ybWF0IGFjY29yZGluZyB0byBhbiBmbXR0eS4gKilcbigqIElmIHR5cGluZyBzdWNjZWVkLCBnZW5lcmF0ZSBhIGNvcHkgb2YgdGhlIGZvcm1hdCB3aXRoIHRoZSBzYW1lXG4gICAgdHlwZSBwYXJhbWV0ZXJzIGFzIHRoZSBmbXR0eS4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHJlYyB0eXBlX2Zvcm1hdCA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMiAgLlxuICAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eVxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10XG49IGZ1biBmbXQgZm10dHkgLT4gbWF0Y2ggdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eSB3aXRoXG4gIHwgRm10X2ZtdHR5X0VCQiAoZm10JywgRW5kX29mX2ZtdHR5KSAtPiBmbXQnXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbmFuZCB0eXBlX2Zvcm1hdF9nZW4gOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjIgIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdF9mbXR0eV9lYmJcbj0gZnVuIGZtdCBmbXR0eSAtPiBtYXRjaCBmbXQsIGZtdHR5IHdpdGhcbiAgfCBDaGFyIGZtdF9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2hhciBmbXQnLCBmbXR0eScpXG4gIHwgQ2FtbF9jaGFyIGZtdF9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2FtbF9jaGFyIGZtdCcsIGZtdHR5JylcbiAgfCBTdHJpbmcgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIFN0cmluZ190eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoU3RyaW5nIChwYWQsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIFN0cmluZ190eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZCwgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEludF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBJbnQzMl90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50MzIgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBOYXRpdmVpbnRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgSW50NjRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludDY0IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBGbG9hdF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgQm9vbCAocGFkLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgQm9vbF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoQm9vbCAocGFkLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEZsdXNoIGZtdF9yZXN0LCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZsdXNoIGZtdCcsIGZtdHR5JylcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChTdHJpbmdfbGl0ZXJhbCAoc3RyLCBmbXQnKSwgZm10dHknKVxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2hhcl9saXRlcmFsIChjaHIsIGZtdCcpLCBmbXR0eScpXG5cbiAgfCBGb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHksIGZtdF9yZXN0KSxcbiAgICBGb3JtYXRfYXJnX3R5IChzdWJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgIGlmIEZtdHR5X0VCQiBzdWJfZm10dHkgPD4gRm10dHlfRUJCIHN1Yl9mbXR0eScgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHknLCBmbXQnKSwgZm10dHknKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5LCBmbXRfcmVzdCksXG4gICAgRm9ybWF0X3N1YnN0X3R5IChzdWJfZm10dHkxLCBfc3ViX2ZtdHR5MiwgZm10dHlfcmVzdCkgLT5cbiAgICBpZiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWJfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1Yl9mbXR0eTEpIHRoZW5cbiAgICAgIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPVxuICAgICAgdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IChlcmFzZV9yZWwgZm10dHlfcmVzdClcbiAgICBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5MSwgZm10JyksIGZtdHR5JylcbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IEFscGhhIGZtdF9yZXN0LCBBbHBoYV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEFscGhhIGZtdCcsIGZtdHR5JylcbiAgfCBUaGV0YSBmbXRfcmVzdCwgVGhldGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChUaGV0YSBmbXQnLCBmbXR0eScpXG5cbiAgKCogRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdCcpLCBmbXR0eScpXG4gIHwgRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmdfZ2VuLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICB0eXBlX2Zvcm1hdHRpbmdfZ2VuIGZvcm1hdHRpbmdfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3RcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgUmVhZGVyIGZtdF9yZXN0LCBSZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChSZWFkZXIgZm10JywgZm10dHknKVxuICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdF9yZXN0KSwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgZm10JyksIGZtdHR5JylcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCksIEludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdCcpLCBmbXR0eScpXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIHR5cGVfaWdub3JlZF9wYXJhbSBpZ24gcmVzdCBmbXR0eV9yZXN0XG5cbiAgfCBFbmRfb2ZfZm9ybWF0LCBmbXR0eV9yZXN0IC0+IEZtdF9mbXR0eV9FQkIgKEVuZF9vZl9mb3JtYXQsIGZtdHR5X3Jlc3QpXG5cbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuYW5kIHR5cGVfZm9ybWF0dGluZ19nZW4gOiB0eXBlIGExIGEzIGIxIGIzIGMxIGMzIGQxIGQzIGUxIGUyIGUzIGYxIGYyIGYzIC5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm9ybWF0dGluZ19nZW4gLT5cbiAgICAoZjEsIGIxLCBjMSwgZTEsIGUyLCBmMikgZm10IC0+XG4gICAgKGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5IC0+XG4gICAgKGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdF9mbXR0eV9lYmIgPVxuZnVuIGZvcm1hdHRpbmdfZ2VuIGZtdDAgZm10dHkwIC0+IG1hdGNoIGZvcm1hdHRpbmdfZ2VuIHdpdGhcbiAgfCBPcGVuX3RhZyAoRm9ybWF0IChmbXQxLCBzdHIpKSAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQyLCBmbXR0eTIpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDEgZm10dHkwIGluXG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDMsIGZtdHR5MykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MCBmbXR0eTIgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10Miwgc3RyKSksIGZtdDMpLCBmbXR0eTMpXG4gIHwgT3Blbl9ib3ggKEZvcm1hdCAoZm10MSwgc3RyKSkgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MiwgZm10dHkyKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQxIGZtdHR5MCBpblxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQzLCBmbXR0eTMpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDAgZm10dHkyIGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdDIsIHN0cikpLCBmbXQzKSwgZm10dHkzKVxuXG4oKiBUeXBlIGFuIElnbm9yZWRfcGFyYW0gbm9kZSBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG5hbmQgdHlwZV9pZ25vcmVkX3BhcmFtIDogdHlwZSBwIHEgeCB5IHogdCB1IHYgYSBiIGMgZCBlIGYgLlxuICAgICh4LCB5LCB6LCB0LCBxLCBwKSBpZ25vcmVkIC0+XG4gICAgKHAsIHksIHosIHEsIHUsIHYpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXRfZm10dHlfZWJiID1cbmZ1biBpZ24gZm10IGZtdHR5IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQgXyAgICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQzMiBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgXyAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQ2NCBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mbG9hdCBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHkpIC0+XG4gICAgdHlwZV9pZ25vcmVkX3BhcmFtX29uZSAoSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHkpKSBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5KSAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHknLCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHkgZm10IGZtdHR5IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCcpLFxuICAgICAgICAgICAgICAgICAgIGZtdHR5JylcbiAgfCBJZ25vcmVkX3JlYWRlciAtPiAoXG4gICAgbWF0Y2ggZm10dHkgd2l0aFxuICAgIHwgSWdub3JlZF9yZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfcmVhZGVyLCBmbXQnKSwgZm10dHknKVxuICAgIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcblxuYW5kIHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgOiB0eXBlIGExIGEyIGIxIGIyIGMxIGMyIGQxIGQyIGUxIGUyIGYxIGYyIC5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGQyLCBhMikgaWdub3JlZCAtPlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXQgLT5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHkgLT5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10X2ZtdHR5X2ViYlxuPSBmdW4gaWduIGZtdCBmbXR0eSAtPlxuICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHkgaW5cbiAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoaWduLCBmbXQnKSwgZm10dHknKVxuXG4oKiBUeXBpbmcgb2YgdGhlIGNvbXBsZXggY2FzZTogXCIlXyguLi4lKVwiLiAqKVxuYW5kIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIDogdHlwZSB3IHggeSB6IHAgcyB0IHUgYSBiIGMgZCBlIGYgLlxuICAgICh3LCB4LCB5LCB6LCBzLCBwKSBmbXR0eSAtPlxuICAgIChwLCB4LCB5LCBzLCB0LCB1KSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5X2ZtdF9lYmIgPVxuZnVuIHN1Yl9mbXR0eSBmbXQgZm10dHkgLT4gbWF0Y2ggc3ViX2ZtdHR5LCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSBzdWJfZm10dHlfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChDaGFyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBTdHJpbmdfdHkgc3ViX2ZtdHR5X3Jlc3QsIFN0cmluZ190eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChTdHJpbmdfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludF90eSBzdWJfZm10dHlfcmVzdCwgSW50X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSW50MzJfdHkgc3ViX2ZtdHR5X3Jlc3QsIEludDMyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludDMyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBOYXRpdmVpbnRfdHkgc3ViX2ZtdHR5X3Jlc3QsIE5hdGl2ZWludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChOYXRpdmVpbnRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludDY0X3R5IHN1Yl9mbXR0eV9yZXN0LCBJbnQ2NF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnQ2NF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgRmxvYXRfdHkgc3ViX2ZtdHR5X3Jlc3QsIEZsb2F0X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZsb2F0X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBCb29sX3R5IHN1Yl9mbXR0eV9yZXN0LCBCb29sX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEJvb2xfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEFscGhhX3R5IHN1Yl9mbXR0eV9yZXN0LCBBbHBoYV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChBbHBoYV90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgVGhldGFfdHkgc3ViX2ZtdHR5X3Jlc3QsIFRoZXRhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKFRoZXRhX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBSZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QsIFJlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChSZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0LCBJZ25vcmVkX3JlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJZ25vcmVkX3JlYWRlcl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG5cbiAgfCBGb3JtYXRfYXJnX3R5IChzdWIyX2ZtdHR5LCBzdWJfZm10dHlfcmVzdCksXG4gICAgRm9ybWF0X2FyZ190eSAoc3ViMl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgaWYgRm10dHlfRUJCIHN1YjJfZm10dHkgPD4gRm10dHlfRUJCIHN1YjJfZm10dHknIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZvcm1hdF9hcmdfdHkgKHN1YjJfZm10dHknLCBzdWJfZm10dHlfcmVzdCcpLCBmbXQnKVxuICB8IEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eSwgIHN1YjJfZm10dHksICBzdWJfZm10dHlfcmVzdCksXG4gICAgRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5Jywgc3ViMl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgKCogVE9ETyBkZWZpbmUgRm10dHlfcmVsX0VCQiB0byByZW1vdmUgdGhvc2UgZXJhc2VfcmVsICopXG4gICAgaWYgRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMV9mbXR0eSkgPD4gRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMV9mbXR0eScpXG4gICAgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGlmIEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjJfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjJfZm10dHknKVxuICAgIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgc3ViX2ZtdHR5JyA9IHRyYW5zIChzeW1tIHN1YjFfZm10dHknKSBzdWIyX2ZtdHR5JyBpblxuICAgIGxldCBfLCBmMiwgXywgZjQgPSBmbXR0eV9yZWxfZGV0IHN1Yl9mbXR0eScgaW5cbiAgICBsZXQgUmVmbCA9IGYyIFJlZmwgaW5cbiAgICBsZXQgUmVmbCA9IGY0IFJlZmwgaW5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiAoZXJhc2VfcmVsIHN1Yl9mbXR0eV9yZXN0KSBmbXQgZm10dHlfcmVzdFxuICAgIGluXG4gICAgRm10dHlfZm10X0VCQiAoRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5Jywgc3ViMl9mbXR0eScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tIHN1Yl9mbXR0eV9yZXN0JyksXG4gICAgICAgICAgICAgICAgICAgZm10JylcbiAgfCBFbmRfb2ZfZm10dHksIGZtdHR5IC0+XG4gICAgRm10dHlfZm10X0VCQiAoRW5kX29mX2ZtdHR5LCB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5KVxuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBUaGlzIGltcGxlbWVudGF0aW9uIG9mIGByZWNhc3RgIGlzIGEgYml0IGRpc2FwcG9pbnRpbmcuIFRoZVxuICAgaW52YXJpYW50IHByb3ZpZGVkIGJ5IHRoZSB0eXBlIGFyZSB2ZXJ5IHN0cm9uZzogdGhlIGlucHV0IGZvcm1hdCdzXG4gICB0eXBlIGlzIGluIHJlbGF0aW9uIHRvIHRoZSBvdXRwdXQgdHlwZSdzIGFzIHdpdG5lc3NlZCBieSB0aGVcbiAgIGZtdHR5X3JlbCBhcmd1bWVudC4gT25lIHdvdWxkIGF0IGZpcnN0IGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGJlXG4gICB0b3RhbCwgYW5kIGltcGxlbWVudGFibGUgYnkgZXhoYXVzdGl2ZSBwYXR0ZXJuIG1hdGNoaW5nLiBJbnN0ZWFkLFxuICAgd2UgcmV1c2UgdGhlIGhpZ2hseSBwYXJ0aWFsIGFuZCBtdWNoIGxlc3Mgd2VsbC1kZWZpbmVkIGZ1bmN0aW9uXG4gICBgdHlwZV9mb3JtYXRgIHRoYXQgaGFzIGxvc3QgYWxsIGtub3dsZWRnZSBvZiB0aGUgY29ycmVzcG9uZGVuY2VcbiAgIGJldHdlZW4gdGhlIGFyZ3VtZW50J3MgdHlwZXMuXG5cbiAgIEJlc2lkZXMgdGhlIGZhY3QgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldXNlcyBhIGxvdCBvZiB0aGVcbiAgIGB0eXBlX2Zvcm1hdGAgbG9naWMgKGVnLjogc2VlaW5nIEludF90eSBpbiB0aGUgZm10dHkgcGFyYW1ldGVyIGRvZXNcbiAgIG5vdCBsZXQgeW91IG1hdGNoIG9uIEludCBvbmx5LCBhcyB5b3UgbWF5IGluIGZhY3QgaGF2ZSBGbG9hdFxuICAgKEFyZ19wYWRkaW5nLCAuLi4pIChcIiUuKmRcIikgYmVnaW5uaW5nIHdpdGggYW4gSW50X3R5KSwgaXQgaXMgYWxzb1xuICAgYSBwYXJ0aWFsIGZ1bmN0aW9uLCBiZWNhdXNlIHRoZSB0eXBpbmcgaW5mb3JtYXRpb24gaW4gYSBmb3JtYXQgaXNcbiAgIG5vdCBxdWl0ZSBlbm91Z2ggdG8gcmVjb25zdHJ1Y3QgaXQgdW5hbWJpZ3VvdXNseS4gRm9yIGV4YW1wbGUsIHRoZVxuICAgZm9ybWF0IHR5cGVzIG9mIFwiJWQlX3JcIiBhbmQgXCIlX3IlZFwiIGhhdmUgdGhlIHNhbWUgZm9ybWF0NlxuICAgcGFyYW1ldGVycywgYnV0IHRoZXkgYXJlIG5vdCBhdCBhbGwgZXhjaGFuZ2VhYmxlLCBhbmQgcHV0dGluZyBvbmVcbiAgIGluIHBsYWNlIG9mIHRoZSBvdGhlciBtdXN0IHJlc3VsdCBpbiBhIGR5bmFtaWMgZmFpbHVyZS5cblxuICAgR2l2ZW4gdGhhdDpcbiAgIC0gd2UnZCBoYXZlIHRvIGR1cGxpY2F0ZSBhIGxvdCBvZiBub24tdHJpdmlhbCB0eXBpbmcgbG9naWMgZnJvbSB0eXBlX2Zvcm1hdFxuICAgLSB0aGlzIHdvdWxkbid0IGV2ZW4gZWxpbWluYXRlIChhbGwpIHRoZSBkeW5hbWljIGZhaWx1cmVzXG4gICB3ZSBkZWNpZGVkIHRvIGp1c3QgcmV1c2UgdHlwZV9mb3JtYXQgZGlyZWN0bHkgZm9yIG5vdy5cbiopXG5sZXQgcmVjYXN0IDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyXG4gIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10XG49IGZ1biBmbXQgZm10dHkgLT5cbiAgdHlwZV9mb3JtYXQgZm10IChlcmFzZV9yZWwgKHN5bW0gZm10dHkpKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBQcmludGluZyB0b29scyAqKVxuXG4oKiBBZGQgcGFkZGluZyBzcGFjZXMgYXJvdW5kIGEgc3RyaW5nLiAqKVxubGV0IGZpeF9wYWRkaW5nIHBhZHR5IHdpZHRoIHN0ciA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgd2lkdGgsIHBhZHR5ID1cbiAgICBhYnMgd2lkdGgsXG4gICAgKCogd2hpbGUgbGl0ZXJhbCBwYWRkaW5nIHdpZHRocyBhcmUgYWx3YXlzIG5vbi1uZWdhdGl2ZSxcbiAgICAgICBkeW5hbWljYWxseS1zZXQgd2lkdGhzIChBcmdfcGFkZGluZywgZWcuICUqZCkgbWF5IGJlIG5lZ2F0aXZlO1xuICAgICAgIHdlIGludGVycHJldCB0aG9zZSBhcyBzcGVjaWZ5aW5nIGEgcGFkZGluZy10by10aGUtbGVmdDsgdGhpc1xuICAgICAgIG1lYW5zIHRoYXQgJzAnIG1heSBnZXQgZHJvcHBlZCBldmVuIGlmIGl0IHdhcyBleHBsaWNpdGx5IHNldCxcbiAgICAgICBidXQ6XG4gICAgICAgLSB0aGlzIGlzIHdoYXQgdGhlIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBkb2VzLCBhbmRcbiAgICAgICAgIHdlIHByZXNlcnZlIGNvbXBhdGliaWxpdHkgaWYgcG9zc2libGVcbiAgICAgICAtIHdlIGNvdWxkIG9ubHkgc2lnbmFsIHRoaXMgaXNzdWUgYnkgZmFpbGluZyBhdCBydW50aW1lLFxuICAgICAgICAgd2hpY2ggaXMgbm90IHZlcnkgbmljZS4uLiAqKVxuICAgIGlmIHdpZHRoIDwgMCB0aGVuIExlZnQgZWxzZSBwYWR0eSBpblxuICBpZiB3aWR0aCA8PSBsZW4gdGhlbiBzdHIgZWxzZVxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIHdpZHRoIChpZiBwYWR0eSA9IFplcm9zIHRoZW4gJzAnIGVsc2UgJyAnKSBpblxuICAgIGJlZ2luIG1hdGNoIHBhZHR5IHdpdGhcbiAgICB8IExlZnQgIC0+IFN0cmluZy5ibGl0IHN0ciAwIHJlcyAwIGxlblxuICAgIHwgUmlnaHQgLT4gU3RyaW5nLmJsaXQgc3RyIDAgcmVzICh3aWR0aCAtIGxlbikgbGVuXG4gICAgfCBaZXJvcyB3aGVuIGxlbiA+IDAgJiYgKHN0ci5bMF0gPSAnKycgfHwgc3RyLlswXSA9ICctJyB8fCBzdHIuWzBdID0gJyAnKSAtPlxuICAgICAgQnl0ZXMuc2V0IHJlcyAwIHN0ci5bMF07XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMSByZXMgKHdpZHRoIC0gbGVuICsgMSkgKGxlbiAtIDEpXG4gICAgfCBaZXJvcyB3aGVuIGxlbiA+IDEgJiYgc3RyLlswXSA9ICcwJyAmJiAoc3RyLlsxXSA9ICd4JyB8fCBzdHIuWzFdID0gJ1gnKSAtPlxuICAgICAgQnl0ZXMuc2V0IHJlcyAxIHN0ci5bMV07XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMiByZXMgKHdpZHRoIC0gbGVuICsgMikgKGxlbiAtIDIpXG4gICAgfCBaZXJvcyAtPlxuICAgICAgU3RyaW5nLmJsaXQgc3RyIDAgcmVzICh3aWR0aCAtIGxlbikgbGVuXG4gICAgZW5kO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIEFkZCAnMCcgcGFkZGluZyB0byBpbnQsIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiAqKVxubGV0IGZpeF9pbnRfcHJlY2lzaW9uIHByZWMgc3RyID1cbiAgbGV0IHByZWMgPSBhYnMgcHJlYyBpblxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbWF0Y2ggc3RyLlswXSB3aXRoXG4gIHwgKCcrJyB8ICctJyB8ICcgJykgYXMgYyB3aGVuIHByZWMgKyAxID4gbGVuIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKHByZWMgKyAxKSAnMCcgaW5cbiAgICBCeXRlcy5zZXQgcmVzIDAgYztcbiAgICBTdHJpbmcuYmxpdCBzdHIgMSByZXMgKHByZWMgLSBsZW4gKyAyKSAobGVuIC0gMSk7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCAnMCcgd2hlbiBwcmVjICsgMiA+IGxlbiAmJiBsZW4gPiAxICYmIChzdHIuWzFdID0gJ3gnIHx8IHN0ci5bMV0gPSAnWCcpIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKHByZWMgKyAyKSAnMCcgaW5cbiAgICBCeXRlcy5zZXQgcmVzIDEgc3RyLlsxXTtcbiAgICBTdHJpbmcuYmxpdCBzdHIgMiByZXMgKHByZWMgLSBsZW4gKyA0KSAobGVuIC0gMik7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCAnMCcgLi4gJzknIHwgJ2EnIC4uICdmJyB8ICdBJyAuLiAnRicgd2hlbiBwcmVjID4gbGVuIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgcHJlYyAnMCcgaW5cbiAgICBTdHJpbmcuYmxpdCBzdHIgMCByZXMgKHByZWMgLSBsZW4pIGxlbjtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuICB8IF8gLT5cbiAgICBzdHJcblxuKCogRXNjYXBlIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgT0NhbWwgbGV4aW5nIGNvbnZlbnRpb24uICopXG5sZXQgc3RyaW5nX3RvX2NhbWxfc3RyaW5nIHN0ciA9XG4gIGxldCBzdHIgPSBTdHJpbmcuZXNjYXBlZCBzdHIgaW5cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgcmVzID0gQnl0ZXMubWFrZSAobCArIDIpICdcXFwiJyBpblxuICBTdHJpbmcudW5zYWZlX2JsaXQgc3RyIDAgcmVzIDEgbDtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxuKCogR2VuZXJhdGUgdGhlIGZvcm1hdF9pbnQvaW50MzIvbmF0aXZlaW50L2ludDY0IGZpcnN0IGFyZ3VtZW50XG4gICBmcm9tIGFuIGludF9jb252LiAqKVxubGV0IGZvcm1hdF9vZl9pY29udiA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlZFwiIHwgSW50X3BkIC0+IFwiJStkXCIgfCBJbnRfc2QgLT4gXCIlIGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJWlcIiB8IEludF9waSAtPiBcIiUraVwiIHwgSW50X3NpIC0+IFwiJSBpXCJcbiAgfCBJbnRfeCAtPiBcIiV4XCIgfCBJbnRfQ3ggLT4gXCIlI3hcIlxuICB8IEludF9YIC0+IFwiJVhcIiB8IEludF9DWCAtPiBcIiUjWFwiXG4gIHwgSW50X28gLT4gXCIlb1wiIHwgSW50X0NvIC0+IFwiJSNvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiV1XCJcblxubGV0IGZvcm1hdF9vZl9pY29udkwgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJUxkXCIgfCBJbnRfcGQgLT4gXCIlK0xkXCIgfCBJbnRfc2QgLT4gXCIlIExkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVMaVwiIHwgSW50X3BpIC0+IFwiJStMaVwiIHwgSW50X3NpIC0+IFwiJSBMaVwiXG4gIHwgSW50X3ggLT4gXCIlTHhcIiB8IEludF9DeCAtPiBcIiUjTHhcIlxuICB8IEludF9YIC0+IFwiJUxYXCIgfCBJbnRfQ1ggLT4gXCIlI0xYXCJcbiAgfCBJbnRfbyAtPiBcIiVMb1wiIHwgSW50X0NvIC0+IFwiJSNMb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIlTHVcIlxuXG5sZXQgZm9ybWF0X29mX2ljb252bCA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlbGRcIiB8IEludF9wZCAtPiBcIiUrbGRcIiB8IEludF9zZCAtPiBcIiUgbGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJWxpXCIgfCBJbnRfcGkgLT4gXCIlK2xpXCIgfCBJbnRfc2kgLT4gXCIlIGxpXCJcbiAgfCBJbnRfeCAtPiBcIiVseFwiIHwgSW50X0N4IC0+IFwiJSNseFwiXG4gIHwgSW50X1ggLT4gXCIlbFhcIiB8IEludF9DWCAtPiBcIiUjbFhcIlxuICB8IEludF9vIC0+IFwiJWxvXCIgfCBJbnRfQ28gLT4gXCIlI2xvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiVsdVwiXG5cbmxldCBmb3JtYXRfb2ZfaWNvbnZuID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVuZFwiIHwgSW50X3BkIC0+IFwiJStuZFwiIHwgSW50X3NkIC0+IFwiJSBuZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlbmlcIiB8IEludF9waSAtPiBcIiUrbmlcIiB8IEludF9zaSAtPiBcIiUgbmlcIlxuICB8IEludF94IC0+IFwiJW54XCIgfCBJbnRfQ3ggLT4gXCIlI254XCJcbiAgfCBJbnRfWCAtPiBcIiVuWFwiIHwgSW50X0NYIC0+IFwiJSNuWFwiXG4gIHwgSW50X28gLT4gXCIlbm9cIiB8IEludF9DbyAtPiBcIiUjbm9cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJW51XCJcblxuKCogR2VuZXJhdGUgdGhlIGZvcm1hdF9mbG9hdCBmaXJzdCBhcmd1bWVudCBmcm9tIGEgZmxvYXRfY29udi4gKilcbmxldCBmb3JtYXRfb2ZfZmNvbnYgZmNvbnYgcHJlYyA9XG4gICAgbGV0IHByZWMgPSBhYnMgcHJlYyBpblxuICAgIGxldCBzeW1iID0gY2hhcl9vZl9mY29udiB+Y0Y6J2cnIGZjb252IGluXG4gICAgbGV0IGJ1ZiA9IGJ1ZmZlcl9jcmVhdGUgMTYgaW5cbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgICBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnY7XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLic7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIHByZWMpO1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgc3ltYjtcbiAgICBidWZmZXJfY29udGVudHMgYnVmXG5cbmxldCB0cmFuc2Zvcm1faW50X2FsdCBpY29udiBzID1cbiAgbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAtPlxuICAgIGxldCBkaWdpdHMgPVxuICAgICAgbGV0IG4gPSByZWYgMCBpblxuICAgICAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgICAgbWF0Y2ggU3RyaW5nLnVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgICAgfCAnMCcuLic5JyAtPiBpbmNyIG5cbiAgICAgICAgfCBfIC0+ICgpXG4gICAgICBkb25lO1xuICAgICAgIW5cbiAgICBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgKFN0cmluZy5sZW5ndGggcyArIChkaWdpdHMgLSAxKSAvIDMpIGluXG4gICAgbGV0IHBvcyA9IHJlZiAwIGluXG4gICAgbGV0IHB1dCBjID0gQnl0ZXMuc2V0IGJ1ZiAhcG9zIGM7IGluY3IgcG9zIGluXG4gICAgbGV0IGxlZnQgPSByZWYgKChkaWdpdHMgLSAxKSBtb2QgMyArIDEpIGluXG4gICAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgIG1hdGNoIFN0cmluZy51bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICcwJy4uJzknIGFzIGMgLT5cbiAgICAgICAgICBpZiAhbGVmdCA9IDAgdGhlbiAocHV0ICdfJzsgbGVmdCA6PSAzKTsgZGVjciBsZWZ0OyBwdXQgY1xuICAgICAgfCBjIC0+IHB1dCBjXG4gICAgZG9uZTtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGJ1ZlxuICB8IF8gLT4gc1xuXG4oKiBDb252ZXJ0IGFuIGludGVnZXIgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIGEgY29udmVyc2lvbi4gKilcbmxldCBjb252ZXJ0X2ludCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQgKGZvcm1hdF9vZl9pY29udiBpY29udikgbilcbmxldCBjb252ZXJ0X2ludDMyIGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludDMyIChmb3JtYXRfb2ZfaWNvbnZsIGljb252KSBuKVxubGV0IGNvbnZlcnRfbmF0aXZlaW50IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X25hdGl2ZWludCAoZm9ybWF0X29mX2ljb252biBpY29udikgbilcbmxldCBjb252ZXJ0X2ludDY0IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludDY0IChmb3JtYXRfb2ZfaWNvbnZMIGljb252KSBuKVxuXG4oKiBDb252ZXJ0IGEgZmxvYXQgdG8gc3RyaW5nLiAqKVxuKCogRml4IHNwZWNpYWwgY2FzZSBvZiBcIk9DYW1sIGZsb2F0IGZvcm1hdFwiLiAqKVxubGV0IGNvbnZlcnRfZmxvYXQgZmNvbnYgcHJlYyB4ID1cbiAgbGV0IGhleCAoKSA9XG4gICAgbGV0IHNpZ24gPVxuICAgICAgbWF0Y2ggZnN0IGZjb252IHdpdGhcbiAgICAgIHwgRmxvYXRfZmxhZ19wIC0+ICcrJ1xuICAgICAgfCBGbG9hdF9mbGFnX3MgLT4gJyAnXG4gICAgICB8IF8gLT4gJy0nIGluXG4gICAgaGV4c3RyaW5nX29mX2Zsb2F0IHggcHJlYyBzaWduIGluXG4gIGxldCBhZGRfZG90X2lmX25lZWRlZCBzdHIgPVxuICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICAgIGxldCByZWMgaXNfdmFsaWQgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW4gZmFsc2UgZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2ldIHdpdGhcbiAgICAgICAgfCAnLicgfCAnZScgfCAnRScgLT4gdHJ1ZVxuICAgICAgICB8IF8gLT4gaXNfdmFsaWQgKGkgKyAxKSBpblxuICAgIGlmIGlzX3ZhbGlkIDAgdGhlbiBzdHIgZWxzZSBzdHIgXiBcIi5cIiBpblxuICBsZXQgY2FtbF9zcGVjaWFsX3ZhbCBzdHIgPSBtYXRjaCBjbGFzc2lmeV9mbG9hdCB4IHdpdGhcbiAgICB8IEZQX25vcm1hbCB8IEZQX3N1Ym5vcm1hbCB8IEZQX3plcm8gLT4gc3RyXG4gICAgfCBGUF9pbmZpbml0ZSAtPiBpZiB4IDwgMC4wIHRoZW4gXCJuZWdfaW5maW5pdHlcIiBlbHNlIFwiaW5maW5pdHlcIlxuICAgIHwgRlBfbmFuIC0+IFwibmFuXCIgaW5cbiAgbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9oIC0+IGhleCAoKVxuICB8IEZsb2F0X0ggLT4gU3RyaW5nLnVwcGVyY2FzZV9hc2NpaSAoaGV4ICgpKVxuICB8IEZsb2F0X0NGIC0+IGNhbWxfc3BlY2lhbF92YWwgKGhleCAoKSlcbiAgfCBGbG9hdF9GIC0+XG4gICAgbGV0IHN0ciA9IGZvcm1hdF9mbG9hdCAoZm9ybWF0X29mX2Zjb252IGZjb252IHByZWMpIHggaW5cbiAgICBjYW1sX3NwZWNpYWxfdmFsIChhZGRfZG90X2lmX25lZWRlZCBzdHIpXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0cgLT5cbiAgICBmb3JtYXRfZmxvYXQgKGZvcm1hdF9vZl9mY29udiBmY29udiBwcmVjKSB4XG5cbigqIENvbnZlcnQgYSBjaGFyIHRvIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgT0NhbWwgbGV4aWNhbCBjb252ZW50aW9uLiAqKVxubGV0IGZvcm1hdF9jYW1sX2NoYXIgYyA9XG4gIGxldCBzdHIgPSBDaGFyLmVzY2FwZWQgYyBpblxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChsICsgMikgJ1xcJycgaW5cbiAgU3RyaW5nLnVuc2FmZV9ibGl0IHN0ciAwIHJlcyAxIGw7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIENvbnZlcnQgYSBmb3JtYXQgdHlwZSB0byBzdHJpbmcgKilcbmxldCBzdHJpbmdfb2ZfZm10dHkgZm10dHkgPVxuICBsZXQgYnVmID0gYnVmZmVyX2NyZWF0ZSAxNiBpblxuICBicHJpbnRfZm10dHkgYnVmIGZtdHR5O1xuICBidWZmZXJfY29udGVudHMgYnVmXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAoKiBHZW5lcmljIHByaW50aW5nIGZ1bmN0aW9uICopXG5cbigqIE1ha2UgYSBnZW5lcmljIHByaW50aW5nIGZ1bmN0aW9uLiAqKVxuKCogVXNlZCB0byBnZW5lcmF0ZSBQcmludGYgYW5kIEZvcm1hdCBwcmludGluZyBmdW5jdGlvbnMuICopXG4oKiBQYXJhbWV0ZXJzOlxuICAgICBrOiBhIGNvbnRpbnVhdGlvbiBmaW5hbGx5IGFwcGxpZWQgdG8gdGhlIG91dHB1dCBzdHJlYW0gYW5kIHRoZSBhY2N1bXVsYXRvci5cbiAgICAgbzogdGhlIG91dHB1dCBzdHJlYW0gKHNlZSBrLCAlYSBhbmQgJXQpLlxuICAgICBhY2M6IHJldiBsaXN0IG9mIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXNoLCBmb3JtYXR0aW5nLCAuLi4pLlxuICAgICBmbXQ6IHRoZSBmb3JtYXQuICopXG5sZXQgcmVjIG1ha2VfcHJpbnRmIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gIHwgQ2hhciByZXN0IC0+XG4gICAgZnVuIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfY2hhciAoYWNjLCBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIGZ1biBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmb3JtYXRfY2FtbF9jaGFyIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIG1ha2VfcGFkZGluZyBrIGFjYyByZXN0IHBhZCAoZnVuIHN0ciAtPiBzdHIpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgc3RyaW5nX3RvX2NhbWxfc3RyaW5nXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQgaWNvbnZcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50MzIgaWNvbnZcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X25hdGl2ZWludCBpY29udlxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQ2NCBpY29udlxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfZmxvYXRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBmY29udlxuICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgc3RyaW5nX29mX2Jvb2xcbiAgfCBBbHBoYSByZXN0IC0+XG4gICAgZnVuIGYgeCAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGVsYXkgKGFjYywgZnVuIG8gLT4gZiBvIHgpKSByZXN0XG4gIHwgVGhldGEgcmVzdCAtPlxuICAgIGZ1biBmIC0+IG1ha2VfcHJpbnRmIGsgKEFjY19kZWxheSAoYWNjLCBmKSkgcmVzdFxuICB8IEN1c3RvbSAoYXJpdHksIGYsIHJlc3QpIC0+XG4gICAgbWFrZV9jdXN0b20gayBhY2MgcmVzdCBhcml0eSAoZiAoKSlcbiAgfCBSZWFkZXIgXyAtPlxuICAgICgqIFRoaXMgY2FzZSBpcyBpbXBvc3NpYmxlLCBieSB0eXBpbmcgb2YgZm9ybWF0cy4gKilcbiAgICAoKiBJbmRlZWQsIHNpbmNlIHByaW50ZiBhbmQgY28uIHRha2UgYSBmb3JtYXQ0IGFzIGFyZ3VtZW50LCB0aGUgJ2QgYW5kICdlXG4gICAgICAgdHlwZSBwYXJhbWV0ZXJzIG9mIGZtdCBhcmUgb2J2aW91c2x5IGVxdWFscy4gVGhlIFJlYWRlciBpcyB0aGVcbiAgICAgICBvbmx5IGNvbnN0cnVjdG9yIHdoaWNoIHRvdWNoICdkIGFuZCAnZSB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIGZvcm1hdFxuICAgICAgIHR5cGUsIGl0IGFkZHMgYW4gKC0+KSB0byB0aGUgJ2QgcGFyYW1ldGVycy4gQ29uc2VxdWVudGx5LCBhIGZvcm1hdDRcbiAgICAgICBjYW5ub3QgY29udGFpbiBhIFJlYWRlciBub2RlLCBleGNlcHQgaW4gdGhlIHN1Yi1mb3JtYXQgYXNzb2NpYXRlZCB0b1xuICAgICAgIGFuICV7Li4uJX0uIEl0J3Mgbm90IGEgcHJvYmxlbSBiZWNhdXNlIG1ha2VfcHJpbnRmIGRvIG5vdCBjYWxsXG4gICAgICAgaXRzZWxmIHJlY3Vyc2l2ZWx5IG9uIHRoZSBzdWItZm9ybWF0IGFzc29jaWF0ZWQgdG8gJXsuLi4lfS4gKilcbiAgICBhc3NlcnQgZmFsc2VcbiAgfCBGbHVzaCByZXN0IC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX2ZsdXNoIGFjYykgcmVzdFxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2Nfc3RyaW5nX2xpdGVyYWwgKGFjYywgc3RyKSkgcmVzdFxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19jaGFyX2xpdGVyYWwgKGFjYywgY2hyKSkgcmVzdFxuXG4gIHwgRm9ybWF0X2FyZyAoXywgc3ViX2ZtdHR5LCByZXN0KSAtPlxuICAgIGxldCB0eSA9IHN0cmluZ19vZl9mbXR0eSBzdWJfZm10dHkgaW5cbiAgICAoZnVuIHN0ciAtPlxuICAgICAgaWdub3JlIHN0cjtcbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCB0eSkpIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0IChfLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBmdW4gKEZvcm1hdCAoZm10LCBfKSkgLT4gbWFrZV9wcmludGYgayBhY2NcbiAgICAgIChjb25jYXRfZm10IChyZWNhc3QgZm10IGZtdHR5KSByZXN0KVxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT5cbiAgICBsZXQgbmV3X2FjYyA9IEFjY19pbnZhbGlkX2FyZyAoYWNjLCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJVtcIikgaW5cbiAgICBmdW4gXyAtPiBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKF8sIHJlc3QpIC0+XG4gICAgKCogVGhpcyBjYXNlIHNob3VsZCBiZSByZWZ1c2VkIGZvciBQcmludGYuICopXG4gICAgKCogQWNjZXB0ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICopXG4gICAgKCogSW50ZXJwcmV0ICVsLCAlbiBhbmQgJUwgYXMgJXUuICopXG4gICAgZnVuIG4gLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZvcm1hdF9pbnQgXCIldVwiIG4pIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICBmdW4gYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9jaGFyIChhY2MsIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICBtYWtlX2lnbm9yZWRfcGFyYW0gayBhY2MgaWduIHJlc3RcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2xpdCAoYWNjLCBmbXRpbmdfbGl0KSkgcmVzdFxuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgbGV0IGsnIGthY2MgPVxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfZ2VuIChhY2MsIEFjY19vcGVuX3RhZyBrYWNjKSkgcmVzdCBpblxuICAgIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10J1xuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgbGV0IGsnIGthY2MgPVxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfZ2VuIChhY2MsIEFjY19vcGVuX2JveCBrYWNjKSkgcmVzdCBpblxuICAgIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10J1xuXG4gIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgIGsgYWNjXG5cbigqIERlbGF5IHRoZSBlcnJvciAoSW52YWxpZF9hcmd1bWVudCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJV9cIikuICopXG4oKiBHZW5lcmF0ZSBmdW5jdGlvbnMgdG8gdGFrZSByZW1haW5pbmcgYXJndW1lbnRzIChhZnRlciB0aGUgXCIlX1wiKS4gKilcbmFuZCBtYWtlX2lnbm9yZWRfcGFyYW0gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+XG4gICAgKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50IChfLCBfKSAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludDMyIChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50NjQgKF8sIF8pICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zsb2F0IChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyBfICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoXywgZm10dHkpIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyBmbXR0eSBmbXRcbiAgfCBJZ25vcmVkX3JlYWRlciAgICAgICAgICAgICAgICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuXG5cbigqIFNwZWNpYWwgY2FzZSBvZiBwcmludGYgXCIlXyhcIi4gKilcbmFuZCBtYWtlX2Zyb21fZm10dHkgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBmbXR0eSAtPlxuICAgICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10dHkgZm10IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnRfdHkgcmVzdCAgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnQzMl90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnQ2NF90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBGbG9hdF90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBCb29sX3R5IHJlc3QgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBBbHBoYV90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFRoZXRhX3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEFueV90eSByZXN0ICAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFJlYWRlcl90eSBfICAgICAgICAgICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IF8gICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IEZvcm1hdF9hcmdfdHkgKF8sIHJlc3QpIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEVuZF9vZl9mbXR0eSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEpIHR5MiBpblxuICAgIGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyAoY29uY2F0X2ZtdHR5IHR5IHJlc3QpIGZtdFxuXG4oKiBJbnNlcnQgYW4gQWNjX2ludmFsaWRfYXJnIGluIHRoZSBhY2N1bXVsYXRvciBhbmQgY29udGludWUgdG8gZ2VuZXJhdGVcbiAgIGNsb3N1cmVzIHRvIGdldCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4gKilcbmFuZCBtYWtlX2ludmFsaWRfYXJnIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10IC0+XG4gIG1ha2VfcHJpbnRmIGsgKEFjY19pbnZhbGlkX2FyZyAoYWNjLCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJV9cIikpIGZtdFxuXG4oKiBGaXggcGFkZGluZywgdGFrZSBpdCBhcyBhbiBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50IGlmIG5lZWRlZC4gKilcbmFuZCBtYWtlX3BhZGRpbmcgOiB0eXBlIHggeiBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeiAtPiBhKSBwYWRkaW5nIC0+ICh6IC0+IHN0cmluZykgLT4geCA9XG4gIGZ1biBrIGFjYyBmbXQgcGFkIHRyYW5zIC0+IG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCB0cmFucyB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgd2lkdGgpIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZpeF9wYWRkaW5nIHBhZHR5IHdpZHRoICh0cmFucyB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuXG4oKiBGaXggcGFkZGluZyBhbmQgcHJlY2lzaW9uIGZvciBpbnQsIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQuICopXG4oKiBUYWtlIG9uZSBvciB0d28gZXh0cmEgaW50ZWdlciBhcmd1bWVudHMgaWYgbmVlZGVkLiAqKVxuYW5kIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIDogdHlwZSB4IHkgeiBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT4gKGludF9jb252IC0+IHogLT4gc3RyaW5nKSAtPlxuICAgIGludF9jb252IC0+IHggPVxuICBmdW4gayBhY2MgZm10IHBhZCBwcmVjIHRyYW5zIGljb252IC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gIHwgTm9fcGFkZGluZywgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSB0cmFucyBpY29udiB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG5cbigqIENvbnZlcnQgYSBmbG9hdCwgZml4IHBhZGRpbmcgYW5kIHByZWNpc2lvbiBpZiBuZWVkZWQuICopXG4oKiBUYWtlIHRoZSBmbG9hdCBhcmd1bWVudCBhbmQgb25lIG9yIHR3byBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50cyBpZiBuZWVkZWQuICopXG5hbmQgbWFrZV9mbG9hdF9wYWRkaW5nX3ByZWNpc2lvbiA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh5LCBmbG9hdCAtPiBhKSBwcmVjaXNpb24gLT4gZmxvYXRfY29udiAtPiB4ID1cbiAgZnVuIGsgYWNjIGZtdCBwYWQgcHJlYyBmY29udiAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICB8IE5vX3BhZGRpbmcsIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIGxldCBzdHInID0gZml4X3BhZGRpbmcgcGFkdHkgdyBzdHIgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHInKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIGxldCBzdHInID0gZml4X3BhZGRpbmcgcGFkdHkgdyBzdHIgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHInKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuYW5kIG1ha2VfY3VzdG9tIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiB4IC0+IHkgPVxuICBmdW4gayBhY2MgcmVzdCBhcml0eSBmIC0+IG1hdGNoIGFyaXR5IHdpdGhcbiAgfCBDdXN0b21femVybyAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgZikpIHJlc3RcbiAgfCBDdXN0b21fc3VjYyBhcml0eSAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBtYWtlX2N1c3RvbSBrIGFjYyByZXN0IGFyaXR5IChmIHgpXG5cbmxldCBjb25zdCB4IF8gPSB4XG5cbmxldCByZWMgbWFrZV9pcHJpbnRmIDogdHlwZSBhIGIgYyBkIGUgZiBzdGF0ZS5cbiAgKHN0YXRlIC0+IGYpIC0+IHN0YXRlIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG4gIGZ1biBrIG8gZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gICAgfCBDaGFyIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IENhbWxfc3RyaW5nIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ2FtbF9zdHJpbmcgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDYW1sX3N0cmluZyAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgSW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBJbnQzMiAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgTmF0aXZlaW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBJbnQ2NCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgRmxvYXQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEJvb2wgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBCb29sIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQm9vbCAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgQWxwaGEgcmVzdCAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBUaGV0YSByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDdXN0b20gKGFyaXR5LCBfLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9jdXN0b21fYXJpdHkgayBvIHJlc3QgYXJpdHlcbiAgICB8IFJlYWRlciBfIC0+XG4gICAgICAgICgqIFRoaXMgY2FzZSBpcyBpbXBvc3NpYmxlLCBieSB0eXBpbmcgb2YgZm9ybWF0cy4gIFNlZSB0aGVcbiAgICAgICAgICAgbm90ZSBpbiB0aGUgY29ycmVzcG9uZGluZyBjYXNlIGZvciBtYWtlX3ByaW50Zi4gKilcbiAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgfCBGbHVzaCByZXN0IC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgQ2hhcl9saXRlcmFsIChfLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IEZvcm1hdF9hcmcgKF8sIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBGb3JtYXRfc3Vic3QgKF8sIGZtdHR5LCByZXN0KSAtPlxuICAgICAgICBmdW4gKEZvcm1hdCAoZm10LCBfKSkgLT5cbiAgICAgICAgICBtYWtlX2lwcmludGYgayBvXG4gICAgICAgICAgICAoY29uY2F0X2ZtdCAocmVjYXN0IGZtdCBmbXR0eSkgcmVzdClcbiAgICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lnbm9yZWRfcGFyYW0gKGZ1biBfIC0+IGsgbykgKEVuZF9vZl9hY2MpIGlnbiByZXN0XG4gICAgfCBGb3JtYXR0aW5nX2xpdCAoXywgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgKGZ1biBrb2MgLT4gbWFrZV9pcHJpbnRmIGsga29jIHJlc3QpIG8gZm10J1xuICAgIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIChmdW4ga29jIC0+IG1ha2VfaXByaW50ZiBrIGtvYyByZXN0KSBvIGZtdCdcbiAgICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICAgICAgayBvXG5hbmQgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gOlxuICB0eXBlIHggeSB6IGEgYiBjIGQgZSBmIHN0YXRlLlxuICAoc3RhdGUgLT4gZikgLT4gc3RhdGUgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT4geCA9XG4gIGZ1biBrIG8gZm10IHBhZCBwcmVjIC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gICAgfCBOb19wYWRkaW5nICAgLCBOb19wcmVjaXNpb24gICAgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTm9fcGFkZGluZyAgICwgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IE5vX3BhZGRpbmcgICAsIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IExpdF9wYWRkaW5nIF8sIE5vX3ByZWNpc2lvbiAgICAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBMaXRfcGFkZGluZyBfLCBMaXRfcHJlY2lzaW9uIF8gLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTGl0X3BhZGRpbmcgXywgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgTm9fcHJlY2lzaW9uICAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSkpXG5hbmQgZm5fb2ZfY3VzdG9tX2FyaXR5IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgc3RhdGUuXG4gIChzdGF0ZSAtPiBmKSAtPlxuICBzdGF0ZSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4geSA9XG4gIGZ1biBrIG8gZm10IC0+IGZ1bmN0aW9uXG4gICAgfCBDdXN0b21femVybyAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIGZtdFxuICAgIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT5cbiAgICAgICAgY29uc3QgKGZuX29mX2N1c3RvbV9hcml0eSBrIG8gZm10IGFyaXR5KVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBDb250aW51YXRpb25zIGZvciBtYWtlX3ByaW50ZiAqKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGFuIG91dHB1dF9zdHJlYW0uICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIG1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBvdXRwdXRfYWNjIG8gYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGZtdGluZ19saXQpIC0+XG4gICAgbGV0IHMgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gXCJAe1wiOyBvdXRwdXRfYWNjIG8gYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gXCJAW1wiOyBvdXRwdXRfYWNjIG8gYWNjJztcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfY2hhciBvIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gb3V0cHV0X2FjYyBvIHA7IGYgb1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIG8gcDsgZmx1c2ggb1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBvdXRwdXRfYWNjIG8gcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGEgYnVmZmVyLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBtYWtlX3ByaW50Zi4gKilcbmxldCByZWMgYnVmcHV0X2FjYyBiIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmbXRpbmdfbGl0KSAtPlxuICAgIGxldCBzID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAe1wiOyBidWZwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQFtcIjsgYnVmcHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfY2hhciBiIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gYnVmcHV0X2FjYyBiIHA7IGYgYlxuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBidWZwdXRfYWNjIGIgcDtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gYnVmcHV0X2FjYyBiIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIGJ1ZnB1dF9hY2MgYnkgdGhlIGludGVycHJldGF0aW9uIG9mICVhIGFuZCAldC4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgbWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgYiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZm10aW5nX2xpdCkgLT5cbiAgICBsZXQgcyA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQHtcIjsgc3RycHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkBbXCI7IHN0cnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX2NoYXIgYiBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIChmICgpKVxuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIGIgcDtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gc3RycHV0X2FjYyBiIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRXJyb3IgbWFuYWdlbWVudCAqKVxuXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIHByZXR0eS1wcmludGVkIGVycm9yIG1lc3NhZ2UuICopXG5sZXQgZmFpbHdpdGhfbWVzc2FnZSAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgayBhY2MgPSBzdHJwdXRfYWNjIGJ1ZiBhY2M7IGZhaWx3aXRoIChCdWZmZXIuY29udGVudHMgYnVmKSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0dGluZyB0b29scyAqKVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIG9wZW4gYmxvY2sgZGVzY3JpcHRpb24gKGluZGVudCwgYmxvY2tfdHlwZSkgKilcbmxldCBvcGVuX2JveF9vZl9zdHJpbmcgc3RyID1cbiAgaWYgc3RyID0gXCJcIiB0aGVuICgwLCBQcF9ib3gpIGVsc2VcbiAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgICBsZXQgaW52YWxpZF9ib3ggKCkgPSBmYWlsd2l0aF9tZXNzYWdlIFwiaW52YWxpZCBib3ggZGVzY3JpcHRpb24gJVNcIiBzdHIgaW5cbiAgICBsZXQgcmVjIHBhcnNlX3NwYWNlcyBpID1cbiAgICAgIGlmIGkgPSBsZW4gdGhlbiBpIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltpXSB3aXRoXG4gICAgICAgIHwgJyAnIHwgJ1xcdCcgLT4gcGFyc2Vfc3BhY2VzIChpICsgMSlcbiAgICAgICAgfCBfIC0+IGlcbiAgICBhbmQgcGFyc2VfbHdvcmQgaSBqID1cbiAgICAgIGlmIGogPSBsZW4gdGhlbiBqIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltqXSB3aXRoXG4gICAgICAgIHwgJ2EnIC4uICd6JyAtPiBwYXJzZV9sd29yZCBpIChqICsgMSlcbiAgICAgICAgfCBfIC0+IGpcbiAgICBhbmQgcGFyc2VfaW50IGkgaiA9XG4gICAgICBpZiBqID0gbGVuIHRoZW4gaiBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5bal0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT4gcGFyc2VfaW50IGkgKGogKyAxKVxuICAgICAgICB8IF8gLT4gaiBpblxuICAgIGxldCB3c3RhcnQgPSBwYXJzZV9zcGFjZXMgMCBpblxuICAgIGxldCB3ZW5kID0gcGFyc2VfbHdvcmQgd3N0YXJ0IHdzdGFydCBpblxuICAgIGxldCBib3hfbmFtZSA9IFN0cmluZy5zdWIgc3RyIHdzdGFydCAod2VuZCAtIHdzdGFydCkgaW5cbiAgICBsZXQgbnN0YXJ0ID0gcGFyc2Vfc3BhY2VzIHdlbmQgaW5cbiAgICBsZXQgbmVuZCA9IHBhcnNlX2ludCBuc3RhcnQgbnN0YXJ0IGluXG4gICAgbGV0IGluZGVudCA9XG4gICAgICBpZiBuc3RhcnQgPSBuZW5kIHRoZW4gMCBlbHNlXG4gICAgICAgIHRyeSBpbnRfb2Zfc3RyaW5nIChTdHJpbmcuc3ViIHN0ciBuc3RhcnQgKG5lbmQgLSBuc3RhcnQpKVxuICAgICAgICB3aXRoIEZhaWx1cmUgXyAtPiBpbnZhbGlkX2JveCAoKSBpblxuICAgIGxldCBleHBfZW5kID0gcGFyc2Vfc3BhY2VzIG5lbmQgaW5cbiAgICBpZiBleHBfZW5kIDw+IGxlbiB0aGVuIGludmFsaWRfYm94ICgpO1xuICAgIGxldCBib3hfdHlwZSA9IG1hdGNoIGJveF9uYW1lIHdpdGhcbiAgICAgIHwgXCJcIiB8IFwiYlwiIC0+IFBwX2JveFxuICAgICAgfCBcImhcIiAgICAgIC0+IFBwX2hib3hcbiAgICAgIHwgXCJ2XCIgICAgICAtPiBQcF92Ym94XG4gICAgICB8IFwiaHZcIiAgICAgLT4gUHBfaHZib3hcbiAgICAgIHwgXCJob3ZcIiAgICAtPiBQcF9ob3Zib3hcbiAgICAgIHwgXyAgICAgICAgLT4gaW52YWxpZF9ib3ggKCkgaW5cbiAgICAoaW5kZW50LCBib3hfdHlwZSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBQYXJzaW5nIHRvb2xzICopXG5cbigqIENyZWF0ZSBhIHBhZGRpbmdfZm10X2ViYiBmcm9tIGEgcGFkZGluZyBhbmQgYSBmb3JtYXQuICopXG4oKiBDb3B5IHRoZSBwYWRkaW5nIHRvIGRpc2pvaW4gdGhlIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudCBhbmQgcmVzdWx0LiAqKVxubGV0IG1ha2VfcGFkZGluZ19mbXRfZWJiIDogdHlwZSB4IHkgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+IChfLCBfLCBfLCBfLCBfLCBfKSBmbXQgLT5cbiAgICAgIChfLCBfLCBfLCBfLCBfKSBwYWRkaW5nX2ZtdF9lYmIgPVxuZnVuIHBhZCBmbXQgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nICAgICAgICAgLT4gUGFkZGluZ19mbXRfRUJCIChOb19wYWRkaW5nLCBmbXQpXG4gIHwgTGl0X3BhZGRpbmcgKHMsIHcpIC0+IFBhZGRpbmdfZm10X0VCQiAoTGl0X3BhZGRpbmcgKHMsIHcpLCBmbXQpXG4gIHwgQXJnX3BhZGRpbmcgcyAgICAgIC0+IFBhZGRpbmdfZm10X0VCQiAoQXJnX3BhZGRpbmcgcywgZm10KVxuXG4oKiBDcmVhdGUgYSBwcmVjaXNpb25fZm10X2ViYiBmcm9tIGEgcHJlY2lzaW9uIGFuZCBhIGZvcm1hdC4gKilcbigqIENvcHkgdGhlIHByZWNpc2lvbiB0byBkaXNqb2luIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnQgYW5kIHJlc3VsdC4gKilcbmxldCBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIDogdHlwZSB4IHkgLlxuICAgICh4LCB5KSBwcmVjaXNpb24gLT4gKF8sIF8sIF8sIF8sIF8sIF8pIGZtdCAtPlxuICAgICAgKF8sIF8sIF8sIF8sIF8pIHByZWNpc2lvbl9mbXRfZWJiID1cbmZ1biBwcmVjIGZtdCAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgfCBOb19wcmVjaXNpb24gICAgLT4gUHJlY2lzaW9uX2ZtdF9FQkIgKE5vX3ByZWNpc2lvbiwgZm10KVxuICB8IExpdF9wcmVjaXNpb24gcCAtPiBQcmVjaXNpb25fZm10X0VCQiAoTGl0X3ByZWNpc2lvbiBwLCBmbXQpXG4gIHwgQXJnX3ByZWNpc2lvbiAgIC0+IFByZWNpc2lvbl9mbXRfRUJCIChBcmdfcHJlY2lzaW9uLCBmbXQpXG5cbigqIENyZWF0ZSBhIHBhZHByZWNfZm10X2ViYiBmcm9tIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGEgZm9ybWF0LiAqKVxuKCogQ29weSB0aGUgcGFkZGluZyBhbmQgdGhlIHByZWNpc2lvbiB0byBkaXNqb2luIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudHNcbiAgIGFuZCByZXN1bHQuICopXG5sZXQgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgOiB0eXBlIHggeSB6IHQgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh6LCB0KSBwcmVjaXNpb24gLT5cbiAgICAoXywgXywgXywgXywgXywgXykgZm10IC0+XG4gICAgKF8sIF8sIF8sIF8sIF8pIHBhZHByZWNfZm10X2ViYiA9XG5mdW4gcGFkIHByZWMgZm10IC0+XG4gIGxldCBQcmVjaXNpb25fZm10X0VCQiAocHJlYywgZm10JykgPSBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIHByZWMgZm10IGluXG4gIG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAgICAgICAgIC0+IFBhZHByZWNfZm10X0VCQiAoTm9fcGFkZGluZywgcHJlYywgZm10JylcbiAgfCBMaXRfcGFkZGluZyAocywgdykgLT4gUGFkcHJlY19mbXRfRUJCIChMaXRfcGFkZGluZyAocywgdyksIHByZWMsIGZtdCcpXG4gIHwgQXJnX3BhZGRpbmcgcyAgICAgIC0+IFBhZHByZWNfZm10X0VCQiAoQXJnX3BhZGRpbmcgcywgcHJlYywgZm10JylcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHBhcnNpbmcgKilcblxuKCogUGFyc2UgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZm9ybWF0IGFuZCBjcmVhdGUgYSBmbXRfZWJiLiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIGluIGNhc2Ugb2YgaW52YWxpZCBmb3JtYXQuICopXG5sZXQgZm10X2ViYl9vZl9zdHJpbmcgP2xlZ2FjeV9iZWhhdmlvciBzdHIgPVxuICAoKiBQYXJhbWV0ZXJzIG5hbWluZyBjb252ZW50aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBsaXRfc3RhcnQ6IHN0YXJ0IG9mIHRoZSBsaXRlcmFsIHNlcXVlbmNlLiAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHN0cl9pbmQ6IGN1cnJlbnQgaW5kZXggaW4gdGhlIHN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gZW5kX2luZDogZW5kIG9mIHRoZSBjdXJyZW50IChzdWItKWZvcm1hdC4gICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBwY3RfaW5kOiBpbmRleCBvZiB0aGUgJyUnIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgKilcbiAgKCogICAtIHplcm86ICBpcyB0aGUgJzAnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gbWludXM6IGlzIHRoZSAnLScgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBwbHVzOiAgaXMgdGhlICcrJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIGhhc2g6ICBpcyB0aGUgJyMnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gc3BhY2U6IGlzIHRoZSAnICcgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBpZ246ICAgaXMgdGhlICdfJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIHBhZDogcGFkZGluZyBvZiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gcHJlYzogcHJlY2lzaW9uIG9mIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBzeW1iOiBjaGFyIHJlcHJlc2VudGluZyB0aGUgY29udmVyc2lvbiAoJ2MnLCAncycsICdkJywgLi4uKS4gKilcbiAgKCogICAtIGNoYXJfc2V0OiBzZXQgb2YgY2hhcmFjdGVycyBhcyBiaXRtYXAgKHNlZSBzY2FuZiAlWy4uLl0pLiAgICAqKVxuXG4gIGxldCBsZWdhY3lfYmVoYXZpb3IgPSBtYXRjaCBsZWdhY3lfYmVoYXZpb3Igd2l0aFxuICAgIHwgU29tZSBmbGFnIC0+IGZsYWdcbiAgICB8IE5vbmUgLT4gdHJ1ZVxuICAoKiAgV2hlbiB0aGlzIGZsYWcgaXMgZW5hYmxlZCwgdGhlIGZvcm1hdCBwYXJzZXIgdHJpZXMgdG8gYmVoYXZlIGFzXG4gICAgICB0aGUgPDQuMDIgaW1wbGVtZW50YXRpb25zLCBpbiBwYXJ0aWN1bGFyIGl0IGlnbm9yZXMgbW9zdCBiZW5pbmVcbiAgICAgIG5vbnNlbnNpY2FsIGZvcm1hdC4gV2hlbiB0aGUgZmxhZyBpcyBkaXNhYmxlZCwgaXQgd2lsbCByZWplY3QgYW55XG4gICAgICBmb3JtYXQgdGhhdCBpcyBub3QgYWNjZXB0ZWQgYnkgdGhlIHNwZWNpZmljYXRpb24uXG5cbiAgICAgIEEgdHlwaWNhbCBleGFtcGxlIHdvdWxkIGJlIFwiJSsgZFwiOiBzcGVjaWZ5aW5nIGJvdGggJysnIChpZiB0aGVcbiAgICAgIG51bWJlciBpcyBwb3NpdGl2ZSwgcGFkIHdpdGggYSAnKycgdG8gZ2V0IHRoZSBzYW1lIHdpZHRoIGFzXG4gICAgICBuZWdhdGl2ZSBudW1iZXJzKSBhbmQgJyAnIChpZiB0aGUgbnVtYmVyIGlzIHBvc2l0aXZlLCBwYWQgd2l0aFxuICAgICAgYSBzcGFjZSkgZG9lcyBub3QgbWFrZSBzZW5zZSwgYnV0IHRoZSBsZWdhY3kgKDwgNC4wMilcbiAgICAgIGltcGxlbWVudGF0aW9uIHdhcyBoYXBweSB0byBqdXN0IGlnbm9yZSB0aGUgc3BhY2UuXG4gICopXG4gIGluXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlLiAqKVxuICBsZXQgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBzdHJfaW5kIG1zZyA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgJXNcIlxuICAgICAgc3RyIHN0cl9pbmQgbXNnXG4gIGluXG5cbiAgKCogVXNlZCB3aGVuIHRoZSBlbmQgb2YgdGhlIGZvcm1hdCAob3IgdGhlIGN1cnJlbnQgc3ViLWZvcm1hdCkgd2FzIGVuY291bnRlcmVkXG4gICAgICB1bmV4cGVjdGVkbHkuICopXG4gIGxldCB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZCA9XG4gICAgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBlbmRfaW5kXG4gICAgICBcInVuZXhwZWN0ZWQgZW5kIG9mIGZvcm1hdFwiXG4gIGluXG5cbiAgKCogVXNlZCBmb3IgJTBjOiBubyBvdGhlciB3aWR0aHMgYXJlIGltcGxlbWVudGVkICopXG4gIGxldCBpbnZhbGlkX25vbm51bGxfY2hhcl93aWR0aCBzdHJfaW5kID1cbiAgICBpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIHN0cl9pbmRcbiAgICAgIFwibm9uLXplcm8gd2lkdGhzIGFyZSB1bnN1cHBvcnRlZCBmb3IgJWMgY29udmVyc2lvbnNcIlxuICBpblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgYW4gb3B0aW9uIGRlcGVuZGVuY3lcbiAgICAgcHJvYmxlbS4gKilcbiAgbGV0IGludmFsaWRfZm9ybWF0X3dpdGhvdXQgc3RyX2luZCBjIHMgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICclYycgd2l0aG91dCAlc1wiXG4gICAgICBzdHIgc3RyX2luZCBjIHNcbiAgaW5cblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgYW4gdW5leHBlY3RlZFxuICAgICBjaGFyYWN0ZXIuICopXG4gIGxldCBleHBlY3RlZF9jaGFyYWN0ZXIgc3RyX2luZCBleHBlY3RlZCByZWFkID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICVzIGV4cGVjdGVkLCByZWFkICVDXCJcbiAgICAgIHN0ciBzdHJfaW5kIGV4cGVjdGVkIHJlYWRcbiAgaW5cblxuICAoKiBQYXJzZSB0aGUgc3RyaW5nIGZyb20gYmVnX2luZCAoaW5jbHVkZWQpIHRvIGVuZF9pbmQgKGV4Y2x1ZGVkKS4gKilcbiAgbGV0IHJlYyBwYXJzZSA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBiZWdfaW5kIGVuZF9pbmQgLT4gcGFyc2VfbGl0ZXJhbCBiZWdfaW5kIGJlZ19pbmQgZW5kX2luZFxuXG4gICgqIFJlYWQgbGl0ZXJhbCBjaGFyYWN0ZXJzIHVwIHRvICclJyBvciAnQCcgc3BlY2lhbCBjaGFyYWN0ZXJzLiAqKVxuICBhbmQgcGFyc2VfbGl0ZXJhbCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gbGl0X3N0YXJ0IHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgRW5kX29mX2Zvcm1hdCBlbHNlXG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2VfZm9ybWF0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBhZGRfbGl0ZXJhbCBsaXRfc3RhcnQgc3RyX2luZCBmbXRfcmVzdFxuICAgICAgfCAnQCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZV9hZnRlcl9hdCAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgZm10X3Jlc3RcbiAgICAgIHwgXyAtPlxuICAgICAgICBwYXJzZV9saXRlcmFsIGxpdF9zdGFydCAoc3RyX2luZCArIDEpIGVuZF9pbmRcblxuICAoKiBQYXJzZSBhIGZvcm1hdCBhZnRlciAnJScgKilcbiAgYW5kIHBhcnNlX2Zvcm1hdCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIGVuZF9pbmQgLT4gcGFyc2VfaWduIHBjdF9pbmQgKHBjdF9pbmQgKyAxKSBlbmRfaW5kXG5cbiAgYW5kIHBhcnNlX2lnbiA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXycgLT4gcGFyc2VfZmxhZ3MgcGN0X2luZCAoc3RyX2luZCsxKSBlbmRfaW5kIHRydWVcbiAgICAgIHwgXyAtPiBwYXJzZV9mbGFncyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBmYWxzZVxuXG4gIGFuZCBwYXJzZV9mbGFncyA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiAoXywgXywgZSwgZikgZm10X2ViYlxuICA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBpZ24gLT5cbiAgICBsZXQgemVybyA9IHJlZiBmYWxzZSBhbmQgbWludXMgPSByZWYgZmFsc2VcbiAgICBhbmQgcGx1cyA9IHJlZiBmYWxzZSBhbmQgc3BhY2UgPSByZWYgZmFsc2VcbiAgICBhbmQgaGFzaCA9IHJlZiBmYWxzZSBpblxuICAgIGxldCBzZXRfZmxhZyBzdHJfaW5kIGZsYWcgPVxuICAgICAgKCogaW4gbGVnYWN5IG1vZGUsIGR1cGxpY2F0ZSBmbGFncyBhcmUgYWNjZXB0ZWQgKilcbiAgICAgIGlmICFmbGFnICYmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgZHVwbGljYXRlIGZsYWcgJUNcIlxuICAgICAgICAgIHN0ciBzdHJfaW5kIHN0ci5bc3RyX2luZF07XG4gICAgICBmbGFnIDo9IHRydWU7XG4gICAgaW5cbiAgICBsZXQgcmVjIHJlYWRfZmxhZ3Mgc3RyX2luZCA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICcwJyAtPiBzZXRfZmxhZyBzdHJfaW5kIHplcm87ICByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJy0nIC0+IHNldF9mbGFnIHN0cl9pbmQgbWludXM7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnKycgLT4gc2V0X2ZsYWcgc3RyX2luZCBwbHVzOyAgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICcjJyAtPiBzZXRfZmxhZyBzdHJfaW5kIGhhc2g7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnICcgLT4gc2V0X2ZsYWcgc3RyX2luZCBzcGFjZTsgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8IF8gLT5cbiAgICAgICAgcGFyc2VfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZFxuICAgICAgICAgICF6ZXJvICFtaW51cyAhcGx1cyAhaGFzaCAhc3BhY2UgaWduXG4gICAgICBlbmRcbiAgICBpblxuICAgIHJlYWRfZmxhZ3Mgc3RyX2luZFxuXG4gICgqIFRyeSB0byByZWFkIGEgZGlnaXRhbCBvciBhICcqJyBwYWRkaW5nLiAqKVxuICBhbmQgcGFyc2VfcGFkZGluZyA6IHR5cGUgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgIChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIHplcm8gbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhZHR5ID0gbWF0Y2ggemVybywgbWludXMgd2l0aFxuICAgICAgfCBmYWxzZSwgZmFsc2UgLT4gUmlnaHRcbiAgICAgIHwgZmFsc2UsIHRydWUgIC0+IExlZnRcbiAgICAgIHwgIHRydWUsIGZhbHNlIC0+IFplcm9zXG4gICAgICB8ICB0cnVlLCB0cnVlICAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBMZWZ0XG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICctJyBcIjBcIiBpblxuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPlxuICAgICAgbGV0IG5ld19pbmQsIHdpZHRoID0gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDAgaW5cbiAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBuZXdfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAoTGl0X3BhZGRpbmcgKHBhZHR5LCB3aWR0aCkpXG4gICAgfCAnKicgLT5cbiAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlXG4gICAgICAgIGlnbiAoQXJnX3BhZGRpbmcgcGFkdHkpXG4gICAgfCBfIC0+XG4gICAgICBiZWdpbiBtYXRjaCBwYWR0eSB3aXRoXG4gICAgICB8IExlZnQgIC0+XG4gICAgICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAgIGludmFsaWRfZm9ybWF0X3dpdGhvdXQgKHN0cl9pbmQgLSAxKSAnLScgXCJwYWRkaW5nXCI7XG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIE5vX3BhZGRpbmdcbiAgICAgIHwgWmVyb3MgLT5cbiAgICAgICAgICgqIGEgJzAnIHBhZGRpbmcgaW5kaWNhdGlvbiBub3QgZm9sbG93ZWQgYnkgYW55dGhpbmcgc2hvdWxkXG4gICAgICAgICAgIGJlIGludGVycHJldGVkIGFzIGEgUmlnaHQgcGFkZGluZyBvZiB3aWR0aCAwLiBUaGlzIGlzIHVzZWRcbiAgICAgICAgICAgYnkgc2Nhbm5pbmcgY29udmVyc2lvbnMgJTBzIGFuZCAlMGMgKilcbiAgICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgKExpdF9wYWRkaW5nIChSaWdodCwgMCkpXG4gICAgICB8IFJpZ2h0IC0+XG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIE5vX3BhZGRpbmdcbiAgICAgIGVuZFxuXG4gICgqIElzIHByZWNpc2lvbiBkZWZpbmVkPyAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfcGFkZGluZyA6IHR5cGUgeCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCBfKSBwYWRkaW5nIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcuJyAtPlxuICAgICAgcGFyc2VfcHJlY2lzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgcGFkXG4gICAgfCBzeW1iIC0+XG4gICAgICBwYXJzZV9jb252ZXJzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkXG4gICAgICAgIE5vX3ByZWNpc2lvbiBwYWQgc3ltYlxuXG4gICgqIFJlYWQgdGhlIGRpZ2l0YWwgb3IgJyonIHByZWNpc2lvbi4gKilcbiAgYW5kIHBhcnNlX3ByZWNpc2lvbiA6IHR5cGUgeCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCBfKSBwYWRkaW5nIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFyc2VfbGl0ZXJhbCBtaW51cyBzdHJfaW5kID1cbiAgICAgIGxldCBuZXdfaW5kLCBwcmVjID0gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDAgaW5cbiAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIG5ld19pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIHBhZCAoTGl0X3ByZWNpc2lvbiBwcmVjKSBpblxuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPiBwYXJzZV9saXRlcmFsIG1pbnVzIHN0cl9pbmRcbiAgICB8ICgnKycgfCAnLScpIGFzIHN5bWIgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT5cbiAgICAgICgqIExlZ2FjeSBtb2RlIHdvdWxkIGFjY2VwdCBhbmQgaWdub3JlICcrJyBvciAnLScgYmVmb3JlIHRoZVxuICAgICAgICAgaW50ZWdlciBkZXNjcmliaW5nIHRoZSBkZXNpcmVkIHByZWNpc2lvbjsgbm90ZSB0aGF0IHRoaXNcbiAgICAgICAgIGNhbm5vdCBoYXBwZW4gZm9yIHBhZGRpbmcgd2lkdGgsIGFzICcrJyBhbmQgJy0nIGFscmVhZHkgaGF2ZVxuICAgICAgICAgYSBzZW1hbnRpY3MgdGhlcmUuXG5cbiAgICAgICAgIFRoYXQgc2FpZCwgdGhlIGlkZWEgKHN1cHBvcnRlZCBieSB0aGlzIHR3ZWFrKSB0aGF0IHdpZHRoIGFuZFxuICAgICAgICAgcHJlY2lzaW9uIGxpdGVyYWxzIGFyZSBcImludGVnZXIgbGl0ZXJhbHNcIiBpbiB0aGUgT0NhbWwgc2Vuc2UgaXNcbiAgICAgICAgIHN0aWxsIGJsYXRhbnRseSB3cm9uZywgYXMgMTIzXzQ1NiBvciAweEZGIGFyZSByZWplY3RlZC4gKilcbiAgICAgIHBhcnNlX2xpdGVyYWwgKG1pbnVzIHx8IHN5bWIgPSAnLScpIChzdHJfaW5kICsgMSlcbiAgICB8ICcqJyAtPlxuICAgICAgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZVxuICAgICAgICBpZ24gcGFkIEFyZ19wcmVjaXNpb25cbiAgICB8IF8gLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICgqIG5vdGUgdGhhdCBsZWdhY3kgaW1wbGVtZW50YXRpb24gZGlkIG5vdCBpZ25vcmUgJy4nIHdpdGhvdXRcbiAgICAgICAgICAgYSBudW1iZXIgKGFzIGl0IGRvZXMgZm9yIHBhZGRpbmcgaW5kaWNhdGlvbnMpLCBidXRcbiAgICAgICAgICAgaW50ZXJwcmV0cyBpdCBhcyAnLjAnICopXG4gICAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgcGFkIChMaXRfcHJlY2lzaW9uIDApXG4gICAgICBlbHNlXG4gICAgICAgIGludmFsaWRfZm9ybWF0X3dpdGhvdXQgKHN0cl9pbmQgLSAxKSAnLicgXCJwcmVjaXNpb25cIlxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBjb252ZXJzaW9uLiAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIDogdHlwZSB4IHkgeiB0IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKHgsIHkpIHBhZGRpbmcgLT4gKHosIHQpIHByZWNpc2lvbiAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCBwcmVjIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFyc2VfY29udiAodHlwZSB1KSAodHlwZSB2KSAocGFkcHJlYyA6ICh1LCB2KSBwYWRkaW5nKSA9XG4gICAgICBwYXJzZV9jb252ZXJzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkXG4gICAgICAgIHByZWMgcGFkcHJlYyBzdHIuW3N0cl9pbmRdIGluXG4gICAgKCogaW4gbGVnYWN5IG1vZGUsIHNvbWUgZm9ybWF0cyAoJXMgYW5kICVTKSBhY2NlcHQgYSB3ZWlyZCBtaXggb2ZcbiAgICAgICBwYWRkaW5nIGFuZCBwcmVjaXNpb24sIHdoaWNoIGlzIG1lcmdlZCBhcyBhIHNpbmdsZSBwYWRkaW5nXG4gICAgICAgaW5mb3JtYXRpb24uIEZvciBleGFtcGxlLCBpbiAlLjEwcyB0aGUgcHJlY2lzaW9uIGlzIGltcGxpY2l0bHlcbiAgICAgICB1bmRlcnN0b29kIGFzIHBhZGRpbmcgJTEwcywgYnV0IHRoZSBsZWZ0LXBhZGRpbmcgY29tcG9uZW50IG1heVxuICAgICAgIGJlIHNwZWNpZmllZCBlaXRoZXIgYXMgYSBsZWZ0IHBhZGRpbmcgb3IgYSBuZWdhdGl2ZSBwcmVjaXNpb246XG4gICAgICAgJS0uM3MgYW5kICUuLTNzIGFyZSBlcXVpdmFsZW50IHRvICUtM3MgKilcbiAgICBtYXRjaCBwYWQgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAtPiAoXG4gICAgICBtYXRjaCBtaW51cywgcHJlYyB3aXRoXG4gICAgICAgIHwgXywgTm9fcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgTm9fcGFkZGluZ1xuICAgICAgICB8IGZhbHNlLCBMaXRfcHJlY2lzaW9uIG4gLT4gcGFyc2VfY29udiAoTGl0X3BhZGRpbmcgKFJpZ2h0LCBuKSlcbiAgICAgICAgfCB0cnVlLCBMaXRfcHJlY2lzaW9uIG4gLT4gcGFyc2VfY29udiAoTGl0X3BhZGRpbmcgKExlZnQsIG4pKVxuICAgICAgICB8IGZhbHNlLCBBcmdfcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgKEFyZ19wYWRkaW5nIFJpZ2h0KVxuICAgICAgICB8IHRydWUsIEFyZ19wcmVjaXNpb24gLT4gcGFyc2VfY29udiAoQXJnX3BhZGRpbmcgTGVmdClcbiAgICApXG4gICAgfCBwYWQgLT4gcGFyc2VfY29udiBwYWRcblxuICAoKiBDYXNlIGFuYWx5c2lzIG9uIGNvbnZlcnNpb24uICopXG4gIGFuZCBwYXJzZV9jb252ZXJzaW9uIDogdHlwZSB4IHkgeiB0IHUgdiBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiAoeCwgeSkgcGFkZGluZyAtPlxuICAgICAgICAoeiwgdCkgcHJlY2lzaW9uIC0+ICh1LCB2KSBwYWRkaW5nIC0+IGNoYXIgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgcHJlYyBwYWRwcmVjIHN5bWIgLT5cbiAgICAoKiBGbGFncyB1c2VkIHRvIGNoZWNrIG9wdGlvbiB1c2FnZXMvY29tcGF0aWJpbGl0aWVzLiAqKVxuICAgIGxldCBwbHVzX3VzZWQgID0gcmVmIGZhbHNlIGFuZCBoYXNoX3VzZWQgPSByZWYgZmFsc2VcbiAgICBhbmQgc3BhY2VfdXNlZCA9IHJlZiBmYWxzZSBhbmQgaWduX3VzZWQgICA9IHJlZiBmYWxzZVxuICAgIGFuZCBwYWRfdXNlZCAgID0gcmVmIGZhbHNlIGFuZCBwcmVjX3VzZWQgID0gcmVmIGZhbHNlIGluXG5cbiAgICAoKiBBY2Nlc3MgdG8gb3B0aW9ucywgdXBkYXRlIGZsYWdzLiAqKVxuICAgIGxldCBnZXRfcGx1cyAgICAoKSA9IHBsdXNfdXNlZCAgOj0gdHJ1ZTsgcGx1c1xuICAgIGFuZCBnZXRfaGFzaCAgICgpID0gaGFzaF91c2VkIDo9IHRydWU7IGhhc2hcbiAgICBhbmQgZ2V0X3NwYWNlICAgKCkgPSBzcGFjZV91c2VkIDo9IHRydWU7IHNwYWNlXG4gICAgYW5kIGdldF9pZ24gICAgICgpID0gaWduX3VzZWQgICA6PSB0cnVlOyBpZ25cbiAgICBhbmQgZ2V0X3BhZCAgICAgKCkgPSBwYWRfdXNlZCAgIDo9IHRydWU7IHBhZFxuICAgIGFuZCBnZXRfcHJlYyAgICAoKSA9IHByZWNfdXNlZCAgOj0gdHJ1ZTsgcHJlY1xuICAgIGFuZCBnZXRfcGFkcHJlYyAoKSA9IHBhZF91c2VkICAgOj0gdHJ1ZTsgcGFkcHJlYyBpblxuXG4gICAgbGV0IGdldF9pbnRfcGFkICgpIDogKHgseSkgcGFkZGluZyA9XG4gICAgICAoKiAlNS4zZCBpcyBhY2NlcHRlZCBhbmQgbWVhbmluZ2Z1bDogcGFkIHRvIGxlbmd0aCA1IHdpdGhcbiAgICAgICAgIHNwYWNlcywgYnV0IGZpcnN0IHBhZCB3aXRoIHplcm9zIHVwdG8gbGVuZ3RoIDMgKDAtcGFkZGluZ1xuICAgICAgICAgaXMgdGhlIGludGVycHJldGF0aW9uIG9mIFwicHJlY2lzaW9uXCIgZm9yIGludGVnZXIgZm9ybWF0cykuXG5cbiAgICAgICAgICUwNS4zZCBpcyByZWR1bmRhbnQ6IHBhZCB0byBsZW5ndGggNSAqd2l0aCB6ZXJvcyosIGJ1dFxuICAgICAgICAgZmlyc3QgcGFkIHdpdGggemVyb3MuLi4gVG8gYWRkIGluc3VsdCB0byB0aGUgaW5qdXJ5LCB0aGVcbiAgICAgICAgIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBpZ25vcmVzIHRoZSAwLXBhZGRpbmcgaW5kaWNhdGlvbiBhbmRcbiAgICAgICAgIGRvZXMgdGhlIDUgcGFkZGluZyB3aXRoIHNwYWNlcyBpbnN0ZWFkLiBXZSByZXVzZSB0aGlzXG4gICAgICAgICBpbnRlcnByZXRhdGlvbiBmb3IgY29tcGF0aWJpbGl0eSwgYnV0IHN0YXRpY2FsbHkgcmVqZWN0IHRoaXNcbiAgICAgICAgIGZvcm1hdCB3aGVuIHRoZSBsZWdhY3kgbW9kZSBpcyBkaXNhYmxlZCwgdG8gcHJvdGVjdCBzdHJpY3RcbiAgICAgICAgIHVzZXJzIGZyb20gdGhpcyBjb3JuZXIgY2FzZS4gKilcbiAgICAgICBtYXRjaCBnZXRfcGFkICgpLCBnZXRfcHJlYyAoKSB3aXRoXG4gICAgICAgICB8IHBhZCwgTm9fcHJlY2lzaW9uIC0+IHBhZFxuICAgICAgICAgfCBOb19wYWRkaW5nLCBfICAgICAtPiBOb19wYWRkaW5nXG4gICAgICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgbiksIF8gLT5cbiAgICAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGl0X3BhZGRpbmcgKFJpZ2h0LCBuKVxuICAgICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnMCcgXCJwcmVjaXNpb25cIlxuICAgICAgICAgfCBBcmdfcGFkZGluZyBaZXJvcywgXyAtPlxuICAgICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBBcmdfcGFkZGluZyBSaWdodFxuICAgICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnMCcgXCJwcmVjaXNpb25cIlxuICAgICAgICAgfCBMaXRfcGFkZGluZyBfIGFzIHBhZCwgXyAtPiBwYWRcbiAgICAgICAgIHwgQXJnX3BhZGRpbmcgXyBhcyBwYWQsIF8gLT4gcGFkIGluXG5cbiAgICAoKiBDaGVjayB0aGF0IHBhZHR5IDw+IFplcm9zLiAqKVxuICAgIGxldCBjaGVja19ub18wIHN5bWIgKHR5cGUgYSBiKSAocGFkIDogKGEsIGIpIHBhZGRpbmcpIDogKGEsYikgcGFkZGluZyA9XG4gICAgICBtYXRjaCBwYWQgd2l0aFxuICAgICAgfCBOb19wYWRkaW5nIC0+IHBhZFxuICAgICAgfCBMaXRfcGFkZGluZyAoKExlZnQgfCBSaWdodCksIF8pIC0+IHBhZFxuICAgICAgfCBBcmdfcGFkZGluZyAoTGVmdCB8IFJpZ2h0KSAtPiBwYWRcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aClcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIjBcIlxuICAgICAgfCBBcmdfcGFkZGluZyBaZXJvcyAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBBcmdfcGFkZGluZyBSaWdodFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiMFwiXG4gICAgaW5cblxuICAgICgqIEdldCBwYWRkaW5nIGFzIGEgcGFkX29wdGlvbiAoc2VlIFwiJV9cIiwgXCIle1wiLCBcIiUoXCIgYW5kIFwiJVtcIikuXG4gICAgICAgKG5vIG5lZWQgZm9yIGxlZ2FjeSBtb2RlIHR3ZWFraW5nLCB0aG9zZSB3ZXJlIHJlamVjdGVkIGJ5IHRoZVxuICAgICAgIGxlZ2FjeSBwYXJzZXIgYXMgd2VsbCkgKilcbiAgICBsZXQgb3B0X29mX3BhZCBjICh0eXBlIGEpICh0eXBlIGIpIChwYWQgOiAoYSwgYikgcGFkZGluZykgPSBtYXRjaCBwYWQgd2l0aFxuICAgICAgfCBOb19wYWRkaW5nIC0+IE5vbmVcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aCkgLT4gU29tZSB3aWR0aFxuICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBTb21lIHdpZHRoXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInMCdcIlxuICAgICAgfCBMaXRfcGFkZGluZyAoTGVmdCwgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIFNvbWUgd2lkdGhcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIictJ1wiXG4gICAgICB8IEFyZ19wYWRkaW5nIF8gLT4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInKidcIlxuICAgIGluXG4gICAgbGV0IGdldF9wYWRfb3B0IGMgPSBvcHRfb2ZfcGFkIGMgKGdldF9wYWQgKCkpIGluXG4gICAgbGV0IGdldF9wYWRwcmVjX29wdCBjID0gb3B0X29mX3BhZCBjIChnZXRfcGFkcHJlYyAoKSkgaW5cblxuICAgICgqIEdldCBwcmVjaXNpb24gYXMgYSBwcmVjX29wdGlvbiAoc2VlIFwiJV9mXCIpLlxuICAgICAgIChubyBuZWVkIGZvciBsZWdhY3kgbW9kZSB0d2Vha2luZywgdGhvc2Ugd2VyZSByZWplY3RlZCBieSB0aGVcbiAgICAgICBsZWdhY3kgcGFyc2VyIGFzIHdlbGwpICopXG4gICAgbGV0IGdldF9wcmVjX29wdCAoKSA9IG1hdGNoIGdldF9wcmVjICgpIHdpdGhcbiAgICAgIHwgTm9fcHJlY2lzaW9uICAgICAgIC0+IE5vbmVcbiAgICAgIHwgTGl0X3ByZWNpc2lvbiBuZGVjIC0+IFNvbWUgbmRlY1xuICAgICAgfCBBcmdfcHJlY2lzaW9uICAgICAgLT4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICdfJyBcIicqJ1wiXG4gICAgaW5cblxuICAgIGxldCBmbXRfcmVzdWx0ID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnLCcgLT5cbiAgICAgIHBhcnNlIHN0cl9pbmQgZW5kX2luZFxuICAgIHwgJ2MnIC0+XG4gICAgICBsZXQgY2hhcl9mb3JtYXQgZm10X3Jlc3QgPSAoKiAlYyAqKVxuICAgICAgICBpZiBnZXRfaWduICgpXG4gICAgICAgIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9jaGFyLCBmbXRfcmVzdCkpXG4gICAgICAgIGVsc2UgRm10X0VCQiAoQ2hhciBmbXRfcmVzdClcbiAgICAgIGluXG4gICAgICBsZXQgc2Nhbl9mb3JtYXQgZm10X3Jlc3QgPSAoKiAlMGMgKilcbiAgICAgICAgaWYgZ2V0X2lnbiAoKVxuICAgICAgICB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIsIGZtdF9yZXN0KSlcbiAgICAgICAgZWxzZSBGbXRfRUJCIChTY2FuX25leHRfY2hhciBmbXRfcmVzdClcbiAgICAgIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgYmVnaW4gbWF0Y2ggZ2V0X3BhZF9vcHQgJ2MnIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGNoYXJfZm9ybWF0IGZtdF9yZXN0XG4gICAgICAgIHwgU29tZSAwIC0+IHNjYW5fZm9ybWF0IGZtdF9yZXN0XG4gICAgICAgIHwgU29tZSBfbiAtPlxuICAgICAgICAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yXG4gICAgICAgICAgIHRoZW4gaW52YWxpZF9ub25udWxsX2NoYXJfd2lkdGggc3RyX2luZFxuICAgICAgICAgICBlbHNlICgqIGxlZ2FjeSBpZ25vcmVzICVjIHdpZHRocyAqKSBjaGFyX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgZW5kXG4gICAgfCAnQycgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9jYW1sX2NoYXIsZm10X3Jlc3QpKVxuICAgICAgZWxzZSBGbXRfRUJCIChDYW1sX2NoYXIgZm10X3Jlc3QpXG4gICAgfCAncycgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc3RyaW5nIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChTdHJpbmcgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnUycgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfY2FtbF9zdHJpbmcgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKENhbWxfc3RyaW5nIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2QnIHwgJ2knIHwgJ3gnIHwgJ1gnIHwgJ28nIHwgJ3UnIC0+XG4gICAgICBsZXQgaWNvbnYgPSBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgKGdldF9zcGFjZSAoKSkgc3ltYiBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnTicgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgY291bnRlciA9IFRva2VuX2NvdW50ZXIgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBjb3VudGVyIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpKVxuICAgIHwgJ2wnIHwgJ24nIHwgJ0wnIHdoZW4gc3RyX2luZD1lbmRfaW5kIHx8IG5vdCAoaXNfaW50X2Jhc2Ugc3RyLltzdHJfaW5kXSkgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgY291bnRlciA9IGNvdW50ZXJfb2ZfY2hhciBzeW1iIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgY291bnRlciBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdF9yZXN0KSlcbiAgICB8ICdsJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgICAgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50MzIgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQzMiAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ24nIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpXG4gICAgICAgICAgKGdldF9oYXNoICgpKSAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9uYXRpdmVpbnQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChOYXRpdmVpbnQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdMJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgICAgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50NjQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQ2NCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2YnIHwgJ2UnIHwgJ0UnIHwgJ2cnIHwgJ0cnIHwgJ0YnIHwgJ2gnIHwgJ0gnIC0+XG4gICAgICBsZXQgZmNvbnYgPVxuICAgICAgICBjb21wdXRlX2Zsb2F0X2NvbnYgcGN0X2luZCBzdHJfaW5kXG4gICAgICAgICAgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpIChnZXRfc3BhY2UgKCkpIHN5bWIgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zsb2F0IChnZXRfcGFkX29wdCAnXycsIGdldF9wcmVjX29wdCAoKSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoRmxvYXQgKGZjb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdiJyB8ICdCJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9ib29sIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChCb29sIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2EnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoQWxwaGEgZm10X3Jlc3QpXG4gICAgfCAndCcgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChUaGV0YSBmbXRfcmVzdClcbiAgICB8ICdyJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3JlYWRlciwgZm10X3Jlc3QpKVxuICAgICAgZWxzZSBGbXRfRUJCIChSZWFkZXIgZm10X3Jlc3QpXG4gICAgfCAnIScgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGbHVzaCBmbXRfcmVzdClcbiAgICB8ICgnJScgfCAnQCcpIGFzIGMgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKGMsIGZtdF9yZXN0KSlcbiAgICB8ICd7JyAtPlxuICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgJ30nIGluXG4gICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCBzdWJfZW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdWJfZW5kICsgMikgZW5kX2luZCBpblxuICAgICAgbGV0IHN1Yl9mbXR0eSA9IGZtdHR5X29mX2ZtdCBzdWJfZm10IGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zvcm1hdF9hcmcgKGdldF9wYWRfb3B0ICdfJywgc3ViX2ZtdHR5KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdF9hcmcgKGdldF9wYWRfb3B0ICd7Jywgc3ViX2ZtdHR5LCBmbXRfcmVzdCkpXG4gICAgfCAnKCcgLT5cbiAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kICcpJyBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3ViX2VuZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIHN1Yl9lbmQgaW5cbiAgICAgIGxldCBzdWJfZm10dHkgPSBmbXR0eV9vZl9mbXQgc3ViX2ZtdCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mb3JtYXRfc3Vic3QgKGdldF9wYWRfb3B0ICdfJywgc3ViX2ZtdHR5KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdF9zdWJzdCAoZ2V0X3BhZF9vcHQgJygnLCBzdWJfZm10dHksIGZtdF9yZXN0KSlcbiAgICB8ICdbJyAtPlxuICAgICAgbGV0IG5leHRfaW5kLCBjaGFyX3NldCA9IHBhcnNlX2NoYXJfc2V0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgKGdldF9wYWRfb3B0ICdfJywgY2hhcl9zZXQpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9jaGFyX3NldCAoZ2V0X3BhZF9vcHQgJ1snLCBjaGFyX3NldCwgZm10X3Jlc3QpKVxuICAgIHwgJy0nIHwgJysnIHwgJyMnIHwgJyAnIHwgJ18nIC0+XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICBmbGFnICVDIGlzIG9ubHkgYWxsb3dlZCBhZnRlciB0aGUgJyUlJywgYmVmb3JlIHBhZGRpbmcgYW5kIHByZWNpc2lvblwiXG4gICAgICAgIHN0ciBwY3RfaW5kIHN5bWJcbiAgICB8IF8gLT5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgIGludmFsaWQgY29udmVyc2lvbiBcXFwiJSUlY1xcXCJcIiBzdHIgKHN0cl9pbmQgLSAxKSBzeW1iXG4gICAgaW5cbiAgICAoKiBDaGVjayBmb3IgdW51c2VkIG9wdGlvbnMsIGFuZCByZWplY3QgdGhlbSBhcyBpbmNvbXBhdGlibGUuXG5cbiAgICAgICBTdWNoIGNoZWNrcyBuZWVkIHRvIGJlIGRpc2FibGVkIGluIGxlZ2FjeSBtb2RlLCBhcyB0aGUgbGVnYWN5XG4gICAgICAgcGFyc2VyIHNpbGVudGx5IGlnbm9yZWQgaW5jb21wYXRpYmxlIGZsYWdzLiAqKVxuICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlbiBiZWdpblxuICAgIGlmIG5vdCAhcGx1c191c2VkICYmIHBsdXMgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInKydcIjtcbiAgICBpZiBub3QgIWhhc2hfdXNlZCAmJiBoYXNoIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyMnXCI7XG4gICAgaWYgbm90ICFzcGFjZV91c2VkICYmIHNwYWNlIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyAnXCI7XG4gICAgaWYgbm90ICFwYWRfdXNlZCAgJiYgUGFkZGluZ19FQkIgcGFkIDw+IFBhZGRpbmdfRUJCIE5vX3BhZGRpbmcgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCJgcGFkZGluZydcIjtcbiAgICBpZiBub3QgIXByZWNfdXNlZCAmJiBQcmVjaXNpb25fRUJCIHByZWMgPD4gUHJlY2lzaW9uX0VCQiBOb19wcmVjaXNpb24gdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIChpZiBpZ24gdGhlbiAnXycgZWxzZSBzeW1iKVxuICAgICAgICBcImBwcmVjaXNpb24nXCI7XG4gICAgaWYgaWduICYmIHBsdXMgdGhlbiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJ18nIFwiJysnXCI7XG4gICAgZW5kO1xuICAgICgqIHRoaXMgbGFzdCB0ZXN0IG11c3Qgbm90IGJlIGRpc2FibGVkIGluIGxlZ2FjeSBtb2RlLFxuICAgICAgIGFzIGlnbm9yaW5nIGl0IHdvdWxkIHR5cGljYWxseSByZXN1bHQgaW4gYSBkaWZmZXJlbnQgdHlwaW5nXG4gICAgICAgdGhhbiB3aGF0IHRoZSBsZWdhY3kgcGFyc2VyIHVzZWQgKilcbiAgICBpZiBub3QgIWlnbl91c2VkICYmIGlnbiB0aGVuXG4gICAgICBiZWdpbiBtYXRjaCBzeW1iIHdpdGhcbiAgICAgICAgKCogYXJndW1lbnQtbGVzcyBmb3JtYXRzIGNhbiBzYWZlbHkgYmUgaWdub3JlZCBpbiBsZWdhY3kgbW9kZSAqKVxuICAgICAgICB8ICgnQCcgfCAnJScgfCAnIScgfCAnLCcpIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+ICgpXG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJ18nXCJcbiAgICAgIGVuZDtcbiAgICBmbXRfcmVzdWx0XG5cbiAgKCogUGFyc2UgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiAoYWZ0ZXIgJ0AnKS4gKilcbiAgYW5kIHBhcnNlX2FmdGVyX2F0IDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gRm10X0VCQiAoQ2hhcl9saXRlcmFsICgnQCcsIEVuZF9vZl9mb3JtYXQpKVxuICAgIGVsc2VcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnWycgLT5cbiAgICAgICAgcGFyc2VfdGFnIGZhbHNlIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKENsb3NlX2JveCwgZm10X3Jlc3QpKVxuICAgICAgfCAneycgLT5cbiAgICAgICAgcGFyc2VfdGFnIHRydWUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICd9JyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQ2xvc2VfdGFnLCBmbXRfcmVzdCkpXG4gICAgICB8ICcsJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQnJlYWsgKFwiQCxcIiwgMCwgMCksIGZtdF9yZXN0KSlcbiAgICAgIHwgJyAnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChCcmVhayAoXCJAIFwiLCAxLCAwKSwgZm10X3Jlc3QpKVxuICAgICAgfCAnOycgLT5cbiAgICAgICAgcGFyc2VfZ29vZF9icmVhayAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJz8nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGRmx1c2gsIGZtdF9yZXN0KSlcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZvcmNlX25ld2xpbmUsIGZtdF9yZXN0KSlcbiAgICAgIHwgJy4nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGbHVzaF9uZXdsaW5lLCBmbXRfcmVzdCkpXG4gICAgICB8ICc8JyAtPlxuICAgICAgICBwYXJzZV9tYWdpY19zaXplIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnQCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEVzY2FwZWRfYXQsIGZtdF9yZXN0KSlcbiAgICAgIHwgJyUnIHdoZW4gc3RyX2luZCArIDEgPCBlbmRfaW5kICYmIHN0ci5bc3RyX2luZCArIDFdID0gJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChFc2NhcGVkX3BlcmNlbnQsIGZtdF9yZXN0KSlcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoJ0AnLCBmbXRfcmVzdCkpXG4gICAgICB8IGMgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKFNjYW5faW5kaWMgYywgZm10X3Jlc3QpKVxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBvcHRpb25hbCA8bmFtZT4gYWZ0ZXIgXCJAe1wiIG9yIFwiQFtcIi4gKilcbiAgYW5kIHBhcnNlX3RhZyA6IHR5cGUgZSBmIC4gYm9vbCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGlzX29wZW5fdGFnIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIHRyeVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJzwnIC0+XG4gICAgICAgIGxldCBpbmQgPSBTdHJpbmcuaW5kZXhfZnJvbSBzdHIgKHN0cl9pbmQgKyAxKSAnPicgaW5cbiAgICAgICAgaWYgaW5kID49IGVuZF9pbmQgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgIGxldCBzdWJfc3RyID0gU3RyaW5nLnN1YiBzdHIgc3RyX2luZCAoaW5kIC0gc3RyX2luZCArIDEpIGluXG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKGluZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgKGluZCArIDEpIGluXG4gICAgICAgIGxldCBzdWJfZm9ybWF0ID0gRm9ybWF0IChzdWJfZm10LCBzdWJfc3RyKSBpblxuICAgICAgICBsZXQgZm9ybWF0dGluZyA9XG4gICAgICAgICAgaWYgaXNfb3Blbl90YWcgdGhlbiBPcGVuX3RhZyBzdWJfZm9ybWF0IGVsc2UgT3Blbl9ib3ggc3ViX2Zvcm1hdCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2dlbiAoZm9ybWF0dGluZywgZm10X3Jlc3QpKVxuICAgICAgfCBfIC0+XG4gICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IHN1Yl9mb3JtYXQgPSBGb3JtYXQgKEVuZF9vZl9mb3JtYXQsIFwiXCIpIGluXG4gICAgICBsZXQgZm9ybWF0dGluZyA9XG4gICAgICAgIGlmIGlzX29wZW5fdGFnIHRoZW4gT3Blbl90YWcgc3ViX2Zvcm1hdCBlbHNlIE9wZW5fYm94IHN1Yl9mb3JtYXQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nLCBmbXRfcmVzdCkpXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIG9wdGlvbmFsIDx3aWR0aCBvZmZzZXQ+IGFmdGVyIFwiQDtcIi4gKilcbiAgYW5kIHBhcnNlX2dvb2RfYnJlYWsgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgbGV0IG5leHRfaW5kLCBmb3JtYXR0aW5nX2xpdCA9XG4gICAgICB0cnlcbiAgICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgfHwgc3RyLltzdHJfaW5kXSA8PiAnPCcgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgIGxldCBzdHJfaW5kXzEgPSBwYXJzZV9zcGFjZXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8xXSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPiAoXG4gICAgICAgICAgbGV0IHN0cl9pbmRfMiwgd2lkdGggPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMSBlbmRfaW5kIGluXG4gICAgICAgICAgICBsZXQgc3RyX2luZF8zID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfMiBlbmRfaW5kIGluXG4gICAgICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfM10gd2l0aFxuICAgICAgICAgICAgICB8ICc+JyAtPlxuICAgICAgICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQtMikgKHN0cl9pbmRfMy1zdHJfaW5kKzMpIGluXG4gICAgICAgICAgICAgICAgc3RyX2luZF8zICsgMSwgQnJlYWsgKHMsIHdpZHRoLCAwKVxuICAgICAgICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT5cbiAgICAgICAgICAgICAgICBsZXQgc3RyX2luZF80LCBvZmZzZXQgPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMyBlbmRfaW5kIGluXG4gICAgICAgICAgICAgICAgbGV0IHN0cl9pbmRfNSA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzQgZW5kX2luZCBpblxuICAgICAgICAgICAgICAgIGlmIHN0ci5bc3RyX2luZF81XSA8PiAnPicgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZC0yKSAoc3RyX2luZF81LXN0cl9pbmQrMykgaW5cbiAgICAgICAgICAgICAgICBzdHJfaW5kXzUgKyAxLCBCcmVhayAocywgd2lkdGgsIG9mZnNldClcbiAgICAgICAgICAgICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICApXG4gICAgICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHdpdGggTm90X2ZvdW5kIHwgRmFpbHVyZSBfIC0+XG4gICAgICAgIHN0cl9pbmQsIEJyZWFrIChcIkA7XCIsIDEsIDApXG4gICAgaW5cbiAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSlcblxuICAoKiBQYXJzZSB0aGUgc2l6ZSBpbiBhIDxuPi4gKilcbiAgYW5kIHBhcnNlX21hZ2ljX3NpemUgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgbWF0Y2hcbiAgICAgIHRyeVxuICAgICAgICBsZXQgc3RyX2luZF8xID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfMV0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT5cbiAgICAgICAgICBsZXQgc3RyX2luZF8yLCBzaXplID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzEgZW5kX2luZCBpblxuICAgICAgICAgIGxldCBzdHJfaW5kXzMgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF8yIGVuZF9pbmQgaW5cbiAgICAgICAgICBpZiBzdHIuW3N0cl9pbmRfM10gPD4gJz4nIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQgLSAyKSAoc3RyX2luZF8zIC0gc3RyX2luZCArIDMpIGluXG4gICAgICAgICAgU29tZSAoc3RyX2luZF8zICsgMSwgTWFnaWNfc2l6ZSAocywgc2l6ZSkpXG4gICAgICAgIHwgXyAtPiBOb25lXG4gICAgICB3aXRoIE5vdF9mb3VuZCB8IEZhaWx1cmUgXyAtPlxuICAgICAgICBOb25lXG4gICAgd2l0aFxuICAgIHwgU29tZSAobmV4dF9pbmQsIGZvcm1hdHRpbmdfbGl0KSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSlcbiAgICB8IE5vbmUgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoU2Nhbl9pbmRpYyAnPCcsIGZtdF9yZXN0KSlcblxuICAoKiBQYXJzZSBhbmQgY29uc3RydWN0IGEgY2hhciBzZXQuICopXG4gIGFuZCBwYXJzZV9jaGFyX3NldCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG5cbiAgICBsZXQgY2hhcl9zZXQgPSBjcmVhdGVfY2hhcl9zZXQgKCkgaW5cbiAgICBsZXQgYWRkX2NoYXIgYyA9XG4gICAgICBhZGRfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYztcbiAgICBpblxuICAgIGxldCBhZGRfcmFuZ2UgYyBjJyA9XG4gICAgICBmb3IgaSA9IGludF9vZl9jaGFyIGMgdG8gaW50X29mX2NoYXIgYycgZG9cbiAgICAgICAgYWRkX2luX2NoYXJfc2V0IGNoYXJfc2V0IChjaGFyX29mX2ludCBpKTtcbiAgICAgIGRvbmU7XG4gICAgaW5cblxuICAgIGxldCBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmQgPVxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiAnJSUnIGFsb25lIGlzIG5vdCBhY2NlcHRlZCBpbiBjaGFyYWN0ZXIgc2V0cywgXFxcbiAgICAgICAgIHVzZSAlJSUlIGluc3RlYWQgYXQgcG9zaXRpb24gJWQuXCIgc3RyIHN0cl9pbmRcbiAgICBpblxuXG4gICAgKCogUGFyc2UgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGNoYXIgc2V0LiAqKVxuICAgIGxldCByZWMgcGFyc2VfY2hhcl9zZXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBsZXQgYyA9IHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAgICgqIFBhcnNlIHRoZSBjb250ZW50IG9mIGEgY2hhciBzZXQgdW50aWwgdGhlIGZpcnN0ICddJy4gKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfY29udGVudCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJy0nIC0+XG4gICAgICAgIGFkZF9jaGFyICctJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgYyAtPlxuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgICAoKiBUZXN0IGZvciByYW5nZSBpbiBjaGFyIHNldC4gKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnLScgLT5cbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfbWludXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcbiAgICAgIHwgKCclJyB8ICdAJykgYXMgYycgd2hlbiBjID0gJyUnIC0+XG4gICAgICAgIGFkZF9jaGFyIGMnO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCBjJyAtPlxuICAgICAgICBpZiBjID0gJyUnIHRoZW4gZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kO1xuICAgICAgICAoKiBub3RlIHRoYXQgJ0AnIGFsb25lIGlzIGFjY2VwdGVkLCBhcyBkb25lIGJ5IHRoZSBsZWdhY3lcbiAgICAgICAgICAgaW1wbGVtZW50YXRpb247IHRoZSBkb2N1bWVudGF0aW9uIHNwZWNpZmljYWxseSByZXF1aXJlcyAlQFxuICAgICAgICAgICBzbyB3ZSBjb3VsZCB3YXJuIG9uIHRoYXQgKilcbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgYydcblxuICAgICgqIE1hbmFnZSByYW5nZSBpbiBjaGFyIHNldCAoZXhjZXB0IGlmIHRoZSAnLScgdGhlIGxhc3QgY2hhciBiZWZvcmUgJ10nKSAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9hZnRlcl9taW51cyBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBhZGRfY2hhciAnLSc7XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICclJyAtPlxuICAgICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgICAgIHwgKCclJyB8ICdAJykgYXMgYycgLT5cbiAgICAgICAgICAgIGFkZF9yYW5nZSBjIGMnO1xuICAgICAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDIpIGVuZF9pbmRcbiAgICAgICAgICB8IF8gLT4gZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kXG4gICAgICAgIGVuZFxuICAgICAgfCBjJyAtPlxuICAgICAgICBhZGRfcmFuZ2UgYyBjJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICBpblxuICAgIGxldCBzdHJfaW5kLCByZXZlcnNlID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgICAgfCAnXicgLT4gc3RyX2luZCArIDEsIHRydWVcbiAgICAgICAgfCBfIC0+IHN0cl9pbmQsIGZhbHNlIGluXG4gICAgbGV0IG5leHRfaW5kID0gcGFyc2VfY2hhcl9zZXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgbGV0IGNoYXJfc2V0ID0gZnJlZXplX2NoYXJfc2V0IGNoYXJfc2V0IGluXG4gICAgbmV4dF9pbmQsIChpZiByZXZlcnNlIHRoZW4gcmV2X2NoYXJfc2V0IGNoYXJfc2V0IGVsc2UgY2hhcl9zZXQpXG5cbiAgKCogQ29uc3VtZSBhbGwgbmV4dCBzcGFjZXMsIHJhaXNlIGFuIEZhaWx1cmUgaWYgZW5kX2luZCBpcyByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2Vfc3BhY2VzIHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBpZiBzdHIuW3N0cl9pbmRdID0gJyAnIHRoZW4gcGFyc2Vfc3BhY2VzIChzdHJfaW5kICsgMSkgZW5kX2luZCBlbHNlIHN0cl9pbmRcblxuICAoKiBSZWFkIGEgcG9zaXRpdmUgaW50ZWdlciBmcm9tIHRoZSBzdHJpbmcsIHJhaXNlIGEgRmFpbHVyZSBpZiBlbmRfaW5kIGlzXG4gICAgIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgYWNjID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyBhcyBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IGFjYyAqIDEwICsgKGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnMCcpIGluXG4gICAgICBpZiBuZXdfYWNjID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW5cbiAgICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGludGVnZXIgJWQgaXMgZ3JlYXRlciB0aGFuIHRoZSBsaW1pdCAlZFwiXG4gICAgICAgICAgc3RyIG5ld19hY2MgU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgICBlbHNlXG4gICAgICAgIHBhcnNlX3Bvc2l0aXZlIChzdHJfaW5kICsgMSkgZW5kX2luZCBuZXdfYWNjXG4gICAgfCBfIC0+IHN0cl9pbmQsIGFjY1xuXG4gICgqIFJlYWQgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBpbnRlZ2VyIGZyb20gdGhlIHN0cmluZywgcmFpc2UgYSBGYWlsdXJlXG4gICAgIGlmIGVuZF9pbmQgaXMgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX2ludGVnZXIgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPiBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMFxuICAgIHwgJy0nIC0+IChcbiAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgfCAnMCcgLi4gJzknIC0+XG4gICAgICAgIGxldCBuZXh0X2luZCwgbiA9IHBhcnNlX3Bvc2l0aXZlIChzdHJfaW5kICsgMSkgZW5kX2luZCAwIGluXG4gICAgICAgIG5leHRfaW5kLCAtblxuICAgICAgfCBjIC0+XG4gICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiZGlnaXRcIiBjXG4gICAgKVxuICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBBZGQgYSBsaXRlcmFsIHRvIGEgZm9ybWF0IGZyb20gYSBsaXRlcmFsIGNoYXJhY3RlciBzdWItc2VxdWVuY2UuICopXG4gIGFuZCBhZGRfbGl0ZXJhbCA6IHR5cGUgYSBkIGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IChhLCBfLCBfLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAgIChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGxpdF9zdGFydCBzdHJfaW5kIGZtdCAtPiBtYXRjaCBzdHJfaW5kIC0gbGl0X3N0YXJ0IHdpdGhcbiAgICB8IDAgICAgLT4gRm10X0VCQiBmbXRcbiAgICB8IDEgICAgLT4gRm10X0VCQiAoQ2hhcl9saXRlcmFsIChzdHIuW2xpdF9zdGFydF0sIGZtdCkpXG4gICAgfCBzaXplIC0+IEZtdF9FQkIgKFN0cmluZ19saXRlcmFsIChTdHJpbmcuc3ViIHN0ciBsaXRfc3RhcnQgc2l6ZSwgZm10KSlcblxuICAoKiBTZWFyY2ggdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzdWItZm9ybWF0XG4gICAgIChpLmUuIHRoZSBjb3JyZXNwb25kaW5nIFwiJX1cIiBvciBcIiUpXCIpICopXG4gIGFuZCBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlblxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiB1bmNsb3NlZCBzdWItZm9ybWF0LCBcXFxuICAgICAgICAgZXhwZWN0ZWQgXFxcIiUlJWNcXFwiIGF0IGNoYXJhY3RlciBudW1iZXIgJWRcIiBzdHIgYyBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJyUnIC0+XG4gICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGlmIHN0ci5bc3RyX2luZCArIDFdID0gYyB0aGVuICgqIEVuZCBvZiBmb3JtYXQgZm91bmQgKikgc3RyX2luZCBlbHNlXG4gICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgICAgfCAnXycgLT5cbiAgICAgICAgICAoKiBTZWFyY2ggZm9yIFwiJV8oXCIgb3IgXCIlX3tcIi4gKilcbiAgICAgICAgICBpZiBzdHJfaW5kICsgMiA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAyXSB3aXRoXG4gICAgICAgICAgfCAneycgLT5cbiAgICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kICd9JyBpblxuICAgICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgICB8ICcoJyAtPlxuICAgICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgJyknIGluXG4gICAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICAgIHwgXyAtPiBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgY1xuICAgICAgICAgIGVuZFxuICAgICAgICB8ICd7JyAtPlxuICAgICAgICAgICgqICV7Li4uJX0gc3ViLWZvcm1hdCBmb3VuZC4gKilcbiAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCAnfScgaW5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICB8ICcoJyAtPlxuICAgICAgICAgICgqICUoLi4uJSkgc3ViLWZvcm1hdCBmb3VuZC4gKilcbiAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCAnKScgaW5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICB8ICd9JyAtPlxuICAgICAgICAgICgqIEVycm9yOiAlKC4uLiV9LiAqKVxuICAgICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiY2hhcmFjdGVyICcpJ1wiICd9J1xuICAgICAgICB8ICcpJyAtPlxuICAgICAgICAgICgqIEVycm9yOiAley4uLiUpLiAqKVxuICAgICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiY2hhcmFjdGVyICd9J1wiICcpJ1xuICAgICAgICB8IF8gLT5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICBlbmRcbiAgICB8IF8gLT4gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAoKiBDaGVjayBpZiBzeW1iIGlzIGEgdmFsaWQgaW50IGNvbnZlcnNpb24gYWZ0ZXIgXCIlbFwiLCBcIiVuXCIgb3IgXCIlTFwiICopXG4gIGFuZCBpc19pbnRfYmFzZSBzeW1iID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnZCcgfCAnaScgfCAneCcgfCAnWCcgfCAnbycgfCAndScgLT4gdHJ1ZVxuICAgIHwgXyAtPiBmYWxzZVxuXG4gICgqIENvbnZlcnQgYSBjaGFyIChsLCBuIG9yIEwpIHRvIGl0cyBhc3NvY2lhdGVkIGNvdW50ZXIuICopXG4gIGFuZCBjb3VudGVyX29mX2NoYXIgc3ltYiA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJ2wnIC0+IExpbmVfY291bnRlciAgfCAnbicgLT4gQ2hhcl9jb3VudGVyXG4gICAgfCAnTCcgLT4gVG9rZW5fY291bnRlciB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQ29udmVydCAocGx1cywgc3ltYikgdG8gaXRzIGFzc29jaWF0ZWQgaW50X2NvbnYuICopXG4gIGFuZCBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggc3BhY2Ugc3ltYiA9XG4gICAgbWF0Y2ggcGx1cywgaGFzaCwgc3BhY2UsIHN5bWIgd2l0aFxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ2QnIC0+IEludF9kICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdpJyAtPiBJbnRfaVxuICAgIHwgZmFsc2UsIGZhbHNlLCAgdHJ1ZSwgJ2QnIC0+IEludF9zZCB8IGZhbHNlLCBmYWxzZSwgIHRydWUsICdpJyAtPiBJbnRfc2lcbiAgICB8ICB0cnVlLCBmYWxzZSwgZmFsc2UsICdkJyAtPiBJbnRfcGQgfCAgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAnaScgLT4gSW50X3BpXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAneCcgLT4gSW50X3ggIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ1gnIC0+IEludF9YXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAneCcgLT4gSW50X0N4IHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ1gnIC0+IEludF9DWFxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ28nIC0+IEludF9vXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnbycgLT4gSW50X0NvXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAndScgLT4gSW50X3VcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdkJyAtPiBJbnRfQ2RcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdpJyAtPiBJbnRfQ2lcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICd1JyAtPiBJbnRfQ3VcbiAgICB8IF8sIHRydWUsIF8sICd4JyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ3hcbiAgICB8IF8sIHRydWUsIF8sICdYJyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ1hcbiAgICB8IF8sIHRydWUsIF8sICdvJyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ29cbiAgICB8IF8sIHRydWUsIF8sICgnZCcgfCAnaScgfCAndScpIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBmYWxzZSBzcGFjZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyMnXCJcbiAgICB8IHRydWUsIF8sIHRydWUsIF8gLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICgqIHBsdXMgYW5kIHNwYWNlOiBsZWdhY3kgaW1wbGVtZW50YXRpb24gcHJlZmVycyBwbHVzICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBmYWxzZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnICcgXCInKydcIlxuICAgIHwgZmFsc2UsIF8sIHRydWUsIF8gICAgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggZmFsc2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicgJ1wiXG4gICAgfCB0cnVlLCBfLCBmYWxzZSwgXyAgICAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIGZhbHNlIGhhc2ggc3BhY2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicrJ1wiXG4gICAgfCBmYWxzZSwgXywgZmFsc2UsIF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQ29udmVydCAocGx1cywgc3BhY2UsIHN5bWIpIHRvIGl0cyBhc3NvY2lhdGVkIGZsb2F0X2NvbnYuICopXG4gIGFuZCBjb21wdXRlX2Zsb2F0X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBzcGFjZSBzeW1iID1cbiAgICBsZXQgZmxhZyA9IG1hdGNoIHBsdXMsIHNwYWNlIHdpdGhcbiAgICB8IGZhbHNlLCBmYWxzZSAtPiBGbG9hdF9mbGFnX1xuICAgIHwgZmFsc2UsICB0cnVlIC0+IEZsb2F0X2ZsYWdfc1xuICAgIHwgIHRydWUsIGZhbHNlIC0+IEZsb2F0X2ZsYWdfcFxuICAgIHwgIHRydWUsICB0cnVlIC0+XG4gICAgICAoKiBwbHVzIGFuZCBzcGFjZTogbGVnYWN5IGltcGxlbWVudGF0aW9uIHByZWZlcnMgcGx1cyAqKVxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gRmxvYXRfZmxhZ19wXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnICcgXCInKydcIiBpblxuICAgIGxldCBraW5kID0gbWF0Y2ggaGFzaCwgc3ltYiB3aXRoXG4gICAgfCBfLCAnZicgLT4gRmxvYXRfZlxuICAgIHwgXywgJ2UnIC0+IEZsb2F0X2VcbiAgICB8IF8sICdFJyAtPiBGbG9hdF9FXG4gICAgfCBfLCAnZycgLT4gRmxvYXRfZ1xuICAgIHwgXywgJ0cnIC0+IEZsb2F0X0dcbiAgICB8IF8sICdoJyAtPiBGbG9hdF9oXG4gICAgfCBfLCAnSCcgLT4gRmxvYXRfSFxuICAgIHwgZmFsc2UsICdGJyAtPiBGbG9hdF9GXG4gICAgfCB0cnVlLCAnRicgLT4gRmxvYXRfQ0ZcbiAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlIGluXG4gICAgZmxhZywga2luZFxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBpbmNvbXBhdGlibGUgb3B0aW9ucy4qKVxuICBhbmQgaW5jb21wYXRpYmxlX2ZsYWcgOiB0eXBlIGEgLiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gc3RyaW5nIC0+IGEgPVxuICAgIGZ1biBwY3RfaW5kIHN0cl9pbmQgc3ltYiBvcHRpb24gLT5cbiAgICAgIGxldCBzdWJmbXQgPSBTdHJpbmcuc3ViIHN0ciBwY3RfaW5kIChzdHJfaW5kIC0gcGN0X2luZCkgaW5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgICVzIGlzIGluY29tcGF0aWJsZSB3aXRoICclYycgaW4gc3ViLWZvcm1hdCAlU1wiXG4gICAgICAgIHN0ciBwY3RfaW5kIG9wdGlvbiBzeW1iIHN1YmZtdFxuXG4gIGluIHBhcnNlIDAgKFN0cmluZy5sZW5ndGggc3RyKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgKCogR3VhcmRlZCBzdHJpbmcgdG8gZm9ybWF0IGNvbnZlcnNpb25zICopXG5cbigqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBmb3JtYXQgYWNjb3JkaW5nIHRvIGFuIGZtdHR5LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgZm9ybWF0X29mX3N0cmluZ19mbXR0eSBzdHIgZm10dHkgPVxuICBsZXQgRm10X0VCQiBmbXQgPSBmbXRfZWJiX29mX3N0cmluZyBzdHIgaW5cbiAgdHJ5IEZvcm1hdCAodHlwZV9mb3JtYXQgZm10IGZtdHR5LCBzdHIpXG4gIHdpdGggVHlwZV9taXNtYXRjaCAtPlxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiYmFkIGlucHV0OiBmb3JtYXQgdHlwZSBtaXNtYXRjaCBiZXR3ZWVuICVTIGFuZCAlU1wiXG4gICAgICBzdHIgKHN0cmluZ19vZl9mbXR0eSBmbXR0eSlcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhIGZvcm1hdCBjb21wYXRpYmxlIHdpdGggYW4gb3RoZXIgZm9ybWF0LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgZm9ybWF0X29mX3N0cmluZ19mb3JtYXQgc3RyIChGb3JtYXQgKGZtdCcsIHN0cicpKSA9XG4gIGxldCBGbXRfRUJCIGZtdCA9IGZtdF9lYmJfb2Zfc3RyaW5nIHN0ciBpblxuICB0cnkgRm9ybWF0ICh0eXBlX2Zvcm1hdCBmbXQgKGZtdHR5X29mX2ZtdCBmbXQnKSwgc3RyKVxuICB3aXRoIFR5cGVfbWlzbWF0Y2ggLT5cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImJhZCBpbnB1dDogZm9ybWF0IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiAlUyBhbmQgJVNcIiBzdHIgc3RyJ1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBYYXZpZXIgTGVyb3kgYW5kIFBpZXJyZSBXZWlzLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRcblxubGV0IGtmcHJpbnRmIGsgbyAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmIChmdW4gYWNjIC0+IG91dHB1dF9hY2MgbyBhY2M7IGsgbykgRW5kX29mX2FjYyBmbXRcbmxldCBrYnByaW50ZiBrIGIgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZiAoZnVuIGFjYyAtPiBidWZwdXRfYWNjIGIgYWNjOyBrIGIpIEVuZF9vZl9hY2MgZm10XG5sZXQgaWtmcHJpbnRmIGsgb2MgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX2lwcmludGYgayBvYyBmbXRcbmxldCBpa2JwcmludGYgPSBpa2ZwcmludGZcblxubGV0IGZwcmludGYgb2MgZm10ID0ga2ZwcmludGYgaWdub3JlIG9jIGZtdFxubGV0IGJwcmludGYgYiBmbXQgPSBrYnByaW50ZiBpZ25vcmUgYiBmbXRcbmxldCBpZnByaW50ZiBvYyBmbXQgPSBpa2ZwcmludGYgaWdub3JlIG9jIGZtdFxubGV0IGlicHJpbnRmIGIgZm10ID0gaWticHJpbnRmIGlnbm9yZSBiIGZtdFxubGV0IHByaW50ZiBmbXQgPSBmcHJpbnRmIHN0ZG91dCBmbXRcbmxldCBlcHJpbnRmIGZtdCA9IGZwcmludGYgc3RkZXJyIGZtdFxuXG5sZXQga3NwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBrJyBhY2MgPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gICAgc3RycHV0X2FjYyBidWYgYWNjO1xuICAgIGsgKEJ1ZmZlci5jb250ZW50cyBidWYpIGluXG4gIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10XG5cbmxldCBzcHJpbnRmIGZtdCA9IGtzcHJpbnRmIChmdW4gcyAtPiBzKSBmbXRcblxubGV0IGtwcmludGYgPSBrc3ByaW50ZlxuIiwiKCogQ29udl9lcnJvcjogTW9kdWxlIGZvciBIYW5kbGluZyBFcnJvcnMgZHVyaW5nIEF1dG9tYXRlZCBZb2pzb25cbiAgIENvbnZlcnNpb25zICopXG5cbm9wZW4hIFN0ZExhYmVsc1xub3BlbiBZb2pzb25fY29udlxuXG5sZXQgc3ByaW50ZiA9IFByaW50Zi5zcHJpbnRmXG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHR1cGxlcyAqKVxuXG5sZXQgdHVwbGVfb2Zfc2l6ZV9uX2V4cGVjdGVkIGxvYyBuIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAoc3ByaW50ZiBcIiVzX29mX3lvanNvbjogdHVwbGUgb2Ygc2l6ZSAlZCBleHBlY3RlZFwiIGxvYyBuKSB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHN1bSB0eXBlcyAqKVxuXG5sZXQgc3RhZ19ub19hcmdzIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogdGhpcyBjb25zdHJ1Y3RvciBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBzdGFnX2luY29ycmVjdF9uX2FyZ3MgbG9jIHRhZyB5b2pzb24gPVxuICBsZXQgbXNnID1cbiAgICBzcHJpbnRmIFwiJXNfb2ZfeW9qc29uOiBzdW0gdGFnICVTIGhhcyBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50c1wiIGxvYyB0YWdcbiAgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbmxldCBzdGFnX3Rha2VzX2FyZ3MgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiB0aGlzIGNvbnN0cnVjdG9yIHJlcXVpcmVzIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBuZXN0ZWRfbGlzdF9pbnZhbGlkX3N1bSBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IGV4cGVjdGVkIGEgdmFyaWFudCB0eXBlLCBzYXcgYSBuZXN0ZWQgbGlzdFwiKSB5b2pzb25cbjs7XG5cbmxldCBlbXB0eV9saXN0X2ludmFsaWRfc3VtIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogZXhwZWN0ZWQgYSB2YXJpYW50IHR5cGUsIHNhdyBhbiBlbXB0eSBsaXN0XCIpIHlvanNvblxuOztcblxubGV0IHVuZXhwZWN0ZWRfc3RhZyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHVuZXhwZWN0ZWQgdmFyaWFudCBjb25zdHJ1Y3RvclwiKSB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHJlY29yZHMgKilcblxubGV0IHJlY29yZF9zdXBlcmZsdW91c19maWVsZHMgfndoYXQgfmxvYyByZXZfZmxkX25hbWVzIHlvanNvbiA9XG4gIGxldCBmbGRfbmFtZXNfc3RyID0gU3RyaW5nLmNvbmNhdCAoTGlzdC5yZXYgcmV2X2ZsZF9uYW1lcykgfnNlcDpcIiBcIiBpblxuICBsZXQgbXNnID0gc3ByaW50ZiBcIiVzX29mX3lvanNvbjogJXM6ICVzXCIgbG9jIHdoYXQgZmxkX25hbWVzX3N0ciBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHJlY29yZF9kdXBsaWNhdGVfZmllbGRzIGxvYyByZXZfZmxkX25hbWVzIHlvanNvbiA9XG4gIHJlY29yZF9zdXBlcmZsdW91c19maWVsZHMgfndoYXQ6XCJkdXBsaWNhdGUgZmllbGRzXCIgfmxvYyByZXZfZmxkX25hbWVzIHlvanNvblxuOztcblxubGV0IHJlY29yZF9leHRyYV9maWVsZHMgbG9jIHJldl9mbGRfbmFtZXMgeW9qc29uID1cbiAgcmVjb3JkX3N1cGVyZmx1b3VzX2ZpZWxkcyB+d2hhdDpcImV4dHJhIGZpZWxkc1wiIH5sb2MgcmV2X2ZsZF9uYW1lcyB5b2pzb25cbjs7XG5cbmxldCByZWMgcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBmaWVsZHMgPSBmdW5jdGlvblxuICB8IFtdIC0+IFN0cmluZy5jb25jYXQgKExpc3QucmV2IGZpZWxkcykgfnNlcDpcIiBcIlxuICB8ICh0cnVlLCBmaWVsZCkgOjogcmVzdCAtPiByZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIChmaWVsZCA6OiBmaWVsZHMpIHJlc3RcbiAgfCBfIDo6IHJlc3QgLT4gcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBmaWVsZHMgcmVzdFxuOztcblxubGV0IHJlY29yZF91bmRlZmluZWRfZWxlbWVudHMgbG9jIHlvanNvbiBsc3QgPVxuICBsZXQgdW5kZWZpbmVkID0gcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBbXSBsc3QgaW5cbiAgbGV0IG1zZyA9XG4gICAgc3ByaW50ZiBcIiVzX29mX3lvanNvbjogdGhlIGZvbGxvd2luZyByZWNvcmQgZWxlbWVudHMgd2VyZSB1bmRlZmluZWQ6ICVzXCIgbG9jIHVuZGVmaW5lZFxuICBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHJlY29yZF9saXN0X2luc3RlYWRfYXRvbSBsb2MgeW9qc29uID1cbiAgbGV0IG1zZyA9IGxvYyBeIFwiX29mX3lvanNvbjogbGlzdCBpbnN0ZWFkIG9mIGF0b20gZm9yIHJlY29yZCBleHBlY3RlZFwiIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG5sZXQgcmVjb3JkX3BvbHlfZmllbGRfdmFsdWUgbG9jIHlvanNvbiA9XG4gIGxldCBtc2cgPVxuICAgIGxvY1xuICAgIF4gXCJfb2ZfeW9qc29uOiBjYW5ub3QgY29udmVydCB2YWx1ZXMgb2YgdHlwZXMgcmVzdWx0aW5nIGZyb20gcG9seW1vcnBoaWMgcmVjb3JkIFxcXG4gICAgICAgZmllbGRzXCJcbiAgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHBvbHltb3JwaGljIHZhcmlhbnRzICopXG5cbmV4Y2VwdGlvbiBOb192YXJpYW50X21hdGNoXG5cbmxldCBub192YXJpYW50X21hdGNoICgpID0gcmFpc2UgTm9fdmFyaWFudF9tYXRjaFxuXG5sZXQgbm9fbWF0Y2hpbmdfdmFyaWFudF9mb3VuZCBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IG5vIG1hdGNoaW5nIHZhcmlhbnQgZm91bmRcIikgeW9qc29uXG47O1xuXG5sZXQgcHRhZ19ub19hcmdzIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogcG9seW1vcnBoaWMgdmFyaWFudCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBwdGFnX2luY29ycmVjdF9uX2FyZ3MgbG9jIGNuc3RyIHlvanNvbiA9XG4gIGxldCBtc2cgPVxuICAgIHNwcmludGZcbiAgICAgIFwiJXNfb2ZfeW9qc29uOiBwb2x5bW9ycGhpYyB2YXJpYW50IHRhZyAlUyBoYXMgaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHNcIlxuICAgICAgbG9jXG4gICAgICBjbnN0clxuICBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHB0YWdfdGFrZXNfYXJncyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHBvbHltb3JwaGljIHZhcmlhbnQgdGFnIHRha2VzIGFuIGFyZ3VtZW50XCIpIHlvanNvblxuOztcblxubGV0IG5lc3RlZF9saXN0X2ludmFsaWRfcG9seV92YXIgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvclxuICAgIChsb2MgXiBcIl9vZl95b2pzb246IGEgbmVzdGVkIGxpc3QgaXMgYW4gaW52YWxpZCBwb2x5bW9ycGhpYyB2YXJpYW50XCIpXG4gICAgeW9qc29uXG47O1xuXG5sZXQgZW1wdHlfbGlzdF9pbnZhbGlkX3BvbHlfdmFyIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3JcbiAgICAobG9jIF4gXCJfb2ZfeW9qc29uOiB0aGUgZW1wdHkgbGlzdCBpcyBhbiBpbnZhbGlkIHBvbHltb3JwaGljIHZhcmlhbnRcIilcbiAgICB5b2pzb25cbjs7XG5cbmxldCBlbXB0eV90eXBlIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogdHJ5aW5nIHRvIGNvbnZlcnQgYW4gZW1wdHkgdHlwZVwiKSB5b2pzb25cbjs7XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIGlkIDogJ2EgLT4gJ2EgPSBcIiVpZGVudGl0eVwiXG5sZXQgY29uc3QgYyBfID0gY1xubGV0IGZsaXAgZiB4IHkgPSBmIHkgeFxubGV0IG5lZ2F0ZSBwIHYgPSBub3QgKHAgdilcblxuZXhjZXB0aW9uIEZpbmFsbHlfcmFpc2VkIG9mIGV4blxuXG5sZXQgKCkgPSBQcmludGV4Yy5yZWdpc3Rlcl9wcmludGVyIEBAIGZ1bmN0aW9uXG58IEZpbmFsbHlfcmFpc2VkIGV4biAtPiBTb21lIChcIkZ1bi5GaW5hbGx5X3JhaXNlZDogXCIgXiBQcmludGV4Yy50b19zdHJpbmcgZXhuKVxufCBfIC0+IE5vbmVcblxubGV0IHByb3RlY3QgfihmaW5hbGx5IDogdW5pdCAtPiB1bml0KSB3b3JrID1cbiAgbGV0IGZpbmFsbHlfbm9fZXhuICgpID1cbiAgICB0cnkgZmluYWxseSAoKSB3aXRoIGUgLT5cbiAgICAgIGxldCBidCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBQcmludGV4Yy5yYWlzZV93aXRoX2JhY2t0cmFjZSAoRmluYWxseV9yYWlzZWQgZSkgYnRcbiAgaW5cbiAgbWF0Y2ggd29yayAoKSB3aXRoXG4gIHwgcmVzdWx0IC0+IGZpbmFsbHlfbm9fZXhuICgpIDsgcmVzdWx0XG4gIHwgZXhjZXB0aW9uIHdvcmtfZXhuIC0+XG4gICAgICBsZXQgd29ya19idCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBmaW5hbGx5X25vX2V4biAoKSA7XG4gICAgICBQcmludGV4Yy5yYWlzZV93aXRoX2JhY2t0cmFjZSB3b3JrX2V4biB3b3JrX2J0XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1lc3NhZ2UgZGlnZXN0IChNRDUpICopXG5cbnR5cGUgdCA9IHN0cmluZ1xuXG5sZXQgY29tcGFyZSA9IFN0cmluZy5jb21wYXJlXG5sZXQgZXF1YWwgPSBTdHJpbmcuZXF1YWxcblxuZXh0ZXJuYWwgdW5zYWZlX3N0cmluZzogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9tZDVfc3RyaW5nXCJcbmV4dGVybmFsIGNoYW5uZWw6IGluX2NoYW5uZWwgLT4gaW50IC0+IHQgPSBcImNhbWxfbWQ1X2NoYW5cIlxuXG5sZXQgc3RyaW5nIHN0ciA9XG4gIHVuc2FmZV9zdHJpbmcgc3RyIDAgKFN0cmluZy5sZW5ndGggc3RyKVxuXG5sZXQgYnl0ZXMgYiA9IHN0cmluZyAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiKVxuXG5sZXQgc3Vic3RyaW5nIHN0ciBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IFN0cmluZy5sZW5ndGggc3RyIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3Quc3Vic3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfc3RyaW5nIHN0ciBvZnMgbGVuXG5cbmxldCBzdWJieXRlcyBiIG9mcyBsZW4gPSBzdWJzdHJpbmcgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYikgb2ZzIGxlblxuXG5sZXQgZmlsZSBmaWxlbmFtZSA9XG4gIGxldCBpYyA9IG9wZW5faW5fYmluIGZpbGVuYW1lIGluXG4gIG1hdGNoIGNoYW5uZWwgaWMgKC0xKSB3aXRoXG4gICAgfCBkIC0+IGNsb3NlX2luIGljOyBkXG4gICAgfCBleGNlcHRpb24gZSAtPiBjbG9zZV9pbiBpYzsgcmFpc2UgZVxuXG5sZXQgb3V0cHV0IGNoYW4gZGlnZXN0ID1cbiAgb3V0cHV0X3N0cmluZyBjaGFuIGRpZ2VzdFxuXG5sZXQgaW5wdXQgY2hhbiA9IHJlYWxseV9pbnB1dF9zdHJpbmcgY2hhbiAxNlxuXG5sZXQgY2hhcl9oZXggbiA9XG4gIENoYXIudW5zYWZlX2NociAobiArIGlmIG4gPCAxMCB0aGVuIENoYXIuY29kZSAnMCcgZWxzZSAoQ2hhci5jb2RlICdhJyAtIDEwKSlcblxubGV0IHRvX2hleCBkID1cbiAgaWYgU3RyaW5nLmxlbmd0aCBkIDw+IDE2IHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3QudG9faGV4XCI7XG4gIGxldCByZXN1bHQgPSBCeXRlcy5jcmVhdGUgMzIgaW5cbiAgZm9yIGkgPSAwIHRvIDE1IGRvXG4gICAgbGV0IHggPSBDaGFyLmNvZGUgZC5baV0gaW5cbiAgICBCeXRlcy51bnNhZmVfc2V0IHJlc3VsdCAoaSoyKSAoY2hhcl9oZXggKHggbHNyIDQpKTtcbiAgICBCeXRlcy51bnNhZmVfc2V0IHJlc3VsdCAoaSoyKzEpIChjaGFyX2hleCAoeCBsYW5kIDB4MGYpKTtcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXN1bHRcblxubGV0IGZyb21faGV4IHMgPVxuICBpZiBTdHJpbmcubGVuZ3RoIHMgPD4gMzIgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5mcm9tX2hleFwiO1xuICBsZXQgZGlnaXQgYyA9XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCAnMCcuLic5JyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCdcbiAgICB8ICdBJy4uJ0YnIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdBJyArIDEwXG4gICAgfCAnYScuLidmJyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnYScgKyAxMFxuICAgIHwgXyAtPiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkRpZ2VzdC5mcm9tX2hleFwiKVxuICBpblxuICBsZXQgYnl0ZSBpID0gZGlnaXQgcy5baV0gbHNsIDQgKyBkaWdpdCBzLltpKzFdIGluXG4gIGxldCByZXN1bHQgPSBCeXRlcy5jcmVhdGUgMTYgaW5cbiAgZm9yIGkgPSAwIHRvIDE1IGRvXG4gICAgQnl0ZXMuc2V0IHJlc3VsdCBpIChDaGFyLmNociAoYnl0ZSAoMiAqIGkpKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzdWx0XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEhhc2ggdGFibGVzICopXG5cbigqIFdlIGRvIGR5bmFtaWMgaGFzaGluZywgYW5kIHJlc2l6ZSB0aGUgdGFibGUgYW5kIHJlaGFzaCB0aGUgZWxlbWVudHNcbiAgIHdoZW4gYnVja2V0cyBiZWNvbWUgdG9vIGxvbmcuICopXG5cbnR5cGUgKCdhLCAnYikgdCA9XG4gIHsgbXV0YWJsZSBzaXplOiBpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgKCogbnVtYmVyIG9mIGVudHJpZXMgKilcbiAgICBtdXRhYmxlIGRhdGE6ICgnYSwgJ2IpIGJ1Y2tldGxpc3QgYXJyYXk7ICAoKiB0aGUgYnVja2V0cyAqKVxuICAgIHNlZWQ6IGludDsgICAgICAgICAgICAgICAgICAgICAgICAoKiBmb3IgcmFuZG9taXphdGlvbiAqKVxuICAgIG11dGFibGUgaW5pdGlhbF9zaXplOiBpbnQ7ICAgICAgICAgICAgICAgICgqIGluaXRpYWwgYXJyYXkgc2l6ZSAqKVxuICB9XG5cbmFuZCAoJ2EsICdiKSBidWNrZXRsaXN0ID1cbiAgICBFbXB0eVxuICB8IENvbnMgb2YgeyBtdXRhYmxlIGtleTogJ2E7XG4gICAgICAgICAgICAgIG11dGFibGUgZGF0YTogJ2I7XG4gICAgICAgICAgICAgIG11dGFibGUgbmV4dDogKCdhLCAnYikgYnVja2V0bGlzdCB9XG5cbigqIFRoZSBzaWduIG9mIGluaXRpYWxfc2l6ZSBlbmNvZGVzIHRoZSBmYWN0IHRoYXQgYSB0cmF2ZXJzYWwgaXNcbiAgIG9uZ29pbmcgb3Igbm90LlxuXG4gICBUaGlzIGRpc2FibGVzIHRoZSBlZmZpY2llbnQgaW4gcGxhY2UgaW1wbGVtZW50YXRpb24gb2YgcmVzaXppbmcuXG4qKVxuXG5sZXQgb25nb2luZ190cmF2ZXJzYWwgaCA9XG4gIE9iai5zaXplIChPYmoucmVwciBoKSA8IDQgKCogY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBoYXNoIHRhYmxlcyAqKVxuICB8fCBoLmluaXRpYWxfc2l6ZSA8IDBcblxubGV0IGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaCA9XG4gIGguaW5pdGlhbF9zaXplIDwtIC0gaC5pbml0aWFsX3NpemVcblxuKCogVG8gcGljayByYW5kb20gc2VlZHMgaWYgcmVxdWVzdGVkICopXG5cbmxldCByYW5kb21pemVkX2RlZmF1bHQgPVxuICBsZXQgcGFyYW1zID1cbiAgICB0cnkgU3lzLmdldGVudiBcIk9DQU1MUlVOUEFSQU1cIiB3aXRoIE5vdF9mb3VuZCAtPlxuICAgIHRyeSBTeXMuZ2V0ZW52IFwiQ0FNTFJVTlBBUkFNXCIgd2l0aCBOb3RfZm91bmQgLT4gXCJcIiBpblxuICBTdHJpbmcuY29udGFpbnMgcGFyYW1zICdSJ1xuXG5sZXQgcmFuZG9taXplZCA9IHJlZiByYW5kb21pemVkX2RlZmF1bHRcblxubGV0IHJhbmRvbWl6ZSAoKSA9IHJhbmRvbWl6ZWQgOj0gdHJ1ZVxubGV0IGlzX3JhbmRvbWl6ZWQgKCkgPSAhcmFuZG9taXplZFxuXG5sZXQgcHJuZyA9IGxhenkgKFJhbmRvbS5TdGF0ZS5tYWtlX3NlbGZfaW5pdCgpKVxuXG4oKiBGdW5jdGlvbnMgd2hpY2ggYXBwZWFyIGJlZm9yZSB0aGUgZnVuY3RvcmlhbCBpbnRlcmZhY2UgbXVzdCBlaXRoZXIgYmVcbiAgIGluZGVwZW5kZW50IG9mIHRoZSBoYXNoIGZ1bmN0aW9uIG9yIHRha2UgaXQgYXMgYSBwYXJhbWV0ZXIgKHNlZSAjMjIwMiBhbmRcbiAgIGNvZGUgYmVsb3cgdGhlIGZ1bmN0b3IgZGVmaW5pdGlvbnMuICopXG5cbigqIENyZWF0aW5nIGEgZnJlc2gsIGVtcHR5IHRhYmxlICopXG5cbmxldCByZWMgcG93ZXJfMl9hYm92ZSB4IG4gPVxuICBpZiB4ID49IG4gdGhlbiB4XG4gIGVsc2UgaWYgeCAqIDIgPiBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIHhcbiAgZWxzZSBwb3dlcl8yX2Fib3ZlICh4ICogMikgblxuXG5sZXQgY3JlYXRlID8ocmFuZG9tID0gIXJhbmRvbWl6ZWQpIGluaXRpYWxfc2l6ZSA9XG4gIGxldCBzID0gcG93ZXJfMl9hYm92ZSAxNiBpbml0aWFsX3NpemUgaW5cbiAgbGV0IHNlZWQgPSBpZiByYW5kb20gdGhlbiBSYW5kb20uU3RhdGUuYml0cyAoTGF6eS5mb3JjZSBwcm5nKSBlbHNlIDAgaW5cbiAgeyBpbml0aWFsX3NpemUgPSBzOyBzaXplID0gMDsgc2VlZCA9IHNlZWQ7IGRhdGEgPSBBcnJheS5tYWtlIHMgRW1wdHkgfVxuXG5sZXQgY2xlYXIgaCA9XG4gIGlmIGguc2l6ZSA+IDAgdGhlbiBiZWdpblxuICAgIGguc2l6ZSA8LSAwO1xuICAgIEFycmF5LmZpbGwgaC5kYXRhIDAgKEFycmF5Lmxlbmd0aCBoLmRhdGEpIEVtcHR5XG4gIGVuZFxuXG5sZXQgcmVzZXQgaCA9XG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggaC5kYXRhIGluXG4gIGlmIE9iai5zaXplIChPYmoucmVwciBoKSA8IDQgKCogY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBoYXNoIHRhYmxlcyAqKVxuICAgIHx8IGxlbiA9IGFicyBoLmluaXRpYWxfc2l6ZSB0aGVuXG4gICAgY2xlYXIgaFxuICBlbHNlIGJlZ2luXG4gICAgaC5zaXplIDwtIDA7XG4gICAgaC5kYXRhIDwtIEFycmF5Lm1ha2UgKGFicyBoLmluaXRpYWxfc2l6ZSkgRW1wdHlcbiAgZW5kXG5cbmxldCBjb3B5X2J1Y2tldGxpc3QgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+IEVtcHR5XG4gIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgbGV0IHJlYyBsb29wIHByZWMgPSBmdW5jdGlvblxuICAgICAgICB8IEVtcHR5IC0+ICgpXG4gICAgICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICAgICAgbGV0IHIgPSBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGluXG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICAgIHwgRW1wdHkgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgICB8IENvbnMgcHJlYyAtPiAgcHJlYy5uZXh0IDwtIHJcbiAgICAgICAgICAgIGVuZDtcbiAgICAgICAgICAgIGxvb3AgciBuZXh0XG4gICAgICBpblxuICAgICAgbGV0IHIgPSBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGluXG4gICAgICBsb29wIHIgbmV4dDtcbiAgICAgIHJcblxubGV0IGNvcHkgaCA9IHsgaCB3aXRoIGRhdGEgPSBBcnJheS5tYXAgY29weV9idWNrZXRsaXN0IGguZGF0YSB9XG5cbmxldCBsZW5ndGggaCA9IGguc2l6ZVxuXG5sZXQgaW5zZXJ0X2FsbF9idWNrZXRzIGluZGV4ZnVuIGlucGxhY2Ugb2RhdGEgbmRhdGEgPVxuICBsZXQgbnNpemUgPSBBcnJheS5sZW5ndGggbmRhdGEgaW5cbiAgbGV0IG5kYXRhX3RhaWwgPSBBcnJheS5tYWtlIG5zaXplIEVtcHR5IGluXG4gIGxldCByZWMgaW5zZXJ0X2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgfCBFbXB0eSAtPiAoKVxuICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBhcyBjZWxsIC0+XG4gICAgICAgIGxldCBjZWxsID1cbiAgICAgICAgICBpZiBpbnBsYWNlIHRoZW4gY2VsbFxuICAgICAgICAgIGVsc2UgQ29ucyB7a2V5OyBkYXRhOyBuZXh0ID0gRW1wdHl9XG4gICAgICAgIGluXG4gICAgICAgIGxldCBuaWR4ID0gaW5kZXhmdW4ga2V5IGluXG4gICAgICAgIGJlZ2luIG1hdGNoIG5kYXRhX3RhaWwuKG5pZHgpIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBuZGF0YS4obmlkeCkgPC0gY2VsbDtcbiAgICAgICAgfCBDb25zIHRhaWwgLT4gdGFpbC5uZXh0IDwtIGNlbGw7XG4gICAgICAgIGVuZDtcbiAgICAgICAgbmRhdGFfdGFpbC4obmlkeCkgPC0gY2VsbDtcbiAgICAgICAgaW5zZXJ0X2J1Y2tldCBuZXh0XG4gIGluXG4gIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggb2RhdGEgLSAxIGRvXG4gICAgaW5zZXJ0X2J1Y2tldCBvZGF0YS4oaSlcbiAgZG9uZTtcbiAgaWYgaW5wbGFjZSB0aGVuXG4gICAgZm9yIGkgPSAwIHRvIG5zaXplIC0gMSBkb1xuICAgICAgbWF0Y2ggbmRhdGFfdGFpbC4oaSkgd2l0aFxuICAgICAgfCBFbXB0eSAtPiAoKVxuICAgICAgfCBDb25zIHRhaWwgLT4gdGFpbC5uZXh0IDwtIEVtcHR5XG4gICAgZG9uZVxuXG5sZXQgcmVzaXplIGluZGV4ZnVuIGggPVxuICBsZXQgb2RhdGEgPSBoLmRhdGEgaW5cbiAgbGV0IG9zaXplID0gQXJyYXkubGVuZ3RoIG9kYXRhIGluXG4gIGxldCBuc2l6ZSA9IG9zaXplICogMiBpblxuICBpZiBuc2l6ZSA8IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIHRoZW4gYmVnaW5cbiAgICBsZXQgbmRhdGEgPSBBcnJheS5tYWtlIG5zaXplIEVtcHR5IGluXG4gICAgbGV0IGlucGxhY2UgPSBub3QgKG9uZ29pbmdfdHJhdmVyc2FsIGgpIGluXG4gICAgaC5kYXRhIDwtIG5kYXRhOyAgICAgICAgICAoKiBzbyB0aGF0IGluZGV4ZnVuIHNlZXMgdGhlIG5ldyBidWNrZXQgY291bnQgKilcbiAgICBpbnNlcnRfYWxsX2J1Y2tldHMgKGluZGV4ZnVuIGgpIGlucGxhY2Ugb2RhdGEgbmRhdGFcbiAgZW5kXG5cbmxldCBpdGVyIGYgaCA9XG4gIGxldCByZWMgZG9fYnVja2V0ID0gZnVuY3Rpb25cbiAgICB8IEVtcHR5IC0+XG4gICAgICAgICgpXG4gICAgfCBDb25ze2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgZiBrZXkgZGF0YTsgZG9fYnVja2V0IG5leHQgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgZG9fYnVja2V0IGQuKGkpXG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG5sZXQgcmVjIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgcHJlYyA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIGJlZ2luIG1hdGNoIHByZWMgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIEVtcHR5XG4gICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gRW1wdHlcbiAgICAgIGVuZFxuICB8IChDb25zICh7a2V5OyBkYXRhOyBuZXh0fSBhcyBjKSkgYXMgc2xvdCAtPlxuICAgICAgYmVnaW4gbWF0Y2ggZiBrZXkgZGF0YSB3aXRoXG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHByZWMgbmV4dFxuICAgICAgfCBTb21lIGRhdGEgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gc2xvdFxuICAgICAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBzbG90XG4gICAgICAgICAgZW5kO1xuICAgICAgICAgIGMuZGF0YSA8LSBkYXRhO1xuICAgICAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgc2xvdCBuZXh0XG4gICAgICBlbmRcblxubGV0IGZpbHRlcl9tYXBfaW5wbGFjZSBmIGggPVxuICBsZXQgZCA9IGguZGF0YSBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBFbXB0eSBoLmRhdGEuKGkpXG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGhcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbmxldCBmb2xkIGYgaCBpbml0ID1cbiAgbGV0IHJlYyBkb19idWNrZXQgYiBhY2N1ID1cbiAgICBtYXRjaCBiIHdpdGhcbiAgICAgIEVtcHR5IC0+XG4gICAgICAgIGFjY3VcbiAgICB8IENvbnN7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICBkb19idWNrZXQgbmV4dCAoZiBrZXkgZGF0YSBhY2N1KSBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgICBsZXQgYWNjdSA9IHJlZiBpbml0IGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgYWNjdSA6PSBkb19idWNrZXQgZC4oaSkgIWFjY3VcbiAgICBkb25lO1xuICAgIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICAhYWNjdVxuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxudHlwZSBzdGF0aXN0aWNzID0ge1xuICBudW1fYmluZGluZ3M6IGludDtcbiAgbnVtX2J1Y2tldHM6IGludDtcbiAgbWF4X2J1Y2tldF9sZW5ndGg6IGludDtcbiAgYnVja2V0X2hpc3RvZ3JhbTogaW50IGFycmF5XG59XG5cbmxldCByZWMgYnVja2V0X2xlbmd0aCBhY2N1ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBhY2N1XG4gIHwgQ29uc3tuZXh0fSAtPiBidWNrZXRfbGVuZ3RoIChhY2N1ICsgMSkgbmV4dFxuXG5sZXQgc3RhdHMgaCA9XG4gIGxldCBtYmwgPVxuICAgIEFycmF5LmZvbGRfbGVmdCAoZnVuIG0gYiAtPiBJbnQubWF4IG0gKGJ1Y2tldF9sZW5ndGggMCBiKSkgMCBoLmRhdGEgaW5cbiAgbGV0IGhpc3RvID0gQXJyYXkubWFrZSAobWJsICsgMSkgMCBpblxuICBBcnJheS5pdGVyXG4gICAgKGZ1biBiIC0+XG4gICAgICBsZXQgbCA9IGJ1Y2tldF9sZW5ndGggMCBiIGluXG4gICAgICBoaXN0by4obCkgPC0gaGlzdG8uKGwpICsgMSlcbiAgICBoLmRhdGE7XG4gIHsgbnVtX2JpbmRpbmdzID0gaC5zaXplO1xuICAgIG51bV9idWNrZXRzID0gQXJyYXkubGVuZ3RoIGguZGF0YTtcbiAgICBtYXhfYnVja2V0X2xlbmd0aCA9IG1ibDtcbiAgICBidWNrZXRfaGlzdG9ncmFtID0gaGlzdG8gfVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHRibCA9XG4gICgqIGNhcHR1cmUgY3VycmVudCBhcnJheSwgc28gdGhhdCBldmVuIGlmIHRoZSB0YWJsZSBpcyByZXNpemVkIHdlXG4gICAgIGtlZXAgaXRlcmF0aW5nIG9uIHRoZSBzYW1lIGFycmF5ICopXG4gIGxldCB0YmxfZGF0YSA9IHRibC5kYXRhIGluXG4gICgqIHN0YXRlOiBpbmRleCAqIG5leHQgYnVja2V0IHRvIHRyYXZlcnNlICopXG4gIGxldCByZWMgYXV4IGkgYnVjayAoKSA9IG1hdGNoIGJ1Y2sgd2l0aFxuICAgIHwgRW1wdHkgLT5cbiAgICAgICAgaWYgaSA9IEFycmF5Lmxlbmd0aCB0YmxfZGF0YVxuICAgICAgICB0aGVuIFNlcS5OaWxcbiAgICAgICAgZWxzZSBhdXgoaSsxKSB0YmxfZGF0YS4oaSkgKClcbiAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgU2VxLkNvbnMgKChrZXksIGRhdGEpLCBhdXggaSBuZXh0KVxuICBpblxuICBhdXggMCBFbXB0eVxuXG5sZXQgdG9fc2VxX2tleXMgbSA9IFNlcS5tYXAgZnN0ICh0b19zZXEgbSlcblxubGV0IHRvX3NlcV92YWx1ZXMgbSA9IFNlcS5tYXAgc25kICh0b19zZXEgbSlcblxuKCogRnVuY3RvcmlhbCBpbnRlcmZhY2UgKilcblxubW9kdWxlIHR5cGUgSGFzaGVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgaGFzaDogdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFNlZWRlZEhhc2hlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgZXF1YWw6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGhhc2g6IGludCAtPiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgUyA9XG4gIHNpZ1xuICAgIHR5cGUga2V5XG4gICAgdHlwZSAhJ2EgdFxuICAgIHZhbCBjcmVhdGU6IGludCAtPiAnYSB0XG4gICAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIGNvcHk6ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBhZGQ6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgcmVtb3ZlOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gICAgdmFsIGZpbmQ6ICdhIHQgLT4ga2V5IC0+ICdhXG4gICAgdmFsIGZpbmRfb3B0OiAnYSB0IC0+IGtleSAtPiAnYSBvcHRpb25cbiAgICB2YWwgZmluZF9hbGw6ICdhIHQgLT4ga2V5IC0+ICdhIGxpc3RcbiAgICB2YWwgcmVwbGFjZSA6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgbWVtIDogJ2EgdCAtPiBrZXkgLT4gYm9vbFxuICAgIHZhbCBpdGVyOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmaWx0ZXJfbWFwX2lucGxhY2U6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBsZW5ndGg6ICdhIHQgLT4gaW50XG4gICAgdmFsIHN0YXRzOiAnYSB0IC0+IHN0YXRpc3RpY3NcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3NlcV9rZXlzIDogXyB0IC0+IGtleSBTZXEudFxuICAgIHZhbCB0b19zZXFfdmFsdWVzIDogJ2EgdCAtPiAnYSBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgcmVwbGFjZV9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFNlZWRlZFMgPVxuICBzaWdcbiAgICB0eXBlIGtleVxuICAgIHR5cGUgISdhIHRcbiAgICB2YWwgY3JlYXRlIDogP3JhbmRvbTpib29sIC0+IGludCAtPiAnYSB0XG4gICAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIGNvcHkgOiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgYWRkIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCByZW1vdmUgOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gICAgdmFsIGZpbmQgOiAnYSB0IC0+IGtleSAtPiAnYVxuICAgIHZhbCBmaW5kX29wdDogJ2EgdCAtPiBrZXkgLT4gJ2Egb3B0aW9uXG4gICAgdmFsIGZpbmRfYWxsIDogJ2EgdCAtPiBrZXkgLT4gJ2EgbGlzdFxuICAgIHZhbCByZXBsYWNlIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCBtZW0gOiAnYSB0IC0+IGtleSAtPiBib29sXG4gICAgdmFsIGl0ZXIgOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmaWx0ZXJfbWFwX2lucGxhY2U6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZCA6IChrZXkgLT4gJ2EgLT4gJ2IgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgLT4gJ2JcbiAgICB2YWwgbGVuZ3RoIDogJ2EgdCAtPiBpbnRcbiAgICB2YWwgc3RhdHM6ICdhIHQgLT4gc3RhdGlzdGljc1xuICAgIHZhbCB0b19zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX2tleXMgOiBfIHQgLT4ga2V5IFNlcS50XG4gICAgdmFsIHRvX3NlcV92YWx1ZXMgOiAnYSB0IC0+ICdhIFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCByZXBsYWNlX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIG9mX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICBlbmRcblxubW9kdWxlIE1ha2VTZWVkZWQoSDogU2VlZGVkSGFzaGVkVHlwZSk6IChTZWVkZWRTIHdpdGggdHlwZSBrZXkgPSBILnQpID1cbiAgc3RydWN0XG4gICAgdHlwZSBrZXkgPSBILnRcbiAgICB0eXBlICdhIGhhc2h0YmwgPSAoa2V5LCAnYSkgdFxuICAgIHR5cGUgJ2EgdCA9ICdhIGhhc2h0YmxcbiAgICBsZXQgY3JlYXRlID0gY3JlYXRlXG4gICAgbGV0IGNsZWFyID0gY2xlYXJcbiAgICBsZXQgcmVzZXQgPSByZXNldFxuICAgIGxldCBjb3B5ID0gY29weVxuXG4gICAgbGV0IGtleV9pbmRleCBoIGtleSA9XG4gICAgICAoSC5oYXNoIGguc2VlZCBrZXkpIGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuXG4gICAgbGV0IGFkZCBoIGtleSBkYXRhID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICBsZXQgYnVja2V0ID0gQ29uc3trZXk7IGRhdGE7IG5leHQ9aC5kYXRhLihpKX0gaW5cbiAgICAgIGguZGF0YS4oaSkgPC0gYnVja2V0O1xuICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9idWNrZXQgaCBpIGtleSBwcmVjID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICAoKVxuICAgICAgfCAoQ29ucyB7a2V5PWs7IG5leHR9KSBhcyBjIC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICAgICAgbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gbmV4dFxuICAgICAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIG5leHRcbiAgICAgICAgICBlbmRcbiAgICAgICAgICBlbHNlIHJlbW92ZV9idWNrZXQgaCBpIGtleSBjIG5leHRcblxuICAgIGxldCByZW1vdmUgaCBrZXkgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIHJlbW92ZV9idWNrZXQgaCBpIGtleSBFbXB0eSBoLmRhdGEuKGkpXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjIGtleSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgayB0aGVuIGRhdGEgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dFxuXG4gICAgbGV0IGZpbmQgaCBrZXkgPVxuICAgICAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsxIHRoZW4gZDEgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsyIHRoZW4gZDIgZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMyB0aGVuIGQzIGVsc2UgZmluZF9yZWMga2V5IG5leHQzXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjX29wdCBrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrIHRoZW4gU29tZSBkYXRhIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0XG5cbiAgICBsZXQgZmluZF9vcHQgaCBrZXkgPVxuICAgICAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMSB0aGVuIFNvbWUgZDEgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMiB0aGVuIFNvbWUgZDIgZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazMgdGhlbiBTb21lIGQzIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0M1xuXG4gICAgbGV0IGZpbmRfYWxsIGgga2V5ID1cbiAgICAgIGxldCByZWMgZmluZF9pbl9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIFtdXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE9ZDsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGsga2V5XG4gICAgICAgICAgdGhlbiBkIDo6IGZpbmRfaW5fYnVja2V0IG5leHRcbiAgICAgICAgICBlbHNlIGZpbmRfaW5fYnVja2V0IG5leHQgaW5cbiAgICAgIGZpbmRfaW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG4gICAgbGV0IHJlYyByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgdHJ1ZVxuICAgICAgfCBDb25zICh7a2V5PWs7IG5leHR9IGFzIHNsb3QpIC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gKHNsb3Qua2V5IDwtIGtleTsgc2xvdC5kYXRhIDwtIGRhdGE7IGZhbHNlKVxuICAgICAgICAgIGVsc2UgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbmV4dFxuXG4gICAgbGV0IHJlcGxhY2UgaCBrZXkgZGF0YSA9XG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICAgICAgbGV0IGwgPSBoLmRhdGEuKGkpIGluXG4gICAgICBpZiByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBsIHRoZW4gYmVnaW5cbiAgICAgICAgaC5kYXRhLihpKSA8LSBDb25ze2tleTsgZGF0YTsgbmV4dD1sfTtcbiAgICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICAgIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcbiAgICAgIGVuZFxuXG4gICAgbGV0IG1lbSBoIGtleSA9XG4gICAgICBsZXQgcmVjIG1lbV9pbl9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IENvbnN7a2V5PWs7IG5leHR9IC0+XG4gICAgICAgICAgSC5lcXVhbCBrIGtleSB8fCBtZW1faW5fYnVja2V0IG5leHQgaW5cbiAgICAgIG1lbV9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbiAgICBsZXQgYWRkX3NlcSB0YmwgaSA9XG4gICAgICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IGFkZCB0YmwgayB2KSBpXG5cbiAgICBsZXQgcmVwbGFjZV9zZXEgdGJsIGkgPVxuICAgICAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiByZXBsYWNlIHRibCBrIHYpIGlcblxuICAgIGxldCBvZl9zZXEgaSA9XG4gICAgICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gICAgICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgICAgIHRibFxuXG4gICAgbGV0IGl0ZXIgPSBpdGVyXG4gICAgbGV0IGZpbHRlcl9tYXBfaW5wbGFjZSA9IGZpbHRlcl9tYXBfaW5wbGFjZVxuICAgIGxldCBmb2xkID0gZm9sZFxuICAgIGxldCBsZW5ndGggPSBsZW5ndGhcbiAgICBsZXQgc3RhdHMgPSBzdGF0c1xuICAgIGxldCB0b19zZXEgPSB0b19zZXFcbiAgICBsZXQgdG9fc2VxX2tleXMgPSB0b19zZXFfa2V5c1xuICAgIGxldCB0b19zZXFfdmFsdWVzID0gdG9fc2VxX3ZhbHVlc1xuICBlbmRcblxubW9kdWxlIE1ha2UoSDogSGFzaGVkVHlwZSk6IChTIHdpdGggdHlwZSBrZXkgPSBILnQpID1cbiAgc3RydWN0XG4gICAgaW5jbHVkZSBNYWtlU2VlZGVkKHN0cnVjdFxuICAgICAgICB0eXBlIHQgPSBILnRcbiAgICAgICAgbGV0IGVxdWFsID0gSC5lcXVhbFxuICAgICAgICBsZXQgaGFzaCAoX3NlZWQ6IGludCkgeCA9IEguaGFzaCB4XG4gICAgICBlbmQpXG4gICAgbGV0IGNyZWF0ZSBzeiA9IGNyZWF0ZSB+cmFuZG9tOmZhbHNlIHN6XG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG4gIGVuZFxuXG4oKiBQb2x5bW9ycGhpYyBoYXNoIGZ1bmN0aW9uLWJhc2VkIHRhYmxlcyAqKVxuKCogQ29kZSBpbmNsdWRlZCBiZWxvdyB0aGUgZnVuY3RvcmlhbCBpbnRlcmZhY2UgdG8gZ3VhcmQgYWdhaW5zdCBhY2NpZGVudGFsXG4gICB1c2UgLSBzZWUgIzIyMDIgKilcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2hfcGFyYW0gOlxuICBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiBpbnQgPSBcImNhbWxfaGFzaFwiIFtAQG5vYWxsb2NdXG5cbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG5sZXQgaGFzaF9wYXJhbSBuMSBuMiB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gbjEgbjIgMCB4XG5sZXQgc2VlZGVkX2hhc2ggc2VlZCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIHNlZWQgeFxuXG5sZXQga2V5X2luZGV4IGgga2V5ID1cbiAgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpID49IDRcbiAgdGhlbiAoc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIGguc2VlZCBrZXkpIGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuICBlbHNlIGludmFsaWRfYXJnIFwiSGFzaHRibDogdW5zdXBwb3J0ZWQgaGFzaCB0YWJsZSBmb3JtYXRcIlxuXG5sZXQgYWRkIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgYnVja2V0ID0gQ29uc3trZXk7IGRhdGE7IG5leHQ9aC5kYXRhLihpKX0gaW5cbiAgaC5kYXRhLihpKSA8LSBidWNrZXQ7XG4gIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG5cbmxldCByZWMgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IHByZWMgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICAoKVxuICB8IChDb25zIHtrZXk9azsgbmV4dH0pIGFzIGMgLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIGJlZ2luXG4gICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIG5leHRcbiAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIG5leHRcbiAgICAgIGVuZFxuICAgICAgZWxzZSByZW1vdmVfYnVja2V0IGggaSBrZXkgYyBuZXh0XG5cbmxldCByZW1vdmUgaCBrZXkgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICByZW1vdmVfYnVja2V0IGggaSBrZXkgRW1wdHkgaC5kYXRhLihpKVxuXG5sZXQgcmVjIGZpbmRfcmVjIGtleSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrID0gMCB0aGVuIGRhdGEgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dFxuXG5sZXQgZmluZCBoIGtleSA9XG4gIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrMSA9IDAgdGhlbiBkMSBlbHNlXG4gICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMiA9IDAgdGhlbiBkMiBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgaWYgY29tcGFyZSBrZXkgazMgPSAwIHRoZW4gZDMgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dDNcblxubGV0IHJlYyBmaW5kX3JlY19vcHQga2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgTm9uZVxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrID0gMCB0aGVuIFNvbWUgZGF0YSBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dFxuXG5sZXQgZmluZF9vcHQgaCBrZXkgPVxuICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICB8IEVtcHR5IC0+IE5vbmVcbiAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsxID0gMCB0aGVuIFNvbWUgZDEgZWxzZVxuICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGsyID0gMCB0aGVuIFNvbWUgZDIgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMyA9IDAgdGhlbiBTb21lIGQzIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0M1xuXG5sZXQgZmluZF9hbGwgaCBrZXkgPVxuICBsZXQgcmVjIGZpbmRfaW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgW11cbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gZGF0YSA6OiBmaW5kX2luX2J1Y2tldCBuZXh0XG4gICAgICBlbHNlIGZpbmRfaW5fYnVja2V0IG5leHQgaW5cbiAgZmluZF9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCByZWMgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoe2tleT1rOyBuZXh0fSBhcyBzbG90KSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gKHNsb3Qua2V5IDwtIGtleTsgc2xvdC5kYXRhIDwtIGRhdGE7IGZhbHNlKVxuICAgICAgZWxzZSByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBuZXh0XG5cbmxldCByZXBsYWNlIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgbCA9IGguZGF0YS4oaSkgaW5cbiAgaWYgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbCB0aGVuIGJlZ2luXG4gICAgaC5kYXRhLihpKSA8LSBDb25ze2tleTsgZGF0YTsgbmV4dD1sfTtcbiAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG4gIGVuZFxuXG5sZXQgbWVtIGgga2V5ID1cbiAgbGV0IHJlYyBtZW1faW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgZmFsc2VcbiAgfCBDb25ze2tleT1rOyBuZXh0fSAtPlxuICAgICAgY29tcGFyZSBrIGtleSA9IDAgfHwgbWVtX2luX2J1Y2tldCBuZXh0IGluXG4gIG1lbV9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCBhZGRfc2VxIHRibCBpID1cbiAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG5sZXQgcmVwbGFjZV9zZXEgdGJsIGkgPVxuICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IHJlcGxhY2UgdGJsIGsgdikgaVxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gIHJlcGxhY2Vfc2VxIHRibCBpO1xuICB0YmxcblxubGV0IHJlYnVpbGQgPyhyYW5kb20gPSAhcmFuZG9taXplZCkgaCA9XG4gIGxldCBzID0gcG93ZXJfMl9hYm92ZSAxNiAoQXJyYXkubGVuZ3RoIGguZGF0YSkgaW5cbiAgbGV0IHNlZWQgPVxuICAgIGlmIHJhbmRvbSB0aGVuIFJhbmRvbS5TdGF0ZS5iaXRzIChMYXp5LmZvcmNlIHBybmcpXG4gICAgZWxzZSBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNCB0aGVuIGguc2VlZFxuICAgIGVsc2UgMCBpblxuICBsZXQgaCcgPSB7XG4gICAgc2l6ZSA9IGguc2l6ZTtcbiAgICBkYXRhID0gQXJyYXkubWFrZSBzIEVtcHR5O1xuICAgIHNlZWQgPSBzZWVkO1xuICAgIGluaXRpYWxfc2l6ZSA9IGlmIE9iai5zaXplIChPYmoucmVwciBoKSA+PSA0IHRoZW4gaC5pbml0aWFsX3NpemUgZWxzZSBzXG4gIH0gaW5cbiAgaW5zZXJ0X2FsbF9idWNrZXRzIChrZXlfaW5kZXggaCcpIGZhbHNlIGguZGF0YSBoJy5kYXRhO1xuICBoJ1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBIHByZXR0eS1wcmludGluZyBmYWNpbGl0eSBhbmQgZGVmaW5pdGlvbiBvZiBmb3JtYXR0ZXJzIGZvciAncGFyYWxsZWwnXG4gICAoaS5lLiB1bnJlbGF0ZWQgb3IgaW5kZXBlbmRlbnQpIHByZXR0eS1wcmludGluZyBvbiBtdWx0aXBsZSBvdXQgY2hhbm5lbHMuICopXG5cbigqXG4gICBUaGUgcHJldHR5LXByaW50aW5nIGVuZ2luZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuXG4qKVxuXG5sZXQgaWQgeCA9IHhcblxuKCogQSBkZXZvdGVkIHR5cGUgZm9yIHNpemVzIHRvIGF2b2lkIGNvbmZ1c2lvblxuICAgYmV0d2VlbiBzaXplcyBhbmQgbWVyZSBpbnRlZ2Vycy4gKilcbm1vZHVsZSBTaXplIDogc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCB0b19pbnQgOiB0IC0+IGludFxuICB2YWwgb2ZfaW50IDogaW50IC0+IHRcbiAgdmFsIHplcm8gOiB0XG4gIHZhbCB1bmtub3duIDogdFxuICB2YWwgaXNfa25vd24gOiB0IC0+IGJvb2xcbmVuZCAgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gaW50XG5cbiAgbGV0IHRvX2ludCA9IGlkXG4gIGxldCBvZl9pbnQgPSBpZFxuICBsZXQgemVybyA9IDBcbiAgbGV0IHVua25vd24gPSAtMVxuICBsZXQgaXNfa25vd24gbiA9IG4gPj0gMFxuZW5kXG5cblxuXG4oKiBUaGUgcHJldHR5LXByaW50aW5nIGJveGVzIGRlZmluaXRpb246XG4gICBhIHByZXR0eS1wcmludGluZyBib3ggaXMgZWl0aGVyXG4gICAtIGhib3g6IGhvcml6b250YWwgYm94IChubyBsaW5lIHNwbGl0dGluZylcbiAgIC0gdmJveDogdmVydGljYWwgYm94IChldmVyeSBicmVhayBoaW50IHNwbGl0cyB0aGUgbGluZSlcbiAgIC0gaHZib3g6IGhvcml6b250YWwvdmVydGljYWwgYm94XG4gICAgICh0aGUgYm94IGJlaGF2ZXMgYXMgYW4gaG9yaXpvbnRhbCBib3ggaWYgaXQgZml0cyBvblxuICAgICAgdGhlIGN1cnJlbnQgbGluZSwgb3RoZXJ3aXNlIHRoZSBib3ggYmVoYXZlcyBhcyBhIHZlcnRpY2FsIGJveClcbiAgIC0gaG92Ym94OiBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGNvbXBhY3RpbmcgYm94XG4gICAgICh0aGUgYm94IGlzIGNvbXBhY3RpbmcgbWF0ZXJpYWwsIHByaW50aW5nIGFzIG11Y2ggbWF0ZXJpYWwgYXMgcG9zc2libGVcbiAgICAgIG9uIGV2ZXJ5IGxpbmVzKVxuICAgLSBib3g6IGhvcml6b250YWwgb3IgdmVydGljYWwgY29tcGFjdGluZyBib3ggd2l0aCBlbmhhbmNlZCBib3ggc3RydWN0dXJlXG4gICAgICh0aGUgYm94IGJlaGF2ZXMgYXMgYW4gaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBib3ggYnV0IGJyZWFrIGhpbnRzIHNwbGl0XG4gICAgICB0aGUgbGluZSBpZiBzcGxpdHRpbmcgd291bGQgbW92ZSB0byB0aGUgbGVmdClcbiopXG50eXBlIGJveF90eXBlID0gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmJsb2NrX3R5cGUgPVxuICB8IFBwX2hib3ggfCBQcF92Ym94IHwgUHBfaHZib3ggfCBQcF9ob3Zib3ggfCBQcF9ib3ggfCBQcF9maXRzXG5cblxuKCogVGhlIHByZXR0eS1wcmludGluZyB0b2tlbnMgZGVmaW5pdGlvbjpcbiAgIGFyZSBlaXRoZXIgdGV4dCB0byBwcmludCBvciBwcmV0dHkgcHJpbnRpbmdcbiAgIGVsZW1lbnRzIHRoYXQgZHJpdmUgaW5kZW50YXRpb24gYW5kIGxpbmUgc3BsaXR0aW5nLiAqKVxudHlwZSBwcF90b2tlbiA9XG4gIHwgUHBfdGV4dCBvZiBzdHJpbmcgICAgICAgICAgKCogbm9ybWFsIHRleHQgKilcbiAgfCBQcF9icmVhayBvZiB7ICAgICAgICAgICAgICAoKiBjb21wbGV0ZSBicmVhayAqKVxuICAgICAgZml0czogc3RyaW5nICogaW50ICogc3RyaW5nOyAgICgqIGxpbmUgaXMgbm90IHNwbGl0ICopXG4gICAgICBicmVha3M6IHN0cmluZyAqIGludCAqIHN0cmluZzsgKCogbGluZSBpcyBzcGxpdCAqKVxuICAgIH1cbiAgfCBQcF90YnJlYWsgb2YgaW50ICogaW50ICAgICAoKiBnbyB0byBuZXh0IHRhYnVsYXRpb24gKilcbiAgfCBQcF9zdGFiICAgICAgICAgICAgICAgICAgICAoKiBzZXQgYSB0YWJ1bGF0aW9uICopXG4gIHwgUHBfYmVnaW4gb2YgaW50ICogYm94X3R5cGUgKCogYmVnaW5uaW5nIG9mIGEgYm94ICopXG4gIHwgUHBfZW5kICAgICAgICAgICAgICAgICAgICAgKCogZW5kIG9mIGEgYm94ICopXG4gIHwgUHBfdGJlZ2luIG9mIHRib3ggICAgICAgICAgKCogYmVnaW5uaW5nIG9mIGEgdGFidWxhdGlvbiBib3ggKilcbiAgfCBQcF90ZW5kICAgICAgICAgICAgICAgICAgICAoKiBlbmQgb2YgYSB0YWJ1bGF0aW9uIGJveCAqKVxuICB8IFBwX25ld2xpbmUgICAgICAgICAgICAgICAgICgqIHRvIGZvcmNlIGEgbmV3bGluZSBpbnNpZGUgYSBib3ggKilcbiAgfCBQcF9pZl9uZXdsaW5lICAgICAgICAgICAgICAoKiB0byBkbyBzb21ldGhpbmcgb25seSBpZiB0aGlzIHZlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lIGhhcyBiZWVuIGJyb2tlbiAqKVxuICB8IFBwX29wZW5fdGFnIG9mIHN0YWcgICAgICAgICAoKiBvcGVuaW5nIGEgdGFnIG5hbWUgKilcbiAgfCBQcF9jbG9zZV90YWcgICAgICAgICAgICAgICAoKiBjbG9zaW5nIHRoZSBtb3N0IHJlY2VudGx5IG9wZW4gdGFnICopXG5cbmFuZCBzdGFnID0gLi5cblxuYW5kIHRib3ggPSBQcF90Ym94IG9mIGludCBsaXN0IHJlZiAgKCogVGFidWxhdGlvbiBib3ggKilcblxudHlwZSB0YWcgPSBzdHJpbmdcbnR5cGUgc3RhZyArPSBTdHJpbmdfdGFnIG9mIHRhZ1xuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZTpcbiAgIHByZXR0eS1wcmludGluZyBtYXRlcmlhbCBpcyBub3Qgd3JpdHRlbiBpbiB0aGUgb3V0cHV0IGFzIHNvb24gYXMgZW1pdHRlZDtcbiAgIGluc3RlYWQsIHRoZSBtYXRlcmlhbCBpcyBzaW1wbHkgcmVjb3JkZWQgaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLFxuICAgdW50aWwgdGhlIGVuY2xvc2luZyBib3ggaGFzIGEga25vd24gY29tcHV0ZWQgc2l6ZSBhbmQgcHJvcGVyIHNwbGl0dGluZ1xuICAgZGVjaXNpb25zIGNhbiBiZSBtYWRlLlxuXG4gICBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUgY29udGFpbnMgZm9ybWF0dGluZyBlbGVtZW50cyB0byBiZSBwcmludGVkLlxuICAgRWFjaCBmb3JtYXR0aW5nIGVsZW1lbnQgaXMgYSB0dXBsZSAoc2l6ZSwgdG9rZW4sIGxlbmd0aCksIHdoZXJlXG4gICAtIGxlbmd0aCBpcyB0aGUgZGVjbGFyZWQgbGVuZ3RoIG9mIHRoZSB0b2tlbixcbiAgIC0gc2l6ZSBpcyBlZmZlY3RpdmUgc2l6ZSBvZiB0aGUgdG9rZW4gd2hlbiBpdCBpcyBwcmludGVkXG4gICAgIChzaXplIGlzIHNldCB3aGVuIHRoZSBzaXplIG9mIHRoZSBib3ggaXMga25vd24sIHNvIHRoYXQgc2l6ZSBvZiBicmVha1xuICAgICAgaGludHMgYXJlIGRlZmluaXRpdmUpLiAqKVxudHlwZSBwcF9xdWV1ZV9lbGVtID0ge1xuICBtdXRhYmxlIHNpemUgOiBTaXplLnQ7XG4gIHRva2VuIDogcHBfdG9rZW47XG4gIGxlbmd0aCA6IGludDtcbn1cblxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUgZGVmaW5pdGlvbi4gKilcbnR5cGUgcHBfcXVldWUgPSBwcF9xdWV1ZV9lbGVtIFF1ZXVlLnRcblxuKCogVGhlIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLiAqKVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2s6IHNjYW5uaW5nIGVsZW1lbnQgZGVmaW5pdGlvbi4gKilcbnR5cGUgcHBfc2Nhbl9lbGVtID0ge1xuICBsZWZ0X3RvdGFsIDogaW50OyAoKiBWYWx1ZSBvZiBwcF9sZWZ0X3RvdGFsIHdoZW4gdGhlIGVsZW1lbnQgd2FzIGVucXVldWVkLiAqKVxuICBxdWV1ZV9lbGVtIDogcHBfcXVldWVfZWxlbVxufVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjazpcbiAgIHRoZSBmb3JtYXR0aW5nIHN0YWNrIGNvbnRhaW5zIHRoZSBkZXNjcmlwdGlvbiBvZiBhbGwgdGhlIGN1cnJlbnRseSBhY3RpdmVcbiAgIGJveGVzOyB0aGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjayBpcyB1c2VkIHRvIHNwbGl0IHRoZSBsaW5lc1xuICAgd2hpbGUgcHJpbnRpbmcgdG9rZW5zLiAqKVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjazogZm9ybWF0dGluZyBzdGFjayBlbGVtZW50IGRlZmluaXRpb24uXG4gICBFYWNoIHN0YWNrIGVsZW1lbnQgZGVzY3JpYmVzIGEgcHJldHR5LXByaW50aW5nIGJveC4gKilcbnR5cGUgcHBfZm9ybWF0X2VsZW0gPSB7IGJveF90eXBlIDogYm94X3R5cGU7IHdpZHRoIDogaW50IH1cblxuKCogVGhlIGZvcm1hdHRlciBkZWZpbml0aW9uLlxuICAgRWFjaCBmb3JtYXR0ZXIgdmFsdWUgaXMgYSBwcmV0dHktcHJpbnRlciBpbnN0YW5jZSB3aXRoIGFsbCBpdHNcbiAgIG1hY2hpbmVyeS4gKilcbnR5cGUgZm9ybWF0dGVyID0ge1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suICopXG4gIHBwX3NjYW5fc3RhY2sgOiBwcF9zY2FuX2VsZW0gU3RhY2sudDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIGZvcm1hdHRpbmcgc3RhY2suICopXG4gIHBwX2Zvcm1hdF9zdGFjayA6IHBwX2Zvcm1hdF9lbGVtIFN0YWNrLnQ7XG4gIHBwX3Rib3hfc3RhY2sgOiB0Ym94IFN0YWNrLnQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBzZW1hbnRpY3MgdGFnIHN0YWNrLiAqKVxuICBwcF90YWdfc3RhY2sgOiBzdGFnIFN0YWNrLnQ7XG4gIHBwX21hcmtfc3RhY2sgOiBzdGFnIFN0YWNrLnQ7XG4gICgqIFZhbHVlIG9mIHJpZ2h0IG1hcmdpbi4gKilcbiAgbXV0YWJsZSBwcF9tYXJnaW4gOiBpbnQ7XG4gICgqIE1pbmltYWwgc3BhY2UgbGVmdCBiZWZvcmUgbWFyZ2luLCB3aGVuIG9wZW5pbmcgYSBib3guICopXG4gIG11dGFibGUgcHBfbWluX3NwYWNlX2xlZnQgOiBpbnQ7XG4gICgqIE1heGltdW0gdmFsdWUgb2YgaW5kZW50YXRpb246XG4gICAgIG5vIGJveCBjYW4gYmUgb3BlbmVkIGZ1cnRoZXIuICopXG4gIG11dGFibGUgcHBfbWF4X2luZGVudCA6IGludDtcbiAgKCogU3BhY2UgcmVtYWluaW5nIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG4gIG11dGFibGUgcHBfc3BhY2VfbGVmdCA6IGludDtcbiAgKCogQ3VycmVudCB2YWx1ZSBvZiBpbmRlbnRhdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9jdXJyZW50X2luZGVudCA6IGludDtcbiAgKCogVHJ1ZSB3aGVuIHRoZSBsaW5lIGhhcyBiZWVuIGJyb2tlbiBieSB0aGUgcHJldHR5LXByaW50ZXIuICopXG4gIG11dGFibGUgcHBfaXNfbmV3X2xpbmUgOiBib29sO1xuICAoKiBUb3RhbCB3aWR0aCBvZiB0b2tlbnMgYWxyZWFkeSBwcmludGVkLiAqKVxuICBtdXRhYmxlIHBwX2xlZnRfdG90YWwgOiBpbnQ7XG4gICgqIFRvdGFsIHdpZHRoIG9mIHRva2VucyBldmVyIHB1dCBpbiBxdWV1ZS4gKilcbiAgbXV0YWJsZSBwcF9yaWdodF90b3RhbCA6IGludDtcbiAgKCogQ3VycmVudCBudW1iZXIgb2Ygb3BlbiBib3hlcy4gKilcbiAgbXV0YWJsZSBwcF9jdXJyX2RlcHRoIDogaW50O1xuICAoKiBNYXhpbXVtIG51bWJlciBvZiBib3hlcyB3aGljaCBjYW4gYmUgc2ltdWx0YW5lb3VzbHkgb3Blbi4gKilcbiAgbXV0YWJsZSBwcF9tYXhfYm94ZXMgOiBpbnQ7XG4gICgqIEVsbGlwc2lzIHN0cmluZy4gKilcbiAgbXV0YWJsZSBwcF9lbGxpcHNpcyA6IHN0cmluZztcbiAgKCogT3V0cHV0IGZ1bmN0aW9uLiAqKVxuICBtdXRhYmxlIHBwX291dF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0O1xuICAoKiBGbHVzaGluZyBmdW5jdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9vdXRfZmx1c2ggOiB1bml0IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBuZXcgbGluZXMuICopXG4gIG11dGFibGUgcHBfb3V0X25ld2xpbmUgOiB1bml0IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBicmVhayBoaW50cyBzcGFjZXMuICopXG4gIG11dGFibGUgcHBfb3V0X3NwYWNlcyA6IGludCAtPiB1bml0O1xuICAoKiBPdXRwdXQgb2YgaW5kZW50YXRpb24gb2YgbmV3IGxpbmVzLiAqKVxuICBtdXRhYmxlIHBwX291dF9pbmRlbnQgOiBpbnQgLT4gdW5pdDtcbiAgKCogQXJlIHRhZ3MgcHJpbnRlZCA/ICopXG4gIG11dGFibGUgcHBfcHJpbnRfdGFncyA6IGJvb2w7XG4gICgqIEFyZSB0YWdzIG1hcmtlZCA/ICopXG4gIG11dGFibGUgcHBfbWFya190YWdzIDogYm9vbDtcbiAgKCogRmluZCBvcGVuaW5nIGFuZCBjbG9zaW5nIG1hcmtlcnMgb2YgdGFncy4gKilcbiAgbXV0YWJsZSBwcF9tYXJrX29wZW5fdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIG11dGFibGUgcHBfbWFya19jbG9zZV90YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbXV0YWJsZSBwcF9wcmludF9vcGVuX3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgbXV0YWJsZSBwcF9wcmludF9jbG9zZV90YWcgOiBzdGFnIC0+IHVuaXQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbiAgcHBfcXVldWUgOiBwcF9xdWV1ZTtcbn1cblxuXG4oKiBUaGUgZm9ybWF0dGVyIHNwZWNpZmljIHRhZyBoYW5kbGluZyBmdW5jdGlvbnMuICopXG50eXBlIGZvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9IHtcbiAgbWFya19vcGVuX3N0YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbWFya19jbG9zZV9zdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIHByaW50X29wZW5fc3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgcHJpbnRfY2xvc2Vfc3RhZyA6IHN0YWcgLT4gdW5pdDtcbn1cblxuXG4oKiBUaGUgZm9ybWF0dGVyIGZ1bmN0aW9ucyB0byBvdXRwdXQgbWF0ZXJpYWwuICopXG50eXBlIGZvcm1hdHRlcl9vdXRfZnVuY3Rpb25zID0ge1xuICBvdXRfc3RyaW5nIDogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdW5pdDtcbiAgb3V0X2ZsdXNoIDogdW5pdCAtPiB1bml0O1xuICBvdXRfbmV3bGluZSA6IHVuaXQgLT4gdW5pdDtcbiAgb3V0X3NwYWNlcyA6IGludCAtPiB1bml0O1xuICBvdXRfaW5kZW50IDogaW50IC0+IHVuaXQ7XG59XG5cblxuKCpcblxuICBBdXhpbGlhcmllcyBhbmQgYmFzaWMgZnVuY3Rpb25zLlxuXG4qKVxuXG4oKiBFbnRlciBhIHRva2VuIGluIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbmxldCBwcF9lbnF1ZXVlIHN0YXRlIHRva2VuID1cbiAgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gc3RhdGUucHBfcmlnaHRfdG90YWwgKyB0b2tlbi5sZW5ndGg7XG4gIFF1ZXVlLmFkZCB0b2tlbiBzdGF0ZS5wcF9xdWV1ZVxuXG5cbmxldCBwcF9jbGVhcl9xdWV1ZSBzdGF0ZSA9XG4gIHN0YXRlLnBwX2xlZnRfdG90YWwgPC0gMTsgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gMTtcbiAgUXVldWUuY2xlYXIgc3RhdGUucHBfcXVldWVcblxuXG4oKiBQcF9pbmZpbml0eTogbGFyZ2UgdmFsdWUgZm9yIGRlZmF1bHQgdG9rZW5zIHNpemUuXG5cbiAgIFBwX2luZmluaXR5IGlzIGRvY3VtZW50ZWQgYXMgYmVpbmcgZ3JlYXRlciB0aGFuIDFlMTA7IHRvIGF2b2lkXG4gICBjb25mdXNpb24gYWJvdXQgdGhlIHdvcmQgJ2dyZWF0ZXInLCB3ZSBjaG9vc2UgcHBfaW5maW5pdHkgZ3JlYXRlclxuICAgdGhhbiAxZTEwICsgMTsgZm9yIGNvcnJlY3QgaGFuZGxpbmcgb2YgdGVzdHMgaW4gdGhlIGFsZ29yaXRobSxcbiAgIHBwX2luZmluaXR5IG11c3QgYmUgZXZlbiBvbmUgbW9yZSB0aGFuIDFlMTAgKyAxOyBsZXQncyBzdGFuZCBvbiB0aGVcbiAgIHNhZmUgc2lkZSBieSBjaG9vc2luZyAxLmUxMCsxMC5cblxuICAgUHBfaW5maW5pdHkgY291bGQgcHJvYmFibHkgYmUgMTA3Mzc0MTgyMyB0aGF0IGlzIDJeMzAgLSAxLCB0aGF0IGlzXG4gICB0aGUgbWluaW1hbCB1cHBlciBib3VuZCBmb3IgaW50ZWdlcnM7IG5vdyB0aGF0IG1heF9pbnQgaXMgZGVmaW5lZCxcbiAgIHRoaXMgbGltaXQgY291bGQgYWxzbyBiZSBkZWZpbmVkIGFzIG1heF9pbnQgLSAxLlxuXG4gICBIb3dldmVyLCBiZWZvcmUgc2V0dGluZyBwcF9pbmZpbml0eSB0byBzb21ldGhpbmcgYXJvdW5kIG1heF9pbnQsIHdlXG4gICBtdXN0IGNhcmVmdWxseSBkb3VibGUtY2hlY2sgYWxsIHRoZSBpbnRlZ2VyIGFyaXRobWV0aWMgb3BlcmF0aW9uc1xuICAgdGhhdCBpbnZvbHZlIHBwX2luZmluaXR5LCBzaW5jZSBhbnkgb3ZlcmZsb3cgd291bGQgd3JlY2sgaGF2b2MgdGhlXG4gICBwcmV0dHktcHJpbnRpbmcgYWxnb3JpdGhtJ3MgaW52YXJpYW50cy4gR2l2ZW4gdGhhdCB0aGlzIGFyaXRobWV0aWNcbiAgIGNvcnJlY3RuZXNzIGNoZWNrIGlzIGRpZmZpY3VsdCBhbmQgZXJyb3IgcHJvbmUgYW5kIGdpdmVuIHRoYXQgMWUxMFxuICAgKyAxIGlzIGluIHByYWN0aWNlIGxhcmdlIGVub3VnaCwgdGhlcmUgaXMgbm8gbmVlZCB0byBhdHRlbXB0IHRvIHNldFxuICAgcHBfaW5maW5pdHkgdG8gdGhlIHRoZW9yZXRpY2FsbHkgbWF4aW11bSBsaW1pdC4gSXQgaXMgbm90IHdvcnRoIHRoZVxuICAgYnVyZGVuICEgKilcbmxldCBwcF9pbmZpbml0eSA9IDEwMDAwMDAwMTBcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBmb3IgdGhlIGZvcm1hdHRlci4gKilcbmxldCBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIHMgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nIHMgMCAoU3RyaW5nLmxlbmd0aCBzKVxuYW5kIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlID0gc3RhdGUucHBfb3V0X25ld2xpbmUgKClcbmFuZCBwcF9vdXRwdXRfc3BhY2VzIHN0YXRlIG4gPSBzdGF0ZS5wcF9vdXRfc3BhY2VzIG5cbmFuZCBwcF9vdXRwdXRfaW5kZW50IHN0YXRlIG4gPSBzdGF0ZS5wcF9vdXRfaW5kZW50IG5cblxuKCogRm9ybWF0IGEgdGV4dHVhbCB0b2tlbiAqKVxubGV0IGZvcm1hdF9wcF90ZXh0IHN0YXRlIHNpemUgdGV4dCA9XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCAtIHNpemU7XG4gIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgdGV4dDtcbiAgc3RhdGUucHBfaXNfbmV3X2xpbmUgPC0gZmFsc2VcblxuKCogRm9ybWF0IGEgc3RyaW5nIGJ5IGl0cyBsZW5ndGgsIGlmIG5vdCBlbXB0eSAqKVxubGV0IGZvcm1hdF9zdHJpbmcgc3RhdGUgcyA9XG4gIGlmIHMgPD4gXCJcIiB0aGVuIGZvcm1hdF9wcF90ZXh0IHN0YXRlIChTdHJpbmcubGVuZ3RoIHMpIHNcblxuKCogVG8gZm9ybWF0IGEgYnJlYWssIGluZGVudGluZyBhIG5ldyBsaW5lLiAqKVxubGV0IGJyZWFrX25ld19saW5lIHN0YXRlIChiZWZvcmUsIG9mZnNldCwgYWZ0ZXIpIHdpZHRoID1cbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBiZWZvcmU7XG4gIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlO1xuICBzdGF0ZS5wcF9pc19uZXdfbGluZSA8LSB0cnVlO1xuICBsZXQgaW5kZW50ID0gc3RhdGUucHBfbWFyZ2luIC0gd2lkdGggKyBvZmZzZXQgaW5cbiAgKCogRG9uJ3QgaW5kZW50IG1vcmUgdGhhbiBwcF9tYXhfaW5kZW50LiAqKVxuICBsZXQgcmVhbF9pbmRlbnQgPSBJbnQubWluIHN0YXRlLnBwX21heF9pbmRlbnQgaW5kZW50IGluXG4gIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50IDwtIHJlYWxfaW5kZW50O1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50O1xuICBwcF9vdXRwdXRfaW5kZW50IHN0YXRlIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50O1xuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGFmdGVyXG5cblxuKCogVG8gZm9yY2UgYSBsaW5lIGJyZWFrIGluc2lkZSBhIGJveDogbm8gb2Zmc2V0IGlzIGFkZGVkLiAqKVxubGV0IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGggPSBicmVha19uZXdfbGluZSBzdGF0ZSAoXCJcIiwgMCwgXCJcIikgd2lkdGhcblxuKCogVG8gZm9ybWF0IGEgYnJlYWsgdGhhdCBmaXRzIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG5sZXQgYnJlYWtfc2FtZV9saW5lIHN0YXRlIChiZWZvcmUsIHdpZHRoLCBhZnRlcikgPVxuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGJlZm9yZTtcbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gd2lkdGg7XG4gIHBwX291dHB1dF9zcGFjZXMgc3RhdGUgd2lkdGg7XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYWZ0ZXJcblxuXG4oKiBUbyBpbmRlbnQgbm8gbW9yZSB0aGFuIHBwX21heF9pbmRlbnQsIGlmIG9uZSB0cmllcyB0byBvcGVuIGEgYm94XG4gICBiZXlvbmQgcHBfbWF4X2luZGVudCwgdGhlbiB0aGUgYm94IGlzIHJlamVjdGVkIG9uIHRoZSBsZWZ0XG4gICBieSBzaW11bGF0aW5nIGEgYnJlYWsuICopXG5sZXQgcHBfZm9yY2VfYnJlYWtfbGluZSBzdGF0ZSA9XG4gIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHdpdGhcbiAgfCBOb25lIC0+IHBwX291dHB1dF9uZXdsaW5lIHN0YXRlXG4gIHwgU29tZSB7IGJveF90eXBlOyB3aWR0aCB9IC0+XG4gICAgaWYgd2lkdGggPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW5cbiAgICAgIG1hdGNoIGJveF90eXBlIHdpdGhcbiAgICAgIHwgUHBfZml0cyB8IFBwX2hib3ggLT4gKClcbiAgICAgIHwgUHBfdmJveCB8IFBwX2h2Ym94IHwgUHBfaG92Ym94IHwgUHBfYm94IC0+IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGhcblxuXG4oKiBUbyBza2lwIGEgdG9rZW4sIGlmIHRoZSBwcmV2aW91cyBsaW5lIGhhcyBiZWVuIGJyb2tlbi4gKilcbmxldCBwcF9za2lwX3Rva2VuIHN0YXRlID1cbiAgbWF0Y2ggUXVldWUudGFrZV9vcHQgc3RhdGUucHBfcXVldWUgd2l0aFxuICB8IE5vbmUgLT4gKCkgKCogcHJpbnRfaWZfbmV3bGluZSBtdXN0IGhhdmUgYmVlbiB0aGUgbGFzdCBwcmludGluZyBjb21tYW5kICopXG4gIHwgU29tZSB7IHNpemU7IGxlbmd0aDsgXyB9IC0+XG4gICAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSBzdGF0ZS5wcF9sZWZ0X3RvdGFsIC0gbGVuZ3RoO1xuICAgIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCArIFNpemUudG9faW50IHNpemVcblxuXG4oKlxuXG4gIFRoZSBtYWluIHByZXR0eSBwcmludGluZyBmdW5jdGlvbnMuXG5cbiopXG5cbigqIEZvcm1hdHRpbmcgYSB0b2tlbiB3aXRoIGEgZ2l2ZW4gc2l6ZS4gKilcbmxldCBmb3JtYXRfcHBfdG9rZW4gc3RhdGUgc2l6ZSA9IGZ1bmN0aW9uXG5cbiAgfCBQcF90ZXh0IHMgLT5cbiAgICBmb3JtYXRfcHBfdGV4dCBzdGF0ZSBzaXplIHNcblxuICB8IFBwX2JlZ2luIChvZmYsIHR5KSAtPlxuICAgIGxldCBpbnNlcnRpb25fcG9pbnQgPSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IGluXG4gICAgaWYgaW5zZXJ0aW9uX3BvaW50ID4gc3RhdGUucHBfbWF4X2luZGVudCB0aGVuXG4gICAgICAoKiBjYW4gbm90IG9wZW4gYSBib3ggcmlnaHQgdGhlcmUuICopXG4gICAgICBiZWdpbiBwcF9mb3JjZV9icmVha19saW5lIHN0YXRlIGVuZDtcbiAgICBsZXQgd2lkdGggPSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gb2ZmIGluXG4gICAgbGV0IGJveF90eXBlID1cbiAgICAgIG1hdGNoIHR5IHdpdGhcbiAgICAgIHwgUHBfdmJveCAtPiBQcF92Ym94XG4gICAgICB8IFBwX2hib3ggfCBQcF9odmJveCB8IFBwX2hvdmJveCB8IFBwX2JveCB8IFBwX2ZpdHMgLT5cbiAgICAgICAgaWYgc2l6ZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnQgdGhlbiB0eSBlbHNlIFBwX2ZpdHMgaW5cbiAgICBTdGFjay5wdXNoIHsgYm94X3R5cGU7IHdpZHRoIH0gc3RhdGUucHBfZm9ybWF0X3N0YWNrXG5cbiAgfCBQcF9lbmQgLT5cbiAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB8PiBpZ25vcmVcblxuICB8IFBwX3RiZWdpbiAoUHBfdGJveCBfIGFzIHRib3gpIC0+XG4gICAgU3RhY2sucHVzaCB0Ym94IHN0YXRlLnBwX3Rib3hfc3RhY2tcblxuICB8IFBwX3RlbmQgLT5cbiAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgfD4gaWdub3JlXG5cbiAgfCBQcF9zdGFiIC0+XG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF90Ym94X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gb3BlbiB0YWJ1bGF0aW9uIGJveC4gKilcbiAgICB8IFNvbWUgKFBwX3Rib3ggdGFicykgLT5cbiAgICAgIGxldCByZWMgYWRkX3RhYiBuID0gZnVuY3Rpb25cbiAgICAgICAgfCBbXSAtPiBbbl1cbiAgICAgICAgfCB4IDo6IGwgYXMgbHMgLT4gaWYgbiA8IHggdGhlbiBuIDo6IGxzIGVsc2UgeCA6OiBhZGRfdGFiIG4gbCBpblxuICAgICAgdGFicyA6PSBhZGRfdGFiIChzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0KSAhdGFic1xuICAgIGVuZFxuXG4gIHwgUHBfdGJyZWFrIChuLCBvZmYpIC0+XG4gICAgbGV0IGluc2VydGlvbl9wb2ludCA9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnQgaW5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBvcGVuIHRhYnVsYXRpb24gYm94LiAqKVxuICAgIHwgU29tZSAoUHBfdGJveCB0YWJzKSAtPlxuICAgICAgbGV0IHRhYiA9XG4gICAgICAgIG1hdGNoICF0YWJzIHdpdGhcbiAgICAgICAgfCBbXSAtPiBpbnNlcnRpb25fcG9pbnRcbiAgICAgICAgfCBmaXJzdCA6OiBfIC0+XG4gICAgICAgICAgbGV0IHJlYyBmaW5kID0gZnVuY3Rpb25cbiAgICAgICAgICAgIHwgaGVhZCA6OiB0YWlsIC0+XG4gICAgICAgICAgICAgIGlmIGhlYWQgPj0gaW5zZXJ0aW9uX3BvaW50IHRoZW4gaGVhZCBlbHNlIGZpbmQgdGFpbFxuICAgICAgICAgICAgfCBbXSAtPiBmaXJzdCBpblxuICAgICAgICAgIGZpbmQgIXRhYnMgaW5cbiAgICAgIGxldCBvZmZzZXQgPSB0YWIgLSBpbnNlcnRpb25fcG9pbnQgaW5cbiAgICAgIGlmIG9mZnNldCA+PSAwXG4gICAgICB0aGVuIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSAoXCJcIiwgb2Zmc2V0ICsgbiwgXCJcIilcbiAgICAgIGVsc2UgYnJlYWtfbmV3X2xpbmUgc3RhdGUgKFwiXCIsIHRhYiArIG9mZiwgXCJcIikgc3RhdGUucHBfbWFyZ2luXG4gICAgZW5kXG5cbiAgfCBQcF9uZXdsaW5lIC0+XG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZSAoKiBObyBvcGVuIGJveC4gKilcbiAgICB8IFNvbWUgeyB3aWR0aDsgX30gLT4gYnJlYWtfbGluZSBzdGF0ZSB3aWR0aFxuICAgIGVuZFxuXG4gIHwgUHBfaWZfbmV3bGluZSAtPlxuICAgIGlmIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50ICE9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICB0aGVuIHBwX3NraXBfdG9rZW4gc3RhdGVcblxuICB8IFBwX2JyZWFrIHsgZml0czsgYnJlYWtzIH0gLT5cbiAgICBsZXQgYmVmb3JlLCBvZmYsIF8gPSBicmVha3MgaW5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG9wZW4gYm94LiAqKVxuICAgIHwgU29tZSB7IGJveF90eXBlOyB3aWR0aCB9IC0+XG4gICAgICBiZWdpbiBtYXRjaCBib3hfdHlwZSB3aXRoXG4gICAgICB8IFBwX2hvdmJveCAtPlxuICAgICAgICBpZiBzaXplICsgU3RyaW5nLmxlbmd0aCBiZWZvcmUgPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0XG4gICAgICAgIHRoZW4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICAgIGVsc2UgYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIHwgUHBfYm94IC0+XG4gICAgICAgICgqIEhhdmUgdGhlIGxpbmUganVzdCBiZWVuIGJyb2tlbiBoZXJlID8gKilcbiAgICAgICAgaWYgc3RhdGUucHBfaXNfbmV3X2xpbmUgdGhlbiBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0cyBlbHNlXG4gICAgICAgIGlmIHNpemUgKyBTdHJpbmcubGVuZ3RoIGJlZm9yZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aCBlbHNlXG4gICAgICAgICgqIGJyZWFrIHRoZSBsaW5lIGhlcmUgbGVhZHMgdG8gbmV3IGluZGVudGF0aW9uID8gKilcbiAgICAgICAgaWYgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPiBzdGF0ZS5wcF9tYXJnaW4gLSB3aWR0aCArIG9mZlxuICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgICBlbHNlIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX2h2Ym94IC0+IGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgfCBQcF9maXRzIC0+IGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX3Zib3ggLT4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICB8IFBwX2hib3ggLT4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIGVuZFxuICAgIGVuZFxuXG4gICB8IFBwX29wZW5fdGFnIHRhZ19uYW1lIC0+XG4gICAgIGxldCBtYXJrZXIgPSBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIHRhZ19uYW1lIGluXG4gICAgIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgbWFya2VyO1xuICAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX21hcmtfc3RhY2tcblxuICAgfCBQcF9jbG9zZV90YWcgLT5cbiAgICAgYmVnaW4gbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9tYXJrX3N0YWNrIHdpdGhcbiAgICAgfCBOb25lIC0+ICgpICgqIE5vIG1vcmUgdGFnIHRvIGNsb3NlLiAqKVxuICAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgICBsZXQgbWFya2VyID0gc3RhdGUucHBfbWFya19jbG9zZV90YWcgdGFnX25hbWUgaW5cbiAgICAgICBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIG1hcmtlclxuICAgICBlbmRcblxuXG4oKiBQcmludCBpZiB0b2tlbiBzaXplIGlzIGtub3duIGVsc2UgcHJpbnRpbmcgaXMgZGVsYXllZC5cbiAgIFByaW50aW5nIGlzIGRlbGF5ZWQgd2hlbiB0aGUgdGV4dCB3YWl0aW5nIGluIHRoZSBxdWV1ZSByZXF1aXJlc1xuICAgbW9yZSByb29tIHRvIGZvcm1hdCB0aGFuIGV4aXN0cyBvbiB0aGUgY3VycmVudCBsaW5lLiAqKVxubGV0IHJlYyBhZHZhbmNlX2xlZnQgc3RhdGUgPVxuICBtYXRjaCBRdWV1ZS5wZWVrX29wdCBzdGF0ZS5wcF9xdWV1ZSB3aXRoXG4gIHwgTm9uZSAtPiAoKSAoKiBObyB0b2tlbnMgdG8gcHJpbnQgKilcbiAgfCBTb21lIHsgc2l6ZTsgdG9rZW47IGxlbmd0aCB9IC0+XG4gICAgbGV0IHBlbmRpbmdfY291bnQgPSBzdGF0ZS5wcF9yaWdodF90b3RhbCAtIHN0YXRlLnBwX2xlZnRfdG90YWwgaW5cbiAgICBpZiBTaXplLmlzX2tub3duIHNpemUgfHwgcGVuZGluZ19jb3VudCA+PSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW4gYmVnaW5cbiAgICAgIFF1ZXVlLnRha2Ugc3RhdGUucHBfcXVldWUgfD4gaWdub3JlOyAoKiBOb3QgZW1wdHk6IHdlIHBlZWsgaW50byBpdCAqKVxuICAgICAgbGV0IHNpemUgPSBpZiBTaXplLmlzX2tub3duIHNpemUgdGhlbiBTaXplLnRvX2ludCBzaXplIGVsc2UgcHBfaW5maW5pdHkgaW5cbiAgICAgIGZvcm1hdF9wcF90b2tlbiBzdGF0ZSBzaXplIHRva2VuO1xuICAgICAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSBsZW5ndGggKyBzdGF0ZS5wcF9sZWZ0X3RvdGFsO1xuICAgICAgKGFkdmFuY2VfbGVmdCBbQHRhaWxjYWxsXSkgc3RhdGVcbiAgICBlbmRcblxuXG4oKiBUbyBlbnF1ZXVlIGEgdG9rZW4gOiB0cnkgdG8gYWR2YW5jZS4gKilcbmxldCBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgdG9rID0gcHBfZW5xdWV1ZSBzdGF0ZSB0b2s7IGFkdmFuY2VfbGVmdCBzdGF0ZVxuXG5cbigqIFRvIGVucXVldWUgc3RyaW5ncy4gKilcbmxldCBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSBzaXplIHMgPVxuICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgeyBzaXplOyB0b2tlbiA9IFBwX3RleHQgczsgbGVuZ3RoID0gU2l6ZS50b19pbnQgc2l6ZSB9XG5cblxubGV0IGVucXVldWVfc3RyaW5nIHN0YXRlIHMgPVxuICBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSAoU2l6ZS5vZl9pbnQgKFN0cmluZy5sZW5ndGggcykpIHNcblxuXG4oKiBSb3V0aW5lcyBmb3Igc2NhbiBzdGFja1xuICAgZGV0ZXJtaW5lIHNpemUgb2YgYm94ZXMuICopXG5cbigqIFRoZSBzY2FuX3N0YWNrIGlzIG5ldmVyIGVtcHR5LiAqKVxubGV0IGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGFjayA9XG4gIFN0YWNrLmNsZWFyIHN0YWNrO1xuICBsZXQgcXVldWVfZWxlbSA9IHsgc2l6ZSA9IFNpemUudW5rbm93bjsgdG9rZW4gPSBQcF90ZXh0IFwiXCI7IGxlbmd0aCA9IDAgfSBpblxuICBTdGFjay5wdXNoIHsgbGVmdF90b3RhbCA9IC0xOyBxdWV1ZV9lbGVtIH0gc3RhY2tcblxuKCogU2V0dGluZyB0aGUgc2l6ZSBvZiBib3hlcyBvbiBzY2FuIHN0YWNrOlxuICAgaWYgdHkgPSB0cnVlIHRoZW4gc2l6ZSBvZiBicmVhayBpcyBzZXQgZWxzZSBzaXplIG9mIGJveCBpcyBzZXQ7XG4gICBpbiBlYWNoIGNhc2UgcHBfc2Nhbl9zdGFjayBpcyBwb3BwZWQuXG5cbiAgIE5vdGU6XG4gICBQYXR0ZXJuIG1hdGNoaW5nIG9uIHNjYW4gc3RhY2sgaXMgZXhoYXVzdGl2ZSwgc2luY2Ugc2Nhbl9zdGFjayBpcyBuZXZlclxuICAgZW1wdHkuXG4gICBQYXR0ZXJuIG1hdGNoaW5nIG9uIHRva2VuIGluIHNjYW4gc3RhY2sgaXMgYWxzbyBleGhhdXN0aXZlLFxuICAgc2luY2Ugc2Nhbl9wdXNoIGlzIHVzZWQgb24gYnJlYWtzIGFuZCBvcGVuaW5nIG9mIGJveGVzLiAqKVxubGV0IHNldF9zaXplIHN0YXRlIHR5ID1cbiAgbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHdpdGhcbiAgfCBOb25lIC0+ICgpICgqIHNjYW5fc3RhY2sgaXMgbmV2ZXIgZW1wdHkuICopXG4gIHwgU29tZSB7IGxlZnRfdG90YWw7IHF1ZXVlX2VsZW0gfSAtPlxuICAgIGxldCBzaXplID0gU2l6ZS50b19pbnQgcXVldWVfZWxlbS5zaXplIGluXG4gICAgKCogdGVzdCBpZiBzY2FuIHN0YWNrIGNvbnRhaW5zIGFueSBkYXRhIHRoYXQgaXMgbm90IG9ic29sZXRlLiAqKVxuICAgIGlmIGxlZnRfdG90YWwgPCBzdGF0ZS5wcF9sZWZ0X3RvdGFsIHRoZW5cbiAgICAgIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGF0ZS5wcF9zY2FuX3N0YWNrXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggcXVldWVfZWxlbS50b2tlbiB3aXRoXG4gICAgICB8IFBwX2JyZWFrIF8gfCBQcF90YnJlYWsgKF8sIF8pIC0+XG4gICAgICAgIGlmIHR5IHRoZW4gYmVnaW5cbiAgICAgICAgICBxdWV1ZV9lbGVtLnNpemUgPC0gU2l6ZS5vZl9pbnQgKHN0YXRlLnBwX3JpZ2h0X3RvdGFsICsgc2l6ZSk7XG4gICAgICAgICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHw+IGlnbm9yZVxuICAgICAgICBlbmRcbiAgICAgIHwgUHBfYmVnaW4gKF8sIF8pIC0+XG4gICAgICAgIGlmIG5vdCB0eSB0aGVuIGJlZ2luXG4gICAgICAgICAgcXVldWVfZWxlbS5zaXplIDwtIFNpemUub2ZfaW50IChzdGF0ZS5wcF9yaWdodF90b3RhbCArIHNpemUpO1xuICAgICAgICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfc2Nhbl9zdGFjayB8PiBpZ25vcmVcbiAgICAgICAgZW5kXG4gICAgICB8IFBwX3RleHQgXyB8IFBwX3N0YWIgfCBQcF90YmVnaW4gXyB8IFBwX3RlbmQgfCBQcF9lbmRcbiAgICAgIHwgUHBfbmV3bGluZSB8IFBwX2lmX25ld2xpbmUgfCBQcF9vcGVuX3RhZyBfIHwgUHBfY2xvc2VfdGFnIC0+XG4gICAgICAgICgpICgqIHNjYW5fcHVzaCBpcyBvbmx5IHVzZWQgZm9yIGJyZWFrcyBhbmQgYm94ZXMuICopXG5cblxuKCogUHVzaCBhIHRva2VuIG9uIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLlxuICAgSWYgYiBpcyB0cnVlIHNldF9zaXplIGlzIGNhbGxlZC4gKilcbmxldCBzY2FuX3B1c2ggc3RhdGUgYiB0b2tlbiA9XG4gIHBwX2VucXVldWUgc3RhdGUgdG9rZW47XG4gIGlmIGIgdGhlbiBzZXRfc2l6ZSBzdGF0ZSB0cnVlO1xuICBsZXQgZWxlbSA9IHsgbGVmdF90b3RhbCA9IHN0YXRlLnBwX3JpZ2h0X3RvdGFsOyBxdWV1ZV9lbGVtID0gdG9rZW4gfSBpblxuICBTdGFjay5wdXNoIGVsZW0gc3RhdGUucHBfc2Nhbl9zdGFja1xuXG5cbigqIFRvIG9wZW4gYSBuZXcgYm94IDpcbiAgIHRoZSB1c2VyIG1heSBzZXQgdGhlIGRlcHRoIGJvdW5kIHBwX21heF9ib3hlc1xuICAgYW55IHRleHQgbmVzdGVkIGRlZXBlciBpcyBwcmludGVkIGFzIHRoZSBlbGxpcHNpcyBzdHJpbmcuICopXG5sZXQgcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBicl90eSA9XG4gIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCArIDE7XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfYmVnaW4gKGluZGVudCwgYnJfdHkpOyBsZW5ndGggPSAwIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgZmFsc2UgZWxlbSBlbHNlXG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPSBzdGF0ZS5wcF9tYXhfYm94ZXNcbiAgdGhlbiBlbnF1ZXVlX3N0cmluZyBzdGF0ZSBzdGF0ZS5wcF9lbGxpcHNpc1xuXG5cbigqIFRoZSBib3ggd2hpY2ggaXMgYWx3YXlzIG9wZW4uICopXG5sZXQgcHBfb3Blbl9zeXNfYm94IHN0YXRlID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIDAgUHBfaG92Ym94XG5cbigqIENsb3NlIGEgYm94LCBzZXR0aW5nIHNpemVzIG9mIGl0cyBzdWIgYm94ZXMuICopXG5sZXQgcHBfY2xvc2VfYm94IHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA+IDEgdGhlblxuICBiZWdpblxuICAgIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGJlZ2luXG4gICAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9lbmQ7IGxlbmd0aCA9IDAgfTtcbiAgICAgIHNldF9zaXplIHN0YXRlIHRydWU7IHNldF9zaXplIHN0YXRlIGZhbHNlXG4gICAgZW5kO1xuICAgIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCAtIDE7XG4gIGVuZFxuXG5cbigqIE9wZW4gYSB0YWcsIHB1c2hpbmcgaXQgb24gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9vcGVuX3N0YWcgc3RhdGUgdGFnX25hbWUgPVxuICBpZiBzdGF0ZS5wcF9wcmludF90YWdzIHRoZW5cbiAgYmVnaW5cbiAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX3RhZ19zdGFjaztcbiAgICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyB0YWdfbmFtZVxuICBlbmQ7XG4gIGlmIHN0YXRlLnBwX21hcmtfdGFncyB0aGVuXG4gICAgbGV0IHRva2VuID0gUHBfb3Blbl90YWcgdGFnX25hbWUgaW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW47IGxlbmd0aCA9IDAgfVxuXG5cbigqIENsb3NlIGEgdGFnLCBwb3BwaW5nIGl0IGZyb20gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9jbG9zZV9zdGFnIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfbWFya190YWdzIHRoZW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9jbG9zZV90YWc7IGxlbmd0aCA9IDAgfTtcbiAgaWYgc3RhdGUucHBfcHJpbnRfdGFncyB0aGVuXG4gICAgbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF90YWdfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBtb3JlIHRhZyB0byBjbG9zZS4gKilcbiAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyB0YWdfbmFtZVxuXG5sZXQgcHBfb3Blbl90YWcgc3RhdGUgcyA9IHBwX29wZW5fc3RhZyBzdGF0ZSAoU3RyaW5nX3RhZyBzKVxubGV0IHBwX2Nsb3NlX3RhZyBzdGF0ZSAoKSA9IHBwX2Nsb3NlX3N0YWcgc3RhdGUgKClcblxubGV0IHBwX3NldF9wcmludF90YWdzIHN0YXRlIGIgPSBzdGF0ZS5wcF9wcmludF90YWdzIDwtIGJcbmxldCBwcF9zZXRfbWFya190YWdzIHN0YXRlIGIgPSBzdGF0ZS5wcF9tYXJrX3RhZ3MgPC0gYlxubGV0IHBwX2dldF9wcmludF90YWdzIHN0YXRlICgpID0gc3RhdGUucHBfcHJpbnRfdGFnc1xubGV0IHBwX2dldF9tYXJrX3RhZ3Mgc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXJrX3RhZ3NcbmxldCBwcF9zZXRfdGFncyBzdGF0ZSBiID1cbiAgcHBfc2V0X3ByaW50X3RhZ3Mgc3RhdGUgYjsgcHBfc2V0X21hcmtfdGFncyBzdGF0ZSBiXG5cblxuKCogSGFuZGxpbmcgdGFnIGhhbmRsaW5nIGZ1bmN0aW9uczogZ2V0L3NldCBmdW5jdGlvbnMuICopXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGF0ZSAoKSA9IHtcbiAgbWFya19vcGVuX3N0YWcgPSBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnO1xuICBtYXJrX2Nsb3NlX3N0YWcgPSBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZztcbiAgcHJpbnRfb3Blbl9zdGFnID0gc3RhdGUucHBfcHJpbnRfb3Blbl90YWc7XG4gIHByaW50X2Nsb3NlX3N0YWcgPSBzdGF0ZS5wcF9wcmludF9jbG9zZV90YWc7XG59XG5cblxubGV0IHBwX3NldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RhdGUge1xuICAgICBtYXJrX29wZW5fc3RhZyA9IG1vdDtcbiAgICAgbWFya19jbG9zZV9zdGFnID0gbWN0O1xuICAgICBwcmludF9vcGVuX3N0YWcgPSBwb3Q7XG4gICAgIHByaW50X2Nsb3NlX3N0YWcgPSBwY3Q7XG4gIH0gPVxuICBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIDwtIG1vdDtcbiAgc3RhdGUucHBfbWFya19jbG9zZV90YWcgPC0gbWN0O1xuICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyA8LSBwb3Q7XG4gIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyA8LSBwY3RcblxuXG4oKiBJbml0aWFsaXplIHByZXR0eS1wcmludGVyLiAqKVxubGV0IHBwX3Jpbml0IHN0YXRlID1cbiAgcHBfY2xlYXJfcXVldWUgc3RhdGU7XG4gIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGF0ZS5wcF9zY2FuX3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF9mb3JtYXRfc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX3Rib3hfc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX3RhZ19zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfbWFya19zdGFjaztcbiAgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPC0gMDtcbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSAwO1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX21hcmdpbjtcbiAgcHBfb3Blbl9zeXNfYm94IHN0YXRlXG5cbmxldCBjbGVhcl90YWdfc3RhY2sgc3RhdGUgPVxuICBTdGFjay5pdGVyIChmdW4gXyAtPiBwcF9jbG9zZV90YWcgc3RhdGUgKCkpIHN0YXRlLnBwX3RhZ19zdGFja1xuXG5cbigqIEZsdXNoaW5nIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxubGV0IHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIGIgPVxuICBjbGVhcl90YWdfc3RhY2sgc3RhdGU7XG4gIHdoaWxlIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIGRvXG4gICAgcHBfY2xvc2VfYm94IHN0YXRlICgpXG4gIGRvbmU7XG4gIHN0YXRlLnBwX3JpZ2h0X3RvdGFsIDwtIHBwX2luZmluaXR5O1xuICBhZHZhbmNlX2xlZnQgc3RhdGU7XG4gIGlmIGIgdGhlbiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZTtcbiAgcHBfcmluaXQgc3RhdGVcblxuKCpcblxuICBQcm9jZWR1cmVzIHRvIGZvcm1hdCB2YWx1ZXMgYW5kIHVzZSBib3hlcy5cblxuKilcblxuKCogVG8gZm9ybWF0IGEgc3RyaW5nLiAqKVxubGV0IHBwX3ByaW50X2FzX3NpemUgc3RhdGUgc2l6ZSBzID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlc1xuICB0aGVuIGVucXVldWVfc3RyaW5nX2FzIHN0YXRlIHNpemUgc1xuXG5cbmxldCBwcF9wcmludF9hcyBzdGF0ZSBpc2l6ZSBzID1cbiAgcHBfcHJpbnRfYXNfc2l6ZSBzdGF0ZSAoU2l6ZS5vZl9pbnQgaXNpemUpIHNcblxuXG5sZXQgcHBfcHJpbnRfc3RyaW5nIHN0YXRlIHMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBzXG5cbmxldCBwcF9wcmludF9ieXRlcyBzdGF0ZSBzID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgKEJ5dGVzLmxlbmd0aCBzKSAoQnl0ZXMudG9fc3RyaW5nIHMpXG5cbigqIFRvIGZvcm1hdCBhbiBpbnRlZ2VyLiAqKVxubGV0IHBwX3ByaW50X2ludCBzdGF0ZSBpID0gcHBfcHJpbnRfc3RyaW5nIHN0YXRlIChJbnQudG9fc3RyaW5nIGkpXG5cbigqIFRvIGZvcm1hdCBhIGZsb2F0LiAqKVxubGV0IHBwX3ByaW50X2Zsb2F0IHN0YXRlIGYgPSBwcF9wcmludF9zdHJpbmcgc3RhdGUgKHN0cmluZ19vZl9mbG9hdCBmKVxuXG4oKiBUbyBmb3JtYXQgYSBib29sZWFuLiAqKVxubGV0IHBwX3ByaW50X2Jvb2wgc3RhdGUgYiA9IHBwX3ByaW50X3N0cmluZyBzdGF0ZSAoc3RyaW5nX29mX2Jvb2wgYilcblxuKCogVG8gZm9ybWF0IGEgY2hhci4gKilcbmxldCBwcF9wcmludF9jaGFyIHN0YXRlIGMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAxIChTdHJpbmcubWFrZSAxIGMpXG5cblxuKCogT3BlbmluZyBib3hlcy4gKilcbmxldCBwcF9vcGVuX2hib3ggc3RhdGUgKCkgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgMCBQcF9oYm94XG5hbmQgcHBfb3Blbl92Ym94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfdmJveFxuXG5hbmQgcHBfb3Blbl9odmJveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2h2Ym94XG5hbmQgcHBfb3Blbl9ob3Zib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9ob3Zib3hcbmFuZCBwcF9vcGVuX2JveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2JveFxuXG5cbigqIFByaW50aW5nIHF1ZXVlZCB0ZXh0LlxuXG4gICBbcHBfcHJpbnRfZmx1c2hdIHByaW50cyBhbGwgcGVuZGluZyBpdGVtcyBpbiB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUgYW5kXG4gICB0aGVuIGZsdXNoZXMgdGhlIGxvdyBsZXZlbCBvdXRwdXQgZGV2aWNlIG9mIHRoZSBmb3JtYXR0ZXIgdG8gYWN0dWFsbHlcbiAgIGRpc3BsYXkgcHJpbnRpbmcgbWF0ZXJpYWwuXG5cbiAgIFtwcF9wcmludF9uZXdsaW5lXSBiZWhhdmVzIGFzIFtwcF9wcmludF9mbHVzaF0gYWZ0ZXIgcHJpbnRpbmcgYW4gYWRkaXRpb25hbFxuICAgbmV3IGxpbmUuICopXG5sZXQgcHBfcHJpbnRfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIHRydWU7IHN0YXRlLnBwX291dF9mbHVzaCAoKVxuYW5kIHBwX3ByaW50X2ZsdXNoIHN0YXRlICgpID1cbiAgcHBfZmx1c2hfcXVldWUgc3RhdGUgZmFsc2U7IHN0YXRlLnBwX291dF9mbHVzaCAoKVxuXG5cbigqIFRvIGdldCBhIG5ld2xpbmUgd2hlbiBvbmUgZG9lcyBub3Qgd2FudCB0byBjbG9zZSB0aGUgY3VycmVudCBib3guICopXG5sZXQgcHBfZm9yY2VfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfbmV3bGluZTsgbGVuZ3RoID0gMCB9XG5cblxuKCogVG8gZm9ybWF0IHNvbWV0aGluZywgb25seSBpbiBjYXNlIHRoZSBsaW5lIGhhcyBqdXN0IGJlZW4gYnJva2VuLiAqKVxubGV0IHBwX3ByaW50X2lmX25ld2xpbmUgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGVcbiAgICAgIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9pZl9uZXdsaW5lOyBsZW5ndGggPSAwIH1cblxuXG4oKiBHZW5lcmFsaXplZCBicmVhayBoaW50IHRoYXQgYWxsb3dzIHByaW50aW5nIHN0cmluZ3MgYmVmb3JlL2FmdGVyXG4gICBzYW1lLWxpbmUgb2Zmc2V0ICh3aWR0aCkgb3IgbmV3LWxpbmUgb2Zmc2V0ICopXG5sZXQgcHBfcHJpbnRfY3VzdG9tX2JyZWFrIHN0YXRlIH5maXRzIH5icmVha3MgPVxuICBsZXQgYmVmb3JlLCB3aWR0aCwgYWZ0ZXIgPSBmaXRzIGluXG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IHRva2VuID0gUHBfYnJlYWsgeyBmaXRzOyBicmVha3MgfSBpblxuICAgIGxldCBsZW5ndGggPSBTdHJpbmcubGVuZ3RoIGJlZm9yZSArIHdpZHRoICsgU3RyaW5nLmxlbmd0aCBhZnRlciBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbjsgbGVuZ3RoIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgdHJ1ZSBlbGVtXG5cbigqIFByaW50aW5nIGJyZWFrIGhpbnRzOlxuICAgQSBicmVhayBoaW50IGluZGljYXRlcyB3aGVyZSBhIGJveCBtYXkgYmUgYnJva2VuLlxuICAgSWYgbGluZSBpcyBicm9rZW4gdGhlbiBvZmZzZXQgaXMgYWRkZWQgdG8gdGhlIGluZGVudGF0aW9uIG9mIHRoZSBjdXJyZW50XG4gICBib3ggZWxzZSAodGhlIHZhbHVlIG9mKSB3aWR0aCBibGFua3MgYXJlIHByaW50ZWQuICopXG5sZXQgcHBfcHJpbnRfYnJlYWsgc3RhdGUgd2lkdGggb2Zmc2V0ID1cbiAgcHBfcHJpbnRfY3VzdG9tX2JyZWFrIHN0YXRlXG4gICAgfmZpdHM6KFwiXCIsIHdpZHRoLCBcIlwiKSB+YnJlYWtzOihcIlwiLCBvZmZzZXQsIFwiXCIpXG5cblxuKCogUHJpbnQgYSBzcGFjZSA6XG4gICBhIHNwYWNlIGlzIGEgYnJlYWsgaGludCB0aGF0IHByaW50cyBhIHNpbmdsZSBzcGFjZSBpZiB0aGUgYnJlYWsgZG9lcyBub3RcbiAgIHNwbGl0IHRoZSBsaW5lO1xuICAgYSBjdXQgaXMgYSBicmVhayBoaW50IHRoYXQgcHJpbnRzIG5vdGhpbmcgaWYgdGhlIGJyZWFrIGRvZXMgbm90IHNwbGl0IHRoZVxuICAgbGluZS4gKilcbmxldCBwcF9wcmludF9zcGFjZSBzdGF0ZSAoKSA9IHBwX3ByaW50X2JyZWFrIHN0YXRlIDEgMFxuYW5kIHBwX3ByaW50X2N1dCBzdGF0ZSAoKSA9IHBwX3ByaW50X2JyZWFrIHN0YXRlIDAgMFxuXG5cbigqIFRhYnVsYXRpb24gYm94ZXMuICopXG5sZXQgcHBfb3Blbl90Ym94IHN0YXRlICgpID1cbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoICsgMTtcbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLnplcm8gaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW4gPSBQcF90YmVnaW4gKFBwX3Rib3ggKHJlZiBbXSkpOyBsZW5ndGggPSAwIH0gaW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbVxuXG5cbigqIENsb3NlIGEgdGFidWxhdGlvbiBib3guICopXG5sZXQgcHBfY2xvc2VfdGJveCBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIHRoZW5cbiAgYmVnaW5cbiAgIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgICBsZXQgZWxlbSA9IHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF90ZW5kOyBsZW5ndGggPSAwIH0gaW5cbiAgICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW07XG4gICAgIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCAtIDFcbiAgZW5kXG5cblxuKCogUHJpbnQgYSB0YWJ1bGF0aW9uIGJyZWFrLiAqKVxubGV0IHBwX3ByaW50X3RicmVhayBzdGF0ZSB3aWR0aCBvZmZzZXQgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUub2ZfaW50ICgtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsKSBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbiA9IFBwX3RicmVhayAod2lkdGgsIG9mZnNldCk7IGxlbmd0aCA9IHdpZHRoIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgdHJ1ZSBlbGVtXG5cblxubGV0IHBwX3ByaW50X3RhYiBzdGF0ZSAoKSA9IHBwX3ByaW50X3RicmVhayBzdGF0ZSAwIDBcblxubGV0IHBwX3NldF90YWIgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9zdGFiOyBsZW5ndGggPSAwIH0gaW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbVxuXG5cbigqXG5cbiAgUHJvY2VkdXJlcyB0byBjb250cm9sIHRoZSBwcmV0dHktcHJpbnRlcnNcblxuKilcblxuKCogU2V0X21heF9ib3hlcy4gKilcbmxldCBwcF9zZXRfbWF4X2JveGVzIHN0YXRlIG4gPSBpZiBuID4gMSB0aGVuIHN0YXRlLnBwX21heF9ib3hlcyA8LSBuXG5cbigqIFRvIGtub3cgdGhlIGN1cnJlbnQgbWF4aW11bSBudW1iZXIgb2YgYm94ZXMgYWxsb3dlZC4gKilcbmxldCBwcF9nZXRfbWF4X2JveGVzIHN0YXRlICgpID0gc3RhdGUucHBfbWF4X2JveGVzXG5cbmxldCBwcF9vdmVyX21heF9ib3hlcyBzdGF0ZSAoKSA9IHN0YXRlLnBwX2N1cnJfZGVwdGggPSBzdGF0ZS5wcF9tYXhfYm94ZXNcblxuKCogRWxsaXBzaXMuICopXG5sZXQgcHBfc2V0X2VsbGlwc2lzX3RleHQgc3RhdGUgcyA9IHN0YXRlLnBwX2VsbGlwc2lzIDwtIHNcbmFuZCBwcF9nZXRfZWxsaXBzaXNfdGV4dCBzdGF0ZSAoKSA9IHN0YXRlLnBwX2VsbGlwc2lzXG5cblxuKCogVG8gc2V0IHRoZSBtYXJnaW4gb2YgcHJldHR5LXByaW50ZXIuICopXG5sZXQgcHBfbGltaXQgbiA9XG4gIGlmIG4gPCBwcF9pbmZpbml0eSB0aGVuIG4gZWxzZSBwcmVkIHBwX2luZmluaXR5XG5cblxuKCogSW50ZXJuYWwgcHJldHR5LXByaW50ZXIgZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9taW5fc3BhY2VfbGVmdCBzdGF0ZSBuID1cbiAgaWYgbiA+PSAxIHRoZW5cbiAgICBsZXQgbiA9IHBwX2xpbWl0IG4gaW5cbiAgICBzdGF0ZS5wcF9taW5fc3BhY2VfbGVmdCA8LSBuO1xuICAgIHN0YXRlLnBwX21heF9pbmRlbnQgPC0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfcmluaXQgc3RhdGVcblxuXG4oKiBJbml0aWFsbHksIHdlIGhhdmUgOlxuICAgcHBfbWF4X2luZGVudCA9IHBwX21hcmdpbiAtIHBwX21pbl9zcGFjZV9sZWZ0LCBhbmRcbiAgIHBwX3NwYWNlX2xlZnQgPSBwcF9tYXJnaW4uICopXG5sZXQgcHBfc2V0X21heF9pbmRlbnQgc3RhdGUgbiA9XG4gIGlmIG4gPiAxIHRoZW5cbiAgICBwcF9zZXRfbWluX3NwYWNlX2xlZnQgc3RhdGUgKHN0YXRlLnBwX21hcmdpbiAtIG4pXG5cblxubGV0IHBwX2dldF9tYXhfaW5kZW50IHN0YXRlICgpID0gc3RhdGUucHBfbWF4X2luZGVudFxuXG5sZXQgcHBfc2V0X21hcmdpbiBzdGF0ZSBuID1cbiAgaWYgbiA+PSAxIHRoZW5cbiAgICBsZXQgbiA9IHBwX2xpbWl0IG4gaW5cbiAgICBzdGF0ZS5wcF9tYXJnaW4gPC0gbjtcbiAgICBsZXQgbmV3X21heF9pbmRlbnQgPVxuICAgICAgKCogVHJ5IHRvIG1haW50YWluIG1heF9pbmRlbnQgdG8gaXRzIGFjdHVhbCB2YWx1ZS4gKilcbiAgICAgIGlmIHN0YXRlLnBwX21heF9pbmRlbnQgPD0gc3RhdGUucHBfbWFyZ2luXG4gICAgICB0aGVuIHN0YXRlLnBwX21heF9pbmRlbnQgZWxzZVxuICAgICAgKCogSWYgcG9zc2libGUgbWFpbnRhaW4gcHBfbWluX3NwYWNlX2xlZnQgdG8gaXRzIGFjdHVhbCB2YWx1ZSxcbiAgICAgICAgIGlmIHRoaXMgbGVhZHMgdG8gYSB0b28gc21hbGwgbWF4X2luZGVudCwgdGFrZSBoYWxmIG9mIHRoZVxuICAgICAgICAgbmV3IG1hcmdpbiwgaWYgaXQgaXMgZ3JlYXRlciB0aGFuIDEuICopXG4gICAgICAgSW50Lm1heCAoSW50Lm1heCAoc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfbWluX3NwYWNlX2xlZnQpXG4gICAgICAgICAgICAgICAgKHN0YXRlLnBwX21hcmdpbiAvIDIpKSAxIGluXG4gICAgKCogUmVidWlsZCBpbnZhcmlhbnRzLiAqKVxuICAgIHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG5ld19tYXhfaW5kZW50XG5cblxuKCoqIEdlb21ldHJ5IGZ1bmN0aW9ucyBhbmQgdHlwZXMgKilcbnR5cGUgZ2VvbWV0cnkgPSB7IG1heF9pbmRlbnQ6aW50OyBtYXJnaW46IGludH1cblxubGV0IHZhbGlkYXRlX2dlb21ldHJ5IHttYXJnaW47IG1heF9pbmRlbnR9ID1cbiAgaWYgbWF4X2luZGVudCA8IDIgdGhlblxuICAgIEVycm9yIFwibWF4X2luZGVudCA8IDJcIlxuICBlbHNlIGlmIG1hcmdpbiA8PSBtYXhfaW5kZW50IHRoZW5cbiAgICBFcnJvciBcIm1hcmdpbiA8PSBtYXhfaW5kZW50XCJcbiAgZWxzZSBPayAoKVxuXG5sZXQgY2hlY2tfZ2VvbWV0cnkgZ2VvbWV0cnkgPVxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgT2sgKCkgLT4gdHJ1ZVxuICB8IEVycm9yIF8gLT4gZmFsc2VcblxubGV0IHBwX2dldF9tYXJnaW4gc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXJnaW5cblxubGV0IHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIHttYXJnaW47IG1heF9pbmRlbnR9ID1cbiAgcHBfc2V0X21hcmdpbiBzdGF0ZSBtYXJnaW47XG4gIHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG1heF9pbmRlbnQ7XG4gICgpXG5cbmxldCBwcF9zZXRfZ2VvbWV0cnkgc3RhdGUgfm1heF9pbmRlbnQgfm1hcmdpbiA9XG4gIGxldCBnZW9tZXRyeSA9IHsgbWF4X2luZGVudDsgbWFyZ2luIH0gaW5cbiAgbWF0Y2ggdmFsaWRhdGVfZ2VvbWV0cnkgZ2VvbWV0cnkgd2l0aFxuICB8IEVycm9yIG1zZyAtPlxuICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IChcIkZvcm1hdC5wcF9zZXRfZ2VvbWV0cnk6IFwiIF4gbXNnKSlcbiAgfCBPayAoKSAtPlxuICAgIHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIGdlb21ldHJ5XG5cbmxldCBwcF9zYWZlX3NldF9nZW9tZXRyeSBzdGF0ZSB+bWF4X2luZGVudCB+bWFyZ2luID1cbiAgbGV0IGdlb21ldHJ5ID0geyBtYXhfaW5kZW50OyBtYXJnaW4gfSBpblxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgRXJyb3IgX21zZyAtPlxuICAgICAoKVxuICB8IE9rICgpIC0+XG4gICAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgZ2VvbWV0cnlcblxubGV0IHBwX2dldF9nZW9tZXRyeSBzdGF0ZSAoKSA9XG4gIHsgbWFyZ2luID0gcHBfZ2V0X21hcmdpbiBzdGF0ZSAoKTsgbWF4X2luZGVudCA9IHBwX2dldF9tYXhfaW5kZW50IHN0YXRlICgpIH1cblxubGV0IHBwX3VwZGF0ZV9nZW9tZXRyeSBzdGF0ZSB1cGRhdGUgPVxuICBsZXQgZ2VvbWV0cnkgPSBwcF9nZXRfZ2VvbWV0cnkgc3RhdGUgKCkgaW5cbiAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgKHVwZGF0ZSBnZW9tZXRyeSlcblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBvdXRwdXQgZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGF0ZSB7XG4gICAgICBvdXRfc3RyaW5nID0gZjtcbiAgICAgIG91dF9mbHVzaCA9IGc7XG4gICAgICBvdXRfbmV3bGluZSA9IGg7XG4gICAgICBvdXRfc3BhY2VzID0gaTtcbiAgICAgIG91dF9pbmRlbnQgPSBqO1xuICAgIH0gPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIGY7XG4gIHN0YXRlLnBwX291dF9mbHVzaCA8LSBnO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBoO1xuICBzdGF0ZS5wcF9vdXRfc3BhY2VzIDwtIGk7XG4gIHN0YXRlLnBwX291dF9pbmRlbnQgPC0galxuXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0YXRlICgpID0ge1xuICBvdXRfc3RyaW5nID0gc3RhdGUucHBfb3V0X3N0cmluZztcbiAgb3V0X2ZsdXNoID0gc3RhdGUucHBfb3V0X2ZsdXNoO1xuICBvdXRfbmV3bGluZSA9IHN0YXRlLnBwX291dF9uZXdsaW5lO1xuICBvdXRfc3BhY2VzID0gc3RhdGUucHBfb3V0X3NwYWNlcztcbiAgb3V0X2luZGVudCA9IHN0YXRlLnBwX291dF9pbmRlbnQ7XG59XG5cblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBzdHJpbmcgb3V0cHV0IGFuZCBmbHVzaCBmdW5jdGlvbnMuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlIGYgZyA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gZjsgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIGdcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSAoKSA9XG4gIChzdGF0ZS5wcF9vdXRfc3RyaW5nLCBzdGF0ZS5wcF9vdXRfZmx1c2gpXG5cblxuKCogVGhlIGRlZmF1bHQgZnVuY3Rpb24gdG8gb3V0cHV0IG5ldyBsaW5lcy4gKilcbmxldCBkaXNwbGF5X25ld2xpbmUgc3RhdGUgKCkgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nIFwiXFxuXCIgMCAgMVxuXG4oKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBvdXRwdXQgc3BhY2VzLiAqKVxubGV0IGJsYW5rX2xpbmUgPSBTdHJpbmcubWFrZSA4MCAnICdcbmxldCByZWMgZGlzcGxheV9ibGFua3Mgc3RhdGUgbiA9XG4gIGlmIG4gPiAwIHRoZW5cbiAgaWYgbiA8PSA4MCB0aGVuIHN0YXRlLnBwX291dF9zdHJpbmcgYmxhbmtfbGluZSAwIG4gZWxzZVxuICBiZWdpblxuICAgIHN0YXRlLnBwX291dF9zdHJpbmcgYmxhbmtfbGluZSAwIDgwO1xuICAgIGRpc3BsYXlfYmxhbmtzIHN0YXRlIChuIC0gODApXG4gIGVuZFxuXG5cbigqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIG91dHB1dCBpbmRlbnRhdGlvbiBvZiBuZXcgbGluZXMuICopXG5sZXQgZGlzcGxheV9pbmRlbnQgPSBkaXNwbGF5X2JsYW5rc1xuXG4oKiBTZXR0aW5nIGEgZm9ybWF0dGVyIGJhc2ljIG91dHB1dCBmdW5jdGlvbnMgYXMgcHJpbnRpbmcgdG8gYSBnaXZlblxuICAgW1BlcnZhc2l2ZS5vdXRfY2hhbm5lbF0gdmFsdWUuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCBzdGF0ZSBvYyA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gb3V0cHV0X3N1YnN0cmluZyBvYztcbiAgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIChmdW4gKCkgLT4gZmx1c2ggb2MpO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBkaXNwbGF5X25ld2xpbmUgc3RhdGU7XG4gIHN0YXRlLnBwX291dF9zcGFjZXMgPC0gZGlzcGxheV9ibGFua3Mgc3RhdGU7XG4gIHN0YXRlLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgc3RhdGVcblxuKCpcblxuICBEZWZpbmluZyBzcGVjaWZpYyBmb3JtYXR0ZXJzXG5cbiopXG5cbmxldCBkZWZhdWx0X3BwX21hcmtfb3Blbl90YWcgPSBmdW5jdGlvblxuICB8IFN0cmluZ190YWcgcyAtPiBcIjxcIiBeIHMgXiBcIj5cIlxuICB8IF8gLT4gXCJcIlxubGV0IGRlZmF1bHRfcHBfbWFya19jbG9zZV90YWcgPSBmdW5jdGlvblxuICB8IFN0cmluZ190YWcgcyAtPiBcIjwvXCIgXiBzIF4gXCI+XCJcbiAgfCBfIC0+IFwiXCJcblxubGV0IGRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWcgPSBpZ25vcmVcbmxldCBkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZyA9IGlnbm9yZVxuXG4oKiBCdWlsZGluZyBhIGZvcm1hdHRlciBnaXZlbiBpdHMgYmFzaWMgb3V0cHV0IGZ1bmN0aW9ucy5cbiAgIE90aGVyIGZpZWxkcyBnZXQgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlcy4gKilcbmxldCBwcF9tYWtlX2Zvcm1hdHRlciBmIGcgaCBpIGogPVxuICAoKiBUaGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgZm9ybWF0dGVyIGNvbnRhaW5zIGEgZHVtbXkgYm94LiAqKVxuICBsZXQgcHBfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgbGV0IHN5c190b2sgPVxuICAgIHsgc2l6ZSA9IFNpemUudW5rbm93bjsgdG9rZW4gPSBQcF9iZWdpbiAoMCwgUHBfaG92Ym94KTsgbGVuZ3RoID0gMCB9IGluXG4gIFF1ZXVlLmFkZCBzeXNfdG9rIHBwX3F1ZXVlO1xuICBsZXQgc2Nhbl9zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKSBpblxuICBpbml0aWFsaXplX3NjYW5fc3RhY2sgc2Nhbl9zdGFjaztcbiAgU3RhY2sucHVzaCB7IGxlZnRfdG90YWwgPSAxOyBxdWV1ZV9lbGVtID0gc3lzX3RvayB9IHNjYW5fc3RhY2s7XG4gIGxldCBwcF9tYXJnaW4gPSA3OFxuICBhbmQgcHBfbWluX3NwYWNlX2xlZnQgPSAxMCBpblxuICB7XG4gICAgcHBfc2Nhbl9zdGFjayA9IHNjYW5fc3RhY2s7XG4gICAgcHBfZm9ybWF0X3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX3Rib3hfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfdGFnX3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX21hcmtfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfbWFyZ2luID0gcHBfbWFyZ2luO1xuICAgIHBwX21pbl9zcGFjZV9sZWZ0ID0gcHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfbWF4X2luZGVudCA9IHBwX21hcmdpbiAtIHBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX3NwYWNlX2xlZnQgPSBwcF9tYXJnaW47XG4gICAgcHBfY3VycmVudF9pbmRlbnQgPSAwO1xuICAgIHBwX2lzX25ld19saW5lID0gdHJ1ZTtcbiAgICBwcF9sZWZ0X3RvdGFsID0gMTtcbiAgICBwcF9yaWdodF90b3RhbCA9IDE7XG4gICAgcHBfY3Vycl9kZXB0aCA9IDE7XG4gICAgcHBfbWF4X2JveGVzID0gbWF4X2ludDtcbiAgICBwcF9lbGxpcHNpcyA9IFwiLlwiO1xuICAgIHBwX291dF9zdHJpbmcgPSBmO1xuICAgIHBwX291dF9mbHVzaCA9IGc7XG4gICAgcHBfb3V0X25ld2xpbmUgPSBoO1xuICAgIHBwX291dF9zcGFjZXMgPSBpO1xuICAgIHBwX291dF9pbmRlbnQgPSBqO1xuICAgIHBwX3ByaW50X3RhZ3MgPSBmYWxzZTtcbiAgICBwcF9tYXJrX3RhZ3MgPSBmYWxzZTtcbiAgICBwcF9tYXJrX29wZW5fdGFnID0gZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnO1xuICAgIHBwX21hcmtfY2xvc2VfdGFnID0gZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZztcbiAgICBwcF9wcmludF9vcGVuX3RhZyA9IGRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWc7XG4gICAgcHBfcHJpbnRfY2xvc2VfdGFnID0gZGVmYXVsdF9wcF9wcmludF9jbG9zZV90YWc7XG4gICAgcHBfcXVldWUgPSBwcF9xdWV1ZTtcbiAgfVxuXG5cbigqIEJ1aWxkIGEgZm9ybWF0dGVyIG91dCBvZiBpdHMgb3V0IGZ1bmN0aW9ucy4gKilcbmxldCBmb3JtYXR0ZXJfb2Zfb3V0X2Z1bmN0aW9ucyBvdXRfZnVucyA9XG4gIHBwX21ha2VfZm9ybWF0dGVyXG4gICAgb3V0X2Z1bnMub3V0X3N0cmluZ1xuICAgIG91dF9mdW5zLm91dF9mbHVzaFxuICAgIG91dF9mdW5zLm91dF9uZXdsaW5lXG4gICAgb3V0X2Z1bnMub3V0X3NwYWNlc1xuICAgIG91dF9mdW5zLm91dF9pbmRlbnRcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdpdGggZGVmYXVsdCBmdW5jdGlvbnMgdG8gb3V0cHV0IHNwYWNlcyxcbiAgaW5kZW50YXRpb24sIGFuZCBuZXcgbGluZXMuICopXG5sZXQgbWFrZV9mb3JtYXR0ZXIgb3V0cHV0IGZsdXNoID1cbiAgbGV0IHBwZiA9IHBwX21ha2VfZm9ybWF0dGVyIG91dHB1dCBmbHVzaCBpZ25vcmUgaWdub3JlIGlnbm9yZSBpblxuICBwcGYucHBfb3V0X25ld2xpbmUgPC0gZGlzcGxheV9uZXdsaW5lIHBwZjtcbiAgcHBmLnBwX291dF9zcGFjZXMgPC0gZGlzcGxheV9ibGFua3MgcHBmO1xuICBwcGYucHBfb3V0X2luZGVudCA8LSBkaXNwbGF5X2luZGVudCBwcGY7XG4gIHBwZlxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd3JpdGluZyB0byBhIGdpdmVuIFtQZXJ2YXNpdmUub3V0X2NoYW5uZWxdIHZhbHVlLiAqKVxubGV0IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBvYyA9XG4gIG1ha2VfZm9ybWF0dGVyIChvdXRwdXRfc3Vic3RyaW5nIG9jKSAoZnVuICgpIC0+IGZsdXNoIG9jKVxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd3JpdGluZyB0byBhIGdpdmVuIFtCdWZmZXIudF0gdmFsdWUuICopXG5sZXQgZm9ybWF0dGVyX29mX2J1ZmZlciBiID1cbiAgbWFrZV9mb3JtYXR0ZXIgKEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIpIGlnbm9yZVxuXG5cbigqIEFsbG9jYXRpbmcgYnVmZmVyIGZvciBwcmV0dHktcHJpbnRpbmcgcHVycG9zZXMuXG4gICBEZWZhdWx0IGJ1ZmZlciBzaXplIGlzIHBwX2J1ZmZlcl9zaXplIG9yIDUxMi5cbiopXG5sZXQgcHBfYnVmZmVyX3NpemUgPSA1MTJcbmxldCBwcF9tYWtlX2J1ZmZlciAoKSA9IEJ1ZmZlci5jcmVhdGUgcHBfYnVmZmVyX3NpemVcblxuKCogVGhlIHN0YW5kYXJkIChzaGFyZWQpIGJ1ZmZlci4gKilcbmxldCBzdGRidWYgPSBwcF9tYWtlX2J1ZmZlciAoKVxuXG4oKiBQcmVkZWZpbmVkIGZvcm1hdHRlcnMgc3RhbmRhcmQgZm9ybWF0dGVyIHRvIHByaW50XG4gICB0byBbU3RkbGliLnN0ZG91dF0sIFtTdGRsaWIuc3RkZXJyXSwgYW5kIHshc3RkYnVmfS4gKilcbmxldCBzdGRfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX291dF9jaGFubmVsIFN0ZGxpYi5zdGRvdXRcbmFuZCBlcnJfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX291dF9jaGFubmVsIFN0ZGxpYi5zdGRlcnJcbmFuZCBzdHJfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX2J1ZmZlciBzdGRidWZcblxuXG4oKiBbZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBidWYgcHBmXSBmbHVzaGVzIGZvcm1hdHRlciBbcHBmXSxcbiAgIHRoZW4gcmV0dXJucyB0aGUgY29udGVudHMgb2YgYnVmZmVyIFtidWZdIHRoYXQgaXMgcmVzZXQuXG4gICBGb3JtYXR0ZXIgW3BwZl0gaXMgc3VwcG9zZWQgdG8gcHJpbnQgdG8gYnVmZmVyIFtidWZdLCBvdGhlcndpc2UgdGhpc1xuICAgZnVuY3Rpb24gaXMgbm90IHJlYWxseSB1c2VmdWwuICopXG5sZXQgZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBidWYgcHBmID1cbiAgcHBfZmx1c2hfcXVldWUgcHBmIGZhbHNlO1xuICBsZXQgcyA9IEJ1ZmZlci5jb250ZW50cyBidWYgaW5cbiAgQnVmZmVyLnJlc2V0IGJ1ZjtcbiAgc1xuXG5cbigqIEZsdXNoIFtzdHJfZm9ybWF0dGVyXSBhbmQgZ2V0IHRoZSBjb250ZW50cyBvZiBbc3RkYnVmXS4gKilcbmxldCBmbHVzaF9zdHJfZm9ybWF0dGVyICgpID0gZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBzdGRidWYgc3RyX2Zvcm1hdHRlclxuXG4oKlxuICBTeW1ib2xpYyBwcmV0dHktcHJpbnRpbmdcbiopXG5cbigqXG4gIFN5bWJvbGljIHByZXR0eS1wcmludGluZyBpcyBwcmV0dHktcHJpbnRpbmcgd2l0aCBubyBsb3cgbGV2ZWwgb3V0cHV0LlxuXG4gIFdoZW4gdXNpbmcgYSBzeW1ib2xpYyBmb3JtYXR0ZXIsIGFsbCByZWd1bGFyIHByZXR0eS1wcmludGluZyBhY3Rpdml0aWVzXG4gIG9jY3VyIGJ1dCBvdXRwdXQgbWF0ZXJpYWwgaXMgc3ltYm9saWMgYW5kIHN0b3JlZCBpbiBhIGJ1ZmZlciBvZiBvdXRwdXRcbiAgaXRlbXMuIEF0IHRoZSBlbmQgb2YgcHJldHR5LXByaW50aW5nLCBmbHVzaGluZyB0aGUgb3V0cHV0IGJ1ZmZlciBhbGxvd3NcbiAgcG9zdC1wcm9jZXNzaW5nIG9mIHN5bWJvbGljIG91dHB1dCBiZWZvcmUgbG93IGxldmVsIG91dHB1dCBvcGVyYXRpb25zLlxuKilcblxudHlwZSBzeW1ib2xpY19vdXRwdXRfaXRlbSA9XG4gIHwgT3V0cHV0X2ZsdXNoXG4gIHwgT3V0cHV0X25ld2xpbmVcbiAgfCBPdXRwdXRfc3RyaW5nIG9mIHN0cmluZ1xuICB8IE91dHB1dF9zcGFjZXMgb2YgaW50XG4gIHwgT3V0cHV0X2luZGVudCBvZiBpbnRcblxudHlwZSBzeW1ib2xpY19vdXRwdXRfYnVmZmVyID0ge1xuICBtdXRhYmxlIHN5bWJvbGljX291dHB1dF9jb250ZW50cyA6IHN5bWJvbGljX291dHB1dF9pdGVtIGxpc3Q7XG59XG5cbmxldCBtYWtlX3N5bWJvbGljX291dHB1dF9idWZmZXIgKCkgPVxuICB7IHN5bWJvbGljX291dHB1dF9jb250ZW50cyA9IFtdIH1cblxubGV0IGNsZWFyX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50cyA8LSBbXVxuXG5sZXQgZ2V0X3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgTGlzdC5yZXYgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50c1xuXG5sZXQgZmx1c2hfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBsZXQgaXRlbXMgPSBnZXRfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgaW5cbiAgY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2I7XG4gIGl0ZW1zXG5cbmxldCBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIGl0ZW0gPVxuICBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDwtIGl0ZW0gOjogc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50c1xuXG5sZXQgZm9ybWF0dGVyX29mX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgbGV0IHN5bWJvbGljX2ZsdXNoIHNvYiAoKSA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiBPdXRwdXRfZmx1c2hcbiAgYW5kIHN5bWJvbGljX25ld2xpbmUgc29iICgpID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIE91dHB1dF9uZXdsaW5lXG4gIGFuZCBzeW1ib2xpY19zdHJpbmcgc29iIHMgaSBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfc3RyaW5nIChTdHJpbmcuc3ViIHMgaSBuKSlcbiAgYW5kIHN5bWJvbGljX3NwYWNlcyBzb2IgbiA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiAoT3V0cHV0X3NwYWNlcyBuKVxuICBhbmQgc3ltYm9saWNfaW5kZW50IHNvYiBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfaW5kZW50IG4pIGluXG5cbiAgbGV0IGYgPSBzeW1ib2xpY19zdHJpbmcgc29iXG4gIGFuZCBnID0gc3ltYm9saWNfZmx1c2ggc29iXG4gIGFuZCBoID0gc3ltYm9saWNfbmV3bGluZSBzb2JcbiAgYW5kIGkgPSBzeW1ib2xpY19zcGFjZXMgc29iXG4gIGFuZCBqID0gc3ltYm9saWNfaW5kZW50IHNvYiBpblxuICBwcF9tYWtlX2Zvcm1hdHRlciBmIGcgaCBpIGpcblxuKCpcblxuICBCYXNpYyBmdW5jdGlvbnMgb24gdGhlICdzdGFuZGFyZCcgZm9ybWF0dGVyXG4gICh0aGUgZm9ybWF0dGVyIHRoYXQgcHJpbnRzIHRvIFtTdGRsaWIuc3Rkb3V0XSkuXG5cbiopXG5cbmxldCBvcGVuX2hib3ggPSBwcF9vcGVuX2hib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fdmJveCA9IHBwX29wZW5fdmJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9odmJveCA9IHBwX29wZW5faHZib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5faG92Ym94ID0gcHBfb3Blbl9ob3Zib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fYm94ID0gcHBfb3Blbl9ib3ggc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX2JveCA9IHBwX2Nsb3NlX2JveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl90YWcgPSBwcF9vcGVuX3RhZyBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2VfdGFnID0gcHBfY2xvc2VfdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX3N0YWcgPSBwcF9vcGVuX3N0YWcgc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX3N0YWcgPSBwcF9jbG9zZV9zdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9hcyA9IHBwX3ByaW50X2FzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9zdHJpbmcgPSBwcF9wcmludF9zdHJpbmcgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2J5dGVzID0gcHBfcHJpbnRfYnl0ZXMgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2ludCA9IHBwX3ByaW50X2ludCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfZmxvYXQgPSBwcF9wcmludF9mbG9hdCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfY2hhciA9IHBwX3ByaW50X2NoYXIgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2Jvb2wgPSBwcF9wcmludF9ib29sIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9icmVhayA9IHBwX3ByaW50X2JyZWFrIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9jdXQgPSBwcF9wcmludF9jdXQgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3NwYWNlID0gcHBfcHJpbnRfc3BhY2Ugc3RkX2Zvcm1hdHRlclxuYW5kIGZvcmNlX25ld2xpbmUgPSBwcF9mb3JjZV9uZXdsaW5lIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9mbHVzaCA9IHBwX3ByaW50X2ZsdXNoIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9uZXdsaW5lID0gcHBfcHJpbnRfbmV3bGluZSBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfaWZfbmV3bGluZSA9IHBwX3ByaW50X2lmX25ld2xpbmUgc3RkX2Zvcm1hdHRlclxuXG5hbmQgb3Blbl90Ym94ID0gcHBfb3Blbl90Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBjbG9zZV90Ym94ID0gcHBfY2xvc2VfdGJveCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfdGJyZWFrID0gcHBfcHJpbnRfdGJyZWFrIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF90YWIgPSBwcF9zZXRfdGFiIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF90YWIgPSBwcF9wcmludF90YWIgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X21hcmdpbiA9IHBwX3NldF9tYXJnaW4gc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXJnaW4gPSBwcF9nZXRfbWFyZ2luIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9tYXhfaW5kZW50ID0gcHBfc2V0X21heF9pbmRlbnQgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXhfaW5kZW50ID0gcHBfZ2V0X21heF9pbmRlbnQgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2dlb21ldHJ5ID0gcHBfc2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCBzYWZlX3NldF9nZW9tZXRyeSA9IHBwX3NhZmVfc2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZ2VvbWV0cnkgPSBwcF9nZXRfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuYW5kIHVwZGF0ZV9nZW9tZXRyeSA9IHBwX3VwZGF0ZV9nZW9tZXRyeSBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfbWF4X2JveGVzID0gcHBfc2V0X21heF9ib3hlcyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21heF9ib3hlcyA9IHBwX2dldF9tYXhfYm94ZXMgc3RkX2Zvcm1hdHRlclxuYW5kIG92ZXJfbWF4X2JveGVzID0gcHBfb3Zlcl9tYXhfYm94ZXMgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2VsbGlwc2lzX3RleHQgPSBwcF9zZXRfZWxsaXBzaXNfdGV4dCBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2VsbGlwc2lzX3RleHQgPSBwcF9nZXRfZWxsaXBzaXNfdGV4dCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9jaGFubmVsID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIHNldF9wcmludF90YWdzID1cbiAgcHBfc2V0X3ByaW50X3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9wcmludF90YWdzID1cbiAgcHBfZ2V0X3ByaW50X3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIHNldF9tYXJrX3RhZ3MgPVxuICBwcF9zZXRfbWFya190YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfbWFya190YWdzID1cbiAgcHBfZ2V0X21hcmtfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgc2V0X3RhZ3MgPVxuICBwcF9zZXRfdGFncyBzdGRfZm9ybWF0dGVyXG5cblxuKCogQ29udmVuaWVuY2UgZnVuY3Rpb25zICopXG5cbigqIFRvIGZvcm1hdCBhIGxpc3QgKilcbmxldCByZWMgcHBfcHJpbnRfbGlzdCA/KHBwX3NlcCA9IHBwX3ByaW50X2N1dCkgcHBfdiBwcGYgPSBmdW5jdGlvblxuICB8IFtdIC0+ICgpXG4gIHwgW3ZdIC0+IHBwX3YgcHBmIHZcbiAgfCB2IDo6IHZzIC0+XG4gICAgcHBfdiBwcGYgdjtcbiAgICBwcF9zZXAgcHBmICgpO1xuICAgIHBwX3ByaW50X2xpc3QgfnBwX3NlcCBwcF92IHBwZiB2c1xuXG4oKiBUbyBmb3JtYXQgYSBzZXF1ZW5jZSAqKVxubGV0IHJlYyBwcF9wcmludF9zZXFfaW4gfnBwX3NlcCBwcF92IHBwZiBzZXEgPVxuICBtYXRjaCBzZXEgKCkgd2l0aFxuICB8IFNlcS5OaWwgLT4gKClcbiAgfCBTZXEuQ29ucyAodiwgc2VxKSAtPlxuICAgIHBwX3NlcCBwcGYgKCk7XG4gICAgcHBfdiBwcGYgdjtcbiAgICBwcF9wcmludF9zZXFfaW4gfnBwX3NlcCBwcF92IHBwZiBzZXFcblxubGV0IHBwX3ByaW50X3NlcSA/KHBwX3NlcCA9IHBwX3ByaW50X2N1dCkgcHBfdiBwcGYgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgfCBTZXEuTmlsIC0+ICgpXG4gIHwgU2VxLkNvbnMgKHYsIHNlcSkgLT5cbiAgICBwcF92IHBwZiB2O1xuICAgIHBwX3ByaW50X3NlcV9pbiB+cHBfc2VwIHBwX3YgcHBmIHNlcVxuXG4oKiBUbyBmb3JtYXQgZnJlZS1mbG93aW5nIHRleHQgKilcbmxldCBwcF9wcmludF90ZXh0IHBwZiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgbGVmdCA9IHJlZiAwIGluXG4gIGxldCByaWdodCA9IHJlZiAwIGluXG4gIGxldCBmbHVzaCAoKSA9XG4gICAgcHBfcHJpbnRfc3RyaW5nIHBwZiAoU3RyaW5nLnN1YiBzICFsZWZ0ICghcmlnaHQgLSAhbGVmdCkpO1xuICAgIGluY3IgcmlnaHQ7IGxlZnQgOj0gIXJpZ2h0O1xuICBpblxuICB3aGlsZSAoIXJpZ2h0IDw+IGxlbikgZG9cbiAgICBtYXRjaCBzLlshcmlnaHRdIHdpdGhcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgZmx1c2ggKCk7XG4gICAgICAgIHBwX2ZvcmNlX25ld2xpbmUgcHBmICgpXG4gICAgICB8ICcgJyAtPlxuICAgICAgICBmbHVzaCAoKTsgcHBfcHJpbnRfc3BhY2UgcHBmICgpXG4gICAgICAoKiB0aGVyZSBpcyBubyBzcGVjaWZpYyBzdXBwb3J0IGZvciAnXFx0J1xuICAgICAgICAgYXMgaXQgaXMgdW5jbGVhciB3aGF0IGEgcmlnaHQgc2VtYW50aWNzIHdvdWxkIGJlICopXG4gICAgICB8IF8gLT4gaW5jciByaWdodFxuICBkb25lO1xuICBpZiAhbGVmdCA8PiBsZW4gdGhlbiBmbHVzaCAoKVxuXG5sZXQgcHBfcHJpbnRfb3B0aW9uID8obm9uZSA9IGZ1biBfICgpIC0+ICgpKSBwcF92IHBwZiA9IGZ1bmN0aW9uXG58IE5vbmUgLT4gbm9uZSBwcGYgKClcbnwgU29tZSB2IC0+IHBwX3YgcHBmIHZcblxubGV0IHBwX3ByaW50X3Jlc3VsdCB+b2sgfmVycm9yIHBwZiA9IGZ1bmN0aW9uXG58IE9rIHYgLT4gb2sgcHBmIHZcbnwgRXJyb3IgZSAtPiBlcnJvciBwcGYgZVxuXG5sZXQgcHBfcHJpbnRfZWl0aGVyIH5sZWZ0IH5yaWdodCBwcGYgPSBmdW5jdGlvblxufCBFaXRoZXIuTGVmdCBsIC0+IGxlZnQgcHBmIGxcbnwgRWl0aGVyLlJpZ2h0IHIgLT4gcmlnaHQgcHBmIHJcblxuICgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxubGV0IGNvbXB1dGVfdGFnIG91dHB1dCB0YWdfYWNjID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTYgaW5cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIG91dHB1dCBwcGYgdGFnX2FjYztcbiAgcHBfcHJpbnRfZmx1c2ggcHBmICgpO1xuICBsZXQgbGVuID0gQnVmZmVyLmxlbmd0aCBidWYgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIEJ1ZmZlci5jb250ZW50cyBidWZcbiAgZWxzZSBCdWZmZXIuc3ViIGJ1ZiAxIChsZW4gLSAyKVxuXG4gKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgRGVmaW5pbmcgY29udGludWF0aW9ucyB0byBiZSBwYXNzZWQgYXMgYXJndW1lbnRzIG9mXG4gIENhbWxpbnRlcm5hbEZvcm1hdC5tYWtlX3ByaW50Zi5cblxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3Ncbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0XG5cbigqIEludGVycHJldCBhIGZvcm1hdHRpbmcgZW50aXR5IG9uIGEgZm9ybWF0dGVyLiAqKVxubGV0IG91dHB1dF9mb3JtYXR0aW5nX2xpdCBwcGYgZm10aW5nX2xpdCA9IG1hdGNoIGZtdGluZ19saXQgd2l0aFxuICB8IENsb3NlX2JveCAgICAgICAgICAgICAgICAgLT4gcHBfY2xvc2VfYm94IHBwZiAoKVxuICB8IENsb3NlX3RhZyAgICAgICAgICAgICAgICAgLT4gcHBfY2xvc2VfdGFnIHBwZiAoKVxuICB8IEJyZWFrIChfLCB3aWR0aCwgb2Zmc2V0KSAgLT4gcHBfcHJpbnRfYnJlYWsgcHBmIHdpZHRoIG9mZnNldFxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfZmx1c2ggcHBmICgpXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAtPiBwcF9mb3JjZV9uZXdsaW5lIHBwZiAoKVxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgICAgICAgLT4gcHBfcHJpbnRfbmV3bGluZSBwcGYgKClcbiAgfCBNYWdpY19zaXplIChfLCBfKSAgICAgICAgIC0+ICgpXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgICAgICAtPiBwcF9wcmludF9jaGFyIHBwZiAnQCdcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAgICAgIC0+IHBwX3ByaW50X2NoYXIgcHBmICclJ1xuICB8IFNjYW5faW5kaWMgYyAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfY2hhciBwcGYgJ0AnOyBwcF9wcmludF9jaGFyIHBwZiBjXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYW4gb3V0cHV0X3N0cmVhbS4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5vdXRwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIG91dHB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBvdXRwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgb3V0cHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IGYgcHBmO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IG91dHB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5idWZwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2RlbGF5IChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgZikgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoZiAoKSk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBzdHJwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgc3RycHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X3N0cmluZyBwcGYgKGYgKCkpO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IHN0cnB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCpcblxuICBEZWZpbmluZyBbZnByaW50Zl0gYW5kIHZhcmlvdXMgZmxhdm9ycyBvZiBbZnByaW50Zl0uXG5cbiopXG5cbmxldCBrZnByaW50ZiBrIHBwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBwcGYgYWNjOyBrIHBwZilcbiAgICBFbmRfb2ZfYWNjIGZtdFxuXG5hbmQgaWtmcHJpbnRmIGsgcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9pcHJpbnRmIGsgcHBmIGZtdFxuXG5sZXQgaWZwcmludGYgX3BwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBpZ25vcmUgKCkgZm10XG5cbmxldCBmcHJpbnRmIHBwZiA9IGtmcHJpbnRmIGlnbm9yZSBwcGZcbmxldCBwcmludGYgZm10ID0gZnByaW50ZiBzdGRfZm9ybWF0dGVyIGZtdFxubGV0IGVwcmludGYgZm10ID0gZnByaW50ZiBlcnJfZm9ybWF0dGVyIGZtdFxuXG5sZXQga2RwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gayAoZnVuIHBwZiAtPiBvdXRwdXRfYWNjIHBwZiBhY2MpKVxuICAgIEVuZF9vZl9hY2MgZm10XG5cbmxldCBkcHJpbnRmIGZtdCA9IGtkcHJpbnRmIChmdW4gaSAtPiBpKSBmbXRcblxubGV0IGtzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYiA9IHBwX21ha2VfYnVmZmVyICgpIGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID1cbiAgICBzdHJwdXRfYWNjIHBwZiBhY2M7XG4gICAgayAoZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBiIHBwZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbmxldCBzcHJpbnRmIGZtdCA9IGtzcHJpbnRmIGlkIGZtdFxuXG5sZXQga2FzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYiA9IHBwX21ha2VfYnVmZmVyICgpIGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID1cbiAgICBvdXRwdXRfYWNjIHBwZiBhY2M7XG4gICAgayAoZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBiIHBwZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbmxldCBhc3ByaW50ZiBmbXQgPSBrYXNwcmludGYgaWQgZm10XG5cbigqIEZsdXNoaW5nIHN0YW5kYXJkIGZvcm1hdHRlcnMgYXQgZW5kIG9mIGV4ZWN1dGlvbi4gKilcblxubGV0IGZsdXNoX3N0YW5kYXJkX2Zvcm1hdHRlcnMgKCkgPVxuICBwcF9wcmludF9mbHVzaCBzdGRfZm9ybWF0dGVyICgpO1xuICBwcF9wcmludF9mbHVzaCBlcnJfZm9ybWF0dGVyICgpXG5cbmxldCAoKSA9IGF0X2V4aXQgZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVyc1xuXG4oKlxuXG4gIERlcHJlY2F0ZWQgc3R1ZmYuXG5cbiopXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBwcF9zZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlXG4gICAgfm91dDpmIH5mbHVzaDpnIH5uZXdsaW5lOmggfnNwYWNlczppID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlIGYgZztcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gaDtcbiAgc3RhdGUucHBfb3V0X3NwYWNlcyA8LSBpXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBwcF9nZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlICgpID1cbiAgKHN0YXRlLnBwX291dF9zdHJpbmcsIHN0YXRlLnBwX291dF9mbHVzaCxcbiAgIHN0YXRlLnBwX291dF9uZXdsaW5lLCBzdGF0ZS5wcF9vdXRfc3BhY2VzKVxuXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBzZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IGdldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IGdldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9nZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuXG4oKiBEZXByZWNhdGVkIDogZXJyb3IgcHJvbmUgZnVuY3Rpb24sIGRvIG5vdCB1c2UgaXQuXG4gICBUaGlzIGZ1bmN0aW9uIGlzIG5laXRoZXIgY29tcG9zaXRpb25hbCBub3IgaW5jcmVtZW50YWwsIHNpbmNlIGl0IGZsdXNoZXNcbiAgIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBhdCBlYWNoIGNhbGwuXG4gICBUbyBnZXQgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSwgZGVmaW5lIGEgZm9ybWF0dGVyIG9mIHlvdXIgb3duIHdyaXRpbmcgdG9cbiAgIHRoZSBidWZmZXIgYXJndW1lbnQsIGFzIGluXG4gICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiXG4gICB0aGVuIHVzZSB7IWZwcmludGYgcHBmfSBhcyB1c3VhbC4gKilcbmxldCBicHJpbnRmIGIgKEZvcm1hdCAoZm10LCBfKSA6ICgnYSwgZm9ybWF0dGVyLCB1bml0KSBmb3JtYXQpID1cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBsZXQgayBhY2MgPSBvdXRwdXRfYWNjIHBwZiBhY2M7IHBwX2ZsdXNoX3F1ZXVlIHBwZiBmYWxzZSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cblxuKCogRGVwcmVjYXRlZCA6IGFsaWFzIGZvciBrc3ByaW50Zi4gKilcbmxldCBrcHJpbnRmID0ga3NwcmludGZcblxuXG5cbigqIERlcHJlY2F0ZWQgdGFnIGZ1bmN0aW9ucyAqKVxuXG50eXBlIGZvcm1hdHRlcl90YWdfZnVuY3Rpb25zID0ge1xuICBtYXJrX29wZW5fdGFnIDogdGFnIC0+IHN0cmluZztcbiAgbWFya19jbG9zZV90YWcgOiB0YWcgLT4gc3RyaW5nO1xuICBwcmludF9vcGVuX3RhZyA6IHRhZyAtPiB1bml0O1xuICBwcmludF9jbG9zZV90YWcgOiB0YWcgLT4gdW5pdDtcbn1cblxuXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0YXRlIHtcbiAgICAgbWFya19vcGVuX3RhZyA9IG1vdDtcbiAgICAgbWFya19jbG9zZV90YWcgPSBtY3Q7XG4gICAgIHByaW50X29wZW5fdGFnID0gcG90O1xuICAgICBwcmludF9jbG9zZV90YWcgPSBwY3Q7XG4gICB9ID1cbiAgbGV0IHN0cmluZ2lmeSBmIGUgPSBmdW5jdGlvbiBTdHJpbmdfdGFnIHMgLT4gZiBzIHwgXyAtPiBlIGluXG4gIHN0YXRlLnBwX21hcmtfb3Blbl90YWcgPC0gc3RyaW5naWZ5IG1vdCBcIlwiO1xuICBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyA8LSBzdHJpbmdpZnkgbWN0IFwiXCI7XG4gIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIDwtIHN0cmluZ2lmeSBwb3QgKCk7XG4gIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyA8LSBzdHJpbmdpZnkgcGN0ICgpXG5cbmxldCBwcF9nZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgZm10ICgpID1cbiAgbGV0IGZ1bnMgPSBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIGZtdCAoKSBpblxuICBsZXQgbWFya19vcGVuX3RhZyBzID0gZnVucy5tYXJrX29wZW5fc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICBsZXQgbWFya19jbG9zZV90YWcgcyA9IGZ1bnMubWFya19jbG9zZV9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIGxldCBwcmludF9vcGVuX3RhZyBzID0gZnVucy5wcmludF9vcGVuX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAgbGV0IHByaW50X2Nsb3NlX3RhZyBzID0gZnVucy5wcmludF9jbG9zZV9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIHttYXJrX29wZW5fdGFnOyBtYXJrX2Nsb3NlX3RhZzsgcHJpbnRfb3Blbl90YWc7IHByaW50X2Nsb3NlX3RhZ31cblxubGV0IHNldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUmVnaXN0ZXJpbmcgT0NhbWwgdmFsdWVzIHdpdGggdGhlIEMgcnVudGltZSBmb3IgbGF0ZXIgY2FsbGJhY2tzICopXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+IE9iai50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0IHJlZ2lzdGVyIG5hbWUgdiA9XG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIG5hbWUgKE9iai5yZXByIHYpXG5cbmxldCByZWdpc3Rlcl9leGNlcHRpb24gbmFtZSAoZXhuIDogZXhuKSA9XG4gIGxldCBleG4gPSBPYmoucmVwciBleG4gaW5cbiAgbGV0IHNsb3QgPSBpZiBPYmoudGFnIGV4biA9IE9iai5vYmplY3RfdGFnIHRoZW4gZXhuIGVsc2UgT2JqLmZpZWxkIGV4biAwIGluXG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIG5hbWUgc2xvdFxuIiwibW9kdWxlIEpzID0gc3RydWN0XG4gIHR5cGUgdFxuXG4gIHR5cGUgJ2EganNfYXJyYXkgPSB0XG5cbiAgdHlwZSAoJ2EsICdiKSBtZXRoX2NhbGxiYWNrID0gdFxuXG4gIGV4dGVybmFsIHN0cmluZyA6IHN0cmluZyAtPiB0ID0gXCJjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgdG9fc3RyaW5nIDogdCAtPiBzdHJpbmcgPSBcImNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXCJcblxuICBleHRlcm5hbCBieXRlc3RyaW5nIDogc3RyaW5nIC0+IHQgPSBcImNhbWxfanNieXRlc19vZl9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIHRvX2J5dGVzdHJpbmcgOiB0IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfanNieXRlc1wiXG5cbiAgZXh0ZXJuYWwgYm9vbCA6IGJvb2wgLT4gdCA9IFwiY2FtbF9qc19mcm9tX2Jvb2xcIlxuXG4gIGV4dGVybmFsIHRvX2Jvb2wgOiB0IC0+IGJvb2wgPSBcImNhbWxfanNfdG9fYm9vbFwiXG5cbiAgZXh0ZXJuYWwgYXJyYXkgOiAnYSBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fYXJyYXlcIlxuXG4gIGV4dGVybmFsIHRvX2FycmF5IDogdCAtPiAnYSBhcnJheSA9IFwiY2FtbF9qc190b19hcnJheVwiXG5cbiAgZXh0ZXJuYWwgbnVtYmVyX29mX2Zsb2F0IDogZmxvYXQgLT4gdCA9IFwiY2FtbF9qc19mcm9tX2Zsb2F0XCJcblxuICBleHRlcm5hbCBmbG9hdF9vZl9udW1iZXIgOiB0IC0+IGZsb2F0ID0gXCJjYW1sX2pzX3RvX2Zsb2F0XCJcblxuICBleHRlcm5hbCBudW1iZXJfb2ZfaW50MzIgOiBpbnQzMiAtPiB0ID0gXCJjYW1sX2pzX2Zyb21faW50MzJcIlxuXG4gIGV4dGVybmFsIGludDMyX29mX251bWJlciA6IHQgLT4gaW50MzIgPSBcImNhbWxfanNfdG9faW50MzJcIlxuXG4gIGV4dGVybmFsIG51bWJlcl9vZl9uYXRpdmVpbnQgOiBuYXRpdmVpbnQgLT4gdCA9IFwiY2FtbF9qc19mcm9tX25hdGl2ZWludFwiXG5cbiAgZXh0ZXJuYWwgbmF0aXZlaW50X29mX251bWJlciA6IHQgLT4gbmF0aXZlaW50ID0gXCJjYW1sX2pzX3RvX25hdGl2ZWludFwiXG5cbiAgZXh0ZXJuYWwgdHlwZW9mIDogdCAtPiB0ID0gXCJjYW1sX2pzX3R5cGVvZlwiXG5cbiAgZXh0ZXJuYWwgaW5zdGFuY2VvZiA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2pzX2luc3RhbmNlb2ZcIlxuXG4gIGV4dGVybmFsIGRlYnVnZ2VyIDogdW5pdCAtPiB1bml0ID0gXCJkZWJ1Z2dlclwiXG5cbiAgZXh0ZXJuYWwgZ2V0IDogdCAtPiB0IC0+IHQgPSBcImNhbWxfanNfZ2V0XCJcblxuICBleHRlcm5hbCBzZXQgOiB0IC0+IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2pzX3NldFwiXG5cbiAgZXh0ZXJuYWwgZGVsZXRlIDogdCAtPiB0IC0+IHVuaXQgPSBcImNhbWxfanNfZGVsZXRlXCJcblxuICBleHRlcm5hbCBjYWxsIDogdCAtPiB0IC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19jYWxsXCJcblxuICBleHRlcm5hbCBmdW5fY2FsbCA6IHQgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX2Z1bl9jYWxsXCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGwgOiB0IC0+IHN0cmluZyAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfbWV0aF9jYWxsXCJcblxuICBleHRlcm5hbCBuZXdfb2JqIDogdCAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfbmV3XCJcblxuICBleHRlcm5hbCBuZXdfb2JqX2FyciA6IHQgLT4gdCBqc19hcnJheSAtPiB0ID0gXCJjYW1sX29qc19uZXdfYXJyXCJcblxuICBleHRlcm5hbCBvYmogOiAoc3RyaW5nICogdCkgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19vYmplY3RcIlxuXG4gIGV4dGVybmFsIGVxdWFscyA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2pzX2VxdWFsc1wiXG5cbiAgZXh0ZXJuYWwgc3RyaWN0X2VxdWFscyA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2pzX3N0cmljdF9lcXVhbHNcIlxuXG4gIGV4dGVybmFsIHB1cmVfZXhwciA6ICh1bml0IC0+ICdhKSAtPiAnYSA9IFwiY2FtbF9qc19wdXJlX2V4cHJcIlxuXG4gIGV4dGVybmFsIGV2YWxfc3RyaW5nIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX2V2YWxfc3RyaW5nXCJcblxuICBleHRlcm5hbCBqc19leHByIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX2V4cHJcIlxuXG4gIGV4dGVybmFsIHB1cmVfanNfZXhwciA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9wdXJlX2pzX2V4cHJcIlxuXG4gIGV4dGVybmFsIGNhbGxiYWNrIDogKCdiIC0+ICdhKSAtPiAoJ2IsICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmVcIlxuXG4gIGV4dGVybmFsIGNhbGxiYWNrX3dpdGhfYXJndW1lbnRzIDpcbiAgICAodCBqc19hcnJheSAtPiAnYikgLT4gKCdjLCB0IGpzX2FycmF5IC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja19hcmd1bWVudHNcIlxuXG4gIGV4dGVybmFsIGNhbGxiYWNrX3dpdGhfYXJpdHkgOiBpbnQgLT4gKCdhIC0+ICdiKSAtPiAoJ2MsICdhIC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja19zdHJpY3RcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbGJhY2sgOiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlXCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrX3dpdGhfYXJpdHkgOiBpbnQgLT4gKCdiIC0+ICdhKSAtPiAoJ2IsICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdFwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFja193aXRoX2FyZ3VtZW50cyA6XG4gICAgKCdiIC0+IHQganNfYXJyYXkgLT4gJ2EpIC0+ICgnYiwgdCBqc19hcnJheSAtPiAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHNcIlxuXG4gIGV4dGVybmFsIHdyYXBfY2FsbGJhY2sgOiAoJ2EgLT4gJ2IpIC0+ICgnYywgJ2EgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrXCJcblxuICBleHRlcm5hbCB3cmFwX21ldGhfY2FsbGJhY2sgOiAoJ2EgLT4gJ2IpIC0+ICgnYSwgJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tcIlxuZW5kXG5cbm1vZHVsZSBTeXMgPSBzdHJ1Y3RcbiAgdHlwZSAnYSBjYWxsYmFjayA9ICdhXG5cbiAgZXh0ZXJuYWwgY3JlYXRlX2ZpbGUgOiBuYW1lOnN0cmluZyAtPiBjb250ZW50OnN0cmluZyAtPiB1bml0ID0gXCJjYW1sX2NyZWF0ZV9maWxlXCJcblxuICBleHRlcm5hbCByZWFkX2ZpbGUgOiBuYW1lOnN0cmluZyAtPiBzdHJpbmcgPSBcImNhbWxfcmVhZF9maWxlX2NvbnRlbnRcIlxuXG4gIGV4dGVybmFsIHNldF9jaGFubmVsX291dHB1dCcgOiBvdXRfY2hhbm5lbCAtPiAoanNfc3RyaW5nOkpzLnQgLT4gdW5pdCkgY2FsbGJhY2sgLT4gdW5pdFxuICAgID0gXCJjYW1sX21sX3NldF9jaGFubmVsX291dHB1dFwiXG5cbiAgZXh0ZXJuYWwgc2V0X2NoYW5uZWxfaW5wdXQnIDogaW5fY2hhbm5lbCAtPiAodW5pdCAtPiBzdHJpbmcpIGNhbGxiYWNrIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGxcIlxuXG4gIGV4dGVybmFsIG1vdW50X3BvaW50IDogdW5pdCAtPiBzdHJpbmcgbGlzdCA9IFwiY2FtbF9saXN0X21vdW50X3BvaW50XCJcblxuICBleHRlcm5hbCBtb3VudF9hdXRvbG9hZCA6IHN0cmluZyAtPiAoc3RyaW5nIC0+IHN0cmluZyAtPiBzdHJpbmcgb3B0aW9uKSBjYWxsYmFjayAtPiB1bml0XG4gICAgPSBcImNhbWxfbW91bnRfYXV0b2xvYWRcIlxuXG4gIGV4dGVybmFsIHVubW91bnQgOiBzdHJpbmcgLT4gdW5pdCA9IFwiY2FtbF91bm1vdW50XCJcblxuICBtb2R1bGUgQ29uZmlnID0gc3RydWN0XG4gICAgZXh0ZXJuYWwgdXNlX2pzX3N0cmluZyA6IHVuaXQgLT4gYm9vbCA9IFwiY2FtbF9qc29vX2ZsYWdzX3VzZV9qc19zdHJpbmdcIlxuXG4gICAgZXh0ZXJuYWwgZWZmZWN0cyA6IHVuaXQgLT4gYm9vbCA9IFwiY2FtbF9qc29vX2ZsYWdzX2VmZmVjdHNcIlxuICBlbmRcblxuICBsZXQgdmVyc2lvbiA9IFJ1bnRpbWVfdmVyc2lvbi5zXG5cbiAgbGV0IGdpdF92ZXJzaW9uID0gUnVudGltZV92ZXJzaW9uLmdpdF92ZXJzaW9uXG5lbmRcblxubW9kdWxlIEVycm9yIDogc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCByYWlzZV8gOiB0IC0+ICdhXG5cbiAgdmFsIGF0dGFjaF9qc19iYWNrdHJhY2UgOiBleG4gLT4gZm9yY2U6Ym9vbCAtPiBleG5cbiAgKCoqIEF0dGFjaCBhIEphdmFzU2NyaXB0IGVycm9yIHRvIGFuIE9DYW1sIGV4Y2VwdGlvbi4gIGlmIFtmb3JjZSA9IGZhbHNlXSBhbmQgYVxuICAgIEphdmFzU2NyaXB0IGVycm9yIGlzIGFscmVhZHkgYXR0YWNoZWQsIGl0IHdpbGwgZG8gbm90aGluZy4gVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgdG9cbiAgICBzdG9yZSBhbmQgcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgSmF2YVNjcmlwdCBzdGFjayB0cmFjZXMuXG5cbiAgICBBdHRhY2hpbmcgSmF2YXNTY3JpcHQgZXJyb3JzIHdpbGwgaGFwcGVuIGF1dG9tYXRpY2FsbHkgd2hlbiBjb21waWxpbmcgd2l0aFxuICAgIFstLWVuYWJsZSB3aXRoLWpzLWVycm9yXS4gKilcblxuICB2YWwgb2ZfZXhuIDogZXhuIC0+IHQgb3B0aW9uXG4gICgqKiBFeHRyYWN0IGEgSmF2YVNjcmlwdCBlcnJvciBhdHRhY2hlZCB0byBhbiBPQ2FtbCBleGNlcHRpb24sIGlmIGFueS4gIFRoaXMgaXMgdXNlZnVsIHRvXG4gICAgICBpbnNwZWN0IGFuIGV2ZW50dWFsIHN0YWNrIHN0cmFjZSwgZXNwZWNpYWxseSB3aGVuIHNvdXJjZW1hcCBpcyBlbmFibGVkLiAqKVxuXG4gIGV4Y2VwdGlvbiBFeG4gb2YgdFxuICAoKiogVGhlIFtFcnJvcl0gZXhjZXB0aW9uIHdyYXAgamF2YXNjcmlwdCBleGNlcHRpb25zIHdoZW4gY2F1Z2h0IGJ5IE9DYW1sIGNvZGUuXG4gICAgICBJbiBjYXNlIHRoZSBqYXZhc2NyaXB0IGV4Y2VwdGlvbiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgamF2YXNjcmlwdCBbRXJyb3JdLFxuICAgICAgaXQgd2lsbCBiZSBzZXJpYWxpemVkIGFuZCB3cmFwcGVkIGludG8gYSBbRmFpbHVyZV0gZXhjZXB0aW9uLlxuICAqKVxuZW5kID0gc3RydWN0XG4gIHR5cGUgdFxuXG4gIGV4Y2VwdGlvbiBFeG4gb2YgdFxuXG4gIGxldCBfID0gQ2FsbGJhY2sucmVnaXN0ZXJfZXhjZXB0aW9uIFwianNFcnJvclwiIChFeG4gKE9iai5tYWdpYyBbfHxdKSlcblxuICBsZXQgcmFpc2VfIDogdCAtPiAnYSA9IEpzLmpzX2V4cHIgXCIoZnVuY3Rpb24gKGV4bikgeyB0aHJvdyBleG4gfSlcIlxuXG4gIGV4dGVybmFsIG9mX2V4biA6IGV4biAtPiB0IG9wdGlvbiA9IFwiY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uXCJcblxuICBleHRlcm5hbCBhdHRhY2hfanNfYmFja3RyYWNlIDogZXhuIC0+IGZvcmNlOmJvb2wgLT4gZXhuID0gXCJjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVwiXG5lbmRcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzItNjBcIl1cblxubW9kdWxlIEZvcl9jb21wYXRpYmlsaXR5X29ubHkgPSBzdHJ1Y3RcbiAgKCogQWRkIHByaW1pdGl2ZXMgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4gRXhpc3RpbmcgdXNlcnMgbWlnaHRcbiAgICAgZGVwZW5kIG9uIGl0IChlLmcuIGdlbl9qc19hcGkpLCB3ZSBkb250IHdhbnQgdGhlIG9jYW1sIGNvbXBpbGVyXG4gICAgIHRvIGNvbXBsYWluIGFib3V0IHRoZXNlcyBtaXNzaW5nIHByaW1pdGl2ZXMuICopXG5cbiAgZXh0ZXJuYWwgY2FtbF9qc19mcm9tX3N0cmluZyA6IHN0cmluZyAtPiBKcy50ID0gXCJjYW1sX2pzX2Zyb21fc3RyaW5nXCJcblxuICBleHRlcm5hbCBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nIDogSnMudCAtPiBzdHJpbmcgPSBcImNhbWxfanNfdG9fYnl0ZV9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfanNfdG9fc3RyaW5nIDogSnMudCAtPiBzdHJpbmcgPSBcImNhbWxfanNfdG9fc3RyaW5nXCJcblxuICBleHRlcm5hbCBjYW1sX2xpc3Rfb2ZfanNfYXJyYXkgOiAnYSBKcy5qc19hcnJheSAtPiAnYSBsaXN0ID0gXCJjYW1sX2xpc3Rfb2ZfanNfYXJyYXlcIlxuXG4gIGV4dGVybmFsIGNhbWxfbGlzdF90b19qc19hcnJheSA6ICdhIGxpc3QgLT4gJ2EgSnMuanNfYXJyYXkgPSBcImNhbWxfbGlzdF90b19qc19hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdmFyaWFibGUgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfdmFyXCJcbmVuZFxuXG5tb2R1bGUgVHlwZWRfYXJyYXkgPSBzdHJ1Y3RcbiAgdHlwZSAoJ2EsICdiKSB0eXBlZEFycmF5ID0gSnMudFxuXG4gIHR5cGUgYXJyYXlCdWZmZXIgPSBKcy50XG5cbiAgdHlwZSB1aW50OEFycmF5ID0gSnMudFxuXG4gIGV4dGVybmFsIGtpbmQgOiAoJ2EsICdiKSB0eXBlZEFycmF5IC0+ICgnYSwgJ2IpIEJpZ2FycmF5LmtpbmRcbiAgICA9IFwiY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5XCJcblxuICBleHRlcm5hbCBmcm9tX2dlbmFycmF5IDpcbiAgICAoJ2EsICdiLCBCaWdhcnJheS5jX2xheW91dCkgQmlnYXJyYXkuR2VuYXJyYXkudCAtPiAoJ2EsICdiKSB0eXBlZEFycmF5XG4gICAgPSBcImNhbWxfYmFfdG9fdHlwZWRfYXJyYXlcIlxuXG4gIGV4dGVybmFsIHRvX2dlbmFycmF5IDpcbiAgICAoJ2EsICdiKSB0eXBlZEFycmF5IC0+ICgnYSwgJ2IsIEJpZ2FycmF5LmNfbGF5b3V0KSBCaWdhcnJheS5HZW5hcnJheS50XG4gICAgPSBcImNhbWxfYmFfZnJvbV90eXBlZF9hcnJheVwiXG5cbiAgbW9kdWxlIEJpZ3N0cmluZyA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IChjaGFyLCBCaWdhcnJheS5pbnQ4X3Vuc2lnbmVkX2VsdCwgQmlnYXJyYXkuY19sYXlvdXQpIEJpZ2FycmF5LkFycmF5MS50XG5cbiAgICBleHRlcm5hbCB0b19hcnJheUJ1ZmZlciA6IHQgLT4gYXJyYXlCdWZmZXIgPSBcImJpZ3N0cmluZ190b19hcnJheV9idWZmZXJcIlxuXG4gICAgZXh0ZXJuYWwgdG9fdWludDhBcnJheSA6IHQgLT4gdWludDhBcnJheSA9IFwiYmlnc3RyaW5nX3RvX3R5cGVkX2FycmF5XCJcblxuICAgIGV4dGVybmFsIG9mX2FycmF5QnVmZmVyIDogYXJyYXlCdWZmZXIgLT4gdCA9IFwiYmlnc3RyaW5nX29mX2FycmF5X2J1ZmZlclwiXG5cbiAgICBleHRlcm5hbCBvZl91aW50OEFycmF5IDogdWludDhBcnJheSAtPiB0ID0gXCJiaWdzdHJpbmdfb2ZfdHlwZWRfYXJyYXlcIlxuICBlbmRcblxuICBleHRlcm5hbCBvZl91aW50OEFycmF5IDogdWludDhBcnJheSAtPiBzdHJpbmcgPSBcImNhbWxfc3RyaW5nX29mX2FycmF5XCJcbmVuZFxuXG5tb2R1bGUgSW50NjQgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgY3JlYXRlX2ludDY0X2xvX21pX2hpIDogaW50IC0+IGludCAtPiBpbnQgLT4gSW50NjQudFxuICAgID0gXCJjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaVwiXG5lbmRcbiIsIm9wZW4hIFN0ZFxub3BlbiEgQnJyZXIuQnJyXG5vcGVuISBCcnJfbHdkXG5tb2R1bGUgQSA9IEF0dHJzXG5cbnR5cGUgJ2EgdmFsaWRhdGlvbiA9IE9rIG9mICdhIHwgRXJyb3Igb2Ygc3RyaW5nIHwgRW1wdHlcblxubW9kdWxlIHR5cGUgUyA9IHNpZ1xuICB0eXBlIHZhbHVlXG4gIHR5cGUgcGFyYW1ldGVyc1xuXG4gIHZhbCByZW5kZXIgOiBwYXJhbWV0ZXJzIC0+IEVsd2QudFxuICB2YWwgZ2V0X3ZhbHVlIDogRWx3ZC50IC0+IHZhbHVlXG5lbmRcblxubW9kdWxlIE1ha2UgKFBhcmFtcyA6IFMpID0gc3RydWN0IGVuZFxuXG4oKiBBIGZvcm0gZmllbGQgaXMgY29tcG9zZWQgb2Y6XG4gICAtIEFuIGh0bWwgaW5wdXQgZWxlbWVudCB3aXRoIHBvdGVudGlhbCB2YWxpZGF0aW9uIHZpYSBhdHRyaWJ1dGVzXG4gICAtIEEgdmFsaWRhdGlvbiBmdW5jdGlvbiB0aGF0IHJlcGxhY2Ugb3IgY29tcGxldGUgdGhlIHN0YW5kYXJkIHZhbGlkYXRpb25cbiAgIC0gQSBmdW5jdGlvbiB0aGF0IHJldGlldmVzIHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCAqKVxudHlwZSAnYSB0ID0ge1xuICBlbHQgOiBFbHdkLnQgTHdkLnQ7XG4gIHZhbHVlIDogJ2Egb3B0aW9uIEx3ZC52YXI7XG4gIHZhbGlkYXRlIDogJ2EgLT4gJ2EgdmFsaWRhdGlvbjtcbn1cblxubGV0IGdldF92YWx1ZSB0ID1cbiAgbGV0IGp2ID0gRWwudG9fanYgdCBpblxuICBKdi5nZXQganYgXCJ2YWx1ZVwiXG5cbmxldCBtYWtlX2hhbmRsZXIgfih2YWx1ZSA6IEp2LnQgLT4gJ2EpIH4odmFsdWVfY2hhbmdlX2V2ZW50IDogXyBFdi50eXBlJylcbiAgICBkZWZhdWx0X3ZhbHVlID1cbiAgbGV0IHZhciA9IEx3ZC52YXIgZGVmYXVsdF92YWx1ZSBpblxuICBsZXQgb25fY2hhbmdlID1cbiAgICBFbHdkLmhhbmRsZXIgdmFsdWVfY2hhbmdlX2V2ZW50IChmdW4gZXYgLT5cbiAgICAgICAgbGV0IHQgPSBFdi50YXJnZXQgZXYgfD4gRXYudGFyZ2V0X3RvX2p2IGluXG4gICAgICAgIGxldCB2ID0gSnYuZ2V0IHQgXCJ2YWx1ZVwiIGluXG4gICAgICAgIEx3ZC5zZXQgdmFyIChTb21lICh2YWx1ZSB2KSkpXG4gIGluXG4gIChvbl9jaGFuZ2UsIHZhcilcblxubGV0IG1ha2VfaW5wdXQgfih2YWx1ZSA6IEp2LnQgLT4gJ2EpID92YWxpZGF0ZSA/ZCA/KGF0ID0gW10pID9ldlxuICAgID8ocmVxdWlyZWQgPSBmYWxzZSkgfnZhbHVlX2NoYW5nZV9ldmVudCA/cGF0dGVybiB+dHlwZScgZGVmYXVsdF92YWx1ZSA9XG4gIGxldCB0eXBlJyA9IEF0LnR5cGUnIChKc3RyLnYgdHlwZScpIGluXG4gIGxldCBhdCA9IGBQIHR5cGUnIDo6IGF0IGluXG4gIGxldCBhdCA9XG4gICAgYXQgfD4gQS5hZGRfYm9vbCBBdC5yZXF1aXJlZCByZXF1aXJlZCB8PiBBLmFkZF9vcHQgQXQuTmFtZS5wYXR0ZXJuIHBhdHRlcm5cbiAgaW5cbiAgbGV0IHZhbGlkYXRlID0gT3B0aW9uLnZhbHVlIHZhbGlkYXRlIH5kZWZhdWx0OihmdW4gdiAtPiBPayB2KSBpblxuICBsZXQgb25fY2hhbmdlLCB2YWx1ZSA9XG4gICAgbWFrZV9oYW5kbGVyIH52YWx1ZSB+dmFsdWVfY2hhbmdlX2V2ZW50IGRlZmF1bHRfdmFsdWVcbiAgaW5cbiAgbGV0IGV2ID0gYFAgb25fY2hhbmdlIDo6IE9wdGlvbi50b19saXN0IGV2IGluXG4gIGxldCBlbHQgPSBFbHdkLmlucHV0ID9kIH5hdCB+ZXYgKCkgaW5cbiAgeyBlbHQ7IHZhbHVlOyB2YWxpZGF0ZSB9XG5cbmxldCB0ZXh0X2lucHV0ID92YWxpZGF0ZSA/ZCA/KGF0ID0gW10pID9ldiA/cmVxdWlyZWQgP3BhdHRlcm4gP3BsYWNlaG9sZGVyXG4gICAgZGVmYXVsdF92YWx1ZSA9XG4gIGxldCBhdCA9XG4gICAgYXRcbiAgICB8PiBBLmFkZF9vcHQgQXQuTmFtZS5wbGFjZWhvbGRlciBwbGFjZWhvbGRlclxuICAgIHw+IEEuYWRkX29wdCBBdC5OYW1lLnZhbHVlIGRlZmF1bHRfdmFsdWVcbiAgaW5cbiAgbGV0IHZhbHVlID0gSnYudG9fc3RyaW5nIGluXG4gIG1ha2VfaW5wdXQgfnZhbHVlID92YWxpZGF0ZSA/ZCB+YXQgP2V2ID9yZXF1aXJlZCA/cGF0dGVyblxuICAgIH52YWx1ZV9jaGFuZ2VfZXZlbnQ6RXYua2V5dXAgfnR5cGUnOlwidGV4dFwiIGRlZmF1bHRfdmFsdWVcblxubGV0IHBhc3N3b3JkX2lucHV0ID92YWxpZGF0ZSA/ZCA/KGF0ID0gW10pID9ldiA/cmVxdWlyZWQgP3BhdHRlcm4gP3BsYWNlaG9sZGVyXG4gICAgX3ZhbHVlID1cbiAgbGV0IGF0ID0gYXQgfD4gQS5hZGRfb3B0IEF0Lk5hbWUucGxhY2Vob2xkZXIgcGxhY2Vob2xkZXIgaW5cbiAgbGV0IHZhbHVlID0gSnYudG9fc3RyaW5nIGluXG4gIG1ha2VfaW5wdXQgfnZhbHVlIH52YWx1ZV9jaGFuZ2VfZXZlbnQ6RXYua2V5dXAgP3ZhbGlkYXRlID9kIH5hdCA/ZXYgP3JlcXVpcmVkXG4gICAgP3BhdHRlcm4gfnR5cGUnOlwicGFzc3dvcmRcIiBOb25lXG5cbmxldCBzdWJtaXQgP2QgPyhhdCA9IFtdKSA/ZXYgdGV4dCA9XG4gIGxldCBhdCA9IEEuYWRkIEF0Lk5hbWUudmFsdWUgdGV4dCBhdCBpblxuICAoKiBUT0RPIHRoaXMgc2hvdWxkIGJlIG1vcmUgcHJlY2lzZS4gU3VibWl0IGlucHV0cyBhcmUgZGlmZmVyZW50LiAqKVxuICBtYWtlX2lucHV0IH52YWx1ZTppZ25vcmUgfnZhbHVlX2NoYW5nZV9ldmVudDpFdi5jaGFuZ2UgP2QgfmF0ID9ldlxuICAgIH50eXBlJzpcInN1Ym1pdFwiIE5vbmVcbiIsInR5cGUgdCA9IEp2LnRcblxuZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+IHQgPSBcIiVpZGVudGl0eVwiXG5cbmxldCB4IHQgPSBKdi5nZXQgdCBcInhcIiB8PiBKdi50b19pbnRcbmxldCB5IHQgPSBKdi5nZXQgdCBcInlcIiB8PiBKdi50b19pbnRcbmxldCB3aWR0aCB0ID0gSnYuZ2V0IHQgXCJ3aWR0aFwiIHw+IEp2LnRvX2ludFxubGV0IGhlaWdodCB0ID0gSnYuZ2V0IHQgXCJoZWlnaHRcIiB8PiBKdi50b19pbnRcbmxldCB0b3AgdCA9IEp2LmdldCB0IFwidG9wXCIgfD4gSnYudG9faW50XG5sZXQgcmlnaHQgdCA9IEp2LmdldCB0IFwicmlnaHRcIiB8PiBKdi50b19pbnRcbmxldCBib3R0b20gdCA9IEp2LmdldCB0IFwiYm90dG9tXCIgfD4gSnYudG9faW50XG5sZXQgbGVmdCB0ID0gSnYuZ2V0IHQgXCJsZWZ0XCIgfD4gSnYudG9faW50XG4iLCJvcGVuIEJyclxuXG50eXBlIHQgPSBKdi50XG5cbmV4dGVybmFsIG9mX2p2IDogSnYudCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuXG5tb2R1bGUgRW50cnkgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gSnYudFxuXG4gIGV4dGVybmFsIG9mX2p2IDogSnYudCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuXG4gIHR5cGUgYm94X3NpemUgPSB7IGJsb2NrX3NpemUgOiBpbnQ7IGlubGluZV9zaXplIDogaW50IH1cblxuICBsZXQgYm94X3NpemVfb2ZfanYganYgPVxuICAgIHtcbiAgICAgIGJsb2NrX3NpemUgPSBKdi5nZXQganYgXCJibG9ja1NpemVcIiB8PiBKdi50b19pbnQ7XG4gICAgICBpbmxpbmVfc2l6ZSA9IEp2LmdldCBqdiBcImlubGluZVNpemVcIiB8PiBKdi50b19pbnQ7XG4gICAgfVxuXG4gIGxldCBib3JkZXJfYm94X3NpemUgdCA9IEp2LmdldCB0IFwiYm9yZGVyQm94U2l6ZVwiIHw+IEp2LnRvX2FycmF5IGJveF9zaXplX29mX2p2XG5cbiAgbGV0IGNvbnRlbnRfYm94X3NpemUgdCA9XG4gICAgSnYuZ2V0IHQgXCJjb250ZW50Qm94U2l6ZVwiIHw+IEp2LnRvX2FycmF5IGJveF9zaXplX29mX2p2XG5cbiAgbGV0IGNvbnRlbnRfcmVjdCB0ID0gSnYuZ2V0IHQgXCJjb250ZW50UmVjdFwiIHw+IERvbV9yZWN0X3JlYWRfb25seS5vZl9qdlxuXG4gIGxldCBkZXZpY2VfcGl4ZWxfY29udGVudF9ib3hfc2l6ZSB0ID1cbiAgICBKdi5nZXQgdCBcImRldmljZVBpeGVsQ29udGVudEJveFNpemVcIiB8PiBKdi50b19hcnJheSBib3hfc2l6ZV9vZl9qdlxuXG4gIGxldCB0YXJnZXQgdCA9IEp2LmdldCB0IFwidGFyZ2V0XCIgfD4gRWwub2ZfanZcbmVuZFxuXG50eXBlIGJveCA9IENvbnRlbnRfYm94IHwgQm9yZGVyX2JveCB8IERldmljZV9waXhlbF9jb250ZW50X2JveFxuXG5sZXQgc3RyaW5nX29mX2JveCA9IGZ1bmN0aW9uXG4gIHwgQ29udGVudF9ib3ggLT4gXCJjb250ZW50LWJveFwiXG4gIHwgQm9yZGVyX2JveCAtPiBcImJvcmRlci1ib3hcIlxuICB8IERldmljZV9waXhlbF9jb250ZW50X2JveCAtPiBcImRldmljZS1waXhlbC1jb250ZW50LWJveFwiXG5cbmxldCBkaXNjb25uZWN0IHQgPSBpZ25vcmUgQEAgSnYuY2FsbCB0IFwiZGlzY29ubmVjdFwiIFt8fF1cblxubGV0IG9ic2VydmUgdCA/Ym94IHRhcmdldCA9XG4gIGxldCBhcmdzID1cbiAgICBsZXQgdGFyZ2V0ID0gRWwudG9fanYgdGFyZ2V0IGluXG4gICAgbWF0Y2ggYm94IHdpdGhcbiAgICB8IE5vbmUgLT4gW3wgdGFyZ2V0IHxdXG4gICAgfCBTb21lIGIgLT5cbiAgICAgICAgbGV0IGJveCA9IEp2Lm9iaiBbfCAoXCJib3hcIiwgSnYub2Zfc3RyaW5nIChzdHJpbmdfb2ZfYm94IGIpKSB8XSBpblxuICAgICAgICBbfCB0YXJnZXQ7IGJveCB8XVxuICBpblxuICBKdi5jYWxsIHQgXCJvYnNlcnZlXCIgYXJncyB8PiBpZ25vcmVcblxubGV0IHVub2JzZXJ2ZSB0IHRhcmdldCA9XG4gIGxldCB0YXJnZXQgPSBFbC50b19qdiB0YXJnZXQgaW5cbiAgaWdub3JlIEBAIEp2LmNhbGwgdCBcImRpc2Nvbm5lY3RcIiBbfCB0YXJnZXQgfF1cblxubGV0IGNyZWF0ZSB+Y2FsbGJhY2sgPVxuICBsZXQgY2FsbGJhY2sgZW50cmllcyBvYnNlcnZlciA9XG4gICAgbGV0IGVudHJpZXMgPSBKdi50b19saXN0IEVudHJ5Lm9mX2p2IGVudHJpZXMgaW5cbiAgICBjYWxsYmFjayBlbnRyaWVzIChvZl9qdiBvYnNlcnZlcilcbiAgaW5cbiAgbGV0IGFyZ3MgPSBbfCBKdi5yZXByIGNhbGxiYWNrIHxdIGluXG4gIEp2Lm5ldycgKEp2LmdldCBKdi5nbG9iYWwgXCJSZXNpemVPYnNlcnZlclwiKSBhcmdzXG4iLCJvcGVuIEJyclxuXG50eXBlIHQgPSBKdi50XG5cbmV4dGVybmFsIG9mX2p2IDogSnYudCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgb2ZfbmF2aWdhdG9yIG4gPSBKdi5nZXQgKE5hdmlnYXRvci50b19qdiBuKSBcIm1lZGlhU2Vzc2lvblwiXG5cbm1vZHVsZSBNZWRpYV9tZXRhZGF0YSA9IHN0cnVjdFxuICB0eXBlIGltZyA9IHsgc3JjIDogc3RyaW5nOyBzaXplcyA6IHN0cmluZzsgdHlwZScgOiBzdHJpbmcgfVxuXG4gIGxldCBpbWdfdG9fanYgaW1nID1cbiAgICBKdi5vYmpcbiAgICAgIFt8XG4gICAgICAgIChcInNyY1wiLCBKdi5vZl9zdHJpbmcgaW1nLnNyYyk7XG4gICAgICAgIChcInNpemVzXCIsIEp2Lm9mX3N0cmluZyBpbWcuc2l6ZXMpO1xuICAgICAgICAoXCJ0eXBlXCIsIEp2Lm9mX3N0cmluZyBpbWcudHlwZScpO1xuICAgICAgfF1cblxuICBsZXQgbWF5YmVfc3RyaW5nIGp2IHByb3AgPVxuICAgIG1hdGNoIEp2LmZpbmQganYgcHJvcCB3aXRoIE5vbmUgLT4gXCJ1bmtub3duXCIgfCBTb21lIGp2IC0+IEp2LnRvX3N0cmluZyBqdlxuXG4gIGxldCBpbWdfb2ZfanYganYgPVxuICAgIGxldCBzcmMgPSBtYXliZV9zdHJpbmcganYgXCJzcmNcIiBpblxuICAgIGxldCBzaXplcyA9IG1heWJlX3N0cmluZyBqdiBcInNpemVzXCIgaW5cbiAgICBsZXQgdHlwZScgPSBtYXliZV9zdHJpbmcganYgXCJ0eXBlXCIgaW5cbiAgICB7IHNyYzsgc2l6ZXM7IHR5cGUnIH1cblxuICB0eXBlIHQgPSB7XG4gICAgdGl0bGUgOiBzdHJpbmc7XG4gICAgYXJ0aXN0IDogc3RyaW5nO1xuICAgIGFsYnVtIDogc3RyaW5nO1xuICAgIGFydHdvcmsgOiBpbWcgbGlzdDtcbiAgfVxuXG4gIGxldCB0b19qdiB0ID1cbiAgICBsZXQgYXJ0d29yayA9IEp2Lm9mX2xpc3QgaW1nX3RvX2p2IHQuYXJ0d29yayBpblxuICAgIEp2Lm9ialxuICAgICAgW3xcbiAgICAgICAgKFwidGl0bGVcIiwgSnYub2Zfc3RyaW5nIHQudGl0bGUpO1xuICAgICAgICAoXCJhcnRpc3RcIiwgSnYub2Zfc3RyaW5nIHQuYXJ0aXN0KTtcbiAgICAgICAgKFwiYWxidW1cIiwgSnYub2Zfc3RyaW5nIHQuYWxidW0pO1xuICAgICAgICAoXCJhcnR3b3JrXCIsIGFydHdvcmspO1xuICAgICAgfF1cblxuICBsZXQgb2ZfanYganYgPVxuICAgIGxldCB0aXRsZSA9IG1heWJlX3N0cmluZyBqdiBcInRpdGxlXCIgaW5cbiAgICBsZXQgYXJ0aXN0ID0gbWF5YmVfc3RyaW5nIGp2IFwiYXJ0aXN0XCIgaW5cbiAgICBsZXQgYWxidW0gPSBtYXliZV9zdHJpbmcganYgXCJhbGJ1bVwiIGluXG4gICAgbGV0IGFydHdvcmsgPVxuICAgICAgbWF0Y2ggSnYuZmluZCBqdiBcImFydHdvcmtcIiB3aXRoXG4gICAgICB8IE5vbmUgLT4gW11cbiAgICAgIHwgU29tZSBqdiAtPiBKdi50b19saXN0IGltZ19vZl9qdiBqdlxuICAgIGluXG4gICAgeyB0aXRsZTsgYXJ0aXN0OyBhbGJ1bTsgYXJ0d29yayB9XG5lbmRcblxubGV0IG1ldGFkYXRhIHQgPSBKdi5nZXQgdCBcIm1ldGFkYXRhXCIgfD4gSnYudG9fb3B0aW9uIE1lZGlhX21ldGFkYXRhLm9mX2p2XG5cbmxldCBzZXRfbWV0YWRhdGEgdCB2ID1cbiAgQ29uc29sZS5sb2cgWyBcIlNldCBtZXRhZGF0YVwiOyBNZWRpYV9tZXRhZGF0YS50b19qdiB2IF07XG4gIGxldCBtZXRhZGF0YSA9XG4gICAgSnYubmV3JyAoSnYuZ2V0IEp2Lmdsb2JhbCBcIk1lZGlhTWV0YWRhdGFcIikgW3wgTWVkaWFfbWV0YWRhdGEudG9fanYgdiB8XVxuICBpblxuICBKdi5zZXQgdCBcIm1ldGFkYXRhXCIgbWV0YWRhdGFcblxubW9kdWxlIEFjdGlvbiA9IHN0cnVjdFxuICB0eXBlIHQgPSBKc3RyLnRcblxuICBsZXQgbmV4dF90cmFjayA9IEpzdHIudiBcIm5leHR0cmFja1wiXG4gIGxldCBwcmV2aW91c190cmFjayA9IEpzdHIudiBcInByZXZpb3VzdHJhY2tcIlxuZW5kXG5cbmxldCBzZXRfYWN0aW9uX2hhbmRsZXIgdCBhY3Rpb24gZiA9XG4gIGxldCBjYWxsYmFjayA9IEp2LmNhbGxiYWNrIH5hcml0eToxIGYgaW5cbiAgSnYuY2FsbCB0IFwic2V0QWN0aW9uSGFuZGxlclwiIFt8IEp2Lm9mX2pzdHIgYWN0aW9uOyBjYWxsYmFjayB8XSB8PiBpZ25vcmVcblxubGV0IHNldF9wb3NpdGlvbl9zdGF0ZSA/ZHVyYXRpb24gP3BsYXliYWNrX3JhdGUgP3Bvc2l0aW9uIHQgPVxuICBsZXQgbWF5YmVfZmxvYXQgbmFtZSB2ID0gT3B0aW9uLm1hcCAoZnVuIHYgLT4gKG5hbWUsIEp2Lm9mX2Zsb2F0IHYpKSB2IGluXG4gIGxldCBkdXJhdGlvbiA9IG1heWJlX2Zsb2F0IFwiZHVyYXRpb25cIiBkdXJhdGlvbiBpblxuICBsZXQgcGxheWJhY2tfcmF0ZSA9IG1heWJlX2Zsb2F0IFwicGxheWJhY2tSYXRlXCIgcGxheWJhY2tfcmF0ZSBpblxuICBsZXQgcG9zaXRpb24gPSBtYXliZV9mbG9hdCBcInBvc2l0aW9uXCIgcG9zaXRpb24gaW5cbiAgbGV0IGFyZ3MgPVxuICAgIGxldCBzdGF0ZV9kaWN0ID1cbiAgICAgIExpc3QuZmlsdGVyX21hcCBGdW4uaWQgWyBkdXJhdGlvbjsgcGxheWJhY2tfcmF0ZTsgcG9zaXRpb24gXVxuICAgIGluXG4gICAgbWF0Y2ggc3RhdGVfZGljdCB3aXRoIFtdIC0+IFt8fF0gfCBzZCAtPiBbfCBKdi5vYmogKEFycmF5Lm9mX2xpc3Qgc2QpIHxdXG4gIGluXG4gIENvbnNvbGUubG9nIFsgYXJncyBdO1xuICBKdi5jYWxsIHQgXCJzZXRQb3NpdGlvblN0YXRlXCIgYXJncyB8PiBpZ25vcmVcbiIsIm9wZW4gQnJyXG5cbm1vZHVsZSBLZXlfcGF0aCA9IHN0cnVjdFxuICB0eXBlIHQgPSBJZCBvZiBzdHJpbmcgfCBTIG9mIHQgYXJyYXlcblxuICBsZXQgcmVjIHRvX2p2ID0gZnVuY3Rpb25cbiAgICB8IElkIHAgLT4gSnYub2Zfc3RyaW5nIHBcbiAgICB8IFMga2V5cyAtPiBKdi5vZl9hcnJheSB0b19qdiBrZXlzXG5lbmRcblxubW9kdWxlIEtleV9yYW5nZSA9IHN0cnVjdFxuICB0eXBlIHQgPSBKdi50XG5cbiAgZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+ICdhID0gXCIlaWRlbnRpdHlcIlxuXG4gIGxldCBib3VuZCB+bG93ZXIgfnVwcGVyID8obG93ZXJfb3BlbiA9IGZhbHNlKSA/KHVwcGVyX29wZW4gPSBmYWxzZSkgKCkgPVxuICAgIGxldCBjID0gSnYuZ2V0IEp2Lmdsb2JhbCBcIklEQktleVJhbmdlXCIgaW5cbiAgICBKdi5jYWxsIGMgXCJib3VuZFwiXG4gICAgICBbfCBsb3dlcjsgdXBwZXI7IEp2Lm9mX2Jvb2wgbG93ZXJfb3BlbjsgSnYub2ZfYm9vbCB1cHBlcl9vcGVuIHxdXG5lbmRcblxubW9kdWxlIEV2ZW50cyA9IHN0cnVjdFxuICBtb2R1bGUgVmVyc2lvbl9jaGFuZ2UgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBKdi50XG5cbiAgICBsZXQgb2xkX3ZlcnNpb24gdCA9IEp2LnRvX2ludCBAQCBKdi5nZXQgdCBcIm9sZFZlcnNpb25cIlxuICAgIGxldCBuZXdfdmVyc2lvbiB0ID0gSnYudG9faW50IEBAIEp2LmdldCB0IFwibmV3VmVyc2lvblwiXG4gIGVuZFxuXG4gIGxldCB1cGdyYWRlX25lZWRlZCA6IFZlcnNpb25fY2hhbmdlLnQgRXYudHlwZScgPVxuICAgIEV2LlR5cGUuY3JlYXRlIChKc3RyLnYgXCJ1cGdyYWRlbmVlZGVkXCIpXG5cbiAgbGV0IHN1Y2Nlc3MgOiBFdi5UeXBlLnZvaWQgRXYudHlwZScgPSBFdi5UeXBlLnZvaWQgKEpzdHIudiBcInN1Y2Nlc3NcIilcbiAgbGV0IGVycm9yIDogRXYuVHlwZS52b2lkIEV2LnR5cGUnID0gRXYuVHlwZS52b2lkIChKc3RyLnYgXCJlcnJvclwiKVxuZW5kXG5cbm1vZHVsZSBSZXF1ZXN0ID0gc3RydWN0XG4gIHR5cGUgJ2EgdCA9IHsganYgOiBKdi50OyBvZl9qdiA6IEp2LnQgLT4gJ2EgfVxuXG4gIGV4dGVybmFsIG9mX2p2IDogSnYudCAtPiAnYSA9IFwiJWlkZW50aXR5XCJcblxuICBsZXQgb2ZfanYgfmYgaiA9IHsganYgPSBvZl9qdiBqOyBvZl9qdiA9IGYgfVxuICBsZXQgZXJyb3IgdCA9IEp2LmdldCB0Lmp2IFwiZXJyb3JcIiB8PiBKdi50b19lcnJvclxuXG4gIGxldCByZXN1bHQgKHR5cGUgYSkgKHQgOiBhIHQpIDogYSA9XG4gICAgKCogdG9kbyB0aGlzIGlzIHdyb25nICopXG4gICAgSnYuZ2V0IHQuanYgXCJyZXN1bHRcIiB8PiB0Lm9mX2p2XG5cbiAgbGV0IG9uX3N1Y2Nlc3MgKHR5cGUgYSkgfihmIDogRXYuVHlwZS52b2lkIEV2LnQgLT4gYSB0IC0+IHVuaXQpICh0IDogYSB0KSA9XG4gICAgbGV0IGYgZXYgPSBmIGV2IHQgaW5cbiAgICBpZ25vcmUgQEAgRXYubGlzdGVuIEV2ZW50cy5zdWNjZXNzIGYgKEV2LnRhcmdldF9vZl9qdiB0Lmp2KTtcbiAgICB0XG5cbiAgbGV0IG9uX2Vycm9yICh0eXBlIGEpIH4oZiA6IEV2LlR5cGUudm9pZCBFdi50IC0+IGEgdCAtPiB1bml0KSAodCA6IGEgdCkgPVxuICAgIGxldCBmIGV2ID0gZiBldiB0IGluXG4gICAgaWdub3JlIEBAIEV2Lmxpc3RlbiBFdmVudHMuZXJyb3IgZiAoRXYudGFyZ2V0X29mX2p2IHQuanYpO1xuICAgIHRcblxuICBsZXQgZnV0IHQgPVxuICAgIGxldCByZXN1bHRfZnV0LCBzZXQgPSBGdXQuY3JlYXRlICgpIGluXG4gICAgbGV0IF8gPSBvbl9zdWNjZXNzIH5mOihmdW4gXyB0IC0+IHNldCAoT2sgKHJlc3VsdCB0KSkpIHQgaW5cbiAgICBsZXQgXyA9IG9uX2Vycm9yIH5mOihmdW4gXyB0IC0+IHNldCAoRXJyb3IgKGVycm9yIHQpKSkgdCBpblxuICAgIHJlc3VsdF9mdXRcbmVuZFxuXG5tb2R1bGUgdHlwZSBLZXkgPSBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIHBhdGggOiBLZXlfcGF0aC50XG4gIHZhbCB0b19qdiA6IHQgLT4gSnYudFxuICB2YWwgb2ZfanYgOiBKdi50IC0+IHRcbmVuZFxuXG5tb2R1bGUgdHlwZSBTdG9yZV9jb250ZW50X2ludGYgPSBzaWdcbiAgdHlwZSB0XG5cbiAgbW9kdWxlIEtleSA6IEtleVxuXG4gIHZhbCBuYW1lIDogc3RyaW5nXG4gIHZhbCB0b19qdiA6IHQgLT4gSnYudFxuICB2YWwgb2ZfanYgOiBKdi50IC0+IHRcbiAgdmFsIGdldF9rZXkgOiB0IC0+IEtleS50XG5lbmRcblxubW9kdWxlIERpcmVjdGlvbiA9IHN0cnVjdFxuICB0eXBlIHQgPSBOZXh0IHwgTmV4dF91bmlxdWUgfCBQcmV2IHwgUHJldl91bmlxdWVcblxuICBsZXQgdG9fc3RyaW5nID0gZnVuY3Rpb25cbiAgICB8IE5leHQgLT4gXCJuZXh0XCJcbiAgICB8IE5leHRfdW5pcXVlIC0+IFwibmV4dFVuaXF1ZVwiXG4gICAgfCBQcmV2IC0+IFwicHJldlwiXG4gICAgfCBQcmV2X3VuaXF1ZSAtPiBcInByZXZVbmlxdWVcIlxuXG4gIGxldCBvZl9zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgXCJuZXh0XCIgLT4gTmV4dFxuICAgIHwgXCJuZXh0VW5pcXVlXCIgLT4gTmV4dF91bmlxdWVcbiAgICB8IFwicHJldlwiIC0+IFByZXZcbiAgICB8IFwicHJldlVuaXF1ZVwiIC0+IFByZXZfdW5pcXVlXG4gICAgfCBzIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IHMpXG5cbiAgbGV0IHRvX2p2IGQgPSBKdi5vZl9zdHJpbmcgKHRvX3N0cmluZyBkKVxuICBsZXQgb2ZfanYgaiA9IG9mX3N0cmluZyAoSnYudG9fc3RyaW5nIGopXG5lbmRcblxubW9kdWxlIENvbnRlbnRfYWNjZXNzIChDb250ZW50IDogU3RvcmVfY29udGVudF9pbnRmKSAoS2V5IDogS2V5KSA9IHN0cnVjdFxuICB0eXBlIHQgPSBKdi50XG5cbiAgZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+IHQgPSBcIiVpZGVudGl0eVwiXG5cbiAgbGV0IGNvdW50ICgpIHQgPSBKdi5jYWxsIHQgXCJjb3VudFwiIFt8fF0gfD4gUmVxdWVzdC5vZl9qdiB+ZjpKdi50b19pbnRcblxuICBsZXQgZ2V0IGtleSB0ID1cbiAgICBsZXQgZiBqdiA9IEp2LnRvX29wdGlvbiAoZnVuIGogLT4gQ29udGVudC5vZl9qdiBqKSBqdiBpblxuICAgIEp2LmNhbGwgdCBcImdldFwiIFt8IEtleS50b19qdiBrZXkgfF0gfD4gUmVxdWVzdC5vZl9qdiB+ZlxuXG4gIGxldCBnZXRfYWxsIHQgPVxuICAgIGxldCBmIGp2ID0gSnYudG9fYXJyYXkgKGZ1biBjIC0+IENvbnRlbnQub2ZfanYgYykganYgaW5cbiAgICBKdi5jYWxsIHQgXCJnZXRBbGxcIiBbfHxdIHw+IFJlcXVlc3Qub2ZfanYgfmZcblxuICBsZXQgZ2V0X2FsbF9rZXlzID9xdWVyeSB0ID1cbiAgICBsZXQgYXJncyA9IG1hdGNoIHF1ZXJ5IHdpdGggTm9uZSAtPiBbfHxdIHwgU29tZSBxdWVyeSAtPiBbfCBxdWVyeSB8XSBpblxuICAgIGxldCBmIGp2ID0gSnYudG9fYXJyYXkgKGZ1biBjIC0+IENvbnRlbnQuS2V5Lm9mX2p2IGMpIGp2IGluXG4gICAgSnYuY2FsbCB0IFwiZ2V0QWxsS2V5c1wiIGFyZ3MgfD4gUmVxdWVzdC5vZl9qdiB+ZlxuXG4gIG1vZHVsZSBDdXJzb3IgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBKdi50XG5cbiAgICBleHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxuICAgIGxldCBrZXkgdCA9IEp2LmdldCB0IFwia2V5XCIgfD4gSnYudG9fb3B0aW9uIEtleS5vZl9qdlxuICAgIGxldCBwcmltYXJ5X2tleSB0ID0gSnYuZ2V0IHQgXCJwcmltYXJ5S2V5XCIgfD4gSnYudG9fb3B0aW9uIENvbnRlbnQuS2V5Lm9mX2p2XG5cbiAgICBsZXQgYWR2YW5jZSBjb3VudCB0ID1cbiAgICAgIGlnbm9yZSBAQCBKdi5jYWxsIHQgXCJhZHZhbmNlXCIgW3wgSnYub2ZfaW50IGNvdW50IHxdO1xuICAgICAgdFxuXG4gICAgbGV0IGNvbnRpbnVlID9rZXkgdCA9XG4gICAgICBsZXQgYXJncyA9XG4gICAgICAgIG1hdGNoIGtleSB3aXRoIE5vbmUgLT4gW3x8XSB8IFNvbWUga2V5IC0+IFt8IENvbnRlbnQuS2V5LnRvX2p2IGtleSB8XVxuICAgICAgaW5cbiAgICAgIGlnbm9yZSBAQCBKdi5jYWxsIHQgXCJjb250aW51ZVwiIGFyZ3NcbiAgZW5kXG5cbiAgbW9kdWxlIEN1cnNvcl93aXRoX3ZhbHVlID0gc3RydWN0XG4gICAgaW5jbHVkZSBDdXJzb3JcblxuICAgIGxldCB2YWx1ZSB0ID1cbiAgICAgIGxldCBvZl9qdiBqID0gQ29udGVudC5vZl9qdiBqIGluXG4gICAgICBsZXQgdiA9IEp2LmdldCB0IFwidmFsdWVcIiBpblxuICAgICAgSnYudG9fb3B0aW9uIG9mX2p2IHZcblxuICAgIGxldCBkZWxldGUgdCA9IEp2LmNhbGwgdCBcImRlbGV0ZVwiIFt8fF0gfD4gUmVxdWVzdC5vZl9qdiB+ZjooZnVuIF8gLT4gKCkpXG5cbiAgICBsZXQgdXBkYXRlIHYgdCA9XG4gICAgICBKdi5jYWxsIHQgXCJ1cGRhdGVcIiBbfCBDb250ZW50LnRvX2p2IHYgfF1cbiAgICAgIHw+IFJlcXVlc3Qub2ZfanYgfmY6Q29udGVudC5LZXkub2ZfanZcbiAgZW5kXG5cbiAgbGV0IG9wZW5fY3Vyc29yID9xdWVyeSA/ZGlyZWN0aW9uIHQgOiBDdXJzb3Jfd2l0aF92YWx1ZS50IG9wdGlvbiBSZXF1ZXN0LnQgPVxuICAgIGxldCBkaXJlY3Rpb24gPSBPcHRpb24ubWFwIERpcmVjdGlvbi50b19qdiBkaXJlY3Rpb24gaW5cbiAgICBsZXQgYXJncyA9XG4gICAgICAoKiB0b2RvOiBxdWVyeSAhKilcbiAgICAgIG1hdGNoIChxdWVyeSwgZGlyZWN0aW9uKSB3aXRoXG4gICAgICB8IFNvbWUgcSwgU29tZSBkIC0+IFt8IHE7IGQgfF1cbiAgICAgIHwgTm9uZSwgU29tZSBkIC0+IFt8IEp2Lm51bGw7IGQgfF1cbiAgICAgIHwgU29tZSBxLCBOb25lIC0+IFt8IHEgfF1cbiAgICAgIHwgTm9uZSwgTm9uZSAtPiBbfHxdXG4gICAgaW5cbiAgICBsZXQgZiBqdiA9IEp2LnRvX29wdGlvbiBDdXJzb3Jfd2l0aF92YWx1ZS5vZl9qdiBqdiBpblxuICAgIEp2LmNhbGwgdCBcIm9wZW5DdXJzb3JcIiBhcmdzIHw+IFJlcXVlc3Qub2ZfanYgfmZcblxuICBsZXQgb3Blbl9rZXlfY3Vyc29yID9xdWVyeSA/ZGlyZWN0aW9uIHQgOiBDdXJzb3Jfd2l0aF92YWx1ZS50IG9wdGlvbiBSZXF1ZXN0LnRcbiAgICAgID1cbiAgICBsZXQgZGlyZWN0aW9uID0gT3B0aW9uLm1hcCBEaXJlY3Rpb24udG9fanYgZGlyZWN0aW9uIGluXG4gICAgbGV0IGFyZ3MgPVxuICAgICAgKCogdG9kbzogcXVlcnkgISopXG4gICAgICBtYXRjaCAocXVlcnksIGRpcmVjdGlvbikgd2l0aFxuICAgICAgfCBTb21lIHEsIFNvbWUgZCAtPiBbfCBxOyBkIHxdXG4gICAgICB8IE5vbmUsIFNvbWUgZCAtPiBbfCBKdi5udWxsOyBkIHxdXG4gICAgICB8IFNvbWUgcSwgTm9uZSAtPiBbfCBxIHxdXG4gICAgICB8IE5vbmUsIE5vbmUgLT4gW3x8XVxuICAgIGluXG4gICAgbGV0IGYganYgPSBKdi50b19vcHRpb24gQ3Vyc29yLm9mX2p2IGp2IGluXG4gICAgSnYuY2FsbCB0IFwib3BlbktleUN1cnNvclwiIGFyZ3MgfD4gUmVxdWVzdC5vZl9qdiB+ZlxuXG4gICgqIFtmb2xkX2tleV0gd2lsbCBmb2xkIG92ZXIgYWxsIGtleXMgcmV0dXJuZWQgYnkgdGhlIGdpdmVuIGN1cnNvci5cbiAgICAgTm90ZSB0aGF0IGl0IGlzIGxlc3MgZWZmaWNpZW50IHRoYW4gW2dldF9hbGxfa2V5c10gdG8gYnVpbGQgYW4gYXJyYXlcbiAgICAgb2YgZXZlcnkga2V5cy4gSXQncyBtb3N0IHByb2JhYmx5IGR1ZSB0byBhIGNhY2hpbmctYmFzZWQgb3B0aW1pemF0aW9uXG4gICAgIG9mIHRoZSBbZ2V0X2FsbF9rZXlzXSByZXN1bHRzIChhdCBsZWFzdCBpbiBGaXJlZm94KS4gKilcbiAgbGV0IGZvbGRfa2V5cyB+aW5pdCB+ZiBjdXJzb3JfcmVxID1cbiAgICBsZXQgcmVzdWx0LCBzZXRfcmVzdWx0ID0gRnV0LmNyZWF0ZSAoKSBpblxuICAgIGxldCBhY2MgPSByZWYgaW5pdCBpblxuICAgIGxldCBfID1cbiAgICAgIFJlcXVlc3Qub25fc3VjY2VzcyBjdXJzb3JfcmVxIH5mOihmdW4gX2V2IHIgLT5cbiAgICAgICAgICBtYXRjaCBSZXF1ZXN0LnJlc3VsdCByIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gc2V0X3Jlc3VsdCAoT2sgIWFjYylcbiAgICAgICAgICB8IFNvbWUgY3Vyc29yIC0+XG4gICAgICAgICAgICAgICgqIFRoZSBjdXJzb3Igc2hvdWxkIG5vdCBiZSBvdXQgb2YgcmFuZ2UgYXQgdGhhdCBwb2ludCBzbyB0aGUga2V5c1xuICAgICAgICAgICAgICAgICBzaG91bGQgaGF2ZSBhIHZhbHVlLiAqKVxuICAgICAgICAgICAgICBsZXQga2V5ID0gQ3Vyc29yLmtleSBjdXJzb3IgfD4gT3B0aW9uLmdldCBpblxuICAgICAgICAgICAgICBsZXQgcHJpbWFyeV9rZXkgPSBDdXJzb3IucHJpbWFyeV9rZXkgY3Vyc29yIHw+IE9wdGlvbi5nZXQgaW5cbiAgICAgICAgICAgICAgYWNjIDo9IGYgIWFjYyBrZXkgcHJpbWFyeV9rZXk7XG4gICAgICAgICAgICAgIEN1cnNvci5jb250aW51ZSBjdXJzb3IpXG4gICAgICB8PiBSZXF1ZXN0Lm9uX2Vycm9yIH5mOihmdW4gX2V2IHJlcSAtPlxuICAgICAgICAgICAgIHNldF9yZXN1bHQgKEVycm9yIChSZXF1ZXN0LmVycm9yIHJlcSkpKVxuICAgIGluXG4gICAgcmVzdWx0XG5lbmRcblxubW9kdWxlIHR5cGUgU3RvcmUgPSBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIG9mX2p2IDogSnYudCAtPiB0XG5cbiAgbW9kdWxlIENvbnRlbnQgOiBTdG9yZV9jb250ZW50X2ludGZcbmVuZFxuXG5tb2R1bGUgdHlwZSBJbmRleCA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgb2ZfanYgOiBKdi50IC0+IHRcbiAgdmFsIG5hbWUgOiBzdHJpbmdcblxuICBtb2R1bGUgS2V5IDogS2V5XG5lbmRcblxubW9kdWxlIE1ha2VfaW5kZXhcbiAgICAoUCA6IHNpZ1xuICAgICAgdmFsIG5hbWUgOiBzdHJpbmdcbiAgICBlbmQpXG4gICAgKEMgOiBTdG9yZV9jb250ZW50X2ludGYpXG4gICAgKEsgOiBLZXkpID1cbnN0cnVjdFxuICBtb2R1bGUgQ29udGVudCA9IENcbiAgbW9kdWxlIEtleSA9IEtcbiAgaW5jbHVkZSBDb250ZW50X2FjY2VzcyAoQ29udGVudCkgKEspXG4gIGluY2x1ZGUgUFxuZW5kXG5cbm1vZHVsZSBNYWtlX29iamVjdF9zdG9yZSAoQyA6IFN0b3JlX2NvbnRlbnRfaW50ZikgPSBzdHJ1Y3RcbiAgbW9kdWxlIENvbnRlbnQgPSBDXG4gIGluY2x1ZGUgQ29udGVudF9hY2Nlc3MgKENvbnRlbnQpIChDb250ZW50LktleSlcblxuICBsZXQgYWRkIHYgPyhrZXkgOiBDb250ZW50LktleS50IG9wdGlvbikgdCA6IENvbnRlbnQuS2V5LnQgUmVxdWVzdC50ID1cbiAgICBsZXQgYXJncyA9XG4gICAgICBtYXRjaCBrZXkgd2l0aFxuICAgICAgfCBTb21lIGtleSAtPiBbfCBDb250ZW50LnRvX2p2IHY7IENvbnRlbnQuS2V5LnRvX2p2IGtleSB8XVxuICAgICAgfCBOb25lIC0+IFt8IENvbnRlbnQudG9fanYgdiB8XVxuICAgIGluXG4gICAgSnYuY2FsbCB0IFwiYWRkXCIgYXJncyB8PiBSZXF1ZXN0Lm9mX2p2IH5mOkNvbnRlbnQuS2V5Lm9mX2p2XG5cbiAgbGV0IGNyZWF0ZV9pbmRleCAodHlwZSB0JykgKG1vZHVsZSBJIDogSW5kZXggd2l0aCB0eXBlIHQgPSB0JykgdCA6IHQnID1cbiAgICBsZXQga2V5X3BhdGggPSBLZXlfcGF0aC50b19qdiBJLktleS5wYXRoIGluXG4gICAgSnYuY2FsbCB0IFwiY3JlYXRlSW5kZXhcIiBbfCBKdi5vZl9zdHJpbmcgSS5uYW1lOyBrZXlfcGF0aCB8XSB8PiBJLm9mX2p2XG5cbiAgbGV0IGluZGV4ICh0eXBlIHQnKSAobW9kdWxlIEkgOiBJbmRleCB3aXRoIHR5cGUgdCA9IHQnKSB0IDogdCcgPVxuICAgIEp2LmNhbGwgdCBcImluZGV4XCIgW3wgSnYub2Zfc3RyaW5nIEkubmFtZSB8XSB8PiBJLm9mX2p2XG5cbiAgbGV0IHB1dCB2ID8oa2V5IDogQ29udGVudC5LZXkudCBvcHRpb24pIHQgOiBDb250ZW50LktleS50IFJlcXVlc3QudCA9XG4gICAgbGV0IGFyZ3MgPVxuICAgICAgbWF0Y2gga2V5IHdpdGhcbiAgICAgIHwgU29tZSBrZXkgLT4gW3wgQ29udGVudC50b19qdiB2OyBDb250ZW50LktleS50b19qdiBrZXkgfF1cbiAgICAgIHwgTm9uZSAtPiBbfCBDb250ZW50LnRvX2p2IHYgfF1cbiAgICBpblxuICAgIEp2LmNhbGwgdCBcInB1dFwiIGFyZ3MgfD4gUmVxdWVzdC5vZl9qdiB+ZjpDb250ZW50LktleS5vZl9qdlxuZW5kXG5cbm1vZHVsZSBUcmFuc2FjdGlvbiA9IHN0cnVjdFxuICB0eXBlIHQgPSBKdi50XG5cbiAgZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+IHQgPSBcIiVpZGVudGl0eVwiXG5cbiAgdHlwZSBtb2RlID0gUmVhZG9ubHkgfCBSZWFkd3JpdGUgfCBSZWFkd3JpdGVmbHVzaFxuXG4gIGxldCBzdHJpbmdfb2ZfbW9kZSA9IGZ1bmN0aW9uXG4gICAgfCBSZWFkb25seSAtPiBcInJlYWRvbmx5XCJcbiAgICB8IFJlYWR3cml0ZSAtPiBcInJlYWR3cml0ZVwiXG4gICAgfCBSZWFkd3JpdGVmbHVzaCAtPiBcInJlYWR3cml0ZWZsdXNoXCJcblxuICBsZXQgbW9kZV9vZl9zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgXCJyZWFkb25seVwiIC0+IFJlYWRvbmx5XG4gICAgfCBcInJlYWR3cml0ZVwiIC0+IFJlYWR3cml0ZVxuICAgIHwgXCJyZWFkd3JpdGVmbHVzaFwiIC0+IFJlYWR3cml0ZWZsdXNoXG4gICAgfCBzIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IHMpXG5cbiAgbGV0IG9iamVjdF9zdG9yZSAodHlwZSB0JykgKG1vZHVsZSBTIDogU3RvcmUgd2l0aCB0eXBlIHQgPSB0JykgdCA6IHQnID1cbiAgICBKdi5jYWxsIHQgXCJvYmplY3RTdG9yZVwiIFt8IEp2Lm9mX3N0cmluZyBTLkNvbnRlbnQubmFtZSB8XSB8PiBTLm9mX2p2XG5lbmRcblxubW9kdWxlIERhdGFiYXNlID0gc3RydWN0XG4gIHR5cGUgdCA9IEp2LnRcblxuICBleHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxuICBsZXQgY3JlYXRlX29iamVjdF9zdG9yZSAodHlwZSB0JykgKG1vZHVsZSBTIDogU3RvcmUgd2l0aCB0eXBlIHQgPSB0JylcbiAgICAgID8oYXV0b19pbmNyZW1lbnQgPSBmYWxzZSkgKGRiIDogdCkgOiB0JyA9XG4gICAgbGV0IG9wdHMgPSBbIChcImF1dG9JbmNyZW1lbnRcIiwgSnYub2ZfYm9vbCBhdXRvX2luY3JlbWVudCkgXSBpblxuICAgICgqIFRPRE86IG1vdmUgYXV0b2luY3JlbWVudCB0byBzdG9yZV9jb250ZW50ICopXG4gICAgbGV0IGtleV9wYXRoID0gS2V5X3BhdGgudG9fanYgUy5Db250ZW50LktleS5wYXRoIGluXG4gICAgbGV0IG9wdHMgPSAoXCJrZXlQYXRoXCIsIGtleV9wYXRoKSA6OiBvcHRzIGluXG4gICAgbGV0IG9wdGlvbnMgPSBKdi5vYmogQEAgQXJyYXkub2ZfbGlzdCBvcHRzIGluXG4gICAgQ29uc29sZS5pbmZvIFsgXCJuZXcgb2JqZWN0IHN0b3JlIHdpdGggb3B0aW9uczpcIjsgb3B0aW9ucyBdO1xuICAgICgqIFRPRE86IGtleXBhdGggc2hvdWxkIGJlIG9wdGlvbm5hbCAqKVxuICAgIEp2LmNhbGwgZGIgXCJjcmVhdGVPYmplY3RTdG9yZVwiIFt8IEp2Lm9mX3N0cmluZyBTLkNvbnRlbnQubmFtZTsgb3B0aW9ucyB8XVxuICAgIHw+IFMub2ZfanZcblxuICBsZXQgdHJhbnNhY3Rpb24gc3RvcmVzID8obW9kZSA9IFRyYW5zYWN0aW9uLlJlYWRvbmx5KSB0ID1cbiAgICBsZXQgbW9kZSA9IFRyYW5zYWN0aW9uLnN0cmluZ19vZl9tb2RlIG1vZGUgfD4gSnYub2Zfc3RyaW5nIGluXG4gICAgbGV0IGp2X29mX3N0b3JlIChtb2R1bGUgUyA6IFN0b3JlKSA9IEp2Lm9mX3N0cmluZyBTLkNvbnRlbnQubmFtZSBpblxuICAgIEp2LmNhbGwgdCBcInRyYW5zYWN0aW9uXCIgW3wgSnYub2ZfbGlzdCBqdl9vZl9zdG9yZSBzdG9yZXM7IG1vZGUgfF1cbiAgICB8PiBUcmFuc2FjdGlvbi5vZl9qdlxuZW5kXG5cbm1vZHVsZSBPcGVuX2RiX3JlcXVlc3QgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gRGF0YWJhc2UudCBSZXF1ZXN0LnRcblxuICBsZXQgb25fdXBncmFkZV9uZWVkZWQgfihmIDogRXZlbnRzLlZlcnNpb25fY2hhbmdlLnQgRXYudCAtPiB0IC0+IHVuaXQpICh0IDogdClcbiAgICAgIDogdCA9XG4gICAgbGV0IGYgZXYgPVxuICAgICAgbGV0IHJlcSA6IHQgPVxuICAgICAgICBFdi5jdXJyZW50X3RhcmdldCBldiB8PiBFdi50YXJnZXRfdG9fanZcbiAgICAgICAgfD4gUmVxdWVzdC5vZl9qdiB+ZjpEYXRhYmFzZS5vZl9qdlxuICAgICAgaW5cbiAgICAgIGYgZXYgcmVxXG4gICAgaW5cbiAgICBpZ25vcmUgQEAgRXYubGlzdGVuIEV2ZW50cy51cGdyYWRlX25lZWRlZCBmIChFdi50YXJnZXRfb2ZfanYgdC5qdik7XG4gICAgdFxuXG4gIGV4dGVybmFsIGFzX3JlcXVlc3QgOiB0IC0+IERhdGFiYXNlLnQgUmVxdWVzdC50ID0gXCIlaWRlbnRpdHlcIlxuZW5kXG5cbm1vZHVsZSBGYWN0b3J5ID0gc3RydWN0XG4gIHR5cGUgdCA9IEp2LnRcblxuICBsZXQgb3Blbicgfm5hbWUgP3ZlcnNpb24gdCA6IE9wZW5fZGJfcmVxdWVzdC50ID1cbiAgICBsZXQgYXJncyA9XG4gICAgICBtYXRjaCB2ZXJzaW9uIHdpdGhcbiAgICAgIHwgU29tZSB2IC0+IFt8IG5hbWU7IHN0cmluZ19vZl9pbnQgdiB8XVxuICAgICAgfCBOb25lIC0+IFt8IG5hbWUgfF1cbiAgICBpblxuXG4gICAgSnYuY2FsbCB0IFwib3BlblwiIEBAIEFycmF5Lm1hcCBKdi5vZl9zdHJpbmcgYXJnc1xuICAgIHw+IFJlcXVlc3Qub2ZfanYgfmY6RGF0YWJhc2Uub2ZfanZcbmVuZFxuXG5sZXQgZ2V0X2ZhY3RvcnkgPyhnbG9iYWwgPSBKdi5nbG9iYWwpICgpIDogRmFjdG9yeS50ID0gSnYuZ2V0IGdsb2JhbCBcImluZGV4ZWREQlwiXG4iLCJtb2R1bGUgSnYgPSBKdlxubW9kdWxlIEpzdHIgPSBKc3RyXG5cbm1vZHVsZSBCcnIgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBCcnJcblxuICBtb2R1bGUgRWwgPSBzdHJ1Y3RcbiAgICBtb2R1bGUgUyA9IFN0eWxlXG4gICAgaW5jbHVkZSBFbFxuICAgIG1vZHVsZSBTdHlsZSA9IFNcbiAgZW5kXG5cbiAgbW9kdWxlIEV2ID0gc3RydWN0XG4gICAgaW5jbHVkZSBFdlxuXG4gICAgbW9kdWxlIFN1Ym1pdCA9IHN0cnVjdFxuICAgICAgdHlwZSAnYSBldmVudCA9ICdhIHRcbiAgICAgIHR5cGUgdCA9IEp2LnRcbiAgICBlbmRcblxuICAgIGxldCBzdWJtaXQgPSBUeXBlLnZvaWQgKEpzdHIudiBcInN1Ym1pdFwiKVxuICBlbmRcblxuICBtb2R1bGUgQXQgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIEF0XG5cbiAgICBtb2R1bGUgTmFtZSA9IHN0cnVjdFxuICAgICAgaW5jbHVkZSBOYW1lXG5cbiAgICAgIGxldCBwYXR0ZXJuID0gSnN0ci52IFwicGF0dGVyblwiXG4gICAgZW5kXG5cbiAgICBsZXQgZHJhZ2dhYmxlIHMgPSB2IE5hbWUuZHJhZ2dhYmxlIHNcbiAgZW5kXG5lbmRcblxubW9kdWxlIEJycl9pbyA9IHN0cnVjdFxuICBpbmNsdWRlIEJycl9pb1xuICBtb2R1bGUgSW5kZXhlZF9kYiA9IEluZGV4ZWRfZGJcblxuICBtb2R1bGUgTWVkaWEgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIE1lZGlhXG4gICAgbW9kdWxlIFNlc3Npb24gPSBNZWRpYV9zZXNzaW9uXG4gIGVuZFxuXG4gIG1vZHVsZSBTdG9yYWdlID0gc3RydWN0XG4gICAgaW5jbHVkZSBTdG9yYWdlXG5cbiAgICBtb2R1bGUgTWFuYWdlciA9IHN0cnVjdFxuICAgICAgKCogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1N0b3JhZ2VNYW5hZ2VyICopXG4gICAgICB0eXBlIHQgPSBKdi50XG5cbiAgICAgIGluY2x1ZGUgKEp2LklkIDogSnYuQ09OViB3aXRoIHR5cGUgdCA6PSB0KVxuXG4gICAgICBsZXQgcGVyc2lzdCB0ID0gSnYuY2FsbCB0IFwicGVyc2lzdFwiIFt8fF0gfD4gRnV0Lm9mX3Byb21pc2Ugfm9rOkp2LnRvX2Jvb2xcbiAgICBlbmRcblxuICAgIGxldCBtYW5hZ2VyIChuIDogQnJyLk5hdmlnYXRvci50KSA9XG4gICAgICBKdi5nZXQgKEJyci5OYXZpZ2F0b3IudG9fanYgbikgXCJzdG9yYWdlXCIgfD4gTWFuYWdlci5vZl9qdlxuICBlbmRcbmVuZFxuXG5tb2R1bGUgQnJyX3dlYndvcmtlcnMgPSBCcnJfd2Vid29ya2Vyc1xubW9kdWxlIEJycl93ZWJtaWRpID0gQnJyX3dlYm1pZGlcbm1vZHVsZSBCcnJfd2ViZ3B1ID0gQnJyX3dlYmdwdVxubW9kdWxlIEJycl93ZWJjcnlwdG8gPSBCcnJfd2ViY3J5cHRvXG5tb2R1bGUgQnJyX3dlYmF1ZGlvID0gQnJyX3dlYmF1ZGlvXG5tb2R1bGUgQnJyX2NhbnZhcyA9IEJycl9jYW52YXNcbm1vZHVsZSBGdXQgPSBGdXRcbm1vZHVsZSBJbnRlcnNlY3Rpb25fb2JzZXJ2ZXIgPSBJbnRlcnNlY3Rpb25fb2JzZXJ2ZXJcbm1vZHVsZSBNdXRhdGlvbl9vYnNlcnZlciA9IE11dGF0aW9uX29ic2VydmVyXG5tb2R1bGUgUmVzaXplX29ic2VydmVyID0gUmVzaXplX29ic2VydmVyXG5tb2R1bGUgRG9tX3JlY3RfcmVhZF9vbmx5ID0gRG9tX3JlY3RfcmVhZF9vbmx5XG4iLCIoKiogQ3JlYXRlLW9ubHkgdmVyc2lvbiBvZiBbT2JqLnRdICopXG5tb2R1bGUgQW55IDogc2lnXG4gIHR5cGUgdFxuICB2YWwgYW55IDogJ2EgLT4gdFxuZW5kID0gc3RydWN0XG4gIHR5cGUgdCA9IE9iai50XG4gIGxldCBhbnkgPSBPYmoucmVwclxuZW5kXG5cbnR5cGUgJ2EgZXZhbCA9XG4gIHwgRXZhbF9ub25lXG4gIHwgRXZhbF9wcm9ncmVzc1xuICB8IEV2YWxfc29tZSBvZiAnYVxuXG50eXBlICdhIHRfID1cbiAgfCBQdXJlIG9mICdhXG4gIHwgT3BlcmF0b3IgOiB7XG4gICAgICBtdXRhYmxlIHZhbHVlIDogJ2EgZXZhbDsgKCogY2FjaGVkIHZhbHVlICopXG4gICAgICBtdXRhYmxlIHRyYWNlIDogdHJhY2U7ICgqIGxpc3Qgb2YgcGFyZW50cyB0aGlzIGNhbiBpbnZhbGlkYXRlICopXG4gICAgICBtdXRhYmxlIHRyYWNlX2lkeCA6IHRyYWNlX2lkeDsgKCogbGlzdCBvZiBkaXJlY3QgY2hpbGRyZW4gdGhhdCBjYW4gaW52YWxpZGF0ZSB0aGlzICopXG4gICAgICBkZXNjOiAnYSBkZXNjO1xuICAgIH0gLT4gJ2EgdF9cbiAgfCBSb290IDoge1xuICAgICAgbXV0YWJsZSB2YWx1ZSA6ICdhIGV2YWw7ICgqIGNhY2hlZCB2YWx1ZSAqKVxuICAgICAgbXV0YWJsZSB0cmFjZV9pZHggOiB0cmFjZV9pZHg7ICgqIGxpc3Qgb2YgZGlyZWN0IGNoaWxkcmVuIHRoYXQgY2FuIGludmFsaWRhdGUgdGhpcyAqKVxuICAgICAgbXV0YWJsZSBvbl9pbnZhbGlkYXRlIDogJ2EgLT4gdW5pdDtcbiAgICAgIG11dGFibGUgYWNxdWlyZWQgOiBib29sO1xuICAgICAgY2hpbGQgOiAnYSB0XztcbiAgICB9IC0+ICdhIHRfXG5cbmFuZCBfIGRlc2MgPVxuICB8IE1hcCAgOiAnYSB0XyAqICgnYSAtPiAnYikgLT4gJ2IgZGVzY1xuICB8IE1hcDIgOiAnYSB0XyAqICdiIHRfICogKCdhIC0+ICdiIC0+ICdjKSAtPiAnYyBkZXNjXG4gIHwgUGFpciA6ICdhIHRfICogJ2IgdF8gLT4gKCdhICogJ2IpIGRlc2NcbiAgfCBBcHAgIDogKCdhIC0+ICdiKSB0XyAqICdhIHRfIC0+ICdiIGRlc2NcbiAgfCBKb2luIDogeyBjaGlsZCA6ICdhIHRfIHRfOyBtdXRhYmxlIGludGVybWVkaWF0ZSA6ICdhIHRfIG9wdGlvbiB9IC0+ICdhIGRlc2NcbiAgfCBWYXIgIDogeyBtdXRhYmxlIGJpbmRpbmcgOiAnYSB9IC0+ICdhIGRlc2NcbiAgfCBQcmltIDogeyBhY3F1aXJlIDogJ2EgdCAtPiAnYTtcbiAgICAgICAgICAgICByZWxlYXNlIDogJ2EgdCAtPiAnYSAtPiB1bml0IH0gLT4gJ2EgZGVzY1xuICB8IEZpeCA6IHsgZG9jIDogJ2EgdF87IHdydCA6IF8gdF8gfSAtPiAnYSBkZXNjXG5cbigqIGEgc2V0IG9mIChhY3RpdmUpIHBhcmVudHMgZm9yIGEgWydhIHRdLCB1c2VkIGR1cmluZyBpbnZhbGlkYXRpb24gKilcbmFuZCB0cmFjZSA9XG4gIHwgVDBcbiAgfCBUMSA6IF8gdF8gLT4gdHJhY2VcbiAgfCBUMiA6IF8gdF8gKiBfIHRfIC0+IHRyYWNlXG4gIHwgVDMgOiBfIHRfICogXyB0XyAqIF8gdF8gLT4gdHJhY2VcbiAgfCBUNCA6IF8gdF8gKiBfIHRfICogXyB0XyAqIF8gdF8gLT4gdHJhY2VcbiAgfCBUbiA6IHsgbXV0YWJsZSBhY3RpdmUgOiBpbnQ7IG11dGFibGUgY291bnQgOiBpbnQ7XG4gICAgICAgICAgIG11dGFibGUgZW50cmllcyA6IEFueS50IHRfIGFycmF5IH0gLT4gdHJhY2VcblxuKCogYSBzZXQgb2YgZGlyZWN0IGNoaWxkcmVuIGZvciBhIGNvbXBvc2l0ZSBkb2N1bWVudCAqKVxuYW5kIHRyYWNlX2lkeCA9XG4gIHwgSTBcbiAgfCBJMSA6IHsgbXV0YWJsZSBpZHggOiBpbnQgO1xuICAgICAgICAgICBvYmogOiAnYSB0XztcbiAgICAgICAgICAgbXV0YWJsZSBuZXh0IDogdHJhY2VfaWR4IH0gLT4gdHJhY2VfaWR4XG5cbigqIFRoZSB0eXBlIHN5c3RlbSBjYW5ub3Qgc2VlIHRoYXQgdCBpcyBjb3ZhcmlhbnQgaW4gaXRzIHBhcmFtZXRlci5cbiAgIFVzZSB0aGUgRm9yY2UgdG8gY29udmluY2UgaXQuICopXG5hbmQgKydhIHRcbmV4dGVybmFsIGluaiA6ICdhIHRfIC0+ICdhIHQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBwcmogOiAnYSB0IC0+ICdhIHRfID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgcHJqMiA6ICdhIHQgdCAtPiAnYSB0XyB0XyA9IFwiJWlkZW50aXR5XCJcblxuKCogQmFzaWMgY29tYmluYXRvcnMgKilcbmxldCByZXR1cm4geCA9IGluaiAoUHVyZSB4KVxubGV0IHB1cmUgeCA9IGluaiAoUHVyZSB4KVxuXG5sZXQgaXNfcHVyZSB4ID0gbWF0Y2ggcHJqIHggd2l0aFxuICB8IFB1cmUgeCAtPiBTb21lIHhcbiAgfCBfIC0+IE5vbmVcblxubGV0IGR1bW15ID0gUHVyZSAoQW55LmFueSAoKSlcblxubGV0IG9wZXJhdG9yIGRlc2MgPVxuICBPcGVyYXRvciB7IHZhbHVlID0gRXZhbF9ub25lOyB0cmFjZSA9IFQwOyBkZXNjOyB0cmFjZV9pZHggPSBJMCB9XG5cbmxldCBtYXAgeCB+ZiA9IGluaiAoXG4gICAgbWF0Y2ggcHJqIHggd2l0aFxuICAgIHwgUHVyZSB2eCAtPiBQdXJlIChmIHZ4KVxuICAgIHwgeCAtPiBvcGVyYXRvciAoTWFwICh4LCBmKSlcbiAgKVxuXG5sZXQgbWFwMiB4IHkgfmYgPSBpbmogKFxuICAgIG1hdGNoIHByaiB4LCBwcmogeSB3aXRoXG4gICAgfCBQdXJlIHZ4LCBQdXJlIHZ5IC0+IFB1cmUgKGYgdnggdnkpXG4gICAgfCB4LCB5IC0+IG9wZXJhdG9yIChNYXAyICh4LCB5LCBmKSlcbiAgKVxuXG5sZXQgcGFpciB4IHkgPSBpbmogKFxuICAgIG1hdGNoIHByaiB4LCBwcmogeSB3aXRoXG4gICAgfCBQdXJlIHZ4LCBQdXJlIHZ5IC0+IFB1cmUgKHZ4LCB2eSlcbiAgICB8IHgsIHkgLT4gb3BlcmF0b3IgKFBhaXIgKHgsIHkpKVxuICApXG5cbmxldCBhcHAgZiB4ID0gaW5qIChcbiAgICBtYXRjaCBwcmogZiwgcHJqIHggd2l0aFxuICAgIHwgUHVyZSB2ZiwgUHVyZSB2eCAtPiBQdXJlICh2ZiB2eClcbiAgICB8IGYsIHggLT4gb3BlcmF0b3IgKEFwcCAoZiwgeCkpXG4gIClcblxubGV0IGpvaW4gY2hpbGQgPSBpbmogKFxuICAgIG1hdGNoIHByajIgY2hpbGQgd2l0aFxuICAgIHwgUHVyZSB2IC0+IHZcbiAgICB8IGNoaWxkIC0+IG9wZXJhdG9yIChKb2luIHsgY2hpbGQ7IGludGVybWVkaWF0ZSA9IE5vbmUgfSlcbiAgKVxuXG5sZXQgYmluZCB4IH5mID0gam9pbiAobWFwIH5mIHgpXG5cbigqIE1hbmFnZW1lbnQgb2YgdHJhY2UgaW5kaWNlcyAqKVxuXG5sZXQgYWRkciBvYyBvYmogPVxuICBQcmludGYuZnByaW50ZiBvYyBcIjB4JTA4eFwiIChPYmoubWFnaWMgb2JqIDogaW50KVxuXG5leHRlcm5hbCB0X2VxdWFsIDogXyB0XyAtPiBfIHRfIC0+IGJvb2wgPSBcIiVlcVwiXG5leHRlcm5hbCBvYmpfdCA6ICdhIHRfIC0+IEFueS50IHRfID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgcmVjIGR1bXBfdHJhY2UgOiB0eXBlIGEuIGEgdF8gLT4gdW5pdCA9XG4gIGZ1biBvYmogLT4gbWF0Y2ggb2JqIHdpdGhcbiAgfCBQdXJlIF8gLT4gUHJpbnRmLmVwcmludGYgXCIlYTogUHVyZSBfXFxuJSFcIiBhZGRyIG9ialxuICB8IE9wZXJhdG9yIHQgLT5cbiAgICBQcmludGYuZXByaW50ZiBcIiVhOiBPcGVyYXRvciBfIC0+ICVhXFxuJSFcIiBhZGRyIG9iaiBkdW1wX3RyYWNlX2F1eCB0LnRyYWNlO1xuICAgIGJlZ2luIG1hdGNoIHQudHJhY2Ugd2l0aFxuICAgICAgfCBUMCAtPiAoKVxuICAgICAgfCBUMSBhIC0+IGR1bXBfdHJhY2UgYVxuICAgICAgfCBUMiAoYSxiKSAtPiBkdW1wX3RyYWNlIGE7IGR1bXBfdHJhY2UgYlxuICAgICAgfCBUMyAoYSxiLGMpIC0+IGR1bXBfdHJhY2UgYTsgZHVtcF90cmFjZSBiOyBkdW1wX3RyYWNlIGNcbiAgICAgIHwgVDQgKGEsYixjLGQpIC0+IGR1bXBfdHJhY2UgYTsgZHVtcF90cmFjZSBiOyBkdW1wX3RyYWNlIGM7IGR1bXBfdHJhY2UgZFxuICAgICAgfCBUbiB0IC0+IEFycmF5Lml0ZXIgZHVtcF90cmFjZSB0LmVudHJpZXNcbiAgICBlbmRcbiAgfCBSb290IF8gLT4gUHJpbnRmLmVwcmludGYgXCIlYTogUm9vdCBfXFxuJSFcIiBhZGRyIG9ialxuXG5hbmQgZHVtcF90cmFjZV9hdXggb2MgPSBmdW5jdGlvblxuICB8IFQwIC0+IFByaW50Zi5mcHJpbnRmIG9jIFwiVDBcIlxuICB8IFQxIGEgLT4gUHJpbnRmLmZwcmludGYgb2MgXCJUMSAlYVwiIGFkZHIgYVxuICB8IFQyIChhLGIpIC0+XG4gICAgUHJpbnRmLmZwcmludGYgb2MgXCJUMiAoJWEsICVhKVwiIGFkZHIgYSBhZGRyIGJcbiAgfCBUMyAoYSxiLGMpIC0+XG4gICAgUHJpbnRmLmZwcmludGYgb2MgXCJUMyAoJWEsICVhLCAlYSlcIiBhZGRyIGEgYWRkciBiIGFkZHIgY1xuICB8IFQ0IChhLGIsYyxkKSAtPlxuICAgIFByaW50Zi5mcHJpbnRmIG9jIFwiVDQgKCVhLCAlYSwgJWEsICVhKVwiIGFkZHIgYSBhZGRyIGIgYWRkciBjIGFkZHIgZFxuICB8IFRuIHQgLT5cbiAgICBQcmludGYuZnByaW50ZiBvYyBcIlRuIHthY3RpdmUgPSAlZDsgY291bnQgPSAlZDsgZW50cmllcyA9IFwiXG4gICAgICB0LmFjdGl2ZSB0LmNvdW50O1xuICAgIEFycmF5Lml0ZXIgKFByaW50Zi5mcHJpbnRmIG9jIFwiKCVhKVwiIGFkZHIpIHQuZW50cmllcztcbiAgICBQcmludGYuZnByaW50ZiBvYyBcIn1cIlxuXG5sZXQgZHVtcF90cmFjZSB4ID0gZHVtcF90cmFjZSAob2JqX3QgKHByaiB4KSlcblxubGV0IGFkZF9pZHggb2JqIGlkeCA9IGZ1bmN0aW9uXG4gIHwgUHVyZSBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3QgdCcgLT4gdCcudHJhY2VfaWR4IDwtIEkxIHsgaWR4OyBvYmo7IG5leHQgPSB0Jy50cmFjZV9pZHggfVxuICB8IE9wZXJhdG9yIHQnIC0+IHQnLnRyYWNlX2lkeCA8LSBJMSB7IGlkeDsgb2JqOyBuZXh0ID0gdCcudHJhY2VfaWR4IH1cblxubGV0IHJlYyByZW1faWR4X3JlYyBvYmogPSBmdW5jdGlvblxuICB8IEkwIC0+IGFzc2VydCBmYWxzZVxuICB8IEkxIHQgYXMgc2VsZiAtPlxuICAgIGlmIHRfZXF1YWwgdC5vYmogb2JqXG4gICAgdGhlbiAodC5pZHgsIHQubmV4dClcbiAgICBlbHNlIChcbiAgICAgIGxldCBpZHgsIHJlc3VsdCA9IHJlbV9pZHhfcmVjIG9iaiB0Lm5leHQgaW5cbiAgICAgIHQubmV4dCA8LSByZXN1bHQ7XG4gICAgICAoaWR4LCBzZWxmKVxuICAgIClcblxuKCogcmVtb3ZlIFtvYmpdIGZyb20gdGhlIGx3ZCdzIHRyYWNlLiAqKVxubGV0IHJlbV9pZHggb2JqID0gZnVuY3Rpb25cbiAgfCBQdXJlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCB0JyAtPlxuICAgIGxldCBpZHgsIHRyYWNlX2lkeCA9IHJlbV9pZHhfcmVjIG9iaiB0Jy50cmFjZV9pZHggaW5cbiAgICB0Jy50cmFjZV9pZHggPC0gdHJhY2VfaWR4OyBpZHhcbiAgfCBPcGVyYXRvciB0JyAtPlxuICAgIGxldCBpZHgsIHRyYWNlX2lkeCA9IHJlbV9pZHhfcmVjIG9iaiB0Jy50cmFjZV9pZHggaW5cbiAgICB0Jy50cmFjZV9pZHggPC0gdHJhY2VfaWR4OyBpZHhcblxuKCogbW92ZSBbb2JqXSBmcm9tIG9sZCBpbmRleCB0byBuZXcgaW5kZXguICopXG5sZXQgcmVjIG1vdl9pZHhfcmVjIG9iaiBvbGRpZHggbmV3aWR4ID0gZnVuY3Rpb25cbiAgfCBJMCAtPiBhc3NlcnQgZmFsc2VcbiAgfCBJMSB0IC0+XG4gICAgaWYgdC5pZHggPSBvbGRpZHggJiYgdF9lcXVhbCB0Lm9iaiBvYmpcbiAgICB0aGVuIHQuaWR4IDwtIG5ld2lkeFxuICAgIGVsc2UgbW92X2lkeF9yZWMgb2JqIG9sZGlkeCBuZXdpZHggdC5uZXh0XG5cbmxldCBtb3ZfaWR4IG9iaiBvbGRpZHggbmV3aWR4ID0gZnVuY3Rpb25cbiAgfCBQdXJlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCB0JyAtPiBtb3ZfaWR4X3JlYyBvYmogb2xkaWR4IG5ld2lkeCB0Jy50cmFjZV9pZHhcbiAgfCBPcGVyYXRvciB0JyAtPiBtb3ZfaWR4X3JlYyBvYmogb2xkaWR4IG5ld2lkeCB0Jy50cmFjZV9pZHhcblxubGV0IHJlYyBnZXRfaWR4X3JlYyBvYmogPSBmdW5jdGlvblxuICB8IEkwIC0+IGFzc2VydCBmYWxzZVxuICB8IEkxIHQgLT5cbiAgICBpZiB0X2VxdWFsIHQub2JqIG9ialxuICAgIHRoZW4gdC5pZHhcbiAgICBlbHNlIGdldF9pZHhfcmVjIG9iaiB0Lm5leHRcblxuKCogZmluZCBpbmRleCBvZiBbb2JqXSBpbiB0aGUgZ2l2ZW4gbHdkICopXG5sZXQgZ2V0X2lkeCBvYmogPSBmdW5jdGlvblxuICB8IFB1cmUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHQnIC0+IGdldF9pZHhfcmVjIG9iaiB0Jy50cmFjZV9pZHhcbiAgfCBPcGVyYXRvciB0JyAtPiBnZXRfaWR4X3JlYyBvYmogdCcudHJhY2VfaWR4XG5cbnR5cGUgc3RhdHVzID1cbiAgfCBOZXV0cmFsXG4gIHwgU2FmZVxuICB8IFVuc2FmZVxuXG50eXBlIHNlbnNpdGl2aXR5ID1cbiAgfCBTdHJvbmdcbiAgfCBGcmFnaWxlXG5cbigqIFByb3BhZ2F0aW5nIGludmFsaWRhdGlvbiByZWN1cnNpdmVseS5cbiAgIEVhY2ggZG9jdW1lbnQgaXMgaW52YWxpZGF0ZWQgYXQgbW9zdCBvbmNlLFxuICAgYW5kIG9ubHkgaWYgaXQgaGFzIFt0LnZhbHVlID0gU29tZSBfXS4gKilcbmxldCByZWMgaW52YWxpZGF0ZV9ub2RlIDogdHlwZSBhIC4gc3RhdHVzIHJlZiAtPiBzZW5zaXRpdml0eSAtPiBhIHRfIC0+IHVuaXQgPVxuICBmdW4gc3RhdHVzIHNlbnNpdGl2aXR5IG5vZGUgLT5cbiAgbWF0Y2ggbm9kZSwgc2Vuc2l0aXZpdHkgd2l0aFxuICB8IFB1cmUgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290ICh7dmFsdWU7IF99IGFzIHQpLCBfIC0+XG4gICAgdC52YWx1ZSA8LSBFdmFsX25vbmU7XG4gICAgYmVnaW4gbWF0Y2ggdmFsdWUgd2l0aFxuICAgICAgfCBFdmFsX25vbmUgLT4gKClcbiAgICAgIHwgRXZhbF9wcm9ncmVzcyAtPlxuICAgICAgICBzdGF0dXMgOj0gVW5zYWZlXG4gICAgICB8IEV2YWxfc29tZSB4IC0+XG4gICAgICAgIGJlZ2luIG1hdGNoIHNlbnNpdGl2aXR5IHdpdGhcbiAgICAgICAgICB8IFN0cm9uZyAtPiAoKVxuICAgICAgICAgIHwgRnJhZ2lsZSAtPiBzdGF0dXMgOj0gVW5zYWZlXG4gICAgICAgIGVuZDtcbiAgICAgICAgdC5vbl9pbnZhbGlkYXRlIHggKCogdXNlciBjYWxsYmFjayB0aGF0IHtpIG9ic2VydmVzfSB0aGlzIHJvb3QuICopXG4gICAgZW5kXG4gIHwgT3BlcmF0b3Ige3ZhbHVlID0gRXZhbF9ub25lOyBffSwgRnJhZ2lsZSAtPlxuICAgIGJlZ2luIG1hdGNoICFzdGF0dXMgd2l0aFxuICAgICAgfCBVbnNhZmUgfCBTYWZlIC0+ICgpXG4gICAgICB8IF8gLT4gc3RhdHVzIDo9IFNhZmVcbiAgICBlbmRcbiAgfCBPcGVyYXRvciB7dmFsdWUgPSBFdmFsX25vbmU7IF99LCBfIC0+ICgpXG4gIHwgT3BlcmF0b3Ige2Rlc2MgPSBGaXgge3dydCA9IE9wZXJhdG9yIHt2YWx1ZSA9IEV2YWxfbm9uZTsgX307IF99OyBffSwgRnJhZ2lsZSAtPlxuICAgIGJlZ2luIG1hdGNoICFzdGF0dXMgd2l0aFxuICAgICAgfCBTYWZlIHwgVW5zYWZlIC0+ICgpXG4gICAgICB8IE5ldXRyYWwgLT4gc3RhdHVzIDo9IFNhZmVcbiAgICBlbmRcbiAgfCBPcGVyYXRvciB7ZGVzYyA9IEZpeCB7d3J0ID0gT3BlcmF0b3Ige3ZhbHVlID0gRXZhbF9zb21lIF87IF99OyBffTsgX30sIEZyYWdpbGUgLT5cbiAgICAoKVxuICB8IE9wZXJhdG9yIHQsIF8gLT5cbiAgICBsZXQgc2Vuc2l0aXZpdHkgPVxuICAgICAgbWF0Y2ggdC52YWx1ZSB3aXRoIEV2YWxfcHJvZ3Jlc3MgLT4gRnJhZ2lsZSB8IF8gLT4gc2Vuc2l0aXZpdHlcbiAgICBpblxuICAgIHQudmFsdWUgPC0gRXZhbF9ub25lO1xuICAgICgqIGludmFsaWRhdGUgcGFyZW50cyByZWN1cnNpdmVseSAqKVxuICAgIGludmFsaWRhdGVfdHJhY2Ugc3RhdHVzIHNlbnNpdGl2aXR5IHQudHJhY2VcblxuKCogaW52YWxpZGF0ZSByZWN1cnNpdmVseSBkb2N1bWVudHMgaW4gdGhlIGdpdmVuIHRyYWNlICopXG5hbmQgaW52YWxpZGF0ZV90cmFjZSBzdGF0dXMgc2Vuc2l0aXZpdHkgPSBmdW5jdGlvblxuICB8IFQwIC0+ICgpXG4gIHwgVDEgeCAtPiBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHhcbiAgfCBUMiAoeCwgeSkgLT5cbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHg7XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB5XG4gIHwgVDMgKHgsIHksIHopIC0+XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB4O1xuICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgeTtcbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHpcbiAgfCBUNCAoeCwgeSwgeiwgdykgLT5cbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHg7XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB5O1xuICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgejtcbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHdcbiAgfCBUbiB0IC0+XG4gICAgbGV0IGFjdGl2ZSA9IHQuYWN0aXZlIGluXG4gICAgdC5hY3RpdmUgPC0gMDtcbiAgICBmb3IgaSA9IDAgdG8gYWN0aXZlIC0gMSBkb1xuICAgICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB0LmVudHJpZXMuKGkpXG4gICAgZG9uZVxuXG5sZXQgZGVmYXVsdF91bnNhZmVfbXV0YXRpb25fbG9nZ2VyICgpID1cbiAgbGV0IGNhbGxzdGFjayA9IFByaW50ZXhjLmdldF9jYWxsc3RhY2sgMjAgaW5cbiAgUHJpbnRmLmZwcmludGYgc3RkZXJyXG4gICAgXCJMd2Q6IHVuc2FmZSBtdXRhdGlvbiAodmFyaWFibGUgaW52YWxpZGF0ZWQgZHVyaW5nIGV2YWx1YXRpb24pIGF0XFxuJWFcIlxuICAgIFByaW50ZXhjLnByaW50X3Jhd19iYWNrdHJhY2UgY2FsbHN0YWNrXG5cbmxldCB1bnNhZmVfbXV0YXRpb25fbG9nZ2VyID0gcmVmIGRlZmF1bHRfdW5zYWZlX211dGF0aW9uX2xvZ2dlclxuXG5sZXQgZG9faW52YWxpZGF0ZSBzZW5zaXRpdml0eSBub2RlID1cbiAgbGV0IHN0YXR1cyA9IHJlZiBOZXV0cmFsIGluXG4gIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgbm9kZTtcbiAgbGV0IHVuc2FmZSA9XG4gICAgbWF0Y2ggIXN0YXR1cyB3aXRoXG4gICAgfCBOZXV0cmFsIHwgU2FmZSAtPiBmYWxzZVxuICAgIHwgVW5zYWZlIC0+IHRydWVcbiAgaW5cbiAgaWYgdW5zYWZlIHRoZW4gIXVuc2FmZV9tdXRhdGlvbl9sb2dnZXIgKClcblxuKCogVmFyaWFibGVzICopXG50eXBlICdhIHZhciA9ICdhIHRfXG5sZXQgdmFyIHggPSBvcGVyYXRvciAoVmFyIHtiaW5kaW5nID0geH0pXG5sZXQgZ2V0IHggPSBpbmogeFxuXG5sZXQgc2V0ICh2eDpfIHZhcikgeCA6IHVuaXQgPVxuICBtYXRjaCB2eCB3aXRoXG4gIHwgT3BlcmF0b3IgKHtkZXNjID0gVmFyIHY7IF99KSAtPlxuICAgICgqIHNldCB0aGUgdmFyaWFibGUsIGFuZCBpbnZhbGlkYXRlIGFsbCBvYnNlcnZlcnMgKilcbiAgICB2LmJpbmRpbmcgPC0geDtcbiAgICBkb19pbnZhbGlkYXRlIFN0cm9uZyB2eFxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBwZWVrID0gZnVuY3Rpb25cbiAgfCBPcGVyYXRvciAoe2Rlc2MgPSBWYXIgdjsgX30pIC0+IHYuYmluZGluZ1xuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCB1cGRhdGUgZiB2ID0gc2V0IHYgKGYgKHBlZWsgdikpXG5cbmxldCBtYXlfdXBkYXRlIGYgdiA9XG4gIG1hdGNoIGYgKHBlZWsgdikgd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHggLT4gc2V0IHYgeFxuXG4oKiBQcmltaXRpdmVzICopXG50eXBlICdhIHByaW0gPSAnYSB0XG5sZXQgcHJpbSB+YWNxdWlyZSB+cmVsZWFzZSA9XG4gIGluaiAob3BlcmF0b3IgKFByaW0geyBhY3F1aXJlOyByZWxlYXNlIH0pKVxubGV0IGdldF9wcmltIHggPSB4XG5cbmxldCBpbnZhbGlkYXRlIHggPSBtYXRjaCBwcmogeCB3aXRoXG4gIHwgT3BlcmF0b3Ige2Rlc2MgPSBQcmltIHA7IHZhbHVlOyBffSBhcyB0IC0+XG4gICAgKCogdGhlIHZhbHVlIGlzIGludmFsaWRhdGVkLCBiZSBzdXJlIHRvIGludmFsaWRhdGUgYWxsIHBhcmVudHMgYXMgd2VsbCAqKVxuICAgIGJlZ2luIG1hdGNoIHZhbHVlIHdpdGhcbiAgICAgIHwgRXZhbF9ub25lIC0+ICgpXG4gICAgICB8IEV2YWxfcHJvZ3Jlc3MgLT4gZG9faW52YWxpZGF0ZSBGcmFnaWxlIHQ7XG4gICAgICB8IEV2YWxfc29tZSB2IC0+XG4gICAgICAgIGRvX2ludmFsaWRhdGUgU3Ryb25nIHQ7XG4gICAgICAgIHAucmVsZWFzZSB4IHZcbiAgICBlbmRcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4oKiBGaXggcG9pbnQgKilcblxubGV0IGZpeCBkb2MgfndydCA9IG1hdGNoIHByaiB3cnQgd2l0aFxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBQdXJlIF8gLT4gZG9jXG4gIHwgT3BlcmF0b3IgXyBhcyB3cnQgLT4gaW5qIChvcGVyYXRvciAoRml4IHtkb2MgPSBwcmogZG9jOyB3cnR9KSlcblxudHlwZSByZWxlYXNlX2xpc3QgPVxuICB8IFJlbGVhc2VfZG9uZVxuICB8IFJlbGVhc2VfbW9yZSA6XG4gICAgICB7IG9yaWdpbiA6ICdhIHRfOyBlbGVtZW50IDogJ2IgdF87IG5leHQgOiByZWxlYXNlX2xpc3QgfSAtPiByZWxlYXNlX2xpc3RcblxudHlwZSByZWxlYXNlX3F1ZXVlID0gcmVsZWFzZV9saXN0IHJlZlxubGV0IG1ha2VfcmVsZWFzZV9xdWV1ZSAoKSA9IHJlZiBSZWxlYXNlX2RvbmVcblxudHlwZSByZWxlYXNlX2ZhaWx1cmUgPSBleG4gKiBQcmludGV4Yy5yYXdfYmFja3RyYWNlXG5cbigqIFtzdWJfcmVsZWFzZSBbXSBvcmlnaW4gc2VsZl0gaXMgY2FsbGVkIHdoZW4gW29yaWdpbl0gaXMgcmVsZWFzZWQsXG4gICB3aGVyZSBbb3JpZ2luXSBpcyByZWFjaGFibGUgZnJvbSBbc2VsZl0ncyB0cmFjZS5cbiAgIFdlJ3JlIGdvaW5nIHRvIHJlbW92ZSBbb3JpZ2luXSBmcm9tIHRoYXQgdHJhY2UgYXMgW29yaWdpbl0gaXMgbm93IGRlYWQuXG5cbiAgIFtzdWJfcmVsZWFzZV0gY2Fubm90IHJhaXNlLlxuICAgSWYgYSBwcmltaXRpdmUgcmFpc2VzLCB0aGUgZXhjZXB0aW9uIGlzIGNhdWdodCBhbmQgYSB3YXJuaW5nIGlzIGVtaXR0ZWQuICopXG5sZXQgcmVjIHN1Yl9yZWxlYXNlXG4gIDogdHlwZSBhIGIgLiByZWxlYXNlX2ZhaWx1cmUgbGlzdCAtPiBhIHRfIC0+IGIgdF8gLT4gcmVsZWFzZV9mYWlsdXJlIGxpc3RcbiAgPSBmdW4gZmFpbHVyZXMgb3JpZ2luIC0+IGZ1bmN0aW9uXG4gICAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBQdXJlIF8gLT4gZmFpbHVyZXNcbiAgICB8IE9wZXJhdG9yIHQgYXMgc2VsZiAtPlxuICAgICAgKCogY29tcHV0ZSBbdC50cmFjZSBcXCB7b3JpZ2lufV0gKilcbiAgICAgIGxldCB0cmFjZSA9IG1hdGNoIHQudHJhY2Ugd2l0aFxuICAgICAgICB8IFQwIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICB8IFQxIHggLT4gYXNzZXJ0ICh0X2VxdWFsIHggb3JpZ2luKTsgVDBcbiAgICAgICAgfCBUMiAoeCwgeSkgLT5cbiAgICAgICAgICBpZiB0X2VxdWFsIHggb3JpZ2luIHRoZW4gVDEgeVxuICAgICAgICAgIGVsc2UgaWYgdF9lcXVhbCB5IG9yaWdpbiB0aGVuIFQxIHhcbiAgICAgICAgICBlbHNlIGFzc2VydCBmYWxzZVxuICAgICAgICB8IFQzICh4LCB5LCB6KSAtPlxuICAgICAgICAgIGlmIHRfZXF1YWwgeCBvcmlnaW4gdGhlbiBUMiAoeSwgeilcbiAgICAgICAgICBlbHNlIGlmIHRfZXF1YWwgeSBvcmlnaW4gdGhlbiBUMiAoeCwgeilcbiAgICAgICAgICBlbHNlIGlmIHRfZXF1YWwgeiBvcmlnaW4gdGhlbiBUMiAoeCwgeSlcbiAgICAgICAgICBlbHNlIGFzc2VydCBmYWxzZVxuICAgICAgICB8IFQ0ICh4LCB5LCB6LCB3KSAtPlxuICAgICAgICAgIGlmIHRfZXF1YWwgeCBvcmlnaW4gdGhlbiBUMyAoeSwgeiwgdylcbiAgICAgICAgICBlbHNlIGlmIHRfZXF1YWwgeSBvcmlnaW4gdGhlbiBUMyAoeCwgeiwgdylcbiAgICAgICAgICBlbHNlIGlmIHRfZXF1YWwgeiBvcmlnaW4gdGhlbiBUMyAoeCwgeSwgdylcbiAgICAgICAgICBlbHNlIGlmIHRfZXF1YWwgdyBvcmlnaW4gdGhlbiBUMyAoeCwgeSwgeilcbiAgICAgICAgICBlbHNlIGFzc2VydCBmYWxzZVxuICAgICAgICB8IFRuIHRuIGFzIHRyYWNlIC0+XG4gICAgICAgICAgbGV0IHJldmlkeCA9IHJlbV9pZHggc2VsZiBvcmlnaW4gaW5cbiAgICAgICAgICBhc3NlcnQgKHRfZXF1YWwgdG4uZW50cmllcy4ocmV2aWR4KSBvcmlnaW4pO1xuICAgICAgICAgIGxldCBjb3VudCA9IHRuLmNvdW50IC0gMSBpblxuICAgICAgICAgIHRuLmNvdW50IDwtIGNvdW50O1xuICAgICAgICAgIGlmIHJldmlkeCA8IGNvdW50IHRoZW4gKFxuICAgICAgICAgICAgbGV0IG9iaiA9IHRuLmVudHJpZXMuKGNvdW50KSBpblxuICAgICAgICAgICAgdG4uZW50cmllcy4ocmV2aWR4KSA8LSBvYmo7XG4gICAgICAgICAgICB0bi5lbnRyaWVzLihjb3VudCkgPC0gZHVtbXk7XG4gICAgICAgICAgICBtb3ZfaWR4IHNlbGYgY291bnQgcmV2aWR4IG9ialxuICAgICAgICAgICkgZWxzZVxuICAgICAgICAgICAgdG4uZW50cmllcy4ocmV2aWR4KSA8LSBkdW1teTtcbiAgICAgICAgICBpZiB0bi5hY3RpdmUgPiBjb3VudCB0aGVuIHRuLmFjdGl2ZSA8LSBjb3VudDtcbiAgICAgICAgICBpZiBjb3VudCA9IDQgdGhlbiAoXG4gICAgICAgICAgICAoKiBkb3duZ3JhZGUgdG8gW1Q0XSB0byBzYXZlIHNwYWNlICopXG4gICAgICAgICAgICBsZXQgYSA9IHRuLmVudHJpZXMuKDApIGFuZCBiID0gdG4uZW50cmllcy4oMSkgaW5cbiAgICAgICAgICAgIGxldCBjID0gdG4uZW50cmllcy4oMikgYW5kIGQgPSB0bi5lbnRyaWVzLigzKSBpblxuICAgICAgICAgICAgaWdub3JlIChyZW1faWR4IHNlbGYgYSA6IGludCk7XG4gICAgICAgICAgICBpZ25vcmUgKHJlbV9pZHggc2VsZiBiIDogaW50KTtcbiAgICAgICAgICAgIGlnbm9yZSAocmVtX2lkeCBzZWxmIGMgOiBpbnQpO1xuICAgICAgICAgICAgaWdub3JlIChyZW1faWR4IHNlbGYgZCA6IGludCk7XG4gICAgICAgICAgICBUNCAoYSwgYiwgYywgZClcbiAgICAgICAgICApIGVsc2UgKFxuICAgICAgICAgICAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCB0bi5lbnRyaWVzIGluXG4gICAgICAgICAgICBpZiBjb3VudCA8PSBsZW4gbHNyIDIgdGhlblxuICAgICAgICAgICAgICBUbiB7IGFjdGl2ZSA9IHRuLmFjdGl2ZTsgY291bnQgPSB0bi5jb3VudDtcbiAgICAgICAgICAgICAgICAgICBlbnRyaWVzID0gQXJyYXkuc3ViIHRuLmVudHJpZXMgMCAobGVuIGxzciAxKSB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIHRyYWNlXG4gICAgICAgICAgKVxuICAgICAgaW5cbiAgICAgIHQudHJhY2UgPC0gdHJhY2U7XG4gICAgICBtYXRjaCB0cmFjZSB3aXRoXG4gICAgICB8IFQwIC0+XG4gICAgICAgICgqIFtzZWxmXSBpcyBub3QgYWN0aXZlIGFueW1vcmUsIHNpbmNlIGl0J3Mgbm90IHJlYWNoYWJsZVxuICAgICAgICAgICBmcm9tIGFueSByb290LiBXZSBjYW4gcmVsZWFzZSBpdHMgY2FjaGVkIHZhbHVlIGFuZFxuICAgICAgICAgICByZWN1cnNpdmVseSByZWxlYXNlIGl0cyBzdWJ0cmVlLiAqKVxuICAgICAgICBsZXQgdmFsdWUgPSB0LnZhbHVlIGluXG4gICAgICAgIHQudmFsdWUgPC0gRXZhbF9wcm9ncmVzcztcbiAgICAgICAgYmVnaW4gbWF0Y2ggdC5kZXNjIHdpdGhcbiAgICAgICAgICB8IE1hcCAgKHgsIF8pIC0+IHN1Yl9yZWxlYXNlIGZhaWx1cmVzIHNlbGYgeFxuICAgICAgICAgIHwgTWFwMiAoeCwgeSwgXykgLT5cbiAgICAgICAgICAgIHN1Yl9yZWxlYXNlIChzdWJfcmVsZWFzZSBmYWlsdXJlcyBzZWxmIHgpIHNlbGYgeVxuICAgICAgICAgIHwgUGFpciAoeCwgeSkgLT5cbiAgICAgICAgICAgIHN1Yl9yZWxlYXNlIChzdWJfcmVsZWFzZSBmYWlsdXJlcyBzZWxmIHgpIHNlbGYgeVxuICAgICAgICAgIHwgQXBwICAoeCwgeSkgLT5cbiAgICAgICAgICAgIHN1Yl9yZWxlYXNlIChzdWJfcmVsZWFzZSBmYWlsdXJlcyBzZWxmIHgpIHNlbGYgeVxuICAgICAgICAgIHwgSm9pbiAoeyBjaGlsZDsgaW50ZXJtZWRpYXRlIH0gYXMgdCkgLT5cbiAgICAgICAgICAgIGxldCBmYWlsdXJlcyA9IHN1Yl9yZWxlYXNlIGZhaWx1cmVzIHNlbGYgY2hpbGQgaW5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIGludGVybWVkaWF0ZSB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiBmYWlsdXJlc1xuICAgICAgICAgICAgICB8IFNvbWUgY2hpbGQnIC0+XG4gICAgICAgICAgICAgICAgdC5pbnRlcm1lZGlhdGUgPC0gTm9uZTtcbiAgICAgICAgICAgICAgICBzdWJfcmVsZWFzZSBmYWlsdXJlcyBzZWxmIGNoaWxkJ1xuICAgICAgICAgICAgZW5kXG4gICAgICAgICAgfCBWYXIgIF8gLT4gZmFpbHVyZXNcbiAgICAgICAgICB8IEZpeCB7ZG9jOyB3cnR9IC0+XG4gICAgICAgICAgICBzdWJfcmVsZWFzZSAoc3ViX3JlbGVhc2UgZmFpbHVyZXMgc2VsZiB3cnQpIHNlbGYgZG9jXG4gICAgICAgICAgfCBQcmltIHQgLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIHZhbHVlIHdpdGhcbiAgICAgICAgICAgICAgfCBFdmFsX25vbmUgIHwgRXZhbF9wcm9ncmVzcyAtPiBmYWlsdXJlc1xuICAgICAgICAgICAgICB8IEV2YWxfc29tZSB4IC0+XG4gICAgICAgICAgICAgICAgYmVnaW4gbWF0Y2ggdC5yZWxlYXNlIChpbmogc2VsZikgeCB3aXRoXG4gICAgICAgICAgICAgICAgICB8ICgpIC0+IGZhaWx1cmVzXG4gICAgICAgICAgICAgICAgICB8IGV4Y2VwdGlvbiBleG4gLT5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGJ0ID0gUHJpbnRleGMuZ2V0X3Jhd19iYWNrdHJhY2UgKCkgaW5cbiAgICAgICAgICAgICAgICAgICAgKGV4biwgYnQpIDo6IGZhaWx1cmVzXG4gICAgICAgICAgICAgICAgZW5kXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgZW5kXG4gICAgICB8IF8gLT4gZmFpbHVyZXNcblxuKCogW3N1Yl9hY3F1aXJlXSBjYW5ub3QgcmFpc2UgKilcbmxldCByZWMgc3ViX2FjcXVpcmUgOiB0eXBlIGEgYiAuIGEgdF8gLT4gYiB0XyAtPiB1bml0ID0gZnVuIG9yaWdpbiAtPlxuICBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBQdXJlIF8gLT4gKClcbiAgfCBPcGVyYXRvciB0IGFzIHNlbGYgLT5cbiAgICAoKiBbYWNxdWlyZV0gaXMgdHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRoaXMgb3BlcmF0b3JcbiAgICAgICBpcyB1c2VkLCBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gYWNxdWlyZSBpdHMgY2hpbGRyZW4gKilcbiAgICBsZXQgYWNxdWlyZSA9IG1hdGNoIHQudHJhY2Ugd2l0aCBUMCAtPiB0cnVlIHwgXyAtPiBmYWxzZSBpblxuICAgIGxldCB0cmFjZSA9IG1hdGNoIHQudHJhY2Ugd2l0aFxuICAgICAgfCBUMCAtPiBUMSBvcmlnaW5cbiAgICAgIHwgVDEgeCAtPiBUMiAob3JpZ2luLCB4KVxuICAgICAgfCBUMiAoeCwgeSkgLT4gVDMgKG9yaWdpbiwgeCwgeSlcbiAgICAgIHwgVDMgKHgsIHksIHopIC0+IFQ0IChvcmlnaW4sIHgsIHksIHopXG4gICAgICB8IFQ0ICh4LCB5LCB6LCB3KSAtPlxuICAgICAgICBsZXQgb2JqX29yaWdpbiA9IG9ial90IG9yaWdpbiBpblxuICAgICAgICBsZXQgZW50cmllcyA9XG4gICAgICAgICAgW3wgb2JqX3QgeDsgb2JqX3QgeTsgb2JqX3Qgejsgb2JqX3Qgdzsgb2JqX29yaWdpbjsgZHVtbXk7IGR1bW15OyBkdW1teSB8XVxuICAgICAgICBpblxuICAgICAgICBmb3IgaSA9IDAgdG8gNCBkbyBhZGRfaWR4IHNlbGYgaSBlbnRyaWVzLihpKSBkb25lO1xuICAgICAgICBUbiB7IGFjdGl2ZSA9IDU7IGNvdW50ID0gNTsgZW50cmllcyB9XG4gICAgICB8IFRuIHRuIGFzIHRyYWNlIC0+XG4gICAgICAgIGxldCBpbmRleCA9IHRuLmNvdW50IGluXG4gICAgICAgIGxldCBlbnRyaWVzLCB0cmFjZSA9XG4gICAgICAgICAgKCogcG9zc2libHkgcmVzaXplIGFycmF5IFtlbnRyaWVzXSAqKVxuICAgICAgICAgIGlmIGluZGV4IDwgQXJyYXkubGVuZ3RoIHRuLmVudHJpZXMgdGhlbiAoXG4gICAgICAgICAgICB0bi5jb3VudCA8LSB0bi5jb3VudCArIDE7XG4gICAgICAgICAgICAodG4uZW50cmllcywgdHJhY2UpXG4gICAgICAgICAgKSBlbHNlIChcbiAgICAgICAgICAgIGxldCBlbnRyaWVzID0gQXJyYXkubWFrZSAoaW5kZXggKiAyKSBkdW1teSBpblxuICAgICAgICAgICAgQXJyYXkuYmxpdCB0bi5lbnRyaWVzIDAgZW50cmllcyAwIGluZGV4O1xuICAgICAgICAgICAgKGVudHJpZXMsIFRuIHsgYWN0aXZlID0gdG4uYWN0aXZlOyBjb3VudCA9IGluZGV4ICsgMTsgZW50cmllcyB9KVxuICAgICAgICAgIClcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IG9ial9vcmlnaW4gPSBvYmpfdCBvcmlnaW4gaW5cbiAgICAgICAgZW50cmllcy4oaW5kZXgpIDwtIG9ial9vcmlnaW47XG4gICAgICAgIGFkZF9pZHggc2VsZiBpbmRleCBvYmpfb3JpZ2luO1xuICAgICAgICB0cmFjZVxuICAgIGluXG4gICAgdC50cmFjZSA8LSB0cmFjZTtcbiAgICBpZiBhY3F1aXJlIHRoZW4gKFxuICAgICAgKCogYWNxdWlyZSBpbW1lZGlhdGUgY2hpbGRyZW4sIGFuZCBzbyBvbiByZWN1cnNpdmVseSAqKVxuICAgICAgbWF0Y2ggdC5kZXNjIHdpdGhcbiAgICAgIHwgTWFwICAoeCwgXykgLT4gc3ViX2FjcXVpcmUgc2VsZiB4XG4gICAgICB8IE1hcDIgKHgsIHksIF8pIC0+XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgeDtcbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiB5XG4gICAgICB8IFBhaXIgKHgsIHkpIC0+XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgeDtcbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiB5XG4gICAgICB8IEFwcCAgKHgsIHkpIC0+XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgeDtcbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiB5XG4gICAgICB8IEZpeCAge2RvYzsgd3J0fSAtPlxuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIGRvYztcbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiB3cnRcbiAgICAgIHwgSm9pbiB7IGNoaWxkOyBpbnRlcm1lZGlhdGUgfSAtPlxuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIGNoaWxkO1xuICAgICAgICBiZWdpbiBtYXRjaCBpbnRlcm1lZGlhdGUgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSBfIC0+XG4gICAgICAgICAgICBhc3NlcnQgZmFsc2UgKCogdGhpcyBjYW4ndCBpbml0aWFsaXplZCBhbHJlYWR5LCBmaXJzdC10aW1lIGFjcXVpcmUgKilcbiAgICAgICAgZW5kXG4gICAgICB8IFZhciAgXyAtPiAoKVxuICAgICAgfCBQcmltIF8gLT4gKClcbiAgICApXG5cbigqIG1ha2Ugc3VyZSB0aGF0IFtvcmlnaW5dIGlzIGluIFtzZWxmLnRyYWNlXSwgcGFzc2VkIGFzIGxhc3QgYXJnLiAqKVxubGV0IGFjdGl2YXRlX3RyYWNpbmcgc2VsZiBvcmlnaW4gPSBmdW5jdGlvblxuICB8IFRuIHRuIC0+XG4gICAgbGV0IGlkeCA9IGdldF9pZHggc2VsZiBvcmlnaW4gaW4gKCogaW5kZXggb2YgW3NlbGZdIGluIFtvcmlnaW4udHJhY2VfaWR4XSAqKVxuICAgIGxldCBhY3RpdmUgPSB0bi5hY3RpdmUgaW5cbiAgICAoKiBbaWR4IDwgYWN0aXZlXSBtZWFucyBbc2VsZl0gaXMgYWxyZWFkeSB0cmFjZWQgYnkgW29yaWdpbl0uXG4gICAgICAgV2Ugb25seSBoYXZlIHRvIGFkZCBbc2VsZl0gdG8gdGhlIGVudHJpZXMgaWYgW2lkeCA+PSBhY3RpdmVdLiAqKVxuICAgIGlmIGlkeCA+PSBhY3RpdmUgdGhlbiAoXG4gICAgICB0bi5hY3RpdmUgPC0gYWN0aXZlICsgMTtcbiAgICApO1xuICAgIGlmIGlkeCA+IGFjdGl2ZSB0aGVuIChcbiAgICAgICgqIHN3YXAgd2l0aCBsYXN0IGVudHJ5IGluIFt0bi5lbnRyaWVzXSAqKVxuICAgICAgbGV0IG9sZCA9IHRuLmVudHJpZXMuKGFjdGl2ZSkgaW5cbiAgICAgIHRuLmVudHJpZXMuKGlkeCkgPC0gb2xkO1xuICAgICAgdG4uZW50cmllcy4oYWN0aXZlKSA8LSBvYmpfdCBvcmlnaW47XG4gICAgICBtb3ZfaWR4IHNlbGYgYWN0aXZlIGlkeCBvbGQ7XG4gICAgICBtb3ZfaWR4IHNlbGYgaWR4IGFjdGl2ZSBvcmlnaW5cbiAgICApXG4gIHwgXyAtPiAoKVxuXG5sZXQgc3ViX2lzX2RhbWFnZWQgPSBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBQdXJlIF8gLT4gZmFsc2VcbiAgfCBPcGVyYXRvciB7dmFsdWU7IF99IC0+XG4gICAgbWF0Y2ggdmFsdWUgd2l0aFxuICAgIHwgRXZhbF9ub25lIC0+IHRydWVcbiAgICB8IEV2YWxfc29tZSBfIC0+IGZhbHNlXG4gICAgfCBFdmFsX3Byb2dyZXNzIC0+IGFzc2VydCBmYWxzZVxuXG4oKiBbc3ViX3NhbXBsZSBvcmlnaW4gc2VsZl0gY29tcHV0ZXMgYSB2YWx1ZSBmb3IgW3NlbGZdLlxuXG4gICBbc3ViX3NhbXBsZV0gcmFpc2UgaWYgYW55IHVzZXItcHJvdmlkZWQgY29tcHV0YXRpb24gcmFpc2VzLlxuICAgR3JhcGggd2lsbCBiZSBsZWZ0IGluIGEgY29oZXJlbnQgc3RhdGUgYnV0IGV4Y2VwdGlvbiB3aWxsIGJlIHByb3BhZ2F0ZWRcbiAgIHRvIHRoZSBvYnNlcnZlci4gKilcbmxldCBzdWJfc2FtcGxlIHF1ZXVlID1cbiAgbGV0IHJlYyBhdXggOiB0eXBlIGEgYiAuIGEgdF8gLT4gYiB0XyAtPiBiID0gZnVuIG9yaWdpbiAtPlxuICAgIGZ1bmN0aW9uXG4gICAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBQdXJlIHggLT4geFxuICAgIHwgT3BlcmF0b3IgdCBhcyBzZWxmIC0+XG4gICAgICAoKiB0cnkgdG8gdXNlIGNhY2hlZCB2YWx1ZSwgaWYgcHJlc2VudCAqKVxuICAgICAgbWF0Y2ggdC52YWx1ZSB3aXRoXG4gICAgICB8IEV2YWxfc29tZSB2YWx1ZSAtPlxuICAgICAgICBhY3RpdmF0ZV90cmFjaW5nIHNlbGYgb3JpZ2luIHQudHJhY2U7XG4gICAgICAgIHZhbHVlXG4gICAgICB8IF8gLT5cbiAgICAgICAgdC52YWx1ZSA8LSBFdmFsX3Byb2dyZXNzO1xuICAgICAgICBsZXQgcmVzdWx0IDogYiA9IG1hdGNoIHQuZGVzYyB3aXRoXG4gICAgICAgICAgfCBNYXAgICh4LCBmKSAtPiBmIChhdXggc2VsZiB4KVxuICAgICAgICAgIHwgTWFwMiAoeCwgeSwgZikgLT4gZiAoYXV4IHNlbGYgeCkgKGF1eCBzZWxmIHkpXG4gICAgICAgICAgfCBQYWlyICh4LCB5KSAtPiAoYXV4IHNlbGYgeCwgYXV4IHNlbGYgeSlcbiAgICAgICAgICB8IEFwcCAgKGYsIHgpIC0+IChhdXggc2VsZiBmKSAoYXV4IHNlbGYgeClcbiAgICAgICAgICB8IEZpeCB7ZG9jOyB3cnR9IC0+XG4gICAgICAgICAgICBsZXQgXyA9IGF1eCBzZWxmIHdydCBpblxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF1eCBzZWxmIGRvYyBpblxuICAgICAgICAgICAgaWYgc3ViX2lzX2RhbWFnZWQgd3J0IHRoZW5cbiAgICAgICAgICAgICAgYXV4IG9yaWdpbiBzZWxmXG4gICAgICAgICAgICBlbHNlIChcbiAgICAgICAgICAgICAgaWYgc3ViX2lzX2RhbWFnZWQgZG9jIHRoZW5cbiAgICAgICAgICAgICAgICBkb19pbnZhbGlkYXRlIEZyYWdpbGUgc2VsZjtcbiAgICAgICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgICApXG4gICAgICAgICAgfCBKb2luIHggLT5cbiAgICAgICAgICAgIGxldCBpbnRlcm1lZGlhdGUgPVxuICAgICAgICAgICAgICAoKiBXZSBoYXZlbid0IHRvdWNoZWQgYW55IHN0YXRlIHlldCxcbiAgICAgICAgICAgICAgICAgaXQgaXMgc2FmZSBmb3IgW2F1eF0gdG8gcmFpc2UgKilcbiAgICAgICAgICAgICAgYXV4IHNlbGYgeC5jaGlsZFxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIHguaW50ZXJtZWRpYXRlIHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICAgICAgeC5pbnRlcm1lZGlhdGUgPC0gU29tZSBpbnRlcm1lZGlhdGU7XG4gICAgICAgICAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiBpbnRlcm1lZGlhdGU7XG4gICAgICAgICAgICAgIHwgU29tZSB4JyB3aGVuIHgnICE9IGludGVybWVkaWF0ZSAtPlxuICAgICAgICAgICAgICAgIHF1ZXVlIDo9IFJlbGVhc2VfbW9yZSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbiA9IHNlbGY7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSB4JztcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9ICFxdWV1ZTtcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgeC5pbnRlcm1lZGlhdGUgPC0gU29tZSBpbnRlcm1lZGlhdGU7XG4gICAgICAgICAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiBpbnRlcm1lZGlhdGU7XG4gICAgICAgICAgICAgIHwgU29tZSBfIC0+ICgpXG4gICAgICAgICAgICBlbmQ7XG4gICAgICAgICAgICBhdXggc2VsZiBpbnRlcm1lZGlhdGVcbiAgICAgICAgICB8IFZhciAgeCAtPiB4LmJpbmRpbmdcbiAgICAgICAgICB8IFByaW0gdCAtPiB0LmFjcXVpcmUgKGluaiBzZWxmKVxuICAgICAgICBpblxuICAgICAgICBiZWdpbiBtYXRjaCB0LnZhbHVlIHdpdGhcbiAgICAgICAgICB8IEV2YWxfcHJvZ3Jlc3MgLT4gdC52YWx1ZSA8LSBFdmFsX3NvbWUgcmVzdWx0O1xuICAgICAgICAgIHwgRXZhbF9ub25lIHwgRXZhbF9zb21lIF8gLT4gKClcbiAgICAgICAgZW5kO1xuICAgICAgICAoKiBbc2VsZl0ganVzdCBiZWNhbWUgYWN0aXZlLCBzbyBpdCBtYXkgaW52YWxpZGF0ZSBbb3JpZ2luXSBpbiBjYXNlIGl0c1xuICAgICAgICAgICB2YWx1ZSBjaGFuZ2VzIGJlY2F1c2Ugb2YgW3QuZGVzY10sIGxpa2UgaWYgaXQncyBhIHZhcmlhYmxlIGFuZCBnZXRzXG4gICAgICAgICAgIG11dGF0ZWQsIG9yIGlmIGl0J3MgYSBwcmltaXRpdmUgdGhhdCBnZXRzIGludmFsaWRhdGVkLlxuICAgICAgICAgICBXZSBuZWVkIHRvIHB1dCBbb3JpZ2luXSBpbnRvIFtzZWxmLnRyYWNlXSBpbiBjYXNlIGl0IGlzbid0IHRoZXJlIHlldC4gKilcbiAgICAgICAgYWN0aXZhdGVfdHJhY2luZyBzZWxmIG9yaWdpbiB0LnRyYWNlO1xuICAgICAgICByZXN1bHRcbiAgaW5cbiAgYXV4XG5cbnR5cGUgJ2Egcm9vdCA9ICdhIHRcblxubGV0IG9ic2VydmUgPyhvbl9pbnZhbGlkYXRlPWlnbm9yZSkgY2hpbGQgOiBfIHJvb3QgPVxuICBsZXQgcm9vdCA9IFJvb3Qge1xuICAgICAgY2hpbGQgPSBwcmogY2hpbGQ7XG4gICAgICB2YWx1ZSA9IEV2YWxfbm9uZTtcbiAgICAgIG9uX2ludmFsaWRhdGU7XG4gICAgICB0cmFjZV9pZHggPSBJMDtcbiAgICAgIGFjcXVpcmVkID0gZmFsc2U7XG4gICAgfSBpblxuICBpbmogcm9vdFxuXG5leGNlcHRpb24gUmVsZWFzZV9mYWlsdXJlIG9mIGV4biBvcHRpb24gKiByZWxlYXNlX2ZhaWx1cmUgbGlzdFxuXG5sZXQgcmF3X2ZsdXNoX3JlbGVhc2VfcXVldWUgcXVldWUgPVxuICBsZXQgcmVjIGF1eCBmYWlsdXJlcyA9IGZ1bmN0aW9uXG4gICAgfCBSZWxlYXNlX2RvbmUgLT4gZmFpbHVyZXNcbiAgICB8IFJlbGVhc2VfbW9yZSB0IC0+XG4gICAgICBsZXQgZmFpbHVyZXMgPSBzdWJfcmVsZWFzZSBmYWlsdXJlcyB0Lm9yaWdpbiB0LmVsZW1lbnQgaW5cbiAgICAgIGF1eCBmYWlsdXJlcyB0Lm5leHRcbiAgaW5cbiAgYXV4IFtdIHF1ZXVlXG5cbmxldCBmbHVzaF9yZWxlYXNlX3F1ZXVlIHF1ZXVlID1cbiAgbGV0IHF1ZXVlJyA9ICFxdWV1ZSBpblxuICBxdWV1ZSA6PSBSZWxlYXNlX2RvbmU7XG4gIHJhd19mbHVzaF9yZWxlYXNlX3F1ZXVlIHF1ZXVlJ1xuXG5sZXQgc2FtcGxlIHF1ZXVlIHggPSBtYXRjaCBwcmogeCB3aXRoXG4gIHwgUHVyZSBfIHwgT3BlcmF0b3IgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHQgYXMgc2VsZiAtPlxuICAgIG1hdGNoIHQudmFsdWUgd2l0aFxuICAgIHwgRXZhbF9zb21lIHZhbHVlIC0+IHZhbHVlXG4gICAgfCBfIC0+XG4gICAgICAoKiBubyBjYWNoZWQgdmFsdWUsIGNvbXB1dGUgaXQgbm93ICopXG4gICAgICBpZiBub3QgdC5hY3F1aXJlZCB0aGVuIChcbiAgICAgICAgdC5hY3F1aXJlZCA8LSB0cnVlO1xuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIHQuY2hpbGQ7XG4gICAgICApO1xuICAgICAgdC52YWx1ZSA8LSBFdmFsX3Byb2dyZXNzO1xuICAgICAgbGV0IHZhbHVlID0gc3ViX3NhbXBsZSBxdWV1ZSBzZWxmIHQuY2hpbGQgaW5cbiAgICAgIGJlZ2luIG1hdGNoIHQudmFsdWUgd2l0aFxuICAgICAgICB8IEV2YWxfcHJvZ3Jlc3MgLT4gdC52YWx1ZSA8LSBFdmFsX3NvbWUgdmFsdWU7ICgqIGNhY2hlIHZhbHVlICopXG4gICAgICAgIHwgRXZhbF9ub25lIHwgRXZhbF9zb21lIF8gLT4gKClcbiAgICAgIGVuZDtcbiAgICAgIHZhbHVlXG5cbmxldCBpc19kYW1hZ2VkIHggPSBtYXRjaCBwcmogeCB3aXRoXG4gIHwgUHVyZSBfIHwgT3BlcmF0b3IgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHt2YWx1ZSA9IEV2YWxfc29tZSBfOyBffSAtPiBmYWxzZVxuICB8IFJvb3Qge3ZhbHVlID0gRXZhbF9ub25lIHwgRXZhbF9wcm9ncmVzczsgX30gLT4gdHJ1ZVxuXG5sZXQgcmVsZWFzZSBxdWV1ZSB4ID0gbWF0Y2ggcHJqIHggd2l0aFxuICB8IFB1cmUgXyB8IE9wZXJhdG9yIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCB0IGFzIHNlbGYgLT5cbiAgICBpZiB0LmFjcXVpcmVkIHRoZW4gKFxuICAgICAgKCogcmVsZWFzZSBzdWJ0cmVlLCByZW1vdmUgY2FjaGVkIHZhbHVlICopXG4gICAgICB0LnZhbHVlIDwtIEV2YWxfbm9uZTtcbiAgICAgIHQuYWNxdWlyZWQgPC0gZmFsc2U7XG4gICAgICBxdWV1ZSA6PSBSZWxlYXNlX21vcmUgeyBvcmlnaW4gPSBzZWxmOyBlbGVtZW50ID0gdC5jaGlsZDsgbmV4dCA9ICFxdWV1ZSB9XG4gICAgKVxuXG5sZXQgc2V0X29uX2ludmFsaWRhdGUgeCBmID1cbiAgbWF0Y2ggcHJqIHggd2l0aFxuICB8IFB1cmUgXyB8IE9wZXJhdG9yIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCB0IC0+IHQub25faW52YWxpZGF0ZSA8LSBmXG5cbmxldCBmbHVzaF9vcl9mYWlsIG1haW5fZXhuIHF1ZXVlID1cbiAgbWF0Y2ggZmx1c2hfcmVsZWFzZV9xdWV1ZSBxdWV1ZSB3aXRoXG4gIHwgW10gLT4gKClcbiAgfCBmYWlsdXJlcyAtPiByYWlzZSAoUmVsZWFzZV9mYWlsdXJlIChtYWluX2V4biwgZmFpbHVyZXMpKVxuXG5sZXQgcXVpY2tfc2FtcGxlIHJvb3QgPVxuICBsZXQgcXVldWUgPSByZWYgUmVsZWFzZV9kb25lIGluXG4gIG1hdGNoIHNhbXBsZSBxdWV1ZSByb290IHdpdGhcbiAgfCByZXN1bHQgLT4gZmx1c2hfb3JfZmFpbCBOb25lIHF1ZXVlOyByZXN1bHRcbiAgfCBleGNlcHRpb24gZXhuIC0+IGZsdXNoX29yX2ZhaWwgKFNvbWUgZXhuKSBxdWV1ZTsgcmFpc2UgZXhuXG5cbmxldCBxdWlja19yZWxlYXNlIHJvb3QgPVxuICBsZXQgcXVldWUgPSByZWYgUmVsZWFzZV9kb25lIGluXG4gIHJlbGVhc2UgcXVldWUgcm9vdDtcbiAgZmx1c2hfb3JfZmFpbCBOb25lIHF1ZXVlXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKD4+PSkgeCBmID0gYmluZCB4IH5mXG4gIGxldCAoPnw9KSB4IGYgPSBtYXAgeCB+ZlxuICBsZXQgKDwqPikgPSBhcHBcbmVuZFxuXG4oKiRSXG4gIGxldCB4ID0gdmFyIDAgaW5cbiAgbGV0IHkgPSBtYXAgfmY6c3VjYyAoZ2V0IHgpIGluXG4gIGxldCBvX3kgPSBMd2Qub2JzZXJ2ZSB5IGluXG4gIGFzc2VydF9lcXVhbCAxIChxdWlja19zYW1wbGUgb195KTtcbiAgc2V0IHggMTA7XG4gIGFzc2VydF9lcXVhbCAxMSAocXVpY2tfc2FtcGxlIG9feSk7XG4gICopXG4iLCJcbnR5cGUgJ2EgbW9ub2lkID0gJ2EgKiAoJ2EgLT4gJ2EgLT4gJ2EpXG5cbmxldCBsaWZ0X21vbm9pZCAoemVybywgcGx1cykgPVxuICAoTHdkLnJldHVybiB6ZXJvLCBMd2QubWFwMiB+ZjpwbHVzKVxuXG5sZXQgbWFwX3JlZHVjZSBpbmogKHplcm8sIHBsdXMpIGl0ZW1zID1cbiAgbGV0IHJlYyBjb25zX21vbm9pZCBjIHhzIHYgPVxuICAgIG1hdGNoIHhzIHdpdGhcbiAgICB8IChjJywgdicpIDo6IHhzIHdoZW4gYyA9IGMnIC0+XG4gICAgICBjb25zX21vbm9pZCAoYyArIDEpIHhzIChwbHVzIHYnIHYpXG4gICAgfCB4cyAtPiAoYywgdikgOjogeHNcbiAgaW5cbiAgbGV0IGNvbnNfbW9ub2lkIHhzIHYgPSBjb25zX21vbm9pZCAwIHhzIChpbmogdikgaW5cbiAgbWF0Y2ggTGlzdC5mb2xkX2xlZnQgY29uc19tb25vaWQgW10gaXRlbXMgd2l0aFxuICB8IFtdIC0+IHplcm9cbiAgfCAoXyx4KSA6OiB4cyAtPlxuICAgIExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIChfLCB2KSAtPiBwbHVzIHYgYWNjKSB4IHhzXG5cbmxldCByZWR1Y2UgbW9ub2lkIGl0ZW1zID0gbWFwX3JlZHVjZSAoZnVuIHggLT4geCkgbW9ub2lkIGl0ZW1zXG5cbmxldCByZWMgY29uc19sd2RfbW9ub2lkIHBsdXMgYyB4cyB2ID1cbiAgbWF0Y2ggeHMgd2l0aFxuICB8IChjJywgdicpIDo6IHhzIHdoZW4gYyA9IGMnIC0+XG4gICAgY29uc19sd2RfbW9ub2lkIHBsdXMgKGMgKyAxKSB4cyAoTHdkLm1hcDIgfmY6cGx1cyB2JyB2KVxuICB8IHhzIC0+IChjLCB2KSA6OiB4c1xuXG5sZXQgcGFjayAoemVybywgcGx1cykgaXRlbXMgPVxuICBtYXRjaCBMaXN0LmZvbGRfbGVmdCAoY29uc19sd2RfbW9ub2lkIHBsdXMgMCkgW10gaXRlbXMgd2l0aFxuICB8IFtdIC0+IEx3ZC5yZXR1cm4gemVyb1xuICB8IChfLHgpIDo6IHhzIC0+XG4gICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgKF8sIHYpIC0+IEx3ZC5tYXAyIH5mOnBsdXMgdiBhY2MpIHggeHNcblxubGV0IHBhY2tfc2VxICh6ZXJvLCBwbHVzKSBpdGVtcyA9XG4gIG1hdGNoIFNlcS5mb2xkX2xlZnQgKGNvbnNfbHdkX21vbm9pZCBwbHVzIDApIFtdIGl0ZW1zIHdpdGhcbiAgfCBbXSAtPiBMd2QucmV0dXJuIHplcm9cbiAgfCAoXyx4KSA6OiB4cyAtPlxuICAgIExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIChfLCB2KSAtPiBMd2QubWFwMiB+ZjpwbHVzIHYgYWNjKSB4IHhzXG5cbmxldCByZWMgbWFwX2wgKGY6J2EgLT4gJ2IgTHdkLnQpIChsOidhIGxpc3QpIDogJ2IgbGlzdCBMd2QudCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IEx3ZC5yZXR1cm4gW11cbiAgfCB4IDo6IHRsIC0+IEx3ZC5tYXAyIH5mOkxpc3QuY29ucyAoZiB4KSAobWFwX2wgZiB0bClcblxubGV0IGZsYXR0ZW5fbCAobDonYSBMd2QudCBsaXN0KSA6ICdhIGxpc3QgTHdkLnQgPVxuICBtYXBfbCAoZnVuIHgtPngpIGxcblxuKCoqIHsxIE1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zfVxuXG4gICAgSSBkb24ndCBrbm93IHdoZXJlIHRvIHB1dCB0aGVzZSwgYnV0IHRoZXkgYXJlIHVzZWZ1bCwgZXNwZWNpYWxseSBmb3JcbiAgICBVSS1yZWxhdGVkIGNvbXB1dGF0aW9ucy5cbiopXG5cbmxldCBtaW5pIGEgYiA6IGludCA9IGlmIGIgPCBhIHRoZW4gYiBlbHNlIGFcblxubGV0IG1heGkgYSBiIDogaW50ID0gaWYgYiA+IGEgdGhlbiBiIGVsc2UgYVxuXG5sZXQgY2xhbXBpIHggfm1pbiB+bWF4IDogaW50ID1cbiAgaWYgeCA8IG1pbiB0aGVuXG4gICAgbWluXG4gIGVsc2UgaWYgeCA+IG1heCB0aGVuXG4gICAgbWF4XG4gIGVsc2VcbiAgICB4XG5cbmxldCBtaW5mIGEgYiA6IGZsb2F0ID0gaWYgYiA8IGEgdGhlbiBiIGVsc2UgYVxuXG5sZXQgbWF4ZiBhIGIgOiBmbG9hdCA9IGlmIGIgPiBhIHRoZW4gYiBlbHNlIGFcblxubGV0IGNsYW1wZiB4IH5taW4gfm1heCA6IGZsb2F0ID1cbiAgaWYgeCA8IG1pbiB0aGVuXG4gICAgbWluXG4gIGVsc2UgaWYgeCA+IG1heCB0aGVuXG4gICAgbWF4XG4gIGVsc2VcbiAgICB4XG4iLCJ0eXBlICdhIGJpbmRpbmcgPVxuICB8IEJvdW5kIG9mIHsgdmFsdWUgOiAnYSA7IG11dGFibGUgdmFsaWQgOiBib29sIH1cbiAgfCBVbmJvdW5kXG5cbnR5cGUgJ2EgdHJlZSA9XG4gIHwgTGVhZlxuICB8IE5vZGUgb2Yge1xuICAgICAgbXV0YWJsZSB2ZXJzaW9uIDogaW50O1xuICAgICAgbXV0YWJsZSBsZWZ0ICAgIDogJ2EgdHJlZTtcbiAgICAgIG11dGFibGUgYmluZGluZyA6ICdhIGJpbmRpbmc7XG4gICAgICBtdXRhYmxlIHJpZ2h0ICAgOiAnYSB0cmVlO1xuICAgICAgbXV0YWJsZSBwYXJlbnQgIDogJ2EgdHJlZTtcbiAgICAgIG11dGFibGUgc2l6ZSAgICA6IGludDtcbiAgICB9XG4gIHwgUm9vdCBvZiB7XG4gICAgICBtdXRhYmxlIHZlcnNpb24gOiBpbnQ7XG4gICAgICBtdXRhYmxlIGNoaWxkIDogJ2EgdHJlZTtcbiAgICAgIG11dGFibGUgZ2VuZXJhdGlvbiA6IHVuaXQgcmVmO1xuICAgICAgbXV0YWJsZSBvbl9pbnZhbGlkYXRlIDogT2JqLnQgTHdkLnByaW0gbGlzdDtcbiAgICB9XG5cbnR5cGUgJ2EgdCA9ICdhIHRyZWVcbnR5cGUgJ2Egcm93ID0gJ2EgdHJlZVxuXG5sZXQgbm90X29yaWdpbiA9IHJlZiAoKSAoKiBub3QgeyFvcmlnaW59ICopXG5sZXQgb3JpZ2luID0gcmVmICgpICgqIG5vdCB7IW5vdF9vcmlnaW59ICopXG5cbmxldCBtYWtlICgpID1cbiAgUm9vdCB7IGNoaWxkID0gTGVhZjsgZ2VuZXJhdGlvbiA9IG9yaWdpbjsgdmVyc2lvbiA9IDA7IG9uX2ludmFsaWRhdGUgPSBbXSB9XG5cbmxldCBzZXRfcGFyZW50IH5wYXJlbnQgPSBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBOb2RlIG4gLT4gbi5wYXJlbnQgPC0gcGFyZW50XG4gIHwgTGVhZiAtPiAoKVxuXG5sZXQgcmVwYXJlbnQgfnBhcmVudCB+b2xkY2hpbGQgfm5ld2NoaWxkID1cbiAgbWF0Y2ggcGFyZW50IHdpdGhcbiAgfCBSb290IHIgLT5cbiAgICBhc3NlcnQgKHIuY2hpbGQgPT0gb2xkY2hpbGQpO1xuICAgIHIuY2hpbGQgPC0gbmV3Y2hpbGRcbiAgfCBOb2RlIG4gd2hlbiBuLmxlZnQgPT0gb2xkY2hpbGQgLT5cbiAgICBuLmxlZnQgPC0gbmV3Y2hpbGRcbiAgfCBOb2RlIG4gd2hlbiBuLnJpZ2h0ID09IG9sZGNoaWxkIC0+XG4gICAgbi5yaWdodCA8LSBuZXdjaGlsZFxuICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBtYWtlX25vZGUgc2V0IH5sZWZ0IH5yaWdodCB+cGFyZW50ID1cbiAgbGV0IGJpbmRpbmcgPSBtYXRjaCBzZXQgd2l0aFxuICAgIHwgTm9uZSAtPiBVbmJvdW5kXG4gICAgfCBTb21lIHZhbHVlIC0+IEJvdW5kIHsgdmFsdWUgOyB2YWxpZCA9IHRydWUgfVxuICBpblxuICBsZXQgbm9kZSA9IE5vZGUgeyBsZWZ0OyByaWdodDsgcGFyZW50OyB2ZXJzaW9uID0gMDsgc2l6ZSA9IDA7IGJpbmRpbmcgfSBpblxuICBzZXRfcGFyZW50IGxlZnQgIH5wYXJlbnQ6bm9kZTtcbiAgc2V0X3BhcmVudCByaWdodCB+cGFyZW50Om5vZGU7XG4gIG5vZGVcblxubGV0IHJlYyByYXdfaW52YWxpZGF0ZSA9IGZ1bmN0aW9uXG4gIHwgTm9kZSB7IHNpemUgPSAwOyBfIH0gLT4gKClcbiAgfCBOb2RlIHQgLT5cbiAgICB0LnNpemUgPC0gMDtcbiAgICByYXdfaW52YWxpZGF0ZSB0LnBhcmVudFxuICB8IFJvb3QgciAtPlxuICAgIExpc3QuaXRlciBMd2QuaW52YWxpZGF0ZSByLm9uX2ludmFsaWRhdGVcbiAgfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcHJlcGVuZCA/c2V0ID0gZnVuY3Rpb25cbiAgfCBSb290IHIgYXMgcGFyZW50IC0+XG4gICAgcmF3X2ludmFsaWRhdGUgcGFyZW50O1xuICAgIGxldCBub2RlID0gbWFrZV9ub2RlIHNldCB+bGVmdDpMZWFmIH5yaWdodDpyLmNoaWxkIH5wYXJlbnQgaW5cbiAgICByLmNoaWxkIDwtIG5vZGU7XG4gICAgbm9kZVxuICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBwcmVwZW5kJyB4IHNldCA9IGlnbm9yZSAocHJlcGVuZCB4IH5zZXQpXG5cbmxldCBhcHBlbmQgP3NldCA9IGZ1bmN0aW9uXG4gIHwgUm9vdCByIGFzIHBhcmVudCAtPlxuICAgIHJhd19pbnZhbGlkYXRlIHBhcmVudDtcbiAgICBsZXQgbm9kZSA9IG1ha2Vfbm9kZSBzZXQgfmxlZnQ6ci5jaGlsZCB+cmlnaHQ6TGVhZiB+cGFyZW50IGluXG4gICAgci5jaGlsZCA8LSBub2RlO1xuICAgIG5vZGVcbiAgfCBMZWFmIHwgTm9kZSBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgYXBwZW5kJyB4IHNldCA9IGlnbm9yZSAoYXBwZW5kIHggfnNldClcblxubGV0IGJlZm9yZSA/c2V0ID0gZnVuY3Rpb25cbiAgfCBOb2RlIHsgcGFyZW50ID0gTGVhZiA7IF8gfSB8IExlYWYgLT4gTGVhZlxuICB8IE5vZGUgbiBhcyBwYXJlbnQgLT5cbiAgICByYXdfaW52YWxpZGF0ZSBwYXJlbnQ7XG4gICAgbGV0IG5vZGUgPSBtYWtlX25vZGUgc2V0IH5sZWZ0Om4ubGVmdCB+cmlnaHQ6TGVhZiB+cGFyZW50IGluXG4gICAgbi5sZWZ0IDwtIG5vZGU7XG4gICAgbm9kZVxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGFmdGVyID9zZXQgPSBmdW5jdGlvblxuICB8IE5vZGUgeyBwYXJlbnQgPSBMZWFmIDsgXyB9IHwgTGVhZiAtPiBMZWFmXG4gIHwgTm9kZSBuIGFzIHBhcmVudCAtPlxuICAgIHJhd19pbnZhbGlkYXRlIHBhcmVudDtcbiAgICBsZXQgbm9kZSA9IG1ha2Vfbm9kZSBzZXQgfmxlZnQ6TGVhZiB+cmlnaHQ6bi5yaWdodCB+cGFyZW50IGluXG4gICAgbi5yaWdodCA8LSBub2RlO1xuICAgIG5vZGVcbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBnZXQgPSBmdW5jdGlvblxuICB8IE5vZGUgeyBiaW5kaW5nID0gQm91bmQgeyB2YWx1ZSA7IF8gfSA7IF8gfSAtPiBTb21lIHZhbHVlXG4gIHwgTGVhZiB8IFJvb3QgXyB8IE5vZGUgeyBiaW5kaW5nID0gVW5ib3VuZCA7IF8gfSAtPiBOb25lXG5cbmxldCBpbnZhbGlkYXRlX2JpbmRpbmcgPSBmdW5jdGlvblxuICB8IFVuYm91bmQgLT4gKClcbiAgfCBCb3VuZCBiIC0+IGIudmFsaWQgPC0gZmFsc2VcblxubGV0IHNldF9iaW5kaW5nIHggPSBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBMZWFmIHwgTm9kZSB7IHBhcmVudCA9IExlYWY7IF8gfSAtPiAoKVxuICB8IE5vZGUgbiBhcyB0IC0+XG4gICAgcmF3X2ludmFsaWRhdGUgdDtcbiAgICBpbnZhbGlkYXRlX2JpbmRpbmcgbi5iaW5kaW5nO1xuICAgIG4uYmluZGluZyA8LSB4XG5cbmxldCBzZXQgdCB2YWx1ZSA9IHNldF9iaW5kaW5nIChCb3VuZCB7IHZhbHVlOyB2YWxpZCA9IHRydWUgfSkgdFxubGV0IHVuc2V0IHQgPSBzZXRfYmluZGluZyBVbmJvdW5kIHRcblxubGV0IGlzX2JvdW5kID0gZnVuY3Rpb25cbiAgfCBMZWFmIHwgTm9kZSB7IHBhcmVudCA9IExlYWY7IF8gfSAtPiBmYWxzZVxuICB8IFJvb3QgXyB8IE5vZGUgXyAtPiB0cnVlXG5cbmxldCByZWMgam9pbiBsZWZ0ID0gZnVuY3Rpb25cbiAgfCBSb290IF8gfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICB8IE5vZGUgKHsgbGVmdCA9IExlYWY7IF8gfSBhcyBuKSBhcyBzZWxmIC0+XG4gICAgbi5sZWZ0IDwtIGxlZnQ7XG4gICAgc2V0X3BhcmVudCBsZWZ0IH5wYXJlbnQ6c2VsZjtcbiAgICBzZWxmXG4gIHwgTm9kZSBub2RlIC0+XG4gICAgam9pbiBsZWZ0IG5vZGUubGVmdFxuXG5sZXQgcmVtb3ZlID0gZnVuY3Rpb25cbiAgfCBSb290IF8gfCBMZWFmIHwgTm9kZSB7cGFyZW50ID0gTGVhZjsgX30gLT4gKClcbiAgfCBOb2RlICh7bGVmdDsgcmlnaHQ7IHBhcmVudDsgX30gYXMgbikgYXMgdCAtPlxuICAgIGludmFsaWRhdGVfYmluZGluZyBuLmJpbmRpbmc7XG4gICAgbi5sZWZ0IDwtIExlYWY7XG4gICAgbi5yaWdodCA8LSBMZWFmO1xuICAgIG4ucGFyZW50IDwtIExlYWY7XG4gICAgbi5iaW5kaW5nIDwtIFVuYm91bmQ7XG4gICAgbi52ZXJzaW9uIDwtIG1heF9pbnQ7XG4gICAgbGV0IGpvaW4sIGludmFsaWQgPSBtYXRjaCBsZWZ0LCByaWdodCB3aXRoXG4gICAgICB8IExlYWYsIG90aGVyIHwgb3RoZXIsIExlYWYgLT4gKG90aGVyLCBwYXJlbnQpXG4gICAgICB8IF8gLT4gKHJpZ2h0LCBqb2luIGxlZnQgcmlnaHQpXG4gICAgaW5cbiAgICByZXBhcmVudCB+cGFyZW50IH5vbGRjaGlsZDp0IH5uZXdjaGlsZDpqb2luO1xuICAgIHNldF9wYXJlbnQgam9pbiB+cGFyZW50O1xuICAgIHJhd19pbnZhbGlkYXRlIGludmFsaWRcblxubGV0IHJlYyBjbGVhciA9IGZ1bmN0aW9uXG4gIHwgTGVhZiAtPiAoKVxuICB8IE5vZGUgKHtsZWZ0OyByaWdodDsgX30gYXMgbikgLT5cbiAgICBpbnZhbGlkYXRlX2JpbmRpbmcgbi5iaW5kaW5nO1xuICAgIG4ubGVmdCA8LSBMZWFmO1xuICAgIG4ucmlnaHQgPC0gTGVhZjtcbiAgICBuLnBhcmVudCA8LSBMZWFmO1xuICAgIG4uYmluZGluZyA8LSBVbmJvdW5kO1xuICAgIG4udmVyc2lvbiA8LSBtYXhfaW50O1xuICAgIGNsZWFyIGxlZnQ7XG4gICAgY2xlYXIgcmlnaHRcbiAgfCBSb290IHIgYXMgcm9vdCAtPlxuICAgIGxldCBjaGlsZCA9IHIuY2hpbGQgaW5cbiAgICByLmNoaWxkIDwtIExlYWY7XG4gICAgY2xlYXIgY2hpbGQ7XG4gICAgcmF3X2ludmFsaWRhdGUgcm9vdFxuXG4oKiBUcmVlIGJhbGFuY2luZyAqKVxuXG5sZXQgc2l6ZSA9IGZ1bmN0aW9uXG4gIHwgTm9kZSBub2RlIC0+XG4gICAgYXNzZXJ0IChub2RlLnNpemUgPD4gMCk7XG4gICAgbm9kZS5zaXplXG4gIHwgTGVhZiAtPiAwXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuXG4oKiogW3NtYWxsZXJfZWxsIHNtaW4gc21heF0gaWZmXG4gICAgLSBbc21pbl0gaXMgbGVzcyB0aGFuIFtzbWF4XVxuICAgIC0gW3NtaW5dIGFuZCBbc21heF0gZGlmZmVycyBieSBsZXNzIHRoYW4gdHdvIG1hZ25pdHVkZSBvcmRlcnMsIGkuZVxuICAgICAgbXNicyhzbWluKSA+PSBtc2JzKHNtYXgpIC0gMVxuICAgICAgd2hlcmUgbXNicyBpcyB0aGUgaW5kZXggb2YgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHNldCAqKVxubGV0IHNtYWxsZXJfZWxsIHNtaW4gc21heCA9IChzbWluIDwgc21heCkgJiYgKChzbWluIGxhbmQgc21heCkgbHNsIDEgPCBzbWF4KVxuXG4oKiogW2Rpc2JhbGFuY2VkIHNtaW4gc21heF0gY2hlY2sgaWYgdHdvIHN1Yi10cmVlcyBvZiBzaXplIFtzbWluXSBhbmQgW3NtYXhdLFxuICAgIGFyZSBkaXNiYWxhbmN6ZWQuIFRoYXQgaXMsIG1zYnMoc21pbikgPCBtc2JzKHNtYXgpIC0gMSAqKVxubGV0IGRpc2JhbGFuY2VkIHNtaW4gc21heCA9IHNtYWxsZXJfZWxsIHNtaW4gKHNtYXggbHNyIDEpXG5cbmxldCByZXBhcmVudCB+cGFyZW50IH5vbGRjaGlsZCB+bmV3Y2hpbGQgPVxuICBtYXRjaCBwYXJlbnQgd2l0aFxuICB8IFJvb3QgciAtPlxuICAgIGFzc2VydCAoci5jaGlsZCA9PSBvbGRjaGlsZCk7XG4gICAgci5jaGlsZCA8LSBuZXdjaGlsZDtcbiAgfCBOb2RlIG4gd2hlbiBuLmxlZnQgPT0gb2xkY2hpbGQgLT5cbiAgICBuLmxlZnQgPC0gbmV3Y2hpbGRcbiAgfCBOb2RlIG4gd2hlbiBuLnJpZ2h0ID09IG9sZGNoaWxkIC0+XG4gICAgbi5yaWdodCA8LSBuZXdjaGlsZFxuICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCByZWMgcm90X2xlZnQgdmVyc2lvbiA9IGZ1bmN0aW9uXG4gIHwgTm9kZSAoeyByaWdodCA9IChOb2RlIHJuKSBhcyByOyBffSBhcyBzbikgYXMgcyAtPlxuICAgIGxldCBwYXJlbnQgPSBzbi5wYXJlbnQgaW5cbiAgICBsZXQgcmwgPSBtYXRjaCBybi5sZWZ0IHdpdGhcbiAgICAgIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBMZWFmIC0+IExlYWZcbiAgICAgIHwgKE5vZGUgcmxuKSBhcyBybCAtPlxuICAgICAgICBybG4ucGFyZW50IDwtIHM7XG4gICAgICAgIHJsXG4gICAgaW5cbiAgICBybi5sZWZ0IDwtIHM7XG4gICAgc24ucmlnaHQgPC0gcmw7XG4gICAgc24ucGFyZW50IDwtIHI7XG4gICAgcm4ucGFyZW50IDwtIHBhcmVudDtcbiAgICByZXBhcmVudCB+cGFyZW50IH5vbGRjaGlsZDpzIH5uZXdjaGlsZDpyO1xuICAgIGlnbm9yZSAoYmFsYW5jZSB2ZXJzaW9uIHMpO1xuICAgIGJhbGFuY2UgdmVyc2lvbiByXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuYW5kIHJvdF9yaWdodCB2ZXJzaW9uID0gZnVuY3Rpb25cbiAgfCBOb2RlICh7IGxlZnQgPSAoTm9kZSBsbikgYXMgbDsgX30gYXMgc24pIGFzIHMgLT5cbiAgICBsZXQgcGFyZW50ID0gc24ucGFyZW50IGluXG4gICAgbGV0IGxyID0gbWF0Y2ggbG4ucmlnaHQgd2l0aFxuICAgICAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IExlYWYgLT4gTGVhZlxuICAgICAgfCAoTm9kZSBscm4pIGFzIGxyIC0+XG4gICAgICAgIGxybi5wYXJlbnQgPC0gcztcbiAgICAgICAgbHJcbiAgICBpblxuICAgIGxuLnJpZ2h0IDwtIHM7XG4gICAgc24ubGVmdCA8LSBscjtcbiAgICBzbi5wYXJlbnQgPC0gbDtcbiAgICBsbi5wYXJlbnQgPC0gcGFyZW50O1xuICAgIHJlcGFyZW50IH5wYXJlbnQgfm9sZGNoaWxkOnMgfm5ld2NoaWxkOmw7XG4gICAgaWdub3JlIChiYWxhbmNlIHZlcnNpb24gcyk7XG4gICAgYmFsYW5jZSB2ZXJzaW9uIGxcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5hbmQgaW5jX2xlZnQgdmVyc2lvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgfCBOb2RlIHtyaWdodDsgX30gYXMgc2VsZiAtPlxuICAgIGJlZ2luIG1hdGNoIHJpZ2h0IHdpdGhcbiAgICAgIHwgTm9kZSBybiB3aGVuIHNtYWxsZXJfZWxsIChzaXplIHJuLnJpZ2h0KSAoc2l6ZSBybi5sZWZ0KSAtPlxuICAgICAgICBpZ25vcmUgKHJvdF9yaWdodCB2ZXJzaW9uIHJpZ2h0KVxuICAgICAgfCBfIC0+ICgpXG4gICAgZW5kO1xuICAgIHJvdF9sZWZ0IHZlcnNpb24gc2VsZlxuXG5hbmQgaW5jX3JpZ2h0IHZlcnNpb24gPSBmdW5jdGlvblxuICB8IFJvb3QgXyB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTm9kZSB7bGVmdDsgX30gYXMgc2VsZiAtPlxuICAgIGJlZ2luIG1hdGNoIGxlZnQgd2l0aFxuICAgICAgfCBOb2RlIGxuIHdoZW4gc21hbGxlcl9lbGwgKHNpemUgbG4ubGVmdCkgKHNpemUgbG4ucmlnaHQpIC0+XG4gICAgICAgIGlnbm9yZSAocm90X2xlZnQgdmVyc2lvbiBsZWZ0KVxuICAgICAgfCBfIC0+ICgpXG4gICAgZW5kO1xuICAgIHJvdF9yaWdodCB2ZXJzaW9uIHNlbGZcblxuYW5kIGJhbGFuY2UgdmVyc2lvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgfCBOb2RlIG5vZGUgYXMgc2VsZiAtPlxuICAgIGxldCBzbCA9IHNpemUgbm9kZS5sZWZ0IGFuZCBzciA9IHNpemUgbm9kZS5yaWdodCBpblxuICAgIGlmIHNsIDwgc3IgdGhlbiAoXG4gICAgICBpZiBkaXNiYWxhbmNlZCBzbCBzclxuICAgICAgdGhlbiBpbmNfbGVmdCB2ZXJzaW9uIHNlbGZcbiAgICAgIGVsc2UgKG5vZGUudmVyc2lvbiA8LSB2ZXJzaW9uOyBub2RlLnNpemUgPC0gMSArIHNsICsgc3I7IHNlbGYpXG4gICAgKSBlbHNlIChcbiAgICAgIGlmIGRpc2JhbGFuY2VkIHNyIHNsXG4gICAgICB0aGVuIGluY19yaWdodCB2ZXJzaW9uIHNlbGZcbiAgICAgIGVsc2UgKG5vZGUudmVyc2lvbiA8LSB2ZXJzaW9uOyBub2RlLnNpemUgPC0gMSArIHNsICsgc3I7IHNlbGYpXG4gICAgKVxuXG5sZXQgcmVjIGNvbXB1dGVfc3ViX3NpemUgdmVyc2lvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+ICgpXG4gIHwgTGVhZiAtPiAoKVxuICB8IE5vZGUgbm9kZSBhcyBzZWxmIC0+XG4gICAgaWYgbm9kZS5zaXplID0gMCB0aGVuXG4gICAgICBtYXRjaCBub2RlLmxlZnQgd2l0aFxuICAgICAgfCBOb2RlIHtzaXplID0gMDsgX30gLT5cbiAgICAgICAgY29tcHV0ZV9zdWJfc2l6ZSB2ZXJzaW9uIG5vZGUubGVmdFxuICAgICAgfCBfIC0+XG4gICAgICAgIG1hdGNoIG5vZGUucmlnaHQgd2l0aFxuICAgICAgICB8IE5vZGUge3NpemUgPSAwOyBffSAtPlxuICAgICAgICAgIGNvbXB1dGVfc3ViX3NpemUgdmVyc2lvbiBub2RlLnJpZ2h0XG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgIGxldCBwYXJlbnQgPSBub2RlLnBhcmVudCBpblxuICAgICAgICAgIGlnbm9yZSAoYmFsYW5jZSB2ZXJzaW9uIHNlbGYpO1xuICAgICAgICAgIGNvbXB1dGVfc3ViX3NpemUgdmVyc2lvbiBwYXJlbnRcblxubGV0IHJlYyByZXNldF92ZXJzaW9uIHZlcnNpb24gPSBmdW5jdGlvblxuICB8IExlYWYgLT4gKClcbiAgfCBOb2RlIG4gLT5cbiAgICBuLnZlcnNpb24gPC0gdmVyc2lvbjtcbiAgICByZXNldF92ZXJzaW9uIHZlcnNpb24gbi5sZWZ0O1xuICAgIHJlc2V0X3ZlcnNpb24gdmVyc2lvbiBuLnJpZ2h0XG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcmViYWxhbmNlID0gZnVuY3Rpb25cbiAgfCBSb290IHIgLT5cbiAgICBiZWdpbiBtYXRjaCByLmNoaWxkIHdpdGhcbiAgICAgIHwgTm9kZSB7IHNpemUgPSAwOyBfIH0gLT5cbiAgICAgICAgbGV0IHZlcnNpb24gPSBzdWNjIHIudmVyc2lvbiBpblxuICAgICAgICBsZXQgdmVyc2lvbiA9XG4gICAgICAgICAgaWYgdmVyc2lvbiA9IG1heF9pbnQgdGhlbiAoXG4gICAgICAgICAgICByLmdlbmVyYXRpb24gPC0gcmVmICgpO1xuICAgICAgICAgICAgcmVzZXRfdmVyc2lvbiAwIHIuY2hpbGQ7XG4gICAgICAgICAgICAwXG4gICAgICAgICAgKVxuICAgICAgICAgIGVsc2UgdmVyc2lvblxuICAgICAgICBpblxuICAgICAgICByLnZlcnNpb24gPC0gdmVyc2lvbjtcbiAgICAgICAgY29tcHV0ZV9zdWJfc2l6ZSB2ZXJzaW9uIHIuY2hpbGQ7XG4gICAgICAgIHZlcnNpb25cbiAgICAgIHwgTm9kZSBfIHwgTGVhZiAtPiByLnZlcnNpb25cbiAgICAgIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICAgIGVuZFxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBwbHVzICh6ZXJvLCBwbHVzKSB4IHkgPVxuICBpZiB4ID09IHplcm8gdGhlbiB5XG4gIGVsc2UgaWYgeSA9PSB6ZXJvIHRoZW4geFxuICBlbHNlIHBsdXMgeCB5XG5cbnR5cGUgKCdhLCAnYikgcmVkdWN0aW9uX3RyZWUgPVxuICB8IFJlZF9sZWFmXG4gIHwgUmVkX25vZGUgb2Yge1xuICAgICAgY2VsbDogJ2Egcm93O1xuICAgICAgYmluZGluZzogJ2EgYmluZGluZztcbiAgICAgIHJlZHVjdGlvbjogJ2I7XG4gICAgICBhZ2dyZWdhdGU6ICdiO1xuICAgICAgbGVmdCA6ICgnYSwgJ2IpIHJlZHVjdGlvbl90cmVlO1xuICAgICAgcmlnaHQgOiAoJ2EsICdiKSByZWR1Y3Rpb25fdHJlZTtcbiAgICB9XG5cbnR5cGUgKCdhLCAnYikgcmVkdWN0aW9uID0ge1xuICBtdXRhYmxlIHZlcnNpb246IGludDtcbiAgc291cmNlOiAnYSB0cmVlO1xuICBtdXRhYmxlIHJlc3VsdCA6ICgnYSwgJ2IpIHJlZHVjdGlvbl90cmVlO1xuICBtdXRhYmxlIGdlbmVyYXRpb246IHVuaXQgcmVmO1xuICBtYXBwZXI6ICdhIHJvdyAtPiAnYSAtPiAnYjtcbiAgbW9ub2lkOiAnYiBMd2RfdXRpbHMubW9ub2lkO1xufVxuXG5cbmxldCBleHRyYWN0X2JpbmRpbmdzIHRyZWUgPVxuICBsZXQgcmVjIGF1eCBhY2MgPSBmdW5jdGlvblxuICAgIHwgUmVkX2xlYWYgLT4gYWNjXG4gICAgfCBSZWRfbm9kZSBybm9kZSAtPlxuICAgICAgbGV0IGFjYyA9IGF1eCBhY2Mgcm5vZGUucmlnaHQgaW5cbiAgICAgIGxldCBhY2MgPSBtYXRjaCBybm9kZS5iaW5kaW5nIHdpdGhcbiAgICAgICAgfCBVbmJvdW5kIC0+IGFjY1xuICAgICAgICB8IEJvdW5kIHsgdmFsaWQgPSBmYWxzZTsgXyB9IC0+IGFjY1xuICAgICAgICB8IF8gLT4gKHJub2RlLmJpbmRpbmcsIHJub2RlLnJlZHVjdGlvbikgOjogYWNjXG4gICAgICBpblxuICAgICAgYXV4IGFjYyBybm9kZS5sZWZ0XG4gIGluXG4gIGF1eCBbXSB0cmVlXG5cbmxldCBmdWxsX3JlYnVpbGQgcmVkIHRyZWUgPVxuICBsZXQgYmluZGluZ3MgPSByZWYgKGV4dHJhY3RfYmluZGluZ3MgcmVkLnJlc3VsdCkgaW5cbiAgbGV0IHJlYyBhdXggPSBmdW5jdGlvblxuICAgIHwgTm9kZSBub2RlIGFzIGNlbGwgLT5cbiAgICAgIGxldCBsZWZ0ID0gYXV4IG5vZGUubGVmdCBpblxuICAgICAgbGV0IHJlZHVjdGlvbiA9XG4gICAgICAgIG1hdGNoIG5vZGUuYmluZGluZywgIWJpbmRpbmdzIHdpdGhcbiAgICAgICAgfCBVbmJvdW5kLCBfIC0+IGZzdCByZWQubW9ub2lkXG4gICAgICAgIHwgYmluZGluZywgKChiaW5kaW5nJywgcmVkdWN0aW9uKSA6OiBiaW5kaW5ncycpXG4gICAgICAgICAgd2hlbiBiaW5kaW5nID09IGJpbmRpbmcnIC0+XG4gICAgICAgICAgYmluZGluZ3MgOj0gYmluZGluZ3MnO1xuICAgICAgICAgIHJlZHVjdGlvblxuICAgICAgICB8IEJvdW5kIGIsIF8gLT4gYXNzZXJ0IGIudmFsaWQ7IHJlZC5tYXBwZXIgY2VsbCBiLnZhbHVlXG4gICAgICBpblxuICAgICAgbGV0IHJpZ2h0ID0gYXV4IG5vZGUucmlnaHQgaW5cbiAgICAgIGxldCBhZ2dyZWdhdGUgPSBtYXRjaCBsZWZ0IHdpdGhcbiAgICAgICAgfCBSZWRfbGVhZiAtPiByZWR1Y3Rpb25cbiAgICAgICAgfCBSZWRfbm9kZSByIC0+IHBsdXMgcmVkLm1vbm9pZCByLmFnZ3JlZ2F0ZSByZWR1Y3Rpb25cbiAgICAgIGluXG4gICAgICBsZXQgYWdncmVnYXRlID0gbWF0Y2ggcmlnaHQgd2l0aFxuICAgICAgICB8IFJlZF9sZWFmIC0+IGFnZ3JlZ2F0ZVxuICAgICAgICB8IFJlZF9ub2RlIHIgLT4gcGx1cyByZWQubW9ub2lkIGFnZ3JlZ2F0ZSByLmFnZ3JlZ2F0ZVxuICAgICAgaW5cbiAgICAgIFJlZF9ub2RlIHtcbiAgICAgICAgY2VsbDtcbiAgICAgICAgYmluZGluZyA9IG5vZGUuYmluZGluZztcbiAgICAgICAgcmVkdWN0aW9uO1xuICAgICAgICBhZ2dyZWdhdGU7XG4gICAgICAgIGxlZnQ7XG4gICAgICAgIHJpZ2h0O1xuICAgICAgfVxuICAgIHwgTGVhZiAtPiBSZWRfbGVhZlxuICAgIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICBpblxuICBsZXQgcmVzdWx0ID0gYXV4IHRyZWUgaW5cbiAgYXNzZXJ0ICghYmluZGluZ3MgPSBbXSk7XG4gIHJlc3VsdFxuXG5sZXQgZXh0cmFjdF9mcmluZ2UgdmVyc2lvbiB0cmVlID1cbiAgbGV0IHJlYyBhdXggYWNjID0gZnVuY3Rpb25cbiAgICB8IFJlZF9sZWFmIC0+IGFjY1xuICAgIHwgUmVkX25vZGUgcm5vZGUgYXMgdHJlZSAtPlxuICAgICAgbWF0Y2ggcm5vZGUuY2VsbCB3aXRoXG4gICAgICB8IE5vZGUgbm9kZSB3aGVuIG5vZGUudmVyc2lvbiA8PSB2ZXJzaW9uIC0+IHRyZWUgOjogYWNjXG4gICAgICB8IF8gLT5cbiAgICAgICAgbGV0IGFjYyA9IGF1eCBhY2Mgcm5vZGUucmlnaHQgaW5cbiAgICAgICAgbGV0IGFjYyA9IG1hdGNoIHJub2RlLmJpbmRpbmcgd2l0aFxuICAgICAgICAgIHwgVW5ib3VuZCAtPiBhY2NcbiAgICAgICAgICB8IEJvdW5kIHsgdmFsaWQgPSBmYWxzZTsgXyB9IC0+IGFjY1xuICAgICAgICAgIHwgXyAtPiB0cmVlIDo6IGFjY1xuICAgICAgICBpblxuICAgICAgICBhdXggYWNjIHJub2RlLmxlZnRcbiAgaW5cbiAgYXV4IFtdIHRyZWVcblxubGV0IGluY3JlbWVudGFsX3JlYnVpbGQgcmVkIHZlcnNpb24gdHJlZSA9XG4gIGxldCBmcmluZ2UgPSByZWYgKGV4dHJhY3RfZnJpbmdlIHZlcnNpb24gcmVkLnJlc3VsdCkgaW5cbiAgbGV0IHJlYyBhdXggPSBmdW5jdGlvblxuICAgIHwgTm9kZSBub2RlIGFzIGNlbGwgd2hlbiBub2RlLnZlcnNpb24gPD0gdmVyc2lvbiAtPlxuICAgICAgYmVnaW4gbWF0Y2ggIWZyaW5nZSB3aXRoXG4gICAgICAgIHwgKFJlZF9ub2RlIHJub2RlIGFzIHJlZHVjdGlvbikgOjogZnJpbmdlJyAtPlxuICAgICAgICAgIGFzc2VydCAocm5vZGUuY2VsbCA9PSBjZWxsKTtcbiAgICAgICAgICBmcmluZ2UgOj0gZnJpbmdlJztcbiAgICAgICAgICByZWR1Y3Rpb25cbiAgICAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgZW5kXG4gICAgfCBOb2RlIG5vZGUgYXMgY2VsbCAtPlxuICAgICAgbGV0IGxlZnQgPSBhdXggbm9kZS5sZWZ0IGluXG4gICAgICBsZXQgcmVkdWN0aW9uID1cbiAgICAgICAgbWF0Y2ggbm9kZS5iaW5kaW5nLCAhZnJpbmdlIHdpdGhcbiAgICAgICAgfCBVbmJvdW5kLCBfIC0+IGZzdCByZWQubW9ub2lkXG4gICAgICAgIHwgYmluZGluZywgKFJlZF9ub2RlIHJub2RlIDo6IGZyaW5nZScpXG4gICAgICAgICAgd2hlbiBiaW5kaW5nID09IHJub2RlLmJpbmRpbmcgLT5cbiAgICAgICAgICBmcmluZ2UgOj0gZnJpbmdlJztcbiAgICAgICAgICBybm9kZS5yZWR1Y3Rpb25cbiAgICAgICAgfCBCb3VuZCBiLCBfIC0+XG4gICAgICAgICAgYXNzZXJ0IGIudmFsaWQ7IHJlZC5tYXBwZXIgY2VsbCBiLnZhbHVlXG4gICAgICBpblxuICAgICAgbGV0IHJpZ2h0ID0gYXV4IG5vZGUucmlnaHQgaW5cbiAgICAgIGxldCBhZ2dyZWdhdGUgPSBtYXRjaCBsZWZ0IHdpdGhcbiAgICAgICAgfCBSZWRfbGVhZiAtPiByZWR1Y3Rpb25cbiAgICAgICAgfCBSZWRfbm9kZSByIC0+IHBsdXMgcmVkLm1vbm9pZCByLmFnZ3JlZ2F0ZSByZWR1Y3Rpb25cbiAgICAgIGluXG4gICAgICBsZXQgYWdncmVnYXRlID0gbWF0Y2ggcmlnaHQgd2l0aFxuICAgICAgICB8IFJlZF9sZWFmIC0+IGFnZ3JlZ2F0ZVxuICAgICAgICB8IFJlZF9ub2RlIHIgLT4gcGx1cyByZWQubW9ub2lkIGFnZ3JlZ2F0ZSByLmFnZ3JlZ2F0ZVxuICAgICAgaW5cbiAgICAgIFJlZF9ub2RlIHtcbiAgICAgICAgY2VsbDtcbiAgICAgICAgYmluZGluZyA9IG5vZGUuYmluZGluZztcbiAgICAgICAgcmVkdWN0aW9uO1xuICAgICAgICBhZ2dyZWdhdGU7XG4gICAgICAgIGxlZnQ7XG4gICAgICAgIHJpZ2h0O1xuICAgICAgfVxuICAgIHwgUm9vdCBfIHwgTGVhZiAtPiBSZWRfbGVhZlxuICBpblxuICBsZXQgcmVzdWx0ID0gYXV4IHRyZWUgaW5cbiAgYXNzZXJ0ICghZnJpbmdlID0gW10pO1xuICByZXN1bHRcblxubGV0IGV2YWwgcmVkID1cbiAgbWF0Y2ggcmVkLnNvdXJjZSB3aXRoXG4gIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHJvb3QgLT5cbiAgICBsZXQgdmVyc2lvbiA9IHJlYmFsYW5jZSByZWQuc291cmNlIGluXG4gICAgaWYgdHJ1ZSB0aGVuIChcbiAgICAgIGlmIHJlZC5nZW5lcmF0aW9uICE9IHJvb3QuZ2VuZXJhdGlvbiB0aGVuIChcbiAgICAgICAgcmVkLmdlbmVyYXRpb24gPC0gcm9vdC5nZW5lcmF0aW9uO1xuICAgICAgICByZWQucmVzdWx0IDwtIGZ1bGxfcmVidWlsZCByZWQgcm9vdC5jaGlsZDtcbiAgICAgICkgZWxzZSAoXG4gICAgICAgIHJlZC5yZXN1bHQgPC0gaW5jcmVtZW50YWxfcmVidWlsZCByZWQgcmVkLnZlcnNpb24gcm9vdC5jaGlsZFxuICAgICAgKTtcbiAgICApIGVsc2UgKFxuICAgICAgcmVkLnJlc3VsdCA8LSBmdWxsX3JlYnVpbGQgcmVkIHJvb3QuY2hpbGQ7XG4gICAgKTtcbiAgICByZWQudmVyc2lvbiA8LSB2ZXJzaW9uO1xuICAgIG1hdGNoIHJlZC5yZXN1bHQgd2l0aFxuICAgIHwgUmVkX2xlYWYgLT4gZnN0IHJlZC5tb25vaWRcbiAgICB8IFJlZF9ub2RlIHIgLT4gci5hZ2dyZWdhdGVcblxubGV0IG9wYXF1ZSA6ICdhIEx3ZC5wcmltIC0+IE9iai50IEx3ZC5wcmltID0gT2JqLm1hZ2ljXG5cbmxldCBtYXBfcmVkdWNlIG1hcHBlciBtb25vaWQgc291cmNlID1cbiAgbGV0IHJlZHVjdGlvbiA9IHtcbiAgICBzb3VyY2U7IG1hcHBlcjsgbW9ub2lkO1xuICAgIHJlc3VsdCA9IFJlZF9sZWFmO1xuICAgIGdlbmVyYXRpb24gPSBub3Rfb3JpZ2luO1xuICAgIHZlcnNpb24gPSAwO1xuICB9IGluXG4gIGxldCBwcmltID0gTHdkLnByaW1cbiAgICAgIH5hY3F1aXJlOihmdW4gc2VsZiAtPlxuICAgICAgICAgIG1hdGNoIHJlZHVjdGlvbi5zb3VyY2Ugd2l0aFxuICAgICAgICAgIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IFJvb3Qgcm9vdCAtPlxuICAgICAgICAgICAgcm9vdC5vbl9pbnZhbGlkYXRlIDwtIG9wYXF1ZSBzZWxmIDo6IHJvb3Qub25faW52YWxpZGF0ZTtcbiAgICAgICAgICAgIHJlZHVjdGlvblxuICAgICAgICApXG4gICAgICB+cmVsZWFzZTooZnVuIHNlbGYgcmVkdWN0aW9uIC0+XG4gICAgICAgICAgbWF0Y2ggcmVkdWN0aW9uLnNvdXJjZSB3aXRoXG4gICAgICAgICAgfCBMZWFmIHwgTm9kZSBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgIHwgUm9vdCByb290IC0+XG4gICAgICAgICAgICByb290Lm9uX2ludmFsaWRhdGUgPC1cbiAgICAgICAgICAgICAgTGlzdC5maWx0ZXIgKCghPSkgKG9wYXF1ZSBzZWxmKSkgcm9vdC5vbl9pbnZhbGlkYXRlXG4gICAgICAgIClcbiAgaW5cbiAgTHdkLm1hcCB+ZjpldmFsIChMd2QuZ2V0X3ByaW0gcHJpbSlcblxubGV0IHJlZHVjZSBtb25vaWQgc291cmNlID0gbWFwX3JlZHVjZSAoZnVuIF8geCAtPiB4KSBtb25vaWQgc291cmNlXG5cbmxldCByZWMgaXRlciBmID0gZnVuY3Rpb25cbiAgfCBMZWFmIC0+ICgpXG4gIHwgTm9kZSB0IC0+XG4gICAgaXRlciBmIHQubGVmdDtcbiAgICBiZWdpbiBtYXRjaCB0LmJpbmRpbmcgd2l0aFxuICAgICAgfCBCb3VuZCB4IC0+IGYgeC52YWx1ZVxuICAgICAgfCBVbmJvdW5kIC0+ICgpXG4gICAgZW5kO1xuICAgIGl0ZXIgZiB0LnJpZ2h0XG4gIHwgUm9vdCB0IC0+XG4gICAgaXRlciBmIHQuY2hpbGRcblxubGV0IHJlYyBsZWZ0X21vc3QgOiAnYSByb3cgLT4gJ2Egcm93IG9wdGlvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IExlYWYgLT4gTm9uZVxuICB8IE5vZGUgbiBhcyBzZWxmIC0+XG4gICAgbWF0Y2ggbGVmdF9tb3N0IG4ubGVmdCB3aXRoXG4gICAgfCBTb21lIF8gYXMgeCAtPiB4XG4gICAgfCBOb25lIC0+IFNvbWUgc2VsZlxuXG5sZXQgcmVjIHJpZ2h0X21vc3QgOiAnYSByb3cgLT4gJ2Egcm93IG9wdGlvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IExlYWYgLT4gTm9uZVxuICB8IE5vZGUgbiBhcyBzZWxmIC0+XG4gICAgbWF0Y2ggcmlnaHRfbW9zdCBuLnJpZ2h0IHdpdGhcbiAgICB8IFNvbWUgXyBhcyB4IC0+IHhcbiAgICB8IE5vbmUgLT4gU29tZSBzZWxmXG5cbmxldCBmaXJzdCA6ICdhIHQgLT4gJ2Egcm93IG9wdGlvbiA9IGZ1bmN0aW9uXG4gIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHJvb3QgLT4gbGVmdF9tb3N0IHJvb3QuY2hpbGRcblxubGV0IGxhc3QgOiAnYSB0IC0+ICdhIHJvdyBvcHRpb24gPSBmdW5jdGlvblxuICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCByb290IC0+IHJpZ2h0X21vc3Qgcm9vdC5jaGlsZFxuXG5sZXQgbmV4dCA6ICdhIHJvdyAtPiAnYSByb3cgb3B0aW9uID0gZnVuY3Rpb25cbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTGVhZiAtPiBOb25lXG4gIHwgTm9kZSBuIGFzIHNlbGYgLT5cbiAgICBtYXRjaCBsZWZ0X21vc3Qgbi5yaWdodCB3aXRoXG4gICAgfCBTb21lIF8gYXMgeCAtPiB4XG4gICAgfCBOb25lIC0+XG4gICAgICBsZXQgcmVjIHdhbGtfcm9vdCBzZWxmID0gZnVuY3Rpb25cbiAgICAgICAgfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICB8IFJvb3QgXyAtPiBOb25lXG4gICAgICAgIHwgTm9kZSBuJyBhcyBwYXJlbnQgLT5cbiAgICAgICAgICBpZiBuJy5sZWZ0ID09IHNlbGYgdGhlbiBTb21lIHBhcmVudCBlbHNlIChcbiAgICAgICAgICAgIGFzc2VydCAobicucmlnaHQgPT0gc2VsZik7XG4gICAgICAgICAgICB3YWxrX3Jvb3QgcGFyZW50IG4nLnBhcmVudFxuICAgICAgICAgIClcbiAgICAgIGluXG4gICAgICB3YWxrX3Jvb3Qgc2VsZiBuLnBhcmVudFxuXG5sZXQgcHJldiA6ICdhIHJvdyAtPiAnYSByb3cgb3B0aW9uID0gZnVuY3Rpb25cbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTGVhZiAtPiBOb25lXG4gIHwgTm9kZSBuIGFzIHNlbGYgLT5cbiAgICBtYXRjaCByaWdodF9tb3N0IG4ubGVmdCB3aXRoXG4gICAgfCBTb21lIF8gYXMgeCAtPiB4XG4gICAgfCBOb25lIC0+XG4gICAgICBsZXQgcmVjIHdhbGtfcm9vdCBzZWxmID0gZnVuY3Rpb25cbiAgICAgICAgfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICB8IFJvb3QgXyAtPiBOb25lXG4gICAgICAgIHwgTm9kZSBuJyBhcyBwYXJlbnQgLT5cbiAgICAgICAgICBpZiBuJy5yaWdodCA9PSBzZWxmIHRoZW4gU29tZSBwYXJlbnQgZWxzZSAoXG4gICAgICAgICAgICBhc3NlcnQgKG4nLmxlZnQgPT0gc2VsZik7XG4gICAgICAgICAgICB3YWxrX3Jvb3QgcGFyZW50IG4nLnBhcmVudFxuICAgICAgICAgIClcbiAgICAgIGluXG4gICAgICB3YWxrX3Jvb3Qgc2VsZiBuLnBhcmVudFxuIiwiXG50eXBlICErJ2EgdCA9XG5cblxuICB8IE5pbFxuICB8IExlYWYgb2YgeyBtdXRhYmxlIG1hcms6IGludDsgdjogJ2E7IH1cbiAgfCBKb2luIG9mIHsgbXV0YWJsZSBtYXJrOiBpbnQ7IGw6ICdhIHQ7IHI6ICdhIHQ7IH1cblxudHlwZSAnYSBzZXEgPSAnYSB0XG5cbmxldCBlbXB0eSA9IE5pbFxuXG5sZXQgZWxlbWVudCB2ID0gTGVhZiB7IG1hcmsgPSAwOyB2IH1cblxubGV0IG1hc2tfYml0cyA9IDJcblxubGV0IG1heGkgYSBiIDogaW50ID0gaWYgYiA+IGEgdGhlbiBiIGVsc2UgYVxuXG5sZXQgcmFuayA9IGZ1bmN0aW9uXG4gIHwgTmlsIC0+IDBcbiAgfCBMZWFmIHQgLT5cbiAgICBpZiB0Lm1hcmsgPD4gMCB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIkx3ZF9zZXEucmFuazogbm9kZSBpcyBtYXJrZWRcIjtcbiAgICAwXG4gIHwgSm9pbiB0IC0+XG4gICAgaWYgdC5tYXJrIGxhbmQgbWFza19iaXRzIDw+IDAgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJMd2Rfc2VxLnJhbms6IG5vZGUgaXMgbWFya2VkXCI7XG4gICAgdC5tYXJrIGxzciBtYXNrX2JpdHNcblxubGV0IGNvbmNhdCBhIGIgPSBtYXRjaCBhLCBiIHdpdGhcbiAgfCBOaWwsIHggfCB4LCBOaWwgLT4geFxuICB8IGwsIHIgLT4gSm9pbiB7IG1hcmsgPSAobWF4aSAocmFuayBsKSAocmFuayByKSArIDEpIGxzbCBtYXNrX2JpdHM7IGw7IHIgfVxuXG50eXBlICgnYSwgJ2IpIHZpZXcgPVxuICB8IEVtcHR5XG4gIHwgRWxlbWVudCBvZiAnYVxuICB8IENvbmNhdCBvZiAnYiAqICdiXG5cbmxldCB2aWV3ID0gZnVuY3Rpb25cbiAgfCBOaWwgICAgLT4gRW1wdHlcbiAgfCBMZWFmIHQgLT4gRWxlbWVudCB0LnZcbiAgfCBKb2luIHQgLT4gQ29uY2F0ICh0LmwsIHQucilcblxubW9kdWxlIEJhbGFuY2VkIDogc2lnXG4gIHR5cGUgJ2EgdCA9IHByaXZhdGUgJ2Egc2VxXG4gIHZhbCBlbXB0eSA6ICdhIHRcbiAgdmFsIGVsZW1lbnQgOiAnYSAtPiAnYSB0XG4gIHZhbCBjb25jYXQgOiAnYSB0IC0+ICdhIHQgLT4gJ2EgdFxuXG4gIHZhbCB2aWV3IDogJ2EgdCAtPiAoJ2EsICdhIHQpIHZpZXdcbmVuZCA9IHN0cnVjdFxuICB0eXBlICdhIHQgPSAnYSBzZXFcblxuICBsZXQgZW1wdHkgPSBlbXB0eVxuICBsZXQgZWxlbWVudCA9IGVsZW1lbnRcblxuICBsZXQgY2hlY2sgbCByID0gYWJzIChsIC0gcikgPD0gMVxuXG4gIGxldCByZWMgbm9kZV9sZWZ0IGwgciA9XG4gICAgbGV0IG1sID0gcmFuayBsIGluXG4gICAgbGV0IG1yID0gcmFuayByIGluXG4gICAgaWYgY2hlY2sgbWwgbXIgdGhlbiBjb25jYXQgbCByIGVsc2UgbWF0Y2ggbCB3aXRoXG4gICAgICB8IE5pbCB8IExlYWYgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgSm9pbiB0IC0+XG4gICAgICAgIGlmIGNoZWNrIChyYW5rIHQubCkgbWxcbiAgICAgICAgdGhlbiBjb25jYXQgdC5sIChub2RlX2xlZnQgdC5yIHIpXG4gICAgICAgIGVsc2UgbWF0Y2ggdC5yIHdpdGhcbiAgICAgICAgICB8IE5pbCB8IExlYWYgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IEpvaW4gdHIgLT5cbiAgICAgICAgICAgIGxldCB0cnIgPSBub2RlX2xlZnQgdHIuciByIGluXG4gICAgICAgICAgICBpZiBjaGVjayAoMSArIG1heGkgKHJhbmsgdC5sKSAocmFuayB0ci5sKSkgKHJhbmsgdHJyKVxuICAgICAgICAgICAgdGhlbiBjb25jYXQgKGNvbmNhdCB0LmwgdHIubCkgdHJyXG4gICAgICAgICAgICBlbHNlIGNvbmNhdCB0LmwgKGNvbmNhdCB0ci5sIHRycilcblxuICBsZXQgcmVjIG5vZGVfcmlnaHQgbCByID1cbiAgICBsZXQgbWwgPSByYW5rIGwgaW5cbiAgICBsZXQgbXIgPSByYW5rIHIgaW5cbiAgICBpZiBjaGVjayBtciBtbCB0aGVuIGNvbmNhdCBsIHIgZWxzZSBtYXRjaCByIHdpdGhcbiAgICAgIHwgTmlsIHwgTGVhZiBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBKb2luIHQgLT5cbiAgICAgICAgaWYgY2hlY2sgKHJhbmsgdC5yKSBtclxuICAgICAgICB0aGVuIGNvbmNhdCAobm9kZV9yaWdodCBsIHQubCkgdC5yXG4gICAgICAgIGVsc2UgbWF0Y2ggdC5sIHdpdGhcbiAgICAgICAgICB8IE5pbCB8IExlYWYgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IEpvaW4gdGwgLT5cbiAgICAgICAgICAgIGxldCB0bGwgPSBub2RlX3JpZ2h0IGwgdGwubCBpblxuICAgICAgICAgICAgaWYgY2hlY2sgKDEgKyBtYXhpIChyYW5rIHRsLnIpIChyYW5rIHQucikpIChyYW5rIHRsbClcbiAgICAgICAgICAgIHRoZW4gY29uY2F0IHRsbCAoY29uY2F0IHRsLnIgdC5yKVxuICAgICAgICAgICAgZWxzZSBjb25jYXQgKGNvbmNhdCB0bGwgdGwucikgdC5yXG5cbiAgbGV0IGNvbmNhdCBsIHIgPVxuICAgIGxldCBtbCA9IHJhbmsgbCBpblxuICAgIGxldCBtciA9IHJhbmsgciBpblxuICAgIGlmIGNoZWNrIG1sIG1yXG4gICAgdGhlbiBjb25jYXQgbCByXG4gICAgZWxzZSBpZiBtbCA8PSBtclxuICAgIHRoZW4gbm9kZV9yaWdodCBsIHJcbiAgICBlbHNlIG5vZGVfbGVmdCBsIHJcblxuICBsZXQgdmlldyA9IHZpZXdcbmVuZFxuXG5tb2R1bGUgTWFya2luZyA6IHNpZ1xuICB0eXBlIG1hcmsgPSAoKnByaXZhdGUqKSBpbnRcbiAgdmFsIGlzX3NoYXJlZCA6IG1hcmsgLT4gYm9vbFxuICB2YWwgaXNfbm90X3NoYXJlZCA6IG1hcmsgLT4gYm9vbFxuICB2YWwgaXNfbm9uZSA6IG1hcmsgLT4gYm9vbFxuICB2YWwgaXNfYm90aCA6IG1hcmsgLT4gYm9vbFxuICB2YWwgaXNfb2xkIDogbWFyayAtPiBib29sXG4gIHZhbCBpc19uZXcgOiBtYXJrIC0+IGJvb2xcbiAgKCp2YWwgaGFzX29sZCA6IG1hcmsgLT4gYm9vbCopXG4gICgqdmFsIGhhc19uZXcgOiBtYXJrIC0+IGJvb2wqKVxuICB2YWwgc2V0X2JvdGggOiBtYXJrIC0+IG1hcmtcbiAgdmFsIHVubWFyayA6IG1hcmsgLT4gbWFya1xuICB2YWwgZ2V0X2luZGV4IDogbWFyayAtPiBpbnRcbiAgdmFsIHdpdGhfaW5kZXhfbmV3IDogaW50IC0+IG1hcmtcblxuICB0eXBlIHN0YXRzXG4gIHZhbCBtYXJrZWQgOiBzdGF0cyAtPiBpbnRcbiAgdmFsIHNoYXJlZCA6IHN0YXRzIC0+IGludFxuICB2YWwgYmxvY2tlZCA6IHN0YXRzIC0+IGludFxuXG4gIHR5cGUgdHJhdmVyc2FsXG4gIHZhbCBvbGRfc3RhdHMgOiB0cmF2ZXJzYWwgLT4gc3RhdHNcbiAgdmFsIG5ld19zdGF0cyA6IHRyYXZlcnNhbCAtPiBzdGF0c1xuXG4gIHZhbCB1bnNhZmVfdHJhdmVyc2UgOiBvbGRfcm9vdDpfIHNlcSAtPiBuZXdfcm9vdDpfIHNlcSAtPiB0cmF2ZXJzYWxcblxuICB2YWwgcmVzdG9yZSA6IF8gc2VxIC0+IHVuaXRcbmVuZCA9IHN0cnVjdFxuICB0eXBlIG1hcmsgPSBpbnRcblxuICBsZXQgbWFza19ub25lID0gMFxuICBsZXQgbWFza19vbGQgID0gMVxuICBsZXQgbWFza19uZXcgID0gMlxuICBsZXQgbWFza19ib3RoID0gM1xuXG4gIGxldCBpc19zaGFyZWQgbSA9IG0gPSAtMVxuICBsZXQgaXNfbm90X3NoYXJlZCBtID0gbSA8PiAtMVxuICBsZXQgaXNfbm9uZSBtID0gbSBsYW5kIG1hc2tfYm90aCA9IG1hc2tfbm9uZVxuICBsZXQgaXNfYm90aCBtID0gbSBsYW5kIG1hc2tfYm90aCA9IG1hc2tfYm90aFxuICBsZXQgaXNfb2xkICBtID0gbSBsYW5kIG1hc2tfYm90aCA9IG1hc2tfb2xkXG4gIGxldCBpc19uZXcgIG0gPSBtIGxhbmQgbWFza19ib3RoID0gbWFza19uZXdcbiAgKCpsZXQgaGFzX29sZCBtID0gbSBsYW5kIG1hc2tfb2xkIDw+IDAqKVxuICAoKmxldCBoYXNfbmV3IG0gPSBtIGxhbmQgbWFza19uZXcgPD4gMCopXG4gIGxldCBzZXRfYm90aCBtID0gbSBsb3IgbWFza19ib3RoXG5cbiAgbGV0IGdldF9pbmRleCBtID0gbSBsc3IgbWFza19iaXRzXG4gIGxldCB3aXRoX2luZGV4X25ldyBpbmRleCA9IChpbmRleCBsc2wgbWFza19iaXRzKSBsb3IgbWFza19uZXdcblxuICBsZXQgdW5tYXJrIG0gPSBtIGxhbmQgbG5vdCBtYXNrX2JvdGhcblxuICB0eXBlIHN0YXRzID0ge1xuICAgIG11dGFibGUgbWFya2VkOiBpbnQ7XG4gICAgbXV0YWJsZSBzaGFyZWQ6IGludDtcbiAgICBtdXRhYmxlIGJsb2NrZWQ6IGludDtcbiAgfVxuICBsZXQgbWFya2VkIHMgPSBzLm1hcmtlZFxuICBsZXQgc2hhcmVkIHMgPSBzLnNoYXJlZFxuICBsZXQgYmxvY2tlZCBzID0gcy5ibG9ja2VkXG5cbiAgbGV0IG1rX3N0YXRzICgpID0geyBtYXJrZWQgPSAwOyBzaGFyZWQgPSAwOyBibG9ja2VkID0gMCB9XG5cbiAgbGV0IG5ld19tYXJrZWQgc3RhdHMgPSBzdGF0cy5tYXJrZWQgPC0gc3RhdHMubWFya2VkICsgMVxuICBsZXQgbmV3X3NoYXJlZCBzdGF0cyA9IHN0YXRzLnNoYXJlZCA8LSBzdGF0cy5zaGFyZWQgKyAxXG4gIGxldCBuZXdfYmxvY2tlZCBzdGF0cyA9IHN0YXRzLmJsb2NrZWQgPC0gc3RhdHMuYmxvY2tlZCArIDFcblxuICBsZXQgcmVjIGJsb2NrIHN0YXRzIG1hc2sgPSBmdW5jdGlvblxuICAgIHwgTmlsIC0+ICgpXG4gICAgfCBMZWFmIHQnIC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIG1hcmsgbGFuZCBtYXNrX2JvdGggPD4gbWFza19ib3RoICYmIG1hcmsgbGFuZCBtYXNrX2JvdGggPD4gMFxuICAgICAgdGhlbiAoXG4gICAgICAgIGlmIG1hcmsgbGFuZCBtYXNrID0gMCB0aGVuIG5ld19tYXJrZWQgc3RhdHMgZWxzZSBhc3NlcnQgZmFsc2U7XG4gICAgICAgIG5ld19ibG9ja2VkIHN0YXRzO1xuICAgICAgICB0Jy5tYXJrIDwtIG1hcmsgbG9yIG1hc2tfYm90aFxuICAgICAgKVxuICAgIHwgSm9pbiB0JyAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBtYXJrIGxhbmQgbWFza19ib3RoIDw+IG1hc2tfYm90aCAmJiBtYXJrIGxhbmQgbWFza19ib3RoIDw+IDBcbiAgICAgIHRoZW4gKFxuICAgICAgICBpZiBtYXJrIGxhbmQgbWFzayA9IDAgdGhlbiBuZXdfbWFya2VkIHN0YXRzIGVsc2UgYXNzZXJ0IGZhbHNlO1xuICAgICAgICBuZXdfYmxvY2tlZCBzdGF0cztcbiAgICAgICAgdCcubWFyayA8LSBtYXJrIGxvciBtYXNrX2JvdGg7XG4gICAgICAgIGJsb2NrIHN0YXRzIG1hc2sgdCcubDtcbiAgICAgICAgYmxvY2sgc3RhdHMgbWFzayB0Jy5yO1xuICAgICAgKVxuXG4gIGxldCBlbnF1ZXVlIHN0YXRzIHEgbWFzayA9IGZ1bmN0aW9uXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IExlYWYgdCcgLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgbWFyayBsYW5kIG1hc2sgPSAwIHRoZW4gKFxuICAgICAgICAoKiBOb3QgeWV0IHNlZW4gKilcbiAgICAgICAgbmV3X21hcmtlZCBzdGF0cztcbiAgICAgICAgaWYgbWFyayBsYW5kIG1hc2tfYm90aCA8PiAwIHRoZW4gKFxuICAgICAgICAgICgqIE5ld2x5IHNoYXJlZCwgY2xlYXIgbWFzayAqKVxuICAgICAgICAgIHQnLm1hcmsgPC0gLTE7XG4gICAgICAgICAgbmV3X2Jsb2NrZWQgc3RhdHM7XG4gICAgICAgICAgbmV3X3NoYXJlZCBzdGF0cztcbiAgICAgICAgKSBlbHNlXG4gICAgICAgICAgdCcubWFyayA8LSBtYXJrIGxvciBtYXNrO1xuICAgICAgKTtcbiAgICAgIGlmIG1hcmsgPD4gLTEgJiYgbWFyayBsYW5kIG1hc2tfYm90aCA9IG1hc2tfYm90aCB0aGVuIChcbiAgICAgICAgdCcubWFyayA8LSAtMTtcbiAgICAgICAgbmV3X3NoYXJlZCBzdGF0c1xuICAgICAgKVxuICAgIHwgSm9pbiB0JyBhcyB0IC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIG1hcmsgbGFuZCBtYXNrID0gMCB0aGVuIChcbiAgICAgICAgKCogTm90IHlldCBzZWVuICopXG4gICAgICAgIG5ld19tYXJrZWQgc3RhdHM7XG4gICAgICAgIGlmIG1hcmsgbGFuZCBtYXNrX2JvdGggPD4gMCB0aGVuIChcbiAgICAgICAgICAoKiBOZXdseSBzaGFyZWQsIGNsZWFyIG1hc2sgKilcbiAgICAgICAgICB0Jy5tYXJrIDwtIC0xO1xuICAgICAgICAgIG5ld19ibG9ja2VkIHN0YXRzO1xuICAgICAgICAgIG5ld19zaGFyZWQgc3RhdHM7XG4gICAgICAgICAgYmxvY2sgc3RhdHMgbWFzayB0Jy5sO1xuICAgICAgICAgIGJsb2NrIHN0YXRzIG1hc2sgdCcucjtcbiAgICAgICAgKSBlbHNlIChcbiAgICAgICAgICAoKiBGaXJzdCBtYXJrICopXG4gICAgICAgICAgdCcubWFyayA8LSBtYXJrIGxvciBtYXNrO1xuICAgICAgICAgIFF1ZXVlLnB1c2ggdCBxXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBpZiBtYXJrIDw+IC0xICYmIG1hcmsgbGFuZCBtYXNrX2JvdGggPSBtYXNrX2JvdGggdGhlbiAoXG4gICAgICAgIHQnLm1hcmsgPC0gLTE7XG4gICAgICAgIG5ld19zaGFyZWQgc3RhdHNcbiAgICAgIClcblxuICBsZXQgZGVxdWV1ZSBzdGF0cyBxIG1hc2sgPVxuICAgIG1hdGNoIFF1ZXVlLnBvcCBxIHdpdGhcbiAgICB8IEpvaW4gdCAtPlxuICAgICAgaWYgdC5tYXJrIGxhbmQgbWFza19ib3RoID0gbWFzayB0aGVuIChcbiAgICAgICAgZW5xdWV1ZSBzdGF0cyBxIG1hc2sgdC5sO1xuICAgICAgICBlbnF1ZXVlIHN0YXRzIHEgbWFzayB0LnI7XG4gICAgICApXG4gICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIGxldCB0cmF2ZXJzZTEgc3RhdHMgcSBtYXNrID1cbiAgICB3aGlsZSBub3QgKFF1ZXVlLmlzX2VtcHR5IHEpIGRvXG4gICAgICBkZXF1ZXVlIHN0YXRzIHEgbWFza1xuICAgIGRvbmVcblxuICBsZXQgcmVjIHRyYXZlcnNlIHNvbGQgc25ldyBxb2xkIHFuZXcgPVxuICAgIGlmIFF1ZXVlLmlzX2VtcHR5IHFvbGQgdGhlblxuICAgICAgdHJhdmVyc2UxIHNuZXcgcW5ldyBtYXNrX25ld1xuICAgIGVsc2UgaWYgUXVldWUuaXNfZW1wdHkgcW5ldyB0aGVuXG4gICAgICB0cmF2ZXJzZTEgc29sZCBxb2xkIG1hc2tfb2xkXG4gICAgZWxzZSAoXG4gICAgICBkZXF1ZXVlIHNvbGQgcW9sZCBtYXNrX29sZDtcbiAgICAgIGRlcXVldWUgc25ldyBxbmV3IG1hc2tfbmV3O1xuICAgICAgdHJhdmVyc2Ugc29sZCBzbmV3IHFvbGQgcW5ld1xuICAgIClcblxuICB0eXBlIHRyYXZlcnNhbCA9IHtcbiAgICBvbGRfc3RhdHM6IHN0YXRzO1xuICAgIG5ld19zdGF0czogc3RhdHM7XG4gIH1cblxuICBsZXQgb2xkX3N0YXRzIHRyID0gdHIub2xkX3N0YXRzXG4gIGxldCBuZXdfc3RhdHMgdHIgPSB0ci5uZXdfc3RhdHNcblxuICBsZXQgdW5zYWZlX3RyYXZlcnNlIH5vbGRfcm9vdCB+bmV3X3Jvb3QgPVxuICAgIGxldCBvbGRfc3RhdHMgPSBta19zdGF0cyAoKSBpblxuICAgIGxldCBuZXdfc3RhdHMgPSBta19zdGF0cyAoKSBpblxuICAgIGxldCBvbGRfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgICBsZXQgbmV3X3F1ZXVlID0gUXVldWUuY3JlYXRlICgpIGluXG4gICAgZW5xdWV1ZSBvbGRfc3RhdHMgb2xkX3F1ZXVlIG1hc2tfb2xkIG9sZF9yb290O1xuICAgIGVucXVldWUgbmV3X3N0YXRzIG5ld19xdWV1ZSBtYXNrX25ldyBuZXdfcm9vdDtcbiAgICB0cmF2ZXJzZSBvbGRfc3RhdHMgbmV3X3N0YXRzIG9sZF9xdWV1ZSBuZXdfcXVldWU7XG4gICAge29sZF9zdGF0czsgbmV3X3N0YXRzfVxuXG4gIGxldCByZXN0b3JlID0gZnVuY3Rpb25cbiAgICB8IE5pbCAtPiAoKVxuICAgIHwgTGVhZiB0IC0+IHQubWFyayA8LSAwXG4gICAgfCBKb2luIHQgLT5cbiAgICAgIHQubWFyayA8LSAobWF4aSAocmFuayB0LmwpIChyYW5rIHQucikgKyAxKSBsc2wgbWFza19iaXRzXG5lbmRcblxuKCogTWFya3MgZ28gdGhyb3VnaCBtYW55IHN0YXRlcy5cblxuICAgQSBtYXJrIGlzIHVzdWFsbHkgc3BsaXQgaW4gdHdvIHBhcnRzOlxuICAgLSB0aGUgbWFzaywgbWFkZSBvZiB0aGUgdHdvIGxlYXN0IHNpZ25pZmljYW50IGJpdHNcbiAgIC0gdGhlIGluZGV4IGlzIGFuIHVuc2lnbmVkIGludGVnZXIgZm9ybWVkIG9mIGFsbCB0aGUgcmVtYWluaW5nIGJpdHNcblxuICAgVGhlIGV4Y2VwdGlvbiBpcyB0aGUgZGlzdGluZ3Vpc2hlZCBtYXNrIHdpdGggdmFsdWUgLTEgKGFsbCBiaXRzIHNldCB0byAxKVxuICAgdGhhdCBkZW5vdGUgYSBcImxvY2tlZFwiIG5vZGUuXG5cbiAgIFdoZW4gdGhlIG1hc2sgaXMgMCwgdGhlIGluZGV4IGRlbm90ZXMgdGhlIHJhbmsgb2YgdGhlIG5vZGU6IHRoZSBkZXB0aCBvZlxuICAgdGhlIHRyZWUgcm9vdGVkIGF0IHRoaXMgbm9kZS5cbiAgIFdoZW4gdGhlIG1hc2sgaXMgbm9uLXplcm8sIHRoZSBpbmRleCBtZWFuaW5nIGlzIGxlZnQgdG8gdGhlIHRyYXZlcnNhbFxuICAgYWxnb3JpdGhtLlxuICAgUmVzdG9yaW5nIHRoZSBtYXJrIHNldHMgdGhlIG1hc2sgdG8gMCBhbmQgdGhlIGluZGV4dCB0byB0aGUgcmFuayxcbiAgIGJ1dCBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gdGhlIGNoaWxkcmVuIG9mIHRoZSBub2RlIGFyZSB0aGVtc2VsdmVzIHJlc3RvcmVkLlxuKilcblxubW9kdWxlIFJlZHVjZXIgPSBzdHJ1Y3RcbiAgdHlwZSAoKydhLCAnYikgeGZvcm0gPVxuICAgIHwgWEVtcHR5XG4gICAgfCBYTGVhZiBvZiB7IGE6ICdhIHQ7IG11dGFibGUgYjogJ2Igb3B0aW9uOyB9XG4gICAgfCBYSm9pbiBvZiB7IGE6ICdhIHQ7IG11dGFibGUgYjogJ2Igb3B0aW9uO1xuICAgICAgICAgICAgICAgICBsOiAoJ2EsICdiKSB4Zm9ybTsgcjogKCdhLCAnYikgeGZvcm07IH1cblxuICB0eXBlICgnYSwgJ2IpIHVubWFya19zdGF0ZSA9IHtcbiAgICBkcm9wcGVkIDogJ2Igb3B0aW9uIGFycmF5O1xuICAgIG11dGFibGUgZHJvcHBlZF9sZWFmIDogaW50O1xuICAgIG11dGFibGUgZHJvcHBlZF9qb2luIDogaW50O1xuICAgIHNoYXJlZCA6ICdhIHNlcSBhcnJheTtcbiAgICBzaGFyZWRfeCA6ICgnYSwgJ2IpIHhmb3JtIGxpc3QgYXJyYXk7XG4gICAgbXV0YWJsZSBzaGFyZWRfaW5kZXg6IGludDtcbiAgfVxuXG4gIGxldCBuZXh0X3NoYXJlZF9pbmRleCBzdCA9XG4gICAgbGV0IHJlc3VsdCA9IHN0LnNoYXJlZF9pbmRleCBpblxuICAgIHN0LnNoYXJlZF9pbmRleCA8LSByZXN1bHQgKyAxO1xuICAgIHJlc3VsdFxuXG4gIGxldCByZWMgdW5ibG9jayA9IGZ1bmN0aW9uXG4gICAgfCBYRW1wdHkgLT4gKClcbiAgICB8IFhMZWFmIHthID0gTmlsIHwgSm9pbiBfOyBffSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IFhKb2luIHthID0gTmlsIHwgTGVhZiBfOyBffSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IFhMZWFmIHthID0gTGVhZiB0JzsgX30gLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgTWFya2luZy5pc19ub3Rfc2hhcmVkIG1hcmsgJiYgTWFya2luZy5pc19ib3RoIG1hcmsgdGhlblxuICAgICAgICB0Jy5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIG1hcms7XG4gICAgfCBYSm9pbiB7YSA9IEpvaW4gdCc7IGw7IHI7IF99IC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIE1hcmtpbmcuaXNfbm90X3NoYXJlZCBtYXJrICYmIE1hcmtpbmcuaXNfYm90aCBtYXJrIHRoZW4gKFxuICAgICAgICB0Jy5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIG1hcms7XG4gICAgICAgIHVuYmxvY2sgbDtcbiAgICAgICAgdW5ibG9jayByXG4gICAgICApXG5cbiAgbGV0IHJlYyB1bm1hcmtfb2xkIHN0ID0gZnVuY3Rpb25cbiAgICB8IFhFbXB0eSAtPiAoKVxuICAgIHwgWExlYWYge2EgPSBOaWwgfCBKb2luIF87IF99IC0+IGFzc2VydCBmYWxzZVxuICAgIHwgWEpvaW4ge2EgPSBOaWwgfCBMZWFmIF87IF99IC0+IGFzc2VydCBmYWxzZVxuICAgIHwgWExlYWYge2EgPSBMZWFmIHQnIGFzIGE7IGJ9IGFzIHQgLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgTWFya2luZy5pc19vbGQgbWFyayB0aGVuIChcbiAgICAgICAgbGV0IGRyb3BwZWRfbGVhZiA9IHN0LmRyb3BwZWRfbGVhZiBpblxuICAgICAgICBpZiBkcm9wcGVkX2xlYWYgPiAtMSB0aGVuIChcbiAgICAgICAgICBzdC5kcm9wcGVkLihkcm9wcGVkX2xlYWYpIDwtIGI7XG4gICAgICAgICAgc3QuZHJvcHBlZF9sZWFmIDwtIGRyb3BwZWRfbGVhZiArIDE7XG4gICAgICAgICAgYXNzZXJ0IChzdC5kcm9wcGVkX2xlYWYgPD0gc3QuZHJvcHBlZF9qb2luKTtcbiAgICAgICAgKTtcbiAgICAgICAgdCcubWFyayA8LSBNYXJraW5nLnVubWFyayBtYXJrXG4gICAgICApIGVsc2UgaWYgTWFya2luZy5pc19zaGFyZWQgbWFyayB0aGVuIChcbiAgICAgICAgbGV0IGluZGV4ID0gbmV4dF9zaGFyZWRfaW5kZXggc3QgaW5cbiAgICAgICAgc3Quc2hhcmVkLihpbmRleCkgPC0gYTtcbiAgICAgICAgc3Quc2hhcmVkX3guKGluZGV4KSA8LSBbdF07XG4gICAgICAgIHQnLm1hcmsgPC0gTWFya2luZy53aXRoX2luZGV4X25ldyBpbmRleDtcbiAgICAgICkgZWxzZSBpZiBNYXJraW5nLmlzX25ldyBtYXJrIHRoZW4gKFxuICAgICAgICBsZXQgaW5kZXggPSBNYXJraW5nLmdldF9pbmRleCBtYXJrIGluXG4gICAgICAgIHN0LnNoYXJlZF94LihpbmRleCkgPC0gdCA6OiBzdC5zaGFyZWRfeC4oaW5kZXgpO1xuICAgICAgKSBlbHNlIGlmIE1hcmtpbmcuaXNfYm90aCBtYXJrIHRoZW4gKFxuICAgICAgICBhc3NlcnQgZmFsc2VcbiAgICAgICAgKCp0Jy5tYXJrIDwtIG1hcmsgbGFuZCBsbm90IGJvdGhfbWFzayopXG4gICAgICApXG4gICAgfCBYSm9pbiB7YSA9IEpvaW4gdCcgYXMgYTsgbDsgcjsgYn0gYXMgdCAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBNYXJraW5nLmlzX3NoYXJlZCBtYXJrIHRoZW4gKFxuICAgICAgICBsZXQgaW5kZXggPSBuZXh0X3NoYXJlZF9pbmRleCBzdCBpblxuICAgICAgICBzdC5zaGFyZWQuKGluZGV4KSA8LSBhO1xuICAgICAgICBzdC5zaGFyZWRfeC4oaW5kZXgpIDwtIFt0XTtcbiAgICAgICAgdCcubWFyayA8LSBNYXJraW5nLndpdGhfaW5kZXhfbmV3IGluZGV4O1xuICAgICAgICB1bmJsb2NrIGw7XG4gICAgICAgIHVuYmxvY2sgcjtcbiAgICAgICkgZWxzZSBpZiBNYXJraW5nLmlzX29sZCBtYXJrIHRoZW4gKFxuICAgICAgICBpZiBzdC5kcm9wcGVkX2pvaW4gPiAtMSB0aGVuIChcbiAgICAgICAgICBsZXQgZHJvcHBlZF9qb2luID0gc3QuZHJvcHBlZF9qb2luIC0gMSBpblxuICAgICAgICAgIHN0LmRyb3BwZWQuKGRyb3BwZWRfam9pbikgPC0gYjtcbiAgICAgICAgICBzdC5kcm9wcGVkX2pvaW4gPC0gZHJvcHBlZF9qb2luO1xuICAgICAgICAgIGFzc2VydCAoc3QuZHJvcHBlZF9sZWFmIDw9IHN0LmRyb3BwZWRfam9pbik7XG4gICAgICAgICk7XG4gICAgICAgIHQnLm1hcmsgPC0gTWFya2luZy51bm1hcmsgbWFyaztcbiAgICAgICAgdW5tYXJrX29sZCBzdCBsO1xuICAgICAgICB1bm1hcmtfb2xkIHN0IHI7XG4gICAgICApIGVsc2UgaWYgTWFya2luZy5pc19uZXcgbWFyayB0aGVuIChcbiAgICAgICAgbGV0IGluZGV4ID0gbWFyayBsc3IgbWFza19iaXRzIGluXG4gICAgICAgIHN0LnNoYXJlZF94LihpbmRleCkgPC0gdCA6OiBzdC5zaGFyZWRfeC4oaW5kZXgpO1xuICAgICAgKSBlbHNlIGlmIE1hcmtpbmcuaXNfYm90aCBtYXJrIHRoZW4gKFxuICAgICAgICBhc3NlcnQgZmFsc2VcbiAgICAgIClcblxuICBsZXQgcHJlcGFyZV9zaGFyZWQgc3QgPVxuICAgIGZvciBpID0gMCB0byBzdC5zaGFyZWRfaW5kZXggLSAxIGRvXG4gICAgICBiZWdpbiBtYXRjaCBzdC5zaGFyZWQuKGkpIHdpdGhcbiAgICAgICAgfCBOaWwgLT4gKClcbiAgICAgICAgfCBMZWFmIHQgLT4gdC5tYXJrIDwtIE1hcmtpbmcuc2V0X2JvdGggdC5tYXJrXG4gICAgICAgIHwgSm9pbiB0IC0+IHQubWFyayA8LSBNYXJraW5nLnNldF9ib3RoIHQubWFya1xuICAgICAgZW5kO1xuICAgICAgbWF0Y2ggc3Quc2hhcmVkX3guKGkpIHdpdGhcbiAgICAgIHwgW10gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IFtfXSAtPiAoKVxuICAgICAgfCB4cyAtPiBzdC5zaGFyZWRfeC4oaSkgPC0gTGlzdC5yZXYgeHNcbiAgICBkb25lXG5cbiAgbGV0IHJlYyB1bm1hcmtfbmV3IHN0ID0gZnVuY3Rpb25cbiAgICB8IE5pbCAtPiBYRW1wdHlcbiAgICB8IExlYWYgdCcgYXMgdCAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBNYXJraW5nLmlzX25vdF9zaGFyZWQgbWFyayAmJiBNYXJraW5nLmlzX2JvdGggbWFyayB0aGVuIChcbiAgICAgICAgbGV0IGluZGV4ID0gbWFyayBsc3IgbWFza19iaXRzIGluXG4gICAgICAgIG1hdGNoIHN0LnNoYXJlZF94LihpbmRleCkgd2l0aFxuICAgICAgICB8IFtdIC0+IFhMZWFmIHthID0gdDsgYiA9IE5vbmV9XG4gICAgICAgIHwgeCA6OiB4cyAtPiBzdC5zaGFyZWRfeC4oaW5kZXgpIDwtIHhzOyB4XG4gICAgICApIGVsc2UgKFxuICAgICAgICB0Jy5tYXJrIDwtIDA7XG4gICAgICAgIFhMZWFmIHthID0gdDsgYiA9IE5vbmV9XG4gICAgICApXG4gICAgfCBKb2luIHQnIGFzIHQgLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgbWFyayA9IC0xIHRoZW4gKFxuICAgICAgICBsZXQgaW5kZXggPSBuZXh0X3NoYXJlZF9pbmRleCBzdCBpblxuICAgICAgICB0Jy5tYXJrIDwtIDA7XG4gICAgICAgIHN0LnNoYXJlZC4oaW5kZXgpIDwtIHQ7XG4gICAgICAgIGxldCBsID0gdW5tYXJrX25ldyBzdCB0Jy5sIGluXG4gICAgICAgIGxldCByID0gdW5tYXJrX25ldyBzdCB0Jy5yIGluXG4gICAgICAgIFhKb2luIHthID0gdDsgYiA9IE5vbmU7IGw7IHJ9XG4gICAgICApIGVsc2UgaWYgTWFya2luZy5pc19ib3RoIG1hcmsgdGhlbiAoXG4gICAgICAgIGxldCBpbmRleCA9IG1hcmsgbHNyIG1hc2tfYml0cyBpblxuICAgICAgICBtYXRjaCBzdC5zaGFyZWRfeC4oaW5kZXgpIHdpdGhcbiAgICAgICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgfCB4IDo6IHhzIC0+XG4gICAgICAgICAgc3Quc2hhcmVkX3guKGluZGV4KSA8LSB4cztcbiAgICAgICAgICBpZiB4cyA9PSBbXSB0aGVuIHQnLm1hcmsgPC0gMDtcbiAgICAgICAgICB4XG4gICAgICApIGVsc2UgKFxuICAgICAgICB0Jy5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIHQnLm1hcms7XG4gICAgICAgIGxldCBsID0gdW5tYXJrX25ldyBzdCB0Jy5sIGluXG4gICAgICAgIGxldCByID0gdW5tYXJrX25ldyBzdCB0Jy5yIGluXG4gICAgICAgIFhKb2luIHthID0gdDsgYiA9IE5vbmU7IGw7IHJ9XG4gICAgICApXG5cbiAgdHlwZSAnYiBkcm9wcGVkID0ge1xuICAgIGxlYXZlczogaW50O1xuICAgIHRhYmxlOiAnYiBvcHRpb24gYXJyYXk7XG4gICAgZXh0cmFfbGVhZjogJ2IgbGlzdDtcbiAgICBleHRyYV9qb2luOiAnYiBsaXN0O1xuICB9XG5cbiAgbGV0IG5vX2Ryb3BwZWQgPVxuICAgIHsgbGVhdmVzID0gMDsgdGFibGUgPSBbfHxdOyBleHRyYV9sZWFmID0gW107IGV4dHJhX2pvaW4gPSBbXSB9XG5cbiAgbGV0IGRpZmYgZ2V0X2Ryb3BwZWQgeG9sZCB0bmV3ID0gbWF0Y2ggeG9sZCwgdG5ldyB3aXRoXG4gICAgfCBYRW1wdHksIE5pbCAtPiBub19kcm9wcGVkLCBYRW1wdHlcbiAgICB8IChYTGVhZiB7YTsgX30gfCBYSm9pbiB7YTsgX30pLCBfIHdoZW4gYSA9PSB0bmV3IC0+IG5vX2Ryb3BwZWQsIHhvbGRcbiAgICB8IF8gLT5cbiAgICAgIGxldCB0cmF2ZXJzYWwgPVxuICAgICAgICBNYXJraW5nLnVuc2FmZV90cmF2ZXJzZVxuICAgICAgICAgIH5vbGRfcm9vdDoobWF0Y2ggeG9sZCB3aXRoXG4gICAgICAgICAgICAgIHwgWEVtcHR5IC0+IGVtcHR5XG4gICAgICAgICAgICAgIHwgKFhMZWFmIHthOyBffSB8IFhKb2luIHthOyBffSkgLT4gYVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH5uZXdfcm9vdDp0bmV3XG4gICAgICBpblxuICAgICAgbGV0IHNvbGQgPSBNYXJraW5nLm9sZF9zdGF0cyB0cmF2ZXJzYWwgaW5cbiAgICAgIGxldCBzbmV3ID0gTWFya2luZy5uZXdfc3RhdHMgdHJhdmVyc2FsIGluXG4gICAgICBsZXQgbmJfZHJvcHBlZCA9XG4gICAgICAgIE1hcmtpbmcubWFya2VkIHNvbGQgLSAoTWFya2luZy5ibG9ja2VkIHNvbGQgKyBNYXJraW5nLmJsb2NrZWQgc25ldylcbiAgICAgIGluXG4gICAgICBsZXQgbmJfc2hhcmVkID1cbiAgICAgICAgTWFya2luZy5zaGFyZWQgc29sZCArIE1hcmtpbmcuc2hhcmVkIHNuZXdcbiAgICAgIGluXG4gICAgICBsZXQgc3QgPSB7XG4gICAgICAgIGRyb3BwZWQgPSBpZiBnZXRfZHJvcHBlZCB0aGVuIEFycmF5Lm1ha2UgbmJfZHJvcHBlZCBOb25lIGVsc2UgW3x8XTtcbiAgICAgICAgZHJvcHBlZF9sZWFmID0gaWYgZ2V0X2Ryb3BwZWQgdGhlbiAwIGVsc2UgLSAxO1xuICAgICAgICBkcm9wcGVkX2pvaW4gPSBpZiBnZXRfZHJvcHBlZCB0aGVuIG5iX2Ryb3BwZWQgZWxzZSAtIDE7XG4gICAgICAgIHNoYXJlZCA9IEFycmF5Lm1ha2UgbmJfc2hhcmVkIE5pbDtcbiAgICAgICAgc2hhcmVkX3ggPSBBcnJheS5tYWtlIG5iX3NoYXJlZCBbXTtcbiAgICAgICAgc2hhcmVkX2luZGV4ID0gMDtcbiAgICAgIH0gaW5cbiAgICAgICgqUHJpbnRmLmVwcmludGYgXCJzb2xkLnNoYXJlZDolZCBzb2xkLm1hcmtlZDolZCBzb2xkLmJsb2NrZWQ6JWRcXG4lIVwiXG4gICAgICAgIHNvbGQuc2hhcmVkIHNvbGQubWFya2VkIHNvbGQuYmxvY2tlZDtcbiAgICAgIFByaW50Zi5lcHJpbnRmIFwic25ldy5zaGFyZWQ6JWQgc25ldy5tYXJrZWQ6JWQgc25ldy5ibG9ja2VkOiVkXFxuJSFcIlxuICAgICAgICBzbmV3LnNoYXJlZCBzbmV3Lm1hcmtlZCBzbmV3LmJsb2NrZWQ7KilcbiAgICAgIHVubWFya19vbGQgc3QgeG9sZDtcbiAgICAgIGFzc2VydCAoc3QuZHJvcHBlZF9sZWFmID0gc3QuZHJvcHBlZF9qb2luKTtcbiAgICAgIHByZXBhcmVfc2hhcmVkIHN0O1xuICAgICAgbGV0IHJlc3VsdCA9IHVubWFya19uZXcgc3QgdG5ldyBpblxuICAgICAgKCpQcmludGYuZXByaW50ZiBcIm5ld19jb21wdXRlZDolZCUhXFxuXCIgIW5ld19jb21wdXRlZDsqKVxuICAgICAgZm9yIGkgPSBzdC5zaGFyZWRfaW5kZXggLSAxIGRvd250byAwIGRvXG4gICAgICAgIE1hcmtpbmcucmVzdG9yZSBzdC5zaGFyZWQuKGkpXG4gICAgICBkb25lO1xuICAgICAgaWYgZ2V0X2Ryb3BwZWQgdGhlbiAoXG4gICAgICAgIGxldCB4bGVhZiA9IHJlZiBbXSBpblxuICAgICAgICBsZXQgeGpvaW4gPSByZWYgW10gaW5cbiAgICAgICAgZm9yIGkgPSAwIHRvIHN0LnNoYXJlZF9pbmRleCAtIDEgZG9cbiAgICAgICAgICBMaXN0Lml0ZXIgKGZ1bmN0aW9uXG4gICAgICAgICAgICAgIHwgWExlYWYgeyBiID0gU29tZSBiOyBffSAtPiB4bGVhZiA6PSBiIDo6ICF4bGVhZlxuICAgICAgICAgICAgICB8IFhKb2luIHsgYiA9IFNvbWUgYjsgX30gLT4geGpvaW4gOj0gYiA6OiAheGpvaW5cbiAgICAgICAgICAgICAgfCBfIC0+ICgpXG4gICAgICAgICAgICApIHN0LnNoYXJlZF94LihpKVxuICAgICAgICBkb25lO1xuICAgICAgICAoeyBsZWF2ZXMgPSBzdC5kcm9wcGVkX2xlYWY7XG4gICAgICAgICAgIHRhYmxlID0gc3QuZHJvcHBlZDtcbiAgICAgICAgICAgZXh0cmFfbGVhZiA9ICF4bGVhZjtcbiAgICAgICAgICAgZXh0cmFfam9pbiA9ICF4am9pbiB9LCByZXN1bHQpXG4gICAgICApIGVsc2VcbiAgICAgICAgbm9fZHJvcHBlZCwgcmVzdWx0XG5cbiAgdHlwZSAoJ2EsICdiKSBtYXBfcmVkdWNlID0ge1xuICAgIG1hcDogJ2EgLT4gJ2I7XG4gICAgcmVkdWNlOiAnYiAtPiAnYiAtPiAnYjtcbiAgfVxuXG4gIGxldCBldmFsIG1hcF9yZWR1Y2UgPSBmdW5jdGlvblxuICAgIHwgWEVtcHR5IC0+IE5vbmVcbiAgICB8IG90aGVyIC0+XG4gICAgICBsZXQgcmVjIGF1eCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgWEVtcHR5IHwgWExlYWYge2EgPSBOaWwgfCBKb2luIF87IF99IC0+IGFzc2VydCBmYWxzZVxuICAgICAgICB8IFhMZWFmIHtiID0gU29tZSBiOyBffSB8IFhKb2luIHtiID0gU29tZSBiOyBffSAtPiBiXG4gICAgICAgIHwgWExlYWYgKHthID0gTGVhZiB0JztfIH0gYXMgdCkgLT5cbiAgICAgICAgICBsZXQgcmVzdWx0ID0gbWFwX3JlZHVjZS5tYXAgdCcudiBpblxuICAgICAgICAgIHQuYiA8LSBTb21lIHJlc3VsdDtcbiAgICAgICAgICByZXN1bHRcbiAgICAgICAgfCBYSm9pbiB0IC0+XG4gICAgICAgICAgbGV0IGwgPSBhdXggdC5sIGFuZCByID0gYXV4IHQuciBpblxuICAgICAgICAgIGxldCByZXN1bHQgPSBtYXBfcmVkdWNlLnJlZHVjZSBsIHIgaW5cbiAgICAgICAgICB0LmIgPC0gU29tZSByZXN1bHQ7XG4gICAgICAgICAgcmVzdWx0XG4gICAgICBpblxuICAgICAgU29tZSAoYXV4IG90aGVyKVxuXG4gIHR5cGUgKCdhLCAnYikgcmVkdWNlciA9ICgnYSwgJ2IpIG1hcF9yZWR1Y2UgKiAoJ2EsICdiKSB4Zm9ybVxuXG4gIGxldCBtYWtlIH5tYXAgfnJlZHVjZSA9ICh7bWFwOyByZWR1Y2V9LCBYRW1wdHkpXG5cbiAgbGV0IHJlZHVjZSAobWFwX3JlZHVjZSwgdHJlZSA6IF8gcmVkdWNlcikgPVxuICAgIGV2YWwgbWFwX3JlZHVjZSB0cmVlXG5cbiAgbGV0IHVwZGF0ZSAobWFwX3JlZHVjZSwgb2xkX3RyZWUgOiBfIHJlZHVjZXIpIG5ld190cmVlIDogXyByZWR1Y2VyID1cbiAgICBsZXQgXywgdHJlZSA9IGRpZmYgZmFsc2Ugb2xkX3RyZWUgbmV3X3RyZWUgaW5cbiAgICAobWFwX3JlZHVjZSwgdHJlZSlcblxuICBsZXQgdXBkYXRlX2FuZF9nZXRfZHJvcHBlZCAobWFwX3JlZHVjZSwgb2xkX3RyZWUgOiBfIHJlZHVjZXIpIG5ld190cmVlXG4gICAgOiBfIGRyb3BwZWQgKiBfIHJlZHVjZXIgPVxuICAgIGxldCBkcm9wcGVkLCB0cmVlID0gZGlmZiB0cnVlIG9sZF90cmVlIG5ld190cmVlIGluXG4gICAgKGRyb3BwZWQsIChtYXBfcmVkdWNlLCB0cmVlKSlcblxuICBsZXQgZm9sZF9kcm9wcGVkIGtpbmQgZiBkcm9wcGVkIGFjYyA9XG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBsZXQgc3RhcnQsIGJvdW5kID0gbWF0Y2gga2luZCB3aXRoXG4gICAgICB8IGBBbGwgICAgLT4gMCwgQXJyYXkubGVuZ3RoIGRyb3BwZWQudGFibGVcbiAgICAgIHwgYE1hcCAgICAtPiAwLCBkcm9wcGVkLmxlYXZlc1xuICAgICAgfCBgUmVkdWNlIC0+IGRyb3BwZWQubGVhdmVzLCBBcnJheS5sZW5ndGggZHJvcHBlZC50YWJsZVxuICAgIGluXG4gICAgZm9yIGkgPSBzdGFydCB0byBib3VuZCAtIDEgZG9cbiAgICAgIG1hdGNoIGRyb3BwZWQudGFibGUuKGkpIHdpdGhcbiAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgfCBTb21lIHggLT4gYWNjIDo9IGYgeCAhYWNjXG4gICAgZG9uZTtcbiAgICBiZWdpbiBtYXRjaCBraW5kIHdpdGhcbiAgICAgIHwgYEFsbCB8IGBNYXAgLT5cbiAgICAgICAgTGlzdC5pdGVyIChmdW4geCAtPiBhY2MgOj0gZiB4ICFhY2MpIGRyb3BwZWQuZXh0cmFfbGVhZlxuICAgICAgfCBgUmVkdWNlIC0+ICgpXG4gICAgZW5kO1xuICAgIGJlZ2luIG1hdGNoIGtpbmQgd2l0aFxuICAgICAgfCBgQWxsIHwgYFJlZHVjZSAtPlxuICAgICAgICBMaXN0Lml0ZXIgKGZ1biB4IC0+IGFjYyA6PSBmIHggIWFjYykgZHJvcHBlZC5leHRyYV9qb2luXG4gICAgICB8IGBNYXAgLT4gKClcbiAgICBlbmQ7XG4gICAgIWFjY1xuZW5kXG5cbigqIEx3ZCBpbnRlcmZhY2UgKilcblxubGV0IHJlYyBwdXJlX21hcF9yZWR1Y2UgbWFwIHJlZHVjZSA9IGZ1bmN0aW9uXG4gIHwgTmlsICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBMZWFmIHQgLT4gbWFwIHQudlxuICB8IEpvaW4gdCAtPlxuICAgIHJlZHVjZVxuICAgICAgKHB1cmVfbWFwX3JlZHVjZSBtYXAgcmVkdWNlIHQubClcbiAgICAgIChwdXJlX21hcF9yZWR1Y2UgbWFwIHJlZHVjZSB0LnIpXG5cbmxldCBmb2xkIH5tYXAgfnJlZHVjZSBzZXEgPVxuICBtYXRjaCBMd2QuaXNfcHVyZSBzZXEgd2l0aFxuICB8IFNvbWUgTmlsIC0+IEx3ZC5wdXJlIE5vbmVcbiAgfCBTb21lIG90aGVyIC0+IEx3ZC5wdXJlIChTb21lIChwdXJlX21hcF9yZWR1Y2UgbWFwIHJlZHVjZSBvdGhlcikpXG4gIHwgTm9uZSAtPlxuICAgIGxldCByZWR1Y2VyID0gcmVmIChSZWR1Y2VyLm1ha2Ugfm1hcCB+cmVkdWNlKSBpblxuICAgIEx3ZC5tYXAgc2VxIH5mOmJlZ2luIGZ1biBzZXEgLT5cbiAgICAgIGxldCByZWR1Y2VyJyA9IFJlZHVjZXIudXBkYXRlICFyZWR1Y2VyIHNlcSBpblxuICAgICAgcmVkdWNlciA6PSByZWR1Y2VyJztcbiAgICAgIFJlZHVjZXIucmVkdWNlIHJlZHVjZXInXG4gICAgZW5kXG5cbmxldCBmb2xkX21vbm9pZCBtYXAgKHplcm8sIHJlZHVjZSkgc2VxID1cbiAgbWF0Y2ggTHdkLmlzX3B1cmUgc2VxIHdpdGhcbiAgfCBTb21lIE5pbCAtPiBMd2QucHVyZSB6ZXJvXG4gIHwgU29tZSBvdGhlciAtPiBMd2QucHVyZSAocHVyZV9tYXBfcmVkdWNlIG1hcCByZWR1Y2Ugb3RoZXIpXG4gIHwgTm9uZSAtPlxuICAgIGxldCByZWR1Y2VyID0gcmVmIChSZWR1Y2VyLm1ha2Ugfm1hcCB+cmVkdWNlKSBpblxuICAgIEx3ZC5tYXAgc2VxIH5mOmJlZ2luIGZ1biBzZXEgLT5cbiAgICAgIGxldCByZWR1Y2VyJyA9IFJlZHVjZXIudXBkYXRlICFyZWR1Y2VyIHNlcSBpblxuICAgICAgcmVkdWNlciA6PSByZWR1Y2VyJztcbiAgICAgIG1hdGNoIFJlZHVjZXIucmVkdWNlIHJlZHVjZXInIHdpdGhcbiAgICAgIHwgTm9uZSAtPiB6ZXJvXG4gICAgICB8IFNvbWUgeCAtPiB4XG4gICAgZW5kXG5cbmxldCBtb25vaWQgPSAoZW1wdHksIGNvbmNhdClcblxubGV0IHRyYW5zZm9ybV9saXN0IGxzIGYgPVxuICBMd2RfdXRpbHMubWFwX3JlZHVjZSBmIG1vbm9pZCBsc1xuXG5sZXQgb2ZfbGlzdCBscyA9IHRyYW5zZm9ybV9saXN0IGxzIGVsZW1lbnRcblxubGV0IHJlYyBvZl9zdWJfYXJyYXkgZiBhcnIgaSBqID1cbiAgaWYgaiA8IGkgdGhlbiBlbXB0eVxuICBlbHNlIGlmIGogPSBpIHRoZW4gZiBhcnIuKGkpXG4gIGVsc2VcbiAgICBsZXQgayA9IGkgKyAoaiAtIGkpIC8gMiBpblxuICAgIGNvbmNhdCAob2Zfc3ViX2FycmF5IGYgYXJyIGkgaykgKG9mX3N1Yl9hcnJheSBmIGFyciAoayArIDEpIGopXG5cbmxldCB0cmFuc2Zvcm1fYXJyYXkgYXJyIGYgPSBvZl9zdWJfYXJyYXkgZiBhcnIgMCAoQXJyYXkubGVuZ3RoIGFyciAtIDEpXG5cbmxldCBvZl9hcnJheSBhcnIgPSB0cmFuc2Zvcm1fYXJyYXkgYXJyIGVsZW1lbnRcblxubGV0IHRvX2xpc3QgeCA9XG4gIGxldCByZWMgZm9sZCB4IGFjYyA9IG1hdGNoIHggd2l0aFxuICAgIHwgTmlsIC0+IGFjY1xuICAgIHwgTGVhZiB0IC0+IHQudiA6OiBhY2NcbiAgICB8IEpvaW4gdCAtPiBmb2xkIHQubCAoZm9sZCB0LnIgYWNjKVxuICBpblxuICBmb2xkIHggW11cblxubGV0IHRvX2FycmF5IHggPVxuICBsZXQgcmVjIGNvdW50ID0gZnVuY3Rpb25cbiAgICB8IE5pbCAtPiAwXG4gICAgfCBMZWFmIF8gLT4gMVxuICAgIHwgSm9pbiB0IC0+IGNvdW50IHQubCArIGNvdW50IHQuclxuICBpblxuICBtYXRjaCBjb3VudCB4IHdpdGhcbiAgfCAwIC0+IFt8fF1cbiAgfCBuIC0+XG4gICAgbGV0IHJlYyBmaXJzdCA9IGZ1bmN0aW9uXG4gICAgICB8IE5pbCAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgTGVhZiB0IC0+IHQudlxuICAgICAgfCBKb2luIHQgLT4gZmlyc3QgdC5sXG4gICAgaW5cbiAgICBsZXQgZmlyc3QgPSBmaXJzdCB4IGluXG4gICAgbGV0IGFyciA9IEFycmF5Lm1ha2UgbiBmaXJzdCBpblxuICAgIGxldCByZWMgZm9sZCBpID0gZnVuY3Rpb25cbiAgICAgIHwgTmlsIC0+IGlcbiAgICAgIHwgTGVhZiB0IC0+IGFyci4oaSkgPC0gdC52OyBpICsgMVxuICAgICAgfCBKb2luIHQgLT5cbiAgICAgICAgbGV0IGkgPSBmb2xkIGkgdC5sIGluXG4gICAgICAgIGxldCBpID0gZm9sZCBpIHQuciBpblxuICAgICAgICBpXG4gICAgaW5cbiAgICBsZXQgXyA6IGludCA9IGZvbGQgMCB4IGluXG4gICAgYXJyXG5cbmxldCBsd2RfZW1wdHkgOiAnYSB0IEx3ZC50ID0gTHdkLnB1cmUgTmlsXG5sZXQgbHdkX21vbm9pZCA6ICdhLiAnYSB0IEx3ZC50IEx3ZF91dGlscy5tb25vaWQgPVxuICAobHdkX2VtcHR5LCBmdW4geCB5IC0+IEx3ZC5tYXAyIH5mOmNvbmNhdCB4IHkpXG5cbmxldCBtYXAgZiBzZXEgPVxuICBmb2xkX21vbm9pZCAoZnVuIHggLT4gZWxlbWVudCAoZiB4KSkgbW9ub2lkIHNlcVxuXG5sZXQgZmlsdGVyIGYgc2VxID1cbiAgZm9sZF9tb25vaWQgKGZ1biB4IC0+IGlmIGYgeCB0aGVuIGVsZW1lbnQgeCBlbHNlIGVtcHR5KSBtb25vaWQgc2VxXG5cbmxldCBmaWx0ZXJfbWFwIGYgc2VxID1cbiAgbGV0IHNlbGVjdCB4ID0gbWF0Y2ggZiB4IHdpdGhcbiAgICB8IFNvbWUgeSAtPiBlbGVtZW50IHlcbiAgICB8IE5vbmUgLT4gZW1wdHlcbiAgaW5cbiAgZm9sZF9tb25vaWQgc2VsZWN0IG1vbm9pZCBzZXFcblxubGV0IGJpbmQgKHNlcSA6ICdhIHNlcSBMd2QudCkgKGYgOiAnYSAtPiAnYiBzZXEgTHdkLnQpICA6ICdiIHNlcSBMd2QudCA9XG4gIEx3ZC5qb2luIChmb2xkX21vbm9pZCBmIGx3ZF9tb25vaWQgc2VxKVxuXG5sZXQgc2VxX2JpbmQgKHNlcSA6ICdhIHNlcSBMd2QudCkgKGYgOiAnYSAtPiAnYiBzZXEpICA6ICdiIHNlcSBMd2QudCA9XG4gIGZvbGRfbW9ub2lkIGYgbW9ub2lkIHNlcVxuXG5sZXQgbGlmdCAoc2VxIDogJ2EgTHdkLnQgc2VxIEx3ZC50KSA6ICdhIHNlcSBMd2QudCA9XG4gIGJpbmQgc2VxIChMd2QubWFwIH5mOmVsZW1lbnQpXG5cbm1vZHVsZSBCYWxhbmNlZFRyZWUgOiBzaWdcbiAgdHlwZSAnYSB0ID1cbiAgICB8IExlYWZcbiAgICB8IE5vZGUgb2Yge1xuICAgICAgICByYW5rOiBpbnQ7XG4gICAgICAgIGw6ICdhIHQ7XG4gICAgICAgIHg6IGludCAqICdhIHNlcTtcbiAgICAgICAgcjogJ2EgdDtcbiAgICAgICAgbXV0YWJsZSBzZXE6ICdhIHNlcTtcbiAgICAgIH1cbiAgdmFsIGxlYWYgOiAnYSB0XG4gICgqdmFsIG5vZGUgOiAnYSB0IC0+IGludCAqICdhIHNlcSAtPiAnYSB0IC0+ICdhIHQqKVxuXG4gIHZhbCBpbnNlcnQgOiBjbXA6KCdhIC0+ICdhIC0+IGludCkgLT4gaW50IC0+ICdhIHNlcSAtPiAnYSB0IC0+ICdhIHRcbiAgKCp2YWwgdW5pb24gOiBjbXA6KCdhIC0+ICdhIC0+IGludCkgLT4gJ2EgdCAtPiAnYSB0IC0+ICdhIHQqKVxuZW5kID0gc3RydWN0XG4gIHR5cGUgJ2EgdCA9XG4gICAgfCBMZWFmXG4gICAgfCBOb2RlIG9mIHtcbiAgICAgICAgcmFuazogaW50O1xuICAgICAgICBsOiAnYSB0O1xuICAgICAgICB4OiBpbnQgKiAnYSBzZXE7XG4gICAgICAgIHI6ICdhIHQ7XG4gICAgICAgIG11dGFibGUgc2VxOiAnYSBzZXE7XG4gICAgICB9XG5cbiAgbGV0IGxlYWYgPSBMZWFmXG5cbiAgbGV0IHJhbmsgPSBmdW5jdGlvblxuICAgIHwgTGVhZiAtPiAwXG4gICAgfCBOb2RlIHQgLT4gdC5yYW5rXG5cbiAgbGV0IGNoZWNrIGwgciA9IGFicyAobCAtIHIpIDw9IDFcblxuICBsZXQgbm9kZSBsIHggciA9XG4gICAgTm9kZSB7bDsgeDsgcjsgc2VxID0gZW1wdHk7IHJhbmsgPSBtYXhpIChyYW5rIGwpIChyYW5rIHIpICsgMX1cblxuICBsZXQgcmVjIG5vZGVfbGVmdCBsIHggciA9XG4gICAgbGV0IG1sID0gcmFuayBsIGluXG4gICAgbGV0IG1yID0gcmFuayByIGluXG4gICAgaWYgY2hlY2sgbWwgbXIgdGhlbiBub2RlIGwgeCByIGVsc2UgbWF0Y2ggbCB3aXRoXG4gICAgICB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IE5vZGUgdCAtPlxuICAgICAgICBpZiBjaGVjayAocmFuayB0LmwpIG1sXG4gICAgICAgIHRoZW4gbm9kZSB0LmwgdC54IChub2RlX2xlZnQgdC5yIHggcilcbiAgICAgICAgZWxzZSBtYXRjaCB0LnIgd2l0aFxuICAgICAgICAgIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IE5vZGUgdHIgLT5cbiAgICAgICAgICAgIGxldCB0cnIgPSBub2RlX2xlZnQgdHIuciB4IHIgaW5cbiAgICAgICAgICAgIGlmIGNoZWNrICgxICsgbWF4aSAocmFuayB0LmwpIChyYW5rIHRyLmwpKSAocmFuayB0cnIpXG4gICAgICAgICAgICB0aGVuIG5vZGUgKG5vZGUgdC5sIHQueCB0ci5sKSB0ci54IHRyclxuICAgICAgICAgICAgZWxzZSBub2RlIHQubCB0LnggKG5vZGUgdHIubCB0ci54IHRycilcblxuICBsZXQgcmVjIG5vZGVfcmlnaHQgbCB4IHIgPVxuICAgIGxldCBtbCA9IHJhbmsgbCBpblxuICAgIGxldCBtciA9IHJhbmsgciBpblxuICAgIGlmIGNoZWNrIG1yIG1sIHRoZW4gbm9kZSBsIHggciBlbHNlIG1hdGNoIHIgd2l0aFxuICAgICAgfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBOb2RlIHQgLT5cbiAgICAgICAgaWYgY2hlY2sgKHJhbmsgdC5yKSBtclxuICAgICAgICB0aGVuIG5vZGUgKG5vZGVfcmlnaHQgbCB4IHQubCkgdC54IHQuclxuICAgICAgICBlbHNlIG1hdGNoIHQubCB3aXRoXG4gICAgICAgICAgfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgIHwgTm9kZSB0bCAtPlxuICAgICAgICAgICAgbGV0IHRsbCA9IG5vZGVfcmlnaHQgbCB4IHRsLmwgaW5cbiAgICAgICAgICAgIGlmIGNoZWNrICgxICsgbWF4aSAocmFuayB0bC5yKSAocmFuayB0LnIpKSAocmFuayB0bGwpXG4gICAgICAgICAgICB0aGVuIG5vZGUgdGxsIHRsLnggKG5vZGUgdGwuciB0LnggdC5yKVxuICAgICAgICAgICAgZWxzZSBub2RlIChub2RlIHRsbCB0bC54IHRsLnIpIHQueCB0LnJcblxuICBsZXQgbm9kZSBsIHggciA9XG4gICAgbGV0IG1sID0gcmFuayBsIGluXG4gICAgbGV0IG1yID0gcmFuayByIGluXG4gICAgaWYgY2hlY2sgbWwgbXJcbiAgICB0aGVuIG5vZGUgbCB4IHJcbiAgICBlbHNlIGlmIG1sIDw9IG1yXG4gICAgdGhlbiBub2RlX3JpZ2h0IGwgeCByXG4gICAgZWxzZSBub2RlX2xlZnQgbCB4IHJcblxuICBsZXQgcmVjIGpvaW4gbCByID0gbWF0Y2ggbCwgciB3aXRoXG4gICAgfCBMZWFmLCB0IHwgdCwgTGVhZiAtPiB0XG4gICAgfCBOb2RlIHRsLCBOb2RlIHRyIC0+XG4gICAgICBpZiB0bC5yYW5rIDw9IHRyLnJhbmsgdGhlblxuICAgICAgICBub2RlIChqb2luIGwgdHIubCkgdHIueCB0ci5yXG4gICAgICBlbHNlXG4gICAgICAgIG5vZGUgdGwubCB0bC54IChqb2luIHRsLnIgcilcblxuICBsZXQgZ2V0X2VsZW1lbnQgPSBmdW5jdGlvblxuICAgIHwgTmlsIHwgSm9pbiBfIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgTGVhZiB7djtffSAtPiB2XG5cbiAgKCpsZXQgcmVjIHNwbGl0IH5jbXAgayA9IGZ1bmN0aW9uXG4gICAgfCBMZWFmIC0+IExlYWYsIDAsIExlYWZcbiAgICB8IE5vZGUgdCAtPlxuICAgICAgbGV0IGMgPSBjbXAgayAoZ2V0X2VsZW1lbnQgKHNuZCAodC54KSkpIGluXG4gICAgICBpZiBjIDwgMCB0aGVuXG4gICAgICAgIGxldCBsJywgdicsIHInID0gc3BsaXQgfmNtcCBrIHQubCBpblxuICAgICAgICBsJywgdicsIGpvaW4gcicgdC5yXG4gICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgbGV0IGwnLCB2JywgcicgPSBzcGxpdCB+Y21wIGsgdC5yIGluXG4gICAgICAgIGpvaW4gdC5sIGwnLCB2JywgcidcbiAgICAgIGVsc2VcbiAgICAgICAgKHQubCwgZnN0IHQueCwgdC5yKVxuXG4gIGxldCByZWMgdW5pb24gfmNtcCB0MSB0MiA9XG4gICAgbWF0Y2ggdDEsIHQyIHdpdGhcbiAgICB8IExlYWYsIHQgfCB0LCBMZWFmIC0+IHRcbiAgICB8IE5vZGUgdDEsIHQyICAtPlxuICAgICAgbGV0IG0xLCBrMSA9IHQxLnggaW5cbiAgICAgIGxldCBsMiwgbTIsIHIyID0gc3BsaXQgfmNtcCAoZ2V0X2VsZW1lbnQgazEpIHQyIGluXG4gICAgICBsZXQgbCcgPSB1bmlvbiB+Y21wIHQxLmwgbDIgaW5cbiAgICAgIGxldCByJyA9IHVuaW9uIH5jbXAgdDEuciByMiBpblxuICAgICAgbGV0IG0gPSBtMSArIG0yIGluXG4gICAgICBpZiBtID0gMCB0aGVuXG4gICAgICAgIGpvaW4gbCcgcidcbiAgICAgIGVsc2UgKFxuICAgICAgICBhc3NlcnQgKG0gPiAwKTtcbiAgICAgICAgbm9kZSBsJyAobSwgazEpIHInO1xuICAgICAgKVxuICAgICopXG5cbiAgbGV0IGluc2VydCB+Y21wIG0xIHMgdCA9XG4gICAgYXNzZXJ0IChtMSA8PiAwKTtcbiAgICBsZXQgcmVjIGF1eCA9IGZ1bmN0aW9uXG4gICAgICB8IExlYWYgLT4gbm9kZSBMZWFmIChtMSwgcykgTGVhZlxuICAgICAgfCBOb2RlIHQgLT5cbiAgICAgICAgbGV0IG0yLCB4ID0gdC54IGluXG4gICAgICAgIGxldCBjID0gY21wIChnZXRfZWxlbWVudCBzKSAoZ2V0X2VsZW1lbnQgeCkgaW5cbiAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgIGxldCBtID0gbTEgKyBtMiBpblxuICAgICAgICAgIGlmIG0gPSAwIHRoZW5cbiAgICAgICAgICAgIGpvaW4gdC5sIHQuclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIG5vZGUgdC5sIChtLCB4KSB0LnJcbiAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgbGV0IGwnID0gYXV4IHQubCBpblxuICAgICAgICAgIG5vZGUgbCcgdC54IHQuclxuICAgICAgICBlbHNlXG4gICAgICAgICAgbGV0IHInID0gYXV4IHQuciBpblxuICAgICAgICAgIG5vZGUgdC5sIHQueCByJ1xuICAgIGluXG4gICAgYXV4IHRcbmVuZFxuXG5sZXQgcmVjIHNlcV9vZl90cmVlID0gZnVuY3Rpb25cbiAgfCBCYWxhbmNlZFRyZWUuTGVhZiAtPiBlbXB0eVxuICB8IEJhbGFuY2VkVHJlZS5Ob2RlIHQgLT5cbiAgICBtYXRjaCB0LnNlcSB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgIGxldCBzbCA9IHNlcV9vZl90cmVlIHQubCBpblxuICAgICAgbGV0IHNyID0gc2VxX29mX3RyZWUgdC5yIGluXG4gICAgICBhc3NlcnQgKGZzdCB0LnggPiAwKTtcbiAgICAgIGxldCBzZXEgPSBjb25jYXQgc2wgKGNvbmNhdCAoc25kIHQueCkgc3IpIGluXG4gICAgICB0LnNlcSA8LSBzZXE7XG4gICAgICBzZXFcbiAgICB8IHNlcSAtPiBzZXFcblxubGV0IHNvcnRfdW5pcSBjbXAgc2VxID1cbiAgbGV0IHByZXZpb3VzX3NlcSA9IHJlZiBlbXB0eSBpblxuICBsZXQgcHJldmlvdXNfdHJlZSA9IHJlZiBCYWxhbmNlZFRyZWUubGVhZiBpblxuICBsZXQgZiBuZXdfc2VxID1cbiAgICBsZXQgb2xkX3NlcSA9ICFwcmV2aW91c19zZXEgaW5cbiAgICBsZXQgb2xkX3RyZWUgPSAhcHJldmlvdXNfdHJlZSBpblxuICAgIGxldCBfID0gTWFya2luZy51bnNhZmVfdHJhdmVyc2Ugfm9sZF9yb290Om9sZF9zZXEgfm5ld19yb290Om5ld19zZXEgaW5cbiAgICBsZXQgcmVjIHVuYmxvY2sgPSBmdW5jdGlvblxuICAgICAgfCBOaWwgLT4gKClcbiAgICAgIHwgTGVhZiB0IC0+IHQubWFyayA8LSBNYXJraW5nLnVubWFyayB0Lm1hcmtcbiAgICAgIHwgSm9pbiB0IGFzIHNlcSAtPlxuICAgICAgICBsZXQgbWFyayA9IHQubWFyayBpblxuICAgICAgICB1bmJsb2NrIHQubDtcbiAgICAgICAgdW5ibG9jayB0LnI7XG4gICAgICAgIGlmIE1hcmtpbmcuaXNfc2hhcmVkIG1hcmsgdGhlbiAoXG4gICAgICAgICAgTWFya2luZy5yZXN0b3JlIHNlcTtcbiAgICAgICAgKSBlbHNlIGlmIE1hcmtpbmcuaXNfYm90aCBtYXJrIHRoZW4gKFxuICAgICAgICAgIHQubWFyayA8LSBNYXJraW5nLnVubWFyayBtYXJrO1xuICAgICAgICApIGVsc2VcbiAgICAgICAgICBhc3NlcnQgKE1hcmtpbmcuaXNfbm9uZSBtYXJrKVxuICAgIGluXG4gICAgbGV0IHJlYyB1bm1hcmtfbmV3IHRyZWUgPSBmdW5jdGlvblxuICAgICAgfCBOaWwgLT4gdHJlZVxuICAgICAgfCBMZWFmIHQgYXMgc2VxIC0+XG4gICAgICAgIGxldCBtYXJrID0gdC5tYXJrIGluXG4gICAgICAgIHQubWFyayA8LSAwO1xuICAgICAgICBpZiBNYXJraW5nLmlzX25ldyBtYXJrIHRoZW5cbiAgICAgICAgICBCYWxhbmNlZFRyZWUuaW5zZXJ0IH5jbXAgKCsxKSBzZXEgdHJlZVxuICAgICAgICBlbHNlIChcbiAgICAgICAgICBhc3NlcnQgKE1hcmtpbmcuaXNfYm90aCBtYXJrIHx8IE1hcmtpbmcuaXNfbm9uZSBtYXJrKTtcbiAgICAgICAgICB0cmVlXG4gICAgICAgIClcbiAgICAgIHwgSm9pbiB0IGFzIHNlcSAtPlxuICAgICAgICBsZXQgbWFyayA9IHQubWFyayBpblxuICAgICAgICBpZiBNYXJraW5nLmlzX25ldyBtYXJrIHRoZW4gKFxuICAgICAgICAgIHQubWFyayA8LSBNYXJraW5nLnVubWFyayBtYXJrO1xuICAgICAgICAgIHVubWFya19uZXcgKHVubWFya19uZXcgdHJlZSB0LmwpIHQuclxuICAgICAgICApIGVsc2UgKFxuICAgICAgICAgIHVuYmxvY2sgc2VxO1xuICAgICAgICAgIHRyZWVcbiAgICAgICAgKVxuICAgIGluXG4gICAgbGV0IHJlYyB1bm1hcmtfb2xkIHRyZWUgPSBmdW5jdGlvblxuICAgICAgfCBOaWwgLT4gdHJlZVxuICAgICAgfCBMZWFmIHQgYXMgc2VxIC0+XG4gICAgICAgIGxldCBtYXJrID0gdC5tYXJrIGluXG4gICAgICAgIHQubWFyayA8LSAwO1xuICAgICAgICBpZiBNYXJraW5nLmlzX29sZCBtYXJrIHRoZW5cbiAgICAgICAgICBCYWxhbmNlZFRyZWUuaW5zZXJ0IH5jbXAgKC0xKSBzZXEgdHJlZVxuICAgICAgICBlbHNlIChcbiAgICAgICAgICBhc3NlcnQgKE1hcmtpbmcuaXNfYm90aCBtYXJrIHx8IE1hcmtpbmcuaXNfbm9uZSBtYXJrKTtcbiAgICAgICAgICB0cmVlXG4gICAgICAgIClcbiAgICAgIHwgSm9pbiB0IGFzIHNlcSAtPlxuICAgICAgICBsZXQgbWFyayA9IHQubWFyayBpblxuICAgICAgICBpZiBNYXJraW5nLmlzX29sZCBtYXJrIHRoZW4gKFxuICAgICAgICAgIHQubWFyayA8LSBNYXJraW5nLnVubWFyayBtYXJrO1xuICAgICAgICAgIHVubWFya19vbGQgKHVubWFya19vbGQgdHJlZSB0LmwpIHQuclxuICAgICAgICApIGVsc2UgKFxuICAgICAgICAgIHVuYmxvY2sgc2VxO1xuICAgICAgICAgIHRyZWVcbiAgICAgICAgKVxuICAgIGluXG4gICAgbGV0IG5ld190cmVlID0gdW5tYXJrX29sZCAodW5tYXJrX25ldyBvbGRfdHJlZSBuZXdfc2VxKSBvbGRfc2VxIGluXG4gICAgcHJldmlvdXNfc2VxIDo9IG5ld19zZXE7XG4gICAgcHJldmlvdXNfdHJlZSA6PSBuZXdfdHJlZTtcbiAgICBzZXFfb2ZfdHJlZSBuZXdfdHJlZVxuICBpblxuICBMd2QubWFwIHNlcSB+ZlxuIiwib3BlbiBCcnJcbm9wZW4gRWxcblxudHlwZSB0ID0gRWwudFxuXG50eXBlICdhIGNvbCA9IFtcbiAgfCBgUCBvZiAnYVxuICAoKiogUHVyZSBlbGVtZW50ICopXG4gIHwgYFIgb2YgJ2EgTHdkLnRcbiAgKCoqIFJlYWN0aXZlIGVsZW1lbnQgKilcbiAgfCBgUyBvZiAnYSBMd2Rfc2VxLnQgTHdkLnRcbiAgKCoqIFJlYWN0aXZlIHNlcXVlbmNlIG9mIGVsZW1lbnRzICopXG5dIGxpc3RcbigqKiBEZXNjcmliaW5nIGNvbGxlY3Rpb25zIG9mIGVsZW1lbnRzICopXG5cbnR5cGUgaGFuZGxlciA9IEhhbmRsZXIgOiB7XG4gICAgb3B0czogRXYubGlzdGVuX29wdHMgb3B0aW9uO1xuICAgIHR5cGUnOiAnYSBFdi50eXBlJztcbiAgICBmdW5jOiAnYSBFdi50IC0+IHVuaXQ7XG4gIH0gLT4gaGFuZGxlclxuXG5sZXQgaGFuZGxlciA/b3B0cyB0eXBlJyBmdW5jID1cbiAgSGFuZGxlciB7b3B0czsgdHlwZSc7IGZ1bmN9XG5cbmxldCBpc19wdXJlX2VsZW1lbnQgPSBmdW5jdGlvblxuICB8IGBQIF8gLT4gdHJ1ZVxuICB8IGBSIHggLT4gT3B0aW9uLmlzX3NvbWUgKEx3ZC5pc19wdXJlIHgpXG4gIHwgYFMgeCAtPiBPcHRpb24uaXNfc29tZSAoTHdkLmlzX3B1cmUgeClcblxubGV0IGV4dHJhY3RfcHVyZV9lbGVtZW50IHggPSBPcHRpb24uZ2V0IChMd2QuaXNfcHVyZSB4KVxuXG5sZXQgZXh0cmFjdF9wdXJlX2VsZW1lbnRzIHhzID1cbiAgTGlzdC5mbGF0dGVuIChcbiAgICBMaXN0Lm1hcCAoZnVuY3Rpb25cbiAgICAgICAgfCBgUCB4IC0+IFt4XVxuICAgICAgICB8IGBSIHggLT4gW2V4dHJhY3RfcHVyZV9lbGVtZW50IHhdXG4gICAgICAgIHwgYFMgeCAtPiBMd2Rfc2VxLnRvX2xpc3QgKGV4dHJhY3RfcHVyZV9lbGVtZW50IHgpXG4gICAgICApIHhzXG4gIClcblxubGV0IHByZXBhcmVfY29sIDogXyBjb2wgLT4gXyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW10sIFtdXG4gIHwgY29sIC0+XG4gICAgbGV0IHB1cmUsIGltcHVyZSA9IExpc3QucGFydGl0aW9uIGlzX3B1cmVfZWxlbWVudCBjb2wgaW5cbiAgICBleHRyYWN0X3B1cmVfZWxlbWVudHMgcHVyZSwgaW1wdXJlXG5cbigqKiBSZWFjdGl2ZSBzZXF1ZW5jZSBvZiBlbGVtZW50cyAqKVxuXG5sZXQgY29uc3VtZV9jaGlsZHJlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW10sIE5vbmVcbiAgfCBbYFAgeF0gLT4gW3hdLCBOb25lXG4gIHwgW2BTIHhdIC0+IFtdLCBTb21lIHhcbiAgfCBbYFIgeF0gLT4gW10sIFNvbWUgKEx3ZC5tYXAgfmY6THdkX3NlcS5lbGVtZW50IHgpXG4gIHwgY29sIC0+XG4gICAgaWYgTGlzdC5mb3JfYWxsIGlzX3B1cmVfZWxlbWVudCBjb2xcbiAgICB0aGVuXG4gICAgICBMaXN0LmZsYXR0ZW4gKFxuICAgICAgICBMaXN0Lm1hcCAoZnVuY3Rpb25cbiAgICAgICAgICAgIHwgYFAgeCAtPiBbeF1cbiAgICAgICAgICAgIHwgYFIgeCAtPiBbZXh0cmFjdF9wdXJlX2VsZW1lbnQgeF1cbiAgICAgICAgICAgIHwgYFMgeCAtPiBMd2Rfc2VxLnRvX2xpc3QgKGV4dHJhY3RfcHVyZV9lbGVtZW50IHgpXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbFxuICAgICAgKSwgTm9uZVxuICAgIGVsc2UgW10sIFNvbWUgKFxuICAgICAgICBMd2RfdXRpbHMubWFwX3JlZHVjZSAoZnVuY3Rpb25cbiAgICAgICAgICAgIHwgYFAgeCAtPiBMd2QucHVyZSAoTHdkX3NlcS5lbGVtZW50IHgpXG4gICAgICAgICAgICB8IGBSIHggLT4gTHdkLm1hcCB+ZjpMd2Rfc2VxLmVsZW1lbnQgeFxuICAgICAgICAgICAgfCBgUyB4IC0+IHhcbiAgICAgICAgICApIEx3ZF9zZXEubHdkX21vbm9pZFxuICAgICAgICAgIGNvbFxuICAgICAgKVxuXG50eXBlIGNoaWxkX3RyZWUgPVxuICB8IExlYWYgb2YgRWwudFxuICB8IElubmVyIG9mIHsgbXV0YWJsZSBib3VuZDogSnYudDtcbiAgICAgICAgICAgICAgIGxlZnQ6IGNoaWxkX3RyZWU7IHJpZ2h0OiBjaGlsZF90cmVlOyB9XG5cbmxldCBjaGlsZF9ub2RlIG5vZGUgPSBMZWFmIG5vZGVcblxubGV0IGNoaWxkX2pvaW4gbGVmdCByaWdodCA9IElubmVyIHsgYm91bmQgPSBKdi5udWxsOyBsZWZ0OyByaWdodCB9XG5cbmxldCBqdl9wYXJlbnROb2RlID0gSnN0ci52IFwicGFyZW50Tm9kZVwiXG5sZXQganZfbmV4dFNpYmxpbmcgPSBKc3RyLnYgXCJuZXh0U2libGluZ1wiXG5sZXQganZfYXBwZW5kID0gSnN0ci52IFwiYXBwZW5kXCJcbmxldCBqdl9iZWZvcmUgPSBKc3RyLnYgXCJiZWZvcmVcIlxubGV0IGp2X3JlbW92ZSA9IEpzdHIudiBcInJlbW92ZVwiXG5sZXQganZfY29udGFpbnMgPSBKc3RyLnYgXCJjb250YWluc1wiXG5cbmxldCBqdl90b1JlbW92ZSA9XG4gIEpzdHIudiBcImx3ZC10by1yZW1vdmVcIiAoKiBIQUNLIENvdWxkIGJlIHR1cm5lZCBpbnRvIGEgSmF2YXNjcmlwdCBzeW1ib2wgKilcblxubGV0IGNvbnRhaW5zX2ZvY3VzIG5vZGUgPVxuICBtYXRjaCBCcnIuRG9jdW1lbnQuYWN0aXZlX2VsIChCcnIuRWwuZG9jdW1lbnQgbm9kZSkgd2l0aFxuICB8IE5vbmUgLT4gZmFsc2VcbiAgfCBTb21lIGVsIC0+XG4gICAgSnYudG9fYm9vbCAoSnYuY2FsbCcgKEVsLnRvX2p2IG5vZGUpIGp2X2NvbnRhaW5zIFt8RWwudG9fanYgZWx8XSlcblxubGV0IHVwZGF0ZV9jaGlsZHJlblxuICAgIChzZWxmIDogRWwudClcbiAgICAoY2hpbGRyZW4gOiBFbC50IEx3ZF9zZXEudCBMd2QudCkgOiBFbC50IEx3ZC50ID1cbiAgbGV0IHJlZHVjZXIgPVxuICAgIHJlZiAoTHdkX3NlcS5SZWR1Y2VyLm1ha2Ugfm1hcDpjaGlsZF9ub2RlIH5yZWR1Y2U6Y2hpbGRfam9pbilcbiAgaW5cbiAgTHdkLm1hcCBjaGlsZHJlbiB+ZjpiZWdpbiBmdW4gY2hpbGRyZW4gLT5cbiAgICBsZXQgZHJvcHBlZCwgcmVkdWNlcicgPVxuICAgICAgTHdkX3NlcS5SZWR1Y2VyLnVwZGF0ZV9hbmRfZ2V0X2Ryb3BwZWQgIXJlZHVjZXIgY2hpbGRyZW4gaW5cbiAgICByZWR1Y2VyIDo9IHJlZHVjZXInO1xuICAgIGxldCBzY2hlZHVsZV9mb3JfcmVtb3ZhbCBjaGlsZCAoKSA9IG1hdGNoIGNoaWxkIHdpdGhcbiAgICAgIHwgTGVhZiBub2RlIC0+IEp2LnNldCcgKEVsLnRvX2p2IG5vZGUpIGp2X3RvUmVtb3ZlIEp2LnRydWUnO1xuICAgICAgfCBJbm5lciBfIC0+ICgpXG4gICAgaW5cbiAgICBMd2Rfc2VxLlJlZHVjZXIuZm9sZF9kcm9wcGVkIGBNYXAgc2NoZWR1bGVfZm9yX3JlbW92YWwgZHJvcHBlZCAoKTtcbiAgICBsZXQgcHJlc2VydmVfZm9jdXMgPSBjb250YWluc19mb2N1cyBzZWxmIGluXG4gICAgYmVnaW4gbWF0Y2ggTHdkX3NlcS5SZWR1Y2VyLnJlZHVjZSByZWR1Y2VyJyB3aXRoXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSB0cmVlIC0+XG4gICAgICAgIGxldCByZWMgdXBkYXRlIGFjYyA9IGZ1bmN0aW9uXG4gICAgICAgICAgfCBMZWFmIG5vZGUgLT5cbiAgICAgICAgICAgIGxldCBub2RlJyA9IEVsLnRvX2p2IG5vZGUgaW5cbiAgICAgICAgICAgIEp2LmRlbGV0ZScgbm9kZScganZfdG9SZW1vdmU7XG4gICAgICAgICAgICAoKkJyci5Db25zb2xlLmxvZyBbXCJVcGRhdGluZyBcIjsgbm9kZV07KilcbiAgICAgICAgICAgIGlmIEp2LmdldCcgbm9kZScganZfcGFyZW50Tm9kZSAhPSBFbC50b19qdiBzZWxmIHRoZW4gKFxuICAgICAgICAgICAgICBpZiBKdi5pc19udWxsIGFjY1xuICAgICAgICAgICAgICB0aGVuIGlnbm9yZSAoSnYuY2FsbCcgKEVsLnRvX2p2IHNlbGYpIGp2X2FwcGVuZCBbfG5vZGUnfF0pXG4gICAgICAgICAgICAgIGVsc2UgaWdub3JlIChKdi5jYWxsJyBhY2MganZfYmVmb3JlIFt8bm9kZSd8XSlcbiAgICAgICAgICAgICkgZWxzZSBpZiAoXG4gICAgICAgICAgICAgICgqIENoZWNrIGlmIHRoZXJlIGlzIG5vdCBhbnkgd29yayB0byBkbyAqKVxuICAgICAgICAgICAgICBKdi5nZXQnIG5vZGUnIGp2X25leHRTaWJsaW5nICE9IGFjYyAmJlxuICAgICAgICAgICAgICAoKiBDaGVjayBpZiB3ZSBhcmUgaW4gdGhlIGZvY3VzIGNhc2UgYW5kIHRyeSB0byBcImJ1YmJsZSBzb3J0XCIgdG9cbiAgICAgICAgICAgICAgICAgcHJlc2VydmUgZm9jdXMgKilcbiAgICAgICAgICAgICAgbm90IChcbiAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9mb2N1cyAmJiBjb250YWluc19mb2N1cyBub2RlICYmXG4gICAgICAgICAgICAgICAgbGV0IHJlYyBzaGlmdF9zaWJsaW5ncyAoKSA9XG4gICAgICAgICAgICAgICAgICBsZXQgc2libGluZyA9IEp2LmdldCcgbm9kZScganZfbmV4dFNpYmxpbmcgaW5cbiAgICAgICAgICAgICAgICAgIGlmIHNpYmxpbmcgPT0gYWNjIHRoZW4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgZWxzZSBpZiBKdi5pc19udWxsIHNpYmxpbmcgdGhlbiBmYWxzZVxuICAgICAgICAgICAgICAgICAgZWxzZSAoXG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZSAoSnYuY2FsbCcgbm9kZScganZfYmVmb3JlIFt8c2libGluZ3xdKTtcbiAgICAgICAgICAgICAgICAgICAgc2hpZnRfc2libGluZ3MgKClcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgIHNoaWZ0X3NpYmxpbmdzICgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkgdGhlbiAoXG4gICAgICAgICAgICAgIGlmIEp2LmlzX251bGwgYWNjXG4gICAgICAgICAgICAgIHRoZW4gaWdub3JlIChKdi5jYWxsJyAoRWwudG9fanYgc2VsZikganZfYXBwZW5kIFt8bm9kZSd8XSlcbiAgICAgICAgICAgICAgZWxzZSBpZ25vcmUgKEp2LmNhbGwnIGFjYyBqdl9iZWZvcmUgW3xub2RlJ3xdKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG5vZGUnXG4gICAgICAgICAgfCBJbm5lciB0IC0+XG4gICAgICAgICAgICBpZiBKdi5pc19udWxsIHQuYm91bmQgdGhlbiAoXG4gICAgICAgICAgICAgIGxldCBhY2MgPSB1cGRhdGUgYWNjIHQucmlnaHQgaW5cbiAgICAgICAgICAgICAgbGV0IGFjYyA9IHVwZGF0ZSBhY2MgdC5sZWZ0IGluXG4gICAgICAgICAgICAgIHQuYm91bmQgPC0gYWNjO1xuICAgICAgICAgICAgICBhY2NcbiAgICAgICAgICAgICkgZWxzZVxuICAgICAgICAgICAgICB0LmJvdW5kXG4gICAgICAgIGluXG4gICAgICAgIGlnbm9yZSAodXBkYXRlIEp2Lm51bGwgdHJlZSlcbiAgICBlbmQ7XG4gICAgbGV0IHJlbW92ZV9jaGlsZCBjaGlsZCAoKSA9IG1hdGNoIGNoaWxkIHdpdGhcbiAgICAgIHwgTGVhZiBub2RlIC0+XG4gICAgICAgIGxldCBub2RlID0gRWwudG9fanYgbm9kZSBpblxuICAgICAgICBpZiBKdi5pc19zb21lIChKdi5nZXQnIG5vZGUganZfdG9SZW1vdmUpIHRoZW4gKFxuICAgICAgICAgICgqQnJyLkNvbnNvbGUubG9nIFtcIlJlbW92aW5nIFwiOyBub2RlXTsqKVxuICAgICAgICAgIEp2LmRlbGV0ZScgbm9kZSBqdl90b1JlbW92ZTtcbiAgICAgICAgICBpZ25vcmUgKEp2LmNhbGwnIG5vZGUganZfcmVtb3ZlIFt8fF0pXG4gICAgICAgIClcbiAgICAgIHwgSW5uZXIgXyAtPiAoKVxuICAgIGluXG4gICAgTHdkX3NlcS5SZWR1Y2VyLmZvbGRfZHJvcHBlZCBgTWFwIHJlbW92ZV9jaGlsZCBkcm9wcGVkICgpO1xuICAgIHNlbGZcbiAgZW5kXG5cbmxldCBwdXJlX3VuaXQgPSBMd2QucHVyZSAoKVxuXG5sZXQgZHVtbXlfa3ZfYXQgPSAoSnN0ci5lbXB0eSwgSnN0ci5lbXB0eSlcblxubGV0IGF0dGFjaF9hdHRyaWJzIGVsIGF0dHJpYnMgPVxuICBsZXQgc2V0X2t2IChrLCB2KSA9XG4gICAgaWYgSnN0ci5lcXVhbCBrIEF0Lk5hbWUuY2xhc3MnXG4gICAgdGhlbiBFbC5zZXRfY2xhc3MgdiB0cnVlIGVsXG4gICAgZWxzZSBFbC5zZXRfYXQgayAoU29tZSB2KSBlbFxuICBpblxuICBsZXQgdW5zZXRfa3YgKGssIHYpID1cbiAgICBpZiBKc3RyLmVxdWFsIGsgQXQuTmFtZS5jbGFzcydcbiAgICB0aGVuIEVsLnNldF9jbGFzcyB2IGZhbHNlIGVsXG4gICAgZWxzZSBFbC5zZXRfYXQgayBOb25lIGVsXG4gIGluXG4gIGxldCBzZXRfbHdkX2F0ICgpID1cbiAgICBsZXQgcHJldiA9IHJlZiBkdW1teV9rdl9hdCBpblxuICAgIGZ1biBhdCAtPlxuICAgICAgaWYgIXByZXYgIT0gZHVtbXlfa3ZfYXQgdGhlblxuICAgICAgICB1bnNldF9rdiAhcHJldjtcbiAgICAgIGxldCBwYWlyID0gQXQudG9fcGFpciBhdCBpblxuICAgICAgc2V0X2t2IHBhaXI7XG4gICAgICBwcmV2IDo9IHBhaXJcbiAgaW5cbiAgTHdkX3V0aWxzLm1hcF9yZWR1Y2UgKGZ1bmN0aW9uXG4gICAgICB8IGBQIF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IGBSIGF0IC0+IEx3ZC5tYXAgfmY6KHNldF9sd2RfYXQgKCkpIGF0XG4gICAgICB8IGBTIGF0cyAtPlxuICAgICAgICBsZXQgc2V0X2F0JyBhdCA9XG4gICAgICAgICAgbGV0IGt2ID0gQXQudG9fcGFpciBhdCBpblxuICAgICAgICAgIHNldF9rdiBrdjtcbiAgICAgICAgICBrdlxuICAgICAgICBpblxuICAgICAgICBsZXQgcmVkdWNlciA9XG4gICAgICAgICAgcmVmIChMd2Rfc2VxLlJlZHVjZXIubWFrZVxuICAgICAgICAgICAgICAgICB+bWFwOnNldF9hdCdcbiAgICAgICAgICAgICAgICAgfnJlZHVjZTooZnVuIF8gXyAtPiBkdW1teV9rdl9hdCkpXG4gICAgICAgIGluXG4gICAgICAgIGxldCB1cGRhdGUgYXRzID1cbiAgICAgICAgICBsZXQgZHJvcHBlZCwgcmVkdWNlcicgPVxuICAgICAgICAgICAgTHdkX3NlcS5SZWR1Y2VyLnVwZGF0ZV9hbmRfZ2V0X2Ryb3BwZWQgIXJlZHVjZXIgYXRzXG4gICAgICAgICAgaW5cbiAgICAgICAgICByZWR1Y2VyIDo9IHJlZHVjZXInO1xuICAgICAgICAgIEx3ZF9zZXEuUmVkdWNlci5mb2xkX2Ryb3BwZWQgYE1hcFxuICAgICAgICAgICAgKGZ1biBrdiAoKSAtPiB1bnNldF9rdiBrdilcbiAgICAgICAgICAgIGRyb3BwZWQgKCk7XG4gICAgICAgICAgaWdub3JlIChMd2Rfc2VxLlJlZHVjZXIucmVkdWNlIHJlZHVjZXInOiBfIG9wdGlvbilcbiAgICAgICAgaW5cbiAgICAgICAgTHdkLm1hcCB+Zjp1cGRhdGUgYXRzXG4gICAgKSAocHVyZV91bml0LCBmdW4gXyBfIC0+IHB1cmVfdW5pdClcbiAgICBhdHRyaWJzXG5cbmxldCBsaXN0ZW4gZWwgKEhhbmRsZXIge29wdHM7IHR5cGUnOyBmdW5jfSkgPVxuICBFdi5saXN0ZW4gP29wdHMgdHlwZScgZnVuYyAoRWwuYXNfdGFyZ2V0IGVsKVxuXG5sZXQgYXR0YWNoX2V2ZW50cyBlbCBldmVudHMgPVxuICBMd2RfdXRpbHMubWFwX3JlZHVjZSAoZnVuY3Rpb25cbiAgICAgIHwgYFAgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgYFIgYXQgLT5cbiAgICAgICAgbGV0IGNhY2hlZCA9IHJlZiBOb25lIGluXG4gICAgICAgIEx3ZC5tYXAgfmY6KGZ1biBoIC0+XG4gICAgICAgICAgICBiZWdpbiBtYXRjaCAhY2FjaGVkIHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgICAgIHwgU29tZSBsIC0+IEV2LnVubGlzdGVuIGxcbiAgICAgICAgICAgIGVuZDtcbiAgICAgICAgICAgIGNhY2hlZCA6PSBTb21lIChsaXN0ZW4gZWwgaClcbiAgICAgICAgICApIGF0XG4gICAgICB8IGBTIGF0cyAtPlxuICAgICAgICBsZXQgcmVkdWNlciA9XG4gICAgICAgICAgcmVmIChMd2Rfc2VxLlJlZHVjZXIubWFrZVxuICAgICAgICAgICAgICAgICB+bWFwOihsaXN0ZW4gZWwpXG4gICAgICAgICAgICAgICAgIH5yZWR1Y2U6KGZ1biB4IF95IC0+IHgpKVxuICAgICAgICBpblxuICAgICAgICBsZXQgdXBkYXRlIGF0cyA9XG4gICAgICAgICAgbGV0IGRyb3BwZWQsIHJlZHVjZXInID1cbiAgICAgICAgICAgIEx3ZF9zZXEuUmVkdWNlci51cGRhdGVfYW5kX2dldF9kcm9wcGVkICFyZWR1Y2VyIGF0c1xuICAgICAgICAgIGluXG4gICAgICAgICAgcmVkdWNlciA6PSByZWR1Y2VyJztcbiAgICAgICAgICBMd2Rfc2VxLlJlZHVjZXIuZm9sZF9kcm9wcGVkIGBNYXBcbiAgICAgICAgICAgIChmdW4gbCAoKSAtPiBFdi51bmxpc3RlbiBsKVxuICAgICAgICAgICAgZHJvcHBlZCAoKTtcbiAgICAgICAgICBpZ25vcmUgKEx3ZF9zZXEuUmVkdWNlci5yZWR1Y2UgcmVkdWNlcic6IF8gb3B0aW9uKVxuICAgICAgICBpblxuICAgICAgICBMd2QubWFwIH5mOnVwZGF0ZSBhdHNcbiAgICApIChwdXJlX3VuaXQsIGZ1biBfIF8gLT4gcHVyZV91bml0KVxuICAgIGV2ZW50c1xuXG5sZXQgdiA/ZCA/KGF0PVtdKSA/KGV2PVtdKSB0YWcgY2hpbGRyZW4gPVxuICBsZXQgYXQsIGltcHVyZV9hdCA9IHByZXBhcmVfY29sIGF0IGluXG4gIGxldCBldiwgaW1wdXJlX2V2ID0gcHJlcGFyZV9jb2wgZXYgaW5cbiAgbGV0IGNoaWxkcmVuLCBpbXB1cmVfY2hpbGRyZW4gPSBjb25zdW1lX2NoaWxkcmVuIGNoaWxkcmVuIGluXG4gIGxldCBlbCA9IEVsLnYgP2QgfmF0IHRhZyBjaGlsZHJlbiBpblxuICBsZXQgcmVzdWx0ID1cbiAgICBtYXRjaCBpbXB1cmVfYXQsIGltcHVyZV9jaGlsZHJlbiB3aXRoXG4gICAgfCBbXSwgTm9uZSAtPiBMd2QucHVyZSBlbFxuICAgIHwgW10sIFNvbWUgY2hpbGRyZW4gLT5cbiAgICAgIHVwZGF0ZV9jaGlsZHJlbiBlbCBjaGlsZHJlblxuICAgIHwgYXQsIE5vbmUgLT5cbiAgICAgIEx3ZC5tYXAgfmY6KGZ1biAoKSAtPiBlbCkgKGF0dGFjaF9hdHRyaWJzIGVsIGF0KVxuICAgIHwgYXQsIFNvbWUgY2hpbGRyZW4gLT5cbiAgICAgIEx3ZC5tYXAyIH5mOihmdW4gKCkgZWwgLT4gZWwpXG4gICAgICAgIChhdHRhY2hfYXR0cmlicyBlbCBhdClcbiAgICAgICAgKHVwZGF0ZV9jaGlsZHJlbiBlbCBjaGlsZHJlbilcbiAgaW5cbiAgTGlzdC5pdGVyIChmdW4gaCAtPiBpZ25vcmUgKGxpc3RlbiBlbCBoKSkgZXY7XG4gIGxldCByZXN1bHQgPVxuICAgIG1hdGNoIGltcHVyZV9ldiB3aXRoXG4gICAgfCBbXSAtPiByZXN1bHRcbiAgICB8IGV2cyAtPlxuICAgICAgTHdkLm1hcDIgfmY6KGZ1biAoKSBlbCAtPiBlbClcbiAgICAgICAgKGF0dGFjaF9ldmVudHMgZWwgZXZzKVxuICAgICAgICByZXN1bHRcbiAgaW5cbiAgcmVzdWx0XG5cbigqKiB7MTplbHMgRWxlbWVudCBjb25zdHJ1Y3RvcnN9ICopXG5cbnR5cGUgY29ucyA9ICA/ZDpkb2N1bWVudCAtPiA/YXQ6QXQudCBjb2wgLT4gP2V2OmhhbmRsZXIgY29sIC0+IHQgY29sIC0+IHQgTHdkLnRcbigqKiBUaGUgdHlwZSBmb3IgZWxlbWVudCBjb25zdHJ1Y3RvcnMuIFRoaXMgaXMgc2ltcGx5IHshdn0gd2l0aCBhXG4gICAgcHJlLWFwcGxpZWQgZWxlbWVudCBuYW1lLiAqKVxuXG50eXBlIHZvaWRfY29ucyA9ID9kOmRvY3VtZW50IC0+ID9hdDpBdC50IGNvbCAtPiA/ZXY6aGFuZGxlciBjb2wgLT4gdW5pdCAtPiB0IEx3ZC50XG4oKiogVGhlIHR5cGUgZm9yIHZvaWQgZWxlbWVudCBjb25zdHJ1Y3RvcnMuIFRoaXMgaXMgc2ltcGx5IHshdn1cbiAgICB3aXRoIGEgcHJlLWFwcGxpZWQgZWxlbWVudCBuYW1lIGFuZCB3aXRob3V0IGNoaWxkcmVuLiAqKVxuXG5sZXQgY29ucyBuYW1lID9kID9hdCA/ZXYgY3MgPSB2ID9kID9hdCA/ZXYgbmFtZSBjc1xubGV0IHZvaWRfY29ucyBuYW1lID9kID9hdCA/ZXYgKCkgPSB2ID9kID9hdCA/ZXYgbmFtZSBbXVxuXG5sZXQgYSA9IGNvbnMgTmFtZS5hXG5sZXQgYWJiciA9IGNvbnMgTmFtZS5hYmJyXG5sZXQgYWRkcmVzcyA9IGNvbnMgTmFtZS5hZGRyZXNzXG5sZXQgYXJlYSA9IHZvaWRfY29ucyBOYW1lLmFyZWFcbmxldCBhcnRpY2xlID0gY29ucyBOYW1lLmFydGljbGVcbmxldCBhc2lkZSA9IGNvbnMgTmFtZS5hc2lkZVxubGV0IGF1ZGlvID0gY29ucyBOYW1lLmF1ZGlvXG5sZXQgYiA9IGNvbnMgTmFtZS5iXG5sZXQgYmFzZSA9IHZvaWRfY29ucyBOYW1lLmJhc2VcbmxldCBiZGkgPSBjb25zIE5hbWUuYmRpXG5sZXQgYmRvID0gY29ucyBOYW1lLmJkb1xubGV0IGJsb2NrcXVvdGUgPSBjb25zIE5hbWUuYmxvY2txdW90ZVxubGV0IGJvZHkgPSBjb25zIE5hbWUuYm9keVxubGV0IGJyID0gdm9pZF9jb25zIE5hbWUuYnJcbmxldCBidXR0b24gPSBjb25zIE5hbWUuYnV0dG9uXG5sZXQgY2FudmFzID0gY29ucyBOYW1lLmNhbnZhc1xubGV0IGNhcHRpb24gPSBjb25zIE5hbWUuY2FwdGlvblxubGV0IGNpdGUgPSBjb25zIE5hbWUuY2l0ZVxubGV0IGNvZGUgPSBjb25zIE5hbWUuY29kZVxubGV0IGNvbCA9IHZvaWRfY29ucyBOYW1lLmNvbFxubGV0IGNvbGdyb3VwID0gY29ucyBOYW1lLmNvbGdyb3VwXG5sZXQgY29tbWFuZCA9IGNvbnMgTmFtZS5jb21tYW5kXG5sZXQgZGF0YWxpc3QgPSBjb25zIE5hbWUuZGF0YWxpc3RcbmxldCBkZCA9IGNvbnMgTmFtZS5kZFxubGV0IGRlbCA9IGNvbnMgTmFtZS5kZWxcbmxldCBkZXRhaWxzID0gY29ucyBOYW1lLmRldGFpbHNcbmxldCBkZm4gPSBjb25zIE5hbWUuZGZuXG5sZXQgZGl2ID0gY29ucyBOYW1lLmRpdlxubGV0IGRsID0gY29ucyBOYW1lLmRsXG5sZXQgZHQgPSBjb25zIE5hbWUuZHRcbmxldCBlbSA9IGNvbnMgTmFtZS5lbVxubGV0IGVtYmVkID0gdm9pZF9jb25zIE5hbWUuZW1iZWRcbmxldCBmaWVsZHNldCA9IGNvbnMgTmFtZS5maWVsZHNldFxubGV0IGZpZ2NhcHRpb24gPSBjb25zIE5hbWUuZmlnY2FwdGlvblxubGV0IGZpZ3VyZSA9IGNvbnMgTmFtZS5maWd1cmVcbmxldCBmb290ZXIgPSBjb25zIE5hbWUuZm9vdGVyXG5sZXQgZm9ybSA9IGNvbnMgTmFtZS5mb3JtXG5sZXQgaDEgPSBjb25zIE5hbWUuaDFcbmxldCBoMiA9IGNvbnMgTmFtZS5oMlxubGV0IGgzID0gY29ucyBOYW1lLmgzXG5sZXQgaDQgPSBjb25zIE5hbWUuaDRcbmxldCBoNSA9IGNvbnMgTmFtZS5oNVxubGV0IGg2ID0gY29ucyBOYW1lLmg2XG5sZXQgaGVhZCA9IGNvbnMgTmFtZS5oZWFkXG5sZXQgaGVhZGVyID0gY29ucyBOYW1lLmhlYWRlclxubGV0IGhncm91cCA9IGNvbnMgTmFtZS5oZ3JvdXBcbmxldCBociA9IHZvaWRfY29ucyBOYW1lLmhyXG5sZXQgaHRtbCA9IGNvbnMgTmFtZS5odG1sXG5sZXQgaSA9IGNvbnMgTmFtZS5pXG5sZXQgaWZyYW1lID0gY29ucyBOYW1lLmlmcmFtZVxubGV0IGltZyA9IHZvaWRfY29ucyBOYW1lLmltZ1xubGV0IGlucHV0ID0gdm9pZF9jb25zIE5hbWUuaW5wdXRcbmxldCBpbnMgPSBjb25zIE5hbWUuaW5zXG5sZXQga2JkID0gY29ucyBOYW1lLmtiZFxubGV0IGtleWdlbiA9IGNvbnMgTmFtZS5rZXlnZW5cbmxldCBsYWJlbCA9IGNvbnMgTmFtZS5sYWJlbFxubGV0IGxlZ2VuZCA9IGNvbnMgTmFtZS5sZWdlbmRcbmxldCBsaSA9IGNvbnMgTmFtZS5saVxubGV0IGxpbmsgPSB2b2lkX2NvbnMgTmFtZS5saW5rXG5sZXQgbWFwID0gY29ucyBOYW1lLm1hcFxubGV0IG1hcmsgPSBjb25zIE5hbWUubWFya1xubGV0IG1lbnUgPSBjb25zIE5hbWUubWVudVxubGV0IG1ldGEgPSB2b2lkX2NvbnMgTmFtZS5tZXRhXG5sZXQgbWV0ZXIgPSBjb25zIE5hbWUubWV0ZXJcbmxldCBuYXYgPSBjb25zIE5hbWUubmF2XG5sZXQgbm9zY3JpcHQgPSBjb25zIE5hbWUubm9zY3JpcHRcbmxldCBvYmplY3QnID0gY29ucyBOYW1lLm9iamVjdCdcbmxldCBvbCA9IGNvbnMgTmFtZS5vbFxubGV0IG9wdGdyb3VwID0gY29ucyBOYW1lLm9wdGdyb3VwXG5sZXQgb3B0aW9uID0gY29ucyBOYW1lLm9wdGlvblxubGV0IG91dHB1dCA9IGNvbnMgTmFtZS5vdXRwdXRcbmxldCBwID0gY29ucyBOYW1lLnBcbmxldCBwYXJhbSA9IHZvaWRfY29ucyBOYW1lLnBhcmFtXG5sZXQgcHJlID0gY29ucyBOYW1lLnByZVxubGV0IHByb2dyZXNzID0gY29ucyBOYW1lLnByb2dyZXNzXG5sZXQgcSA9IGNvbnMgTmFtZS5xXG5sZXQgcnAgPSBjb25zIE5hbWUucnBcbmxldCBydCA9IGNvbnMgTmFtZS5ydFxubGV0IHJ1YnkgPSBjb25zIE5hbWUucnVieVxubGV0IHMgPSBjb25zIE5hbWUuc1xubGV0IHNhbXAgPSBjb25zIE5hbWUuc2FtcFxubGV0IHNjcmlwdCA9IGNvbnMgTmFtZS5zY3JpcHRcbmxldCBzZWN0aW9uID0gY29ucyBOYW1lLnNlY3Rpb25cbmxldCBzZWxlY3QgPSBjb25zIE5hbWUuc2VsZWN0XG5sZXQgc21hbGwgPSBjb25zIE5hbWUuc21hbGxcbmxldCBzb3VyY2UgPSB2b2lkX2NvbnMgTmFtZS5zb3VyY2VcbmxldCBzcGFuID0gY29ucyBOYW1lLnNwYW5cbmxldCBzdHJvbmcgPSBjb25zIE5hbWUuc3Ryb25nXG5sZXQgc3R5bGUgPSBjb25zIE5hbWUuc3R5bGVcbmxldCBzdWIgPSBjb25zIE5hbWUuc3ViXG5sZXQgc3VtbWFyeSA9IGNvbnMgTmFtZS5zdW1tYXJ5XG5sZXQgc3VwID0gY29ucyBOYW1lLnN1cFxubGV0IHRhYmxlID0gY29ucyBOYW1lLnRhYmxlXG5sZXQgdGJvZHkgPSBjb25zIE5hbWUudGJvZHlcbmxldCB0ZCA9IGNvbnMgTmFtZS50ZFxubGV0IHRleHRhcmVhID0gY29ucyBOYW1lLnRleHRhcmVhXG5sZXQgdGZvb3QgPSBjb25zIE5hbWUudGZvb3RcbmxldCB0aCA9IGNvbnMgTmFtZS50aFxubGV0IHRoZWFkID0gY29ucyBOYW1lLnRoZWFkXG5sZXQgdGltZSA9IGNvbnMgTmFtZS50aW1lXG5sZXQgdGl0bGUgPSBjb25zIE5hbWUudGl0bGVcbmxldCB0ciA9IGNvbnMgTmFtZS50clxubGV0IHRyYWNrID0gdm9pZF9jb25zIE5hbWUudHJhY2tcbmxldCB1ID0gY29ucyBOYW1lLnVcbmxldCB1bCA9IGNvbnMgTmFtZS51bFxubGV0IHZhciA9IGNvbnMgTmFtZS52YXJcbmxldCB2aWRlbyA9IGNvbnMgTmFtZS52aWRlb1xubGV0IHdiciA9IHZvaWRfY29ucyBOYW1lLndiclxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIEFycmF5IHV0aWxzfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxudHlwZSAnYSBlcXVhbCA9ICdhIC0+ICdhIC0+IGJvb2xcbnR5cGUgJ2Egb3JkID0gJ2EgLT4gJ2EgLT4gaW50XG50eXBlICdhIHJhbmRvbV9nZW4gPSBSYW5kb20uU3RhdGUudCAtPiAnYVxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbigqKiB7MiBBcnJheXN9ICopXG5cbmluY2x1ZGUgQXJyYXlcblxubGV0IGVtcHR5ID0gW3x8XVxuXG5sZXQgZ2V0X3NhZmUgYSBpID1cbiAgaWYgaSA+PSAwICYmIGkgPCBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgU29tZSAoQXJyYXkudW5zYWZlX2dldCBhIGkpXG4gIGVsc2VcbiAgICBOb25lXG5cbmxldCBtYXBfaW5wbGFjZSBmIGEgPSBBcnJheS5pdGVyaSAoZnVuIGkgZSAtPiBBcnJheS51bnNhZmVfc2V0IGEgaSAoZiBlKSkgYVxubGV0IG1hcGlfaW5wbGFjZSBmIGEgPSBBcnJheS5pdGVyaSAoZnVuIGkgZSAtPiBBcnJheS51bnNhZmVfc2V0IGEgaSAoZiBpIGUpKSBhXG5sZXQgZm9sZCA9IEFycmF5LmZvbGRfbGVmdFxuXG5sZXQgZm9sZGkgZiBhY2MgYSA9XG4gIGxldCByZWMgYXV4IGFjYyBpID1cbiAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgYXV4IChmIGFjYyBpIGEuKGkpKSAoaSArIDEpXG4gIGluXG4gIGF1eCBhY2MgMFxuXG5sZXQgZm9sZF93aGlsZSBmIGFjYyBhID1cbiAgbGV0IHJlYyBmb2xkX3doaWxlX2kgZiBhY2MgaSA9XG4gICAgaWYgaSA8IEFycmF5Lmxlbmd0aCBhIHRoZW4gKFxuICAgICAgbGV0IGFjYywgY29udCA9IGYgYWNjIGEuKGkpIGluXG4gICAgICBtYXRjaCBjb250IHdpdGhcbiAgICAgIHwgYFN0b3AgLT4gYWNjXG4gICAgICB8IGBDb250aW51ZSAtPiBmb2xkX3doaWxlX2kgZiBhY2MgKGkgKyAxKVxuICAgICkgZWxzZVxuICAgICAgYWNjXG4gIGluXG4gIGZvbGRfd2hpbGVfaSBmIGFjYyAwXG5cbmxldCBmb2xkX21hcCBmIGFjYyBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICAoKiBuZWVkIHNwZWNpYWwgY2FzZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSByZXN1bHQgKilcbiAgaWYgbiA9IDAgdGhlblxuICAgIGFjYywgW3x8XVxuICBlbHNlIChcbiAgICBsZXQgYWNjLCBiMCA9IGYgYWNjIGEuKDApIGluXG4gICAgbGV0IHJlcyA9IEFycmF5Lm1ha2UgbiBiMCBpblxuICAgIGxldCBhY2MgPSByZWYgYWNjIGluXG4gICAgZm9yIGkgPSAxIHRvIG4gLSAxIGRvXG4gICAgICBsZXQgbmV3X2FjYywgYiA9IGYgIWFjYyBhLihpKSBpblxuICAgICAgYWNjIDo9IG5ld19hY2M7XG4gICAgICByZXMuKGkpIDwtIGJcbiAgICBkb25lO1xuICAgICFhY2MsIHJlc1xuICApXG5cbmxldCBzY2FuX2xlZnQgZiBhY2MgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlcyA9IEFycmF5Lm1ha2UgKG4gKyAxKSBhY2MgaW5cbiAgQXJyYXkuaXRlcmlcbiAgICAoZnVuIGkgeCAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBmIHJlcy4oaSkgeCBpblxuICAgICAgcmVzLihpICsgMSkgPC0gbmV3X2FjYylcbiAgICBhO1xuICByZXNcblxubGV0IHJldmVyc2VfaW5fcGxhY2UgYSA9XG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggYSBpblxuICBpZiBsZW4gPiAwIHRoZW5cbiAgICBmb3IgayA9IDAgdG8gKGxlbiAtIDEpIC8gMiBkb1xuICAgICAgbGV0IHQgPSBhLihrKSBpblxuICAgICAgYS4oaykgPC0gYS4obGVuIC0gMSAtIGspO1xuICAgICAgYS4obGVuIC0gMSAtIGspIDwtIHRcbiAgICBkb25lXG5cbmxldCBzb3J0ZWQgY21wIGEgPVxuICBsZXQgYiA9IEFycmF5LmNvcHkgYSBpblxuICBBcnJheS5zb3J0IGNtcCBiO1xuICBiXG5cbmxldCBzb3J0X2luZGljZXMgY21wIGEgPVxuICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgbGV0IGIgPSBBcnJheS5pbml0IGxlbiAoZnVuIGsgLT4gaykgaW5cbiAgQXJyYXkuc29ydCAoZnVuIGsxIGsyIC0+IGNtcCBhLihrMSkgYS4oazIpKSBiO1xuICBiXG5cbmxldCBzb3J0X3JhbmtpbmcgY21wIGEgPSBzb3J0X2luZGljZXMgY29tcGFyZSAoc29ydF9pbmRpY2VzIGNtcCBhKVxuXG5sZXQgcmV2IGEgPVxuICBsZXQgYiA9IEFycmF5LmNvcHkgYSBpblxuICByZXZlcnNlX2luX3BsYWNlIGI7XG4gIGJcblxuZXhjZXB0aW9uIEZvdW5kXG5cbmxldCBtZW0gPyhlcSA9IFN0ZGxpYi4oID0gKSkgZWx0IGEgPVxuICB0cnlcbiAgICBBcnJheS5pdGVyIChmdW4gZSAtPiBpZiBlcSBlIGVsdCB0aGVuIHJhaXNlX25vdHJhY2UgRm91bmQpIGE7XG4gICAgZmFsc2VcbiAgd2l0aCBGb3VuZCAtPiB0cnVlXG5cbmxldCByZWMgZmluZF9hdXggZiBhIGkgPVxuICBpZiBpID49IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICBOb25lXG4gIGVsc2UgKFxuICAgIG1hdGNoIGYgaSBhLihpKSB3aXRoXG4gICAgfCBTb21lIF8gYXMgcmVzIC0+IHJlc1xuICAgIHwgTm9uZSAtPiBmaW5kX2F1eCBmIGEgKGkgKyAxKVxuICApXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTMyXCJdXG5cbmxldCBmaW5kX21hcCBmIGEgPSBmaW5kX2F1eCAoZnVuIF8gLT4gZikgYSAwXG5sZXQgZmluZCA9IGZpbmRfbWFwXG5sZXQgZmluZF9tYXBfaSBmIGEgPSBmaW5kX2F1eCBmIGEgMFxubGV0IGZpbmRpID0gZmluZF9tYXBfaVxuXG5bQEBAb2NhbWwud2FybmluZyBcIiszMlwiXVxuXG5sZXQgZmluZF9pZHggcCBhID1cbiAgZmluZF9hdXhcbiAgICAoZnVuIGkgeCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgU29tZSAoaSwgeClcbiAgICAgIGVsc2VcbiAgICAgICAgTm9uZSlcbiAgICBhIDBcblxubGV0IG1heCBjbXAgYSA9XG4gIGlmIEFycmF5Lmxlbmd0aCBhID0gMCB0aGVuXG4gICAgTm9uZVxuICBlbHNlXG4gICAgU29tZVxuICAgICAgKGZvbGRcbiAgICAgICAgIChmdW4gYWNjIGVsdCAtPlxuICAgICAgICAgICBpZiBjbXAgYWNjIGVsdCA8IDAgdGhlblxuICAgICAgICAgICAgIGVsdFxuICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgYWNjKVxuICAgICAgICAgYS4oMCkgYSlcblxubGV0IG1heF9leG4gY21wIGEgPVxuICBtYXRjaCBtYXggY21wIGEgd2l0aFxuICB8IE5vbmUgLT4gaW52YWxpZF9hcmcgXCJDQ0FycmF5Lm1heF9leG5cIlxuICB8IFNvbWUgZWx0IC0+IGVsdFxuXG5sZXQgYXJnbWF4IGNtcCBhID1cbiAgaWYgQXJyYXkubGVuZ3RoIGEgPSAwIHRoZW5cbiAgICBOb25lXG4gIGVsc2VcbiAgICBTb21lXG4gICAgICAoZm9sZGlcbiAgICAgICAgIChmdW4gYWNjIGkgZWx0IC0+XG4gICAgICAgICAgIGlmIGNtcCBhLihhY2MpIGVsdCA8IDAgdGhlblxuICAgICAgICAgICAgIGlcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIGFjYylcbiAgICAgICAgIDAgYSlcblxubGV0IGFyZ21heF9leG4gY21wIGEgPVxuICBtYXRjaCBhcmdtYXggY21wIGEgd2l0aFxuICB8IE5vbmUgLT4gaW52YWxpZF9hcmcgXCJDQ0FycmF5LmFyZ21heF9leG5cIlxuICB8IFNvbWUgZWx0IC0+IGVsdFxuXG5sZXQgbWluIGNtcCBhID1cbiAgaWYgQXJyYXkubGVuZ3RoIGEgPSAwIHRoZW5cbiAgICBOb25lXG4gIGVsc2VcbiAgICBTb21lXG4gICAgICAoZm9sZFxuICAgICAgICAgKGZ1biBhY2MgZWx0IC0+XG4gICAgICAgICAgIGlmIGNtcCBhY2MgZWx0ID4gMCB0aGVuXG4gICAgICAgICAgICAgZWx0XG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBhY2MpXG4gICAgICAgICBhLigwKSBhKVxuXG5sZXQgbWluX2V4biBjbXAgYSA9XG4gIG1hdGNoIG1pbiBjbXAgYSB3aXRoXG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDQXJyYXkubWluX2V4blwiXG4gIHwgU29tZSBlbHQgLT4gZWx0XG5cbmxldCBhcmdtaW4gY21wIGEgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlblxuICAgIE5vbmVcbiAgZWxzZVxuICAgIFNvbWVcbiAgICAgIChmb2xkaVxuICAgICAgICAgKGZ1biBhY2MgaSBlbHQgLT5cbiAgICAgICAgICAgaWYgY21wIGEuKGFjYykgZWx0ID4gMCB0aGVuXG4gICAgICAgICAgICAgaVxuICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgYWNjKVxuICAgICAgICAgMCBhKVxuXG5sZXQgYXJnbWluX2V4biBjbXAgYSA9XG4gIG1hdGNoIGFyZ21pbiBjbXAgYSB3aXRoXG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDQXJyYXkuYXJnbWluX2V4blwiXG4gIHwgU29tZSBlbHQgLT4gZWx0XG5cbmxldCBmaWx0ZXJfbWFwIGYgYSA9XG4gIGxldCByZWMgYXV4IGFjYyBpID1cbiAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgYScgPSBBcnJheS5vZl9saXN0IGFjYyBpblxuICAgICAgcmV2ZXJzZV9pbl9wbGFjZSBhJztcbiAgICAgIGEnXG4gICAgKSBlbHNlIChcbiAgICAgIG1hdGNoIGYgYS4oaSkgd2l0aFxuICAgICAgfCBOb25lIC0+IGF1eCBhY2MgKGkgKyAxKVxuICAgICAgfCBTb21lIHggLT4gYXV4ICh4IDo6IGFjYykgKGkgKyAxKVxuICAgIClcbiAgaW5cbiAgYXV4IFtdIDBcblxubGV0IGZpbHRlciBwIGEgPVxuICBmaWx0ZXJfbWFwXG4gICAgKGZ1biB4IC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBTb21lIHhcbiAgICAgIGVsc2VcbiAgICAgICAgTm9uZSlcbiAgICBhXG5cbigqIGFwcGVuZCBbcmV2IGFdIGluIGZyb250IG9mIFthY2NdICopXG5sZXQgcmVjIF9fcmV2X2FwcGVuZF9saXN0IGEgYWNjIGkgPVxuICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgIGFjY1xuICBlbHNlXG4gICAgX19yZXZfYXBwZW5kX2xpc3QgYSAoYS4oaSkgOjogYWNjKSAoaSArIDEpXG5cbmxldCBmbGF0X21hcCBmIGEgPVxuICBsZXQgcmVjIGF1eCBhY2MgaSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW4gKFxuICAgICAgbGV0IGEnID0gQXJyYXkub2ZfbGlzdCBhY2MgaW5cbiAgICAgIHJldmVyc2VfaW5fcGxhY2UgYSc7XG4gICAgICBhJ1xuICAgICkgZWxzZSAoXG4gICAgICBsZXQgYScgPSBmIGEuKGkpIGluXG4gICAgICBhdXggKF9fcmV2X2FwcGVuZF9saXN0IGEnIGFjYyAwKSAoaSArIDEpXG4gICAgKVxuICBpblxuICBhdXggW10gMFxuXG5sZXQgbW9ub2lkX3Byb2R1Y3QgZiBhMSBhMiA9XG4gIGxldCBuYTEgPSBsZW5ndGggYTEgaW5cbiAgaW5pdFxuICAgIChuYTEgKiBsZW5ndGggYTIpXG4gICAgKGZ1biBpX3Byb2QgLT5cbiAgICAgIGxldCBpID0gaV9wcm9kIG1vZCBuYTEgaW5cbiAgICAgIGxldCBqID0gaV9wcm9kIC8gbmExIGluXG4gICAgICBmIGExLihpKSBhMi4oaikpXG5cbmxldCByZWMgX2xvb2t1cF9yZWMgfmNtcCBrIGEgaSBqID1cbiAgaWYgaSA+IGogdGhlblxuICAgIHJhaXNlIE5vdF9mb3VuZFxuICBlbHNlIGlmIGkgPSBqIHRoZW5cbiAgICBpZiBjbXAgayBhLihpKSA9IDAgdGhlblxuICAgICAgaVxuICAgIGVsc2VcbiAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICBlbHNlIChcbiAgICBsZXQgbWlkZGxlID0gKGogKyBpKSAvIDIgaW5cbiAgICBtYXRjaCBjbXAgayBhLihtaWRkbGUpIHdpdGhcbiAgICB8IDAgLT4gbWlkZGxlXG4gICAgfCBuIHdoZW4gbiA8IDAgLT4gX2xvb2t1cF9yZWMgfmNtcCBrIGEgaSAobWlkZGxlIC0gMSlcbiAgICB8IF8gLT4gX2xvb2t1cF9yZWMgfmNtcCBrIGEgKG1pZGRsZSArIDEpIGpcbiAgKVxuXG5sZXQgX2xvb2t1cF9leG4gfmNtcCBrIGEgaSBqID1cbiAgaWYgaSA+IGogdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gIG1hdGNoIGNtcCBrIGEuKGkpIHdpdGhcbiAgfCAwIC0+IGlcbiAgfCBuIHdoZW4gbiA8IDAgLT4gcmFpc2UgTm90X2ZvdW5kICgqIHRvbyBsb3cgKilcbiAgfCBfIHdoZW4gaSA9IGogLT4gcmFpc2UgTm90X2ZvdW5kICgqIHRvbyBoaWdoICopXG4gIHwgXyAtPlxuICAgIChtYXRjaCBjbXAgayBhLihqKSB3aXRoXG4gICAgfCAwIC0+IGpcbiAgICB8IG4gd2hlbiBuIDwgMCAtPiBfbG9va3VwX3JlYyB+Y21wIGsgYSAoaSArIDEpIChqIC0gMSlcbiAgICB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kKVxuKCogdG9vIGhpZ2ggKilcblxubGV0IGxvb2t1cF9leG4gfmNtcCBrIGEgPSBfbG9va3VwX2V4biB+Y21wIGsgYSAwIChBcnJheS5sZW5ndGggYSAtIDEpXG5cbmxldCBsb29rdXAgfmNtcCBrIGEgPVxuICB0cnkgU29tZSAoX2xvb2t1cF9leG4gfmNtcCBrIGEgMCAoQXJyYXkubGVuZ3RoIGEgLSAxKSlcbiAgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG5sZXQgYnNlYXJjaCB+Y21wIGsgYSA9XG4gIGxldCByZWMgYXV4IGkgaiA9XG4gICAgaWYgaSA+IGogdGhlblxuICAgICAgYEp1c3RfYWZ0ZXIgalxuICAgIGVsc2UgKFxuICAgICAgbGV0IG1pZGRsZSA9IGkgKyAoKGogLSBpKSAvIDIpIGluXG4gICAgICAoKiBhdm9pZCBvdmVyZmxvdyAqKVxuICAgICAgbWF0Y2ggY21wIGsgYS4obWlkZGxlKSB3aXRoXG4gICAgICB8IDAgLT4gYEF0IG1pZGRsZVxuICAgICAgfCBuIHdoZW4gbiA8IDAgLT4gYXV4IGkgKG1pZGRsZSAtIDEpXG4gICAgICB8IF8gLT4gYXV4IChtaWRkbGUgKyAxKSBqXG4gICAgKVxuICBpblxuICBsZXQgbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGlmIG4gPSAwIHRoZW5cbiAgICBgRW1wdHlcbiAgZWxzZSAoXG4gICAgbWF0Y2ggY21wIGEuKDApIGssIGNtcCBhLihuIC0gMSkgayB3aXRoXG4gICAgfCBjLCBfIHdoZW4gYyA+IDAgLT4gYEFsbF9iaWdnZXJcbiAgICB8IF8sIGMgd2hlbiBjIDwgMCAtPiBgQWxsX2xvd2VyXG4gICAgfCBfIC0+IGF1eCAwIChuIC0gMSlcbiAgKVxuXG5sZXQgcmVjIF9mb3JfYWxsMiBwIGExIGEyIGkxIGkyIH5sZW4gPVxuICBsZW4gPSAwXG4gIHx8IChwIGExLihpMSkgYTIuKGkyKSAmJiBfZm9yX2FsbDIgcCBhMSBhMiAoaTEgKyAxKSAoaTIgKyAxKSB+bGVuOihsZW4gLSAxKSlcblxubGV0IGZvcl9hbGwyIHAgYSBiID1cbiAgQXJyYXkubGVuZ3RoIGEgPSBBcnJheS5sZW5ndGggYiAmJiBfZm9yX2FsbDIgcCBhIGIgMCAwIH5sZW46KEFycmF5Lmxlbmd0aCBhKVxuXG5sZXQgcmVjIF9leGlzdHMyIHAgYTEgYTIgaTEgaTIgfmxlbiA9XG4gIGxlbiA+IDBcbiAgJiYgKHAgYTEuKGkxKSBhMi4oaTIpIHx8IF9leGlzdHMyIHAgYTEgYTIgKGkxICsgMSkgKGkyICsgMSkgfmxlbjoobGVuIC0gMSkpXG5cbmxldCBleGlzdHMyIHAgYSBiID1cbiAgX2V4aXN0czIgcCBhIGIgMCAwIH5sZW46KFN0ZGxpYi5taW4gKEFycmF5Lmxlbmd0aCBhKSAoQXJyYXkubGVuZ3RoIGIpKVxuXG5sZXQgX2ZvbGQyIGYgYWNjIGEgYiBpIGogfmxlbiA9XG4gIGxldCByZWMgYXV4IGFjYyBvID1cbiAgICBpZiBvID0gbGVuIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2UgKFxuICAgICAgbGV0IGFjYyA9IGYgYWNjIChBcnJheS5nZXQgYSAoaSArIG8pKSAoQXJyYXkuZ2V0IGIgKGogKyBvKSkgaW5cbiAgICAgIGF1eCBhY2MgKG8gKyAxKVxuICAgIClcbiAgaW5cbiAgYXV4IGFjYyAwXG5cbmxldCBmb2xkMiBmIGFjYyBhIGIgPVxuICBpZiBsZW5ndGggYSA8PiBsZW5ndGggYiB0aGVuIGludmFsaWRfYXJnIFwiZm9sZDJcIjtcbiAgX2ZvbGQyIGYgYWNjIGEgYiAwIDAgfmxlbjooQXJyYXkubGVuZ3RoIGEpXG5cbmxldCAoIC0tICkgaSBqID1cbiAgaWYgaSA8PSBqIHRoZW5cbiAgICBBcnJheS5pbml0IChqIC0gaSArIDEpIChmdW4gayAtPiBpICsgaylcbiAgZWxzZVxuICAgIEFycmF5LmluaXQgKGkgLSBqICsgMSkgKGZ1biBrIC0+IGkgLSBrKVxuXG5sZXQgKCAtLV4gKSBpIGogPVxuICBpZiBpID0gaiB0aGVuXG4gICAgW3x8XVxuICBlbHNlIGlmIGkgPiBqIHRoZW5cbiAgICBBcnJheS5pbml0IChpIC0gaikgKGZ1biBrIC0+IGkgLSBrKVxuICBlbHNlXG4gICAgQXJyYXkuaW5pdCAoaiAtIGkpIChmdW4gayAtPiBpICsgaylcblxuKCoqIGFsbCB0aGUgZWxlbWVudHMgb2YgYSwgYnV0IHRoZSBpLXRoLCBpbnRvIGEgbGlzdCAqKVxubGV0IGV4Y2VwdF9pZHggYSBpID1cbiAgZm9sZGlcbiAgICAoZnVuIGFjYyBqIGVsdCAtPlxuICAgICAgaWYgaSA9IGogdGhlblxuICAgICAgICBhY2NcbiAgICAgIGVsc2VcbiAgICAgICAgZWx0IDo6IGFjYylcbiAgICBbXSBhXG5cbmxldCBlcXVhbCBlcSBhIGIgPVxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgICAgdHJ1ZVxuICAgIGVsc2VcbiAgICAgIGVxIGEuKGkpIGIuKGkpICYmIGF1eCAoaSArIDEpXG4gIGluXG4gIEFycmF5Lmxlbmd0aCBhID0gQXJyYXkubGVuZ3RoIGIgJiYgYXV4IDBcblxubGV0IGNvbXBhcmUgY21wIGEgYiA9XG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGIgdGhlblxuICAgICAgICAwXG4gICAgICBlbHNlXG4gICAgICAgIC0xXG4gICAgZWxzZSBpZiBpID0gQXJyYXkubGVuZ3RoIGIgdGhlblxuICAgICAgMVxuICAgIGVsc2UgKFxuICAgICAgbGV0IGMgPSBjbXAgYS4oaSkgYi4oaSkgaW5cbiAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgYXV4IChpICsgMSlcbiAgICAgIGVsc2VcbiAgICAgICAgY1xuICAgIClcbiAgaW5cbiAgYXV4IDBcblxuKCogc3dhcCBlbGVtZW50cyBvZiBhcnJheSAqKVxubGV0IHN3YXAgYSBpIGogPVxuICBpZiBpIDw+IGogdGhlbiAoXG4gICAgbGV0IHRtcCA9IGEuKGkpIGluXG4gICAgYS4oaSkgPC0gYS4oaik7XG4gICAgYS4oaikgPC0gdG1wXG4gIClcblxuKCogc2h1ZmZsZSBhW2kg4oCmIGpdIHVzaW5nIHRoZSBnaXZlbiBpbnQgcmFuZG9tIGdlbmVyYXRvclxuICAgU2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlzaGVyLVlhdGVzX3NodWZmbGUgKilcbmxldCBfc2h1ZmZsZSBfcmFuZF9pbnQgYSBpIGogPVxuICBmb3IgayA9IGogLSAxIGRvd250byBpICsgMSBkb1xuICAgIGxldCBsID0gX3JhbmRfaW50IChrICsgMSkgaW5cbiAgICBsZXQgdG1wID0gYS4obCkgaW5cbiAgICBhLihsKSA8LSBhLihrKTtcbiAgICBhLihrKSA8LSB0bXBcbiAgZG9uZVxuXG5sZXQgc2h1ZmZsZSBhID0gX3NodWZmbGUgUmFuZG9tLmludCBhIDAgKEFycmF5Lmxlbmd0aCBhKVxubGV0IHNodWZmbGVfd2l0aCBzdCBhID0gX3NodWZmbGUgKFJhbmRvbS5TdGF0ZS5pbnQgc3QpIGEgMCAoQXJyYXkubGVuZ3RoIGEpXG5cbmxldCByYW5kb21fY2hvb3NlIGEgPVxuICBsZXQgbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGlmIG4gPSAwIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5yYW5kb21fY2hvb3NlXCI7XG4gIGZ1biBzdCAtPiBhLihSYW5kb20uU3RhdGUuaW50IHN0IG4pXG5cbmxldCByYW5kb21fbGVuIG4gZyBzdCA9IEFycmF5LmluaXQgbiAoZnVuIF8gLT4gZyBzdClcblxubGV0IHJhbmRvbSBnIHN0ID1cbiAgbGV0IG4gPSBSYW5kb20uU3RhdGUuaW50IHN0IDFfMDAwIGluXG4gIHJhbmRvbV9sZW4gbiBnIHN0XG5cbmxldCByYW5kb21fbm9uX2VtcHR5IGcgc3QgPVxuICBsZXQgbiA9IDEgKyBSYW5kb20uU3RhdGUuaW50IHN0IDFfMDAwIGluXG4gIHJhbmRvbV9sZW4gbiBnIHN0XG5cbmxldCBwcCA/KHBwX3N0YXJ0ID0gZnVuIF8gKCkgLT4gKCkpID8ocHBfc3RvcCA9IGZ1biBfICgpIC0+ICgpKVxuICAgID8ocHBfc2VwID0gZnVuIG91dCAoKSAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCIsQCBcIikgcHBfaXRlbSBvdXQgYSA9XG4gIHBwX3N0YXJ0IG91dCAoKTtcbiAgZm9yIGsgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgIGlmIGsgPiAwIHRoZW4gcHBfc2VwIG91dCAoKTtcbiAgICBwcF9pdGVtIG91dCBhLihrKVxuICBkb25lO1xuICBwcF9zdG9wIG91dCAoKVxuXG5sZXQgcHBfaSA/KHBwX3N0YXJ0ID0gZnVuIF8gKCkgLT4gKCkpID8ocHBfc3RvcCA9IGZ1biBfICgpIC0+ICgpKVxuICAgID8ocHBfc2VwID0gZnVuIG91dCAoKSAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCIsQCBcIikgcHBfaXRlbSBvdXQgYSA9XG4gIHBwX3N0YXJ0IG91dCAoKTtcbiAgZm9yIGsgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgIGlmIGsgPiAwIHRoZW4gcHBfc2VwIG91dCAoKTtcbiAgICBwcF9pdGVtIGsgb3V0IGEuKGspXG4gIGRvbmU7XG4gIHBwX3N0b3Agb3V0ICgpXG5cbmxldCB0b19zdHJpbmcgPyhzZXAgPSBcIiwgXCIpIGl0ZW1fdG9fc3RyaW5nIGEgPVxuICBBcnJheS50b19saXN0IGEgfD4gTGlzdC5tYXAgaXRlbV90b19zdHJpbmcgfD4gU3RyaW5nLmNvbmNhdCBzZXBcblxubGV0IHRvX3NlcSBhID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA+PSBsZW5ndGggYSB0aGVuXG4gICAgICBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgU2VxLkNvbnMgKGEuKGkpLCBhdXggKGkgKyAxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX2l0ZXIgYSBrID0gaXRlciBrIGFcblxubGV0IHRvX2dlbiBhID1cbiAgbGV0IGsgPSByZWYgMCBpblxuICBmdW4gKCkgLT5cbiAgICBpZiAhayA8IEFycmF5Lmxlbmd0aCBhIHRoZW4gKFxuICAgICAgbGV0IHggPSBhLighaykgaW5cbiAgICAgIGluY3IgaztcbiAgICAgIFNvbWUgeFxuICAgICkgZWxzZVxuICAgICAgTm9uZVxuXG4oKiogezIgR2VuZXJpYyBGdW5jdGlvbnN9ICopXG5cbm1vZHVsZSB0eXBlIE1PTk9fQVJSQVkgPSBzaWdcbiAgdHlwZSBlbHRcbiAgdHlwZSB0XG5cbiAgdmFsIGxlbmd0aCA6IHQgLT4gaW50XG4gIHZhbCBnZXQgOiB0IC0+IGludCAtPiBlbHRcbiAgdmFsIHNldCA6IHQgLT4gaW50IC0+IGVsdCAtPiB1bml0XG5lbmRcblxuKCogRHVhbCBQaXZvdCBRdWlja3NvcnQgKFlhcm9zbGF2c2tpeSlcbiAgIGZyb20gXCJhdmVyYWdlIGNhc2UgYW5hbHlzaXMgb2YgSmF2YSA3J3MgRHVhbCBQaXZvdCBRdWlja3NvcnRcIiAqKVxubW9kdWxlIFNvcnRHZW5lcmljIChBIDogTU9OT19BUlJBWSkgPSBzdHJ1Y3RcbiAgbW9kdWxlIFJhbmQgPSBSYW5kb20uU3RhdGVcblxuICBsZXQgc2VlZF8gPSBbfCAxMjM0NTYgfF1cblxuICB0eXBlIHN0YXRlID0ge1xuICAgIG11dGFibGUgbDogaW50OyAoKiBsZWZ0IHBvaW50ZXIgKilcbiAgICBtdXRhYmxlIGc6IGludDsgKCogcmlnaHQgcG9pbnRlciAqKVxuICAgIG11dGFibGUgazogaW50O1xuICB9XG5cbiAgbGV0IHJhbmRfaWR4XyByYW5kIGkgaiA9IGkgKyBSYW5kLmludCByYW5kIChqIC0gaSlcblxuICBsZXQgc3dhcF8gYSBpIGogPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgICgpXG4gICAgZWxzZSAoXG4gICAgICBsZXQgdG1wID0gQS5nZXQgYSBpIGluXG4gICAgICBBLnNldCBhIGkgKEEuZ2V0IGEgaik7XG4gICAgICBBLnNldCBhIGogdG1wXG4gICAgKVxuXG4gIGxldCBzb3J0IH5jbXAgYSA9XG4gICAgbGV0IHJlYyBpbnNlcnRfIGEgaSBrID1cbiAgICAgIGlmIGsgPCBpIHRoZW5cbiAgICAgICAgKClcbiAgICAgIGVsc2UgaWYgY21wIChBLmdldCBhIGspIChBLmdldCBhIChrICsgMSkpID4gMCB0aGVuIChcbiAgICAgICAgc3dhcF8gYSBrIChrICsgMSk7XG4gICAgICAgIGluc2VydF8gYSBpIChrIC0gMSlcbiAgICAgIClcbiAgICBpblxuICAgICgqIHJlY3Vyc2l2ZSBwYXJ0IG9mIGluc2VydGlvbiBzb3J0ICopXG4gICAgbGV0IHJlYyBzb3J0X2luc2VydGlvbl9yZWMgYSBpIGogayA9XG4gICAgICBpZiBrIDwgaiB0aGVuIChcbiAgICAgICAgaW5zZXJ0XyBhIGkgKGsgLSAxKTtcbiAgICAgICAgc29ydF9pbnNlcnRpb25fcmVjIGEgaSBqIChrICsgMSlcbiAgICAgIClcbiAgICBpblxuICAgICgqIGluc2VydGlvbiBzb3J0LCBmb3Igc21hbGwgc2xpY2VzICopXG4gICAgbGV0IHNvcnRfaW5zZXJ0aW9uIGEgaSBqID1cbiAgICAgIGlmIGogLSBpID4gMSB0aGVuIHNvcnRfaW5zZXJ0aW9uX3JlYyBhIGkgaiAoaSArIDEpXG4gICAgaW5cbiAgICBsZXQgcmFuZCA9IFJhbmQubWFrZSBzZWVkXyBpblxuICAgICgqIHNvcnQgc2xpY2UuXG4gICAgICAgVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB0aGUgdHdvIHBpdm90cyBhcmUgZXF1YWwsIGJ1dCBpdCdzIHVubGlrZWx5LiAqKVxuICAgIGxldCByZWMgc29ydF9zbGljZV8gfnN0IGEgaSBqID1cbiAgICAgIGlmIGogLSBpID4gMTAgdGhlbiAoXG4gICAgICAgIHN0LmwgPC0gaTtcbiAgICAgICAgc3QuZyA8LSBqIC0gMTtcbiAgICAgICAgc3QuayA8LSBpO1xuICAgICAgICAoKiBjaG9vc2UgcGl2b3RzICopXG4gICAgICAgIGxldCBwID0gQS5nZXQgYSAocmFuZF9pZHhfIHJhbmQgaSBqKSBpblxuICAgICAgICBsZXQgcSA9IEEuZ2V0IGEgKHJhbmRfaWR4XyByYW5kIGkgaikgaW5cbiAgICAgICAgKCogaW52YXJpYW50OiBzdC5wIDw9IHN0LnEsIHN3YXAgdGhlbSBvdGhlcndpc2UgKilcbiAgICAgICAgbGV0IHAsIHEgPVxuICAgICAgICAgIGlmIGNtcCBwIHEgPiAwIHRoZW5cbiAgICAgICAgICAgIHEsIHBcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBwLCBxXG4gICAgICAgIGluXG4gICAgICAgIHdoaWxlIHN0LmsgPD0gc3QuZyBkb1xuICAgICAgICAgIGxldCBjdXIgPSBBLmdldCBhIHN0LmsgaW5cbiAgICAgICAgICBpZiBjbXAgY3VyIHAgPCAwIHRoZW4gKFxuICAgICAgICAgICAgKCogaW5zZXJ0IGluIGxlZnRtb3N0IGJhbmQgKilcbiAgICAgICAgICAgIGlmIHN0LmsgPD4gc3QubCB0aGVuIHN3YXBfIGEgc3QuayBzdC5sO1xuICAgICAgICAgICAgc3QubCA8LSBzdC5sICsgMVxuICAgICAgICAgICkgZWxzZSBpZiBjbXAgY3VyIHEgPiAwIHRoZW4gKFxuICAgICAgICAgICAgKCogaW5zZXJ0IGluIHJpZ2h0bW9zdCBiYW5kICopXG4gICAgICAgICAgICB3aGlsZSBzdC5rIDwgc3QuZyAmJiBjbXAgKEEuZ2V0IGEgc3QuZykgcSA+IDAgZG9cbiAgICAgICAgICAgICAgc3QuZyA8LSBzdC5nIC0gMVxuICAgICAgICAgICAgZG9uZTtcbiAgICAgICAgICAgIHN3YXBfIGEgc3QuayBzdC5nO1xuICAgICAgICAgICAgc3QuZyA8LSBzdC5nIC0gMTtcbiAgICAgICAgICAgICgqIHRoZSBlbGVtZW50IHN3YXBwZWQgZnJvbSB0aGUgcmlnaHQgbWlnaHQgYmUgaW4gdGhlIGZpcnN0IHNpdHVhdGlvbi5cbiAgICAgICAgICAgICAgIHRoYXQgaXMsIDwgcCAgKHdlIGtub3cgaXQncyA8PSBxIGFscmVhZHkpICopXG4gICAgICAgICAgICBpZiBjbXAgKEEuZ2V0IGEgc3QuaykgcCA8IDAgdGhlbiAoXG4gICAgICAgICAgICAgIGlmIHN0LmsgPD4gc3QubCB0aGVuIHN3YXBfIGEgc3QuayBzdC5sO1xuICAgICAgICAgICAgICBzdC5sIDwtIHN0LmwgKyAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzdC5rIDwtIHN0LmsgKyAxXG4gICAgICAgIGRvbmU7XG4gICAgICAgICgqIHNhdmUgdmFsdWVzIGJlZm9yZSByZWN1cnNpbmcgKilcbiAgICAgICAgbGV0IGwgPSBzdC5sIGFuZCBnID0gc3QuZyBhbmQgc29ydF9taWRkbGUgPSBjbXAgcCBxIDwgMCBpblxuICAgICAgICBzb3J0X3NsaWNlXyB+c3QgYSBpIGw7XG4gICAgICAgIGlmIHNvcnRfbWlkZGxlIHRoZW4gc29ydF9zbGljZV8gfnN0IGEgbCAoZyArIDEpO1xuICAgICAgICBzb3J0X3NsaWNlXyB+c3QgYSAoZyArIDEpIGpcbiAgICAgICkgZWxzZVxuICAgICAgICBzb3J0X2luc2VydGlvbiBhIGkgalxuICAgIGluXG4gICAgaWYgQS5sZW5ndGggYSA+IDAgdGhlbiAoXG4gICAgICBsZXQgc3QgPSB7IGwgPSAwOyBnID0gQS5sZW5ndGggYTsgayA9IDAgfSBpblxuICAgICAgc29ydF9zbGljZV8gfnN0IGEgMCAoQS5sZW5ndGggYSlcbiAgICApXG5lbmRcblxubGV0IHNvcnRfZ2VuZXJpYyAodHlwZSBhcnIgZWx0KVxuICAgIChtb2R1bGUgQSA6IE1PTk9fQVJSQVkgd2l0aCB0eXBlIHQgPSBhcnIgYW5kIHR5cGUgZWx0ID0gZWx0KSB+Y21wIGEgPVxuICBsZXQgbW9kdWxlIFMgPSBTb3J0R2VuZXJpYyAoQSkgaW5cbiAgUy5zb3J0IH5jbXAgYVxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPj49ICkgYSBmID0gZmxhdF9tYXAgZiBhXG4gIGxldCAoID4+fCApIGEgZiA9IG1hcCBmIGFcbiAgbGV0ICggPnw9ICkgYSBmID0gbWFwIGYgYVxuICBsZXQgKCAtLSApID0gKCAtLSApXG4gIGxldCAoIC0tXiApID0gKCAtLV4gKVxuXG4gIHR5cGUgJ2EgdCA9ICdhIGFycmF5XG5cbiAgbGV0ICggbGV0KiApID0gKCA+Pj0gKVxuICBsZXQgKCBsZXQrICkgPSAoID58PSApXG4gIGxldFtAaW5saW5lXSAoIGFuZCsgKSBhMSBhMiA9IG1vbm9pZF9wcm9kdWN0IChmdW4geCB5IC0+IHgsIHkpIGExIGEyXG4gIGxldCAoIGFuZCogKSA9ICggYW5kKyApXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuXG5cbnR5cGUgdCA9IGZsb2F0XG5cbnR5cGUgZnBjbGFzcyA9IFN0ZGxpYi5mcGNsYXNzID1cbiAgfCBGUF9ub3JtYWxcbiAgfCBGUF9zdWJub3JtYWxcbiAgfCBGUF96ZXJvXG4gIHwgRlBfaW5maW5pdGVcbiAgfCBGUF9uYW5cblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldCAoID0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPSApXG4gIGxldCAoIDw+ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDw+IClcbiAgbGV0ICggPCApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8IClcbiAgbGV0ICggPiApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+IClcbiAgbGV0ICggPD0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPD0gKVxuICBsZXQgKCA+PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+PSApXG4gIGxldCAoIH4tICkgOiB0IC0+IHQgPSBTdGRsaWIuKCB+LS4gKVxuICBsZXQgKCArICkgOiB0IC0+IHQgLT4gdCA9IFN0ZGxpYi4oICsuIClcbiAgbGV0ICggLSApIDogdCAtPiB0IC0+IHQgPSBTdGRsaWIuKCAtLiApXG4gIGxldCAoICogKSA6IHQgLT4gdCAtPiB0ID0gU3RkbGliLiggKi4gKVxuICBsZXQgKCAvICkgOiB0IC0+IHQgLT4gdCA9IFN0ZGxpYi4oIC8uIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTMyXCJdXG5cbmxldCBuYW4gPSBTdGRsaWIubmFuXG5sZXQgaW5maW5pdHkgPSBTdGRsaWIuaW5maW5pdHlcbmxldCBuZWdfaW5maW5pdHkgPSBTdGRsaWIubmVnX2luZmluaXR5XG5sZXQgbWF4X3ZhbHVlID0gaW5maW5pdHlcbmxldCBtaW5fdmFsdWUgPSBuZWdfaW5maW5pdHlcbmxldCBtYXhfZmluaXRlX3ZhbHVlID0gU3RkbGliLm1heF9mbG9hdFxubGV0IGVwc2lsb24gPSBTdGRsaWIuZXBzaWxvbl9mbG9hdFxubGV0IHBpID0gMHgxLjkyMWZiNTQ0NDJkMThwKzFcbmxldCBpc19uYW4geCA9IFN0ZGxpYi4oY2xhc3NpZnlfZmxvYXQgeCA9IFN0ZGxpYi5GUF9uYW4pXG5sZXQgYWRkID0gKCArLiApXG5sZXQgc3ViID0gKCAtLiApXG5sZXQgbXVsID0gKCAqLiApXG5sZXQgZGl2ID0gKCAvLiApXG5sZXQgbmVnID0gKCB+LS4gKVxubGV0IGFicyA9IFN0ZGxpYi5hYnNfZmxvYXRcbmxldCBzY2FsZSA9ICggKi4gKVxuXG5sZXQgbWluICh4IDogdCkgeSA9XG4gIG1hdGNoIFN0ZGxpYi5jbGFzc2lmeV9mbG9hdCB4LCBTdGRsaWIuY2xhc3NpZnlfZmxvYXQgeSB3aXRoXG4gIHwgRlBfbmFuLCBfIC0+IHlcbiAgfCBfLCBGUF9uYW4gLT4geFxuICB8IF8gLT5cbiAgICBpZiB4IDwgeSB0aGVuXG4gICAgICB4XG4gICAgZWxzZVxuICAgICAgeVxuXG5sZXQgbWF4ICh4IDogdCkgeSA9XG4gIG1hdGNoIFN0ZGxpYi5jbGFzc2lmeV9mbG9hdCB4LCBTdGRsaWIuY2xhc3NpZnlfZmxvYXQgeSB3aXRoXG4gIHwgRlBfbmFuLCBfIC0+IHlcbiAgfCBfLCBGUF9uYW4gLT4geFxuICB8IF8gLT5cbiAgICBpZiB4ID4geSB0aGVuXG4gICAgICB4XG4gICAgZWxzZVxuICAgICAgeVxuXG5sZXQgZXF1YWwgKGEgOiBmbG9hdCkgYiA9IGEgPSBiXG5sZXQgaGFzaCA6IHQgLT4gaW50ID0gSGFzaHRibC5oYXNoXG5sZXQgY29tcGFyZSAoYSA6IGZsb2F0KSBiID0gU3RkbGliLmNvbXBhcmUgYSBiXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiKzMyXCJdXG5cbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxudHlwZSAnYSByYW5kb21fZ2VuID0gUmFuZG9tLlN0YXRlLnQgLT4gJ2FcblxubGV0IHBwID0gRm9ybWF0LnBwX3ByaW50X2Zsb2F0XG5cbmxldCBmc2lnbiBhID1cbiAgaWYgaXNfbmFuIGEgdGhlblxuICAgIG5hblxuICBlbHNlIGlmIGEgPSAwLiB0aGVuXG4gICAgYVxuICBlbHNlXG4gICAgU3RkbGliLmNvcHlzaWduIDEuIGFcblxuZXhjZXB0aW9uIFRyYXBOYU4gb2Ygc3RyaW5nXG5cbmxldCBzaWduX2V4biAoYSA6IGZsb2F0KSA9XG4gIGlmIGlzX25hbiBhIHRoZW5cbiAgICByYWlzZSAoVHJhcE5hTiBcInNpZ25fZXhuXCIpXG4gIGVsc2VcbiAgICBjb21wYXJlIGEgMC5cblxubGV0IHJvdW5kIHggPVxuICBsZXQgbG93ID0gZmxvb3IgeCBpblxuICBsZXQgaGlnaCA9IGNlaWwgeCBpblxuICBpZiB4IC0uIGxvdyA+IGhpZ2ggLS4geCB0aGVuXG4gICAgaGlnaFxuICBlbHNlXG4gICAgbG93XG5cbmxldCB0b19pbnQgKGEgOiBmbG9hdCkgPSBTdGRsaWIuaW50X29mX2Zsb2F0IGFcbmxldCBvZl9pbnQgKGEgOiBpbnQpID0gU3RkbGliLmZsb2F0X29mX2ludCBhXG5sZXQgdG9fc3RyaW5nIChhIDogZmxvYXQpID0gU3RkbGliLnN0cmluZ19vZl9mbG9hdCBhXG5sZXQgb2Zfc3RyaW5nX2V4biAoYSA6IHN0cmluZykgPSBTdGRsaWIuZmxvYXRfb2Zfc3RyaW5nIGFcblxubGV0IG9mX3N0cmluZ19vcHQgKGEgOiBzdHJpbmcpID1cbiAgdHJ5IFNvbWUgKFN0ZGxpYi5mbG9hdF9vZl9zdHJpbmcgYSkgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5sZXQgcmFuZG9tIG4gc3QgPSBSYW5kb20uU3RhdGUuZmxvYXQgc3QgblxubGV0IHJhbmRvbV9zbWFsbCA9IHJhbmRvbSAxMDAuMFxubGV0IHJhbmRvbV9yYW5nZSBpIGogc3QgPSBpICsuIHJhbmRvbSAoaiAtLiBpKSBzdFxubGV0IGVxdWFsX3ByZWNpc2lvbiB+ZXBzaWxvbiBhIGIgPSBhYnNfZmxvYXQgKGEgLS4gYikgPCBlcHNpbG9uXG5sZXQgY2xhc3NpZnkgPSBTdGRsaWIuY2xhc3NpZnlfZmxvYXRcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBFeHRlbnNpb24gdG8gdGhlIHN0YW5kYXJkIEhhc2h0Ymx9ICAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBlcSA9ICdhIC0+ICdhIC0+IGJvb2xcbnR5cGUgJ2EgaGFzaCA9ICdhIC0+IGludFxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbigqKiB7MiBQb2x5bW9ycGhpYyB0YWJsZXN9ICopXG5cbm1vZHVsZSBQb2x5ID0gc3RydWN0XG4gIGxldCBnZXQgdGJsIHggPSB0cnkgU29tZSAoSGFzaHRibC5maW5kIHRibCB4KSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG4gIGxldCBnZXRfb3IgdGJsIHggfmRlZmF1bHQgPSB0cnkgSGFzaHRibC5maW5kIHRibCB4IHdpdGggTm90X2ZvdW5kIC0+IGRlZmF1bHRcbiAgbGV0IGtleXMgdGJsIGsgPSBIYXNodGJsLml0ZXIgKGZ1biBrZXkgXyAtPiBrIGtleSkgdGJsXG4gIGxldCB2YWx1ZXMgdGJsIGsgPSBIYXNodGJsLml0ZXIgKGZ1biBfIHYgLT4gayB2KSB0YmxcbiAgbGV0IGtleXNfbGlzdCB0YmwgPSBIYXNodGJsLmZvbGQgKGZ1biBrIF8gYSAtPiBrIDo6IGEpIHRibCBbXVxuICBsZXQgdmFsdWVzX2xpc3QgdGJsID0gSGFzaHRibC5mb2xkIChmdW4gXyB2IGEgLT4gdiA6OiBhKSB0YmwgW11cblxuICBsZXQgYWRkX2xpc3QgdGJsIGsgdiA9XG4gICAgbGV0IGwgPSB0cnkgSGFzaHRibC5maW5kIHRibCBrIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgSGFzaHRibC5yZXBsYWNlIHRibCBrICh2IDo6IGwpXG5cbiAgbGV0IGluY3IgPyhieSA9IDEpIHRibCB4ID1cbiAgICBsZXQgbiA9IGdldF9vciB0YmwgeCB+ZGVmYXVsdDowIGluXG4gICAgaWYgbiArIGJ5IDw9IDAgdGhlblxuICAgICAgSGFzaHRibC5yZW1vdmUgdGJsIHhcbiAgICBlbHNlXG4gICAgICBIYXNodGJsLnJlcGxhY2UgdGJsIHggKG4gKyBieSlcblxuICBsZXQgZGVjciA/KGJ5ID0gMSkgdGJsIHggPVxuICAgIHRyeVxuICAgICAgbGV0IG4gPSBIYXNodGJsLmZpbmQgdGJsIHggaW5cbiAgICAgIGlmIG4gLSBieSA8PSAwIHRoZW5cbiAgICAgICAgSGFzaHRibC5yZW1vdmUgdGJsIHhcbiAgICAgIGVsc2VcbiAgICAgICAgSGFzaHRibC5yZXBsYWNlIHRibCB4IChuIC0gYnkpXG4gICAgd2l0aCBOb3RfZm91bmQgLT4gKClcblxuICBsZXQgbWFwX2xpc3QgZiBoID0gSGFzaHRibC5mb2xkIChmdW4geCB5IGFjYyAtPiBmIHggeSA6OiBhY2MpIGggW11cbiAgbGV0IHRvX2l0ZXIgdGJsIGsgPSBIYXNodGJsLml0ZXIgKGZ1biBrZXkgdiAtPiBrIChrZXksIHYpKSB0YmxcbiAgbGV0IGFkZF9pdGVyIHRibCBpID0gaSAoZnVuIChrLCB2KSAtPiBIYXNodGJsLmFkZCB0YmwgayB2KVxuXG4gIGxldCBhZGRfaXRlcl93aXRoIH5mIHRibCBpID1cbiAgICBpIChmdW4gKGssIHYpIC0+XG4gICAgICAgIG1hdGNoIEhhc2h0YmwuZmluZCB0YmwgayB3aXRoXG4gICAgICAgIHwgZXhjZXB0aW9uIE5vdF9mb3VuZCAtPiBIYXNodGJsLmFkZCB0YmwgayB2XG4gICAgICAgIHwgdjIgLT4gSGFzaHRibC5yZXBsYWNlIHRibCBrIChmIGsgdiB2MikpXG5cbiAgbGV0IGFkZF9zZXEgdGJsIHNlcSA9IFNlcS5pdGVyIChmdW4gKGssIHYpIC0+IEhhc2h0YmwuYWRkIHRibCBrIHYpIHNlcVxuXG4gIGxldCBhZGRfc2VxX3dpdGggfmYgdGJsIHNlcSA9XG4gICAgU2VxLml0ZXJcbiAgICAgIChmdW4gKGssIHYpIC0+XG4gICAgICAgIG1hdGNoIEhhc2h0YmwuZmluZCB0YmwgayB3aXRoXG4gICAgICAgIHwgZXhjZXB0aW9uIE5vdF9mb3VuZCAtPiBIYXNodGJsLmFkZCB0YmwgayB2XG4gICAgICAgIHwgdjIgLT4gSGFzaHRibC5yZXBsYWNlIHRibCBrIChmIGsgdiB2MikpXG4gICAgICBzZXFcblxuICAoKiBoZWxwZXIgZm9yIGJ1aWxkaW5nIGhhc2h0YWJsZXMgYnkgYnVsayBtdXRhdGlvbiAqKVxuICBsZXRbQGlubGluZV0gbWtfdGJsXyBmIHggPVxuICAgIGxldCB0YmwgPSBIYXNodGJsLmNyZWF0ZSAzMiBpblxuICAgIGYgdGJsIHg7XG4gICAgdGJsXG5cbiAgbGV0IG9mX2l0ZXIgaSA9IG1rX3RibF8gYWRkX2l0ZXIgaVxuICBsZXQgb2Zfc2VxIGkgPSBta190YmxfIGFkZF9zZXEgaVxuICBsZXQgb2ZfaXRlcl93aXRoIH5mIGkgPSBta190YmxfIChhZGRfaXRlcl93aXRoIH5mKSBpXG4gIGxldCBvZl9zZXFfd2l0aCB+ZiBpID0gbWtfdGJsXyAoYWRkX3NlcV93aXRoIH5mKSBpXG4gIGxldCBhZGRfaXRlcl9jb3VudCB0YmwgaSA9IGkgKGZ1biBrIC0+IGluY3IgdGJsIGspXG4gIGxldCBhZGRfc2VxX2NvdW50IHRibCBzZXEgPSBTZXEuaXRlciAoZnVuIGsgLT4gaW5jciB0Ymwgaykgc2VxXG4gIGxldCBvZl9pdGVyX2NvdW50IGkgPSBta190YmxfIGFkZF9pdGVyX2NvdW50IGlcbiAgbGV0IG9mX3NlcV9jb3VudCBpID0gbWtfdGJsXyBhZGRfc2VxX2NvdW50IGlcbiAgbGV0IHRvX2xpc3QgdGJsID0gSGFzaHRibC5mb2xkIChmdW4gayB2IGwgLT4gKGssIHYpIDo6IGwpIHRibCBbXVxuXG4gIGxldCBvZl9saXN0IGwgPVxuICAgIGxldCB0YmwgPSBIYXNodGJsLmNyZWF0ZSAzMiBpblxuICAgIExpc3QuaXRlciAoZnVuIChrLCB2KSAtPiBIYXNodGJsLmFkZCB0YmwgayB2KSBsO1xuICAgIHRibFxuXG4gIGxldCBvZl9saXN0X3dpdGggfmYgbCA9XG4gICAgbGV0IHRibCA9IEhhc2h0YmwuY3JlYXRlIDMyIGluXG4gICAgTGlzdC5pdGVyXG4gICAgICAoZnVuIChrLCB2KSAtPlxuICAgICAgICBtYXRjaCBIYXNodGJsLmZpbmQgdGJsIGsgd2l0aFxuICAgICAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT4gSGFzaHRibC5hZGQgdGJsIGsgdlxuICAgICAgICB8IHYyIC0+IEhhc2h0YmwucmVwbGFjZSB0YmwgayAoZiBrIHYgdjIpKVxuICAgICAgbDtcbiAgICB0YmxcblxuICBsZXQgdXBkYXRlIHRibCB+ZiB+ayA9XG4gICAgbGV0IHYgPSBnZXQgdGJsIGsgaW5cbiAgICBtYXRjaCB2LCBmIGsgdiB3aXRoXG4gICAgfCBOb25lLCBOb25lIC0+ICgpXG4gICAgfCBOb25lLCBTb21lIHYnIC0+IEhhc2h0YmwuYWRkIHRibCBrIHYnXG4gICAgfCBTb21lIF8sIFNvbWUgdicgLT4gSGFzaHRibC5yZXBsYWNlIHRibCBrIHYnXG4gICAgfCBTb21lIF8sIE5vbmUgLT4gSGFzaHRibC5yZW1vdmUgdGJsIGtcblxuICBsZXQgZ2V0X29yX2FkZCB0YmwgfmYgfmsgPVxuICAgIHRyeSBIYXNodGJsLmZpbmQgdGJsIGtcbiAgICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgbGV0IHYgPSBmIGsgaW5cbiAgICAgIEhhc2h0YmwuYWRkIHRibCBrIHY7XG4gICAgICB2XG5cbiAgbGV0IHBwID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgICA/KHBwX3NlcCA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCIpXG4gICAgICA/KHBwX2Fycm93ID0gZnVuIGZtdCAoKSAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCJAIC0+IFwiKSBwcF9rIHBwX3YgZm10IG0gPVxuICAgIHBwX3N0YXJ0IGZtdCAoKTtcbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIEhhc2h0YmwuaXRlclxuICAgICAgKGZ1biBrIHYgLT5cbiAgICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcHBfc2VwIGZtdCAoKTtcbiAgICAgICAgcHBfayBmbXQgaztcbiAgICAgICAgcHBfYXJyb3cgZm10ICgpO1xuICAgICAgICBwcF92IGZtdCB2KVxuICAgICAgbTtcbiAgICBwcF9zdG9wIGZtdCAoKVxuZW5kXG5cbmluY2x1ZGUgUG9seVxuXG4oKiogezIgRnVuY3Rvcn0gKilcblxubW9kdWxlIHR5cGUgUyA9IHNpZ1xuICBpbmNsdWRlIEhhc2h0YmwuU1xuXG4gIHZhbCBnZXQgOiAnYSB0IC0+IGtleSAtPiAnYSBvcHRpb25cbiAgKCoqIFtnZXQgdGJsIGtdIGZpbmRzIGEgYmluZGluZyBmb3IgdGhlIGtleSBba10gaWYgcHJlc2VudCxcbiAgICAgIG9yIHJldHVybnMgW05vbmVdIGlmIG5vIHZhbHVlIGlzIGZvdW5kLlxuICAgICAgU2FmZSB2ZXJzaW9uIG9mIHshSGFzaHRibC5maW5kfS4gKilcblxuICB2YWwgZ2V0X29yIDogJ2EgdCAtPiBrZXkgLT4gZGVmYXVsdDonYSAtPiAnYVxuICAoKiogW2dldF9vciB0YmwgayB+ZGVmYXVsdF0gcmV0dXJucyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB0byBba10gaWYgcHJlc2VudCxcbiAgICAgIGFuZCByZXR1cm5zIFtkZWZhdWx0XSBvdGhlcndpc2UgKGlmIFtrXSBkb2Vzbid0IGJlbG9uZyBpbiBbdGJsXSkuXG4gICAgICBAc2luY2UgMC4xNiAqKVxuXG4gIHZhbCBhZGRfbGlzdCA6ICdhIGxpc3QgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAoKiogW2FkZF9saXN0IHRibCB4IHldIGFkZHMgW3ldIHRvIHRoZSBsaXN0IFt4XSBpcyBib3VuZCB0by4gSWYgW3hdIGlzXG4gICAgICBub3QgYm91bmQsIGl0IGJlY29tZXMgYm91bmQgdG8gW3ldLlxuICAgICAgQHNpbmNlIDAuMTYgKilcblxuICB2YWwgaW5jciA6ID9ieTppbnQgLT4gaW50IHQgLT4ga2V5IC0+IHVuaXRcbiAgKCoqIFtpbmNyID9ieSB0YmwgeF0gaW5jcmVtZW50cyBvciBpbml0aWFsaXplcyB0aGUgY291bnRlciBhc3NvY2lhdGVkIHdpdGggW3hdLlxuICAgICAgSWYgW2dldCB0YmwgeCA9IE5vbmVdLCB0aGVuIGFmdGVyIHVwZGF0ZSwgW2dldCB0YmwgeCA9IFNvbWUgMV07XG4gICAgICBvdGhlcndpc2UsIGlmIFtnZXQgdGJsIHggPSBTb21lIG5dLCBub3cgW2dldCB0YmwgeCA9IFNvbWUgKG4rMSldLlxuICAgICAgQHBhcmFtIGJ5IGlmIHNwZWNpZmllZCwgdGhlIGludCB2YWx1ZSBpcyBpbmNyZW1lbnRlZCBieSBbYnldIHJhdGhlciB0aGFuIDEuXG4gICAgICBAc2luY2UgMC4xNiAqKVxuXG4gIHZhbCBkZWNyIDogP2J5OmludCAtPiBpbnQgdCAtPiBrZXkgLT4gdW5pdFxuICAoKiogW2RlY3IgP2J5IHRibCB4XSBpcyBsaWtlIHshaW5jcn0gYnV0IHN1YnRyYWN0IDEgKG9yIHRoZSB2YWx1ZSBvZiBbYnldKS5cbiAgICAgIElmIHRoZSB2YWx1ZSByZWFjaGVzIDAsIHRoZSBrZXkgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0YWJsZS5cbiAgICAgIFRoaXMgZG9lcyBub3RoaW5nIGlmIHRoZSBrZXkgaXMgbm90IGFscmVhZHkgcHJlc2VudCBpbiB0aGUgdGFibGUuXG4gICAgICBAc2luY2UgMC4xNiAqKVxuXG4gIHZhbCBrZXlzIDogJ2EgdCAtPiBrZXkgaXRlclxuICAoKiogIFtrZXlzIHRibCBmXSBpdGVyYXRlcyBvbiBrZXlzIChzaW1pbGFyIG9yZGVyIGFzIHshSGFzaHRibC5pdGVyfSkuICopXG5cbiAgdmFsIHZhbHVlcyA6ICdhIHQgLT4gJ2EgaXRlclxuICAoKiogIFt2YWx1ZXMgdGJsIGZdIGl0ZXJhdGVzIG9uIHZhbHVlcyBpbiB0aGUgdGFibGUuICopXG5cbiAgdmFsIGtleXNfbGlzdCA6IF8gdCAtPiBrZXkgbGlzdFxuICAoKiogW2tleXNfbGlzdCB0YmxdIGlzIHRoZSBsaXN0IG9mIGtleXMgaW4gW3RibF0uXG4gICAgICBJZiB0aGUga2V5IGlzIGluIHRoZSBIYXNodGFibGUgbXVsdGlwbGUgdGltZXMsIGFsbCBvY2N1cnJlbmNlcyB3aWxsIGJlIHJldHVybmVkLlxuICAgICAgQHNpbmNlIDAuOCAqKVxuXG4gIHZhbCB2YWx1ZXNfbGlzdCA6ICdhIHQgLT4gJ2EgbGlzdFxuICAoKiogW3ZhbHVlc19saXN0IHRdIGlzIHRoZSBsaXN0IG9mIHZhbHVlcyBpbiBbdF0uXG4gICAgICBAc2luY2UgMC44ICopXG5cbiAgdmFsIG1hcF9saXN0IDogKGtleSAtPiAnYSAtPiAnYikgLT4gJ2EgdCAtPiAnYiBsaXN0XG4gICgqKiBNYXAgb24gYSBoYXNodGFibGUncyBpdGVtcywgY29sbGVjdCBpbnRvIGEgbGlzdC4gKilcblxuICB2YWwgdG9faXRlciA6ICdhIHQgLT4gKGtleSAqICdhKSBpdGVyXG4gICgqKiBJdGVyYXRlIG9uIGJpbmRpbmdzIGluIHRoZSB0YWJsZS5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX2l0ZXIgOiAnYSB0IC0+IChrZXkgKiAnYSkgaXRlciAtPiB1bml0XG4gICgqKiBBZGQgdGhlIGNvcnJlc3BvbmRpbmcgcGFpcnMgdG8gdGhlIHRhYmxlLCB1c2luZyB7IUhhc2h0YmwuYWRkfS5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX2l0ZXJfd2l0aCA6XG4gICAgZjooa2V5IC0+ICdhIC0+ICdhIC0+ICdhKSAtPiAnYSB0IC0+IChrZXkgKiAnYSkgaXRlciAtPiB1bml0XG4gICgqKiBBZGQgdGhlIGNvcnJlc3BvbmRpbmcgcGFpcnMgdG8gdGhlIHRhYmxlLCB1c2luZyB7IUhhc2h0YmwuYWRkfS5cbiAgICAgIElmIGEga2V5IG9jY3VycyBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgaW5wdXQsIHRoZSB2YWx1ZXMgYXJlIGNvbWJpbmVkXG4gICAgICB1c2luZyBbZl0gaW4gYW4gdW5zcGVjaWZpZWQgb3JkZXIuXG4gICAgICBAc2luY2UgMy4zICopXG5cbiAgdmFsIGFkZF9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAoKiogQWRkIHRoZSBjb3JyZXNwb25kaW5nIHBhaXJzIHRvIHRoZSB0YWJsZSwgdXNpbmcgeyFIYXNodGJsLmFkZH0uXG4gICAgICBSZW5hbWVkIGZyb20gW2FkZF9zdGRfc2VxXSBzaW5jZSAzLjAuXG4gICAgICBAc2luY2UgMy4wICopXG5cbiAgdmFsIGFkZF9zZXFfd2l0aCA6XG4gICAgZjooa2V5IC0+ICdhIC0+ICdhIC0+ICdhKSAtPiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAoKiogQWRkIHRoZSBjb3JyZXNwb25kaW5nIHBhaXJzIHRvIHRoZSB0YWJsZSwgdXNpbmcgeyFIYXNodGJsLmFkZH0uXG4gICAgICBJZiBhIGtleSBvY2N1cnMgbXVsdGlwbGUgdGltZXMgaW4gdGhlIGlucHV0LCB0aGUgdmFsdWVzIGFyZSBjb21iaW5lZFxuICAgICAgdXNpbmcgW2ZdIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLlxuICAgICAgQHNpbmNlIDMuMyAqKVxuXG4gIHZhbCBvZl9pdGVyIDogKGtleSAqICdhKSBpdGVyIC0+ICdhIHRcbiAgKCoqIEZyb20gdGhlIGdpdmVuIGJpbmRpbmdzLCBhZGRlZCBpbiBvcmRlci5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgb2ZfaXRlcl93aXRoIDogZjooa2V5IC0+ICdhIC0+ICdhIC0+ICdhKSAtPiAoa2V5ICogJ2EpIGl0ZXIgLT4gJ2EgdFxuICAoKiogRnJvbSB0aGUgZ2l2ZW4gYmluZGluZ3MsIGFkZGVkIGluIG9yZGVyLlxuICAgICAgSWYgYSBrZXkgb2NjdXJzIG11bHRpcGxlIHRpbWVzIGluIHRoZSBpbnB1dCwgdGhlIHZhbHVlcyBhcmUgY29tYmluZWRcbiAgICAgIHVzaW5nIFtmXSBpbiBhbiB1bnNwZWNpZmllZCBvcmRlci5cbiAgICAgIEBzaW5jZSAzLjMgKilcblxuICB2YWwgb2Zfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gICgqKiBGcm9tIHRoZSBnaXZlbiBiaW5kaW5ncywgYWRkZWQgaW4gb3JkZXIuXG4gICAgICBSZW5hbWVkIGZyb20gW29mX3N0ZF9zZXFdIHNpbmNlIDMuMC5cbiAgICAgIEBzaW5jZSAzLjAgKilcblxuICB2YWwgb2Zfc2VxX3dpdGggOiBmOihrZXkgLT4gJ2EgLT4gJ2EgLT4gJ2EpIC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICAoKiogRnJvbSB0aGUgZ2l2ZW4gYmluZGluZ3MsIGFkZGVkIGluIG9yZGVyLlxuICAgICAgSWYgYSBrZXkgb2NjdXJzIG11bHRpcGxlIHRpbWVzIGluIHRoZSBpbnB1dCwgdGhlIHZhbHVlcyBhcmUgY29tYmluZWRcbiAgICAgIHVzaW5nIFtmXSBpbiBhbiB1bnNwZWNpZmllZCBvcmRlci5cbiAgICAgIEBzaW5jZSAzLjMgKilcblxuICB2YWwgYWRkX2l0ZXJfY291bnQgOiBpbnQgdCAtPiBrZXkgaXRlciAtPiB1bml0XG4gICgqKiBbYWRkX2l0ZXJfY291bnQgdGJsIGldIGluY3JlbWVudHMgdGhlIGNvdW50IG9mIGVhY2ggZWxlbWVudCBvZiBbaV1cbiAgICAgIGJ5IGNhbGxpbmcgeyFpbmNyfS4gVGhpcyBpcyB1c2VmdWwgZm9yIGNvdW50aW5nIGhvdyBtYW55IHRpbWVzIGVhY2hcbiAgICAgIGVsZW1lbnQgb2YgW2ldIG9jY3Vycy5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX3NlcV9jb3VudCA6IGludCB0IC0+IGtleSBTZXEudCAtPiB1bml0XG4gICgqKiBbYWRkX3NlcV9jb3VudCB0Ymwgc2VxXSBpbmNyZW1lbnRzIHRoZSBjb3VudCBvZiBlYWNoIGVsZW1lbnQgb2YgW3NlcV1cbiAgICAgIGJ5IGNhbGxpbmcgeyFpbmNyfS4gVGhpcyBpcyB1c2VmdWwgZm9yIGNvdW50aW5nIGhvdyBtYW55IHRpbWVzIGVhY2hcbiAgICAgIGVsZW1lbnQgb2YgW3NlcV0gb2NjdXJzLlxuICAgICAgUmVuYW1lZCBmcm9tIFtvZl9zdGRfc2VxX2NvdW50XSBzaW5jZSAzLjAuXG4gICAgICBAc2luY2UgMy4wICopXG5cbiAgdmFsIG9mX2l0ZXJfY291bnQgOiBrZXkgaXRlciAtPiBpbnQgdFxuICAoKiogTGlrZSB7IWFkZF9zZXFfY291bnR9LCBidXQgYWxsb2NhdGVzIGEgbmV3IHRhYmxlIGFuZCByZXR1cm5zIGl0LlxuICAgICAgQHNpbmNlIDIuOCAqKVxuXG4gIHZhbCBvZl9zZXFfY291bnQgOiBrZXkgU2VxLnQgLT4gaW50IHRcbiAgKCoqIExpa2UgeyFhZGRfc2VxX2NvdW50fSwgYnV0IGFsbG9jYXRlcyBhIG5ldyB0YWJsZSBhbmQgcmV0dXJucyBpdC5cbiAgICAgIFJlbmFtZWQgZnJvbSBbb2Zfc3RkX3NlcV9jb3VudF0gc2luY2UgMy4wLlxuICAgICAgQHNpbmNlIDMuMCAqKVxuXG4gIHZhbCB0b19saXN0IDogJ2EgdCAtPiAoa2V5ICogJ2EpIGxpc3RcbiAgKCoqIFt0b19saXN0IHRibF0gcmV0dXJucyB0aGUgbGlzdCBvZiAoa2V5LHZhbHVlKSBiaW5kaW5ncyAob3JkZXIgdW5zcGVjaWZpZWQpLiAqKVxuXG4gIHZhbCBvZl9saXN0IDogKGtleSAqICdhKSBsaXN0IC0+ICdhIHRcbiAgKCoqIFtvZl9saXN0IGxdIGJ1aWxkcyBhIHRhYmxlIGZyb20gdGhlIGdpdmVuIGxpc3QgW2xdIG9mIGJpbmRpbmdzIFtrX2kgLT4gdl9pXSxcbiAgICAgIGFkZGVkIGluIG9yZGVyIHVzaW5nIHshYWRkfS4gSWYgYSBrZXkgb2NjdXJzIHNldmVyYWwgdGltZXMsXG4gICAgICBpdCB3aWxsIGJlIGFkZGVkIHNldmVyYWwgdGltZXMsIGFuZCB0aGUgdmlzaWJsZSBiaW5kaW5nXG4gICAgICB3aWxsIGJlIHRoZSBsYXN0IG9uZS4gKilcblxuICB2YWwgb2ZfbGlzdF93aXRoIDogZjooa2V5IC0+ICdhIC0+ICdhIC0+ICdhKSAtPiAoa2V5ICogJ2EpIGxpc3QgLT4gJ2EgdFxuICAoKiogW29mX2xpc3QgbF0gYnVpbGRzIGEgdGFibGUgZnJvbSB0aGUgZ2l2ZW4gbGlzdCBbbF0gb2YgYmluZGluZ3MgW2tfaSAtPiB2X2ldLlxuICAgICAgSWYgYSBrZXkgb2NjdXJzIG11bHRpcGxlIHRpbWVzIGluIHRoZSBpbnB1dCwgdGhlIHZhbHVlcyBhcmUgY29tYmluZWRcbiAgICAgIHVzaW5nIFtmXSBpbiBhbiB1bnNwZWNpZmllZCBvcmRlci5cbiAgICAgIEBzaW5jZSAzLjMgKilcblxuICB2YWwgdXBkYXRlIDogJ2EgdCAtPiBmOihrZXkgLT4gJ2Egb3B0aW9uIC0+ICdhIG9wdGlvbikgLT4gazprZXkgLT4gdW5pdFxuICAoKiogW3VwZGF0ZSB0YmwgfmYgfmtdIHVwZGF0ZXMga2V5IFtrXSBieSBjYWxsaW5nIFtmIGsgKFNvbWUgdildIGlmXG4gICAgICBba10gd2FzIG1hcHBlZCB0byBbdl0sIG9yIFtmIGsgTm9uZV0gb3RoZXJ3aXNlOyBpZiB0aGUgY2FsbFxuICAgICAgcmV0dXJucyBbTm9uZV0gdGhlbiBba10gaXMgcmVtb3ZlZC9zdGF5cyByZW1vdmVkLCBpZiB0aGUgY2FsbFxuICAgICAgcmV0dXJucyBbU29tZSB2J10gdGhlbiB0aGUgYmluZGluZyBbayAtPiB2J10gaXMgaW5zZXJ0ZWRcbiAgICAgIHVzaW5nIHshSGFzaHRibC5yZXBsYWNlfS5cbiAgICAgIEBzaW5jZSAwLjE0ICopXG5cbiAgdmFsIGdldF9vcl9hZGQgOiAnYSB0IC0+IGY6KGtleSAtPiAnYSkgLT4gazprZXkgLT4gJ2FcbiAgKCoqIFtnZXRfb3JfYWRkIHRibCB+ayB+Zl0gZmluZHMgYW5kIHJldHVybnMgdGhlIGJpbmRpbmcgb2YgW2tdXG4gICAgICBpbiBbdGJsXSwgaWYgaXQgZXhpc3RzLiBJZiBpdCBkb2VzIG5vdCBleGlzdCwgdGhlbiBbZiBrXVxuICAgICAgaXMgY2FsbGVkIHRvIG9idGFpbiBhIG5ldyBiaW5kaW5nIFt2XTsgW2sgLT4gdl0gaXMgYWRkZWRcbiAgICAgIHRvIFt0YmxdIGFuZCBbdl0gaXMgcmV0dXJuZWQuXG4gICAgICBAc2luY2UgMS4wICopXG5cbiAgdmFsIHBwIDpcbiAgICA/cHBfc3RhcnQ6dW5pdCBwcmludGVyIC0+XG4gICAgP3BwX3N0b3A6dW5pdCBwcmludGVyIC0+XG4gICAgP3BwX3NlcDp1bml0IHByaW50ZXIgLT5cbiAgICA/cHBfYXJyb3c6dW5pdCBwcmludGVyIC0+XG4gICAga2V5IHByaW50ZXIgLT5cbiAgICAnYSBwcmludGVyIC0+XG4gICAgJ2EgdCBwcmludGVyXG4gICgqKiBbcHAgfnBwX3N0YXJ0IH5wcF9zdG9wIH5wcF9zZXAgfnBwIGFycm93IHBwX2sgcHBfdl0gcmV0dXJucyBhIHRhYmxlIHByaW50ZXJcbiAgICAgIGdpdmVuIGEgW3BwX2tdIHByaW50ZXJcbiAgICAgIGZvciBpbmRpdmlkdWFsIGtleSBhbmQgYSBbcHBfdl0gcHJpbnRlciBmb3IgaW5kaXZpZHVhbCB2YWx1ZS5cbiAgICAgIFtwcF9zdGFydF0gYW5kIFtwcF9zdG9wXSBjb250cm9sIHRoZSBvcGVuaW5nIGFuZCBjbG9zaW5nIGRlbGltaXRlcnMsXG4gICAgICBieSBkZWZhdWx0IHByaW50IG5vdGhpbmcuIFtwcF9zZXBdIGNvbnRyb2wgdGhlIHNlcGFyYXRvciBiZXR3ZWVuIGJpbmRpbmcuXG4gICAgICBbcHBfYXJyb3ddIGNvbnRyb2wgdGhlIGFycm93IGJldHdlZW4gdGhlIGtleSBhbmQgdmFsdWUuXG4gICAgICBSZW5hbWVkIGZyb20gW3ByaW50XSBzaW5jZSAyLjAuXG4gICAgICBAc2luY2UgMC4xMyAqKVxuZW5kXG5cbm1vZHVsZSBNYWtlIChYIDogSGFzaHRibC5IYXNoZWRUeXBlKSA6XG4gIFMgd2l0aCB0eXBlIGtleSA9IFgudCBhbmQgdHlwZSAnYSB0ID0gJ2EgSGFzaHRibC5NYWtlKFgpLnQgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBIYXNodGJsLk1ha2UgKFgpXG5cbiAgbGV0IGdldCB0YmwgeCA9IHRyeSBTb21lIChmaW5kIHRibCB4KSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG4gIGxldCBnZXRfb3IgdGJsIHggfmRlZmF1bHQgPSB0cnkgZmluZCB0YmwgeCB3aXRoIE5vdF9mb3VuZCAtPiBkZWZhdWx0XG5cbiAgbGV0IGluY3IgPyhieSA9IDEpIHRibCB4ID1cbiAgICBsZXQgbiA9IGdldF9vciB0YmwgeCB+ZGVmYXVsdDowIGluXG4gICAgaWYgbiArIGJ5IDw9IDAgdGhlblxuICAgICAgcmVtb3ZlIHRibCB4XG4gICAgZWxzZVxuICAgICAgcmVwbGFjZSB0YmwgeCAobiArIGJ5KVxuXG4gIGxldCBhZGRfbGlzdCB0YmwgayB2ID1cbiAgICBsZXQgbCA9IHRyeSBmaW5kIHRibCBrIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgcmVwbGFjZSB0YmwgayAodiA6OiBsKVxuXG4gIGxldCBkZWNyID8oYnkgPSAxKSB0YmwgeCA9XG4gICAgdHJ5XG4gICAgICBsZXQgbiA9IGZpbmQgdGJsIHggaW5cbiAgICAgIGlmIG4gLSBieSA8PSAwIHRoZW5cbiAgICAgICAgcmVtb3ZlIHRibCB4XG4gICAgICBlbHNlXG4gICAgICAgIHJlcGxhY2UgdGJsIHggKG4gLSBieSlcbiAgICB3aXRoIE5vdF9mb3VuZCAtPiAoKVxuXG4gIGxldCBrZXlzIHRibCBrID0gaXRlciAoZnVuIGtleSBfIC0+IGsga2V5KSB0YmxcbiAgbGV0IHZhbHVlcyB0YmwgayA9IGl0ZXIgKGZ1biBfIHYgLT4gayB2KSB0YmxcbiAgbGV0IGtleXNfbGlzdCB0YmwgPSBmb2xkIChmdW4gayBfIGEgLT4gayA6OiBhKSB0YmwgW11cbiAgbGV0IHZhbHVlc19saXN0IHRibCA9IGZvbGQgKGZ1biBfIHYgYSAtPiB2IDo6IGEpIHRibCBbXVxuICBsZXQgbWFwX2xpc3QgZiBoID0gZm9sZCAoZnVuIHggeSBhY2MgLT4gZiB4IHkgOjogYWNjKSBoIFtdXG5cbiAgbGV0IHVwZGF0ZSB0YmwgfmYgfmsgPVxuICAgIGxldCB2ID0gZ2V0IHRibCBrIGluXG4gICAgbWF0Y2ggdiwgZiBrIHYgd2l0aFxuICAgIHwgTm9uZSwgTm9uZSAtPiAoKVxuICAgIHwgTm9uZSwgU29tZSB2JyAtPiBhZGQgdGJsIGsgdidcbiAgICB8IFNvbWUgXywgU29tZSB2JyAtPiByZXBsYWNlIHRibCBrIHYnXG4gICAgfCBTb21lIF8sIE5vbmUgLT4gcmVtb3ZlIHRibCBrXG5cbiAgbGV0IGdldF9vcl9hZGQgdGJsIH5mIH5rID1cbiAgICB0cnkgZmluZCB0Ymwga1xuICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICBsZXQgdiA9IGYgayBpblxuICAgICAgYWRkIHRibCBrIHY7XG4gICAgICB2XG5cbiAgbGV0IHRvX2l0ZXIgdGJsIGsgPSBpdGVyIChmdW4ga2V5IHYgLT4gayAoa2V5LCB2KSkgdGJsXG4gIGxldCBhZGRfaXRlciB0YmwgaSA9IGkgKGZ1biAoaywgdikgLT4gYWRkIHRibCBrIHYpXG5cbiAgbGV0IGFkZF9pdGVyX3dpdGggfmYgdGJsIGkgPVxuICAgIGkgKGZ1biAoaywgdikgLT5cbiAgICAgICAgbWF0Y2ggZmluZCB0YmwgayB3aXRoXG4gICAgICAgIHwgZXhjZXB0aW9uIE5vdF9mb3VuZCAtPiBhZGQgdGJsIGsgdlxuICAgICAgICB8IHYyIC0+IHJlcGxhY2UgdGJsIGsgKGYgayB2IHYyKSlcblxuICBsZXQgYWRkX3NlcSB0Ymwgc2VxID0gU2VxLml0ZXIgKGZ1biAoaywgdikgLT4gYWRkIHRibCBrIHYpIHNlcVxuXG4gIGxldCBhZGRfc2VxX3dpdGggfmYgdGJsIHNlcSA9XG4gICAgU2VxLml0ZXJcbiAgICAgIChmdW4gKGssIHYpIC0+XG4gICAgICAgIG1hdGNoIGZpbmQgdGJsIGsgd2l0aFxuICAgICAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT4gYWRkIHRibCBrIHZcbiAgICAgICAgfCB2MiAtPiByZXBsYWNlIHRibCBrIChmIGsgdiB2MikpXG4gICAgICBzZXFcblxuICAoKiBoZWxwZXIgZm9yIGJ1aWxkaW5nIGhhc2h0YWJsZXMgYnkgYnVsayBtdXRhdGlvbiAqKVxuICBsZXRbQGlubGluZV0gbWtfdGJsXyBmIHggPVxuICAgIGxldCB0YmwgPSBjcmVhdGUgMzIgaW5cbiAgICBmIHRibCB4O1xuICAgIHRibFxuXG4gIGxldCBvZl9pdGVyIGkgPSBta190YmxfIGFkZF9pdGVyIGlcbiAgbGV0IG9mX3NlcSBpID0gbWtfdGJsXyBhZGRfc2VxIGlcbiAgbGV0IG9mX2l0ZXJfd2l0aCB+ZiBpID0gbWtfdGJsXyAoYWRkX2l0ZXJfd2l0aCB+ZikgaVxuICBsZXQgb2Zfc2VxX3dpdGggfmYgaSA9IG1rX3RibF8gKGFkZF9zZXFfd2l0aCB+ZikgaVxuICBsZXQgYWRkX2l0ZXJfY291bnQgdGJsIGkgPSBpIChmdW4gayAtPiBpbmNyIHRibCBrKVxuICBsZXQgYWRkX3NlcV9jb3VudCB0Ymwgc2VxID0gU2VxLml0ZXIgKGZ1biBrIC0+IGluY3IgdGJsIGspIHNlcVxuXG4gIGxldCBvZl9pdGVyX2NvdW50IHNlcSA9XG4gICAgbGV0IHRibCA9IGNyZWF0ZSAzMiBpblxuICAgIGFkZF9pdGVyX2NvdW50IHRibCBzZXE7XG4gICAgdGJsXG5cbiAgbGV0IG9mX3NlcV9jb3VudCBpID1cbiAgICBsZXQgdGJsID0gY3JlYXRlIDMyIGluXG4gICAgYWRkX3NlcV9jb3VudCB0YmwgaTtcbiAgICB0YmxcblxuICBsZXQgdG9fbGlzdCB0YmwgPSBmb2xkIChmdW4gayB2IGwgLT4gKGssIHYpIDo6IGwpIHRibCBbXVxuXG4gIGxldCBvZl9saXN0IGwgPVxuICAgIGxldCB0YmwgPSBjcmVhdGUgMzIgaW5cbiAgICBMaXN0Lml0ZXIgKGZ1biAoaywgdikgLT4gYWRkIHRibCBrIHYpIGw7XG4gICAgdGJsXG5cbiAgbGV0IG9mX2xpc3Rfd2l0aCB+ZiBsID1cbiAgICBsZXQgdGJsID0gY3JlYXRlIDMyIGluXG4gICAgTGlzdC5pdGVyXG4gICAgICAoZnVuIChrLCB2KSAtPlxuICAgICAgICBtYXRjaCBmaW5kIHRibCBrIHdpdGhcbiAgICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IGFkZCB0YmwgayB2XG4gICAgICAgIHwgdjIgLT4gcmVwbGFjZSB0YmwgayAoZiBrIHYgdjIpKVxuICAgICAgbDtcbiAgICB0YmxcblxuICBsZXQgcHAgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICAgID8ocHBfc2VwID0gZnVuIGZtdCAoKSAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCIsQCBcIilcbiAgICAgID8ocHBfYXJyb3cgPSBmdW4gZm10ICgpIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkAgLT4gXCIpIHBwX2sgcHBfdiBmbXQgbSA9XG4gICAgcHBfc3RhcnQgZm10ICgpO1xuICAgIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gICAgaXRlclxuICAgICAgKGZ1biBrIHYgLT5cbiAgICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcHBfc2VwIGZtdCAoKTtcbiAgICAgICAgcHBfayBmbXQgaztcbiAgICAgICAgcHBfYXJyb3cgZm10ICgpO1xuICAgICAgICBwcF92IGZtdCB2KVxuICAgICAgbTtcbiAgICBwcF9zdG9wIGZtdCAoKVxuZW5kXG4iLCIoKiBiYWNrcG9ydCBuZXcgZnVuY3Rpb25zIGZyb20gc3RkbGliIGhlcmUgKilcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzJcIl1cblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aHMgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF8gOjogXyAtPiAtMVxuICB8IF8gOjogXywgW10gLT4gMVxuICB8IF8gOjogdGFpbDEsIF8gOjogdGFpbDIgLT4gY29tcGFyZV9sZW5ndGhzIHRhaWwxIHRhaWwyXG5cbmxldCByZWMgY29tcGFyZV9sZW5ndGhfd2l0aCBsIG4gPVxuICBtYXRjaCBsLCBuIHdpdGhcbiAgfCBfIHdoZW4gbiA8IDAgLT4gMVxuICB8IFtdLCAwIC0+IDBcbiAgfCBbXSwgXyAtPiAtMVxuICB8IF8gOjogdGFpbCwgXyAtPiBjb21wYXJlX2xlbmd0aF93aXRoIHRhaWwgKG4gLSAxKVxuXG5sZXQgcmVjIGFzc29jX29wdCB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgKHksIHYpIDo6IF8gd2hlbiBTdGRsaWIuKCA9ICkgeCB5IC0+IFNvbWUgdlxuICB8IF8gOjogdGFpbCAtPiBhc3NvY19vcHQgeCB0YWlsXG5cbmxldCByZWMgYXNzcV9vcHQgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8ICh5LCB2KSA6OiBfIHdoZW4gU3RkbGliLiggPT0gKSB4IHkgLT4gU29tZSB2XG4gIHwgXyA6OiB0YWlsIC0+IGFzc3Ffb3B0IHggdGFpbFxuXG5bQEBAb2NhbWwud2FybmluZyBcIiszMlwiXVxuXG4oKiBlbmQgb2YgYmFja3BvcnQgKilcblxuaW5jbHVkZSBMaXN0XG5cbmxldCBlbXB0eSA9IFtdXG5cbmxldCBpc19lbXB0eSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gdHJ1ZVxuICB8IF8gOjogXyAtPiBmYWxzZVxuXG5sZXQgbWd1YXJkIGMgPVxuICBpZiBjIHRoZW5cbiAgICBbICgpIF1cbiAgZWxzZVxuICAgIFtdXG5cbigqKiBtYXggZGVwdGggZm9yIGRpcmVjdCByZWN1cnNpb24gKilcbmxldCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gPSAxMDAwXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCB0YWlsX21hcCBmIGwgPVxuICAoKiBVbndpbmQgdGhlIGxpc3Qgb2YgdHVwbGVzLCByZWNvbnN0cnVjdGluZyB0aGUgZnVsbCBsaXN0IGZyb250LXRvLWJhY2suXG4gICAgIEBwYXJhbSB0YWlsX2FjYyBhIHN1ZmZpeCBvZiB0aGUgZmluYWwgbGlzdDsgd2UgYXBwZW5kIHR1cGxlcycgY29udGVudFxuICAgICBhdCB0aGUgZnJvbnQgb2YgaXQgKilcbiAgbGV0IHJlYyByZWJ1aWxkIHRhaWxfYWNjID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHRhaWxfYWNjXG4gICAgfCAoeTAsIHkxLCB5MiwgeTMsIHk0LCB5NSwgeTYsIHk3LCB5OCkgOjogYnMgLT5cbiAgICAgIHJlYnVpbGRcbiAgICAgICAgKHkwIDo6IHkxIDo6IHkyIDo6IHkzIDo6IHk0IDo6IHk1IDo6IHk2IDo6IHk3IDo6IHk4IDo6IHRhaWxfYWNjKVxuICAgICAgICBic1xuICBpblxuICAoKiBDcmVhdGUgYSBjb21wcmVzc2VkIHJldmVyc2UtbGlzdCByZXByZXNlbnRhdGlvbiB1c2luZyB0dXBsZXNcbiAgICAgQHBhcmFtIHR1cGxlX2FjYyBhIHJldmVyc2UgbGlzdCBvZiBjaHVua3MgbWFwcGVkIHdpdGggW2ZdICopXG4gIGxldCByZWMgZGl2ZSB0dXBsZV9hY2MgPSBmdW5jdGlvblxuICAgIHwgeDAgOjogeDEgOjogeDIgOjogeDMgOjogeDQgOjogeDUgOjogeDYgOjogeDcgOjogeDggOjogeHMgLT5cbiAgICAgIGxldCB5MCA9IGYgeDAgaW5cbiAgICAgIGxldCB5MSA9IGYgeDEgaW5cbiAgICAgIGxldCB5MiA9IGYgeDIgaW5cbiAgICAgIGxldCB5MyA9IGYgeDMgaW5cbiAgICAgIGxldCB5NCA9IGYgeDQgaW5cbiAgICAgIGxldCB5NSA9IGYgeDUgaW5cbiAgICAgIGxldCB5NiA9IGYgeDYgaW5cbiAgICAgIGxldCB5NyA9IGYgeDcgaW5cbiAgICAgIGxldCB5OCA9IGYgeDggaW5cbiAgICAgIGRpdmUgKCh5MCwgeTEsIHkyLCB5MywgeTQsIHk1LCB5NiwgeTcsIHk4KSA6OiB0dXBsZV9hY2MpIHhzXG4gICAgfCB4cyAtPlxuICAgICAgKCogUmV2ZXJzZSBkaXJlY3Rpb24sIGZpbmlzaGluZyBvZmYgd2l0aCBhIGRpcmVjdCBtYXAgKilcbiAgICAgIGxldCB0YWlsID0gTGlzdC5tYXAgZiB4cyBpblxuICAgICAgcmVidWlsZCB0YWlsIHR1cGxlX2FjY1xuICBpblxuICBkaXZlIFtdIGxcblxubGV0IG1hcCBmIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBmIGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgWyB4IF0gLT4gWyBmIHggXVxuICAgIHwgWyB4MTsgeDIgXSAtPlxuICAgICAgbGV0IHkxID0gZiB4MSBpblxuICAgICAgWyB5MTsgZiB4MiBdXG4gICAgfCBbIHgxOyB4MjsgeDMgXSAtPlxuICAgICAgbGV0IHkxID0gZiB4MSBpblxuICAgICAgbGV0IHkyID0gZiB4MiBpblxuICAgICAgWyB5MTsgeTI7IGYgeDMgXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHRhaWxfbWFwIGYgbFxuICAgIHwgeDEgOjogeDIgOjogeDMgOjogeDQgOjogbCcgLT5cbiAgICAgIGxldCB5MSA9IGYgeDEgaW5cbiAgICAgIGxldCB5MiA9IGYgeDIgaW5cbiAgICAgIGxldCB5MyA9IGYgeDMgaW5cbiAgICAgIGxldCB5NCA9IGYgeDQgaW5cbiAgICAgIHkxIDo6IHkyIDo6IHkzIDo6IHk0IDo6IGRpcmVjdCBmIChpIC0gMSkgbCdcbiAgaW5cbiAgZGlyZWN0IGYgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGxcblxubGV0IGFwcGVuZCBsMSBsMiA9XG4gIGxldFtAaW5saW5lXSBzYWZlIGwxIGwyID0gTGlzdC5yZXZfYXBwZW5kIChMaXN0LnJldiBsMSkgbDIgaW5cbiAgbGV0IHJlYyBkaXJlY3QgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEgd2l0aFxuICAgIHwgW10gLT4gbDJcbiAgICB8IFsgeCBdIC0+IHggOjogbDJcbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIGwxIGwyXG4gICAgfCB4IDo6IHkgOjogdGwxIC0+IHggOjogeSA6OiBkaXJlY3QgKGkgLSAxKSB0bDEgbDJcbiAgaW5cbiAgZGlyZWN0IDEwMDAgbDEgbDJcblxuW0BAQGVsaWZsdCA1LjFdXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIG1hcCBmIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogdGwgLT5cbiAgICBsZXQgeCA9IGYgeCBpblxuICAgIHggOjogbWFwIGYgdGxcblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgYXBwZW5kIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICB8IFtdIC0+IGwyXG4gIHwgeCA6OiB0bDEgLT4geCA6OiBhcHBlbmQgdGwxIGwyXG5cbltAQEBlbHNlX11cblxuKCogVFJNQyBmdW5jdGlvbnMgb24gPj0gNS4xLCBubyBuZWVkIHRvIGJyaW5nIG91ciBvd24gKilcblxuW0BAQGVuZGlmXVxuXG4oKiBXcmFwcGVyIGFyb3VuZCBbYXBwZW5kXSB0byBvcHRpbWl6ZSBmb3IgdGhlIGNhc2Ugb2Ygc2hvcnQgW2wxXSxcbiAgIGFuZCBmb3IgdGhlIGNhc2Ugb2YgW2wyID0gW11dIChzYXZlcyB0aGUgd2hvbGUgY29weSBvZiBbbDFdISkgKilcbmxldFtAaW5saW5lXSBhcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBfIC0+IGwyXG4gIHwgXywgW10gLT4gbDFcbiAgfCBbIHggXSwgXyAtPiB4IDo6IGwyXG4gIHwgeCA6OiB5IDo6IHRsMSwgXyAtPiB4IDo6IHkgOjogYXBwZW5kIHRsMSBsMlxuXG5sZXQgKCBAICkgPSBhcHBlbmRcbmxldFtAaW5saW5lXSBjb25zJyBsIHggPSB4IDo6IGxcblxubGV0IGNvbnNfbWF5YmUgbyBsID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgU29tZSB4IC0+IHggOjogbFxuICB8IE5vbmUgLT4gbFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgZGlyZWN0X2RlcHRoX2ZpbHRlcl8gPSAxMF8wMDBcblxubGV0IGZpbHRlciBwIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBpIHAgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgcCBsIFtdXG4gICAgfCB4IDo6IGwnIHdoZW4gbm90IChwIHgpIC0+IGRpcmVjdCBpIHAgbCdcbiAgICB8IHggOjogbCcgLT4geCA6OiBkaXJlY3QgKGkgLSAxKSBwIGwnXG4gIGFuZCBzYWZlIHAgbCBhY2MgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIHdoZW4gbm90IChwIHgpIC0+IHNhZmUgcCBsJyBhY2NcbiAgICB8IHggOjogbCcgLT4gc2FmZSBwIGwnICh4IDo6IGFjYylcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9maWx0ZXJfIHAgbFxuXG5bQEBAZWxpZmx0IDUuMV1cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgZmlsdGVyIGYgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiB0bCAtPlxuICAgIGxldCBrZWVwID0gZiB4IGluXG4gICAgaWYga2VlcCB0aGVuXG4gICAgICB4IDo6IGZpbHRlciBmIHRsXG4gICAgZWxzZVxuICAgICAgZmlsdGVyIGYgdGxcblxuW0BAQGVsc2VfXVxuKCogc3RkbGliJ3MgZmlsdGVyIHVzZXMgVFJNQyBhZnRlciA1LjEgKilcblxuW0BAQGVuZGlmXVxuXG5sZXQgZm9sZF9yaWdodCBmIGwgYWNjID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBmIGwgYWNjID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgZiAoTGlzdC5yZXYgbCkgYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gZGlyZWN0IChpIC0gMSkgZiBsJyBhY2MgaW5cbiAgICAgIGYgeCBhY2NcbiAgYW5kIHNhZmUgZiBsIGFjYyA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSBmIHggYWNjIGluXG4gICAgICBzYWZlIGYgbCcgYWNjXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gZiBsIGFjY1xuXG5sZXQgcmVjIGZvbGRfd2hpbGUgZiBhY2MgPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY1xuICB8IGUgOjogbCAtPlxuICAgIGxldCBhY2MsIGNvbnQgPSBmIGFjYyBlIGluXG4gICAgKG1hdGNoIGNvbnQgd2l0aFxuICAgIHwgYFN0b3AgLT4gYWNjXG4gICAgfCBgQ29udGludWUgLT4gZm9sZF93aGlsZSBmIGFjYyBsKVxuXG5sZXQgZm9sZF9tYXAgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4IGluXG4gICAgICBhdXggZiBhY2MgKHkgOjogbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIFtdIGxcblxubGV0IGZvbGRfbWFwX2kgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGkgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIGkgeCBpblxuICAgICAgYXV4IGYgYWNjIChpICsgMSkgKHkgOjogbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIDAgW10gbFxuXG5sZXQgZm9sZF9vbl9tYXAgfmYgfnJlZHVjZSBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYyA9IHJlZHVjZSBhY2MgKGYgeCkgaW5cbiAgICAgIGF1eCBhY2MgbCdcbiAgaW5cbiAgYXV4IGFjYyBsXG5cbmxldCBzY2FuX2xlZnQgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGxfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgbF9hY2NcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgbGV0IGFjYyA9IGYgYWNjIHggaW5cbiAgICAgIGxldCBsX2FjYyA9IGFjYyA6OiBsX2FjYyBpblxuICAgICAgYXV4IGYgYWNjIGxfYWNjIHRhaWxcbiAgaW5cbiAgYXV4IGYgYWNjIFsgYWNjIF0gbFxuXG5sZXQgcmVkdWNlIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT4gU29tZSAoZm9sZF9sZWZ0IGYgeCBsKVxuXG5sZXQgcmVkdWNlX2V4biBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkNDTGlzdC5yZWR1Y2VfZXhuXCIpXG4gIHwgeCA6OiBsIC0+IGZvbGRfbGVmdCBmIHggbFxuXG5sZXQgZm9sZF9tYXAyIGYgYWNjIGwxIGwyID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgbWFwX2FjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gaW52YWxpZF9hcmcgXCJmb2xkX21hcDJcIlxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4MSB4MiBpblxuICAgICAgYXV4IGYgYWNjICh5IDo6IG1hcF9hY2MpIGwxJyBsMidcbiAgaW5cbiAgYXV4IGYgYWNjIFtdIGwxIGwyXG5cbmxldCBmb2xkX2ZpbHRlcl9tYXAgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4IGluXG4gICAgICBhdXggZiBhY2MgKGNvbnNfbWF5YmUgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgW10gbFxuXG5sZXQgZm9sZF9maWx0ZXJfbWFwX2kgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGkgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIGkgeCBpblxuICAgICAgYXV4IGYgYWNjIChpICsgMSkgKGNvbnNfbWF5YmUgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgMCBbXSBsXG5cbmxldCBmb2xkX2ZsYXRfbWFwIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBtYXBfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjLCBMaXN0LnJldiBtYXBfYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjLCB5ID0gZiBhY2MgeCBpblxuICAgICAgYXV4IGYgYWNjIChMaXN0LnJldl9hcHBlbmQgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgW10gbFxuXG5sZXQgZm9sZF9mbGF0X21hcF9pIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBpIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyBpIHggaW5cbiAgICAgIGF1eCBmIGFjYyAoaSArIDEpIChMaXN0LnJldl9hcHBlbmQgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgMCBbXSBsXG5cbltAQEBpZmx0IDQuMTRdXG5cbigqIGtlZXAgdGhpcyBiZWNhdXNlIGl0J3MgdGFpbHJlYyBmb3IgPCA1LjEgKilcbmxldCBpbml0IGxlbiBmID1cbiAgbGV0IHJlYyBpbmRpcmVjdF8gaSBhY2MgPVxuICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgZWxzZSAoXG4gICAgICBsZXQgeCA9IGYgaSBpblxuICAgICAgaW5kaXJlY3RfIChpICsgMSkgKHggOjogYWNjKVxuICAgIClcbiAgaW5cbiAgbGV0IHJlYyBkaXJlY3RfIGkgPVxuICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgW11cbiAgICBlbHNlIGlmIGkgPCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gdGhlbiAoXG4gICAgICBsZXQgeCA9IGYgaSBpblxuICAgICAgeCA6OiBkaXJlY3RfIChpICsgMSlcbiAgICApIGVsc2VcbiAgICAgIGluZGlyZWN0XyBpIFtdXG4gIGluXG4gIGlmIGxlbiA8IDAgdGhlblxuICAgIGludmFsaWRfYXJnIFwiaW5pdFwiXG4gIGVsc2UgaWYgbGVuID0gMCB0aGVuXG4gICAgW11cbiAgZWxzZVxuICAgIGRpcmVjdF8gMFxuXG5sZXQgcmVjIHVuZm9sZF9rb250IGYgc2VlZCBrID1cbiAgbWF0Y2ggZiBzZWVkIHdpdGhcbiAgfCBOb25lIC0+IGsgW11cbiAgfCBTb21lICh2LCBuZXh0KSAtPlxuICAgIGxldCBrJyB0bCA9IGsgKHYgOjogdGwpIGluXG4gICAgdW5mb2xkX2tvbnQgZiBuZXh0IGsnXG5cbmxldFtAaW5saW5lXSB1bmZvbGQgZiBzZWVkID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBmIHNlZWQgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIHVuZm9sZF9rb250IGYgc2VlZCAoZnVuIHggLT4geClcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIGYgc2VlZCB3aXRoXG4gICAgICB8IE5vbmUgLT4gW11cbiAgICAgIHwgU29tZSAodiwgbmV4dCkgLT4gdiA6OiBkaXJlY3QgKGkgLSAxKSBmIG5leHRcbiAgICApXG4gIGluXG4gIGRpcmVjdCAxMDAgZiBzZWVkXG5cbltAQEBlbGlmbHQgNS4xXVxuXG5sZXQgaW5pdCBuIGYgPVxuICBsZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBpbml0XyBpIG4gZiA9XG4gICAgaWYgaSA9IG4gdGhlblxuICAgICAgW11cbiAgICBlbHNlIChcbiAgICAgIGxldCB4ID0gZiBpIGluXG4gICAgICB4IDo6IGluaXRfIChpICsgMSkgbiBmXG4gICAgKVxuICBpblxuICBpbml0XyAwIG4gZlxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyB1bmZvbGQgZiBzZWVkID1cbiAgbWF0Y2ggZiBzZWVkIHdpdGhcbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSAodiwgbmV4dCkgLT4gdiA6OiB1bmZvbGQgZiBuZXh0XG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgdW5mb2xkIGYgc2VlZCA9XG4gIG1hdGNoIGYgc2VlZCB3aXRoXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgKHYsIG5leHQpIC0+IHYgOjogdW5mb2xkIGYgbmV4dFxuXG5bQEBAZW5kaWZdXG5cbmxldCByZWMgY29tcGFyZSBmIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IF8sIFtdIC0+IDFcbiAgfCBbXSwgXyAtPiAtMVxuICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgbGV0IGMgPSBmIHgxIHgyIGluXG4gICAgaWYgYyA8PiAwIHRoZW5cbiAgICAgIGNcbiAgICBlbHNlXG4gICAgICBjb21wYXJlIGYgbDEnIGwyJ1xuXG5sZXQgcmVjIGVxdWFsIGYgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiB0cnVlXG4gIHwgW10sIF8gfCBfLCBbXSAtPiBmYWxzZVxuICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+IGYgeDEgeDIgJiYgZXF1YWwgZiBsMScgbDInXG5cbltAQEBpZmx0IDUuMV1cblxubGV0IHJlYyBmbGF0X21hcF9rb250IGYgbCBrb250ID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4ga29udCBbXVxuICB8IFsgeCBdIC0+XG4gICAgbGV0IHggPSBmIHggaW5cbiAgICBrb250IHhcbiAgfCB4IDo6IGwnIC0+XG4gICAgbGV0IHggPSBmIHggaW5cbiAgICBsZXQga29udCcgdGFpbCA9IGtvbnQgKGFwcGVuZCB4IHRhaWwpIGluXG4gICAgZmxhdF9tYXBfa29udCBmIGwnIGtvbnQnXG5cbmxldFtAaW5saW5lXSBmbGF0X21hcCBmIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IFsgeCBdIC0+IGYgeFxuICB8IF8gOjogXyAtPiBmbGF0X21hcF9rb250IGYgbCBGdW4uaWRcblxuW0BAQGVsc2VfXVxuXG5sZXQgZmxhdF9tYXAgPSBjb25jYXRfbWFwXG5cbltAQEBlbmRpZl1cblxubGV0IGZsYXRfbWFwX2kgZiBsID1cbiAgbGV0IHJlYyBhdXggZiBpIGwga29udCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBrb250IFtdXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgeSA9IGYgaSB4IGluXG4gICAgICBsZXQga29udCcgdGFpbCA9XG4gICAgICAgIG1hdGNoIHkgd2l0aFxuICAgICAgICB8IFtdIC0+IGtvbnQgdGFpbFxuICAgICAgICB8IFsgeCBdIC0+IGtvbnQgKHggOjogdGFpbClcbiAgICAgICAgfCBbIHg7IHkgXSAtPiBrb250ICh4IDo6IHkgOjogdGFpbClcbiAgICAgICAgfCBsIC0+IGtvbnQgKGFwcGVuZCBsIHRhaWwpXG4gICAgICBpblxuICAgICAgYXV4IGYgKGkgKyAxKSBsJyBrb250J1xuICBpblxuICBhdXggZiAwIGwgKGZ1biBsIC0+IGwpXG5cbmxldCBmbGF0dGVuIGwgPSBmb2xkX3JpZ2h0IGFwcGVuZCBsIFtdXG5cbmxldCBjb3VudCBmIGwgPVxuICBmb2xkX2xlZnRcbiAgICAoZnVuIG4geCAtPlxuICAgICAgaWYgZiB4IHRoZW5cbiAgICAgICAgc3VjYyBuXG4gICAgICBlbHNlXG4gICAgICAgIG4pXG4gICAgMCBsXG5cbmxldCBjb3VudF90cnVlX2ZhbHNlIHAgbCA9XG4gIGZvbGRfbGVmdFxuICAgIChmdW4gKG9rLCBrbykgeCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgb2sgKyAxLCBrb1xuICAgICAgZWxzZVxuICAgICAgICBvaywga28gKyAxKVxuICAgICgwLCAwKSBsXG5cbmxldFtAaW5saW5lXSBwcm9kdWN0IGYgbDEgbDIgPSBmbGF0X21hcCAoZnVuIHggLT4gbWFwIChmdW4geSAtPiBmIHggeSkgbDIpIGwxXG5cbmxldCBmb2xkX3Byb2R1Y3QgZiBhY2MgbDEgbDIgPVxuICBMaXN0LmZvbGRfbGVmdFxuICAgIChmdW4gYWNjIHgxIC0+IExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIHgyIC0+IGYgYWNjIHgxIHgyKSBhY2MgbDIpXG4gICAgYWNjIGwxXG5cbmxldCBkaWFnb25hbCBsID1cbiAgbGV0IHJlYyBnZW4gYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeSAtPiAoeCwgeSkgOjogYWNjKSBhY2MgbCcgaW5cbiAgICAgIGdlbiBhY2MgbCdcbiAgaW5cbiAgZ2VuIFtdIGxcblxubGV0IHBhcnRpdGlvbl9tYXBfZWl0aGVyIGYgbCA9XG4gIGxldCByZWMgaXRlciBmIGwxIGwyIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgbDEsIExpc3QucmV2IGwyXG4gICAgfCB4IDo6IHRsIC0+XG4gICAgICAobWF0Y2ggZiB4IHdpdGhcbiAgICAgIHwgQ0NFaXRoZXIuTGVmdCB5IC0+IGl0ZXIgZiAoeSA6OiBsMSkgbDIgdGxcbiAgICAgIHwgQ0NFaXRoZXIuUmlnaHQgeSAtPiBpdGVyIGYgbDEgKHkgOjogbDIpIHRsKVxuICBpblxuICBpdGVyIGYgW10gW10gbFxuXG5sZXQgcGFydGl0aW9uX2ZpbHRlcl9tYXAgZiBsID1cbiAgbGV0IHJlYyBpdGVyIGYgbDEgbDIgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBsMSwgTGlzdC5yZXYgbDJcbiAgICB8IHggOjogdGwgLT5cbiAgICAgIChtYXRjaCBmIHggd2l0aFxuICAgICAgfCBgTGVmdCB5IC0+IGl0ZXIgZiAoeSA6OiBsMSkgbDIgdGxcbiAgICAgIHwgYFJpZ2h0IHkgLT4gaXRlciBmIGwxICh5IDo6IGwyKSB0bFxuICAgICAgfCBgRHJvcCAtPiBpdGVyIGYgbDEgbDIgdGwpXG4gIGluXG4gIGl0ZXIgZiBbXSBbXSBsXG5cbmxldCBwYXJ0aXRpb25fbWFwID0gcGFydGl0aW9uX2ZpbHRlcl9tYXBcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IGNvbWJpbmUgbDEgbDIgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBsMSBsMiBbXVxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogZGlyZWN0IChpIC0gMSkgbDEnIGwyJ1xuICAgIHwgXywgXyAtPiBpbnZhbGlkX2FyZyBcIkNDTGlzdC5jb21iaW5lXCJcbiAgYW5kIHNhZmUgbDEgbDIgYWNjID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gc2FmZSBsMScgbDInIEBAICgoeDEsIHgyKSA6OiBhY2MpXG4gICAgfCBfLCBfIC0+IGludmFsaWRfYXJnIFwiQ0NMaXN0LmNvbWJpbmVcIlxuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGwxIGwyXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgY29tYmluZSBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IFtdXG4gIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogY29tYmluZSBsMScgbDInXG4gIHwgXywgXyAtPiBpbnZhbGlkX2FyZyBcIkNDTGlzdC5jb21iaW5lXCJcblxuW0BAQGVuZGlmXVxuXG5sZXQgY29tYmluZV9nZW4gbDEgbDIgPVxuICBsZXQgbDEgPSByZWYgbDEgaW5cbiAgbGV0IGwyID0gcmVmIGwyIGluXG4gIGZ1biAoKSAtPlxuICAgIG1hdGNoICFsMSwgIWwyIHdpdGhcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gTm9uZVxuICAgIHwgeDEgOjogdGFpbDEsIHgyIDo6IHRhaWwyIC0+XG4gICAgICBsMSA6PSB0YWlsMTtcbiAgICAgIGwyIDo9IHRhaWwyO1xuICAgICAgU29tZSAoeDEsIHgyKVxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgY29tYmluZV9zaG9ydGVzdCBsMSBsMiA9XG4gIGxldCByZWMgZGlyZWN0IGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBfLCBbXSB8IFtdLCBfIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBsMSBsMiBbXVxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogZGlyZWN0IChpIC0gMSkgbDEnIGwyJ1xuICBhbmQgc2FmZSBsMSBsMiBhY2MgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBhY2MgPSAoeDEsIHgyKSA6OiBhY2MgaW5cbiAgICAgIHNhZmUgbDEnIGwyJyBhY2NcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBsMSBsMlxuXG5bQEBAZWxzZV9dXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGNvbWJpbmVfc2hvcnRlc3QgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IF8sIFtdIHwgW10sIF8gLT4gW11cbiAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPiAoeDEsIHgyKSA6OiBjb21iaW5lX3Nob3J0ZXN0IGwxJyBsMidcblxuW0BAQGVuZGlmXVxuXG5sZXQgc3BsaXQgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXSwgW11cbiAgICB8IFsgKHgxLCB5MSkgXSAtPiBbIHgxIF0sIFsgeTEgXVxuICAgIHwgWyAoeDEsIHkxKTsgKHgyLCB5MikgXSAtPiBbIHgxOyB4MiBdLCBbIHkxOyB5MiBdXG4gICAgfCBbICh4MSwgeTEpOyAoeDIsIHkyKTsgKHgzLCB5MykgXSAtPiBbIHgxOyB4MjsgeDMgXSwgWyB5MTsgeTI7IHkzIF1cbiAgICB8IFsgKHgxLCB5MSk7ICh4MiwgeTIpOyAoeDMsIHkzKTsgKHg0LCB5NCkgXSAtPlxuICAgICAgWyB4MTsgeDI7IHgzOyB4NCBdLCBbIHkxOyB5MjsgeTM7IHk0IF1cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzcGxpdF9zbG93IFtdIFtdIGxcbiAgICB8ICh4MSwgeTEpIDo6ICh4MiwgeTIpIDo6ICh4MywgeTMpIDo6ICh4NCwgeTQpIDo6ICh4NSwgeTUpIDo6IGwnIC0+XG4gICAgICBsZXQgcngsIHJ5ID0gZGlyZWN0IChpIC0gMSkgbCcgaW5cbiAgICAgIHgxIDo6IHgyIDo6IHgzIDo6IHg0IDo6IHg1IDo6IHJ4LCB5MSA6OiB5MiA6OiB5MyA6OiB5NCA6OiB5NSA6OiByeVxuICBhbmQgc3BsaXRfc2xvdyBhY2MxIGFjYzIgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2MxLCBMaXN0LnJldiBhY2MyXG4gICAgfCAoeDEsIHgyKSA6OiB0YWlsIC0+XG4gICAgICBsZXQgYWNjMSA9IHgxIDo6IGFjYzEgYW5kIGFjYzIgPSB4MiA6OiBhY2MyIGluXG4gICAgICBzcGxpdF9zbG93IGFjYzEgYWNjMiB0YWlsXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbFxuXG5sZXQgcmV0dXJuIHggPSBbIHggXVxubGV0IHB1cmUgPSByZXR1cm5cbmxldCAoIDwqPiApIGZ1bnMgbCA9IHByb2R1Y3QgKGZ1biBmIHggLT4gZiB4KSBmdW5zIGxcblxubGV0IGNhcnRlc2lhbl9wcm9kdWN0IGwgPVxuICAoKiBbbGVmdF06IGVsZW1lbnRzIHBpY2tlZCBzbyBmYXJcbiAgICAgW3JpZ2h0XTogc2V0cyB0byBwaWNrIGVsZW1lbnRzIGZyb21cbiAgICAgW2FjY106IGFjY3VtdWxhdG9yIGZvciB0aGUgcmVzdWx0LCB0byBwYXNzIHRvIGNvbnRpbnVhdGlvblxuICAgICBba106IGNvbnRpbnVhdGlvbiAqKVxuICBsZXQgcmVjIHByb2RfcmVjIGxlZnQgcmlnaHQgayBhY2MgPVxuICAgIG1hdGNoIHJpZ2h0IHdpdGhcbiAgICB8IFtdIC0+IGsgYWNjIChMaXN0LnJldiBsZWZ0KVxuICAgIHwgbDEgOjogdGFpbCAtPlxuICAgICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiBwcm9kX3JlYyAoeCA6OiBsZWZ0KSB0YWlsIGsgYWNjKSBhY2MgbDFcbiAgaW5cbiAgcHJvZF9yZWMgW10gbCAoZnVuIGFjYyBsJyAtPiBsJyA6OiBhY2MpIFtdXG5cbigqIGNhcnRlc2lhbiBwcm9kdWN0IG9mIGxpc3RzIG9mIGxpc3RzICopXG5sZXQgbWFwX3Byb2R1Y3RfbCBmIGwgPVxuICBsZXQgbCA9IExpc3QubWFwIGYgbCBpblxuICBjYXJ0ZXNpYW5fcHJvZHVjdCBsXG5cbmxldCByZWMgc29ydGVkX21lbSB+Y21wIHggbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IGZhbHNlXG4gIHwgeSA6OiB0YWlsIC0+XG4gICAgKG1hdGNoIGNtcCB4IHkgd2l0aFxuICAgIHwgMCAtPiB0cnVlXG4gICAgfCBuIHdoZW4gbiA8IDAgLT4gZmFsc2VcbiAgICB8IF8gLT4gKHNvcnRlZF9tZW0gW0B0YWlsY2FsbF0pIH5jbXAgeCB0YWlsKVxuXG5sZXQgc29ydGVkX21lcmdlIH5jbXAgbDEgbDIgPVxuICBsZXQgcmVjIHJlY3Vyc2UgY21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDJcbiAgICB8IF8sIFtdIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDFcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICByZWN1cnNlIGNtcCAoeDEgOjogYWNjKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIGNtcCAoeDIgOjogYWNjKSBsMSBsMidcbiAgICAgIGVsc2VcbiAgICAgICAgcmVjdXJzZSBjbXAgKHgxIDo6IHgyIDo6IGFjYykgbDEnIGwyJ1xuICBpblxuICByZWN1cnNlIGNtcCBbXSBsMSBsMlxuXG5sZXQgc29ydGVkX2RpZmYgfmNtcCBsMSBsMiA9XG4gIGxldCByZWMgcmVjdXJzZSBjbXAgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIF8gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfLCBbXSAtPiBMaXN0LnJldl9hcHBlbmQgYWNjIGwxXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSBjbXAgKHgxIDo6IGFjYykgbDEnIGwyXG4gICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSBjbXAgYWNjIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIGNtcCBhY2MgbDEnIGwyJ1xuICBpblxuICByZWN1cnNlIGNtcCBbXSBsMSBsMlxuXG5sZXQgc29ydF91bmlxIH5jbXAgbCA9IExpc3Quc29ydF91bmlxIGNtcCBsXG5cbmxldCBpc19zb3J0ZWQgfmNtcCBsID1cbiAgbGV0IHJlYyBhdXggY21wID0gZnVuY3Rpb25cbiAgICB8IFtdIHwgWyBfIF0gLT4gdHJ1ZVxuICAgIHwgeCA6OiAoeSA6OiBfIGFzIHRhaWwpIC0+IGNtcCB4IHkgPD0gMCAmJiBhdXggY21wIHRhaWxcbiAgaW5cbiAgYXV4IGNtcCBsXG5cbmxldCBzb3J0ZWRfaW5zZXJ0IH5jbXAgPyh1bmlxID0gZmFsc2UpIHggbCA9XG4gIGxldCByZWMgYXV4IGNtcCB1bmlxIHggbGVmdCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2X2FwcGVuZCBsZWZ0IFsgeCBdXG4gICAgfCB5IDo6IHRhaWwgLT5cbiAgICAgIChtYXRjaCBjbXAgeCB5IHdpdGhcbiAgICAgIHwgMCAtPlxuICAgICAgICBsZXQgbCcgPVxuICAgICAgICAgIGlmIHVuaXEgdGhlblxuICAgICAgICAgICAgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHggOjogbFxuICAgICAgICBpblxuICAgICAgICBMaXN0LnJldl9hcHBlbmQgbGVmdCBsJ1xuICAgICAgfCBuIHdoZW4gbiA8IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGxlZnQgKHggOjogbClcbiAgICAgIHwgXyAtPiBhdXggY21wIHVuaXEgeCAoeSA6OiBsZWZ0KSB0YWlsKVxuICBpblxuICBhdXggY21wIHVuaXEgeCBbXSBsXG5cbmxldCBzb3J0ZWRfcmVtb3ZlIH5jbXAgPyhhbGwgPSBmYWxzZSkgeCBsID1cbiAgbGV0IHJlYyBhdXggY21wIGFsbCB4IGxlZnQgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBsZWZ0XG4gICAgfCB5IDo6IHRhaWwgLT5cbiAgICAgIChtYXRjaCBjbXAgeCB5IHdpdGhcbiAgICAgIHwgMCAtPlxuICAgICAgICBpZiBhbGwgdGhlblxuICAgICAgICAgIGF1eCBjbXAgYWxsIHggbGVmdCB0YWlsXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBMaXN0LnJldl9hcHBlbmQgbGVmdCB0YWlsXG4gICAgICB8IG4gd2hlbiBuIDwgMCAtPiBMaXN0LnJldl9hcHBlbmQgbGVmdCBsXG4gICAgICB8IF8gLT4gYXV4IGNtcCBhbGwgeCAoeSA6OiBsZWZ0KSB0YWlsKVxuICBpblxuICBhdXggY21wIGFsbCB4IFtdIGxcblxubGV0IHVuaXFfc3VjYyB+ZXEgbCA9XG4gIGxldCByZWMgZiBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFsgeCBdIC0+IExpc3QucmV2ICh4IDo6IGFjYylcbiAgICB8IHggOjogKHkgOjogXyBhcyB0YWlsKSB3aGVuIGVxIHggeSAtPiBmIGFjYyB0YWlsXG4gICAgfCB4IDo6IHRhaWwgLT4gZiAoeCA6OiBhY2MpIHRhaWxcbiAgaW5cbiAgZiBbXSBsXG5cbmxldCBncm91cF9zdWNjIH5lcSBsID1cbiAgbGV0IHJlYyBmIH5lcSBhY2MgY3VyIGwgPVxuICAgIG1hdGNoIGN1ciwgbCB3aXRoXG4gICAgfCBbXSwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfIDo6IF8sIFtdIC0+IExpc3QucmV2IChMaXN0LnJldiBjdXIgOjogYWNjKVxuICAgIHwgW10sIHggOjogdGwgLT4gZiB+ZXEgYWNjIFsgeCBdIHRsXG4gICAgfCB5IDo6IF8sIHggOjogdGwgd2hlbiBlcSB4IHkgLT4gZiB+ZXEgYWNjICh4IDo6IGN1cikgdGxcbiAgICB8IF8sIHggOjogdGwgLT4gZiB+ZXEgKExpc3QucmV2IGN1ciA6OiBhY2MpIFsgeCBdIHRsXG4gIGluXG4gIGYgfmVxIFtdIFtdIGxcblxubGV0IHNvcnRlZF9tZXJnZV91bmlxIH5jbXAgbDEgbDIgPVxuICBsZXQgcHVzaCB+Y21wIGFjYyB4ID1cbiAgICBtYXRjaCBhY2Mgd2l0aFxuICAgIHwgW10gLT4gWyB4IF1cbiAgICB8IHkgOjogXyB3aGVuIGNtcCB4IHkgPiAwIC0+IHggOjogYWNjXG4gICAgfCBfIC0+IGFjY1xuICAgICgqIGR1cGxpY2F0ZSwgZG8gbm90IHlpZWxkICopXG4gIGluXG4gIGxldCByZWMgcmVjdXJzZSB+Y21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsIHwgbCwgW10gLT5cbiAgICAgIGxldCBhY2MgPSBMaXN0LmZvbGRfbGVmdCAocHVzaCB+Y21wKSBhY2MgbCBpblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSB+Y21wIChwdXNoIH5jbXAgYWNjIHgxKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIH5jbXAgKHB1c2ggfmNtcCBhY2MgeDIpIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxIGwyJ1xuICAgICgqIGRyb3Agb25lIG9mIHRoZSBbeF0gKilcbiAgaW5cbiAgcmVjdXJzZSB+Y21wIFtdIGwxIGwyXG5cbmxldCBzb3J0ZWRfZGlmZl91bmlxIH5jbXAgbDEgbDIgPVxuICBsZXQgcHVzaCB+Y21wIGFjYyB4ID1cbiAgICBtYXRjaCBhY2Mgd2l0aFxuICAgIHwgW10gLT4gWyB4IF1cbiAgICB8IHkgOjogXyB3aGVuIGNtcCB4IHkgPiAwIC0+IHggOjogYWNjXG4gICAgfCBfIC0+IGFjY1xuICAgICgqIGR1cGxpY2F0ZSwgZG8gbm90IHlpZWxkICopXG4gIGluXG4gIGxldCByZWMgcmVjdXJzZSB+Y21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2IGFjY1xuICAgIHwgbCwgW10gLT5cbiAgICAgIGxldCBhY2MgPSBMaXN0LmZvbGRfbGVmdCAocHVzaCB+Y21wKSBhY2MgbCBpblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSB+Y21wIChwdXNoIH5jbXAgYWNjIHgxKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxJyBsMidcbiAgaW5cbiAgcmVjdXJzZSB+Y21wIFtdIGwxIGwyXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCB0YWtlIG4gbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgbiBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBuIFtdIGxcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGlmIG4gPiAwIHRoZW5cbiAgICAgICAgeCA6OiBkaXJlY3QgKGkgLSAxKSAobiAtIDEpIGwnXG4gICAgICBlbHNlXG4gICAgICAgIFtdXG4gIGFuZCBzYWZlIG4gYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfIHdoZW4gbiA9IDAgLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIC0+IHNhZmUgKG4gLSAxKSAoeCA6OiBhY2MpIGwnXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbiBsXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgdGFrZSBuIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogbCcgLT5cbiAgICBpZiBuID4gMCB0aGVuXG4gICAgICB4IDo6IHRha2UgKG4gLSAxKSBsJ1xuICAgIGVsc2VcbiAgICAgIFtdXG5cbltAQEBlbmRpZl1cblxubGV0IHJlYyBkcm9wIG4gbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgXyB3aGVuIG4gPSAwIC0+IGxcbiAgfCBfIDo6IGwnIC0+IGRyb3AgKG4gLSAxKSBsJ1xuXG5sZXQgaGRfdGwgPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhaWx3aXRoIFwiaGRfdGxcIlxuICB8IHggOjogbCAtPiB4LCBsXG5cbmxldCB0YWtlX2Ryb3AgbiBsID0gdGFrZSBuIGwsIGRyb3AgbiBsXG5cbmxldCBzdWJsaXN0c19vZl9sZW4gPyhsYXN0ID0gZnVuIF8gLT4gTm9uZSkgP29mZnNldCBuIGwgPVxuICBpZiBuIDwgMSB0aGVuIGludmFsaWRfYXJnIFwic3VibGlzdHNfb2ZfbGVuOiBuIG11c3QgYmUgPiAwXCI7XG4gIGxldCBvZmZzZXQgPVxuICAgIG1hdGNoIG9mZnNldCB3aXRoXG4gICAgfCBOb25lIC0+IG5cbiAgICB8IFNvbWUgbyB3aGVuIG8gPCAxIC0+IGludmFsaWRfYXJnIFwic3VibGlzdHNfb2ZfbGVuOiBvZmZzZXQgbXVzdCBiZSA+IDBcIlxuICAgIHwgU29tZSBvIC0+IG9cbiAgaW5cbiAgKCogYWRkIHN1Yi1saXN0cyBvZiBbbF0gdG8gW2FjY10gKilcbiAgbGV0IHJlYyBhdXggYWNjIGwgPVxuICAgIGxldCBncm91cCA9IHRha2UgbiBsIGluXG4gICAgaWYgaXNfZW1wdHkgZ3JvdXAgdGhlblxuICAgICAgYWNjXG4gICAgKCogdGhpcyB3YXMgdGhlIGxhc3QgZ3JvdXAsIHdlIGFyZSBkb25lICopXG4gICAgZWxzZSBpZiBMaXN0Lmxlbmd0aCBncm91cCA8IG4gKCogbGFzdCBncm91cCwgd2l0aCBtaXNzaW5nIGVsZW1lbnRzICopIHRoZW4gKFxuICAgICAgbWF0Y2ggbGFzdCBncm91cCB3aXRoXG4gICAgICB8IE5vbmUgLT4gYWNjXG4gICAgICB8IFNvbWUgZ3JvdXAnIC0+IGdyb3VwJyA6OiBhY2NcbiAgICApIGVsc2UgKFxuICAgICAgbGV0IGwnID0gZHJvcCBvZmZzZXQgbCBpblxuICAgICAgYXV4IChncm91cCA6OiBhY2MpIGwnICgqIGNvbnRpbnVlICopXG4gICAgKVxuICBpblxuICBMaXN0LnJldiAoYXV4IFtdIGwpXG5cbmxldCBjaHVua3MgbiBsID0gc3VibGlzdHNfb2ZfbGVuIH5sYXN0OihmdW4geCAtPiBTb21lIHgpIG4gbFxuXG5sZXQgaW50ZXJzcGVyc2UgeCBsID1cbiAgbGV0IHJlYyBhdXhfZGlyZWN0IGkgeCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBbIF8gXSAtPiBsXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gYXV4X3RhaWxyZWMgW10geCBsXG4gICAgfCB5IDo6IHRhaWwgLT4geSA6OiB4IDo6IGF1eF9kaXJlY3QgKGkgLSAxKSB4IHRhaWxcbiAgYW5kIGF1eF90YWlscmVjIGFjYyB4IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBbIHkgXSAtPiBMaXN0LnJldiAoeSA6OiBhY2MpXG4gICAgfCB5IDo6IHRhaWwgLT4gYXV4X3RhaWxyZWMgKHggOjogeSA6OiBhY2MpIHggdGFpbFxuICBpblxuICBhdXhfZGlyZWN0IDFfMDAwIHggbFxuXG5sZXQgaW50ZXJsZWF2ZSBsMSBsMiA6IF8gbGlzdCA9XG4gIGxldCByZWMgYXV4IGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2IChMaXN0LnJldl9hcHBlbmQgbDIgYWNjKVxuICAgIHwgXywgW10gLT4gTGlzdC5yZXYgKExpc3QucmV2X2FwcGVuZCBsMSBhY2MpXG4gICAgfCB4MSA6OiB0bDEsIHgyIDo6IHRsMiAtPiBhdXggKHgyIDo6IHgxIDo6IGFjYykgdGwxIHRsMlxuICBpblxuICBhdXggW10gbDEgbDJcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IHRha2Vfd2hpbGUgcCBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBwIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW11cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIHAgW10gbFxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgeCA6OiBkaXJlY3QgKGkgLSAxKSBwIGwnXG4gICAgICBlbHNlXG4gICAgICAgIFtdXG4gIGFuZCBzYWZlIHAgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBzYWZlIHAgKHggOjogYWNjKSBsJ1xuICAgICAgZWxzZVxuICAgICAgICBMaXN0LnJldiBhY2NcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBwIGxcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyB0YWtlX3doaWxlIHAgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsJyAtPlxuICAgIGlmIHAgeCB0aGVuXG4gICAgICB4IDo6IHRha2Vfd2hpbGUgcCBsJ1xuICAgIGVsc2VcbiAgICAgIFtdXG5cbltAQEBlbmRpZl1cblxubGV0IHJlYyBkcm9wX3doaWxlIHAgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsJyAtPlxuICAgIGlmIHAgeCB0aGVuXG4gICAgICBkcm9wX3doaWxlIHAgbCdcbiAgICBlbHNlXG4gICAgICBsXG5cbmxldCB0YWtlX2Ryb3Bfd2hpbGUgcCBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBwIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW10sIFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBwIFtdIGxcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgaWYgcCB4IHRoZW4gKFxuICAgICAgICBsZXQgbDEsIGwyID0gZGlyZWN0IChpIC0gMSkgcCB0YWlsIGluXG4gICAgICAgIHggOjogbDEsIGwyXG4gICAgICApIGVsc2VcbiAgICAgICAgW10sIGxcbiAgYW5kIHNhZmUgcCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2MsIFtdXG4gICAgfCB4IDo6IHRhaWwgLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIHNhZmUgcCAoeCA6OiBhY2MpIHRhaWxcbiAgICAgIGVsc2VcbiAgICAgICAgTGlzdC5yZXYgYWNjLCBsXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gcCBsXG5cbmxldCBsYXN0IG4gbCA9XG4gIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IG4gdGhlblxuICAgIGxcbiAgZWxzZVxuICAgIGRyb3AgKGxlbiAtIG4pIGxcblxubGV0IGhlYWRfb3B0ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBfIC0+IFNvbWUgeFxuXG5sZXQgdGFpbF9vcHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCBfIDo6IHRhaWwgLT4gU29tZSB0YWlsXG5cbmxldCByZWMgbGFzdF9vcHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCBbIHggXSAtPiBTb21lIHhcbiAgfCBfIDo6IHRhaWwgLT4gbGFzdF9vcHQgdGFpbFxuXG5sZXQgZmluZF9wcmVkID0gZmluZF9vcHRcblxubGV0IGZpbmRfcHJlZF9leG4gcCBsID1cbiAgbWF0Y2ggZmluZF9wcmVkIHAgbCB3aXRoXG4gIHwgTm9uZSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCBTb21lIHggLT4geFxuXG5sZXQgZmluZF9tYXBpIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgaSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBOb25lXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICAobWF0Y2ggZiBpIHggd2l0aFxuICAgICAgfCBTb21lIF8gYXMgcmVzIC0+IHJlc1xuICAgICAgfCBOb25lIC0+IGF1eCBmIChpICsgMSkgbCcpXG4gIGluXG4gIGF1eCBmIDAgbFxuXG5sZXQgZmluZF9tYXAgZiBsID0gZmluZF9tYXBpIChmdW4gXyAtPiBmKSBsXG5cbmxldCBmaW5kX2lkeCBwIGwgPVxuICBmaW5kX21hcGlcbiAgICAoZnVuIGkgeCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgU29tZSAoaSwgeClcbiAgICAgIGVsc2VcbiAgICAgICAgTm9uZSlcbiAgICBsXG5cbmxldCByZW1vdmUgfmVxIHggbCA9XG4gIGxldCByZWMgcmVtb3ZlJyBlcSB4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeSA6OiB0YWlsIHdoZW4gZXEgeCB5IC0+IHJlbW92ZScgZXEgeCBhY2MgdGFpbFxuICAgIHwgeSA6OiB0YWlsIC0+IHJlbW92ZScgZXEgeCAoeSA6OiBhY2MpIHRhaWxcbiAgaW5cbiAgcmVtb3ZlJyBlcSB4IFtdIGxcblxubGV0IGZpbHRlcl9tYXAgZiBsID1cbiAgbGV0IHJlYyByZWN1cnNlIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYycgPVxuICAgICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgICB8IE5vbmUgLT4gYWNjXG4gICAgICAgIHwgU29tZSB5IC0+IHkgOjogYWNjXG4gICAgICBpblxuICAgICAgcmVjdXJzZSBhY2MnIGwnXG4gIGluXG4gIHJlY3Vyc2UgW10gbFxuXG5sZXQga2VlcF9zb21lIGwgPSBmaWx0ZXJfbWFwIChmdW4geCAtPiB4KSBsXG5cbmxldCBrZWVwX29rIGwgPVxuICBmaWx0ZXJfbWFwXG4gICAgKGZ1bmN0aW9uXG4gICAgICB8IE9rIHggLT4gU29tZSB4XG4gICAgICB8IEVycm9yIF8gLT4gTm9uZSlcbiAgICBsXG5cbmxldCBhbGxfc29tZSBsID1cbiAgdHJ5XG4gICAgU29tZVxuICAgICAgKG1hcFxuICAgICAgICAgKGZ1bmN0aW9uXG4gICAgICAgICAgIHwgU29tZSB4IC0+IHhcbiAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIEV4aXQpXG4gICAgICAgICBsKVxuICB3aXRoIEV4aXQgLT4gTm9uZVxuXG5sZXQgYWxsX29rIGwgPVxuICBsZXQgZXJyID0gcmVmIE5vbmUgaW5cbiAgdHJ5XG4gICAgT2tcbiAgICAgIChtYXBcbiAgICAgICAgIChmdW5jdGlvblxuICAgICAgICAgICB8IE9rIHggLT4geFxuICAgICAgICAgICB8IEVycm9yIGUgLT5cbiAgICAgICAgICAgICBlcnIgOj0gU29tZSBlO1xuICAgICAgICAgICAgIHJhaXNlIEV4aXQpXG4gICAgICAgICBsKVxuICB3aXRoIEV4aXQgLT5cbiAgICAobWF0Y2ggIWVyciB3aXRoXG4gICAgfCBOb25lIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgU29tZSBlIC0+IEVycm9yIGUpXG5cbmxldCBncm91cF9ieSAodHlwZSBrKSA/KGhhc2ggPSBIYXNodGJsLmhhc2gpID8oZXEgPSBTdGRsaWIuKCA9ICkpIGwgPVxuICBsZXQgbW9kdWxlIFRibCA9IEhhc2h0YmwuTWFrZSAoc3RydWN0XG4gICAgdHlwZSB0ID0ga1xuXG4gICAgbGV0IGVxdWFsID0gZXFcbiAgICBsZXQgaGFzaCA9IGhhc2hcbiAgZW5kKSBpblxuICAoKiBjb21wdXRlIGdyb3VwIHRhYmxlICopXG4gIGxldCB0YmwgPSBUYmwuY3JlYXRlIDMyIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGwgPSB0cnkgVGJsLmZpbmQgdGJsIHggd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIFRibC5yZXBsYWNlIHRibCB4ICh4IDo6IGwpKVxuICAgIGw7XG4gIFRibC5mb2xkIChmdW4gXyB4IGFjYyAtPiB4IDo6IGFjYykgdGJsIFtdXG5cbmxldCBqb2luIH5qb2luX3JvdyBzMSBzMiA6IF8gdCA9XG4gIGZsYXRfbWFwIChmdW4gYSAtPiBmaWx0ZXJfbWFwIChqb2luX3JvdyBhKSBzMikgczFcblxubGV0IGpvaW5fYnkgKHR5cGUgYSkgPyhlcSA9IFN0ZGxpYi4oID0gKSkgPyhoYXNoID0gSGFzaHRibC5oYXNoKSBmMSBmMiB+bWVyZ2UgYzFcbiAgICBjMiA9XG4gIGxldCBtb2R1bGUgVGJsID0gSGFzaHRibC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBhXG5cbiAgICBsZXQgZXF1YWwgPSBlcVxuICAgIGxldCBoYXNoID0gaGFzaFxuICBlbmQpIGluXG4gIGxldCB0YmwgPSBUYmwuY3JlYXRlIDMyIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGtleSA9IGYxIHggaW5cbiAgICAgIFRibC5hZGQgdGJsIGtleSB4KVxuICAgIGMxO1xuICBsZXQgcmVzID0gcmVmIFtdIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geSAtPlxuICAgICAgbGV0IGtleSA9IGYyIHkgaW5cbiAgICAgIGxldCB4cyA9IFRibC5maW5kX2FsbCB0Ymwga2V5IGluXG4gICAgICBMaXN0Lml0ZXJcbiAgICAgICAgKGZ1biB4IC0+XG4gICAgICAgICAgbWF0Y2ggbWVyZ2Uga2V5IHggeSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHogLT4gcmVzIDo9IHogOjogIXJlcylcbiAgICAgICAgeHMpXG4gICAgYzI7XG4gICFyZXNcblxudHlwZSAoJ2EsICdiKSBqb2luX2FsbF9jZWxsID0ge1xuICBtdXRhYmxlIGphX2xlZnQ6ICdhIGxpc3Q7XG4gIG11dGFibGUgamFfcmlnaHQ6ICdiIGxpc3Q7XG59XG5cbmxldCBqb2luX2FsbF9ieSAodHlwZSBhKSA/KGVxID0gU3RkbGliLiggPSApKSA/KGhhc2ggPSBIYXNodGJsLmhhc2gpIGYxIGYyXG4gICAgfm1lcmdlIGMxIGMyID1cbiAgbGV0IG1vZHVsZSBUYmwgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGFcblxuICAgIGxldCBlcXVhbCA9IGVxXG4gICAgbGV0IGhhc2ggPSBoYXNoXG4gIGVuZCkgaW5cbiAgbGV0IHRibCA9IFRibC5jcmVhdGUgMzIgaW5cbiAgKCogYnVpbGQgdGhlIG1hcCBba2V5IC0+IGNlbGxdICopXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGtleSA9IGYxIHggaW5cbiAgICAgIHRyeVxuICAgICAgICBsZXQgYyA9IFRibC5maW5kIHRibCBrZXkgaW5cbiAgICAgICAgYy5qYV9sZWZ0IDwtIHggOjogYy5qYV9sZWZ0XG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiBUYmwuYWRkIHRibCBrZXkgeyBqYV9sZWZ0ID0gWyB4IF07IGphX3JpZ2h0ID0gW10gfSlcbiAgICBjMTtcbiAgTGlzdC5pdGVyXG4gICAgKGZ1biB5IC0+XG4gICAgICBsZXQga2V5ID0gZjIgeSBpblxuICAgICAgdHJ5XG4gICAgICAgIGxldCBjID0gVGJsLmZpbmQgdGJsIGtleSBpblxuICAgICAgICBjLmphX3JpZ2h0IDwtIHkgOjogYy5qYV9yaWdodFxuICAgICAgd2l0aCBOb3RfZm91bmQgLT4gVGJsLmFkZCB0Ymwga2V5IHsgamFfbGVmdCA9IFtdOyBqYV9yaWdodCA9IFsgeSBdIH0pXG4gICAgYzI7XG4gIFRibC5mb2xkXG4gICAgKGZ1biBrZXkgY2VsbCByZXMgLT5cbiAgICAgIG1hdGNoIG1lcmdlIGtleSBjZWxsLmphX2xlZnQgY2VsbC5qYV9yaWdodCB3aXRoXG4gICAgICB8IE5vbmUgLT4gcmVzXG4gICAgICB8IFNvbWUgeiAtPiB6IDo6IHJlcylcbiAgICB0YmwgW11cblxubGV0IGdyb3VwX2pvaW5fYnkgKHR5cGUgYSkgPyhlcSA9IFN0ZGxpYi4oID0gKSkgPyhoYXNoID0gSGFzaHRibC5oYXNoKSBmIGMxIGMyID1cbiAgbGV0IG1vZHVsZSBUYmwgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGFcblxuICAgIGxldCBlcXVhbCA9IGVxXG4gICAgbGV0IGhhc2ggPSBoYXNoXG4gIGVuZCkgaW5cbiAgbGV0IHRibCA9IFRibC5jcmVhdGUgMzIgaW5cbiAgTGlzdC5pdGVyIChmdW4geCAtPiBUYmwucmVwbGFjZSB0YmwgeCBbXSkgYzE7XG4gIExpc3QuaXRlclxuICAgIChmdW4geSAtPlxuICAgICAgKCogcHJvamVjdCBbeV0gaW50byBzb21lIGVsZW1lbnQgb2YgW2MxXSAqKVxuICAgICAgbGV0IGtleSA9IGYgeSBpblxuICAgICAgdHJ5XG4gICAgICAgIGxldCBsID0gVGJsLmZpbmQgdGJsIGtleSBpblxuICAgICAgICBUYmwucmVwbGFjZSB0Ymwga2V5ICh5IDo6IGwpXG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiAoKSlcbiAgICBjMjtcbiAgVGJsLmZvbGQgKGZ1biBrIHYgbCAtPiAoaywgdikgOjogbCkgdGJsIFtdXG5cbmxldCBtZW0gPyhlcSA9IFN0ZGxpYi4oID0gKSkgeCBsID1cbiAgbGV0IHJlYyBzZWFyY2ggZXEgeCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGZhbHNlXG4gICAgfCB5IDo6IGwnIC0+IGVxIHggeSB8fCBzZWFyY2ggZXEgeCBsJ1xuICBpblxuICBzZWFyY2ggZXEgeCBsXG5cbmxldCBhZGRfbm9kdXAgfmVxIHggbCA9XG4gIGlmIG1lbSB+ZXEgeCBsIHRoZW5cbiAgICBsXG4gIGVsc2VcbiAgICB4IDo6IGxcblxubGV0IHJlbW92ZV9vbmUgfmVxIHggbCA9XG4gIGxldCByZWMgcmVtb3ZlX29uZSB+ZXEgeCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IHkgOjogdGwgd2hlbiBlcSB4IHkgLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyB0bFxuICAgIHwgeSA6OiB0bCAtPiByZW1vdmVfb25lIH5lcSB4ICh5IDo6IGFjYykgdGxcbiAgaW5cbiAgaWYgbWVtIH5lcSB4IGwgdGhlblxuICAgIHJlbW92ZV9vbmUgfmVxIHggW10gbFxuICBlbHNlXG4gICAgbFxuXG5sZXQgc3Vic2V0IH5lcSBsMSBsMiA9IExpc3QuZm9yX2FsbCAoZnVuIHQgLT4gbWVtIH5lcSB0IGwyKSBsMVxuXG5sZXQgdW5pcSB+ZXEgbCA9XG4gIGxldCByZWMgdW5pcSBlcSBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogeHMgd2hlbiBMaXN0LmV4aXN0cyAoZXEgeCkgeHMgLT4gdW5pcSBlcSBhY2MgeHNcbiAgICB8IHggOjogeHMgLT4gdW5pcSBlcSAoeCA6OiBhY2MpIHhzXG4gIGluXG4gIHVuaXEgZXEgW10gbFxuXG5sZXQgdW5pb24gfmVxIGwxIGwyID1cbiAgbGV0IHJlYyB1bmlvbiBlcSBhY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDJcbiAgICB8IHggOjogeHMgd2hlbiBtZW0gfmVxIHggbDIgLT4gdW5pb24gZXEgYWNjIHhzIGwyXG4gICAgfCB4IDo6IHhzIC0+IHVuaW9uIGVxICh4IDo6IGFjYykgeHMgbDJcbiAgaW5cbiAgdW5pb24gZXEgW10gbDEgbDJcblxubGV0IGludGVyIH5lcSBsMSBsMiA9XG4gIGxldCByZWMgaW50ZXIgZXEgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogeHMgd2hlbiBtZW0gfmVxIHggbDIgLT4gaW50ZXIgZXEgKHggOjogYWNjKSB4cyBsMlxuICAgIHwgXyA6OiB4cyAtPiBpbnRlciBlcSBhY2MgeHMgbDJcbiAgaW5cbiAgaW50ZXIgZXEgW10gbDEgbDJcblxubGV0IG1hcGkgZiBsID1cbiAgbGV0IHIgPSByZWYgMCBpblxuICBtYXBcbiAgICAoZnVuIHggLT5cbiAgICAgIGxldCB5ID0gZiAhciB4IGluXG4gICAgICBpbmNyIHI7XG4gICAgICB5KVxuICAgIGxcblxubGV0IGl0ZXJpIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgaSBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+ICgpXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBmIGkgeDtcbiAgICAgIGF1eCBmIChpICsgMSkgbCdcbiAgaW5cbiAgYXV4IGYgMCBsXG5cbmxldCBpdGVyaTIgZiBsMSBsMiA9XG4gIGxldCByZWMgYXV4IGYgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiAoKVxuICAgIHwgW10sIF8gfCBfLCBbXSAtPiBpbnZhbGlkX2FyZyBcIml0ZXJpMlwiXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgZiBpIHgxIHgyO1xuICAgICAgYXV4IGYgKGkgKyAxKSBsMScgbDInXG4gIGluXG4gIGF1eCBmIDAgbDEgbDJcblxubGV0IGZvbGRpIGYgYWNjIGwgPVxuICBsZXQgcmVjIGZvbGRpIGYgYWNjIGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSBmIGFjYyBpIHggaW5cbiAgICAgIGZvbGRpIGYgYWNjIChpICsgMSkgbCdcbiAgaW5cbiAgZm9sZGkgZiBhY2MgMCBsXG5cbmxldCBmb2xkaTIgZiBhY2MgbDEgbDIgPVxuICBsZXQgcmVjIGZvbGRpIGYgYWNjIGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgW10gLT4gYWNjXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IGludmFsaWRfYXJnIFwiZm9sZGkyXCJcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYWNjID0gZiBhY2MgaSB4MSB4MiBpblxuICAgICAgZm9sZGkgZiBhY2MgKGkgKyAxKSBsMScgbDInXG4gIGluXG4gIGZvbGRpIGYgYWNjIDAgbDEgbDJcblxubGV0IHJlYyBnZXRfYXRfaWR4X3JlYyBpIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCB4IDo6IF8gd2hlbiBpID0gMCAtPiB4XG4gIHwgXyA6OiBsJyAtPiBnZXRfYXRfaWR4X3JlYyAoaSAtIDEpIGwnXG5cbmxldCBnZXRfYXRfaWR4X2V4biBpIGwgPVxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwgKyBpXG4gICAgZWxzZVxuICAgICAgaVxuICBpblxuICBnZXRfYXRfaWR4X3JlYyBpIGxcblxubGV0IGdldF9hdF9pZHggaSBsID0gdHJ5IFNvbWUgKGdldF9hdF9pZHhfZXhuIGkgbCkgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG5sZXQgc2V0X2F0X2lkeCBpIHggbDAgPVxuICBsZXQgcmVjIGF1eCBsIGFjYyBpID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGwwXG4gICAgfCBfIDo6IGwnIHdoZW4gaSA9IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyAoeCA6OiBsJylcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKVxuICBpblxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwwICsgaVxuICAgIGVsc2VcbiAgICAgIGlcbiAgaW5cbiAgYXV4IGwwIFtdIGlcblxubGV0IGluc2VydF9hdF9pZHggaSB4IGwgPVxuICBsZXQgcmVjIGF1eCBsIGFjYyBpIHggPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyBbIHggXVxuICAgIHwgeSA6OiBsJyB3aGVuIGkgPSAwIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgKHggOjogeSA6OiBsJylcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKSB4XG4gIGluXG4gIGxldCBpID1cbiAgICBpZiBpIDwgMCB0aGVuXG4gICAgICBsZW5ndGggbCArIGlcbiAgICBlbHNlXG4gICAgICBpXG4gIGluXG4gIGF1eCBsIFtdIGkgeFxuXG5sZXQgcmVtb3ZlX2F0X2lkeCBpIGwwID1cbiAgbGV0IHJlYyBhdXggbCBhY2MgaSA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBsMFxuICAgIHwgXyA6OiBsJyB3aGVuIGkgPSAwIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbCdcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKVxuICBpblxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwwICsgaVxuICAgIGVsc2VcbiAgICAgIGlcbiAgaW5cbiAgYXV4IGwwIFtdIGlcblxubGV0IHJhbmdlX2J5IH5zdGVwIGkgaiA9XG4gIGxldCByZWMgcmFuZ2UgaSBqIGFjYyA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgaSA6OiBhY2NcbiAgICBlbHNlXG4gICAgICByYW5nZSBpIChqIC0gc3RlcCkgKGogOjogYWNjKVxuICBpblxuICBpZiBzdGVwID0gMCB0aGVuXG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJDQ0xpc3QucmFuZ2VfYnlcIilcbiAgZWxzZSBpZlxuICAgIGlmIHN0ZXAgPiAwIHRoZW5cbiAgICAgIGkgPiBqXG4gICAgZWxzZVxuICAgICAgaSA8IGpcbiAgdGhlblxuICAgIFtdXG4gIGVsc2VcbiAgICByYW5nZSBpICgoKGogLSBpKSAvIHN0ZXAgKiBzdGVwKSArIGkpIFtdXG5cbmxldCByYW5nZSBpIGogPVxuICBsZXQgcmVjIHVwIGkgaiBhY2MgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIGkgOjogYWNjXG4gICAgZWxzZVxuICAgICAgdXAgaSAoaiAtIDEpIChqIDo6IGFjYylcbiAgYW5kIGRvd24gaSBqIGFjYyA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgaSA6OiBhY2NcbiAgICBlbHNlXG4gICAgICBkb3duIGkgKGogKyAxKSAoaiA6OiBhY2MpXG4gIGluXG4gIGlmIGkgPD0gaiB0aGVuXG4gICAgdXAgaSBqIFtdXG4gIGVsc2VcbiAgICBkb3duIGkgaiBbXVxuXG5sZXQgcmFuZ2UnIGkgaiA9XG4gIGlmIGkgPCBqIHRoZW5cbiAgICByYW5nZSBpIChqIC0gMSlcbiAgZWxzZSBpZiBpID0gaiB0aGVuXG4gICAgW11cbiAgZWxzZVxuICAgIHJhbmdlIGkgKGogKyAxKVxuXG5sZXQgKCAtLSApID0gcmFuZ2VcbmxldCAoIC0tXiApID0gcmFuZ2UnXG5cbmxldCByZXBsaWNhdGUgaSB4ID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGF1eCAoeCA6OiBhY2MpIChpIC0gMSlcbiAgaW5cbiAgYXV4IFtdIGlcblxubGV0IHJlcGVhdCBpIGwgPVxuICBsZXQgcmVjIGF1eCBhY2MgaSA9XG4gICAgaWYgaSA9IDAgdGhlblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgZWxzZVxuICAgICAgYXV4IChMaXN0LnJldl9hcHBlbmQgbCBhY2MpIChpIC0gMSlcbiAgaW5cbiAgYXV4IFtdIGlcblxubW9kdWxlIEFzc29jID0gc3RydWN0XG4gIHR5cGUgKCdhLCAnYikgdCA9ICgnYSAqICdiKSBsaXN0XG5cbiAgbGV0IHJlYyBzZWFyY2hfZXhuIGVxIGwgeCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8ICh5LCB6KSA6OiBsJyAtPlxuICAgICAgaWYgZXEgeCB5IHRoZW5cbiAgICAgICAgelxuICAgICAgZWxzZVxuICAgICAgICBzZWFyY2hfZXhuIGVxIGwnIHhcblxuICBsZXQgZ2V0X2V4biB+ZXEgeCBsID0gc2VhcmNoX2V4biBlcSBsIHhcbiAgbGV0IGdldCB+ZXEgeCBsID0gdHJ5IFNvbWUgKHNlYXJjaF9leG4gZXEgbCB4KSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5cbiAgKCogc2VhcmNoIGZvciBhIGJpbmRpbmcgZm9yIFt4XSBpbiBbbF0sIGFuZCBjYWxscyBbZiB4IChTb21lIHYpIHJlc3RdXG4gICAgIG9yIFtmIHggTm9uZSByZXN0XSBkZXBlbmRpbmcgb24gd2hldGhlciBpdCBmaW5kcyB0aGUgYmluZGluZy5cbiAgICAgW3Jlc3RdIGlzIHRoZSBsaXN0IG9mIHRoZSBvdGhlciBiaW5kaW5ncyAqKVxuICBsZXQgcmVjIHNlYXJjaF9zZXQgZXEgYWNjIGwgeCB+ZiA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBmIHggTm9uZSBhY2NcbiAgICB8ICh4JywgeScpIDo6IGwnIC0+XG4gICAgICBpZiBlcSB4IHgnIHRoZW5cbiAgICAgICAgZiB4IChTb21lIHknKSAoTGlzdC5yZXZfYXBwZW5kIGFjYyBsJylcbiAgICAgIGVsc2VcbiAgICAgICAgc2VhcmNoX3NldCBlcSAoKHgnLCB5JykgOjogYWNjKSBsJyB4IH5mXG5cbiAgbGV0IHNldCB+ZXEgeCB5IGwgPSBzZWFyY2hfc2V0IGVxIFtdIGwgeCB+ZjooZnVuIHggXyBsIC0+ICh4LCB5KSA6OiBsKVxuXG4gIGxldCBtZW0gPyhlcSA9IFN0ZGxpYi4oID0gKSkgeCBsID1cbiAgICB0cnlcbiAgICAgIGlnbm9yZSAoc2VhcmNoX2V4biBlcSBsIHgpO1xuICAgICAgdHJ1ZVxuICAgIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbiAgbGV0IHVwZGF0ZSB+ZXEgZiB4IGwgPVxuICAgIHNlYXJjaF9zZXQgZXEgW10gbCB4IH5mOihmdW4geCBvcHRfeSByZXN0IC0+XG4gICAgICAgIG1hdGNoIGYgb3B0X3kgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gcmVzdCAoKiBkcm9wICopXG4gICAgICAgIHwgU29tZSB5JyAtPiAoeCwgeScpIDo6IHJlc3QpXG5cbiAgbGV0IHJlbW92ZSB+ZXEgeCBsID1cbiAgICBzZWFyY2hfc2V0IGVxIFtdIGwgeCB+ZjooZnVuIF8gb3B0X3kgcmVzdCAtPlxuICAgICAgICBtYXRjaCBvcHRfeSB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBsICgqIGtlZXAgYXMgaXMgKilcbiAgICAgICAgfCBTb21lIF8gLT4gcmVzdClcblxuICBsZXQga2V5cyBsID0gbWFwIChmdW4gKGssIF8pIC0+IGspIGxcbiAgbGV0IHZhbHVlcyBsID0gbWFwIChmdW4gKF8sIHYpIC0+IHYpIGxcbiAgbGV0IG1hcF92YWx1ZXMgZiBsID0gbWFwIChmdW4gKGssIHYpIC0+IGssIGYgdikgbFxuZW5kXG5cbmxldCBhc3NvYyA9IEFzc29jLmdldF9leG5cbmxldCBhc3NvY19vcHQgPSBBc3NvYy5nZXRcbmxldCBtZW1fYXNzb2MgPSBBc3NvYy5tZW1cbmxldCByZW1vdmVfYXNzb2MgPSBBc3NvYy5yZW1vdmVcblxuKCoqIHsyIFJlZmVyZW5jZXMgb24gTGlzdHN9ICopXG5cbm1vZHVsZSBSZWYgPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID0gJ2EgbGlzdCByZWZcblxuICBsZXQgcHVzaCBsIHggPSBsIDo9IHggOjogIWxcblxuICBsZXQgcG9wIGwgPVxuICAgIG1hdGNoICFsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgbCA6PSB0YWlsO1xuICAgICAgU29tZSB4XG5cbiAgbGV0IHBvcF9leG4gbCA9XG4gICAgbWF0Y2ggIWwgd2l0aFxuICAgIHwgW10gLT4gZmFpbHdpdGggXCJDQ0xpc3QuUmVmLnBvcF9leG5cIlxuICAgIHwgeCA6OiB0YWlsIC0+XG4gICAgICBsIDo9IHRhaWw7XG4gICAgICB4XG5cbiAgbGV0IGNyZWF0ZSAoKSA9IHJlZiBbXVxuICBsZXQgY2xlYXIgbCA9IGwgOj0gW11cbiAgbGV0IGxpZnQgZiBsID0gZiAhbFxuICBsZXQgcHVzaF9saXN0IHIgbCA9IHIgOj0gTGlzdC5yZXZfYXBwZW5kIGwgIXJcbmVuZFxuXG4oKiogezIgTW9uYWRpYyBPcGVyYXRpb25zfSAqKVxubW9kdWxlIHR5cGUgTU9OQUQgPSBzaWdcbiAgdHlwZSAnYSB0XG5cbiAgdmFsIHJldHVybiA6ICdhIC0+ICdhIHRcbiAgdmFsICggPj49ICkgOiAnYSB0IC0+ICgnYSAtPiAnYiB0KSAtPiAnYiB0XG5lbmRcblxubW9kdWxlIFRyYXZlcnNlIChNIDogTU9OQUQpID0gc3RydWN0XG4gIG9wZW4gTVxuXG4gIGxldCBtYXBfbSBmIGwgPVxuICAgIGxldCByZWMgYXV4IGYgYWNjIGwgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IHJldHVybiAoTGlzdC5yZXYgYWNjKVxuICAgICAgfCB4IDo6IHRhaWwgLT4gZiB4ID4+PSBmdW4geCcgLT4gYXV4IGYgKHgnIDo6IGFjYykgdGFpbFxuICAgIGluXG4gICAgYXV4IGYgW10gbFxuXG4gIGxldCByZWMgbWFwX21fcGFyIGYgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBNLnJldHVybiBbXVxuICAgIHwgeCA6OiB0bCAtPlxuICAgICAgbGV0IHgnID0gZiB4IGluXG4gICAgICBsZXQgdGwnID0gbWFwX21fcGFyIGYgdGwgaW5cbiAgICAgIHgnID4+PSBmdW4geCcgLT5cbiAgICAgIHRsJyA+Pj0gZnVuIHRsJyAtPiBNLnJldHVybiAoeCcgOjogdGwnKVxuXG4gIGxldCBzZXF1ZW5jZV9tIGwgPSBtYXBfbSAoZnVuIHggLT4geCkgbFxuXG4gIGxldCByZWMgZm9sZF9tIGYgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gcmV0dXJuIGFjY1xuICAgIHwgeCA6OiBsJyAtPiBmIGFjYyB4ID4+PSBmdW4gYWNjJyAtPiBmb2xkX20gZiBhY2MnIGwnXG5lbmRcblxuKCoqIHsyIENvbnZlcnNpb25zfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG50eXBlICdhIHJhbmRvbV9nZW4gPSBSYW5kb20uU3RhdGUudCAtPiAnYVxuXG5sZXQgcmFuZG9tX2xlbiBsZW4gZyBzdCA9IGluaXQgbGVuIChmdW4gXyAtPiBnIHN0KVxuXG5sZXQgcmFuZG9tIGcgc3QgPVxuICBsZXQgbGVuID0gUmFuZG9tLlN0YXRlLmludCBzdCAxXzAwMCBpblxuICByYW5kb21fbGVuIGxlbiBnIHN0XG5cbmxldCByYW5kb21fbm9uX2VtcHR5IGcgc3QgPVxuICBsZXQgbGVuID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBsZW4gZyBzdFxuXG5sZXQgcmFuZG9tX2Nob29zZSBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgXyA6OiBfIC0+XG4gICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgICBmdW4gc3QgLT5cbiAgICAgIGxldCBpID0gUmFuZG9tLlN0YXRlLmludCBzdCBsZW4gaW5cbiAgICAgIExpc3QubnRoIGwgaVxuXG5sZXQgcmFuZG9tX3NlcXVlbmNlIGwgc3QgPSBtYXAgKGZ1biBnIC0+IGcgc3QpIGxcblxubGV0IHRvX3N0cmluZyA/KHN0YXJ0ID0gXCJcIikgPyhzdG9wID0gXCJcIikgPyhzZXAgPSBcIiwgXCIpIGl0ZW1fdG9fc3RyaW5nIGwgPVxuICBsZXQgbCA9IExpc3QubWFwIGl0ZW1fdG9fc3RyaW5nIGwgaW5cbiAgc3RhcnQgXiBTdHJpbmcuY29uY2F0IHNlcCBsIF4gc3RvcFxuXG5sZXQgdG9faXRlciBsIGsgPSBMaXN0Lml0ZXIgayBsXG5cbmxldCByZWMgdG9fc2VxIGwgKCkgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBTZXEuTmlsXG4gIHwgeCA6OiB0bCAtPiBTZXEuQ29ucyAoeCwgdG9fc2VxIHRsKVxuXG5sZXQgb2ZfaXRlciBpID1cbiAgbGV0IGwgPSByZWYgW10gaW5cbiAgaSAoZnVuIHggLT4gbCA6PSB4IDo6ICFsKTtcbiAgTGlzdC5yZXYgIWxcblxubGV0IG9mX3NlcV9yZXYgbCA9XG4gIGxldCByZWMgbG9vcCBhY2MgcyA9XG4gICAgbWF0Y2ggcyAoKSB3aXRoXG4gICAgfCBTZXEuTmlsIC0+IGFjY1xuICAgIHwgU2VxLkNvbnMgKHgsIHRsKSAtPiBsb29wICh4IDo6IGFjYykgdGxcbiAgaW5cbiAgbG9vcCBbXSBsXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCBvZl9zZXEgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgc2VxID1cbiAgICBpZiBpIDw9IDAgdGhlblxuICAgICAgTGlzdC5yZXYgKG9mX3NlcV9yZXYgc2VxKVxuICAgIGVsc2UgKFxuICAgICAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgICAgIHwgU2VxLk5pbCAtPiBbXVxuICAgICAgfCBTZXEuQ29ucyAoeCwgdGwpIC0+IHggOjogZGlyZWN0IChpIC0gMSkgdGxcbiAgICApXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbFxuXG5bQEBAZW5kaWZdXG5cbmxldCB0b19nZW4gbCA9XG4gIGxldCBsID0gcmVmIGwgaW5cbiAgZnVuICgpIC0+XG4gICAgbWF0Y2ggIWwgd2l0aFxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbCA6PSBsJztcbiAgICAgIFNvbWUgeFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgb2ZfZ2VuIGcgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGcgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIHNhZmUgW10gZ1xuICAgIGVsc2UgKFxuICAgICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgICB8IE5vbmUgLT4gW11cbiAgICAgIHwgU29tZSB4IC0+IHggOjogZGlyZWN0IChpIC0gMSkgZ1xuICAgIClcbiAgYW5kIHNhZmUgYWNjIGcgPVxuICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgIHwgTm9uZSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFNvbWUgeCAtPiBzYWZlICh4IDo6IGFjYykgZ1xuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGdcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBvZl9nZW4gZyA9XG4gIG1hdGNoIGcgKCkgd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4geCA6OiBvZl9nZW4gZ1xuXG5bQEBAZW5kaWZdXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXRbQGlubGluZV0gKCA+fD0gKSBsIGYgPSBtYXAgZiBsXG4gIGxldFtAaW5saW5lXSAoID4+PSApIGwgZiA9IGZsYXRfbWFwIGYgbFxuICBsZXQgKCBAICkgPSAoIEAgKVxuICBsZXQgKCA8Kj4gKSA9ICggPCo+IClcbiAgbGV0ICggPCQ+ICkgPSBtYXBcbiAgbGV0ICggLS0gKSA9ICggLS0gKVxuICBsZXQgKCAtLV4gKSA9ICggLS1eIClcbiAgbGV0ICggbGV0KyApID0gKCA+fD0gKVxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG4gIGxldFtAaW5saW5lXSAoIGFuZCsgKSBsMSBsMiA9IHByb2R1Y3QgKGZ1biB4IHkgLT4geCwgeSkgbDEgbDJcbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbiAgbGV0ICggYW5kJiApID0gY29tYmluZV9zaG9ydGVzdFxuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxuKCoqIHsyIElPfSAqKVxuXG5sZXQgcHAgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICA/KHBwX3NlcCA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCIpIHBwX2l0ZW0gZm10IGwgPVxuICBsZXQgcmVjIHByaW50IGZtdCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IHggOjogKF8gOjogXyBhcyBsKSAtPlxuICAgICAgcHBfaXRlbSBmbXQgeDtcbiAgICAgIHBwX3NlcCBmbXQgKCk7XG4gICAgICBwcmludCBmbXQgbFxuICAgIHwgWyB4IF0gLT4gcHBfaXRlbSBmbXQgeFxuICAgIHwgW10gLT4gKClcbiAgaW5cbiAgcHBfc3RhcnQgZm10ICgpO1xuICBwcmludCBmbXQgbDtcbiAgcHBfc3RvcCBmbXQgKClcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBPcHRpb25zfSAqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb25cblxubGV0W0BpbmxpbmVdIG1hcCBmID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHggLT4gU29tZSAoZiB4KVxuXG5sZXQgbWFwX29yIH5kZWZhdWx0IGYgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gZGVmYXVsdFxuICB8IFNvbWUgeCAtPiBmIHhcblxubGV0IG1hcF9sYXp5IGRlZmF1bHRfZm4gZiA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBkZWZhdWx0X2ZuICgpXG4gIHwgU29tZSB4IC0+IGYgeFxuXG5sZXQgaXNfc29tZSA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBmYWxzZVxuICB8IFNvbWUgXyAtPiB0cnVlXG5cbmxldCBpc19ub25lID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IHRydWVcbiAgfCBTb21lIF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgZiBvMSBvMiA9XG4gIG1hdGNoIG8xLCBvMiB3aXRoXG4gIHwgTm9uZSwgTm9uZSAtPiAwXG4gIHwgU29tZSBfLCBOb25lIC0+IDFcbiAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgfCBTb21lIHgsIFNvbWUgeSAtPiBmIHggeVxuXG5sZXQgZXF1YWwgZiBvMSBvMiA9XG4gIG1hdGNoIG8xLCBvMiB3aXRoXG4gIHwgTm9uZSwgTm9uZSAtPiB0cnVlXG4gIHwgU29tZSBfLCBOb25lIHwgTm9uZSwgU29tZSBfIC0+IGZhbHNlXG4gIHwgU29tZSB4LCBTb21lIHkgLT4gZiB4IHlcblxubGV0IHJldHVybiB4ID0gU29tZSB4XG5sZXQgc29tZSA9IHJldHVyblxubGV0IG5vbmUgPSBOb25lXG5cbmxldFtAaW5saW5lXSBmbGF0X21hcCBmIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldFtAaW5saW5lXSBmbGF0X21hcF9sIGYgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldFtAaW5saW5lXSBiaW5kIG8gZiA9IGZsYXRfbWFwIGYgb1xubGV0ICggPj49ICkgPSBiaW5kXG5sZXQgcHVyZSB4ID0gU29tZSB4XG5cbmxldCAoIDwqPiApIGYgeCA9XG4gIG1hdGNoIGYsIHggd2l0aFxuICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIGYsIFNvbWUgeCAtPiBTb21lIChmIHgpXG5cbmxldCBvcl8gfmVsc2VfIGEgPVxuICBtYXRjaCBhIHdpdGhcbiAgfCBOb25lIC0+IGVsc2VfXG4gIHwgU29tZSBfIC0+IGFcblxubGV0IG9yX2xhenkgfmVsc2VfIGEgPVxuICBtYXRjaCBhIHdpdGhcbiAgfCBOb25lIC0+IGVsc2VfICgpXG4gIHwgU29tZSBfIC0+IGFcblxubGV0ICggPCs+ICkgYSBiID0gb3JfIH5lbHNlXzpiIGFcbmxldCBjaG9pY2UgbCA9IExpc3QuZm9sZF9sZWZ0ICggPCs+ICkgTm9uZSBsXG5cbmxldCBtYXAyIGYgbzEgbzIgPVxuICBtYXRjaCBvMSwgbzIgd2l0aFxuICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHgsIFNvbWUgeSAtPiBTb21lIChmIHggeSlcblxubGV0IGZpbHRlciBwID0gZnVuY3Rpb25cbiAgfCBTb21lIHggYXMgbyB3aGVuIHAgeCAtPiBvXG4gIHwgXyAtPiBOb25lXG5cbmxldCBpZl8gcCB4ID1cbiAgaWYgcCB4IHRoZW5cbiAgICBTb21lIHhcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IGZhbHNlXG4gIHwgU29tZSB4IC0+IHAgeFxuXG5sZXQgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IHRydWVcbiAgfCBTb21lIHggLT4gcCB4XG5cbmxldCBpdGVyIGYgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldCBmb2xkIGYgYWNjIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IGFjY1xuICB8IFNvbWUgeCAtPiBmIGFjYyB4XG5cbmxldCBnZXRfb3IgfmRlZmF1bHQgeCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gZGVmYXVsdFxuICB8IFNvbWUgeSAtPiB5XG5cbmxldCB2YWx1ZSB4IH5kZWZhdWx0ID1cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgTm9uZSAtPiBkZWZhdWx0XG4gIHwgU29tZSB5IC0+IHlcblxubGV0IGdldF9leG4gPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB4XG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDT3B0aW9uLmdldF9leG5cIlxuXG5sZXQgZ2V0X2V4bl9vciBtc2cgPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB4XG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBtc2dcblxubGV0IGdldF9sYXp5IGRlZmF1bHRfZm4geCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gZGVmYXVsdF9mbiAoKVxuICB8IFNvbWUgeSAtPiB5XG5cbmxldCBzZXF1ZW5jZV9sIGwgPVxuICBsZXQgcmVjIGF1eCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBTb21lIChMaXN0LnJldiBhY2MpXG4gICAgfCBTb21lIHggOjogbCcgLT4gYXV4ICh4IDo6IGFjYykgbCdcbiAgICB8IE5vbmUgOjogXyAtPiByYWlzZSBFeGl0XG4gIGluXG4gIHRyeSBhdXggW10gbCB3aXRoIEV4aXQgLT4gTm9uZVxuXG5sZXQgd3JhcCA/KGhhbmRsZXIgPSBmdW4gXyAtPiB0cnVlKSBmIHggPVxuICB0cnkgU29tZSAoZiB4KVxuICB3aXRoIGUgLT5cbiAgICBpZiBoYW5kbGVyIGUgdGhlblxuICAgICAgTm9uZVxuICAgIGVsc2VcbiAgICAgIHJhaXNlIGVcblxubGV0IHdyYXAyID8oaGFuZGxlciA9IGZ1biBfIC0+IHRydWUpIGYgeCB5ID1cbiAgdHJ5IFNvbWUgKGYgeCB5KVxuICB3aXRoIGUgLT5cbiAgICBpZiBoYW5kbGVyIGUgdGhlblxuICAgICAgTm9uZVxuICAgIGVsc2VcbiAgICAgIHJhaXNlIGVcblxubGV0IHRvX2xpc3QgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4gWyB4IF1cblxubGV0IG9mX2xpc3QgPSBmdW5jdGlvblxuICB8IHggOjogXyAtPiBTb21lIHhcbiAgfCBbXSAtPiBOb25lXG5cbmxldCB0b19yZXN1bHQgZXJyID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IEVycm9yIGVyclxuICB8IFNvbWUgeCAtPiBPayB4XG5cbmxldCB0b19yZXN1bHRfbGF6eSBlcnJfZm4gPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gRXJyb3IgKGVycl9mbiAoKSlcbiAgfCBTb21lIHggLT4gT2sgeFxuXG5sZXQgb2ZfcmVzdWx0ID0gZnVuY3Rpb25cbiAgfCBFcnJvciBfIC0+IE5vbmVcbiAgfCBPayB4IC0+IFNvbWUgeFxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPnw9ICkgeCBmID0gbWFwIGYgeFxuICBsZXQgKCA+Pj0gKSA9ICggPj49IClcbiAgbGV0ICggPCo+ICkgPSAoIDwqPiApXG4gIGxldCAoIDwkPiApID0gbWFwXG4gIGxldCAoIDwrPiApID0gKCA8Kz4gKVxuICBsZXQgKCBsZXQrICkgPSAoID58PSApXG4gIGxldCAoIGxldCogKSA9ICggPj49IClcblxuICBsZXRbQGlubGluZV0gKCBhbmQrICkgbzEgbzIgPVxuICAgIG1hdGNoIG8xLCBvMiB3aXRoXG4gICAgfCBTb21lIHgsIFNvbWUgeSAtPiBTb21lICh4LCB5KVxuICAgIHwgXyAtPiBOb25lXG5cbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG5cbmxldCByYW5kb20gZyBzdCA9XG4gIGlmIFJhbmRvbS5TdGF0ZS5ib29sIHN0IHRoZW5cbiAgICBTb21lIChnIHN0KVxuICBlbHNlXG4gICAgTm9uZVxuXG5leGNlcHRpb24gRXhpdENob2ljZVxuXG5sZXQgY2hvaWNlX2l0ZXIgcyA9XG4gIGxldCByID0gcmVmIE5vbmUgaW5cbiAgKHRyeVxuICAgICBzIChmdW5jdGlvblxuICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgIHwgU29tZSBfIGFzIG8gLT5cbiAgICAgICAgIHIgOj0gbztcbiAgICAgICAgIHJhaXNlIEV4aXRDaG9pY2UpXG4gICB3aXRoIEV4aXRDaG9pY2UgLT4gKCkpO1xuICAhclxuXG5sZXQgcmVjIGNob2ljZV9zZXEgcyA9XG4gIG1hdGNoIHMgKCkgd2l0aFxuICB8IFNlcS5OaWwgLT4gTm9uZVxuICB8IFNlcS5Db25zIChTb21lIHgsIF8pIC0+IFNvbWUgeFxuICB8IFNlcS5Db25zIChOb25lLCB0bCkgLT4gY2hvaWNlX3NlcSB0bFxuXG5sZXQgdG9fZ2VuIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IGZ1biAoKSAtPiBOb25lXG4gIHwgU29tZSBfIC0+XG4gICAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuIChcbiAgICAgICAgZmlyc3QgOj0gZmFsc2U7XG4gICAgICAgIG9cbiAgICAgICkgZWxzZVxuICAgICAgICBOb25lXG5cbmxldCB0b19pdGVyIG8gayA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHggLT4gayB4XG5cbmxldCB0b19zZXEgbyAoKSA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gU2VxLk5pbFxuICB8IFNvbWUgeCAtPiBTZXEuQ29ucyAoeCwgU2VxLmVtcHR5KVxuXG5sZXQgcHAgcHB4IG91dCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIk5vbmVcIlxuICB8IFNvbWUgeCAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCJAW1NvbWUgJWFAXVwiIHBweCB4XG5cbmxldCBmbGF0dGVuID0gZnVuY3Rpb25cbiAgfCBTb21lIHggLT4geFxuICB8IE5vbmUgLT4gTm9uZVxuXG5sZXQgcmV0dXJuX2lmIGIgeCA9XG4gIGlmIGIgdGhlblxuICAgIFNvbWUgeFxuICBlbHNlXG4gICAgTm9uZVxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIFJhbmRvbSBHZW5lcmF0b3JzfSAqKVxuXG5pbmNsdWRlIFJhbmRvbVxuXG50eXBlIHN0YXRlID0gUmFuZG9tLlN0YXRlLnRcbnR5cGUgJ2EgdCA9IHN0YXRlIC0+ICdhXG50eXBlICdhIHJhbmRvbV9nZW4gPSAnYSB0XG5cbmxldCByZXR1cm4geCBfc3QgPSB4XG5sZXQgZmxhdF9tYXAgZiBnIHN0ID0gZiAoZyBzdCkgc3RcbmxldCAoID4+PSApIGcgZiBzdCA9IGZsYXRfbWFwIGYgZyBzdFxubGV0IG1hcCBmIGcgc3QgPSBmIChnIHN0KVxubGV0ICggPnw9ICkgZyBmIHN0ID0gbWFwIGYgZyBzdFxubGV0IGRlbGF5IGYgc3QgPSBmICgpIHN0XG5cbmxldCBfY2hvb3NlX2FycmF5IGEgc3QgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkNDUmFuZG9tLmNob29zZV9hcnJheVwiO1xuICBhLihSYW5kb20uU3RhdGUuaW50IHN0IChBcnJheS5sZW5ndGggYSkpXG5cbmxldCBjaG9vc2VfYXJyYXkgYSBzdCA9XG4gIHRyeSBTb21lIChfY2hvb3NlX2FycmF5IGEgc3Qgc3QpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcblxubGV0IGNob29zZSBsID1cbiAgbGV0IGEgPSBBcnJheS5vZl9saXN0IGwgaW5cbiAgY2hvb3NlX2FycmF5IGFcblxubGV0IGNob29zZV9leG4gbCA9XG4gIGxldCBhID0gQXJyYXkub2ZfbGlzdCBsIGluXG4gIGZ1biBzdCAtPiBfY2hvb3NlX2FycmF5IGEgc3Qgc3RcblxubGV0IGNob29zZV9yZXR1cm4gbCA9IF9jaG9vc2VfYXJyYXkgKEFycmF5Lm9mX2xpc3QgbClcblxuZXhjZXB0aW9uIFBpY2tfZnJvbV9lbXB0eVxuXG5sZXQgcGlja19saXN0IGwgPVxuICBsZXQgbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgaWYgbiA9IDAgdGhlbiByYWlzZSBQaWNrX2Zyb21fZW1wdHk7XG4gIGZ1biBzdCAtPiBMaXN0Lm50aCBsIChSYW5kb20uU3RhdGUuaW50IHN0IG4pXG5cbmxldCBwaWNrX2FycmF5IGEgPVxuICBsZXQgbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGlmIG4gPSAwIHRoZW4gcmFpc2UgUGlja19mcm9tX2VtcHR5O1xuICBmdW4gc3QgLT4gQXJyYXkuZ2V0IGEgKFJhbmRvbS5TdGF0ZS5pbnQgc3QgbilcblxubGV0IGludCBpIHN0ID0gUmFuZG9tLlN0YXRlLmludCBzdCBpXG5sZXQgc21hbGxfaW50ID0gaW50IDEwMFxubGV0IGludF9yYW5nZSBpIGogc3QgPSBpICsgUmFuZG9tLlN0YXRlLmludCBzdCAoaiAtIGkgKyAxKVxubGV0IGZsb2F0IGYgc3QgPSBSYW5kb20uU3RhdGUuZmxvYXQgc3QgZlxubGV0IHNtYWxsX2Zsb2F0ID0gZmxvYXQgMTAwLjBcbmxldCBmbG9hdF9yYW5nZSBpIGogc3QgPSBpICsuIFJhbmRvbS5TdGF0ZS5mbG9hdCBzdCAoaiAtLiBpKVxuXG4oKiBUT0RPOiBzYW1wbGUgZnVuY3Rpb25zICopXG5cbmxldCByZXBsaWNhdGUgbiBnIHN0ID1cbiAgbGV0IHJlYyBhdXggYWNjIG4gPVxuICAgIGlmIG4gPSAwIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGF1eCAoZyBzdCA6OiBhY2MpIChuIC0gMSlcbiAgaW5cbiAgYXV4IFtdIG5cblxuKCogU2FtcGxlIHdpdGhvdXQgcmVwbGFjZW1lbnQgdXNpbmcgcmVqZWN0aW9uIHNhbXBsaW5nLiAqKVxubGV0IHNhbXBsZV93aXRob3V0X2R1cGxpY2F0ZXMgKHR5cGUgZWx0KSB+Y21wIGsgKHJuZyA6IGVsdCB0KSBzdCA9XG4gIGxldCBtb2R1bGUgUyA9IFNldC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBlbHRcblxuICAgIGxldCBjb21wYXJlID0gY21wXG4gIGVuZCkgaW5cbiAgbGV0IHJlYyBhdXggcyBrID1cbiAgICBpZiBrIDw9IDAgdGhlblxuICAgICAgUy5lbGVtZW50cyBzXG4gICAgZWxzZSAoXG4gICAgICBsZXQgeCA9IHJuZyBzdCBpblxuICAgICAgaWYgUy5tZW0geCBzIHRoZW5cbiAgICAgICAgYXV4IHMga1xuICAgICAgZWxzZVxuICAgICAgICBhdXggKFMuYWRkIHggcykgKGsgLSAxKVxuICAgIClcbiAgaW5cbiAgaWYgayA8PSAwIHRoZW4gaW52YWxpZF9hcmcgXCJzYW1wbGVfd2l0aG91dF9kdXBsaWNhdGVzXCI7XG4gIGF1eCBTLmVtcHR5IGtcblxubGV0IGxpc3Rfc2VxIGwgc3QgPSBMaXN0Lm1hcCAoZnVuIGYgLT4gZiBzdCkgbFxuXG5sZXQgc3BsaXQgaSBzdCA9XG4gIGlmIGkgPCAyIHRoZW5cbiAgICBOb25lXG4gIGVsc2UgKFxuICAgIGxldCBqID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgKGkgLSAxKSBpblxuICAgIFNvbWUgKGosIGkgLSBqKVxuICApXG5cbmxldCBfZGlmZl9saXN0IH5sYXN0IGwgPVxuICBsZXQgcmVjIGRpZmZfbGlzdCBhY2MgPSBmdW5jdGlvblxuICAgIHwgWyBhIF0gLT4gU29tZSAoKGxhc3QgLSBhKSA6OiBhY2MpXG4gICAgfCBhIDo6IChiIDo6IF8gYXMgcikgLT4gZGlmZl9saXN0ICgoYiAtIGEpIDo6IGFjYykgclxuICAgIHwgW10gLT4gTm9uZVxuICBpblxuICBkaWZmX2xpc3QgW10gbFxuXG4oKiBQYXJ0aXRpb24gb2YgYW4gaW50IGludG8gW2xlbl0gaW50ZWdlcnMgdW5pZm9ybWx5LlxuICAgV2UgZmlyc3Qgc2FtcGxlIChsZW4tMSkgcG9pbnRzIGZyb20gdGhlIHNldCB7MSwuLmktMX0gd2l0aG91dCByZXBsYWNlbWVudC5cbiAgIFdlIHNvcnQgdGhlc2UgcG9pbnRzIGFuZCBhZGQgYmFjayAwIGFuZCBpLCB3ZSBoYXZlIHRodXNcbiAgIHhfMCA9IDAgPCB4XzEgPCB4XzIgPCDigKYgPCB4X3tsZW4tMX0gPCBpID0geF97bGVufS5cbiAgIElmIHdlIGRlZmluZSwgeV9rID0geF97aysxfSAtIHhfe2t9IGZvciBrIGluIDAg4oCmIChsZW4tMSksIHRoZW4gYnkgY29uc3RydWN0aW9uXG4gICDiiJFfayB5X2sgPSDiiJFfayAoeF97aysxfSAtIHhfayApID0geF97bGVufSAtIHhfMCA9IGkuICopXG5sZXQgc3BsaXRfbGlzdCBpIH5sZW4gc3QgPVxuICBpZiBsZW4gPD0gMSB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLnNwbGl0X2xpc3RcIjtcbiAgaWYgaSA+PSBsZW4gdGhlbiAoXG4gICAgbGV0IHhzID1cbiAgICAgIHNhbXBsZV93aXRob3V0X2R1cGxpY2F0ZXMgfmNtcDpjb21wYXJlIChsZW4gLSAxKSAoaW50X3JhbmdlIDEgKGkgLSAxKSkgc3RcbiAgICBpblxuICAgIF9kaWZmX2xpc3Qgfmxhc3Q6aSAoMCA6OiB4cylcbiAgKSBlbHNlXG4gICAgTm9uZVxuXG5sZXQgcmV0cnkgPyhtYXggPSAxMCkgZyBzdCA9XG4gIGxldCByZWMgYXV4IG4gPVxuICAgIG1hdGNoIGcgc3Qgd2l0aFxuICAgIHwgTm9uZSB3aGVuIG4gPSAwIC0+IE5vbmVcbiAgICB8IE5vbmUgLT4gYXV4IChuIC0gMSkgKCogcmV0cnkgKilcbiAgICB8IFNvbWUgXyBhcyByZXMgLT4gcmVzXG4gIGluXG4gIGF1eCBtYXhcblxubGV0IHJlYyB0cnlfc3VjY2Vzc2l2ZWx5IGwgc3QgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBOb25lXG4gIHwgZyA6OiBsJyAtPlxuICAgIChtYXRjaCBnIHN0IHdpdGhcbiAgICB8IE5vbmUgLT4gdHJ5X3N1Y2Nlc3NpdmVseSBsJyBzdFxuICAgIHwgU29tZSBfIGFzIHJlcyAtPiByZXMpXG5cbmxldCAoIDw/PiApIGEgYiA9IHRyeV9zdWNjZXNzaXZlbHkgWyBhOyBiIF1cblxuZXhjZXB0aW9uIEJhY2t0cmFja1xuXG5sZXQgX2Nob29zZV9hcnJheV9jYWxsIGEgZiBzdCA9XG4gIHRyeSBmIChfY2hvb3NlX2FycmF5IGEgc3QpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IHJhaXNlIEJhY2t0cmFja1xuXG5sZXQgZml4ID8oc3ViMSA9IFtdKSA/KHN1YjIgPSBbXSkgPyhzdWJuID0gW10pIH5iYXNlIGZ1ZWwgc3QgPVxuICBsZXQgc3ViMSA9IEFycmF5Lm9mX2xpc3Qgc3ViMVxuICBhbmQgc3ViMiA9IEFycmF5Lm9mX2xpc3Qgc3ViMlxuICBhbmQgc3VibiA9IEFycmF5Lm9mX2xpc3Qgc3VibiBpblxuICAoKiByZWN1cnNpdmUgZnVuY3Rpb24gd2l0aCBmdWVsICopXG4gIGxldCByZWMgbWFrZSBmdWVsIHN0ID1cbiAgICBpZiBmdWVsID0gMCB0aGVuXG4gICAgICByYWlzZSBCYWNrdHJhY2tcbiAgICBlbHNlIGlmIGZ1ZWwgPSAxIHRoZW5cbiAgICAgIGJhc2Ugc3RcbiAgICBlbHNlXG4gICAgICBfdHJ5X290aGVyd2lzZSAwXG4gICAgICAgIFt8XG4gICAgICAgICAgX2Nob29zZV9hcnJheV9jYWxsIHN1YjEgKGZ1biBmIC0+IGYgKG1ha2UgKGZ1ZWwgLSAxKSkgc3QpO1xuICAgICAgICAgIF9jaG9vc2VfYXJyYXlfY2FsbCBzdWIyIChmdW4gZiAtPlxuICAgICAgICAgICAgICBtYXRjaCBzcGxpdCBmdWVsIHN0IHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIEJhY2t0cmFja1xuICAgICAgICAgICAgICB8IFNvbWUgKGksIGopIC0+IGYgKG1ha2UgaSkgKG1ha2Ugaikgc3QpO1xuICAgICAgICAgIF9jaG9vc2VfYXJyYXlfY2FsbCBzdWJuIChmdW4gKGxlbiwgZikgLT5cbiAgICAgICAgICAgICAgbGV0IGxlbiA9IGxlbiBzdCBpblxuICAgICAgICAgICAgICBtYXRjaCBzcGxpdF9saXN0IGZ1ZWwgfmxlbiBzdCB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSBCYWNrdHJhY2tcbiAgICAgICAgICAgICAgfCBTb21lIGwnIC0+IGYgKGZ1biBzdCAtPiBMaXN0Lm1hcCAoZnVuIHggLT4gbWFrZSB4IHN0KSBsJykgc3QpO1xuICAgICAgICAgIGJhc2UgKCogYmFzZSBjYXNlIHRoZW4gKik7XG4gICAgICAgIHxdXG4gIGFuZCBfdHJ5X290aGVyd2lzZSBpIGEgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICByYWlzZSBCYWNrdHJhY2tcbiAgICBlbHNlIChcbiAgICAgIHRyeSBhLihpKSBzdCB3aXRoIEJhY2t0cmFjayAtPiBfdHJ5X290aGVyd2lzZSAoaSArIDEpIGFcbiAgICApXG4gIGluXG4gIG1ha2UgKGZ1ZWwgc3QpIHN0XG5cbmxldCBwdXJlIHggX3N0ID0geFxubGV0ICggPCo+ICkgZiBnIHN0ID0gZiBzdCAoZyBzdClcbmxldCAoIGxldCsgKSA9ICggPnw9IClcbmxldCAoIGxldCogKSA9ICggPj49IClcbmxldFtAaW5saW5lXSAoIGFuZCsgKSBhMSBhMiBzdCA9IGExIHN0LCBhMiBzdFxubGV0ICggYW5kKiApID0gKCBhbmQrIClcbmxldCBfX2RlZmF1bHRfc3RhdGUgPSBSYW5kb20uU3RhdGUubWFrZV9zZWxmX2luaXQgKClcbmxldCBydW4gPyhzdCA9IF9fZGVmYXVsdF9zdGF0ZSkgZyA9IGcgc3RcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBFcnJvciBNb25hZH0gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZXF1YWwgPSAnYSAtPiAnYSAtPiBib29sXG50eXBlICdhIG9yZCA9ICdhIC0+ICdhIC0+IGludFxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbigqKiB7MiBCYXNpY3N9ICopXG5cbnR5cGUgbm9ucmVjICgrJ2dvb2QsICsnYmFkKSByZXN1bHQgPSAoJ2dvb2QsICdiYWQpIHJlc3VsdCA9XG4gIHwgT2sgb2YgJ2dvb2RcbiAgfCBFcnJvciBvZiAnYmFkXG5cbnR5cGUgKCsnZ29vZCwgKydiYWQpIHQgPSAoJ2dvb2QsICdiYWQpIHJlc3VsdCA9IE9rIG9mICdnb29kIHwgRXJyb3Igb2YgJ2JhZFxuXG5sZXQgcmV0dXJuIHggPSBPayB4XG5sZXQgZmFpbCBzID0gRXJyb3Igc1xuXG5sZXQgZmFpbF9wcmludGYgZm9ybWF0ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgUHJpbnRmLmticHJpbnRmIChmdW4gYnVmIC0+IGZhaWwgKEJ1ZmZlci5jb250ZW50cyBidWYpKSBidWYgZm9ybWF0XG5cbmxldCBmYWlsX2ZwcmludGYgZm9ybWF0ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IG91dCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIG91dCAtPlxuICAgICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIG91dCAoKTtcbiAgICAgIGZhaWwgKEJ1ZmZlci5jb250ZW50cyBidWYpKVxuICAgIG91dCBmb3JtYXRcblxubGV0IGFkZF9jdHggbXNnIHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBFcnJvciBlIC0+IEVycm9yIChlIF4gXCJcXG5jb250ZXh0OlwiIF4gbXNnKVxuICB8IE9rIHggLT4gT2sgeFxuXG5sZXQgYWRkX2N0eGYgbXNnID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IG91dCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIG91dCBlIC0+XG4gICAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggb3V0ICgpO1xuICAgICAgYWRkX2N0eCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgZSlcbiAgICBvdXQgbXNnXG5cbmxldCBvZl9leG4gZSA9XG4gIGxldCBtc2cgPSBQcmludGV4Yy50b19zdHJpbmcgZSBpblxuICBFcnJvciBtc2dcblxubGV0IG9mX2V4bl90cmFjZSBlID1cbiAgbGV0IHJlcyA9XG4gICAgUHJpbnRmLnNwcmludGYgXCIlc1xcbiVzXCIgKFByaW50ZXhjLnRvX3N0cmluZyBlKSAoUHJpbnRleGMuZ2V0X2JhY2t0cmFjZSAoKSlcbiAgaW5cbiAgRXJyb3IgcmVzXG5cbmxldCBvcHRfbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE5vbmUgLT4gT2sgTm9uZVxuICB8IFNvbWUgeCAtPlxuICAgIChtYXRjaCBmIHggd2l0aFxuICAgIHwgT2sgeCAtPiBPayAoU29tZSB4KVxuICAgIHwgRXJyb3IgZSAtPiBFcnJvciBlKVxuXG5sZXQgbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gT2sgKGYgeClcbiAgfCBFcnJvciBzIC0+IEVycm9yIHNcblxubGV0IG1hcF9lcnIgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgXyBhcyByZXMgLT4gcmVzXG4gIHwgRXJyb3IgeSAtPiBFcnJvciAoZiB5KVxuXG5sZXQgbWFwMiBmIGcgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gT2sgKGYgeClcbiAgfCBFcnJvciBzIC0+IEVycm9yIChnIHMpXG5cbmxldCBpdGVyIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gZiB4XG4gIHwgRXJyb3IgXyAtPiAoKVxuXG5sZXQgaXRlcl9lcnIgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgXyAtPiAoKVxuICB8IEVycm9yIGVyciAtPiBmIGVyclxuXG5leGNlcHRpb24gR2V0X2Vycm9yXG5cbmxldCBnZXRfZXhuID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IHhcbiAgfCBFcnJvciBfIC0+IHJhaXNlIEdldF9lcnJvclxuXG5sZXQgZ2V0X29yIGUgfmRlZmF1bHQgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IHhcbiAgfCBFcnJvciBfIC0+IGRlZmF1bHRcblxubGV0IGdldF9sYXp5IGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIGUgLT4gZiBlXG5cbmxldCBnZXRfb3JfZmFpbHdpdGggPSBmdW5jdGlvblxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIG1zZyAtPiBmYWlsd2l0aCBtc2dcblxubGV0IG1hcF9vciBmIGUgfmRlZmF1bHQgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IGYgeFxuICB8IEVycm9yIF8gLT4gZGVmYXVsdFxuXG5sZXQgY2F0Y2ggZSB+b2sgfmVyciA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gb2sgeFxuICB8IEVycm9yIHkgLT4gZXJyIHlcblxubGV0IGZsYXRfbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gZiB4XG4gIHwgRXJyb3IgcyAtPiBFcnJvciBzXG5cbmxldCBlcXVhbCB+ZXJyIGVxIGEgYiA9XG4gIG1hdGNoIGEsIGIgd2l0aFxuICB8IE9rIHgsIE9rIHkgLT4gZXEgeCB5XG4gIHwgRXJyb3IgcywgRXJyb3IgcycgLT4gZXJyIHMgcydcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIH5lcnIgY21wIGEgYiA9XG4gIG1hdGNoIGEsIGIgd2l0aFxuICB8IE9rIHgsIE9rIHkgLT4gY21wIHggeVxuICB8IE9rIF8sIF8gLT4gMVxuICB8IF8sIE9rIF8gLT4gLTFcbiAgfCBFcnJvciBzLCBFcnJvciBzJyAtPiBlcnIgcyBzJ1xuXG5sZXQgZm9sZCB+b2sgfmVycm9yIHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBPayB4IC0+IG9rIHhcbiAgfCBFcnJvciBzIC0+IGVycm9yIHNcblxubGV0IGZvbGRfb2sgZiBhY2MgciA9XG4gIG1hdGNoIHIgd2l0aFxuICB8IE9rIHggLT4gZiBhY2MgeFxuICB8IEVycm9yIF8gLT4gYWNjXG5cbmxldCBpc19vayA9IGZ1bmN0aW9uXG4gIHwgT2sgXyAtPiB0cnVlXG4gIHwgRXJyb3IgXyAtPiBmYWxzZVxuXG5sZXQgaXNfZXJyb3IgPSBmdW5jdGlvblxuICB8IE9rIF8gLT4gZmFsc2VcbiAgfCBFcnJvciBfIC0+IHRydWVcblxuKCoqIHsyIFdyYXBwZXJzfSAqKVxuXG5sZXQgZ3VhcmQgZiA9IHRyeSBPayAoZiAoKSkgd2l0aCBlIC0+IEVycm9yIGVcbmxldCBndWFyZF9zdHIgZiA9IHRyeSBPayAoZiAoKSkgd2l0aCBlIC0+IG9mX2V4biBlXG5sZXQgZ3VhcmRfc3RyX3RyYWNlIGYgPSB0cnkgT2sgKGYgKCkpIHdpdGggZSAtPiBvZl9leG5fdHJhY2UgZVxubGV0IHdyYXAxIGYgeCA9IHRyeSByZXR1cm4gKGYgeCkgd2l0aCBlIC0+IEVycm9yIGVcbmxldCB3cmFwMiBmIHggeSA9IHRyeSByZXR1cm4gKGYgeCB5KSB3aXRoIGUgLT4gRXJyb3IgZVxubGV0IHdyYXAzIGYgeCB5IHogPSB0cnkgcmV0dXJuIChmIHggeSB6KSB3aXRoIGUgLT4gRXJyb3IgZVxuXG4oKiogezIgQXBwbGljYXRpdmV9ICopXG5cbmxldCBwdXJlID0gcmV0dXJuXG5cbmxldCAoIDwqPiApIGYgeCA9XG4gIG1hdGNoIGYgd2l0aFxuICB8IEVycm9yIHMgLT4gZmFpbCBzXG4gIHwgT2sgZiAtPiBtYXAgZiB4XG5cbmxldCBqb2luIHQgPVxuICBtYXRjaCB0IHdpdGhcbiAgfCBPayAoT2sgbykgLT4gT2sgb1xuICB8IE9rIChFcnJvciBlKSAtPiBFcnJvciBlXG4gIHwgRXJyb3IgXyBhcyBlIC0+IGVcblxubGV0IGJvdGggeCB5ID1cbiAgbWF0Y2ggeCwgeSB3aXRoXG4gIHwgT2sgbywgT2sgbycgLT4gT2sgKG8sIG8nKVxuICB8IE9rIF8sIEVycm9yIGUgLT4gRXJyb3IgZVxuICB8IEVycm9yIGUsIF8gLT4gRXJyb3IgZVxuXG4oKiogezIgQ29sbGVjdGlvbnN9ICopXG5cbmxldCBtYXBfbCBmIGwgPVxuICBsZXQgcmVjIG1hcCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBPayAoTGlzdC5yZXYgYWNjKVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgKG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuICAgICAgfCBPayB5IC0+IG1hcCAoeSA6OiBhY2MpIGwnKVxuICBpblxuICBtYXAgW10gbFxuXG5sZXQgZmxhdHRlbl9sIGwgPVxuICBsZXQgcmVjIGxvb3AgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gT2sgKExpc3QucmV2IGFjYylcbiAgICB8IE9rIHggOjogbCcgLT4gbG9vcCAoeCA6OiBhY2MpIGwnXG4gICAgfCBFcnJvciBlIDo6IF8gLT4gRXJyb3IgZVxuICBpblxuICBsb29wIFtdIGxcblxuZXhjZXB0aW9uIExvY2FsRXhpdFxuXG5sZXQgZm9sZF9pdGVyIGYgYWNjIHNlcSA9XG4gIGxldCBlcnIgPSByZWYgTm9uZSBpblxuICB0cnlcbiAgICBsZXQgYWNjID0gcmVmIGFjYyBpblxuICAgIHNlcSAoZnVuIHggLT5cbiAgICAgICAgbWF0Y2ggZiAhYWNjIHggd2l0aFxuICAgICAgICB8IEVycm9yIHMgLT5cbiAgICAgICAgICBlcnIgOj0gU29tZSBzO1xuICAgICAgICAgIHJhaXNlIExvY2FsRXhpdFxuICAgICAgICB8IE9rIHkgLT4gYWNjIDo9IHkpO1xuICAgIE9rICFhY2NcbiAgd2l0aCBMb2NhbEV4aXQgLT5cbiAgICAobWF0Y2ggIWVyciB3aXRoXG4gICAgfCBOb25lIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgU29tZSBzIC0+IEVycm9yIHMpXG5cbmxldCBmb2xkX2wgZiBhY2MgbCA9IGZvbGRfaXRlciBmIGFjYyAoZnVuIGsgLT4gTGlzdC5pdGVyIGsgbClcblxuKCoqIHsyIE1pc2N9ICopXG5cbmxldCBjaG9vc2UgbCA9XG4gIGxldCByZWMgZmluZF8gPSBmdW5jdGlvblxuICAgIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgfCAoT2sgXyBhcyByZXMpIDo6IF8gLT4gcmVzXG4gICAgfCBFcnJvciBfIDo6IGwnIC0+IGZpbmRfIGwnXG4gIGluXG4gIHRyeSBmaW5kXyBsXG4gIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgbGV0IGwnID1cbiAgICAgIExpc3QubWFwXG4gICAgICAgIChmdW5jdGlvblxuICAgICAgICAgIHwgRXJyb3IgcyAtPiBzXG4gICAgICAgICAgfCBPayBfIC0+IGFzc2VydCBmYWxzZSlcbiAgICAgICAgbFxuICAgIGluXG4gICAgRXJyb3IgbCdcblxubGV0IHJldHJ5IG4gZiA9XG4gIGxldCByZWMgcmV0cnkgbiBhY2MgPVxuICAgIG1hdGNoIG4gd2l0aFxuICAgIHwgMCAtPiBmYWlsIChMaXN0LnJldiBhY2MpXG4gICAgfCBfIC0+XG4gICAgICAobWF0Y2ggZiAoKSB3aXRoXG4gICAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgICAgfCBFcnJvciBlIC0+IHJldHJ5IChuIC0gMSkgKGUgOjogYWNjKSlcbiAgaW5cbiAgcmV0cnkgbiBbXVxuXG4oKiogezIgSW5maXh9ICopXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA8JD4gKSA9IG1hcFxuICBsZXQgKCA+fD0gKSBlIGYgPSBtYXAgZiBlXG4gIGxldCAoID4+PSApIGUgZiA9IGZsYXRfbWFwIGYgZVxuICBsZXQgKCA8Kj4gKSA9ICggPCo+IClcbiAgbGV0ICggbGV0KyApID0gKCA+fD0gKVxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG5cbiAgbGV0W0BpbmxpbmVdICggYW5kKyApIHgxIHgyID1cbiAgICBtYXRjaCB4MSwgeDIgd2l0aFxuICAgIHwgT2sgeCwgT2sgeSAtPiBPayAoeCwgeSlcbiAgICB8IEVycm9yIGUsIF8gLT4gRXJyb3IgZVxuICAgIHwgXywgRXJyb3IgZSAtPiBFcnJvciBlXG5cbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbigqKiB7MiBNb25hZGljIE9wZXJhdGlvbnN9ICopXG5cbm1vZHVsZSB0eXBlIE1PTkFEID0gc2lnXG4gIHR5cGUgJ2EgdFxuXG4gIHZhbCByZXR1cm4gOiAnYSAtPiAnYSB0XG4gIHZhbCAoID4+PSApIDogJ2EgdCAtPiAoJ2EgLT4gJ2IgdCkgLT4gJ2IgdFxuZW5kXG5cbm1vZHVsZSBUcmF2ZXJzZSAoTSA6IE1PTkFEKSA9IHN0cnVjdFxuICBsZXQgKCA+Pj0gKSA9IE0uKCA+Pj0gKVxuXG4gIGxldCBtYXBfbSBmIGUgPVxuICAgIG1hdGNoIGUgd2l0aFxuICAgIHwgRXJyb3IgcyAtPiBNLnJldHVybiAoRXJyb3IgcylcbiAgICB8IE9rIHggLT4gZiB4ID4+PSBmdW4geSAtPiBNLnJldHVybiAoT2sgeSlcblxuICBsZXQgc2VxdWVuY2VfbSBtID0gbWFwX20gKGZ1biB4IC0+IHgpIG1cblxuICBsZXQgZm9sZF9tIGYgYWNjIGUgPVxuICAgIG1hdGNoIGUgd2l0aFxuICAgIHwgRXJyb3IgXyAtPiBNLnJldHVybiBhY2NcbiAgICB8IE9rIHggLT4gZiBhY2MgeCA+Pj0gZnVuIHkgLT4gTS5yZXR1cm4geVxuXG4gIGxldCByZXRyeV9tIG4gZiA9XG4gICAgbGV0IHJlYyByZXRyeSBuIGFjYyA9XG4gICAgICBtYXRjaCBuIHdpdGhcbiAgICAgIHwgMCAtPiBNLnJldHVybiAoZmFpbCAoTGlzdC5yZXYgYWNjKSlcbiAgICAgIHwgXyAtPlxuICAgICAgICBmICgpID4+PSAoIGZ1bmN0aW9uXG4gICAgICAgIHwgT2sgeCAtPiBNLnJldHVybiAoT2sgeClcbiAgICAgICAgfCBFcnJvciBlIC0+IHJldHJ5IChuIC0gMSkgKGUgOjogYWNjKSApXG4gICAgaW5cbiAgICByZXRyeSBuIFtdXG5lbmRcblxuKCoqIHsyIENvbnZlcnNpb25zfSAqKVxuXG5sZXQgdG9fb3B0ID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IFNvbWUgeFxuICB8IEVycm9yIF8gLT4gTm9uZVxuXG5sZXQgb2Zfb3B0ID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IEVycm9yIFwib2Zfb3B0XCJcbiAgfCBTb21lIHggLT4gT2sgeFxuXG5sZXQgdG9fc2VxIGUgKCkgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IFNlcS5Db25zICh4LCBTZXEuZW1wdHkpXG4gIHwgRXJyb3IgXyAtPiBTZXEuTmlsXG5cbmxldCB0b19pdGVyIGUgayA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gayB4XG4gIHwgRXJyb3IgXyAtPiAoKVxuXG50eXBlICgnYSwgJ2IpIGVycm9yID0gWyBgT2sgb2YgJ2EgfCBgRXJyb3Igb2YgJ2IgXVxuXG5sZXQgb2ZfZXJyID0gZnVuY3Rpb25cbiAgfCBgT2sgeCAtPiBPayB4XG4gIHwgYEVycm9yIHkgLT4gRXJyb3IgeVxuXG5sZXQgdG9fZXJyID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IGBPayB4XG4gIHwgRXJyb3IgeSAtPiBgRXJyb3IgeVxuXG4oKiogezIgSU99ICopXG5cbmxldCBwcCBwcF94IGZtdCBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCJAW29rKEAsJWEpQF1cIiBwcF94IHhcbiAgfCBFcnJvciBzIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbZXJyb3IoQCwlcylAXVwiIHNcblxubGV0IHBwJyBwcF94IHBwX2UgZm10IGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbb2soQCwlYSlAXVwiIHBwX3ggeFxuICB8IEVycm9yIHMgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiQFtlcnJvcihALCVhKUBdXCIgcHBfZSBzXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgV3JhcHBlciBhcm91bmQgU2V0fSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbm1vZHVsZSB0eXBlIE9yZGVyZWRUeXBlID0gU2V0Lk9yZGVyZWRUeXBlXG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgaW5jbHVkZSBTZXQuU1xuXG4gIHZhbCBtaW5fZWx0X29wdCA6IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshbWluX2VsdH0uXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIG1heF9lbHRfb3B0IDogdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFtYXhfZWx0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgY2hvb3NlX29wdCA6IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshY2hvb3NlfS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9vcHQgOiBlbHQgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFmaW5kfS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9maXJzdCA6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgKCoqIEZpbmQgbWluaW11bSBlbGVtZW50IHNhdGlzZnlpbmcgcHJlZGljYXRlLlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX2ZpcnN0X29wdCA6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFmaW5kX2ZpcnN0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9maXJzdF9tYXAgOiAoZWx0IC0+ICdhIG9wdGlvbikgLT4gdCAtPiAnYSBvcHRpb25cbiAgKCoqIFtmaW5kX2ZpcnN0X21hcCBmIHNdIGZpbmQgdGhlIG1pbmltdW0gZWxlbWVudCBbeF0gb2YgW3NdIHN1Y2ggdGhhdCBbZiB4ID0gU29tZSB5XVxuICAgICAgYW5kIHJldHVybiBbU29tZSB5XS4gT3RoZXJ3aXNlIHJldHVybnMgW05vbmVdLlxuICAgICAgQHNpbmNlIDMuMTIgKilcblxuICB2YWwgZmluZF9sYXN0IDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdFxuICAoKiogRmluZCBtYXhpbXVtIGVsZW1lbnQgc2F0aXNmeWluZyBwcmVkaWNhdGUuXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIGZpbmRfbGFzdF9vcHQgOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshZmluZF9sYXN0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9sYXN0X21hcCA6IChlbHQgLT4gJ2Egb3B0aW9uKSAtPiB0IC0+ICdhIG9wdGlvblxuICAoKiogW2ZpbmRfbGFzdF9tYXAgZiBzXSBmaW5kIHRoZSBtYXhpbXVtIGVsZW1lbnQgW3hdIG9mIFtzXSBzdWNoIHRoYXQgW2YgeCA9IFNvbWUgeV1cbiAgICAgIGFuZCByZXR1cm4gW1NvbWUgeV0uIE90aGVyd2lzZSByZXR1cm5zIFtOb25lXS5cbiAgICAgIEBzaW5jZSAzLjEyICopXG5cbiAgdmFsIG9mX2l0ZXIgOiBlbHQgaXRlciAtPiB0XG4gICgqKiBCdWlsZCBhIHNldCBmcm9tIHRoZSBnaXZlbiBbaXRlcl0gb2YgZWxlbWVudHMuXG4gICAgICBAc2luY2UgMi44ICopXG5cbiAgdmFsIG9mX3NlcSA6IGVsdCBTZXEudCAtPiB0XG4gICgqKiBCdWlsZCBhIHNldCBmcm9tIHRoZSBnaXZlbiBbc2VxXSBvZiBlbGVtZW50cy5cbiAgICAgIEBzaW5jZSAzLjAgKilcblxuICB2YWwgYWRkX2l0ZXIgOiB0IC0+IGVsdCBpdGVyIC0+IHRcbiAgKCoqIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX3NlcSA6IGVsdCBTZXEudCAtPiB0IC0+IHRcbiAgKCoqIEBzaW5jZSAzLjAgKilcblxuICB2YWwgdG9faXRlciA6IHQgLT4gZWx0IGl0ZXJcbiAgKCoqIFt0b19pdGVyIHRdIGNvbnZlcnRzIHRoZSBzZXQgW3RdIHRvIGEgW2l0ZXJdIG9mIHRoZSBlbGVtZW50cy5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX2xpc3QgOiB0IC0+IGVsdCBsaXN0IC0+IHRcbiAgKCoqIEBzaW5jZSAwLjE0ICopXG5cbiAgdmFsIHRvX2xpc3QgOiB0IC0+IGVsdCBsaXN0XG4gICgqKiBbdG9fbGlzdCB0XSBjb252ZXJ0cyB0aGUgc2V0IFt0XSB0byBhIGxpc3Qgb2YgdGhlIGVsZW1lbnRzLiAqKVxuXG4gIHZhbCB0b19zdHJpbmcgOlxuICAgID9zdGFydDpzdHJpbmcgLT5cbiAgICA/c3RvcDpzdHJpbmcgLT5cbiAgICA/c2VwOnN0cmluZyAtPlxuICAgIChlbHQgLT4gc3RyaW5nKSAtPlxuICAgIHQgLT5cbiAgICBzdHJpbmdcbiAgKCoqICBQcmludCB0aGUgc2V0IGluIGEgc3RyaW5nXG4gICAgICAgQHNpbmNlIDIuNyAqKVxuXG4gIHZhbCBwcCA6XG4gICAgP3BwX3N0YXJ0OnVuaXQgcHJpbnRlciAtPlxuICAgID9wcF9zdG9wOnVuaXQgcHJpbnRlciAtPlxuICAgID9wcF9zZXA6dW5pdCBwcmludGVyIC0+XG4gICAgZWx0IHByaW50ZXIgLT5cbiAgICB0IHByaW50ZXJcbiAgKCoqIFByaW50IHRoZSBzZXQuICopXG5lbmRcblxubW9kdWxlIE1ha2UgKE8gOiBNYXAuT3JkZXJlZFR5cGUpID0gc3RydWN0XG4gIG1vZHVsZSBTID0gU2V0Lk1ha2UgKE8pXG5cbiAgKCogYmFja3BvcnQgZnVuY3Rpb25zIGZyb20gcmVjZW50IHN0ZGxpYi5cbiAgICAgdGhleSB3aWxsIGJlIHNoYWRvd2VkIGJ5IGluY2x1c2lvbiBvZiBbU10gaWYgcHJlc2VudC4gKilcblxuICBbQEBAb2NhbWwud2FybmluZyBcIi0zMlwiXVxuXG4gIGxldCBmaW5kX29wdCB4IHMgPSB0cnkgU29tZSAoUy5maW5kIHggcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuICBsZXQgY2hvb3NlX29wdCBzID0gdHJ5IFNvbWUgKFMuY2hvb3NlIHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbiAgbGV0IG1pbl9lbHRfb3B0IHMgPSB0cnkgU29tZSAoUy5taW5fZWx0IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbiAgbGV0IG1heF9lbHRfb3B0IHMgPSB0cnkgU29tZSAoUy5tYXhfZWx0IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxuICBleGNlcHRpb24gRmluZF9iaW5kaW5nX2V4aXRcblxuICBsZXQgZmluZF9maXJzdF9vcHQgZiBtID1cbiAgICBsZXQgcmVzID0gcmVmIE5vbmUgaW5cbiAgICB0cnlcbiAgICAgIFMuaXRlclxuICAgICAgICAoZnVuIHggLT5cbiAgICAgICAgICBpZiBmIHggdGhlbiAoXG4gICAgICAgICAgICByZXMgOj0gU29tZSB4O1xuICAgICAgICAgICAgcmFpc2UgRmluZF9iaW5kaW5nX2V4aXRcbiAgICAgICAgICApKVxuICAgICAgICBtO1xuICAgICAgTm9uZVxuICAgIHdpdGggRmluZF9iaW5kaW5nX2V4aXQgLT4gIXJlc1xuXG4gIGxldCBmaW5kX2ZpcnN0IGYgbSA9XG4gICAgbWF0Y2ggZmluZF9maXJzdF9vcHQgZiBtIHdpdGhcbiAgICB8IE5vbmUgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgfCBTb21lIHggLT4geFxuXG4gIGxldCBmaW5kX2ZpcnN0X21hcCBmIG0gPVxuICAgIGxldCByZXMgPSByZWYgTm9uZSBpblxuICAgIHRyeVxuICAgICAgUy5pdGVyXG4gICAgICAgIChmdW4geCAtPlxuICAgICAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHkgLT5cbiAgICAgICAgICAgIHJlcyA6PSBTb21lIHk7XG4gICAgICAgICAgICByYWlzZSBGaW5kX2JpbmRpbmdfZXhpdClcbiAgICAgICAgbTtcbiAgICAgIE5vbmVcbiAgICB3aXRoIEZpbmRfYmluZGluZ19leGl0IC0+ICFyZXNcblxuICAoKiBsaW5lYXIgdGltZSwgbXVzdCB0cmF2ZXJzZSB0aGUgd2hvbGUgc2V04oCmICopXG4gIGxldCBmaW5kX2xhc3Rfb3B0IGYgbSA9XG4gICAgbGV0IHJlcyA9IHJlZiBOb25lIGluXG4gICAgUy5pdGVyIChmdW4geCAtPiBpZiBmIHggdGhlbiByZXMgOj0gU29tZSB4KSBtO1xuICAgICFyZXNcblxuICBsZXQgZmluZF9sYXN0IGYgbSA9XG4gICAgbWF0Y2ggZmluZF9sYXN0X29wdCBmIG0gd2l0aFxuICAgIHwgTm9uZSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8IFNvbWUgeCAtPiB4XG5cbiAgW0BAQG9jYW1sLndhcm5pbmcgXCIrMzJcIl1cblxuICBpbmNsdWRlIFNcblxuICAoKiBVc2UgZmluZF9sYXN0IHdoaWNoIGlzIGxpbmVhciB0aW1lIG9uIE9DYW1sIDwgNC4wNSAqKVxuICBsZXQgZmluZF9sYXN0X21hcCBmIG0gPVxuICAgIGxldCByZXMgPSByZWYgTm9uZSBpblxuICAgIGxldCBfID1cbiAgICAgIGZpbmRfbGFzdF9vcHRcbiAgICAgICAgKGZ1biB4IC0+XG4gICAgICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gZmFsc2VcbiAgICAgICAgICB8IFNvbWUgeSAtPlxuICAgICAgICAgICAgcmVzIDo9IFNvbWUgeTtcbiAgICAgICAgICAgIHRydWUpXG4gICAgICAgIG1cbiAgICBpblxuICAgICFyZXNcblxuICBsZXQgYWRkX3NlcSBzZXEgc2V0ID1cbiAgICBsZXQgc2V0ID0gcmVmIHNldCBpblxuICAgIFNlcS5pdGVyIChmdW4geCAtPiBzZXQgOj0gYWRkIHggIXNldCkgc2VxO1xuICAgICFzZXRcblxuICBsZXQgb2Zfc2VxIHMgPSBhZGRfc2VxIHMgZW1wdHlcblxuICBsZXQgYWRkX2l0ZXIgc2V0IGkgPVxuICAgIGxldCBzZXQgPSByZWYgc2V0IGluXG4gICAgaSAoZnVuIHggLT4gc2V0IDo9IGFkZCB4ICFzZXQpO1xuICAgICFzZXRcblxuICBsZXQgb2ZfaXRlciBzID0gYWRkX2l0ZXIgZW1wdHkgc1xuICBsZXQgdG9faXRlciBzIHlpZWxkID0gaXRlciB5aWVsZCBzXG4gIGxldCBhZGRfbGlzdCA9IExpc3QuZm9sZF9sZWZ0IChmdW4gc2V0IHggLT4gYWRkIHggc2V0KVxuICBsZXQgdG9fbGlzdCA9IGVsZW1lbnRzXG5cbiAgbGV0IHRvX3N0cmluZyA/KHN0YXJ0ID0gXCJcIikgPyhzdG9wID0gXCJcIikgPyhzZXAgPSBcIixcIikgZWx0X3RvX3N0cmluZyBoID1cbiAgICB0b19saXN0IGggfD4gQ0NMaXN0LnRvX3N0cmluZyB+c3RhcnQgfnN0b3AgfnNlcCBlbHRfdG9fc3RyaW5nXG5cbiAgbGV0IHBwID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgICA/KHBwX3NlcCA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCIpIHBwX3ggZm10IG0gPVxuICAgIHBwX3N0YXJ0IGZtdCAoKTtcbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIGl0ZXJcbiAgICAgIChmdW4geCAtPlxuICAgICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBwcF9zZXAgZm10ICgpO1xuICAgICAgICBwcF94IGZtdCB4KVxuICAgICAgbTtcbiAgICBwcF9zdG9wIGZtdCAoKVxuZW5kXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgQmFzaWMgU3RyaW5nIFV0aWxzfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxuXG4oKiBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbnMgKilcblxuaW5jbHVkZSBTdHJpbmdcblxubGV0IGNvbXBhcmVfaW50IChhIDogaW50KSBiID0gU3RkbGliLmNvbXBhcmUgYSBiXG5sZXQgY29tcGFyZSA9IFN0cmluZy5jb21wYXJlXG5sZXQgaGFzaCBzID0gSGFzaHRibC5oYXNoIHNcbmxldCBsZW5ndGggPSBTdHJpbmcubGVuZ3RoXG5sZXQgaXNfZW1wdHkgcyA9IGVxdWFsIHMgXCJcIlxuXG5sZXQgcmV2IHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGluaXQgbiAoZnVuIGkgLT4gcy5bbiAtIGkgLSAxXSlcblxubGV0IHJlYyBfdG9fbGlzdCBzIGFjYyBpIGxlbiA9XG4gIGlmIGxlbiA9IDAgdGhlblxuICAgIExpc3QucmV2IGFjY1xuICBlbHNlXG4gICAgX3RvX2xpc3QgcyAocy5baV0gOjogYWNjKSAoaSArIDEpIChsZW4gLSAxKVxuXG5sZXQgX2lzX3N1YiB+c3ViIGkgcyBqIH5sZW4gPVxuICBsZXQgcmVjIGNoZWNrIGsgPVxuICAgIGlmIGsgPSBsZW4gdGhlblxuICAgICAgdHJ1ZVxuICAgIGVsc2VcbiAgICAgIENDQ2hhci5lcXVhbCBzdWIuW2kgKyBrXSBzLltqICsga10gJiYgY2hlY2sgKGsgKyAxKVxuICBpblxuICBqICsgbGVuIDw9IFN0cmluZy5sZW5ndGggcyAmJiBjaGVjayAwXG5cbmxldCBpc19zdWIgfnN1YiBpIHMgaiB+bGVuID1cbiAgaWYgaSArIGxlbiA+IFN0cmluZy5sZW5ndGggc3ViIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5pc19zdWJcIjtcbiAgX2lzX3N1YiB+c3ViIGkgcyBqIH5sZW5cblxudHlwZSBfIGRpcmVjdGlvbiA9XG4gIHwgRGlyZWN0IDogWyBgRGlyZWN0IF0gZGlyZWN0aW9uXG4gIHwgUmV2ZXJzZSA6IFsgYFJldmVyc2UgXSBkaXJlY3Rpb25cblxuKCogd2UgZm9sbG93IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0tudXRo4oCTTW9ycmlz4oCTUHJhdHRfYWxnb3JpdGhtICopXG5tb2R1bGUgRmluZCA9IHN0cnVjdFxuICB0eXBlICdhIGttcF9wYXR0ZXJuID0geyBmYWlsdXJlOiBpbnQgYXJyYXk7IHN0cjogc3RyaW5nIH1cbiAgKCogaW52YXJpYW50OiBbbGVuZ3RoIGZhaWx1cmUgPSBsZW5ndGggc3RyXS5cbiAgICAgV2UgdXNlIGEgcGhhbnRvbSB0eXBlIHRvIGF2b2lkIG1peGluZyB0aGUgZGlyZWN0aW9ucy4gKilcblxuICBsZXQga21wX3BhdHRlcm5fbGVuZ3RoIHAgPSBTdHJpbmcubGVuZ3RoIHAuc3RyXG5cbiAgKCogYWNjZXNzIHRoZSBbaV0tdGggZWxlbWVudCBvZiBbc10gYWNjb3JkaW5nIHRvIGRpcmVjdGlvbiBbZGlyXSAqKVxuICBsZXQgZ2V0XyA6IHR5cGUgYS4gZGlyOmEgZGlyZWN0aW9uIC0+IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9XG4gICBmdW4gfmRpciAtPlxuICAgIG1hdGNoIGRpciB3aXRoXG4gICAgfCBEaXJlY3QgLT4gU3RyaW5nLmdldFxuICAgIHwgUmV2ZXJzZSAtPiBmdW4gcyBpIC0+IHMuW1N0cmluZy5sZW5ndGggcyAtIGkgLSAxXVxuXG4gIGxldCBrbXBfY29tcGlsZV8gOiB0eXBlIGEuIGRpcjphIGRpcmVjdGlvbiAtPiBzdHJpbmcgLT4gYSBrbXBfcGF0dGVybiA9XG4gICBmdW4gfmRpciBzdHIgLT5cbiAgICBsZXQgbGVuID0gbGVuZ3RoIHN0ciBpblxuICAgIGxldCBnZXQgPSBnZXRfIH5kaXIgaW5cbiAgICAoKiBob3cgdG8gcmVhZCBlbGVtZW50cyBvZiB0aGUgc3RyaW5nICopXG4gICAgbWF0Y2ggbGVuIHdpdGhcbiAgICB8IDAgLT4geyBmYWlsdXJlID0gW3x8XTsgc3RyIH1cbiAgICB8IDEgLT4geyBmYWlsdXJlID0gW3wgLTEgfF07IHN0ciB9XG4gICAgfCBfIC0+XG4gICAgICAoKiBhdCBsZWFzdCAyIGVsZW1lbnRzLCB0aGUgYWxnb3JpdGhtIGNhbiB3b3JrICopXG4gICAgICBsZXQgZmFpbHVyZSA9IEFycmF5Lm1ha2UgbGVuIDAgaW5cbiAgICAgIGZhaWx1cmUuKDApIDwtIC0xO1xuICAgICAgKCogaTogY3VycmVudCBpbmRleCBpbiBzdHIgKilcbiAgICAgIGxldCBpID0gcmVmIDIgaW5cbiAgICAgICgqIGo6IGluZGV4IG9mIGNhbmRpZGF0ZSBzdWJzdHJpbmcgKilcbiAgICAgIGxldCBqID0gcmVmIDAgaW5cbiAgICAgIHdoaWxlICFpIDwgbGVuIGRvXG4gICAgICAgIG1hdGNoICFqIHdpdGhcbiAgICAgICAgfCBfIHdoZW4gQ0NDaGFyLmVxdWFsIChnZXQgc3RyICghaSAtIDEpKSAoZ2V0IHN0ciAhaikgLT5cbiAgICAgICAgICAoKiBzdWJzdHJpbmcgc3RhcnRpbmcgYXQgIWogY29udGludWVzIG1hdGNoaW5nIGN1cnJlbnQgY2hhciAqKVxuICAgICAgICAgIGluY3IgajtcbiAgICAgICAgICBmYWlsdXJlLighaSkgPC0gIWo7XG4gICAgICAgICAgaW5jciBpXG4gICAgICAgIHwgMCAtPlxuICAgICAgICAgICgqIGJhY2sgdG8gdGhlIGJlZ2lubmluZyAqKVxuICAgICAgICAgIGZhaWx1cmUuKCFpKSA8LSAwO1xuICAgICAgICAgIGluY3IgaVxuICAgICAgICB8IF8gLT5cbiAgICAgICAgICAoKiBmYWxsYmFjayBmb3IgdGhlIHByZWZpeCBzdHJpbmcgKilcbiAgICAgICAgICBhc3NlcnQgKCFqID4gMCk7XG4gICAgICAgICAgaiA6PSBmYWlsdXJlLighailcbiAgICAgIGRvbmU7XG4gICAgICAoKiBGb3JtYXQucHJpbnRmIFwie0BbZmFpbHVyZTolYSwgc3RyOiVzQF19QC5cIiBDQ0Zvcm1hdC4oYXJyYXkgaW50KSBmYWlsdXJlIHN0cjsgKilcbiAgICAgIHsgZmFpbHVyZTsgc3RyIH1cblxuICBsZXQga21wX2NvbXBpbGUgcyA9IGttcF9jb21waWxlXyB+ZGlyOkRpcmVjdCBzXG4gIGxldCBrbXBfcmNvbXBpbGUgcyA9IGttcF9jb21waWxlXyB+ZGlyOlJldmVyc2Ugc1xuXG4gICgqIHByb3BlciBzZWFyY2ggZnVuY3Rpb24uXG4gICAgIFtpXSBpbmRleCBpbiBbc11cbiAgICAgW2pdIGluZGV4IGluIFtwYXR0ZXJuXVxuICAgICBbbGVuXSBsZW5ndGggb2YgW3NdICopXG4gIGxldCBrbXBfZmluZCB+cGF0dGVybiBzIGlkeCA9XG4gICAgbGV0IGxlbiA9IGxlbmd0aCBzIGluXG4gICAgbGV0IGkgPSByZWYgaWR4IGluXG4gICAgbGV0IGogPSByZWYgMCBpblxuICAgIGxldCBwYXRfbGVuID0ga21wX3BhdHRlcm5fbGVuZ3RoIHBhdHRlcm4gaW5cbiAgICB3aGlsZSAhaiA8IHBhdF9sZW4gJiYgIWkgKyAhaiA8IGxlbiBkb1xuICAgICAgbGV0IGMgPSBTdHJpbmcuZ2V0IHMgKCFpICsgIWopIGluXG4gICAgICBsZXQgZXhwZWN0ZWQgPSBTdHJpbmcuZ2V0IHBhdHRlcm4uc3RyICFqIGluXG4gICAgICBpZiBDQ0NoYXIuZXF1YWwgYyBleHBlY3RlZCB0aGVuXG4gICAgICAgICgqIGNoYXIgbWF0Y2hlcyAqKVxuICAgICAgICBpbmNyIGpcbiAgICAgIGVsc2UgKFxuICAgICAgICBsZXQgZmFpbF9vZmZzZXQgPSBwYXR0ZXJuLmZhaWx1cmUuKCFqKSBpblxuICAgICAgICBpZiBmYWlsX29mZnNldCA+PSAwIHRoZW4gKFxuICAgICAgICAgIGFzc2VydCAoZmFpbF9vZmZzZXQgPCAhaik7XG4gICAgICAgICAgKCogZm9sbG93IHRoZSBmYWlsdXJlIGxpbmsgKilcbiAgICAgICAgICBpIDo9ICFpICsgIWogLSBmYWlsX29mZnNldDtcbiAgICAgICAgICBqIDo9IGZhaWxfb2Zmc2V0XG4gICAgICAgICkgZWxzZSAoXG4gICAgICAgICAgKCogYmVnaW5uaW5nIG9mIHBhdHRlcm4gKilcbiAgICAgICAgICBqIDo9IDA7XG4gICAgICAgICAgaW5jciBpXG4gICAgICAgIClcbiAgICAgIClcbiAgICBkb25lO1xuICAgIGlmICFqID0gcGF0X2xlbiB0aGVuXG4gICAgICAhaVxuICAgIGVsc2VcbiAgICAgIC0xXG5cbiAgKCogcHJvcGVyIHNlYXJjaCBmdW5jdGlvbiwgZnJvbSB0aGUgcmlnaHQuXG4gICAgIFtpXSBpbmRleCBpbiBbc11cbiAgICAgW2pdIGluZGV4IGluIFtwYXR0ZXJuXVxuICAgICBbbGVuXSBsZW5ndGggb2YgW3NdICopXG4gIGxldCBrbXBfcmZpbmQgfnBhdHRlcm4gcyBpZHggPVxuICAgIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICAgIGxldCBpID0gcmVmIChsZW4gLSBpZHggLSAxKSBpblxuICAgIGxldCBqID0gcmVmIDAgaW5cbiAgICBsZXQgcGF0X2xlbiA9IGttcF9wYXR0ZXJuX2xlbmd0aCBwYXR0ZXJuIGluXG4gICAgd2hpbGUgIWogPCBwYXRfbGVuICYmICFpICsgIWogPCBsZW4gZG9cbiAgICAgIGxldCBjID0gU3RyaW5nLmdldCBzIChsZW4gLSAhaSAtICFqIC0gMSkgaW5cbiAgICAgIGxldCBleHBlY3RlZCA9XG4gICAgICAgIFN0cmluZy5nZXQgcGF0dGVybi5zdHIgKFN0cmluZy5sZW5ndGggcGF0dGVybi5zdHIgLSAhaiAtIDEpXG4gICAgICBpblxuICAgICAgaWYgQ0NDaGFyLmVxdWFsIGMgZXhwZWN0ZWQgdGhlblxuICAgICAgICAoKiBjaGFyIG1hdGNoZXMgKilcbiAgICAgICAgaW5jciBqXG4gICAgICBlbHNlIChcbiAgICAgICAgbGV0IGZhaWxfb2Zmc2V0ID0gcGF0dGVybi5mYWlsdXJlLighaikgaW5cbiAgICAgICAgaWYgZmFpbF9vZmZzZXQgPj0gMCB0aGVuIChcbiAgICAgICAgICBhc3NlcnQgKGZhaWxfb2Zmc2V0IDwgIWopO1xuICAgICAgICAgICgqIGZvbGxvdyB0aGUgZmFpbHVyZSBsaW5rICopXG4gICAgICAgICAgaSA6PSAhaSArICFqIC0gZmFpbF9vZmZzZXQ7XG4gICAgICAgICAgaiA6PSBmYWlsX29mZnNldFxuICAgICAgICApIGVsc2UgKFxuICAgICAgICAgICgqIGJlZ2lubmluZyBvZiBwYXR0ZXJuICopXG4gICAgICAgICAgaiA6PSAwO1xuICAgICAgICAgIGluY3IgaVxuICAgICAgICApXG4gICAgICApXG4gICAgZG9uZTtcbiAgICAoKiBhZGp1c3QgcmVzdWx0OiBmaXJzdCwgW3JlcyA9IHN0cmluZy5sZW5ndGggcyAtIHJlcyAtMV0gdG8gY29udmVydFxuICAgICAgIGJhY2sgdG8gcmVhbCBpbmRpY2VzOyB0aGVuLCB3aGF0IHdlIGdvdCBpcyBhY3R1YWxseSB0aGUgcG9zaXRpb25cbiAgICAgICBvZiB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLCBzbyB3ZSBzdWJ0cmFjdCB0aGUgW2xlbmd0aCBvZiB0aGUgcGF0dGVybiAtMV1cbiAgICAgICB0byBvYnRhaW4gdGhlIHJlYWwgcmVzdWx0LiAqKVxuICAgIGlmICFqID0gcGF0X2xlbiB0aGVuXG4gICAgICBsZW4gLSAhaSAtIGttcF9wYXR0ZXJuX2xlbmd0aCBwYXR0ZXJuXG4gICAgZWxzZVxuICAgICAgLTFcblxuICB0eXBlICdhIHBhdHRlcm4gPSBQX2NoYXIgb2YgY2hhciB8IFBfS01QIG9mICdhIGttcF9wYXR0ZXJuXG5cbiAgbGV0IHBhdHRlcm5fbGVuZ3RoID0gZnVuY3Rpb25cbiAgICB8IFBfY2hhciBfIC0+IDFcbiAgICB8IFBfS01QIHAgLT4ga21wX3BhdHRlcm5fbGVuZ3RoIHBcblxuICBsZXQgY29tcGlsZSBzdWIgOiBbIGBEaXJlY3QgXSBwYXR0ZXJuID1cbiAgICBpZiBsZW5ndGggc3ViID0gMSB0aGVuXG4gICAgICBQX2NoYXIgc3ViLlswXVxuICAgIGVsc2VcbiAgICAgIFBfS01QIChrbXBfY29tcGlsZSBzdWIpXG5cbiAgbGV0IHJjb21waWxlIHN1YiA6IFsgYFJldmVyc2UgXSBwYXR0ZXJuID1cbiAgICBpZiBsZW5ndGggc3ViID0gMSB0aGVuXG4gICAgICBQX2NoYXIgc3ViLlswXVxuICAgIGVsc2VcbiAgICAgIFBfS01QIChrbXBfcmNvbXBpbGUgc3ViKVxuXG4gIGxldCBmaW5kID8oc3RhcnQgPSAwKSB+KHBhdHRlcm4gOiBbIGBEaXJlY3QgXSBwYXR0ZXJuKSBzID1cbiAgICBtYXRjaCBwYXR0ZXJuIHdpdGhcbiAgICB8IFBfY2hhciBjIC0+ICh0cnkgU3RyaW5nLmluZGV4X2Zyb20gcyBzdGFydCBjIHdpdGggTm90X2ZvdW5kIC0+IC0xKVxuICAgIHwgUF9LTVAgcGF0dGVybiAtPiBrbXBfZmluZCB+cGF0dGVybiBzIHN0YXJ0XG5cbiAgbGV0IHJmaW5kID9zdGFydCB+KHBhdHRlcm4gOiBbIGBSZXZlcnNlIF0gcGF0dGVybikgcyA9XG4gICAgbGV0IHN0YXJ0ID1cbiAgICAgIG1hdGNoIHN0YXJ0IHdpdGhcbiAgICAgIHwgU29tZSBuIC0+IG5cbiAgICAgIHwgTm9uZSAtPiBTdHJpbmcubGVuZ3RoIHMgLSAxXG4gICAgaW5cbiAgICBtYXRjaCBwYXR0ZXJuIHdpdGhcbiAgICB8IFBfY2hhciBjIC0+ICh0cnkgU3RyaW5nLnJpbmRleF9mcm9tIHMgc3RhcnQgYyB3aXRoIE5vdF9mb3VuZCAtPiAtMSlcbiAgICB8IFBfS01QIHBhdHRlcm4gLT4ga21wX3JmaW5kIH5wYXR0ZXJuIHMgc3RhcnRcbmVuZFxuXG5sZXQgZmluZCA/KHN0YXJ0ID0gMCkgfnN1YiA9XG4gIGxldCBwYXR0ZXJuID0gRmluZC5jb21waWxlIHN1YiBpblxuICBmdW4gcyAtPiBGaW5kLmZpbmQgfnN0YXJ0IH5wYXR0ZXJuIHNcblxubGV0IGZpbmRfYWxsID8oc3RhcnQgPSAwKSB+c3ViID1cbiAgbGV0IHBhdHRlcm4gPSBGaW5kLmNvbXBpbGUgc3ViIGluXG4gIGZ1biBzIC0+XG4gICAgbGV0IGkgPSByZWYgc3RhcnQgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgIGxldCByZXMgPSBGaW5kLmZpbmQgfnN0YXJ0OiFpIH5wYXR0ZXJuIHMgaW5cbiAgICAgIGlmIHJlcyA9IH4tMSB0aGVuXG4gICAgICAgIE5vbmVcbiAgICAgIGVsc2UgKFxuICAgICAgICBpIDo9IHJlcyArIDE7XG4gICAgICAgICgqIHBvc3NpYmxlIG92ZXJsYXAgKilcbiAgICAgICAgU29tZSByZXNcbiAgICAgIClcblxubGV0IGZpbmRfYWxsX2wgP3N0YXJ0IH5zdWIgcyA9XG4gIGxldCByZWMgYXV4IGFjYyBnID1cbiAgICBtYXRjaCBnICgpIHdpdGhcbiAgICB8IE5vbmUgLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBTb21lIGkgLT4gYXV4IChpIDo6IGFjYykgZ1xuICBpblxuICBhdXggW10gKGZpbmRfYWxsID9zdGFydCB+c3ViIHMpXG5cbmxldCBtZW0gP3N0YXJ0IH5zdWIgcyA9IGZpbmQgP3N0YXJ0IH5zdWIgcyA+PSAwXG5cbmxldCByZmluZCB+c3ViID1cbiAgbGV0IHBhdHRlcm4gPSBGaW5kLnJjb21waWxlIHN1YiBpblxuICBmdW4gcyAtPiBGaW5kLnJmaW5kIH5zdGFydDooU3RyaW5nLmxlbmd0aCBzIC0gMSkgfnBhdHRlcm4gc1xuXG4oKiBSZXBsYWNlIHN1YnN0cmluZyBbcy5bcG9zXSDigKYgcy5bcG9zK2xlbi0xXV0gYnkgW2J5XSBpbiBbc10gKilcbmxldCByZXBsYWNlX2F0XyB+cG9zIH5sZW4gfmJ5IHMgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgKGxlbmd0aCBzICsgbGVuZ3RoIGJ5IC0gbGVuKSBpblxuICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHMgMCBwb3M7XG4gIEJ1ZmZlci5hZGRfc3RyaW5nIGIgYnk7XG4gIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyAocG9zICsgbGVuKSAoU3RyaW5nLmxlbmd0aCBzIC0gcG9zIC0gbGVuKTtcbiAgQnVmZmVyLmNvbnRlbnRzIGJcblxubGV0IHJlcGxhY2UgPyh3aGljaCA9IGBBbGwpIH5zdWIgfmJ5IHMgPVxuICBpZiBpc19lbXB0eSBzdWIgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLnJlcGxhY2VcIjtcbiAgbWF0Y2ggd2hpY2ggd2l0aFxuICB8IGBMZWZ0IC0+XG4gICAgbGV0IGkgPSBmaW5kIH5zdGFydDowIH5zdWIgcyBpblxuICAgIGlmIGkgPj0gMCB0aGVuXG4gICAgICByZXBsYWNlX2F0XyB+cG9zOmkgfmxlbjooU3RyaW5nLmxlbmd0aCBzdWIpIH5ieSBzXG4gICAgZWxzZVxuICAgICAgc1xuICB8IGBSaWdodCAtPlxuICAgIGxldCBpID0gcmZpbmQgfnN1YiBzIGluXG4gICAgaWYgaSA+PSAwIHRoZW5cbiAgICAgIHJlcGxhY2VfYXRfIH5wb3M6aSB+bGVuOihTdHJpbmcubGVuZ3RoIHN1YikgfmJ5IHNcbiAgICBlbHNlXG4gICAgICBzXG4gIHwgYEFsbCAtPlxuICAgICgqIGNvbXBpbGUgc2VhcmNoIHBhdHRlcm4gb25seSBvbmNlICopXG4gICAgbGV0IHBhdHRlcm4gPSBGaW5kLmNvbXBpbGUgc3ViIGluXG4gICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gICAgbGV0IHN0YXJ0ID0gcmVmIDAgaW5cbiAgICB3aGlsZSAhc3RhcnQgPCBTdHJpbmcubGVuZ3RoIHMgZG9cbiAgICAgIGxldCBpID0gRmluZC5maW5kIH5zdGFydDohc3RhcnQgfnBhdHRlcm4gcyBpblxuICAgICAgaWYgaSA+PSAwIHRoZW4gKFxuICAgICAgICAoKiBiZXR3ZWVuIGxhc3QgYW5kIGN1ciBvY2N1cnJlbmNlcyAqKVxuICAgICAgICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHMgIXN0YXJ0IChpIC0gIXN0YXJ0KTtcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYiBieTtcbiAgICAgICAgc3RhcnQgOj0gaSArIFN0cmluZy5sZW5ndGggc3ViXG4gICAgICApIGVsc2UgKFxuICAgICAgICAoKiBhZGQgcmVtYWluZGVyICopXG4gICAgICAgIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyAhc3RhcnQgKFN0cmluZy5sZW5ndGggcyAtICFzdGFydCk7XG4gICAgICAgIHN0YXJ0IDo9IFN0cmluZy5sZW5ndGggcyAoKiBzdG9wICopXG4gICAgICApXG4gICAgZG9uZTtcbiAgICBCdWZmZXIuY29udGVudHMgYlxuXG5tb2R1bGUgU3BsaXQgPSBzdHJ1Y3RcbiAgdHlwZSBkcm9wX2lmX2VtcHR5ID0geyBmaXJzdDogYm9vbDsgbGFzdDogYm9vbCB9XG5cbiAgbGV0IG5vX2Ryb3AgPSB7IGZpcnN0ID0gZmFsc2U7IGxhc3QgPSBmYWxzZSB9XG4gIGxldCBkZWZhdWx0X2Ryb3AgPSBub19kcm9wXG5cbiAgdHlwZSBzcGxpdF9zdGF0ZSA9IFNwbGl0U3RvcCB8IFNwbGl0QXQgb2YgaW50ICgqIHByZXZpb3VzICopXG5cbiAgbGV0IHJlYyBfc3BsaXQgfmJ5IHMgc3RhdGUgPVxuICAgIG1hdGNoIHN0YXRlIHdpdGhcbiAgICB8IFNwbGl0U3RvcCAtPiBOb25lXG4gICAgfCBTcGxpdEF0IHByZXYgLT4gX3NwbGl0X3NlYXJjaCB+YnkgcyBwcmV2XG5cbiAgYW5kIF9zcGxpdF9zZWFyY2ggfmJ5IHMgcHJldiA9XG4gICAgbGV0IGogPSBGaW5kLmZpbmQgfnN0YXJ0OnByZXYgfnBhdHRlcm46YnkgcyBpblxuICAgIGlmIGogPCAwIHRoZW5cbiAgICAgIFNvbWUgKFNwbGl0U3RvcCwgcHJldiwgU3RyaW5nLmxlbmd0aCBzIC0gcHJldilcbiAgICBlbHNlXG4gICAgICBTb21lIChTcGxpdEF0IChqICsgRmluZC5wYXR0ZXJuX2xlbmd0aCBieSksIHByZXYsIGogLSBwcmV2KVxuXG4gIGxldCBfdHVwbGUzIHggeSB6ID0geCwgeSwgelxuXG4gIGxldCBfbWtnZW4gfmRyb3AgfmJ5IHMgayA9XG4gICAgbGV0IHN0YXRlID0gcmVmIChTcGxpdEF0IDApIGluXG4gICAgbGV0IGJ5ID0gRmluZC5jb21waWxlIGJ5IGluXG4gICAgbGV0IHJlYyBuZXh0ICgpID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyAhc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IE5vbmVcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT5cbiAgICAgICAgc3RhdGUgOj0gc3RhdGUnO1xuICAgICAgICBuZXh0ICgpXG4gICAgICB8IFNvbWUgKF8sIGksIDApIHdoZW4gZHJvcC5sYXN0ICYmIGkgPSBsZW5ndGggcyAtPiBOb25lXG4gICAgICB8IFNvbWUgKHN0YXRlJywgaSwgbGVuKSAtPlxuICAgICAgICBzdGF0ZSA6PSBzdGF0ZSc7XG4gICAgICAgIFNvbWUgKGsgcyBpIGxlbilcbiAgICBpblxuICAgIG5leHRcblxuICBsZXQgZ2VuID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtnZW4gfmRyb3AgfmJ5IHMgX3R1cGxlM1xuICBsZXQgZ2VuX2NweSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rZ2VuIH5kcm9wIH5ieSBzIFN0cmluZy5zdWJcblxuICBsZXQgX21rbGlzdCB+ZHJvcCB+YnkgcyBrID1cbiAgICBsZXQgYnkgPSBGaW5kLmNvbXBpbGUgYnkgaW5cbiAgICBsZXQgcmVjIGJ1aWxkIGFjYyBzdGF0ZSA9XG4gICAgICBtYXRjaCBfc3BsaXQgfmJ5IHMgc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IExpc3QucmV2IGFjY1xuICAgICAgfCBTb21lIChzdGF0ZScsIDAsIDApIHdoZW4gZHJvcC5maXJzdCAtPiBidWlsZCBhY2Mgc3RhdGUnXG4gICAgICB8IFNvbWUgKF8sIGksIDApIHdoZW4gZHJvcC5sYXN0ICYmIGkgPSBsZW5ndGggcyAtPiBMaXN0LnJldiBhY2NcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+IGJ1aWxkIChrIHMgaSBsZW4gOjogYWNjKSBzdGF0ZSdcbiAgICBpblxuICAgIGJ1aWxkIFtdIChTcGxpdEF0IDApXG5cbiAgbGV0IGxpc3RfID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtsaXN0IH5kcm9wIH5ieSBzIF90dXBsZTNcbiAgbGV0IGxpc3RfY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtsaXN0IH5kcm9wIH5ieSBzIFN0cmluZy5zdWJcblxuICBsZXQgX21rc2VxIH5kcm9wIH5ieSBzIGsgPVxuICAgIGxldCBieSA9IEZpbmQuY29tcGlsZSBieSBpblxuICAgIGxldCByZWMgbWFrZSBzdGF0ZSAoKSA9XG4gICAgICBtYXRjaCBfc3BsaXQgfmJ5IHMgc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IFNlcS5OaWxcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT4gbWFrZSBzdGF0ZScgKClcbiAgICAgIHwgU29tZSAoXywgaSwgMCkgd2hlbiBkcm9wLmxhc3QgJiYgaSA9IGxlbmd0aCBzIC0+IFNlcS5OaWxcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+IFNlcS5Db25zIChrIHMgaSBsZW4sIG1ha2Ugc3RhdGUnKVxuICAgIGluXG4gICAgbWFrZSAoU3BsaXRBdCAwKVxuXG4gIGxldCBzZXEgPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta3NlcSB+ZHJvcCB+YnkgcyBfdHVwbGUzXG4gIGxldCBzZXFfY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtzZXEgfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBfbWtfaXRlciB+ZHJvcCB+YnkgcyBmIGsgPVxuICAgIGxldCBieSA9IEZpbmQuY29tcGlsZSBieSBpblxuICAgIGxldCByZWMgYXV4IHN0YXRlID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyBzdGF0ZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT4gYXV4IHN0YXRlJ1xuICAgICAgfCBTb21lIChfLCBpLCAwKSB3aGVuIGRyb3AubGFzdCAmJiBpID0gbGVuZ3RoIHMgLT4gKClcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+XG4gICAgICAgIGsgKGYgcyBpIGxlbik7XG4gICAgICAgIGF1eCBzdGF0ZSdcbiAgICBpblxuICAgIGF1eCAoU3BsaXRBdCAwKVxuXG4gIGxldCBpdGVyID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtfaXRlciB+ZHJvcCB+YnkgcyBfdHVwbGUzXG4gIGxldCBpdGVyX2NweSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rX2l0ZXIgfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBsZWZ0X2V4biB+YnkgcyA9XG4gICAgbGV0IGkgPSBmaW5kIH5zdWI6YnkgcyBpblxuICAgIGlmIGkgPSB+LTEgdGhlblxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgZWxzZSAoXG4gICAgICBsZXQgcmlnaHQgPSBpICsgU3RyaW5nLmxlbmd0aCBieSBpblxuICAgICAgU3RyaW5nLnN1YiBzIDAgaSwgU3RyaW5nLnN1YiBzIHJpZ2h0IChTdHJpbmcubGVuZ3RoIHMgLSByaWdodClcbiAgICApXG5cbiAgbGV0IGxlZnQgfmJ5IHMgPSB0cnkgU29tZSAobGVmdF9leG4gfmJ5IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxuICBsZXQgcmlnaHRfZXhuIH5ieSBzID1cbiAgICBsZXQgaSA9IHJmaW5kIH5zdWI6YnkgcyBpblxuICAgIGlmIGkgPSB+LTEgdGhlblxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgZWxzZSAoXG4gICAgICBsZXQgcmlnaHQgPSBpICsgU3RyaW5nLmxlbmd0aCBieSBpblxuICAgICAgU3RyaW5nLnN1YiBzIDAgaSwgU3RyaW5nLnN1YiBzIHJpZ2h0IChTdHJpbmcubGVuZ3RoIHMgLSByaWdodClcbiAgICApXG5cbiAgbGV0IHJpZ2h0IH5ieSBzID0gdHJ5IFNvbWUgKHJpZ2h0X2V4biB+Ynkgcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuZW5kXG5cbmxldCBzcGxpdCB+YnkgcyA9IFNwbGl0Lmxpc3RfY3B5IH5ieSBzXG5cbmxldCBjb21wYXJlX3ZlcnNpb25zIGEgYiA9XG4gIGxldCBvZl9pbnQgcyA9IHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpIHdpdGggRmFpbHVyZSBfIC0+IE5vbmUgaW5cbiAgbGV0IHJlYyBjbXBfcmVjIGEgYiA9XG4gICAgbWF0Y2ggYSAoKSwgYiAoKSB3aXRoXG4gICAgfCBOb25lLCBOb25lIC0+IDBcbiAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgICB8IFNvbWUgeCwgU29tZSB5IC0+XG4gICAgICAobWF0Y2ggb2ZfaW50IHgsIG9mX2ludCB5IHdpdGhcbiAgICAgIHwgTm9uZSwgTm9uZSAtPlxuICAgICAgICBsZXQgYyA9IFN0cmluZy5jb21wYXJlIHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiXG4gICAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgICB8IE5vbmUsIFNvbWUgXyAtPiAtMVxuICAgICAgfCBTb21lIHgsIFNvbWUgeSAtPlxuICAgICAgICBsZXQgYyA9IGNvbXBhcmVfaW50IHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiKVxuICBpblxuICBjbXBfcmVjIChTcGxpdC5nZW5fY3B5IH5ieTpcIi5cIiBhKSAoU3BsaXQuZ2VuX2NweSB+Ynk6XCIuXCIgYilcblxudHlwZSBuYXRfY2h1bmsgPSBOQ19jaGFyIG9mIGNoYXIgfCBOQ19pbnQgb2YgaW50XG5cbmxldCBjb21wYXJlX25hdHVyYWwgYSBiID1cbiAgKCogc3RyZWFtIG9mIGNodW5rcyAqKVxuICBsZXQgY2h1bmtzIHMgOiB1bml0IC0+IG5hdF9jaHVuayBvcHRpb24gPVxuICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICBsZXQgcmVjIG5leHQgKCkgPVxuICAgICAgaWYgIWkgPSBsZW5ndGggcyB0aGVuXG4gICAgICAgIE5vbmVcbiAgICAgIGVsc2UgKFxuICAgICAgICBtYXRjaCBTdHJpbmcuZ2V0IHMgIWkgd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgICAgICAgIGluY3IgaTtcbiAgICAgICAgICByZWFkX2ludCAoQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnKVxuICAgICAgICB8IGMgLT5cbiAgICAgICAgICBpbmNyIGk7XG4gICAgICAgICAgU29tZSAoTkNfY2hhciBjKVxuICAgICAgKVxuICAgIGFuZCByZWFkX2ludCBuID1cbiAgICAgIGlmICFpID0gbGVuZ3RoIHMgdGhlblxuICAgICAgICBTb21lIChOQ19pbnQgbilcbiAgICAgIGVsc2UgKFxuICAgICAgICBtYXRjaCBTdHJpbmcuZ2V0IHMgIWkgd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgICAgICAgIGluY3IgaTtcbiAgICAgICAgICByZWFkX2ludCAoKDEwICogbikgKyBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCcpXG4gICAgICAgIHwgXyAtPiBTb21lIChOQ19pbnQgbilcbiAgICAgIClcbiAgICBpblxuICAgIG5leHRcbiAgaW5cbiAgbGV0IHJlYyBjbXBfcmVjIGEgYiA9XG4gICAgbWF0Y2ggYSAoKSwgYiAoKSB3aXRoXG4gICAgfCBOb25lLCBOb25lIC0+IDBcbiAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgICB8IFNvbWUgeCwgU29tZSB5IC0+XG4gICAgICAobWF0Y2ggeCwgeSB3aXRoXG4gICAgICB8IE5DX2NoYXIgeCwgTkNfY2hhciB5IC0+XG4gICAgICAgIGxldCBjID0gQ2hhci5jb21wYXJlIHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiXG4gICAgICB8IE5DX2ludCBfLCBOQ19jaGFyIF8gLT4gMVxuICAgICAgfCBOQ19jaGFyIF8sIE5DX2ludCBfIC0+IC0xXG4gICAgICB8IE5DX2ludCB4LCBOQ19pbnQgeSAtPlxuICAgICAgICBsZXQgYyA9IGNvbXBhcmVfaW50IHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiKVxuICBpblxuICBjbXBfcmVjIChjaHVua3MgYSkgKGNodW5rcyBiKVxuXG5sZXQgZWRpdF9kaXN0YW5jZSA/KGN1dG9mZiA9IG1heF9pbnQpIHMxIHMyID1cbiAgbGV0IG4xID0gbGVuZ3RoIHMxIGluXG4gIGxldCBuMiA9IGxlbmd0aCBzMiBpblxuICBpZiBuMSA9IDAgdGhlblxuICAgIG1pbiBjdXRvZmYgbjJcbiAgZWxzZSBpZiBuMiA9IDAgdGhlblxuICAgIG1pbiBjdXRvZmYgbjFcbiAgZWxzZSBpZiBlcXVhbCBzMSBzMiB0aGVuXG4gICAgMFxuICBlbHNlIGlmIG4xIC0gbjIgPj0gY3V0b2ZmIHx8IG4yIC0gbjEgPj0gY3V0b2ZmIHRoZW5cbiAgICBjdXRvZmZcbiAgKCogYXQgbGVhc3QgY3V0b2ZmIGluc2VydHMgKilcbiAgZWxzZSAoXG4gICAgdHJ5XG4gICAgICAoKiBkaXN0YW5jZSB2ZWN0b3JzICh2MD1wcmV2aW91cywgdjE9Y3VycmVudCkgKilcbiAgICAgIGxldCB2MCA9IEFycmF5Lm1ha2UgKGxlbmd0aCBzMiArIDEpIDAgaW5cbiAgICAgIGxldCB2MSA9IEFycmF5Lm1ha2UgKGxlbmd0aCBzMiArIDEpIDAgaW5cbiAgICAgICgqIGluaXRpYWxpemUgdjA6IHYwKGkpID0gQSgwKShpKSA9IGRlbGV0ZSBpIGNoYXJzIGZyb20gdCAqKVxuICAgICAgbGV0IGxvd2VyX2JvdW5kID0gcmVmIG1heF9pbnQgaW5cbiAgICAgIGZvciBpID0gMCB0byBsZW5ndGggczIgZG9cbiAgICAgICAgdjAuKGkpIDwtIGlcbiAgICAgIGRvbmU7XG4gICAgICAoKiBtYWluIGxvb3AgZm9yIHRoZSBib3R0b20gdXAgZHluYW1pYyBhbGdvcml0aG0gKilcbiAgICAgIGZvciBpID0gMCB0byBsZW5ndGggczEgLSAxIGRvXG4gICAgICAgICgqIGZpcnN0IGVkaXQgZGlzdGFuY2UgaXMgdGhlIGRlbGV0aW9uIG9mIGkrMSBlbGVtZW50cyBmcm9tIHMgKilcbiAgICAgICAgdjEuKDApIDwtIGkgKyAxO1xuXG4gICAgICAgICgqIHRyeSBhZGQvZGVsZXRlL3JlcGxhY2Ugb3BlcmF0aW9ucyAqKVxuICAgICAgICBmb3IgaiA9IDAgdG8gbGVuZ3RoIHMyIC0gMSBkb1xuICAgICAgICAgIGxldCBjb3N0ID1cbiAgICAgICAgICAgIGlmIENoYXIuZXF1YWwgKFN0cmluZy5nZXQgczEgaSkgKFN0cmluZy5nZXQgczIgaikgdGhlblxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICBpblxuICAgICAgICAgIHYxLihqICsgMSkgPC0gbWluICh2MS4oaikgKyAxKSAobWluICh2MC4oaiArIDEpICsgMSkgKHYwLihqKSArIGNvc3QpKVxuICAgICAgICBkb25lO1xuXG4gICAgICAgIGlmXG4gICAgICAgICAgY3V0b2ZmIDwgQXJyYXkubGVuZ3RoIHYxXG4gICAgICAgICAgJiYgaSA8PSAyICogY3V0b2ZmXG4gICAgICAgICAgJiYgKDIgKiBjdXRvZmYpIC0gaSA8IFN0cmluZy5sZW5ndGggczJcbiAgICAgICAgdGhlblxuICAgICAgICAgIGxvd2VyX2JvdW5kIDo9IG1pbiAhbG93ZXJfYm91bmQgdjEuKCgyICogY3V0b2ZmKSAtIGkpO1xuICAgICAgICAoKiBkaWQgd2UgY29tcHV0ZSB1cCB0byB0aGUgZGlhZ29uYWwgMipjdXRvZmYrMT8gKilcbiAgICAgICAgaWYgY3V0b2ZmIDwgQXJyYXkubGVuZ3RoIHYxICYmIGkgPSBjdXRvZmYgKiAyICYmICFsb3dlcl9ib3VuZCA+PSBjdXRvZmZcbiAgICAgICAgdGhlblxuICAgICAgICAgIHJhaXNlX25vdHJhY2UgRXhpdDtcblxuICAgICAgICAoKiBjb3B5IHYxIGludG8gdjAgZm9yIG5leHQgaXRlcmF0aW9uICopXG4gICAgICAgIEFycmF5LmJsaXQgdjEgMCB2MCAwIChsZW5ndGggczIgKyAxKVxuICAgICAgZG9uZTtcbiAgICAgIHYxLihsZW5ndGggczIpXG4gICAgd2l0aCBFeGl0IC0+IGN1dG9mZlxuICApXG5cbmxldCByZXBlYXQgcyBuID1cbiAgYXNzZXJ0IChuID49IDApO1xuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGFzc2VydCAobGVuID4gMCk7XG4gIGluaXQgKGxlbiAqIG4pIChmdW4gaSAtPiBzLltpIG1vZCBsZW5dKVxuXG5sZXQgcHJlZml4IH5wcmUgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHByZSBpblxuICBpZiBsZW4gPiBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgIGZhbHNlXG4gIGVsc2UgKFxuICAgIGxldCByZWMgY2hlY2sgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW5cbiAgICAgICAgdHJ1ZVxuICAgICAgZWxzZSBpZiBTdGRsaWIuKCA8PiApIChTdHJpbmcudW5zYWZlX2dldCBzIGkpIChTdHJpbmcudW5zYWZlX2dldCBwcmUgaSlcbiAgICAgIHRoZW5cbiAgICAgICAgZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgY2hlY2sgKGkgKyAxKVxuICAgIGluXG4gICAgY2hlY2sgMFxuICApXG5cbmxldCBzdWZmaXggfnN1ZiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3VmIGluXG4gIGlmIGxlbiA+IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgZmFsc2VcbiAgZWxzZSAoXG4gICAgbGV0IG9mZiA9IFN0cmluZy5sZW5ndGggcyAtIGxlbiBpblxuICAgIGxldCByZWMgY2hlY2sgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW5cbiAgICAgICAgdHJ1ZVxuICAgICAgZWxzZSBpZlxuICAgICAgICBTdGRsaWIuKCA8PiApIChTdHJpbmcudW5zYWZlX2dldCBzIChvZmYgKyBpKSkgKFN0cmluZy51bnNhZmVfZ2V0IHN1ZiBpKVxuICAgICAgdGhlblxuICAgICAgICBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBjaGVjayAoaSArIDEpXG4gICAgaW5cbiAgICBjaGVjayAwXG4gIClcblxubGV0IHRha2UgbiBzID1cbiAgaWYgbiA8IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgU3RyaW5nLnN1YiBzIDAgblxuICBlbHNlXG4gICAgc1xuXG5sZXQgZHJvcCBuIHMgPVxuICBpZiBuIDwgU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICBTdHJpbmcuc3ViIHMgbiAoU3RyaW5nLmxlbmd0aCBzIC0gbilcbiAgZWxzZVxuICAgIFwiXCJcblxubGV0IHRha2VfZHJvcCBuIHMgPSB0YWtlIG4gcywgZHJvcCBuIHNcblxubGV0IGNob3Bfc3VmZml4IH5zdWYgcyA9XG4gIGlmIHN1ZmZpeCB+c3VmIHMgdGhlblxuICAgIFNvbWUgKFN0cmluZy5zdWIgcyAwIChTdHJpbmcubGVuZ3RoIHMgLSBTdHJpbmcubGVuZ3RoIHN1ZikpXG4gIGVsc2VcbiAgICBOb25lXG5cbmxldCBjaG9wX3ByZWZpeCB+cHJlIHMgPVxuICBpZiBwcmVmaXggfnByZSBzIHRoZW5cbiAgICBTb21lXG4gICAgICAoU3RyaW5nLnN1YiBzIChTdHJpbmcubGVuZ3RoIHByZSkgKFN0cmluZy5sZW5ndGggcyAtIFN0cmluZy5sZW5ndGggcHJlKSlcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IGJsaXQgPSBTdHJpbmcuYmxpdFxuXG5sZXQgZm9sZCBmIGFjYyBzID1cbiAgbGV0IHJlYyBmb2xkX3JlYyBmIGFjYyBzIGkgPVxuICAgIGlmIGkgPSBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgZm9sZF9yZWMgZiAoZiBhY2Mgcy5baV0pIHMgKGkgKyAxKVxuICBpblxuICBmb2xkX3JlYyBmIGFjYyBzIDBcblxubGV0IGZvbGRpIGYgYWNjIHMgPVxuICBsZXQgcmVjIGZvbGRfcmVjIGYgYWNjIHMgaSA9XG4gICAgaWYgaSA9IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBmb2xkX3JlYyBmIChmIGFjYyBpIHMuW2ldKSBzIChpICsgMSlcbiAgaW5cbiAgZm9sZF9yZWMgZiBhY2MgcyAwXG5cbmxldCBwYWQgPyhzaWRlID0gYExlZnQpID8oYyA9ICcgJykgbiBzID1cbiAgbGV0IGxlbl9zID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGlmIGxlbl9zID49IG4gdGhlblxuICAgIHNcbiAgZWxzZSAoXG4gICAgbGV0IHBhZF9sZW4gPSBuIC0gbGVuX3MgaW5cbiAgICBtYXRjaCBzaWRlIHdpdGhcbiAgICB8IGBMZWZ0IC0+XG4gICAgICBpbml0IG4gKGZ1biBpIC0+XG4gICAgICAgICAgaWYgaSA8IHBhZF9sZW4gdGhlblxuICAgICAgICAgICAgY1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHMuW2kgLSBwYWRfbGVuXSlcbiAgICB8IGBSaWdodCAtPlxuICAgICAgaW5pdCBuIChmdW4gaSAtPlxuICAgICAgICAgIGlmIGkgPCBsZW5fcyB0aGVuXG4gICAgICAgICAgICBzLltpXVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGMpXG4gIClcblxubGV0IF90b19nZW4gcyBpMCBsZW4gPVxuICBsZXQgaSA9IHJlZiBpMCBpblxuICBmdW4gKCkgLT5cbiAgICBpZiAhaSA9IGkwICsgbGVuIHRoZW5cbiAgICAgIE5vbmVcbiAgICBlbHNlIChcbiAgICAgIGxldCBjID0gU3RyaW5nLnVuc2FmZV9nZXQgcyAhaSBpblxuICAgICAgaW5jciBpO1xuICAgICAgU29tZSBjXG4gICAgKVxuXG5sZXQgdG9fZ2VuIHMgPSBfdG9fZ2VuIHMgMCAoU3RyaW5nLmxlbmd0aCBzKVxubGV0IG9mX2NoYXIgYyA9IFN0cmluZy5tYWtlIDEgY1xuXG5sZXQgb2ZfZ2VuIGcgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgbGV0IHJlYyBhdXggKCkgPVxuICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgIHwgTm9uZSAtPiBCdWZmZXIuY29udGVudHMgYlxuICAgIHwgU29tZSBjIC0+XG4gICAgICBCdWZmZXIuYWRkX2NoYXIgYiBjO1xuICAgICAgYXV4ICgpXG4gIGluXG4gIGF1eCAoKVxuXG5sZXQgdG9faXRlciBzIGsgPSBTdHJpbmcuaXRlciBrIHNcblxubGV0IHJlYyBfdG9fc2VxIHMgaSBsZW4gKCkgPVxuICBpZiBsZW4gPSAwIHRoZW5cbiAgICBTZXEuTmlsXG4gIGVsc2VcbiAgICBTZXEuQ29ucyAocy5baV0sIF90b19zZXEgcyAoaSArIDEpIChsZW4gLSAxKSlcblxubGV0IHRvX3NlcSBzID0gX3RvX3NlcSBzIDAgKFN0cmluZy5sZW5ndGggcylcblxubGV0IG9mX2l0ZXIgaSA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAzMiBpblxuICBpIChCdWZmZXIuYWRkX2NoYXIgYik7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cbmxldCBvZl9zZXEgc2VxID1cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gIFNlcS5pdGVyIChCdWZmZXIuYWRkX2NoYXIgYikgc2VxO1xuICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgdG9fbGlzdCBzID0gX3RvX2xpc3QgcyBbXSAwIChTdHJpbmcubGVuZ3RoIHMpXG5cbmxldCBvZl9saXN0IGwgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoTGlzdC5sZW5ndGggbCkgaW5cbiAgTGlzdC5pdGVyIChCdWZmZXIuYWRkX2NoYXIgYnVmKSBsO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBvZl9hcnJheSBhID0gaW5pdCAoQXJyYXkubGVuZ3RoIGEpIChmdW4gaSAtPiBhLihpKSlcbmxldCB0b19hcnJheSBzID0gQXJyYXkuaW5pdCAoU3RyaW5nLmxlbmd0aCBzKSAoZnVuIGkgLT4gcy5baV0pXG5cbmxldCBsaW5lc19nZW4gcyA9XG4gIFNwbGl0Lmdlbl9jcHkgfmRyb3A6eyBTcGxpdC5maXJzdCA9IGZhbHNlOyBsYXN0ID0gdHJ1ZSB9IH5ieTpcIlxcblwiIHNcblxubGV0IGxpbmVzX2l0ZXIgcyA9XG4gIFNwbGl0Lml0ZXJfY3B5IH5kcm9wOnsgU3BsaXQuZmlyc3QgPSBmYWxzZTsgbGFzdCA9IHRydWUgfSB+Ynk6XCJcXG5cIiBzXG5cbmxldCBsaW5lc19zZXEgcyA9XG4gIFNwbGl0LnNlcV9jcHkgfmRyb3A6eyBTcGxpdC5maXJzdCA9IGZhbHNlOyBsYXN0ID0gdHJ1ZSB9IH5ieTpcIlxcblwiIHNcblxubGV0IGxpbmVzIHMgPVxuICBTcGxpdC5saXN0X2NweSB+ZHJvcDp7IFNwbGl0LmZpcnN0ID0gZmFsc2U7IGxhc3QgPSB0cnVlIH0gfmJ5OlwiXFxuXCIgc1xuXG5sZXQgY29uY2F0X2dlbl9idWYgfnNlcCBnIDogQnVmZmVyLnQgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCByZWMgYXV4IH5maXJzdCAoKSA9XG4gICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgfCBOb25lIC0+IGJcbiAgICB8IFNvbWUgcyAtPlxuICAgICAgaWYgbm90IGZpcnN0IHRoZW4gQnVmZmVyLmFkZF9zdHJpbmcgYiBzZXA7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBiIHM7XG4gICAgICBhdXggfmZpcnN0OmZhbHNlICgpXG4gIGluXG4gIGF1eCB+Zmlyc3Q6dHJ1ZSAoKVxuXG5sZXQgY29uY2F0X2dlbiB+c2VwIGcgPVxuICBsZXQgYnVmID0gY29uY2F0X2dlbl9idWYgfnNlcCBnIGluXG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IGNvbmNhdF9pdGVyX2J1ZiB+c2VwIGkgOiBCdWZmZXIudCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICBpIChmdW4gcyAtPlxuICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgZmlyc3QgOj0gZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHNlcDtcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzKTtcbiAgYnVmXG5cbmxldCBjb25jYXRfaXRlciB+c2VwIGkgPVxuICBsZXQgYnVmID0gY29uY2F0X2l0ZXJfYnVmIH5zZXAgaSBpblxuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBjb25jYXRfc2VxX2J1ZiB+c2VwIHNlcSA6IEJ1ZmZlci50ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIFNlcS5pdGVyXG4gICAgKGZ1biBzIC0+XG4gICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgc2VwO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHMpXG4gICAgc2VxO1xuICBidWZcblxubGV0IGNvbmNhdF9zZXEgfnNlcCBzZXEgPVxuICBsZXQgYnVmID0gY29uY2F0X3NlcV9idWYgfnNlcCBzZXEgaW5cbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgdW5saW5lcyBsID1cbiAgbGV0IGxlbiA9IExpc3QuZm9sZF9sZWZ0IChmdW4gbiBzIC0+IG4gKyAxICsgU3RyaW5nLmxlbmd0aCBzKSAwIGwgaW5cbiAgbGV0IGJ1ZiA9IEJ5dGVzLmNyZWF0ZSBsZW4gaW5cbiAgbGV0IHJlYyBhdXhfYmxpdCBpIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT5cbiAgICAgIGFzc2VydCAoaSA9IGxlbik7XG4gICAgICBCeXRlcy50b19zdHJpbmcgYnVmXG4gICAgfCBzIDo6IHRhaWwgLT5cbiAgICAgIGxldCBsZW5fcyA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgICAgQnl0ZXMuYmxpdF9zdHJpbmcgcyAwIGJ1ZiBpIGxlbl9zO1xuICAgICAgQnl0ZXMuc2V0IGJ1ZiAoaSArIGxlbl9zKSAnXFxuJztcbiAgICAgIGF1eF9ibGl0IChpICsgbGVuX3MgKyAxKSB0YWlsXG4gIGluXG4gIGF1eF9ibGl0IDAgbFxuXG5sZXQgdW5saW5lc19nZW4gZyA9XG4gIGxldCBidWYgPSBjb25jYXRfZ2VuX2J1ZiB+c2VwOlwiXFxuXCIgZyBpblxuICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCB1bmxpbmVzX2l0ZXIgaSA9XG4gIGxldCBidWYgPSBjb25jYXRfaXRlcl9idWYgfnNlcDpcIlxcblwiIGkgaW5cbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgdW5saW5lc19zZXEgc2VxID1cbiAgbGV0IGJ1ZiA9IGNvbmNhdF9zZXFfYnVmIH5zZXA6XCJcXG5cIiBzZXEgaW5cbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgc2V0IHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBTdHJpbmcubGVuZ3RoIHMgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLnNldFwiO1xuICBpbml0IChTdHJpbmcubGVuZ3RoIHMpIChmdW4gaiAtPlxuICAgICAgaWYgaSA9IGogdGhlblxuICAgICAgICBjXG4gICAgICBlbHNlXG4gICAgICAgIHMuW2pdKVxuXG5sZXQgaXRlciA9IFN0cmluZy5pdGVyXG5cbmxldCBmaWx0ZXJfbWFwIGYgcyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gIGl0ZXJcbiAgICAoZnVuIGMgLT5cbiAgICAgIG1hdGNoIGYgYyB3aXRoXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSBjJyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmIGMnKVxuICAgIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IGZpbHRlciBmIHMgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICBpdGVyIChmdW4gYyAtPiBpZiBmIGMgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYnVmIGMpIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHVuaXEgZXEgcyA9XG4gIGlmIFN0cmluZy5sZW5ndGggcyA9IDAgdGhlblxuICAgIHNcbiAgZWxzZSAoXG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIHMuWzBdO1xuICAgIGxldCBfID1cbiAgICAgIGZvbGRcbiAgICAgICAgKGZ1biBwcmV2aW91c19jIGMgLT5cbiAgICAgICAgICBpZiBub3QgKGVxIHByZXZpb3VzX2MgYykgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYnVmIGM7XG4gICAgICAgICAgYylcbiAgICAgICAgcy5bMF0gc1xuICAgIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICApXG5cbmxldCBmbGF0X21hcCA/c2VwIGYgcyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gIGl0ZXJpXG4gICAgKGZ1biBpIGMgLT5cbiAgICAgIChtYXRjaCBzZXAgd2l0aFxuICAgICAgfCBTb21lIF8gd2hlbiBpID0gMCAtPiAoKVxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgc2VwIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzZXApO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChmIGMpKVxuICAgIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxuZXhjZXB0aW9uIE15RXhpdFxuXG5sZXQgZm9yX2FsbCBwIHMgPVxuICB0cnlcbiAgICBpdGVyIChmdW4gYyAtPiBpZiBub3QgKHAgYykgdGhlbiByYWlzZSBNeUV4aXQpIHM7XG4gICAgdHJ1ZVxuICB3aXRoIE15RXhpdCAtPiBmYWxzZVxuXG5sZXQgZXhpc3RzIHAgcyA9XG4gIHRyeVxuICAgIGl0ZXIgKGZ1biBjIC0+IGlmIHAgYyB0aGVuIHJhaXNlIE15RXhpdCkgcztcbiAgICBmYWxzZVxuICB3aXRoIE15RXhpdCAtPiB0cnVlXG5cbmxldCBkcm9wX3doaWxlIGYgcyA9XG4gIGxldCBpID0gcmVmIDAgaW5cbiAgd2hpbGUgIWkgPCBsZW5ndGggcyAmJiBmICh1bnNhZmVfZ2V0IHMgIWkpIGRvXG4gICAgaW5jciBpXG4gIGRvbmU7XG4gIGlmICFpID4gMCB0aGVuXG4gICAgc3ViIHMgIWkgKGxlbmd0aCBzIC0gIWkpXG4gIGVsc2VcbiAgICBzXG5cbmxldCByZHJvcF93aGlsZSBmIHMgPVxuICBsZXQgaSA9IHJlZiAobGVuZ3RoIHMgLSAxKSBpblxuICB3aGlsZSAhaSA+PSAwICYmIGYgKHVuc2FmZV9nZXQgcyAhaSkgZG9cbiAgICBkZWNyIGlcbiAgZG9uZTtcbiAgaWYgIWkgPCBsZW5ndGggcyAtIDEgdGhlblxuICAgIHN1YiBzIDAgKCFpICsgMSlcbiAgZWxzZVxuICAgIHNcblxuKCogbm90aW9uIG9mIHdoaXRlc3BhY2UgZm9yIHRyaW0gKilcbmxldCBpc19zcGFjZV8gPSBmdW5jdGlvblxuICB8ICcgJyB8ICdcXDAxMicgfCAnXFxuJyB8ICdcXHInIHwgJ1xcdCcgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxubGV0IGx0cmltIHMgPSBkcm9wX3doaWxlIGlzX3NwYWNlXyBzXG5sZXQgcnRyaW0gcyA9IHJkcm9wX3doaWxlIGlzX3NwYWNlXyBzXG5cbmxldCBtYXAyIGYgczEgczIgPVxuICBpZiBsZW5ndGggczEgPD4gbGVuZ3RoIHMyIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5tYXAyXCI7XG4gIGluaXQgKFN0cmluZy5sZW5ndGggczEpIChmdW4gaSAtPiBmIHMxLltpXSBzMi5baV0pXG5cbmxldCBpdGVyMiBmIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuaXRlcjJcIjtcbiAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggczEgLSAxIGRvXG4gICAgZiBzMS5baV0gczIuW2ldXG4gIGRvbmVcblxubGV0IGl0ZXJpMiBmIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuaXRlcmkyXCI7XG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMxIC0gMSBkb1xuICAgIGYgaSBzMS5baV0gczIuW2ldXG4gIGRvbmVcblxubGV0IGZvbGQyIGYgYWNjIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuZm9sZDJcIjtcbiAgbGV0IHJlYyBmb2xkJyBhY2MgczEgczIgaSA9XG4gICAgaWYgaSA9IFN0cmluZy5sZW5ndGggczEgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgZm9sZCcgKGYgYWNjIHMxLltpXSBzMi5baV0pIHMxIHMyIChpICsgMSlcbiAgaW5cbiAgZm9sZCcgYWNjIHMxIHMyIDBcblxubGV0IGZvcl9hbGwyIHAgczEgczIgPVxuICB0cnlcbiAgICBpdGVyMiAoZnVuIGMxIGMyIC0+IGlmIG5vdCAocCBjMSBjMikgdGhlbiByYWlzZSBNeUV4aXQpIHMxIHMyO1xuICAgIHRydWVcbiAgd2l0aCBNeUV4aXQgLT4gZmFsc2VcblxubGV0IGV4aXN0czIgcCBzMSBzMiA9XG4gIHRyeVxuICAgIGl0ZXIyIChmdW4gYzEgYzIgLT4gaWYgcCBjMSBjMiB0aGVuIHJhaXNlIE15RXhpdCkgczEgczI7XG4gICAgZmFsc2VcbiAgd2l0aCBNeUV4aXQgLT4gdHJ1ZVxuXG4oKiogezIgQXNjaWkgZnVuY3Rpb25zfSAqKVxuXG5sZXQgZXF1YWxfY2FzZWxlc3MgczEgczIgOiBib29sID1cbiAgU3RyaW5nLmxlbmd0aCBzMSA9IFN0cmluZy5sZW5ndGggczJcbiAgJiYgZm9yX2FsbDJcbiAgICAgICAoZnVuIGMxIGMyIC0+XG4gICAgICAgICBDQ0NoYXIuZXF1YWwgKENDQ2hhci5sb3dlcmNhc2VfYXNjaWkgYzEpIChDQ0NoYXIubG93ZXJjYXNlX2FzY2lpIGMyKSlcbiAgICAgICBzMSBzMlxuXG5sZXQgdG9faGV4IChzIDogc3RyaW5nKSA6IHN0cmluZyA9XG4gIGxldCBpX3RvX2hleCAoaSA6IGludCkgPVxuICAgIGlmIGkgPCAxMCB0aGVuXG4gICAgICBDaGFyLmNociAoaSArIENoYXIuY29kZSAnMCcpXG4gICAgZWxzZVxuICAgICAgQ2hhci5jaHIgKGkgLSAxMCArIENoYXIuY29kZSAnYScpXG4gIGluXG5cbiAgbGV0IHJlcyA9IEJ5dGVzLmNyZWF0ZSAoMiAqIGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvXG4gICAgbGV0IG4gPSBDaGFyLmNvZGUgKGdldCBzIGkpIGluXG4gICAgQnl0ZXMuc2V0IHJlcyAoMiAqIGkpIChpX3RvX2hleCAoKG4gbGFuZCAweGYwKSBsc3IgNCkpO1xuICAgIEJ5dGVzLnNldCByZXMgKCgyICogaSkgKyAxKSAoaV90b19oZXggKG4gbGFuZCAweDBmKSlcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxubGV0IG9mX2hleF9leG4gKHMgOiBzdHJpbmcpIDogc3RyaW5nID1cbiAgbGV0IG5fb2ZfYyA9IGZ1bmN0aW9uXG4gICAgfCAnMCcgLi4gJzknIGFzIGMgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnXG4gICAgfCAnYScgLi4gJ2YnIGFzIGMgLT4gMTAgKyBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnYSdcbiAgICB8ICdBJyAuLiAnRicgYXMgYyAtPiAxMCArIENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdBJ1xuICAgIHwgXyAtPiBpbnZhbGlkX2FyZyBcInN0cmluZzogaW52YWxpZCBoZXhcIlxuICBpblxuICBpZiBTdHJpbmcubGVuZ3RoIHMgbW9kIDIgPD4gMCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJzdHJpbmc6IGhleCBzZXF1ZW5jZSBtdXN0IGJlIG9mIGV2ZW4gbGVuZ3RoXCI7XG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChTdHJpbmcubGVuZ3RoIHMgLyAyKSAnXFx4MDAnIGluXG4gIGZvciBpID0gMCB0byAoU3RyaW5nLmxlbmd0aCBzIC8gMikgLSAxIGRvXG4gICAgbGV0IG4xID0gbl9vZl9jIChTdHJpbmcuZ2V0IHMgKDIgKiBpKSkgaW5cbiAgICBsZXQgbjIgPSBuX29mX2MgKFN0cmluZy5nZXQgcyAoKDIgKiBpKSArIDEpKSBpblxuICAgIGxldCBuID0gKG4xIGxzbCA0KSBsb3IgbjIgaW5cbiAgICBCeXRlcy5zZXQgcmVzIGkgKENoYXIuY2hyIG4pXG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbmxldCBvZl9oZXggcyA9IHRyeSBTb21lIChvZl9oZXhfZXhuIHMpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcblxubGV0IHBwX2J1ZiBidWYgcyA9XG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJztcbiAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHM7XG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJ1xuXG5sZXQgcHAgZm10IHMgPSBGb3JtYXQuZnByaW50ZiBmbXQgXCJcXFwiJXNcXFwiXCIgc1xuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPSApID0gZXF1YWxcbiAgbGV0ICggPD4gKSBhIGIgPSBub3QgKGVxdWFsIGEgYilcbiAgbGV0ICggPiApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+IClcbiAgbGV0ICggPj0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPj0gKVxuICBsZXQgKCA8ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDwgKVxuICBsZXQgKCA8PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8PSApXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuIiwib3BlbiBMZXhpbmdcblxuZXhjZXB0aW9uIExleF9lcnJvciBvZiBzdHJpbmdcblxubGV0IGxleF9lcnJvciBlcnIgPSByYWlzZSAoTGV4X2Vycm9yIGVycilcblxubGV0IGVycm9yX3BvcyBsZXhidWYgPSBcbiAgbGV0IHN0YXJ0ID0gbGV4YnVmLmxleF9zdGFydF9wIGluXG4gIGxldCBjbnVtID0gbGV4YnVmLmxleF9sYXN0X3BvcyAtIHN0YXJ0LnBvc19ib2wgaW5cbiAgbGV0IGVudW0gPSBsZXhidWYubGV4X2N1cnJfcG9zIC0gc3RhcnQucG9zX2JvbCBpblxuICAoc3RhcnQucG9zX2xudW0sIGNudW0sIGVudW0pXG5cbmxldCBlcnJvcl9wb3NfbXNnIChsZXhidWYgOiBMZXhpbmcubGV4YnVmKSA9XG4gIGxldCAobGluZSwgY251bSwgZW51bSkgPSBlcnJvcl9wb3MgbGV4YnVmIGluXG4gICAgUHJpbnRmLnNwcmludGYgXCJsaW5lICVkIGNoYXJzICVkLSVkXCIgbGluZSBjbnVtIGVudW1cblxubGV0IHN0cmluZzJudW0gcyA9XG4gIHRyeSAoVG9rZW5zLklOVCAoaW50X29mX3N0cmluZyBzKSkgd2l0aFxuICB8IEZhaWx1cmUgXyAtPiBUb2tlbnMuTEFSR0VJTlQgc1xuXG5sZXQgdXBkYXRlX3BvcyBsZXhidWYgPVxuICBsZXQgcG9zID0gbGV4YnVmLmxleF9zdGFydF9wIGluXG4gIGxleGJ1Zi5sZXhfc3RhcnRfcCA8LVxuICAgIHsgcG9zIHdpdGggcG9zX2JvbCA9IGxleGJ1Zi5sZXhfc3RhcnRfcG9zO1xuICAgICAgICAgICAgICAgcG9zX2xudW0gPSBwb3MucG9zX2xudW0gKyAxXG4gICAgfVxuXG5sZXQgaW50X29mX2hleGNoYXIgYyA9XG4gIG1hdGNoIGMgd2l0aFxuICB8ICcwJy4uJzknIC0+IGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnMCdcbiAgfCAnYScuLidmJyAtPiBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJ2EnICsgMTBcbiAgfCAnQScuLidGJyAtPiBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJ0EnICsgMTBcbiAgfCBjIC0+IGxleF9lcnJvciAoXCJpbnZhbGlkIGhleCBjaGFyIGluIHVuaWNvZGUgZXNjYXBlOiAnXCIgXiAoU3RyaW5nLm1ha2UgMSBjKSBeIFwiJ1wiKVxuXG5cbmxldCB1dGY4X29mX2NvZGUgYnVmIGlkeCB1ID1cbiAgbGV0IGkgPSByZWYgaWR4IGluXG5cbiAgbGV0IGFkZF9jaGFyIGIgYyA9IEJ5dGVzLnVuc2FmZV9zZXQgYiAhaSBjOyBpIDo9ICFpICsgMSBpblxuXG4gIGxldCBtYXhfdXNlZF9iaXRzIG4gdSA9ICh1IGxzciBuKSA9IDAgaW5cblxuICBpZiBtYXhfdXNlZF9iaXRzIDcgdSB0aGVuXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociB1KVxuICBlbHNlIGlmIG1heF91c2VkX2JpdHMgMTEgdSB0aGVuIGJlZ2luXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMTAwMDAwMCBsb3IgKCh1IGxzciA2KSBsYW5kIDBiMDAwMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICBsYW5kIDBiMDAxMTExMTEpKSlcbiAgZW5kXG4gIGVsc2UgaWYgbWF4X3VzZWRfYml0cyAxNiB1IHRoZW4gYmVnaW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjExMTAwMDAwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDBiMDAwMDExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICh1ICAgICAgICAgIGxhbmQgMGIwMDExMTExMSkpKVxuICBlbmRcbiAgZWxzZSBpZiBtYXhfdXNlZF9iaXRzIDIxIHUgdGhlbiBiZWdpblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTExMTAwMDAgbG9yICgodSBsc3IgMTgpIGxhbmQgMGIwMDAwMDExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICh1ICAgICAgICAgIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgZW5kXG4gIGVsc2UgaWYgbWF4X3VzZWRfYml0cyAyNiB1IHRoZW4gYmVnaW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjExMTExMDAwIGxvciAoKHUgbHNyIDI0KSBsYW5kIDBiMDAwMDAwMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAxOCkgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMTIpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyICA2KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICAgbGFuZCAwYjAwMTExMTExKSkpO1xuICBlbmRcbiAgZWxzZSBiZWdpblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTExMTExMDAgbG9yICgodSBsc3IgMzApIGxhbmQgMGIwMDAwMDAwMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDI0KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAxOCkgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMTIpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyICA2KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICAgbGFuZCAwYjAwMTExMTExKSkpO1xuICBlbmQ7XG4gICFpXG5cbmxldCB1dGY4X29mX3N1cnJvZ2F0ZV9wYWlyIGJ1ZiBpZHggaGlnaCBsb3cgPVxuICBsZXQgaGlnaCA9IGhpZ2ggLSAweEQ4MDAgaW5cbiAgbGV0IGxvdyA9IGxvdyAtIDB4REMwMCBpblxuICBsZXQgY29kZSA9IDB4MTAwMDAgKyAoKGhpZ2ggbHNsIDEwKSBsb3IgbG93KSBpblxuICAgIHV0Zjhfb2ZfY29kZSBidWYgaWR4IGNvZGVcblxubGV0IGVzY2FwaW5nX2Vycm9yIG1zZyBzIGMgb2ZmID1cbiAgbGV0IG9mZnMgPSBzdHJpbmdfb2ZfaW50IG9mZiBpblxuICBsZXQgY3MgPVxuICAgIG1hdGNoIGMgd2l0aFxuICAgIHwgU29tZSBjIC0+IFwiICdcIiBeIChTdHJpbmcubWFrZSAxIGMpIF4gXCInIFwiXG4gICAgfCBOb25lIC0+IFwiXCJcbiAgaW5cbiAgICBsZXhfZXJyb3IgKG1zZyBeIFwiIGF0IG9mZnNldCBcIiBeIG9mZnMgXiBjcyBeIFwiOiBcIiBeIHMpXG5cbmxldCB1bmVzY2FwZV9zdHJpbmcgcyA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBzJyA9IEJ5dGVzLmNyZWF0ZSBsIGluXG4gIGxldCBqID0gcmVmIDAgaW5cbiAgbGV0IHUxID0gcmVmIDAgaW5cbiAgbGV0IHUyID0gcmVmIDAgaW5cbiAgbGV0IHN0YXRlID0gcmVmIGBDaGFyIGluXG5cbiAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgbWF0Y2ggIXN0YXRlIHdpdGhcbiAgICB8IGBDaGFyIC0+IGJlZ2luXG4gICAgICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICAgICB8ICdcXFxcJyAtPiBzdGF0ZSA6PSBgRXNjYXBlXG4gICAgICAgICB8IGMgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiBjOyBqIDo9ICFqICsgMVxuICAgICAgIGVuZDtcbiAgICB8IGBFc2NhcGUgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgICB8ICdcIicgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJ1wiJzsgICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAnXFxcXCcgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxcXCc7ICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAnLycgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJy8nOyAgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdiJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxiJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdmJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFwwMTInOyBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICduJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxuJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdyJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxyJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICd0JyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFx0JzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICd1JyAgLT4gc3RhdGUgOj0gYFUxX2gxXG4gICAgICAgfCBfICAgIC0+IGVzY2FwaW5nX2Vycm9yIFwiaW52YWxpZCBlc2NhcGUgaW4gc3RyaW5nXCIgcyAoU29tZSBzLltpXSkgaVxuICAgICAgZW5kO1xuICAgIHwgYFUxX2gxIC0+IHUxIDo9IGludF9vZl9oZXhjaGFyIHMuW2ldOyAgc3RhdGUgOj0gYFUxX2gyXG4gICAgfCBgVTFfaDIgLT4gdTEgOj0gKCF1MSBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7ICBzdGF0ZSA6PSBgVTFfaDNcbiAgICB8IGBVMV9oMyAtPiB1MSA6PSAoIXUxIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTsgIHN0YXRlIDo9IGBVMV9oNFxuICAgIHwgYFUxX2g0IC0+XG4gICAgICB1MSA6PSAoIXUxIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTtcbiAgICAgIGlmICF1MSA+PSAweEQ4MDAgJiYgIXUxIDw9IDB4REJGRiB0aGVuXG4gICAgICAgIHN0YXRlIDo9IGBVMl9ic1xuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBqIDo9IHV0Zjhfb2ZfY29kZSBzJyAhaiAhdTE7XG4gICAgICAgIHN0YXRlIDo9IGBDaGFyXG4gICAgICBlbmRcbiAgICB8IGBVMl9icyAtPlxuICAgICAgaWYgcy5baV0gPD4gJ1xcXFwnIHRoZW5cbiAgICAgICAgZXNjYXBpbmdfZXJyb3IgXCJleHBlY3RlZCBsb3cgc3Vycm9nYXRlIGVzY2FwZSBjaGFyIChcXFxcKVwiIHMgKFNvbWUgcy5baV0pIGlcbiAgICAgIGVsc2VcbiAgICAgICAgc3RhdGUgOj0gYFUyX3VcbiAgICB8IGBVMl91IC0+XG4gICAgICBpZiBzLltpXSA8PiAndScgdGhlblxuICAgICAgICBlc2NhcGluZ19lcnJvciBcImV4cGVjdGVkIGxvdyBzdXJyb2dhdGUgZXNjYXBlIHNlcXVlbmNlICh1KVwiIHMgKFNvbWUgcy5baV0pIGlcbiAgICAgIGVsc2VcbiAgICAgICAgc3RhdGUgOj0gYFUyX2gxXG4gICAgfCBgVTJfaDEgLT4gdTIgOj0gaW50X29mX2hleGNoYXIgcy5baV07ICBzdGF0ZSA6PSBgVTJfaDJcbiAgICB8IGBVMl9oMiAtPiB1MiA6PSAoIXUyIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTsgIHN0YXRlIDo9IGBVMl9oM1xuICAgIHwgYFUyX2gzIC0+IHUyIDo9ICghdTIgbHNsIDQpIGxvciAoaW50X29mX2hleGNoYXIgcy5baV0pOyAgc3RhdGUgOj0gYFUyX2g0XG4gICAgfCBgVTJfaDQgLT5cbiAgICAgIHN0YXRlIDo9IGBDaGFyO1xuICAgICAgdTIgOj0gKCF1MiBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7XG4gICAgICBpZiAhdTIgPj0gMHhEQzAwICYmICF1MiA8PSAweERGRkYgdGhlblxuICAgICAgICBqIDo9IHV0Zjhfb2Zfc3Vycm9nYXRlX3BhaXIgcycgIWogIXUxICF1MiBcbiAgICAgIGVsc2VcbiAgICAgICAgZXNjYXBpbmdfZXJyb3IgXCJpbnZhbGlkIGxvdyBzdXJyb2dhdGUgZm9yIGNvZGUgcG9pbnQgYmV5b25kIFUrRkZGRidcIiBzIE5vbmUgaVxuICBkb25lO1xuICBiZWdpblxuICAgIG1hdGNoICFzdGF0ZSB3aXRoXG4gICAgfCBgQ2hhciAtPiAoKVxuICAgIHwgXyAtPiBlc2NhcGluZ19lcnJvciBcImVuZCBvZiBzdHJpbmcgaW4gZXNjYXBlIHNlcXVlbmNlXCIgcyBOb25lIGxcbiAgZW5kO1xuICBpZiAhaiA8PiBsIHRoZW4gQnl0ZXMudW5zYWZlX3RvX3N0cmluZyAoQnl0ZXMuc3ViIHMnIDAgIWopIGVsc2Ugc1xuXG4iLCIoKiBjb250YWlucyB0aGUgbGluZSBhbmQgY2hhcmFjdGVyIHNwYW4gb2Ygd2hlcmUgdGhlIGVycm9yIG9jY3VyZWQgKilcblxudHlwZSB0ID0ge1xuICBsaW5lIDogaW50XG47IHN0YXJ0X2NoYXIgOiBpbnRcbjsgZW5kX2NoYXIgOiBpbnRcbjsgbXNnIDogc3RyaW5nXG59XG5cbmV4Y2VwdGlvbiBKc29uX2Vycm9yX2luZm8gb2YgdFxuXG5sZXQgY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBlbXNnID1cbiAgbGV0IChlbGluZSwgc2NoYXIsIGVjaGFyKSA9IExleHhlcl91dGlscy5lcnJvcl9wb3MgbGV4YnVmIGluXG4gIHsgbGluZSA9IGVsaW5lOyBzdGFydF9jaGFyID0gc2NoYXI7IGVuZF9jaGFyID0gZWNoYXI7IG1zZyA9IGVtc2cgfVxuXG5sZXQgdG9fc3RyaW5nIGluZm8gPVxuICBsZXQgbG9jID0gUHJpbnRmLnNwcmludGYgXCJsaW5lICVkIGNoYXJzICVkLSVkXCIgaW5mby5saW5lIGluZm8uc3RhcnRfY2hhciBpbmZvLmVuZF9jaGFyIGluXG4gIGluZm8ubXNnIF4gXCIgYXQgXCIgXiBsb2NcbiIsImV4dGVybmFsIGZvcm1hdF9mbG9hdCA6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcblxuKCogRGV0ZXJtaW5lIHRoZSBzaXplIG9mIGFuIGludGVnZXIsIGhhbmRsZXMgMzBiaXQsIDYyYml0IGFuZCBKc29vIHVzaW5nIDMyYml0IGludHMgKilcbmxldCBtYXhfanNvbl9pbnQgPVxuICBsZXQgcmVjIGxvZzIgbiA9IGlmIG4gPD0gMSB0aGVuIDAgZWxzZSAxICsgbG9nMihuIGFzciAxKSBpblxuICBsZXQgYml0cyBuID0gbG9nMiBuICsgMSBpblxuICBpZiBiaXRzIG1heF9pbnQgPiA1MyB0aGVuICgxIGxzbCA1MykgLSAxIGVsc2UgbWF4X2ludFxuXG5sZXQgbWF4X2pzb25faW50X2FzX2Zsb2F0ID0gZmxvYXRfb2ZfaW50IG1heF9qc29uX2ludFxuXG5sZXQgc3RyaW5nX29mX2Zsb2F0X2pzb24gZiA9XG4gIGxldCBpc19pbnQgPSAoZmxvYXRfb2ZfaW50IChpbnRfb2ZfZmxvYXQgZikpID0gZiBpblxuICBpZiBpc19pbnQgJiYgYWJzX2Zsb2F0IGYgPD0gbWF4X2pzb25faW50X2FzX2Zsb2F0IHRoZW4gYmVnaW4gKCogSUVFRSBtYXggaW50IGluIGEgZmxvYXQgd2hlbiBpbiA2NGJpdCBpbnQgbW9kZSopXG4gICAgbGV0IGludF92YWx1ZSA9IGludF9vZl9mbG9hdCBmIGluIChzdHJpbmdfb2ZfaW50IGludF92YWx1ZSkgXiBcIi4wXCJcbiAgZW5kXG4gIGVsc2UgYmVnaW5cbiAgICAoKiAlLjE3ZyBvZnRlbiBjcmVhdGVzIG92ZXJseSBsb25nIG91dHB1dCwgYXR0ZW1wdCB0byBjb252ZXJ0IGF0IGxvd2VyIHByZWNlc3Npb24gZmlyc3QgKilcbiAgICBsZXQgcyA9IGZvcm1hdF9mbG9hdCBcIiUuMTZnXCIgZiBpblxuICAgIGxldCBzID0gaWYgZmxvYXRfb2Zfc3RyaW5nIHMgPSBmIHRoZW4gcyBlbHNlIGZvcm1hdF9mbG9hdCBcIiUuMTdnXCIgZiBpblxuICAgIGlmIG5vdCAoU3RyaW5nLmNvbnRhaW5zIHMgJy4nIHx8IFN0cmluZy5jb250YWlucyBzICdlJykgdGhlbiBzIF4gXCIuMFwiXG4gICAgZWxzZSBzXG4gIGVuZFxuIiwiXG5sZXQgdG9rZW5fZXJyb3IgdG9rID1cbiAgbGV0IG9wZW4gVG9rZW5zIGluXG4gIGxldCBlcnIgPSBtYXRjaCB0b2sgd2l0aFxuICAgIHwgU1RSSU5HIHMgLT4gXCJ1bmV4cGVjdGVkIHN0cmluZyAnXCIgXiBzIF4gXCInXCJcbiAgICB8IE9TIC0+IFwidW5leHBlY3RlZCAneydcIlxuICAgIHwgT0UgLT4gXCJ1bmV4cGVjdGVkICd9J1wiXG4gICAgfCBOVUxMIC0+IFwidW5leHBlY3RlZCBudWxsIHZhbHVlXCJcbiAgICB8IE5FR0lORklOSVRZIC0+IFwidW5leHBlY3RlZCBuZWdhdGl2ZSBpbmZpbml0eVwiXG4gICAgfCBOQU4gLT4gXCJ1bmV4cGVjdGVkIE5vdC1hLU51bWJlclwiXG4gICAgfCBMRVhfRVJST1IgcyAtPiBzXG4gICAgfCBMQVJHRUlOVCBzIC0+IFwidW5leHBlY3RlZCBsYXJnZSBpbnRlZ2VyICdcIiBeIHMgXiBcIidcIlxuICAgIHwgSU5UIGkgLT4gXCJ1bmV4cGVjdGVkIGludGVnZXIgJ1wiIF4gKHN0cmluZ19vZl9pbnQgaSkgXiBcIidcIlxuICAgIHwgSU5GSU5JVFkgLT4gXCJ1bmV4cGVjdGVkIGluZmluaXR5XCJcbiAgICB8IEZMT0FUIGYgLT4gXCJ1bmV4cGVjdGVkIGZsb2F0ICdcIiBeIChzdHJpbmdfb2ZfZmxvYXQgZikgXiBcIidcIlxuICAgIHwgRU9GIC0+IFwidW5leHBlY3RlZCBlbmQtb2YtaW5wdXRcIlxuICAgIHwgQ09NUExJQU5DRV9FUlJPUiBzIC0+IFwiY29tcGxpYW5jZSBlcnJvciAnXCIgXiBzIF4gXCInXCJcbiAgICB8IENPTU1BIC0+IFwidW5leHBlY3RlZCAnLCdcIlxuICAgIHwgQ09MT04gLT4gXCJ1bmV4cGVjdGVkICc6J1wiXG4gICAgfCBCT09MIGIgLT4gXCJ1bmV4cGVjdGVkIGJvb2xlYW4gJ1wiIF4gKGlmIGIgdGhlbiBcInRydWVcIiBlbHNlIFwiZmFsc2VcIikgXiBcIidcIlxuICAgIHwgQVMgLT4gXCJ1bmV4cGVjdGVkICdbJ1wiXG4gICAgfCBBRSAtPiBcInVuZXhwZWN0ZWQgJ10nXCJcbiAgICB8IFRTIC0+IFwidW5leHBlY3RlZCAnKCdcIlxuICAgIHwgVEUgLT4gXCJ1bmV4cGVjdGVkICcpJ1wiXG4gICAgfCBWUyAtPiBcInVuZXhwZWN0ZWQgJzwnXCJcbiAgICB8IFZFIC0+IFwidW5leHBlY3RlZCAnPidcIlxuICBpblxuICAgIGBTeW50YXhfZXJyb3IgZXJyXG4iLCJtb2R1bGUgdHlwZSBQYXJzZXIgPSBzaWdcbiAgbW9kdWxlIENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlNcblxuICB2YWwgZGVjb2RlXG4gICAgOiAgcmVhZGVyIDogKHVuaXQgLT4gVG9rZW5zLnRva2VuKVxuICAgIC0+IChDb21wbGlhbmNlLmpzb24gb3B0aW9uLCBzdHJpbmcpIHJlc3VsdFxuZW5kXG5cbm1vZHVsZSBNYWtlIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA6IFBhcnNlclxuICB3aXRoIG1vZHVsZSBDb21wbGlhbmNlID0gQ29tcGxpYW5jZVxuPSBzdHJ1Y3RcblxuICBtb2R1bGUgQ29tcGxpYW5jZSA9IENvbXBsaWFuY2VcblxuICBleGNlcHRpb24gUGFyc2VfZXJyb3Igb2YgW2BFb2YgfCBgU3ludGF4X2Vycm9yIG9mIHN0cmluZ11cblxuICBsZXQganNvbl92YWx1ZSB+cmVhZGVyID0gXG4gICAgbGV0IG9wZW4gVG9rZW5zIGluXG4gICAgbGV0IG9wZW4gUGFyc2VyX3Rvb2xzIGluXG4gICAgbGV0IHJlYyB0b2tlbl92YWx1ZSB0b2sgPSBiZWdpblxuICAgICAgbWF0Y2ggdG9rIHdpdGhcbiAgICAgIHwgSU5UIGkgLT4gQ29tcGxpYW5jZS5pbnRlZ2VyIGlcbiAgICAgIHwgU1RSSU5HIHMgLT4gQ29tcGxpYW5jZS5zdHJpbmcgc1xuICAgICAgfCBCT09MIGIgLT4gQ29tcGxpYW5jZS5ib29sIGJcbiAgICAgIHwgRkxPQVQgZiAtPiBDb21wbGlhbmNlLm51bWJlciAoYEZsb2F0IGYpXG4gICAgICB8IElORklOSVRZIC0+IENvbXBsaWFuY2UubnVtYmVyIGBJbmZpbml0eVxuICAgICAgfCBORUdJTkZJTklUWSAtPiBDb21wbGlhbmNlLm51bWJlciBgTmVnaW5maW5pdHlcbiAgICAgIHwgTkFOIC0+IENvbXBsaWFuY2UubnVtYmVyIGBOYW5cbiAgICAgIHwgTlVMTCAtPiBDb21wbGlhbmNlLm51bGxcbiAgICAgIHwgTEFSR0VJTlQgcyAtPiBDb21wbGlhbmNlLmxhcmdlaW50IHNcbiAgICAgIHwgRU9GIC0+IHJhaXNlIChQYXJzZV9lcnJvciBgRW9mKVxuICAgICAgfCBDT01NQSB8IENPTE9OIHwgQUUgfCBPRSB8IFRFIHwgVkUgfCBMRVhfRVJST1IgXyB8IENPTVBMSUFOQ0VfRVJST1IgXyAtPlxuICAgICAgICByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgICB8IEFTIC0+IGFycmF5X3ZhbHVlX3N0YXJ0ICgpXG4gICAgICB8IE9TIC0+IG9iamVjdF92YWx1ZV9zdGFydCAoKVxuICAgICAgfCBUUyAtPiB0dXBsZV92YWx1ZV9zdGFydCAoKVxuICAgICAgfCBWUyAtPiB2YXJpYW50X3ZhbHVlX3N0YXJ0ICgpXG4gICAgZW5kXG4gICAgYW5kIHZhbHVlICgpID0gdG9rZW5fdmFsdWUgKHJlYWRlciAoKSlcbiAgICBhbmQgYXJyYXlfdmFsdWVfc3RhcnQgKCkgPSBiZWdpblxuICAgICAgbGV0IHRvayA9IHJlYWRlciAoKSBpblxuICAgICAgbWF0Y2ggdG9rIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IFtdXG4gICAgICB8IF8gLT4gYXJyYXlfdmFsdWVzX3N0YXJ0IHRvayBbXVxuICAgIGVuZFxuICAgIGFuZCBhcnJheV92YWx1ZXNfc3RhcnQgdG9rIGFjYyA9IGJlZ2luXG4gICAgICBsZXQgdiA9IHRva2VuX3ZhbHVlIHRvayBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gYXJyYXlfdmFsdWVzICh2OjphY2MpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIGFycmF5X3ZhbHVlcyBhY2MgPSBiZWdpblxuICAgICAgbGV0IHYgPSB2YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gYXJyYXlfdmFsdWVzICh2OjphY2MpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIG9iamVjdF92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBsZXQgdG9rID0gcmVhZGVyICgpIGluXG4gICAgICBtYXRjaCB0b2sgd2l0aFxuICAgICAgfCBPRSAtPiBDb21wbGlhbmNlLmFzc29jIFtdXG4gICAgICB8IF8gLT4gb2JqZWN0X3ZhbHVlc19zdGFydCB0b2sgW11cbiAgICBlbmRcbiAgICBhbmQgb2JqZWN0X3ZhbHVlc19zdGFydCB0b2sgYWNjID0gYmVnaW5cbiAgICAgIGxldCB2ID0gY29sb25fdmFsdWUgdG9rICgpIGluXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBPRSAtPiBDb21wbGlhbmNlLmFzc29jIChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gb2JqZWN0X3ZhbHVlcyAodjo6YWNjKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCBvYmplY3RfdmFsdWVzIGFjYyA9IGJlZ2luXG4gICAgICBsZXQgdiA9IGtleV9jb2xvbl92YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgT0UgLT4gQ29tcGxpYW5jZS5hc3NvYyAoTGlzdC5yZXYgKHY6OmFjYykpXG4gICAgICB8IENPTU1BIC0+IG9iamVjdF92YWx1ZXMgKHY6OmFjYylcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgY29sb25fdmFsdWUgdiAoKSA9IGJlZ2luXG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgU1RSSU5HIGsgLT4gYmVnaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBDT0xPTiAtPiAoaywgdmFsdWUgKCkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IHRvayAtPiAgcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCBrZXlfY29sb25fdmFsdWUgKCkgPSBiZWdpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgU1RSSU5HIGsgLT4gYmVnaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBDT0xPTiAtPiAoaywgdmFsdWUgKCkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IHRvayAtPiAgcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB0dXBsZV92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBsZXQgdjEgPSB2YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQ09NTUEgLT4gYmVnaW5cbiAgICAgICAgbGV0IHYyID0gdmFsdWUgKCkgaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBURSAtPiBDb21wbGlhbmNlLnR1cGxlIFt2MTsgdjJdXG4gICAgICAgIHwgQ09NTUEgLT4gdHVwbGVfdmFsdWVzIFt2MjsgdjFdXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IFRFIC0+IHJhaXNlIChQYXJzZV9lcnJvciAoYFN5bnRheF9lcnJvciBcInR1cGxlIG11c3QgaGF2ZSBhdCBsZWFzdCAyIGVsZW1lbnRzXCIpKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB0dXBsZV92YWx1ZXMgYWNjID0gYmVnaW5cbiAgICAgIGxldCB2ID0gdmFsdWUgKCkgaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IFRFIC0+IENvbXBsaWFuY2UudHVwbGUgKExpc3QucmV2ICh2OjphY2MpKVxuICAgICAgfCBDT01NQSAtPiB0dXBsZV92YWx1ZXMgKHY6OmFjYylcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgdmFyaWFudF92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBTVFJJTkcgayAtPiBiZWdpblxuICAgICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgICB8IFZFIC0+IENvbXBsaWFuY2UudmFyaWFudCBrIE5vbmVcbiAgICAgICAgfCBDT0xPTiAtPiB2YXJpYW50X2VuZCBrIChTb21lICh2YWx1ZSAoKSkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IFZFIC0+IHJhaXNlIChQYXJzZV9lcnJvciAoYFN5bnRheF9lcnJvciBcInZhcmlhbnQgbXVzdCBoYXZlIGF0IGxlYXN0IGEgc3RyaW5nXCIpKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB2YXJpYW50X2VuZCBrIHYgPSBiZWdpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgVkUgLT4gQ29tcGxpYW5jZS52YXJpYW50IGsgdlxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGluXG4gICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICB8IGV4Y2VwdGlvbiAoUGFyc2VfZXJyb3IgYEVvZikgLT4gTm9uZVxuICAgIHwgZXhjZXB0aW9uIGV4bl8gLT4gcmFpc2UgZXhuX1xuICAgIHwgRU9GIC0+IE5vbmVcbiAgICB8IHRvayAtPiBTb21lICh0b2tlbl92YWx1ZSB0b2spXG5cbiAgbGV0IGRlY29kZSB+cmVhZGVyID0gXG4gICAgbWF0Y2gganNvbl92YWx1ZSB+cmVhZGVyIHdpdGhcbiAgICB8IGV4Y2VwdGlvbiAoUGFyc2VfZXJyb3IgYEVvZikgLT4gRXJyb3IgXCJVbmV4cGVjdGVkIGVuZC1vZi1pbnB1dFwiXG4gICAgfCBleGNlcHRpb24gKFBhcnNlX2Vycm9yIChgU3ludGF4X2Vycm9yIGVycikpIC0+IEVycm9yIGVyclxuICAgIHwgZXhjZXB0aW9uIChMZXh4ZXJfdXRpbHMuTGV4X2Vycm9yIGVycikgLT4gRXJyb3IgZXJyXG4gICAgfCByZXMgLT4gT2sgcmVzXG5cbmVuZFxuIiwibGV0IG5pYmJsZV90b19oZXggaSA9IGNoYXJfb2ZfaW50IChpZiBpID4gOSB0aGVuIDY1ICsgaSAtIDEwIGVsc2UgNDggKyBpKVxuXG5sZXQgYWRkX2hleF9ieXRlIH5hZGRfY2hhciBpID1cbiAgYWRkX2NoYXIgKG5pYmJsZV90b19oZXggKChpIGxzciA0KSBsYW5kIDB4MGYpKTtcbiAgYWRkX2NoYXIgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxubGV0IGVzY2FwZSB+YWRkX2NoYXIgfmFkZF9zdHJpbmcgcyA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICB8ICdcIicgICAgLT4gYWRkX3N0cmluZyBcIlxcXFxcXFwiXCJcbiAgICB8ICdcXFxcJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcXFwiXG4gICAgfCAnXFxiJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcYlwiXG4gICAgfCAnXFwwMTInIC0+IGFkZF9zdHJpbmcgXCJcXFxcZlwiXG4gICAgfCAnXFxuJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcblwiXG4gICAgfCAnXFxyJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcclwiXG4gICAgfCAnXFx0JyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcdFwiXG4gICAgfCAnXFx4MDAnLi4nXFx4MUYnXG4gICAgfCAnXFx4N0YnIGFzIGMgLT5cbiAgICAgIGFkZF9zdHJpbmcgXCJcXFxcdTAwXCI7ICBhZGRfaGV4X2J5dGUgfmFkZF9jaGFyIChpbnRfb2ZfY2hhciBjKVxuICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gIGRvbmVcbiBcbiIsIm1vZHVsZSB0eXBlIEludGYgPSBzaWdcbiAgdmFsIHByZXR0eV9wcmludCA6IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBwcmV0dHlfcHJpbnRfdG9fc3RyaW5nIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiBzdHJpbmdcbiAgdmFsIHByZXR0eV9wcmludF90b19jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG5lbmRcblxubW9kdWxlIE1ha2UoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgPSBzdHJ1Y3RcbiAgbGV0IHRvX2pzb25fc3RyaW5nIHMgPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDEwMCBpblxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBVdGlscy5lc2NhcGUgfmFkZF9jaGFyIH5hZGRfc3RyaW5nIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBhZGRfcXVvdGVfc3RyaW5nIHM7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBwcF9saXN0IHNlcCBwcHggb3V0IGwgPVxuICAgIGxldCBwcF9zZXAgb3V0ICgpID0gRm9ybWF0LmZwcmludGYgb3V0IFwiJXNAIFwiIHNlcCBpblxuICAgIEZvcm1hdC5wcF9wcmludF9saXN0IH5wcF9zZXAgcHB4IG91dCBsXG5cbiAgbGV0IHJlYyBmb3JtYXQgKG91dDpGb3JtYXQuZm9ybWF0dGVyKSBqc29uIDogdW5pdCA9XG4gICAgbWF0Y2gganNvbiB3aXRoXG4gICAgICB8IGBOdWxsIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gRm9ybWF0LnBwX3ByaW50X2Jvb2wgb3V0IGJcbiAgICAgIHwgYEludCBpIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IChzdHJpbmdfb2ZfaW50IGkpXG4gICAgICB8IGBGbG9hdCBmIC0+XG4gICAgICAgIGxldCBzID0gQ29tcGxpYW5jZS5udW1iZXJfdG9fc3RyaW5nIGYgaW5cbiAgICAgICAgRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgKHRvX2pzb25fc3RyaW5nIHMpXG4gICAgICB8IGBJbnRsaXQgc1xuICAgICAgfCBgRmxvYXRsaXQgc1xuICAgICAgfCBgU3RyaW5nbGl0IHMgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgc1xuICAgICAgfCBgTGlzdCBbXSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIltdXCJcbiAgICAgIHwgYExpc3QgbCAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCJbQDs8MSAwPkBbPGhvdj4lYUBdQDs8MSAtMj5dXCIgKHBwX2xpc3QgXCIsXCIgZm9ybWF0KSBsXG4gICAgICB8IGBBc3NvYyBbXSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcInt9XCJcbiAgICAgIHwgYEFzc29jIGwgLT5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwie0A7PDEgMD4lYUA7PDEgLTI+fVwiIChwcF9saXN0IFwiLFwiIGZvcm1hdF9maWVsZCkgbFxuICAgICAgfCBgVHVwbGUgbCAtPlxuICAgICAgICBpZiBsID0gW10gdGhlbiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIigpXCJcbiAgICAgICAgZWxzZSBGb3JtYXQuZnByaW50ZiBvdXQgXCIoQCwlYUA7PDAgLTI+KVwiIChwcF9saXN0IFwiLFwiIGZvcm1hdCkgbFxuICAgICAgfCBgVmFyaWFudCAocywgTm9uZSkgLT5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwiPCVzPlwiICh0b19qc29uX3N0cmluZyBzKVxuICAgICAgfCBgVmFyaWFudCAocywgU29tZSBqc29uKSAtPlxuICAgICAgICBsZXQgcyA9IHRvX2pzb25fc3RyaW5nIHMgaW5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwiPEBbPGh2Mj4lczogJWFAXT5cIiBzIGZvcm1hdCBqc29uXG5cbiAgYW5kIGZvcm1hdF9maWVsZCBvdXQgKG5hbWUsIGpzb24pID1cbiAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCJAWzxodjI+JXM6ICVhQF1cIiAodG9fanNvbl9zdHJpbmcgbmFtZSkgZm9ybWF0IGpzb25cblxuICBsZXQgcHJldHR5X3ByaW50IG91dCBqc29uID1cbiAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCJAWzxodjI+JWFAXVwiIGZvcm1hdCBqc29uXG5cbiAgbGV0IHByZXR0eV9wcmludF90b19zdHJpbmcganNvbiA9XG4gICAgRm9ybWF0LmFzcHJpbnRmIFwiJWFcIiBwcmV0dHlfcHJpbnQganNvblxuXG4gIGxldCBwcmV0dHlfcHJpbnRfdG9fY2hhbm5lbCBvYyBqc29uID1cbiAgICBsZXQgZm10ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBvYyBpblxuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVhQD9cIiBwcmV0dHlfcHJpbnQganNvblxuXG5lbmRcbiIsImxldCBlcnJvciBtc2cgX2pzb24gPSByYWlzZSAoRmFpbHVyZSBtc2cpXG5cbm1vZHVsZSBJbnRlcm5hbCA9IHN0cnVjdFxuICBtb2R1bGUgdHlwZSBTID0gc2lnXG4gICAgdHlwZSBqc29uXG4gICAgdmFsIG51bGwgOiB1bml0IC0+IGpzb25cbiAgZW5kXG5cbiAgbW9kdWxlIHR5cGUgSW50ZXJuYWxfc3RyaWN0X2ludGYgPSBzaWdcbiAgICB0eXBlIGpzb25cblxuICAgIHZhbCBtZW1iZXIgOiBzdHJpbmcgLT4gWz4gYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0IF0gLT4ganNvblxuICAgIHZhbCBpbmRleCA6IGludCAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSAtPiBqc29uXG4gICAgdmFsIG1hcCA6IChqc29uIC0+IGpzb24pIC0+IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdIC0+IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdXG4gICAgdmFsIHRvX2Fzc29jIDogWz4gYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0IF0gLT4gKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICB2YWwgdG9fYm9vbCA6IFs+IGBCb29sIG9mIGJvb2wgXSAtPiBib29sXG4gICAgdmFsIHRvX2Zsb2F0IDogWz4gYEZsb2F0IG9mIGZsb2F0IF0gLT4gZmxvYXRcbiAgICB2YWwgdG9fc3RyaW5nIDogWz4gYFN0cmluZyBvZiBzdHJpbmcgXSAtPiBzdHJpbmdcbiAgICB2YWwgdG9fc3RyaW5nX29wdGlvbiA6IFs+IGBTdHJpbmcgb2Ygc3RyaW5nIHwgYE51bGwgXSAtPiBzdHJpbmcgb3B0aW9uXG4gICAgdmFsIHRvX29wdGlvbiA6ICgoWz4gYE51bGwgXSBhcyAnYSkgLT4ganNvbikgLT4gJ2EgLT4ganNvbiBvcHRpb25cbiAgICB2YWwgdG9fbGlzdCA6IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdIC0+IGpzb24gbGlzdFxuICAgIHZhbCB0b19ib29sX29wdGlvbiA6IFs+IGBCb29sIG9mIGJvb2wgfCBgTnVsbCBdIC0+IGJvb2wgb3B0aW9uXG4gICAgdmFsIHRvX2Zsb2F0X29wdGlvbiA6IFs+IGBGbG9hdCBvZiBmbG9hdCB8IGBOdWxsIF0gLT4gZmxvYXQgb3B0aW9uXG4gICAgdmFsIHRvX251bWJlciA6IFs+IGBGbG9hdCBvZiBmbG9hdCBdIC0+IGZsb2F0XG4gICAgdmFsIHRvX251bWJlcl9vcHRpb24gOiBbPiBgRmxvYXQgb2YgZmxvYXQgfCBgTnVsbCBdIC0+IGZsb2F0IG9wdGlvblxuICAgIHZhbCBjb252ZXJ0X2VhY2ggOiAoanNvbiAtPiBqc29uKSAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSAtPiBqc29uIGxpc3RcbiAgICB2YWwgcmV2X2ZpbHRlcl9tYXAgOiAoJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSBsaXN0IC0+ICdhIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCBmaWx0ZXJfbWFwIDogKCdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIHJldl9mbGF0dGVuIDogJ2EgbGlzdCAtPiBbPiBgTGlzdCBvZiAnYSBsaXN0IF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZsYXR0ZW4gOiBbPiBgTGlzdCBvZiAnYSBsaXN0IF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZpbHRlcl9pbmRleCA6IGludCAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSBsaXN0IC0+IGpzb24gbGlzdFxuICAgIHZhbCBmaWx0ZXJfbGlzdCA6IFs+IGBMaXN0IG9mICdhIF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZpbHRlcl9hc3NvYyA6IFs+IGBBc3NvYyBvZiAnYSBdIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCBmaWx0ZXJfYm9vbCA6IFs+IGBCb29sIG9mIGJvb2wgXSBsaXN0IC0+IGJvb2wgbGlzdFxuICAgIHZhbCBmaWx0ZXJfZmxvYXQgOiBbPiBgRmxvYXQgb2YgZmxvYXQgXSBsaXN0IC0+IGZsb2F0IGxpc3RcbiAgICB2YWwgZmlsdGVyX3N0cmluZyAgOiBbPiBgU3RyaW5nIG9mIHN0cmluZyBdIGxpc3QgLT4gc3RyaW5nIGxpc3RcbiAgICB2YWwgZmlsdGVyX21lbWJlciA6IHN0cmluZyAtPiBbPiBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3QgXSBsaXN0IC0+IGpzb24gbGlzdFxuICAgIHZhbCBmaWx0ZXJfbnVtYmVyIDogWz4gYEZsb2F0IG9mIGZsb2F0IF0gbGlzdCAtPiBmbG9hdCBsaXN0XG4gICAgdmFsIGtleXMgOiBbPiBgQXNzb2Mgb2YgKHN0cmluZyAqICdhKSBsaXN0IF0gLT4gc3RyaW5nIGxpc3RcbiAgICB2YWwgdmFsdWVzIDogWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCBdIC0+ICdhIGxpc3RcbiAgICB2YWwgY29tYmluZSA6IFs+IGBBc3NvYyBvZiAnYSBsaXN0IF0gLT4gWz4gYEFzc29jIG9mICdhIGxpc3QgXSAtPiBbPiBgQXNzb2Mgb2YgJ2EgbGlzdCBdXG4gICAgdmFsIHNvcnQgOiAoWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCB8IGBMaXN0IG9mICdhIGxpc3QgXSBhcyAnYSkgLT4gJ2FcbiAgZW5kXG5cbiAgbW9kdWxlIFNoYXJlZCA9IHN0cnVjdFxuICAgIGxldCByZWMgcmV2X2ZpbHRlcl9tYXAgZiBhY2MgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gYWNjXG4gICAgICB8IGhkOjp0bCAtPlxuICAgICAgICBtYXRjaCBmIGhkIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IHJldl9maWx0ZXJfbWFwIGYgYWNjIHRsXG4gICAgICAgIHwgU29tZSB2IC0+IHJldl9maWx0ZXJfbWFwIGYgKHY6OmFjYykgdGxcblxuICAgIGxldCBmaWx0ZXJfbWFwIGYgbCA9IExpc3QucmV2IChyZXZfZmlsdGVyX21hcCBmIFtdIGwpXG5cbiAgICBsZXQgcmVjIHJldl9mbGF0dGVuIGFjYyBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiBhY2NcbiAgICAgIHwgaGQ6OnRsIC0+XG4gICAgICAgIG1hdGNoIGhkIHdpdGhcbiAgICAgICAgfCBgTGlzdCBsMiAtPiByZXZfZmxhdHRlbiAoTGlzdC5yZXZfYXBwZW5kIGwyIGFjYykgdGxcbiAgICAgICAgfCBfIC0+IHJldl9mbGF0dGVuIGFjYyB0bFxuXG4gICAgbGV0IGZsYXR0ZW4gbCA9IExpc3QucmV2IChyZXZfZmxhdHRlbiBbXSBsKVxuXG4gIGVuZFxuXG4gIG1vZHVsZSBTdHJpY3QoTSA6IFMpIDogSW50ZXJuYWxfc3RyaWN0X2ludGZcbiAgICB3aXRoIHR5cGUganNvbiA9IE0uanNvblxuICA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IE0uanNvblxuXG4gICAgbGV0IGFzc29jIG5hbWUgb2JqIDoganNvbiA9IHRyeSBMaXN0LmFzc29jIG5hbWUgb2JqIHdpdGggTm90X2ZvdW5kIC0+IE0ubnVsbCAoKVxuXG4gICAgbGV0IG1lbWJlciBuYW1lIHYgOiBqc29uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgQXNzb2Mgb2JqIC0+IGFzc29jIG5hbWUgb2JqXG4gICAgICB8IGpzb24gLT4gZXJyb3IgKFwiRXhwZWN0ZWQgYEFzc29jIHRvIGZpbmQgbmFtZSAnXCIgXiBuYW1lIF4gXCInIGluXCIpIGpzb25cblxuICAgIGxldCBpbmRleCBpIHYgOiBqc29uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgICAgICAgICBsZXQgaScgPSBpZiBpIDwgMCB0aGVuIGxlbiArIGkgZWxzZSBpIGluXG4gICAgICAgICAgaWYgaScgPCAwIHx8IGknID49IGxlbiB0aGVuIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IChzdHJpbmdfb2ZfaW50IGkgXiBcIiBvdXQgb2YgYm91bmRzXCIpKVxuICAgICAgICAgIGVsc2UgTGlzdC5udGggbCBpJ1xuICAgICAgfCBqc29uIC0+IGVycm9yIFwiQ2FuJ3QgaW5kZXggbm9uZSBgTGlzdCB0eXBlIFwiIGpzb25cblxuICAgIGxldCBtYXAgZiB2ID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTGlzdCBsIC0+IGBMaXN0IChMaXN0Lm1hcCBmIGwpXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJDYW4ndCBtYXAgb3ZlciBub25lIGBMaXN0IHR5cGUgXCIganNvblxuXG4gICAgbGV0IHRvX2Fzc29jID0gZnVuY3Rpb24gfCBgQXNzb2Mgb2JqIC0+IG9iaiB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgQXNzb2NcIiBqc29uXG4gICAgbGV0IHRvX2Jvb2wgPSBmdW5jdGlvbiB8IGBCb29sIGIgLT4gYiB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgQm9vbFwiIGpzb25cbiAgICBsZXQgdG9fZmxvYXQgPSBmdW5jdGlvbiB8IGBGbG9hdCBmIC0+IGYgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0XCIganNvblxuXG4gICAgbGV0IHRvX3N0cmluZyA9IGZ1bmN0aW9uXG4gICAgICB8IGBTdHJpbmcgcyAtPiBzXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgU3RyaW5nXCIganNvblxuXG4gICAgbGV0IHRvX3N0cmluZ19vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgU3RyaW5nIHMgLT4gU29tZSBzXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBTdHJpbmcgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9fb3B0aW9uIGYgdiA6IGpzb24gb3B0aW9uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IHYgLT4gU29tZSAoZiB2KVxuXG4gICAgbGV0IHRvX2xpc3QgdiA6IGpzb24gbGlzdCA9XG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgYExpc3QgbCAtPiBsXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgTGlzdFwiIGpzb25cblxuICAgIGxldCB0b19mbG9hdF9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0IG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IHRvX2Jvb2xfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYEJvb2wgYiAtPiBTb21lIGJcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEJvb2wgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9fbnVtYmVyID0gZnVuY3Rpb25cbiAgICAgIHwgYEZsb2F0IGYgLT4gZlxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0XCIganNvblxuXG4gICAgbGV0IHRvX251bWJlcl9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0IG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IGNvbnZlcnRfZWFjaCBmID0gZnVuY3Rpb25cbiAgICAgIHwgYExpc3QgbCAtPiBMaXN0Lm1hcCBmIGxcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBMaXN0XCIganNvblxuXG4gICAgbGV0IHJldl9maWx0ZXJfbWFwID0gU2hhcmVkLnJldl9maWx0ZXJfbWFwXG4gICAgbGV0IGZpbHRlcl9tYXAgPSBTaGFyZWQuZmlsdGVyX21hcFxuXG4gICAgbGV0IHJldl9mbGF0dGVuID0gU2hhcmVkLnJldl9mbGF0dGVuXG4gICAgbGV0IGZsYXR0ZW4gPSBTaGFyZWQuZmxhdHRlblxuXG4gICAgbGV0IGZpbHRlcl9pbmRleCBpIGwgPVxuICAgICAgZmlsdGVyX21hcCAoZnVuY3Rpb24gfCBgTGlzdCBsIC0+ICh0cnkgU29tZSAoTGlzdC5udGggbCBpKSB3aXRoIF8gLT4gTm9uZSkgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbGlzdCBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYExpc3QgbCAtPiBTb21lIGwgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX2Fzc29jIGwgPSBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgQXNzb2MgbCAtPiBTb21lIGwgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX2Jvb2wgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBCb29sIGIgLT4gU29tZSBiIHwgXyAtPiBOb25lKSBsXG4gICAgbGV0IGZpbHRlcl9mbG9hdCBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYEZsb2F0IGYgLT4gU29tZSBmIHwgXyAtPiBOb25lKSBsXG4gICAgbGV0IGZpbHRlcl9zdHJpbmcgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBTdHJpbmcgcyAtPiBTb21lIHMgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbWVtYmVyIGsgbCA9XG4gICAgICBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgQXNzb2MgbCAtPiAodHJ5IFNvbWUgKExpc3QuYXNzb2MgayBsKSB3aXRoIF8gLT4gTm9uZSkgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbnVtYmVyIGwgPVxuICAgICAgZmlsdGVyX21hcCAoXG4gICAgICAgIGZ1bmN0aW9uXG4gICAgICAgIHwgYEZsb2F0IGYgLT4gU29tZSBmXG4gICAgICAgIHwgXyAtPiBOb25lXG4gICAgICApIGxcblxuICAgIGxldCBrZXlzIG8gPSB0b19hc3NvYyBvIHw+IExpc3QubWFwIChmdW4gKGtleSwgXykgLT4ga2V5KVxuXG4gICAgbGV0IHZhbHVlcyBvID0gdG9fYXNzb2MgbyB8PiBMaXN0Lm1hcCAoZnVuIChfLCB2YWx1ZSkgLT4gdmFsdWUpXG5cbiAgICBsZXQgY29tYmluZSBmaXJzdCBzZWNvbmQgPVxuICAgICAgbWF0Y2ggKGZpcnN0LCBzZWNvbmQpIHdpdGhcbiAgICAgIHwgKGBBc3NvYyBhLCBgQXNzb2MgYikgLT4gYEFzc29jIChhIEAgYilcbiAgICAgIHwgKF8sIF8pIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiRXhwZWN0ZWQgdHdvIG9iamVjdHNcIilcblxuICAgIGxldCByZWMgc29ydCBqc29uID1cbiAgICAgIG1hdGNoIGpzb24gd2l0aFxuICAgICAgfCBgQXNzb2MgbyAtPlxuICAgICAgICBsZXQgbyA9IExpc3QucmV2IChMaXN0LnJldl9tYXAgKGZ1biAoaywgdikgLT4gKGssIHNvcnQgdikpIG8pIGluXG4gICAgICAgIGBBc3NvYyAoKExpc3Quc3RhYmxlX3NvcnQgKGZ1biAoazEsIF8pIChrMiwgXykgLT4gU3RyaW5nLmNvbXBhcmUgazEgazIpKSBvKVxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgIGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIHNvcnQgbCkpXG4gICAgICB8IGVsIC0+ICBlbFxuICBlbmRcblxuICBtb2R1bGUgdHlwZSBJbnRlcm5hbF9iYXNpY19pbnRmID0gc2lnXG5cbiAgICB2YWwgdG9fbnVtYmVyIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgXSAtPiBmbG9hdFxuICAgIHZhbCB0b19udW1iZXJfb3B0aW9uIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgfCBgTnVsbCBdIC0+IGZsb2F0IG9wdGlvblxuICAgIHZhbCB0b19pbnQgOiBbPiBgSW50IG9mIGludCBdIC0+IGludFxuICAgIHZhbCB0b19pbnRfb3B0aW9uIDogWz4gYEludCBvZiBpbnQgfCBgTnVsbCBdIC0+IGludCBvcHRpb25cbiAgICB2YWwgZmlsdGVyX2ludCA6IFs+IGBJbnQgb2YgaW50IF0gbGlzdCAtPiBpbnQgbGlzdFxuICAgIHZhbCBmaWx0ZXJfbnVtYmVyIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgXSBsaXN0IC0+IGZsb2F0IGxpc3RcbiAgZW5kXG5cbiAgbW9kdWxlIEJhc2ljKE0gOiBTKSA6IEludGVybmFsX2Jhc2ljX2ludGYgPSBzdHJ1Y3RcblxuICAgIGxldCB0b19udW1iZXIgPSBmdW5jdGlvblxuICAgICAgfCBgSW50IGkgLT4gZmxvYXQgaVxuICAgICAgfCBgRmxvYXQgZiAtPiBmXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50IG9yIGBGbG9hdFwiIGpzb25cblxuICAgIGxldCB0b19udW1iZXJfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYEludCBpIC0+IFNvbWUgKGZsb2F0IGkpXG4gICAgICB8IGBGbG9hdCBmIC0+IFNvbWUgZlxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50LCBgRmxvYXQgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9faW50ID0gZnVuY3Rpb24gfCBgSW50IGkgLT4gaSB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50XCIganNvblxuXG4gICAgbGV0IHRvX2ludF9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgSW50IGkgLT4gU29tZSBpXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBJbnQgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgZmlsdGVyX2ludCBsID0gU2hhcmVkLmZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBJbnQgaSAtPiBTb21lIGkgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX251bWJlciBsID1cbiAgICAgIFNoYXJlZC5maWx0ZXJfbWFwIChcbiAgICAgICAgZnVuY3Rpb25cbiAgICAgICAgfCBgSW50IGkgLT4gU29tZSAoZmxvYXQgaSlcbiAgICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgICAgfCBfIC0+IE5vbmVcbiAgICAgICkgbFxuICBlbmRcblxuICBtb2R1bGUgdHlwZSBJbnRlcm5hbF9leHRlbmRlZF9pbnRmID0gc2lnXG4gICAgdmFsIHNvcnQgOiAoWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCB8IGBMaXN0IG9mICdhIGxpc3QgfFxuICAgICAgICAgICAgICAgICAgIGBUdXBsZSBvZiAnYSBsaXN0IHwgYFZhcmlhbnQgb2YgJ2IgKiAnYSBvcHRpb24gXSBhcyAnYSkgLT4gJ2FcbiAgZW5kXG5cbiAgbW9kdWxlIEV4dGVuZGVkKE0gOiBTKSA6IEludGVybmFsX2V4dGVuZGVkX2ludGYgPSBzdHJ1Y3RcblxuICAgIGxldCByZWMgc29ydCBqc29uID1cbiAgICAgIG1hdGNoIGpzb24gd2l0aFxuICAgICAgfCBgQXNzb2MgbyAtPlxuICAgICAgICBsZXQgbyA9IExpc3QucmV2IChMaXN0LnJldl9tYXAgKGZ1biAoaywgdikgLT4gKGssIHNvcnQgdikpIG8pIGluXG4gICAgICAgIGBBc3NvYyAoKExpc3Quc3RhYmxlX3NvcnQgKGZ1biAoazEsIF8pIChrMiwgXykgLT4gU3RyaW5nLmNvbXBhcmUgazEgazIpKSBvKVxuICAgICAgfCBgVHVwbGUgbFxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgIGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIHNvcnQgbCkpXG4gICAgICB8IGBWYXJpYW50IChrLCBTb21lIHYpIGFzIHYxIC0+XG4gICAgICAgIGxldCB2JyA9IHNvcnQgdiBpbiBpZiB2JyA9PSB2IHRoZW4gdjEgZWxzZSBgVmFyaWFudCAoaywgU29tZSB2JylcbiAgICAgIHwgZWwgLT4gIGVsXG4gIGVuZFxuXG5lbmRcblxubW9kdWxlIFN0cmljdCA9IHN0cnVjdFxuICBtb2R1bGUgTSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uU3RyaWN0Lmpzb25cbiAgICBsZXQgbnVsbCAoKSA9IGBOdWxsXG4gIGVuZFxuICBpbmNsdWRlIEludGVybmFsLlN0cmljdChNKVxuZW5kXG5cbm1vZHVsZSBCYXNpYyA9IHN0cnVjdFxuICBtb2R1bGUgTSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uQmFzaWMuanNvblxuICAgIGxldCBudWxsICgpID0gYE51bGxcbiAgZW5kXG4gIGluY2x1ZGUgSW50ZXJuYWwuU3RyaWN0KE0pXG4gIGluY2x1ZGUgSW50ZXJuYWwuQmFzaWMoTSlcbmVuZFxuXG5tb2R1bGUgRXh0ZW5kZWQgPSBzdHJ1Y3RcbiAgbW9kdWxlIE0gPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPSBKc29uLkV4dGVuZGVkLmpzb25cbiAgICBsZXQgbnVsbCAoKSA9IGBOdWxsXG4gIGVuZFxuICBpbmNsdWRlIEludGVybmFsLlN0cmljdChNKVxuICBpbmNsdWRlIEludGVybmFsLkJhc2ljKE0pXG4gIGluY2x1ZGUgSW50ZXJuYWwuRXh0ZW5kZWQoTSlcbmVuZFxuXG5tb2R1bGUgWW9qc29uX3NhZmUgPSBzdHJ1Y3RcbiAgbW9kdWxlIE0gPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPVxuICAgICAgW1xuICAgICAgfCBgTnVsbFxuICAgICAgfCBgQm9vbCBvZiBib29sXG4gICAgICB8IGBJbnQgb2YgaW50XG4gICAgICB8IGBJbnRsaXQgb2Ygc3RyaW5nXG4gICAgICB8IGBGbG9hdCBvZiBmbG9hdFxuICAgICAgfCBgU3RyaW5nIG9mIHN0cmluZ1xuICAgICAgfCBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICAgIHwgYExpc3Qgb2YganNvbiBsaXN0XG4gICAgICB8IGBUdXBsZSBvZiBqc29uIGxpc3RcbiAgICAgIHwgYFZhcmlhbnQgb2YgKHN0cmluZyAqIGpzb24gb3B0aW9uKVxuICAgICAgXVxuXG4gICAgbGV0IG51bGwgKCkgPSBgTnVsbFxuICBlbmRcbiAgaW5jbHVkZSBJbnRlcm5hbC5TdHJpY3QoTSlcbiAgaW5jbHVkZSBJbnRlcm5hbC5CYXNpYyhNKVxuICBpbmNsdWRlIEludGVybmFsLkV4dGVuZGVkKE0pXG5lbmRcbiIsImxldCB0b2tlbl90b19zdHJpbmcgKHRvazpUb2tlbnMudG9rZW4pID1cbiAgbWF0Y2ggdG9rIHdpdGhcbiAgfCBTVFJJTkcgcyAtPiBzXG4gIHwgT1MgLT4gXCJ7XCJcbiAgfCBPRSAtPiBcIn1cIlxuICB8IE5VTEwgLT4gXCJOdWxsXCJcbiAgfCBORUdJTkZJTklUWSAtPiBcIi1JbmZpbml0eVwiXG4gIHwgTkFOIC0+IFwiTkFOXCJcbiAgfCBMRVhfRVJST1IgZXJyIC0+IFwiaW5wdXQgZXJyb3IgJ1wiIF4gZXJyIF4gXCInXCJcbiAgfCBMQVJHRUlOVCBzIC0+IHNcbiAgfCBJTlQgaSAtPiBzdHJpbmdfb2ZfaW50IGlcbiAgfCBJTkZJTklUWSAtPiBcIkluZmluaXR5XCJcbiAgfCBGTE9BVCBmIC0+IHN0cmluZ19vZl9mbG9hdCBmXG4gIHwgRU9GIC0+IFwiZW5kLW9mLWZpbGVcIlxuICB8IENPTVBMSUFOQ0VfRVJST1IgZXJyIC0+IGVyclxuICB8IENPTU1BIC0+IFwiLFwiXG4gIHwgQ09MT04gLT4gXCI6XCJcbiAgfCBCT09MIGIgLT4gaWYgYiB0aGVuIFwidHJ1ZVwiIGVsc2UgXCJmYWxzZVwiXG4gIHwgQVMgLT4gXCJbXCJcbiAgfCBBRSAtPiBcIl1cIlxuICB8IFZTIC0+IFwiPFwiXG4gIHwgVkUgLT4gXCI+XCJcbiAgfCBUUyAtPiBcIihcIlxuICB8IFRFIC0+IFwiKVwiXG4iLCJtb2R1bGUgdHlwZSBSZWFkZXJfc3RyaW5nX2ZpbGUgPSBzaWdcbiAgdHlwZSBqc29uXG5cbiAgdmFsIGpzb25fb2Zfc3RyaW5nIDogc3RyaW5nIC0+IChqc29uLCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl9vZl9zdHJpbmdfZXhuIDogc3RyaW5nIC0+IGpzb25cbiAgdmFsIGpzb25fb2ZfZmlsZSA6IHN0cmluZyAtPiAoanNvbiwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfZmlsZV9leG4gOiBzdHJpbmcgLT4ganNvblxuICB2YWwganNvbl9vZl9jaGFubmVsIDogaW5fY2hhbm5lbCAtPiAoanNvbiwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfY2hhbm5lbF9leG4gOiBpbl9jaGFubmVsIC0+IGpzb25cbiAgdmFsIGpzb25fb2ZfZnVuY3Rpb24gOiAoYnl0ZXMgLT4gaW50IC0+IGludCkgLT4gKGpzb24sIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX29mX2Z1bmN0aW9uX2V4biA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiBqc29uXG4gIHZhbCBqc29uX29mX2xleGJ1ZiA6IExleGluZy5sZXhidWYgLT4gKGpzb24sIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX29mX2xleGJ1Zl9leG4gOiBMZXhpbmcubGV4YnVmIC0+IGpzb25cbiAgdmFsIG9mX3N0cmluZyA6IHN0cmluZyAtPiBqc29uXG4gIHZhbCBvZl9maWxlIDogc3RyaW5nIC0+IGpzb25cbiAgdmFsIG9mX2NoYW5uZWwgOiBpbl9jaGFubmVsIC0+IGpzb25cbiAgdmFsIG9mX2Z1bmN0aW9uIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IGpzb25cblxuICB2YWwganNvbl9vZl9zdHJpbmdfZXJyb3JfaW5mbyA6IHN0cmluZyAtPiAoanNvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfZmlsZV9lcnJvcl9pbmZvIDogc3RyaW5nIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gOiBpbl9jaGFubmVsIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9mdW5jdGlvbl9lcnJvcl9pbmZvIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9sZXhidWZfZXJyb3JfaW5mbyA6IExleGluZy5sZXhidWYgLT4gKGpzb24sIEVycm9yX2luZm8udCkgcmVzdWx0XG4gIHZhbCBqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvX2NvbXBhdCA6ID9zdHJlYW06Ym9vbCAtPiBMZXhpbmcubGV4YnVmIC0+IChqc29uIG9wdGlvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcblxuICB2YWwgc3RyZWFtX2Zyb21fc3RyaW5nIDogc3RyaW5nIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2NoYW5uZWwgOiA/ZmluOih1bml0IC0+IHVuaXQpIC0+IGluX2NoYW5uZWwgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fZmlsZSA6IHN0cmluZyAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9mdW5jdGlvbiA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9sZXhidWYgOiBMZXhpbmcubGV4YnVmIC0+IGpzb24gU3RyZWFtLnRcblxuICB2YWwgc3RyZWFtX2Zyb21fc3RyaW5nX2Vycm9yX2luZm8gOiBzdHJpbmcgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fY2hhbm5lbF9lcnJvcl9pbmZvIDogP2ZpbjoodW5pdCAtPiB1bml0KSAtPiBpbl9jaGFubmVsIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyA6IHN0cmluZyAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9mdW5jdGlvbl9lcnJvcl9pbmZvIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIDogTGV4aW5nLmxleGJ1ZiAtPiBqc29uIFN0cmVhbS50XG5lbmRcblxubW9kdWxlIE1ha2UgKExleHhlciA6IENvbXBsaWFudF9sZXh4ZXIuTGV4ICkgKFBhcnNlciA6IFBhcnNlci5QYXJzZXIpIDogUmVhZGVyX3N0cmluZ19maWxlXG4gIHdpdGggdHlwZSBqc29uID0gUGFyc2VyLkNvbXBsaWFuY2UuanNvblxuPSBzdHJ1Y3RcbiAgdHlwZSBqc29uID0gUGFyc2VyLkNvbXBsaWFuY2UuanNvblxuXG4gIGxldCByZWFkX2pzb24nIH5sZXhidWYgPVxuICAgIGxldCByZWFkZXIgKCkgPSBMZXh4ZXIucmVhZCBsZXhidWYgaW5cbiAgICBtYXRjaCBQYXJzZXIuZGVjb2RlIH5yZWFkZXIgd2l0aFxuICAgIHwgT2sgTm9uZSAtPiBFcnJvciBcImVtcHR5IGlucHV0XCJcbiAgICB8IE9rIChTb21lIHJlcykgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IEVPRiAtPiBPayByZXNcbiAgICAgIHwgZXhjZXB0aW9uIExleHhlcl91dGlscy5MZXhfZXJyb3IgZXJyIC0+IEVycm9yIGVyclxuICAgICAgfCB0b2sgLT4gRXJyb3IgKFwianVuayBhZnRlciBlbmQgb2YgSlNPTiB2YWx1ZTogXCIgXiAoVG9rZW5fdXRpbHMudG9rZW5fdG9fc3RyaW5nIHRvaykpXG4gICAgICBlbmRcbiAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuXG4gIGxldCByZWFkX2pzb24gfmxleGJ1ZiA9XG4gICAgbWF0Y2ggcmVhZF9qc29uJyB+bGV4YnVmIHdpdGhcbiAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPlxuICAgICAgbGV0IGVycl9pbmZvID0gRXJyb3JfaW5mby5jcmVhdGVfZnJvbV9sZXhidWYgbGV4YnVmIHMgaW5cbiAgICAgIEVycm9yIChFcnJvcl9pbmZvLnRvX3N0cmluZyBlcnJfaW5mbylcblxuICBsZXQganNvbl9vZl9zdHJpbmcgcyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX3N0cmluZyBzIGluXG4gICAgcmVhZF9qc29uIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9zdHJpbmdfZXhuIHMgPVxuICAgIG1hdGNoIGpzb25fb2Zfc3RyaW5nIHMgd2l0aFxuICAgIHwgT2sgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPiByYWlzZSAoRmFpbHVyZSBzKVxuXG4gIGxldCBvZl9zdHJpbmcgcyA9IGpzb25fb2Zfc3RyaW5nX2V4biBzXG5cbiAgbGV0IGpzb25fb2ZfZmlsZSBmaWxlbmFtZSA9XG4gICAgdHJ5IGJlZ2luXG4gICAgICBsZXQgaW5jID0gb3Blbl9pbiBmaWxlbmFtZSBpblxuICAgICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2NoYW5uZWwgaW5jIGluXG4gICAgICBsZXQgcmVzID0gcmVhZF9qc29uIH5sZXhidWYgaW5cbiAgICAgICAgY2xvc2VfaW4gaW5jO1xuICAgICAgICByZXNcbiAgICBlbmRcbiAgICB3aXRoIFN5c19lcnJvciBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fb2ZfZmlsZV9leG4gZmlsZW5hbWUgPVxuICAgIG1hdGNoIGpzb25fb2ZfZmlsZSBmaWxlbmFtZSB3aXRoXG4gICAgfCBPayByZXMgLT4gcmVzXG4gICAgfCBFcnJvciBzIC0+IHJhaXNlIChGYWlsdXJlIHMpXG5cbiAgbGV0IGpzb25fb2ZfY2hhbm5lbCBpbmMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGluYyBpblxuICAgIHJlYWRfanNvbiB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfY2hhbm5lbF9leG4gaW5jID1cbiAgICBtYXRjaCBqc29uX29mX2NoYW5uZWwgaW5jIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQganNvbl9vZl9mdW5jdGlvbiBmID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fZnVuY3Rpb24gZiBpblxuICAgIHJlYWRfanNvbiB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfbGV4YnVmIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9sZXhidWZfZXhuIGxleGJ1ZiA9XG4gICAgbWF0Y2gganNvbl9vZl9sZXhidWYgbGV4YnVmIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQganNvbl9vZl9mdW5jdGlvbl9leG4gZiA9XG4gICAgbWF0Y2gganNvbl9vZl9mdW5jdGlvbiBmIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQgb2ZfZmlsZSA9IGpzb25fb2ZfZmlsZV9leG5cbiAgbGV0IG9mX2NoYW5uZWwgPSBqc29uX29mX2NoYW5uZWxfZXhuXG4gIGxldCBvZl9mdW5jdGlvbiA9IGpzb25fb2ZfZnVuY3Rpb25fZXhuXG5cbiAgKCogRXJyb3JfaW5mby50IHJldHVybmluZyBmdW5jdGlvbnMgKilcblxuICBsZXQgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZiA9XG4gICAgbWF0Y2ggcmVhZF9qc29uJyB+bGV4YnVmIHdpdGhcbiAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgZXJyIC0+XG4gICAgICBsZXQgZXJyX2luZm8gPSBFcnJvcl9pbmZvLmNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgZXJyIGluXG4gICAgICBFcnJvciBlcnJfaW5mb1xuXG4gIGxldCBqc29uX29mX3N0cmluZ19lcnJvcl9pbmZvIHMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9zdHJpbmcgcyBpblxuICAgIHJlYWRfanNvbl9lcnJvcl9pbmZvIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gaW5jID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpbmMgaW5cbiAgICByZWFkX2pzb25fZXJyb3JfaW5mbyB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfZmlsZV9lcnJvcl9pbmZvIGZpbGVuYW1lID1cbiAgICB0cnkgYmVnaW5cbiAgICAgIGxldCBpbmMgPSBvcGVuX2luIGZpbGVuYW1lIGluXG4gICAgICBsZXQgcmVzID0ganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gaW5jIGluXG4gICAgICAgIGNsb3NlX2luIGluYztcbiAgICAgICAgcmVzXG4gICAgZW5kXG4gICAgd2l0aCBTeXNfZXJyb3IgZXJyIC0+IEVycm9yIHsgRXJyb3JfaW5mby5saW5lID0gMDsgc3RhcnRfY2hhciA9IDA7IGVuZF9jaGFyID0gMDsgbXNnID0gZXJyIH1cblxuICBsZXQganNvbl9vZl9mdW5jdGlvbl9lcnJvcl9pbmZvIGYgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9mdW5jdGlvbiBmIGluXG4gICAgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZlxuXG4gIGxldCBqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZlxuXG4gICgqIEludGVybmFsIGNvbXBhdGliaWxpdHkgZnVuY3Rpb24gc3VwcG9ydGluZyB0aGUgc3RyZWFtIGZsYWcgKilcblxuICBsZXQganNvbl9vZl9sZXhidWZfZXJyb3JfaW5mb19jb21wYXQgPyhzdHJlYW0gPSBmYWxzZSkgbGV4YnVmID1cbiAgICBsZXQgcmVhZGVyICgpID0gTGV4eGVyLnJlYWQgbGV4YnVmIGluXG4gICAgbGV0IHJlcyA9IG1hdGNoIFBhcnNlci5kZWNvZGUgfnJlYWRlciB3aXRoXG4gICAgfCBPayBOb25lIC0+IGlmIHN0cmVhbSB0aGVuIE9rIE5vbmUgZWxzZSBFcnJvciBcImVtcHR5IGlucHV0XCJcbiAgICB8IE9rIChTb21lIHJlcykgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHN0cmVhbSB3aXRoXG4gICAgICB8IHRydWUgLT4gT2sgKFNvbWUgcmVzKVxuICAgICAgfCBmYWxzZSAtPiBiZWdpblxuICAgICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgICB8IEVPRiAtPiBPayAoU29tZSByZXMpXG4gICAgICAgIHwgZXhjZXB0aW9uIExleHhlcl91dGlscy5MZXhfZXJyb3IgZXJyIC0+IEVycm9yIGVyclxuICAgICAgICB8IHRvayAtPiBFcnJvciAoXCJqdW5rIGFmdGVyIGVuZCBvZiBKU09OIHZhbHVlOiBcIiBeIChUb2tlbl91dGlscy50b2tlbl90b19zdHJpbmcgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICBlbmRcbiAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuICAgIGluXG4gICAgbWF0Y2ggcmVzIHdpdGhcbiAgICB8IE9rIHJlcyAtPiBPayByZXNcbiAgICB8IEVycm9yIHMgLT5cbiAgICAgIGxldCBlcnJfaW5mbyA9IEVycm9yX2luZm8uY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBzIGluXG4gICAgICBFcnJvciBlcnJfaW5mb1xuXG5cbiAgKCogU3RyZWFtLnQgcmV0dXJuaW5nIGZ1bmN0aW9ucyAqKVxuXG4gIGxldCByZWFkX2pzb25fc3RyZWFtIH5maW4gfmxleGJ1ZiA9XG4gICAgbGV0IHJlYWRlciAoKSA9IExleHhlci5yZWFkIGxleGJ1ZiBpblxuICAgIGxldCBmIF9pID1cbiAgICAgIG1hdGNoIFBhcnNlci5kZWNvZGUgfnJlYWRlciB3aXRoXG4gICAgICB8IE9rIE5vbmUgLT4gZmluICgpOyBOb25lXG4gICAgICB8IE9rIChTb21lIHJlcykgLT4gU29tZSByZXNcbiAgICAgIHwgRXJyb3IgZXJyIC0+XG4gICAgICAgIGxldCAoKSA9IGZpbiAoKSBpblxuICAgICAgICBsZXQgZXJyX2luZm8gPSBFcnJvcl9pbmZvLmNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgZXJyIGluXG4gICAgICAgIGxldCBtc2cgPSBFcnJvcl9pbmZvLnRvX3N0cmluZyBlcnJfaW5mbyBpblxuICAgICAgICByYWlzZSAoRmFpbHVyZSBtc2cpXG4gICAgaW5cbiAgICBTdHJlYW0uZnJvbSBmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX3N0cmluZyBzID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fc3RyaW5nIHMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9jaGFubmVsID8oZmluID0gZnVuICgpIC0+ICgpKSBpbmMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGluYyBpblxuICAgIHJlYWRfanNvbl9zdHJlYW0gfmZpbiB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2Z1bmN0aW9uIGYgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9mdW5jdGlvbiBmIGluXG4gICAgcmVhZF9qc29uX3N0cmVhbSB+ZmluOihmdW4gKCkgLT4gKCkpIH5sZXhidWZcblxuICBsZXQgc3RyZWFtX2Zyb21fZmlsZSBmaWxlbmFtZSA9XG4gICAgbGV0IGluYyA9IG9wZW5faW4gZmlsZW5hbWUgaW5cbiAgICBzdHJlYW1fZnJvbV9jaGFubmVsIH5maW46KGZ1biAoKSAtPiBjbG9zZV9pbiBpbmMpIGluY1xuXG4gIGxldCBzdHJlYW1fZnJvbV9sZXhidWYgbGV4YnVmID1cbiAgICByZWFkX2pzb25fc3RyZWFtIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG4gICgqIFN0cmVhbS50IEpzb25fZXJyb3JfaW5mbyByYWlzaW5nIGZ1bmN0aW9ucyAqKVxuXG4gIGxldCByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbiB+bGV4YnVmID1cbiAgICBsZXQgcmVhZGVyICgpID0gTGV4eGVyLnJlYWQgbGV4YnVmIGluXG4gICAgbGV0IGYgX2kgPVxuICAgICAgbWF0Y2ggUGFyc2VyLmRlY29kZSB+cmVhZGVyIHdpdGhcbiAgICAgIHwgT2sgTm9uZSAtPiBmaW4gKCk7IE5vbmVcbiAgICAgIHwgT2sgKFNvbWUgcmVzKSAtPiBTb21lIHJlc1xuICAgICAgfCBFcnJvciBlcnIgLT5cbiAgICAgICAgbGV0ICgpID0gZmluICgpIGluXG4gICAgICAgIGxldCBlcnJfaW5mbyA9IEVycm9yX2luZm8uY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBlcnIgaW5cbiAgICAgICAgcmFpc2UgKEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9zdHJpbmdfZXJyb3JfaW5mbyBzID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fc3RyaW5nIHMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgaW5jID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpbmMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbiB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2Z1bmN0aW9uX2Vycm9yX2luZm8gZiA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2Z1bmN0aW9uIGYgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSA9XG4gICAgbGV0IGluYyA9IG9wZW5faW4gZmlsZW5hbWUgaW5cbiAgICBzdHJlYW1fZnJvbV9jaGFubmVsX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+IGNsb3NlX2luIGluYykgaW5jXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG5lbmRcbiIsIm1vZHVsZSB0eXBlIEludGYgPSBzaWdcbiAgdmFsIGpzb25fdG9fZmlsZSA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19maWxlX2V4biA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fY2hhbm5lbCA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19jaGFubmVsX2V4biA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fZmlsZV9odW0gOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAodW5pdCwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fZmlsZV9odW1fZXhuIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwganNvbl90b19jaGFubmVsX2h1bSA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19jaGFubmVsX2h1bV9leG4gOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19maWxlIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fZmlsZV9odW0gOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19jaGFubmVsIDogIG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fY2hhbm5lbF9odW0gOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBzdHJlYW1fdG9fY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgU3RyZWFtLnQgLT4gdW5pdFxuICB2YWwgc3RyZWFtX3RvX2ZpbGUgOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCBTdHJlYW0udCAtPiB1bml0XG5lbmRcblxubW9kdWxlIE1ha2UgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpIDogSW50ZiA9IHN0cnVjdFxuXG4gIGxldCBuaWJibGVfdG9faGV4IGkgPSBjaGFyX29mX2ludCAoaWYgaSA+IDkgdGhlbiA2NSArIGkgLSAxMCBlbHNlIDQ4ICsgaSlcblxuICBsZXQgYWRkX2hleF9ieXRlIG9jIGkgPVxuICAgIG91dHB1dF9jaGFyIG9jIChuaWJibGVfdG9faGV4ICgoaSBsc3IgNCkgbGFuZCAweDBmKSk7XG4gICAgb3V0cHV0X2NoYXIgb2MgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxuICBsZXQgZXNjYXBlIG9jIHMgPVxuICAgIGxldCBhZGRfY2hhciA9IG91dHB1dF9jaGFyIG9jIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBvdXRwdXRfc3RyaW5nIG9jIGluXG4gICAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJ1wiJyAgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXCJcIlxuICAgICAgfCAnXFxcXCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXFxcIlxuICAgICAgfCAnXFxiJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcYlwiXG4gICAgICB8ICdcXDAxMicgLT4gYWRkX3N0cmluZyBcIlxcXFxmXCJcbiAgICAgIHwgJ1xcbicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXG5cIlxuICAgICAgfCAnXFxyJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcclwiXG4gICAgICB8ICdcXHQnICAgLT4gYWRkX3N0cmluZyBcIlxcXFx0XCJcbiAgICAgIHwgJ1xceDAwJy4uJ1xceDFGJ1xuICAgICAgfCAnXFx4N0YnIGFzIGMgLT5cbiAgICAgICAgYWRkX3N0cmluZyBcIlxcXFx1MDBcIjsgIGFkZF9oZXhfYnl0ZSBvYyAoaW50X29mX2NoYXIgYylcbiAgICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gICAgZG9uZVxuICAgXG4gIGxldCBqc29uX3RvX2NoYW5uZWxfZm10IG9jIGpzb24gfmVvbCB+aW5jciB+cHNlcCA9IFxuICAgIGxldCBhZGRfY2hhciA9IG91dHB1dF9jaGFyIG9jIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBvdXRwdXRfc3RyaW5nIG9jIGluXG4gICAgbGV0IGFkZF9xdW90ZV9zdHJpbmcgcyA9IGFkZF9jaGFyICdcIic7IGVzY2FwZSBvYyBzOyBhZGRfY2hhciAnXCInIGluXG4gICAgbGV0IGFkZF9pbnQgaSA9IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9pbnQgaSkgaW5cbiAgICBsZXQgYWRkX2Zsb2F0IGYgPSBhZGRfc3RyaW5nIChDb21wbGlhbmNlLm51bWJlcl90b19zdHJpbmcgZikgaW5cbiAgICBsZXQgcHNlcCA9IFwiOlwiIF4gcHNlcCBpblxuICAgIGxldCByZWMgZm10IG9mZiB2YWx1ZSA9XG4gICAgICBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICB8IGBBc3NvYyBvIC0+XG4gICAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICAgIGFkZF9jaGFyICd7JzsgYWRkX3N0cmluZyBlb2w7IGpzb25fYXNzb2MgKG9mZiArIGluY3IpIG87XG4gICAgICAgIGFkZF9zdHJpbmcgZW9sOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJ30nXG4gICAgICB8IGBMaXN0IGwgLT5cbiAgICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgICAgYWRkX2NoYXIgJ1snOyBhZGRfc3RyaW5nIGVvbDsganNvbl9saXN0IChvZmYgKyBpbmNyKSBsO1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICddJ1xuICAgICAgfCBgTnVsbCAtPiBhZGRfc3RyaW5nIFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gYWRkX3N0cmluZyAoc3RyaW5nX29mX2Jvb2wgYilcbiAgICAgIHwgYEludCBpIC0+IGFkZF9pbnQgaVxuICAgICAgfCBgSW50bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBGbG9hdCBmIC0+IGFkZF9mbG9hdCBmXG4gICAgICB8IGBGbG9hdGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gYWRkX3F1b3RlX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmdsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFR1cGxlIHQgLT5cbiAgICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgICAgYWRkX2NoYXIgJygnOyBhZGRfc3RyaW5nIGVvbDsganNvbl9saXN0IChvZmYgKyBpbmNyKSB0O1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICcpJ1xuICAgICAgfCBgVmFyaWFudCB2IC0+XG4gICAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICAgIGFkZF9jaGFyICc8JzsgYWRkX3N0cmluZyBlb2w7ICB2YXJpYW50IChvZmYgKyBpbmNyKSB2O1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICc+J1xuICAgIGFuZCBqc29uX2Fzc29jIG9mZiBvID1cbiAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICBsZXQgc2VwID0gcmVmIGxkciBpblxuICAgICAgbGV0IG5ld3NlcCA9IFwiLFwiIF4gZW9sIF4gbGRyIGluXG4gICAgICBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IG5ld3NlcDsgcGFpciBvZmYgdiApIG9cbiAgICBhbmQgcGFpciBvZmYgKGssIHYpID0gYWRkX3F1b3RlX3N0cmluZyBrOyBhZGRfc3RyaW5nIHBzZXA7IGZtdCBvZmYgdlxuICAgIGFuZCBqc29uX2xpc3Qgb2ZmIGwgPVxuICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgIGxldCBzZXAgPSByZWYgbGRyIGluXG4gICAgICBsZXQgbmV3c2VwID0gXCIsXCIgXiBlb2wgXiBsZHIgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuIHYgLT4gYWRkX3N0cmluZyAhc2VwOyBzZXAgOj0gbmV3c2VwOyBmbXQgb2ZmIHYgKSBsXG4gICAgYW5kIHZhcmlhbnQgb2ZmIChrLCBqKSA9XG4gICAgICBhZGRfcXVvdGVfc3RyaW5nIGs7XG4gICAgICBtYXRjaCBqIHdpdGhcbiAgICAgIHwgU29tZSBqIC0+IGFkZF9zdHJpbmcgcHNlcDsgZm10IChvZmYgKyBpbmNyKSBqXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICBpblxuICAgIGZtdCAwIGpzb247XG4gICAgYWRkX3N0cmluZyBlb2xcblxuICBsZXQganNvbl90b19jaGFubmVsJyA9IGpzb25fdG9fY2hhbm5lbF9mbXQgfmVvbDpcIlwiIH5pbmNyOjAgfnBzZXA6XCJcIlxuICBsZXQganNvbl90b19jaGFubmVsX2h1bScgPSBqc29uX3RvX2NoYW5uZWxfZm10IH5lb2w6XCJcXG5cIiB+aW5jcjoyIH5wc2VwOlwiIFwiXG5cbiAgbGV0IGpzb25fdG9fY2hhbm5lbCBvYyBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fY2hhbm5lbCcgb2MganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fY2hhbm5lbF9odW0gb2MganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX2NoYW5uZWxfaHVtJyBvYyBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19jaGFubmVsX2V4biA9IGpzb25fdG9fY2hhbm5lbCdcbiAgbGV0IGpzb25fdG9fY2hhbm5lbF9odW1fZXhuID0ganNvbl90b19jaGFubmVsX2h1bSdcblxuICBsZXQganNvbl90b19maWxlIGZpbGUganNvbiA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZSBpblxuICAgIGxldCByZXMgPSBqc29uX3RvX2NoYW5uZWwgb2MganNvbiBpblxuICAgIGNsb3NlX291dCBvYztcbiAgICByZXNcblxuICBsZXQganNvbl90b19maWxlX2h1bSBmaWxlIGpzb24gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICBsZXQgcmVzID0ganNvbl90b19jaGFubmVsX2h1bSBvYyBqc29uIGluXG4gICAgY2xvc2Vfb3V0IG9jO1xuICAgIHJlc1xuXG4gIGxldCBqc29uX3RvX2ZpbGVfZXhuIGZpbGUganNvbiA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZSBpblxuICAgIHRyeSAoanNvbl90b19jaGFubmVsJyBvYyBqc29uOyBjbG9zZV9vdXQgb2MpIHdpdGhcbiAgICB8IGV4biAtPiBjbG9zZV9vdXQgb2M7IHJhaXNlIGV4blxuXG4gIGxldCBqc29uX3RvX2ZpbGVfaHVtX2V4biBmaWxlIGpzb24gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICB0cnkgKGpzb25fdG9fY2hhbm5lbF9odW0nIG9jIGpzb247IGNsb3NlX291dCBvYykgd2l0aFxuICAgIHwgZXhuIC0+IGNsb3NlX291dCBvYzsgcmFpc2UgZXhuXG5cbiAgbGV0IHRvX2ZpbGUgPSBqc29uX3RvX2ZpbGVfZXhuXG4gIGxldCB0b19maWxlX2h1bSA9IGpzb25fdG9fZmlsZV9odW1fZXhuXG4gIGxldCB0b19jaGFubmVsID0ganNvbl90b19jaGFubmVsX2V4blxuICBsZXQgdG9fY2hhbm5lbF9odW0gPSBqc29uX3RvX2NoYW5uZWxfaHVtX2V4blxuXG4gIGxldCBzdHJlYW1fdG9fY2hhbm5lbCBvYyBzdHJlYW0gPVxuICAgIFN0cmVhbS5pdGVyIChmdW4ganNvbiAtPiBqc29uX3RvX2NoYW5uZWxfZXhuIG9jIGpzb247IG91dHB1dF9jaGFyIG9jICdcXG4nKSBzdHJlYW1cblxuICBsZXQgc3RyZWFtX3RvX2ZpbGUgZmlsZSBzdHJlYW0gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICB0cnkgKHN0cmVhbV90b19jaGFubmVsIG9jIHN0cmVhbTsgY2xvc2Vfb3V0IG9jKSB3aXRoXG4gICAgfCBleG4gLT4gY2xvc2Vfb3V0IG9jOyByYWlzZSBleG5cbmVuZFxuIiwibW9kdWxlIHR5cGUgSW50ZiA9IHNpZ1xuICB2YWwganNvbl90b19zdHJpbmcgOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IChzdHJpbmcsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX3N0cmluZ19leG4gOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHN0cmluZ1xuICB2YWwgdG9fc3RyaW5nIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiBzdHJpbmdcbiAgdmFsIGpzb25fdG9fc3RyaW5nX2h1bSA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHN0cmluZywgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fc3RyaW5nX2h1bV9leG4gOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHN0cmluZ1xuICB2YWwgdG9fc3RyaW5nX2h1bSA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gc3RyaW5nXG4gIHZhbCBqc29uX3RvX2J1ZmZlciA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2J1ZmZlcl9leG4gOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fYnVmZmVyX2h1bSA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2J1ZmZlcl9odW1fZXhuIDogQnVmZmVyLnQgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19idWZmZXIgOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHRvX2J1ZmZlcl9odW0gOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHN0cmVhbV90b19zdHJpbmcgOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIFN0cmVhbS50IC0+IHN0cmluZ1xuICB2YWwgc3RyZWFtX3RvX2J1ZmZlciA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgU3RyZWFtLnQgLT4gdW5pdFxuZW5kXG5cbm1vZHVsZSBNYWtlIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA6IEludGYgPSBzdHJ1Y3RcblxuICBsZXQgbmliYmxlX3RvX2hleCBpID0gY2hhcl9vZl9pbnQgKGlmIGkgPiA5IHRoZW4gNjUgKyBpIC0gMTAgZWxzZSA0OCArIGkpXG5cbiAgbGV0IGFkZF9oZXhfYnl0ZSBidWYgaSA9XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAobmliYmxlX3RvX2hleCAoKGkgbHNyIDQpIGxhbmQgMHgwZikpO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxuICBsZXQgZXNjYXBlIGJ1ZiBzID1cbiAgICBsZXQgYWRkX2NoYXIgPSBCdWZmZXIuYWRkX2NoYXIgYnVmIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBCdWZmZXIuYWRkX3N0cmluZyBidWYgaW5cbiAgICBsZXQgbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgfCAnXCInICAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcIlwiXG4gICAgICB8ICdcXFxcJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcXFwiXG4gICAgICB8ICdcXGInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxiXCJcbiAgICAgIHwgJ1xcMDEyJyAtPiBhZGRfc3RyaW5nIFwiXFxcXGZcIlxuICAgICAgfCAnXFxuJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcblwiXG4gICAgICB8ICdcXHInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxyXCJcbiAgICAgIHwgJ1xcdCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXHRcIlxuICAgICAgfCAnXFx4MDAnLi4nXFx4MUYnXG4gICAgICB8ICdcXHg3RicgYXMgYyAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwiXFxcXHUwMFwiOyAgYWRkX2hleF9ieXRlIGJ1ZiAoaW50X29mX2NoYXIgYylcbiAgICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gICAgZG9uZVxuICAgXG4gIGxldCBqc29uX3RvX2J1ZmZlcicgYnVmIGpzb24gPVxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBlc2NhcGUgYnVmIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBsZXQgYWRkX2ludCBpID0gYWRkX3N0cmluZyAoc3RyaW5nX29mX2ludCBpKSBpblxuICAgIGxldCBhZGRfZmxvYXQgZiA9IGFkZF9zdHJpbmcgKENvbXBsaWFuY2UubnVtYmVyX3RvX3N0cmluZyBmKSBpblxuICAgIGxldCByZWMgZm10IHZhbHVlID1cbiAgICAgIG1hdGNoIHZhbHVlIHdpdGhcbiAgICAgIHwgYEFzc29jIG8gLT4gYWRkX2NoYXIgJ3snOyBqc29uX2Fzc29jIG87IGFkZF9jaGFyICd9J1xuICAgICAgfCBgTGlzdCBsIC0+IGFkZF9jaGFyICdbJzsganNvbl9saXN0IGw7IGFkZF9jaGFyICddJ1xuICAgICAgfCBgTnVsbCAtPiBhZGRfc3RyaW5nIFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gYWRkX3N0cmluZyAoc3RyaW5nX29mX2Jvb2wgYilcbiAgICAgIHwgYEludCBpIC0+IGFkZF9pbnQgaVxuICAgICAgfCBgSW50bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBGbG9hdCBmIC0+IGFkZF9mbG9hdCBmXG4gICAgICB8IGBGbG9hdGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gYWRkX3F1b3RlX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmdsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFR1cGxlIHQgLT4gYWRkX2NoYXIgJygnOyBqc29uX2xpc3QgdDsgYWRkX2NoYXIgJyknXG4gICAgICB8IGBWYXJpYW50IHYgLT4gYWRkX2NoYXIgJzwnOyAgdmFyaWFudCB2OyBhZGRfY2hhciAnPidcbiAgICBhbmQganNvbl9hc3NvYyBvID1cbiAgICAgIGxldCBzZXAgPSByZWYgXCJcIiBpbiBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IFwiLFwiOyBwYWlyIHYgKSBvXG4gICAgYW5kIHBhaXIgKGssIHYpID0gYWRkX3F1b3RlX3N0cmluZyBrOyBhZGRfY2hhciAnOic7IGZtdCB2XG4gICAgYW5kIGpzb25fbGlzdCBsID1cbiAgICAgIGxldCBzZXAgPSByZWYgXCJcIiBpbiBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IFwiLFwiOyBmbXQgdiApIGxcbiAgICBhbmQgdmFyaWFudCAoaywgaikgPVxuICAgICAgYWRkX3F1b3RlX3N0cmluZyBrO1xuICAgICAgbWF0Y2ggaiB3aXRoXG4gICAgICB8IFNvbWUgaiAtPiBhZGRfY2hhciAnOic7IGZtdCBqXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICBpblxuICAgIGZtdCBqc29uXG5cbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bScgYnVmIGpzb24gPVxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBlc2NhcGUgYnVmIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBsZXQgYWRkX2ludCBpID0gYWRkX3N0cmluZyAoc3RyaW5nX29mX2ludCBpKSBpblxuICAgIGxldCBhZGRfZmxvYXQgZiA9IGFkZF9zdHJpbmcgKENvbXBsaWFuY2UubnVtYmVyX3RvX3N0cmluZyBmKSBpblxuICAgIGxldCByZWMgZm10IGxkciB2YWx1ZSA9XG4gICAgICBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICB8IGBBc3NvYyBvIC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCJ7XFxuXCI7IGpzb25fYXNzb2MgKGxkciBeIFwiICBcIikgbztcbiAgICAgICAgYWRkX2NoYXIgJ1xcbic7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnfSdcbiAgICAgIHwgYExpc3QgbCAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwiW1xcblwiOyBqc29uX2xpc3QgKGxkciBeIFwiICBcIikgbDtcbiAgICAgICAgYWRkX2NoYXIgJ1xcbic7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnXSdcbiAgICAgIHwgYE51bGwgLT4gYWRkX3N0cmluZyBcIm51bGxcIlxuICAgICAgfCBgQm9vbCBiIC0+IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9ib29sIGIpXG4gICAgICB8IGBJbnQgaSAtPiBhZGRfaW50IGlcbiAgICAgIHwgYEludGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgRmxvYXQgZiAtPiBhZGRfZmxvYXQgZlxuICAgICAgfCBgRmxvYXRsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFN0cmluZyBzIC0+IGFkZF9xdW90ZV9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nbGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBUdXBsZSB0IC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCIoXFxuXCI7IGpzb25fbGlzdCAobGRyIF4gXCIgIFwiKSB0O1xuICAgICAgICBhZGRfY2hhciAnXFxuJzsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICcpJ1xuICAgICAgfCBgVmFyaWFudCB2IC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCI8XCI7ICB2YXJpYW50IChsZHIgXiBcIiAgXCIpIHY7XG4gICAgICAgIGFkZF9jaGFyICdcXG4nOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJz4nXG4gICAgYW5kIGpzb25fYXNzb2MgbGRyIG8gPVxuICAgICAgbGV0IHNlcCA9IHJlZiBsZHIgaW5cbiAgICAgIGxldCBuZXdzZXAgPSBcIixcXG5cIiBeIGxkciBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBuZXdzZXA7IHBhaXIgbGRyIHYgKSBvXG4gICAgYW5kIHBhaXIgbGRyIChrLCB2KSA9IGFkZF9xdW90ZV9zdHJpbmcgazsgYWRkX3N0cmluZyBcIjogXCI7IGZtdCBsZHIgdlxuICAgIGFuZCBqc29uX2xpc3QgbGRyIGwgPVxuICAgICAgbGV0IHNlcCA9IHJlZiBsZHIgaW5cbiAgICAgIGxldCBuZXdzZXAgPSBcIixcXG5cIiBeIGxkciBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBuZXdzZXA7IGZtdCBsZHIgIHYgKSBsXG4gICAgYW5kIHZhcmlhbnQgbGRyIChrLCBqKSA9XG4gICAgICBhZGRfcXVvdGVfc3RyaW5nIGs7XG4gICAgICBtYXRjaCBqIHdpdGhcbiAgICAgIHwgU29tZSBqIC0+IGFkZF9zdHJpbmcgXCI6IFwiOyBmbXQgKGxkciBeIFwiICBcIikgalxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgaW5cbiAgICBmbXQgXCJcIiBqc29uO1xuICAgIGFkZF9jaGFyICdcXG4nXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nJyBqc29uID1cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxMDAgaW5cbiAgICBqc29uX3RvX2J1ZmZlcicgYnVmIGpzb247XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBqc29uX3RvX3N0cmluZyBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fc3RyaW5nJyBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19idWZmZXIgYnVmIGpzb24gPVxuICAgIHRyeSBPayAoanNvbl90b19idWZmZXInIGJ1ZiBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19zdHJpbmdfZXhuID0ganNvbl90b19zdHJpbmcnXG4gIGxldCB0b19zdHJpbmcgPSBqc29uX3RvX3N0cmluZydcbiAgbGV0IGpzb25fdG9fYnVmZmVyX2V4biA9IGpzb25fdG9fYnVmZmVyJ1xuICBsZXQgdG9fYnVmZmVyID0ganNvbl90b19idWZmZXInXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nX2h1bScganNvbiA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAganNvbl90b19idWZmZXJfaHVtJyBidWYganNvbjtcbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nX2h1bSBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fc3RyaW5nX2h1bScganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bSBidWYganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX2J1ZmZlcicgYnVmIGpzb24pIHdpdGhcbiAgICB8IEZhaWx1cmUgZXJyIC0+IEVycm9yIGVyclxuXG4gIGxldCBqc29uX3RvX3N0cmluZ19odW1fZXhuID0ganNvbl90b19zdHJpbmdfaHVtJ1xuICBsZXQgdG9fc3RyaW5nX2h1bSA9IGpzb25fdG9fc3RyaW5nX2h1bSdcbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bV9leG4gPSBqc29uX3RvX2J1ZmZlcl9odW0nXG4gIGxldCB0b19idWZmZXJfaHVtID0ganNvbl90b19idWZmZXJfaHVtJ1xuXG4gIGxldCBzdHJlYW1fdG9fc3RyaW5nIHN0cmVhbSA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAgbGV0ICgpID0gU3RyZWFtLml0ZXIgKGZ1biBqc29uIC0+IHRvX2J1ZmZlciBidWYganNvbjsgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJykgc3RyZWFtIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBzdHJlYW1fdG9fYnVmZmVyIGJ1ZiBzdHJlYW0gPVxuICAgIFN0cmVhbS5pdGVyIChmdW4ganNvbiAtPiB0b19idWZmZXIgYnVmIGpzb247IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuXG5lbmRcbiIsImV4Y2VwdGlvbiBKc29uX2Vycm9yIG9mIHN0cmluZ1xuXG5sZXQganNvbl9lcnJvciBtc2cgPSByYWlzZSAoSnNvbl9lcnJvciBtc2cpXG5cbnR5cGUgbGV4ZXJfc3RhdGUgPSB7XG4gIGJ1ZiA6IEJ1ZmZlci50O1xuICBtdXRhYmxlIGxudW0gOiBpbnQ7XG4gIG11dGFibGUgYm9sIDogaW50O1xuICBtdXRhYmxlIGZuYW1lIDogc3RyaW5nIG9wdGlvbjtcbn1cblxubGV0IGluaXRfbGV4ZXIgP2J1ZjpfID9mbmFtZSA/KGxudW0gPSAxKSAoKSA9XG4gIHtcbiAgICBidWYgPSBCdWZmZXIuY3JlYXRlIDE2ICAoKiB1bnVzZWQgKilcbiAgOyBsbnVtID0gbG51bVxuICA7IGJvbCA9IDBcbiAgOyBmbmFtZSA9IGZuYW1lXG4gIH1cblxubW9kdWxlIENvbW1vbl9yZWFkZXIgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpID0gc3RydWN0XG4gIG1vZHVsZSBJbnRlcm5hbF9yZWFkZXIgPSBzdHJ1Y3RcbiAgICBtb2R1bGUgTGV4eGVyID0gQ29tcGxpYW50X2xleHhlci5NYWtlKENvbXBsaWFuY2UpXG4gICAgbW9kdWxlIFBhcnNlciA9IFBhcnNlci5NYWtlKENvbXBsaWFuY2UpXG4gICAgaW5jbHVkZSBSZWFkZXJfc3RyaW5nX2ZpbGUuTWFrZSAoTGV4eGVyKSAoUGFyc2VyKVxuICBlbmRcblxuICB0eXBlIGpzb24gPSBJbnRlcm5hbF9yZWFkZXIuanNvblxuICB0eXBlIHQgPSBqc29uXG4gIHR5cGUganNvbl9saW5lID0gWyBgSnNvbiBvZiB0IHwgYEV4biBvZiBleG4gXVxuXG4gICgqIEhlbHBlciBmdW5jdGlvbnMgKilcbiAgbGV0IGVycm9yX3RvX3N0cmluZyAoZXJyb3JfaW5mbzpFcnJvcl9pbmZvLnQpIGZuYW1lIGxudW0gPVxuICAgIGxldCBsbnVtID0gbWF0Y2ggbG51bSB3aXRoIFNvbWUgbG51bSAtPiBsbnVtIHwgTm9uZSAtPiAxIGluXG4gICAgbGV0IGluZm8gPSB7IGVycm9yX2luZm8gd2l0aCBsaW5lID0gbG51bSArIGVycm9yX2luZm8ubGluZSAtIDEgfSBpblxuICAgIGxldCBmbmFtZSA9IG1hdGNoIGZuYW1lIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBcIkxpbmVcIlxuICAgICAgfCBTb21lIG5hbWUgLT4gXCJGaWxlIFwiIF4gbmFtZSBeIFwiLCBsaW5lXCJcbiAgICBpblxuICAgIGxldCBsb2MgPSBQcmludGYuc3ByaW50ZiBcIiVzICVkIGNoYXJzICVkLSVkOiBcIiBmbmFtZSBpbmZvLmxpbmUgaW5mby5zdGFydF9jaGFyIGluZm8uZW5kX2NoYXIgaW5cbiAgICBsb2MgXiBpbmZvLm1zZ1xuXG4gIGxldCBhcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBmIGEgZm5hbWUgbG51bSA9XG4gICAgbWF0Y2ggZiBhIHdpdGhcbiAgICB8IE9rIGpzb24gLT4ganNvblxuICAgIHwgRXJyb3IgZXJyb3JfaW5mbyAtPiBqc29uX2Vycm9yIChlcnJvcl90b19zdHJpbmcgZXJyb3JfaW5mbyBmbmFtZSBsbnVtKVxuXG4gICgqIFJlYWRlcnMgKilcbiAgbGV0IGZyb21fc3RyaW5nID9idWY6XyA/Zm5hbWUgP2xudW0gcyA9XG4gICAgYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLmpzb25fb2Zfc3RyaW5nX2Vycm9yX2luZm8gcyBmbmFtZSBsbnVtXG5cbiAgbGV0IGZyb21fY2hhbm5lbCA/YnVmOl8gP2ZuYW1lID9sbnVtIGluX2NoYW5uZWwgPVxuICAgIGFwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIEludGVybmFsX3JlYWRlci5qc29uX29mX2NoYW5uZWxfZXJyb3JfaW5mbyBpbl9jaGFubmVsIGZuYW1lIGxudW1cblxuICBsZXQgZnJvbV9maWxlID9idWY6XyA/Zm5hbWUgP2xudW0gZmlsZW5hbWUgPVxuICAgIGFwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIEludGVybmFsX3JlYWRlci5qc29uX29mX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSBmbmFtZSBsbnVtXG5cbiAgbGV0IGZyb21fbGV4YnVmIGxleHN0YXRlID9zdHJlYW0gbGV4YnVmID1cbiAgICBsZXQgZm5hbWUgPSBsZXhzdGF0ZS5mbmFtZSBpblxuICAgIGxldCBsbnVtID0gU29tZSBsZXhzdGF0ZS5sbnVtIGluXG4gICAgbWF0Y2ggSW50ZXJuYWxfcmVhZGVyLmpzb25fb2ZfbGV4YnVmX2Vycm9yX2luZm9fY29tcGF0ID9zdHJlYW0gbGV4YnVmIHdpdGhcbiAgICB8IE9rIChTb21lIGpzb24pIC0+IGpzb25cbiAgICB8IE9rIE5vbmUgLT4ganNvbl9lcnJvciBcIkJsYW5rIGlucHV0IGRhdGFcIlxuICAgIHwgRXJyb3IgZXJyb3JfaW5mbyAtPiBqc29uX2Vycm9yIChlcnJvcl90b19zdHJpbmcgZXJyb3JfaW5mbyBmbmFtZSBsbnVtKVxuXG4gIGxldCByZWFkX3QgbGV4c3RhdGUgbGV4YnVmID0gZnJvbV9sZXhidWYgbGV4c3RhdGUgbGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9hcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBzdHJlYW1fZiBhIGZuYW1lIGxudW0gPVxuICAgIGxldCBzdHJlYW0gPSBzdHJlYW1fZiBhIGluXG4gICAgbGV0IGYgX2kgPVxuICAgICAgbWF0Y2ggU3RyZWFtLm5leHQgc3RyZWFtIHdpdGhcbiAgICAgIHwgdiAtPiBTb21lIHZcbiAgICAgIHwgZXhjZXB0aW9uIFN0cmVhbS5GYWlsdXJlIC0+IE5vbmVcbiAgICAgIHwgZXhjZXB0aW9uIEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvIC0+XG4gICAgICAgIGpzb25fZXJyb3IgKGVycm9yX3RvX3N0cmluZyBlcnJfaW5mbyBmbmFtZSBsbnVtKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9zdHJpbmcgP2J1ZjpfID9mbmFtZSA/bG51bSBzID1cbiAgICBzdHJlYW1fYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX3N0cmluZ19lcnJvcl9pbmZvIHMgZm5hbWUgbG51bVxuXG4gIGxldCBzdHJlYW1fZnJvbV9jaGFubmVsID9idWY6XyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgP2ZuYW1lID9sbnVtIGluX2NoYW5uZWwgPVxuICAgIHN0cmVhbV9hcHBseV9hbmRfaGFuZGxlX2Vycm9ycyAoSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyB+ZmluKSBpbl9jaGFubmVsIGZuYW1lIGxudW1cblxuICBsZXQgc3RyZWFtX2Zyb21fZmlsZSA/YnVmOl8gP2ZuYW1lID9sbnVtIGZpbGVuYW1lID1cbiAgICBzdHJlYW1fYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSBmbmFtZSBsbnVtXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2xleGJ1ZiBsZXhzdGF0ZSA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgbGV4YnVmID1cbiAgICBsZXQgc3RyZWFtID0gSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiBpblxuICAgIGxldCBmIF9pID1cbiAgICAgIG1hdGNoIFN0cmVhbS5uZXh0IHN0cmVhbSB3aXRoXG4gICAgICB8IHYgLT4gU29tZSB2XG4gICAgICB8IGV4Y2VwdGlvbiBTdHJlYW0uRmFpbHVyZSAtPiBmaW4gKCk7IE5vbmVcbiAgICAgIHwgZXhjZXB0aW9uIEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvIC0+XG4gICAgICAgIGZpbiAoKTsganNvbl9lcnJvciAoZXJyb3JfdG9fc3RyaW5nIGVycl9pbmZvIGxleHN0YXRlLmZuYW1lIChTb21lIGxleHN0YXRlLmxudW0pKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG5cbiAgbGV0IGxpbmVzdHJlYW1fZnJvbV9jaGFubmVsID9idWY6XyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgP2ZuYW1lID8obG51bSA9IDEpIGljID1cbiAgICBsZXQgZiBpID1cbiAgICAgIHRyeVxuICAgICAgICBsZXQgbG51bSA9IGxudW0gKyBpIGluXG4gICAgICAgIGxldCBsaW5lID0gaW5wdXRfbGluZSBpYyBpbiBTb21lIChgSnNvbiAoZnJvbV9zdHJpbmcgP2ZuYW1lIH5sbnVtIGxpbmUpKVxuICAgICAgd2l0aFxuICAgICAgICB8IEVuZF9vZl9maWxlIC0+IGZpbiAoKTsgTm9uZVxuICAgICAgICB8IGV4bl8gLT4gZmluICgpOyBTb21lIChgRXhuIGV4bl8pXG4gICAgaW5cbiAgICBTdHJlYW0uZnJvbSBmXG5cbiAgbGV0IGxpbmVzdHJlYW1fZnJvbV9maWxlID9idWY6XyA/Zm5hbWU6XyA/bG51bTpfIGZpbGVuYW1lID1cbiAgICBsZXQgaWMgPSBvcGVuX2luIGZpbGVuYW1lIGluXG4gICAgbGluZXN0cmVhbV9mcm9tX2NoYW5uZWwgfmZpbjooZnVuICgpIC0+IGNsb3NlX2luIGljKSBpY1xuZW5kXG5cbm1vZHVsZSBDb21tb25fd3JpdGVyIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA9IHN0cnVjdFxuICBtb2R1bGUgSW50ZXJuYWxfd3JpdGVyID0gc3RydWN0XG4gICAgaW5jbHVkZSBXcml0ZXJfc3RyaW5nLk1ha2UoQ29tcGxpYW5jZSlcbiAgICBpbmNsdWRlIFdyaXRlcl9maWxlLk1ha2UoQ29tcGxpYW5jZSlcbiAgICBpbmNsdWRlIFByZXR0eS5NYWtlKENvbXBsaWFuY2UpXG4gIGVuZFxuXG4gIGxldCB0b19zdGFuZGFyZCBqc29uID1cbiAgICBsZXQgcmVjIG1hcCBub2RlID1cbiAgICAgIG1hdGNoIG5vZGUgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBgTnVsbFxuICAgICAgfCBgQm9vbCBfIGFzIHYgLT4gdlxuICAgICAgfCBgSW50IF8gYXMgdiAtPiB2ICAoKiBpbnQgaXMgb2sgb24gb3V0cHV0ICopXG4gICAgICB8IGBJbnRsaXQgdiAtPiBgU3RyaW5nIHZcbiAgICAgIHwgYEZsb2F0IF8gYXMgdiAtPiB2XG4gICAgICB8IGBGbG9hdGxpdCB2IC0+IGBGbG9hdCAoZmxvYXRfb2Zfc3RyaW5nIHYpXG4gICAgICB8IGBTdHJpbmcgXyBhcyB2IC0+IHZcbiAgICAgIHwgYFN0cmluZ2xpdCBzIC0+IGJlZ2luXG4gICAgICAgIG1hdGNoIFN0cmluZy5sZW5ndGggcyB3aXRoXG4gICAgICAgIHwgMCB8IDEgLT4gYFN0cmluZyBzICAgICAgICAgKCogbWFsZm9ybWVkLCBzaG91bGQgaGF2ZSBkb3VibGUtcXVvdGVzIGF0IHN0YXJ0IGFuZCBlbmQgKilcbiAgICAgICAgfCBfIC0+IGBTdHJpbmcgKFN0cmluZy5zdWIgcyAxIChTdHJpbmcubGVuZ3RoIHMgLSAyKSlcbiAgICAgICAgZW5kXG4gICAgICB8IGBMaXN0IGwgLT4gYExpc3QgKExpc3QubWFwIG1hcCBsKVxuICAgICAgfCBgQXNzb2MgYSAtPiBgQXNzb2MgKExpc3QubWFwIChmdW4gKGlkLCB2KSAtPiAoaWQsIG1hcCB2KSkgYSlcbiAgICAgIHwgYFR1cGxlIHRwbCAtPiBgTGlzdCAoTGlzdC5tYXAgbWFwIHRwbClcbiAgICAgIHwgYFZhcmlhbnQgKG5hbWUsIGpvcHQpIC0+IGJlZ2luXG4gICAgICAgICBtYXRjaCBqb3B0IHdpdGhcbiAgICAgICAgIHwgTm9uZSAtPiBgU3RyaW5nIG5hbWVcbiAgICAgICAgIHwgU29tZSB2IC0+IGBMaXN0IFsgYFN0cmluZyBuYW1lOyAobWFwIHYpIF1cbiAgICAgICAgZW5kXG4gICAgaW5cbiAgICBtYXAganNvblxuXG4gICgqIFdyaXRlcnMgKilcblxuICBsZXQgdG9fc3RyaW5nID9idWY6XyA/bGVuOl8gPyhzdGQgPSBmYWxzZSkganNvbiA9XG4gICAgaWYgc3RkIHRoZW4gSW50ZXJuYWxfd3JpdGVyLnRvX3N0cmluZyAodG9fc3RhbmRhcmQganNvbikgZWxzZSBJbnRlcm5hbF93cml0ZXIudG9fc3RyaW5nIGpzb25cblxuICBsZXQgdG9fY2hhbm5lbCA/YnVmOl8gP2xlbjpfID8oc3RkID0gZmFsc2UpIG91dF9jaGFubmVsIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci50b19jaGFubmVsIG91dF9jaGFubmVsICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnRvX2NoYW5uZWwgb3V0X2NoYW5uZWwganNvblxuXG4gIGxldCB0b19maWxlID9sZW46XyA/KHN0ZCA9IGZhbHNlKSBmaWxlbmFtZSBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIudG9fZmlsZSBmaWxlbmFtZSAodG9fc3RhbmRhcmQganNvbilcbiAgICBlbHNlIEludGVybmFsX3dyaXRlci50b19maWxlIGZpbGVuYW1lIGpzb25cblxuICBsZXQgdG9fb3V0YnVmID8oc3RkID0gZmFsc2UpIGJ1ZiBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIudG9fYnVmZmVyIGJ1ZiAodG9fc3RhbmRhcmQganNvbikgZWxzZSBJbnRlcm5hbF93cml0ZXIudG9fYnVmZmVyIGJ1ZiBqc29uXG5cbiAgbGV0IHRvX291dHB1dCA/YnVmOl8gP2xlbjpfID9zdGQgb3V0IGpzb24gPVxuICAgIGxldCBzdHIgPSB0b19zdHJpbmcgP3N0ZCBqc29uIGluXG4gICAgb3V0I291dHB1dCBzdHIgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbiAgbGV0IHN0cmVhbV90b19zdHJpbmcgP2J1ZjpfID9sZW46XyA/c3RkIHN0cmVhbSA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAgbGV0ICgpID0gU3RyZWFtLml0ZXJcbiAgICAgIChmdW4ganNvbiAtPiB0b19vdXRidWYgP3N0ZCBidWYganNvbjsgIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuICAgIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBzdHJlYW1fdG9fY2hhbm5lbCA/YnVmOl8gP2xlbjpfID9zdGQgb2Mgc3RyZWFtID1cbiAgICBTdHJlYW0uaXRlciAoZnVuIGpzb24gLT4gdG9fY2hhbm5lbCA/c3RkIG9jIGpzb247IG91dHB1dF9jaGFyIG9jICdcXG4nKSBzdHJlYW1cblxuICBsZXQgc3RyZWFtX3RvX2ZpbGUgP2xlbjpfID9zdGQgZmlsZW5hbWUgc3RyZWFtID1cbiAgICBsZXQgb2MgPSBvcGVuX291dCBmaWxlbmFtZSBpblxuICAgIHRyeSAoc3RyZWFtX3RvX2NoYW5uZWwgP3N0ZCBvYyBzdHJlYW07IGNsb3NlX291dCBvYykgd2l0aFxuICAgIHwgZXhuIC0+IGNsb3NlX291dCBvYzsgcmFpc2UgZXhuXG5cbiAgbGV0IHN0cmVhbV90b19vdXRidWYgP3N0ZCBidWYgc3RyZWFtID1cbiAgICBTdHJlYW0uaXRlciAoZnVuIGpzb24gLT4gdG9fb3V0YnVmID9zdGQgYnVmIGpzb247IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuXG4gIGxldCB3cml0ZV90IGJ1ZiBqc29uID0gdG9fb3V0YnVmIGJ1ZiBqc29uXG5cbiAgKCogUHJldHR5IHByaW50ZXJzICopXG4gIGxldCBwcmV0dHlfcHJpbnQgPyhzdGQgPSBmYWxzZSkgb3V0IGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnQgb3V0ICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludCBvdXQganNvblxuXG4gIGxldCBwcmV0dHlfdG9fc3RyaW5nID8oc3RkID0gZmFsc2UpIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnRfdG9fc3RyaW5nICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludF90b19zdHJpbmcganNvblxuXG4gIGxldCBwcmV0dHlfdG9fY2hhbm5lbCA/KHN0ZCA9IGZhbHNlKSBvYyBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50X3RvX2NoYW5uZWwgb2MgKHRvX3N0YW5kYXJkIGpzb24pXG4gICAgZWxzZSBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50X3RvX2NoYW5uZWwgb2MganNvblxuXG4gICgqIFV0aWxpdGllcyAqKVxuICBsZXQgc2hvdyBqc29uID0gVXRpbGl0aWVzLmpzb25fdG9fc3RyaW5nX3JlcHIganNvblxuICBsZXQgcHAgb3V0IGpzb24gPSBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCAoc2hvdyBqc29uKVxuZW5kXG5cbm1vZHVsZSBCYXNpYyA9IHN0cnVjdFxuICBtb2R1bGUgQ29tcGxpYW5jZSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uQmFzaWMuanNvblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5CYXNpYy5qc29uXG5cbiAgICBvcGVuIFRva2Vuc1xuXG4gICAgbGV0IGxleF9zdHJpbmcgcyA9IExleHhlcl91dGlscy51bmVzY2FwZV9zdHJpbmcgc1xuICAgIGxldCBsZXhfbnVtYmVyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2ludGVnZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfbGFyZ2VpbnQgXyA9IENPTVBMSUFOQ0VfRVJST1IgXCJJbnRlZ2VyIG91dCBvZiBib3VuZHNcIlxuXG4gICAgbGV0IGxleF92YXJpYW50IF8gPSBmYWxzZVxuICAgIGxldCBsZXhfdHVwbGUgXyA9IGZhbHNlXG5cbiAgICBsZXQgY29tbWVudF9jaGVjayAoKSA9IE9rICgpXG5cbiAgICBsZXQgbnVtYmVyX3RvX3N0cmluZyBmID1cbiAgICAgIG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IGYgd2l0aFxuICAgICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+XG4gICAgICAgIEpzb25fZmxvYXQuc3RyaW5nX29mX2Zsb2F0X2pzb24gZlxuICAgICAgfCBGUF9pbmZpbml0ZSAtPlxuICAgICAgICBpZiBmIDwgMC4gdGhlbiBcIi1JbmZpbml0eVwiIGVsc2UgXCJJbmZpbml0eVwiXG4gICAgICB8IEZQX25hbiAtPlxuICAgICAgICBcIk5hTlwiXG5cbiAgICBsZXQgbGFyZ2VpbnQgcyA9IGBGbG9hdCAoZmxvYXRfb2Zfc3RyaW5nIHMpXG4gICAgbGV0IGludGVnZXIgaSA9IGBJbnQgaVxuICAgIGxldCBudWxsID0gYE51bGxcbiAgICBsZXQgc3RyaW5nIHMgPSBgU3RyaW5nIHNcbiAgICBsZXQgYm9vbCBiID0gYEJvb2wgYlxuICAgIGxldCBhc3NvYyBhID0gYEFzc29jIGFcbiAgICBsZXQgbGlzdCBsID0gYExpc3QgbFxuICAgIGxldCB0dXBsZSBfbCA9IHJhaXNlIChGYWlsdXJlIFwidHVwbGVzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcbiAgICBsZXQgdmFyaWFudCBfbCA9IHJhaXNlIChGYWlsdXJlIFwidmFyaWFudHMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuXG4gICAgbGV0IG51bWJlciA9IGZ1bmN0aW9uXG4gICAgfCBgRmxvYXQgZiAtPiAgICAgYEZsb2F0IGZcbiAgICB8IGBJbmZpbml0eSAtPiAgICBgRmxvYXQgKDEuMCAvLiAwLjApXG4gICAgfCBgTmVnaW5maW5pdHkgLT4gYEZsb2F0ICgtMS4wIC8uIDAuMClcbiAgICB8IGBOYW4gLT4gICAgICAgICBgRmxvYXQgKDAuMCAvLiAwLjApXG4gICAgfCBgRmxvYXRsaXQgXyAtPiAgcmFpc2UgKEZhaWx1cmUgXCJmbG9hdGxpdCBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG5cbiAgICBtb2R1bGUgU3RyZWFtID0gc3RydWN0XG4gICAgICBsZXQgbnVtYmVyID0gbnVtYmVyXG4gICAgICBsZXQgbGFyZ2VpbnQgPSBsYXJnZWludFxuICAgICAgbGV0IGludGVnZXIgPSBpbnRlZ2VyXG4gICAgICBsZXQgbnVsbCA9IG51bGxcbiAgICAgIGxldCBzdHJpbmcgPSBzdHJpbmdcbiAgICAgIGxldCBib29sID0gYm9vbFxuXG4gICAgICBsZXQgYXJyYXlfc3RhcnQgKCkgPSBgQXNcbiAgICAgIGxldCBhcnJheV9lbmQgKCkgPSBgQWVcbiAgICAgIGxldCBvYmplY3Rfc3RhcnQgKCkgPSBgT3NcbiAgICAgIGxldCBvYmplY3RfZW5kICgpID0gYE9lXG4gICAgICBsZXQgdHVwbGVfc3RhcnQgKCkgPSByYWlzZSAoRmFpbHVyZSBcInR1cGxlcyBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gcmFpc2UgKEZhaWx1cmUgXCJ0dXBsZXMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuICAgICAgbGV0IHZhcmlhbnRfc3RhcnQgKCkgPSByYWlzZSAoRmFpbHVyZSBcInZhcmlhbnRzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcbiAgICAgIGxldCB2YXJpYW50X2VuZCAoKSA9IHJhaXNlIChGYWlsdXJlIFwidmFyaWFudHMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuICAgICAgbGV0IG5hbWUgcyA9IGBOYW1lIHNcbiAgICBlbmRcbiAgZW5kXG5cbiAgaW5jbHVkZSBDb21tb25fcmVhZGVyKENvbXBsaWFuY2UpXG4gIGluY2x1ZGUgQ29tbW9uX3dyaXRlcihDb21wbGlhbmNlKVxuXG4gIGxldCBwcmV0dGlmeSA/c3RkIGluc3RyID0gZnJvbV9zdHJpbmcgaW5zdHIgfD4gcHJldHR5X3RvX3N0cmluZyA/c3RkXG4gIGxldCBjb21wYWN0ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiB0b19zdHJpbmcgP3N0ZFxuXG4gIGxldCBlcXVhbCA9IFV0aWxpdGllcy5lcXVhbFxuICBsZXQgc29ydCA9IFByb2Nlc3MuQmFzaWMuc29ydFxuXG4gIG1vZHVsZSBVdGlsID0gc3RydWN0XG4gICAgaW5jbHVkZSBQcm9jZXNzLkJhc2ljXG4gIGVuZFxuZW5kXG5cbm1vZHVsZSBTYWZlID0gc3RydWN0XG4gIG1vZHVsZSBDb21wbGlhbmNlID0gc3RydWN0XG4gICAgdHlwZSBqc29uID1cbiAgICAgIFtcbiAgICAgIHwgYE51bGxcbiAgICAgIHwgYEJvb2wgb2YgYm9vbFxuICAgICAgfCBgSW50IG9mIGludFxuICAgICAgfCBgSW50bGl0IG9mIHN0cmluZ1xuICAgICAgfCBgRmxvYXQgb2YgZmxvYXRcbiAgICAgIHwgYFN0cmluZyBvZiBzdHJpbmdcbiAgICAgIHwgYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0XG4gICAgICB8IGBMaXN0IG9mIGpzb24gbGlzdFxuICAgICAgfCBgVHVwbGUgb2YganNvbiBsaXN0XG4gICAgICB8IGBWYXJpYW50IG9mIChzdHJpbmcgKiBqc29uIG9wdGlvbilcbiAgICAgIF1cblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5FeHRlbmRlZC5qc29uICAoKiB5b2pzb24gaW50ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQgc3RyZWFtaW5nICopXG5cbiAgICBsZXQgbGV4X3N0cmluZyBzID0gTGV4eGVyX3V0aWxzLnVuZXNjYXBlX3N0cmluZyBzXG4gICAgbGV0IGxleF9udW1iZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfaW50ZWdlciB0b2tlbiA9IHRva2VuXG4gICAgbGV0IGxleF9sYXJnZWludCB0b2tlbiA9IHRva2VuXG5cbiAgICBsZXQgbGV4X3ZhcmlhbnQgXyA9IHRydWVcbiAgICBsZXQgbGV4X3R1cGxlIF8gPSB0cnVlXG5cbiAgICBsZXQgY29tbWVudF9jaGVjayAoKSA9IE9rICgpXG5cbiAgICBsZXQgbnVtYmVyX3RvX3N0cmluZyBmID1cbiAgICAgIG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IGYgd2l0aFxuICAgICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+XG4gICAgICAgIEpzb25fZmxvYXQuc3RyaW5nX29mX2Zsb2F0X2pzb24gZlxuICAgICAgfCBGUF9pbmZpbml0ZSAtPlxuICAgICAgICBpZiBmIDwgMC4gdGhlbiBcIi1JbmZpbml0eVwiIGVsc2UgXCJJbmZpbml0eVwiXG4gICAgICB8IEZQX25hbiAtPlxuICAgICAgICBcIk5hTlwiXG5cbiAgICBsZXQgbGFyZ2VpbnQgcyA9IGBJbnRsaXQgc1xuICAgIGxldCBpbnRlZ2VyIGkgPSBgSW50IGlcbiAgICBsZXQgbnVsbCA9IGBOdWxsXG4gICAgbGV0IHN0cmluZyBzID0gYFN0cmluZyBzXG4gICAgbGV0IGJvb2wgYiA9IGBCb29sIGJcbiAgICBsZXQgYXNzb2MgYSA9IGBBc3NvYyBhXG4gICAgbGV0IGxpc3QgbCA9IGBMaXN0IGxcbiAgICBsZXQgdHVwbGUgbCA9IGBUdXBsZSBsXG4gICAgbGV0IHZhcmlhbnQgayB2ID0gYFZhcmlhbnQgKGssIHYpXG5cbiAgICBsZXQgbnVtYmVyID0gZnVuY3Rpb25cbiAgICB8IGBGbG9hdCBmIC0+ICAgICBgRmxvYXQgZlxuICAgIHwgYEluZmluaXR5IC0+ICAgIGBGbG9hdCAoMS4wIC8uIDAuMClcbiAgICB8IGBOZWdpbmZpbml0eSAtPiBgRmxvYXQgKC0xLjAgLy4gMC4wKVxuICAgIHwgYE5hbiAtPiAgICAgICAgIGBGbG9hdCAoMC4wIC8uIDAuMClcbiAgICB8IGBGbG9hdGxpdCBfIC0+ICByYWlzZSAoRmFpbHVyZSBcImZsb2F0bGl0IG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIHNhZmUgbW9kZVwiKVxuXG4gICAgbW9kdWxlIFN0cmVhbSA9IHN0cnVjdFxuICAgICAgbGV0IG51bWJlciA9IG51bWJlclxuICAgICAgbGV0IGxhcmdlaW50ID0gbGFyZ2VpbnRcbiAgICAgIGxldCBpbnRlZ2VyID0gaW50ZWdlclxuICAgICAgbGV0IG51bGwgPSBudWxsXG4gICAgICBsZXQgc3RyaW5nID0gc3RyaW5nXG4gICAgICBsZXQgYm9vbCA9IGJvb2xcblxuICAgICAgbGV0IGFycmF5X3N0YXJ0ICgpID0gYEFzXG4gICAgICBsZXQgYXJyYXlfZW5kICgpID0gYEFlXG4gICAgICBsZXQgb2JqZWN0X3N0YXJ0ICgpID0gYE9zXG4gICAgICBsZXQgb2JqZWN0X2VuZCAoKSA9IGBPZVxuICAgICAgbGV0IHR1cGxlX3N0YXJ0ICgpID0gYFRzXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gYFRlXG4gICAgICBsZXQgdmFyaWFudF9zdGFydCAoKSA9IGBWc1xuICAgICAgbGV0IHZhcmlhbnRfZW5kICgpID0gYFZlXG4gICAgICBsZXQgbmFtZSBzID0gYE5hbWUgc1xuICAgIGVuZFxuICBlbmRcblxuICBpbmNsdWRlIENvbW1vbl9yZWFkZXIoQ29tcGxpYW5jZSlcbiAgaW5jbHVkZSBDb21tb25fd3JpdGVyKENvbXBsaWFuY2UpXG5cbiAgbGV0IHByZXR0aWZ5ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiBwcmV0dHlfdG9fc3RyaW5nID9zdGRcbiAgbGV0IGNvbXBhY3QgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHRvX3N0cmluZyA/c3RkXG5cbiAgbGV0IGVxdWFsID0gVXRpbGl0aWVzLmVxdWFsXG4gIGxldCBzb3J0ID0gUHJvY2Vzcy5FeHRlbmRlZC5zb3J0XG5cbiAgbGV0IHRvX2Jhc2ljIGpzb24gOiBCYXNpYy5qc29uID1cbiAgICBsZXQgcmVjIG1hcCBub2RlID1cbiAgICAgIG1hdGNoIG5vZGUgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBgTnVsbFxuICAgICAgfCBgQm9vbCBfIGFzIHYgLT4gdlxuICAgICAgfCBgSW50IF8gYXMgdiAtPiB2XG4gICAgICB8IGBJbnRsaXQgdiAtPiBgU3RyaW5nIHZcbiAgICAgIHwgYEZsb2F0IF8gYXMgdiAtPiB2XG4gICAgICB8IGBTdHJpbmcgXyBhcyB2IC0+IHZcbiAgICAgIHwgYExpc3QgbCAtPiBgTGlzdCAoTGlzdC5tYXAgbWFwIGwpXG4gICAgICB8IGBBc3NvYyBhIC0+IGBBc3NvYyAoTGlzdC5tYXAgKGZ1biAoaWQsIHYpIC0+IChpZCwgbWFwIHYpKSBhKVxuICAgICAgfCBgVHVwbGUgdHBsIC0+IGBMaXN0IChMaXN0Lm1hcCBtYXAgdHBsKVxuICAgICAgfCBgVmFyaWFudCAobmFtZSwgam9wdCkgLT5cbiAgICAgICAgIG1hdGNoIGpvcHQgd2l0aFxuICAgICAgICAgfCBOb25lIC0+IGBTdHJpbmcgbmFtZVxuICAgICAgICAgfCBTb21lIHYgLT4gYExpc3QgWyBgU3RyaW5nIG5hbWU7IChtYXAgdikgXVxuICAgIGluXG4gICAgbWFwIGpzb25cblxuICBtb2R1bGUgVXRpbCA9IHN0cnVjdFxuICAgIGluY2x1ZGUgUHJvY2Vzcy5Zb2pzb25fc2FmZVxuICBlbmRcbmVuZFxuXG5tb2R1bGUgUmF3ID0gc3RydWN0XG4gIG1vZHVsZSBDb21wbGlhbmNlID0gc3RydWN0XG5cbiAgdHlwZSBqc29uID1cbiAgICBbXG4gICAgfCBgTnVsbFxuICAgIHwgYEJvb2wgb2YgYm9vbFxuICAgIHwgYEludGxpdCBvZiBzdHJpbmdcbiAgICB8IGBGbG9hdGxpdCBvZiBzdHJpbmdcbiAgICB8IGBTdHJpbmdsaXQgb2Ygc3RyaW5nXG4gICAgfCBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICB8IGBMaXN0IG9mIGpzb24gbGlzdFxuICAgIHwgYFR1cGxlIG9mIGpzb24gbGlzdFxuICAgIHwgYFZhcmlhbnQgb2YgKHN0cmluZyAqIGpzb24gb3B0aW9uKVxuICAgIF1cblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5FeHRlbmRlZC5qc29uICgqIHlvanNvbiBpbnRlcmZhY2UgZG9lcyBub3Qgc3VwcG9ydCBzdHJlYW1pbmcgKilcblxuICAgIGxldCBsZXhfc3RyaW5nIHMgPSBcIlxcXCJcIiBeIHMgXiBcIlxcXCJcIlxuICAgIGxldCBsZXhfbnVtYmVyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2ludGVnZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfbGFyZ2VpbnQgdG9rZW4gPSB0b2tlblxuXG4gICAgbGV0IGxleF92YXJpYW50IF8gPSB0cnVlXG4gICAgbGV0IGxleF90dXBsZSBfID0gdHJ1ZVxuXG4gICAgbGV0IGNvbW1lbnRfY2hlY2sgKCkgPSBPayAoKVxuXG4gICAgbGV0IG51bWJlcl90b19zdHJpbmcgZiA9XG4gICAgICBtYXRjaCBjbGFzc2lmeV9mbG9hdCBmIHdpdGhcbiAgICAgIHwgRlBfbm9ybWFsIHwgRlBfc3Vibm9ybWFsIHwgRlBfemVybyAtPlxuICAgICAgICBKc29uX2Zsb2F0LnN0cmluZ19vZl9mbG9hdF9qc29uIGZcbiAgICAgIHwgRlBfaW5maW5pdGUgLT5cbiAgICAgICAgaWYgZiA8IDAuIHRoZW4gXCItSW5maW5pdHlcIiBlbHNlIFwiSW5maW5pdHlcIlxuICAgICAgfCBGUF9uYW4gLT5cbiAgICAgICAgXCJOYU5cIlxuXG4gICAgbGV0IGxhcmdlaW50IHMgPSBgSW50bGl0IHNcbiAgICBsZXQgaW50ZWdlciBpID0gYEludGxpdCAoc3RyaW5nX29mX2ludCBpKVxuICAgIGxldCBudWxsID0gYE51bGxcbiAgICBsZXQgc3RyaW5nIHMgPSBgU3RyaW5nbGl0IHNcbiAgICBsZXQgYm9vbCBiID0gYEJvb2wgYlxuICAgIGxldCBhc3NvYyBhID0gYEFzc29jIGFcbiAgICBsZXQgbGlzdCBsID0gYExpc3QgbFxuICAgIGxldCB0dXBsZSBsID0gYFR1cGxlIGxcbiAgICBsZXQgdmFyaWFudCBrIHYgPSBgVmFyaWFudCAoaywgdilcblxuICAgIGxldCBudW1iZXIgPSBmdW5jdGlvblxuICAgIHwgYEZsb2F0IGYgLT4gICAgIGBGbG9hdGxpdCAoc3RyaW5nX29mX2Zsb2F0IGYpXG4gICAgfCBgSW5maW5pdHkgLT4gICAgYEZsb2F0bGl0IFwiSW5maW5pdHlcIlxuICAgIHwgYE5lZ2luZmluaXR5IC0+IGBGbG9hdGxpdCBcIi1JbmZpbml0eVwiXG4gICAgfCBgTmFuIC0+ICAgICAgICAgYEZsb2F0bGl0IFwiTmFOXCJcbiAgICB8IGBGbG9hdGxpdCBmIC0+ICBgRmxvYXRsaXQgZlxuXG4gICAgbW9kdWxlIFN0cmVhbSA9IHN0cnVjdFxuICAgICAgbGV0IG51bWJlciA9IG51bWJlclxuICAgICAgbGV0IGxhcmdlaW50ID0gbGFyZ2VpbnRcbiAgICAgIGxldCBpbnRlZ2VyID0gaW50ZWdlclxuICAgICAgbGV0IG51bGwgPSBudWxsXG4gICAgICBsZXQgc3RyaW5nID0gc3RyaW5nXG4gICAgICBsZXQgYm9vbCA9IGJvb2xcblxuICAgICAgbGV0IGFycmF5X3N0YXJ0ICgpID0gYEFzXG4gICAgICBsZXQgYXJyYXlfZW5kICgpID0gYEFlXG4gICAgICBsZXQgb2JqZWN0X3N0YXJ0ICgpID0gYE9zXG4gICAgICBsZXQgb2JqZWN0X2VuZCAoKSA9IGBPZVxuICAgICAgbGV0IHR1cGxlX3N0YXJ0ICgpID0gYFRzXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gYFRlXG4gICAgICBsZXQgdmFyaWFudF9zdGFydCAoKSA9IGBWc1xuICAgICAgbGV0IHZhcmlhbnRfZW5kICgpID0gYFZlXG4gICAgICBsZXQgbmFtZSBzID0gYE5hbWUgc1xuICAgIGVuZFxuICBlbmRcblxuICBpbmNsdWRlIENvbW1vbl9yZWFkZXIoQ29tcGxpYW5jZSlcbiAgaW5jbHVkZSBDb21tb25fd3JpdGVyKENvbXBsaWFuY2UpXG5cbiAgbGV0IHByZXR0aWZ5ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiBwcmV0dHlfdG9fc3RyaW5nID9zdGRcbiAgbGV0IGNvbXBhY3QgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHRvX3N0cmluZyA/c3RkXG5cbiAgbGV0IGVxdWFsID0gVXRpbGl0aWVzLmVxdWFsXG4gIGxldCBzb3J0ID0gUHJvY2Vzcy5FeHRlbmRlZC5zb3J0XG5lbmRcbiIsImluY2x1ZGUgQ29udGFpbmVyc0xhYmVsc1xuXG5tb2R1bGUgU3RyaW5nID0gc3RydWN0XG4gIGluY2x1ZGUgU3RyaW5nXG4gIG1vZHVsZSBTZXQgPSBTZXQuTWFrZSAoU3RyaW5nKVxuZW5kXG5cbm1vZHVsZSBZb2pzb24gPSBzdHJ1Y3RcbiAgaW5jbHVkZSBKc29ueHQuWW9qc29uXG5lbmRcblxubW9kdWxlIEVuY29kaW5ncyA9IHN0cnVjdFxuICBsZXQgdG9fanN0ciB0ID0gSnYucmVwciB0IHw+IEJyci5Kc29uLmVuY29kZVxuICBsZXQgdG9fanYgdCA9IHRvX2pzdHIgdCB8PiBKdi5vZl9qc3RyXG5cbiAgbGV0IG9mX2pzdHIganN0ciA9XG4gICAgbWF0Y2ggQnJyLkpzb24uZGVjb2RlIGpzdHIgd2l0aFxuICAgIHwgT2sgdiAtPiBPayAoT2JqLm1hZ2ljIHYpXG4gICAgfCBFcnJvciBlcnIgLT5cbiAgICAgICAgQnJyLkNvbnNvbGUuZXJyb3IgWyBlcnIgXTtcbiAgICAgICAgRXJyb3IgKGBNc2cgXCJGYWlsZWQgdG8gdW5tYXJzaGFsIGRhdGFcIilcblxuICBsZXQgb2ZfanYganYgPSBKdi50b19qc3RyIGp2IHw+IG9mX2pzdHJcbmVuZFxuXG5sZXQgcmFuZG9tX3N0YXRlID0gUmFuZG9tLmdldF9zdGF0ZSAoKVxubGV0IG5ld191dWlkX3Y0ICgpID0gVXVpZG0udjRfZ2VuIHJhbmRvbV9zdGF0ZSAoKVxuXG4oKiogW3RlZSBmIHhdIGFwcGxpZXMgW2ZdIHRvIFt4XSBhbmQgcmV0dXJucyBbeF0gKilcbmxldCB0ZWUgZiB4ID1cbiAgbGV0ICgpID0gZiB4IGluXG4gIHhcbiIsIm9wZW4gU3RkXG5cbm1vZHVsZSBDbGFzc2VzID0gc3RydWN0XG4gIGluY2x1ZGUgU3RyaW5nLlNldFxuXG4gIHR5cGUgbm9ucmVjIHQgPSB0XG4gIHR5cGUgbW9kaWZpZXIgPSBBZGQgb2Ygc3RyaW5nIGxpc3QgfCBSZXBsYWNlIG9mIHN0cmluZyBsaXN0XG5cbiAgbGV0IG1ha2UgbCA9IG9mX2xpc3QgbFxuICBsZXQgdXBkYXRlIHQgPSBmdW5jdGlvbiBBZGQgbCAtPiBhZGRfbGlzdCB0IGwgfCBSZXBsYWNlIGwgLT4gb2ZfbGlzdCBsXG5cbiAgbGV0IHRvX3N0cmluZyB0ID1cbiAgICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIGl0ZXJcbiAgICAgIChmdW4gYyAtPlxuICAgICAgICBpZiAhZmlyc3QgdGhlbiAoXG4gICAgICAgICAgZmlyc3QgOj0gZmFsc2U7XG4gICAgICAgICAgUHJpbnRmLmJwcmludGYgYiBcIiVzXCIgYylcbiAgICAgICAgZWxzZSBQcmludGYuYnByaW50ZiBiIFwiICVzXCIgYylcbiAgICAgIHQ7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJcblxuICBsZXQgYXRfb2Zfc3RyaW5nIGMgPSBCcnIuQXQuY2xhc3MnIEBAIEpzdHIudiBjXG5cbiAgbW9kdWxlIFAgPSBzdHJ1Y3RcbiAgICBsZXQgdG9fYXQgdCA9XG4gICAgICBMaXN0Lm1hcCAodG9fbGlzdCB0KSB+ZjooZnVuIGMgLT4gYFAgKEJyci5BdC5jbGFzcycgQEAgSnN0ci52IGMpKVxuICBlbmRcbmVuZFxuXG5vcGVuIEJyclxub3BlbiBCcnJfbHdkXG5cbnR5cGUgdCA9IHsgY2xhc3NlcyA6IENsYXNzZXMudDsgYXR0cnMgOiBBdC50IEVsd2QuY29sIH1cbigqKiBDbGFzc2VzIGF0dHJpYnV0ZXMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBidXQgYXJlIGV2ZW50dWFsbHkgdHJhbnNsYXRlZCB0byBBdC50ICopXG5cbmxldCBlbXB0eSA9IHsgY2xhc3NlcyA9IENsYXNzZXMuZW1wdHk7IGF0dHJzID0gW10gfVxuXG5sZXQgdG9fYXQgP2lkIHQgPVxuICBsZXQgYXQgPSBMaXN0LnJldl9hcHBlbmQgdC5hdHRycyBAQCBDbGFzc2VzLlAudG9fYXQgdC5jbGFzc2VzIGluXG4gIG1hdGNoIGlkIHdpdGggTm9uZSAtPiBhdCB8IFNvbWUgaWQgLT4gYFAgKEF0LmlkIChKc3RyLnYgaWQpKSA6OiBhdFxuXG5sZXQgY2xhc3NlcyBsID0geyBlbXB0eSB3aXRoIGNsYXNzZXMgPSBDbGFzc2VzLm9mX2xpc3QgbCB9XG5cbmxldCB1bmlvbiB7IGNsYXNzZXM7IGF0dHJzIH0geyBjbGFzc2VzID0gYzsgYXR0cnMgPSBhIH0gPVxuICB7IGNsYXNzZXMgPSBDbGFzc2VzLnVuaW9uIGNsYXNzZXMgYzsgYXR0cnMgPSBMaXN0LnJldl9hcHBlbmQgYXR0cnMgYSB9XG5cbm1vZHVsZSBCdWlsZGVyID0gc3RydWN0XG4gIHR5cGUgYXQgPSBDIG9mIHN0cmluZyB8IEF0IG9mIEF0LnRcblxuICBsZXQgKCArICkgdCA9IGZ1bmN0aW9uXG4gICAgfCBDIGNsYXNzbmFtZSAtPlxuICAgICAgICBsZXQgY2xhc3NlcyA9IENsYXNzZXMuYWRkIGNsYXNzbmFtZSB0LmNsYXNzZXMgaW5cbiAgICAgICAgeyB0IHdpdGggY2xhc3NlcyB9XG4gICAgfCBBdCBhdCAtPlxuICAgICAgICBsZXQgYXR0cnMgPSBgUCBhdCA6OiB0LmF0dHJzIGluXG4gICAgICAgIHsgdCB3aXRoIGF0dHJzIH1cblxuICBsZXQgd2l0aF9pZCBzIHQgPVxuICAgIGxldCBhdHRycyA9IGBQIChBdC5pZCBAQCBKc3RyLnYgcykgOjogdC5hdHRycyBpblxuICAgIHRvX2F0IHsgdCB3aXRoIGF0dHJzIH1cbmVuZFxuXG5sZXQgYWRkIGF0X25hbWUgdiBhdCA9XG4gIGxldCBhID1cbiAgICBtYXRjaCB2IHdpdGhcbiAgICB8IGBQIHYgLT4gYFAgKEF0LnYgYXRfbmFtZSBAQCBKc3RyLnYgdilcbiAgICB8IGBSIHYgLT4gYFIgKEx3ZC5tYXAgdiB+ZjooZnVuIHYgLT4gQXQudiBhdF9uYW1lIEBAIEpzdHIudiB2KSlcbiAgICB8IGBTIF8gLT4gZmFpbHdpdGggXCJUT0RPIG5vdCBpbXBsZW1lbnRlZFwiXG4gIGluXG4gIGEgOjogYXRcblxubGV0IGFkZF9ib29sIGF0XyB2IGF0ID0gbWF0Y2ggdiB3aXRoIGZhbHNlIC0+IGF0IHwgdHJ1ZSAtPiBgUCBhdF8gOjogYXRcblxubGV0IGFkZF9zdHIgYXRfbmFtZSB2IGF0ID1cbiAgbWF0Y2ggdiB3aXRoIFwiXCIgLT4gYXQgfCB2IC0+IGBQIChBdC52IGF0X25hbWUgQEAgSnN0ci52IHYpIDo6IGF0XG5cbmxldCBhZGRfb3B0IGF0X25hbWUgdiBhdCA9XG4gIG1hdGNoIHYgd2l0aCBOb25lIC0+IGF0IHwgU29tZSB2IC0+IGBQIChBdC52IGF0X25hbWUgQEAgSnN0ci52IHYpIDo6IGF0XG4iLCJvcGVuIFN0ZFxub3BlbiBCcnJcblxudHlwZSAnYSBvbmVfbWF5YmVfcmVhY3RpdmUgPSBbIGBQIG9mICdhIHwgYFIgb2YgJ2EgTHdkLnQgXVxudHlwZSAnYSBtYXliZV9yZWFjdGl2ZSA9IFsgJ2Egb25lX21heWJlX3JlYWN0aXZlIHwgYFMgb2YgJ2EgTHdkX3NlcS50IEx3ZC50IF1cblxubGV0IGlzX3B1cmVfZWxlbWVudCA9IGZ1bmN0aW9uXG4gIHwgYFAgXyAtPiB0cnVlXG4gIHwgYFIgeCAtPiBPcHRpb24uaXNfc29tZSAoTHdkLmlzX3B1cmUgeClcbiAgfCBgUyB4IC0+IE9wdGlvbi5pc19zb21lIChMd2QuaXNfcHVyZSB4KVxuXG5sZXQgcHVyZSB0ID0gYFAgdFxubGV0IHJlYWN0aXZlIHQgPSBgUiB0XG5sZXQgc2VxdWVuY2UgdCA9IGBTIHRcblxubW9kdWxlIFVuaXQgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gUHggb2YgZmxvYXQgfCBSZW0gb2YgZmxvYXQgfCBFbSBvZiBmbG9hdFxuXG4gIGxldCBvZl9zdHJpbmcgcyA9XG4gICAgbWF0Y2ggU3RyaW5nLmNob3Bfc3VmZml4IH5zdWY6XCJweFwiIHMgd2l0aFxuICAgIHwgU29tZSBpIC0+IEZsb2F0Lm9mX3N0cmluZ19vcHQgaSB8PiBPcHRpb24ubWFwIChmdW4gaSAtPiBQeCBpKVxuICAgIHwgTm9uZSAtPiAoXG4gICAgICAgIG1hdGNoIFN0cmluZy5jaG9wX3N1ZmZpeCB+c3VmOlwicmVtXCIgcyB3aXRoXG4gICAgICAgIHwgU29tZSBmIC0+IEZsb2F0Lm9mX3N0cmluZ19vcHQgZiB8PiBPcHRpb24ubWFwIChmdW4gZiAtPiBSZW0gZilcbiAgICAgICAgfCBOb25lIC0+IChcbiAgICAgICAgICAgIG1hdGNoIFN0cmluZy5jaG9wX3N1ZmZpeCB+c3VmOlwiZW1cIiBzIHdpdGhcbiAgICAgICAgICAgIHwgU29tZSBmIC0+IEZsb2F0Lm9mX3N0cmluZ19vcHQgZiB8PiBPcHRpb24ubWFwIChmdW4gZiAtPiBSZW0gZilcbiAgICAgICAgICAgIHwgTm9uZSAtPiBOb25lKSlcblxuICBsZXQgdG9fc3RyaW5nID0gZnVuY3Rpb25cbiAgICB8IFB4IGkgLT4gUHJpbnRmLnNwcmludGYgXCIlZnB4XCIgaVxuICAgIHwgUmVtIGYgLT4gUHJpbnRmLnNwcmludGYgXCIlZnJlbVwiIGZcbiAgICB8IEVtIGYgLT4gUHJpbnRmLnNwcmludGYgXCIlZmVtXCIgZlxuXG4gIGxldCB0b19weCA/KHBhcmVudCA9IEcuZG9jdW1lbnQgfD4gRG9jdW1lbnQucm9vdCkgPVxuICAgIGxldCBnZXRfZm9udF9zaXplX2luX3B4IHBhcmVudCA9XG4gICAgICBsZXQgZm9udF9zaXplID1cbiAgICAgICAgRWwuY29tcHV0ZWRfc3R5bGUgKEpzdHIudiBcImZvbnQtc2l6ZVwiKSBwYXJlbnQgfD4gSnN0ci50b19zdHJpbmdcbiAgICAgIGluXG4gICAgICBtYXRjaCBvZl9zdHJpbmcgZm9udF9zaXplIHdpdGggU29tZSAoUHggaSkgLT4gaSB8IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgaW5cbiAgICBmdW5jdGlvblxuICAgIHwgUHggaSAtPiBpXG4gICAgfCBSZW0gZiAtPlxuICAgICAgICBsZXQgZm9udF9zaXplID0gZ2V0X2ZvbnRfc2l6ZV9pbl9weCAoRy5kb2N1bWVudCB8PiBEb2N1bWVudC5yb290KSBpblxuICAgICAgICBmICouIGZvbnRfc2l6ZVxuICAgIHwgRW0gZiAtPlxuICAgICAgICBsZXQgZm9udF9zaXplID0gZ2V0X2ZvbnRfc2l6ZV9pbl9weCBwYXJlbnQgaW5cbiAgICAgICAgZiAqLiBmb250X3NpemVcbmVuZFxuIiwib3BlbiBTdGRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyXG5vcGVuIEJycl9sd2RcblxubW9kdWxlIENvbHVtbnMgPSBzdHJ1Y3RcbiAgdHlwZSBjb2x1bW4gPSB7IG5hbWUgOiBzdHJpbmc7IGNzc19zaXplIDogc3RyaW5nOyBjb250ZW50IDogRWx3ZC50IEVsd2QuY29sIH1cbiAgdHlwZSB0ID0gY29sdW1uIGFycmF5XG5cbiAgbGV0IHYgbmFtZSBjc3Nfc2l6ZSBjb250ZW50ID0geyBuYW1lOyBjc3Nfc2l6ZTsgY29udGVudCB9XG5cbiAgbGV0IHRvX2hlYWRlciB0ID1cbiAgICBsZXQgY2VsbHMgPVxuICAgICAgQXJyYXkuZm9sZF9yaWdodCB0IH5pbml0OltdIH5mOihmdW4geyBjb250ZW50OyBfIH0gYWNjIC0+XG4gICAgICAgICAgYFIgKEVsd2QuZGl2IGNvbnRlbnQpIDo6IGFjYylcbiAgICBpblxuICAgIGNlbGxzXG5cbiAgbGV0IHN0eWxlIHQgPVxuICAgIGxldCB0ZW1wbGF0ZSA9XG4gICAgICBBcnJheS50b19zdHJpbmcgfnNlcDpcIiBcIiAoZnVuIHsgY3NzX3NpemU7IF8gfSAtPiBjc3Nfc2l6ZSkgdFxuICAgIGluXG4gICAgUHJpbnRmLnNwcmludGYgXCIlczogJXM7XCIgXCJncmlkLXRlbXBsYXRlLWNvbHVtbnNcIiB0ZW1wbGF0ZVxuZW5kXG5cbnR5cGUgdCA9IHsgY29sdW1ucyA6IENvbHVtbnMudCB9XG50eXBlIGZpeGVkX3Jvd19oZWlnaHQgPSB7IHRhYmxlIDogdDsgcm93X2hlaWdodCA6IFV0aWxzLlVuaXQudCB9XG5cbmxldCBzdHlsZSB0ID1cbiAgbGV0IHN0eWxlID0gQ29sdW1ucy5zdHlsZSB0LnRhYmxlLmNvbHVtbnMgaW5cbiAgU3RyaW5nLmNvbmNhdCB+c2VwOlwiIFwiIFsgc3R5bGUgXVxuXG5sZXQgaGVhZGVyIHQgPVxuICBsZXQgcm93X2hlaWdodCA9IFV0aWxzLlVuaXQudG9fc3RyaW5nIHQucm93X2hlaWdodCBpblxuICBsZXQgYXQgPVxuICAgIFsgYFAgKEF0LnN0eWxlIChKc3RyLnYgQEAgUHJpbnRmLnNwcmludGYgXCJoZWlnaHQ6ICVzXCIgcm93X2hlaWdodCkpIF1cbiAgaW5cbiAgRWx3ZC5kaXYgfmF0IEBAIENvbHVtbnMudG9faGVhZGVyIHQudGFibGUuY29sdW1uc1xuXG5sZXQgXyA9IFV0aWxzLlVuaXQudG9fcHggKFJlbSA0LilcbiIsIigqKiBBIHZpcnR1YWwgdGFibGUgdGhhdCBjYW4gaGFuZGxlIGxhcmdlIGRhdGFzZXQuXG5cbiAgICBUT0RPOiB0aGlzIGlzIGNsZWFybHkgb3Zlci1lbmdpbmVlcmVkOiB0aGUgbGFyZ2UgbHdkIHRhYmxlIHRoYXQgcmVkdWNlcyB0byBcbiAgICByb3dzIGFuZCBwbGFjZWhvbGRlcnMgd2l0aCBhIG1vbm9pZCBpcyBlbGVnYW50IGJ1IGRvZXMgbm90IHNjYWxlIHdlbGwuIEl0IFxuICAgIG1pZ2h0IGJlIHBvc3NpYmxlIHRvIG9wdGltaXplIGl0IChlc3BlY2lhbGx5IHRoZSBcInVuaXF1ZXVlXCIgTFJVIHRoaW5neSksIFxuICAgIGJ1dCBoYXZpbmcgdG9vIGxhcmdlIGEgbHdkX3RhYmxlIGlzIHByb2JhYmx5IGEgaGFyZCBsaW1pdC4gKilcblxub3BlbiBTdGRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyXG5vcGVuIEJycl9sd2RcblxubW9kdWxlIFVuaXF1ZXVlIChPIDogU2V0Lk9yZGVyZWRUeXBlKSA9IHN0cnVjdFxuICBtb2R1bGUgU2V0ID0gU2V0Lk1ha2UgKE8pXG5cbiAgdHlwZSBub25yZWMgdCA9IHsgbXV0YWJsZSBxdWV1ZSA6IE8udCBRdWV1ZS50OyBtdXRhYmxlIHVuaXEgOiBTZXQudCB9XG5cbiAgbGV0IGNyZWF0ZSAoKSA9XG4gICAgbGV0IHF1ZXVlID0gUXVldWUuY3JlYXRlICgpIGluXG4gICAgbGV0IHVuaXEgPSBTZXQuZW1wdHkgaW5cbiAgICB7IHF1ZXVlOyB1bmlxIH1cblxuICBsZXQgYWRkIHYgdCA9XG4gICAgbGV0IG5ld19lbHQgPSBub3QgKFNldC5tZW0gdiB0LnVuaXEpIGluXG4gICAgbGV0ICgpID1cbiAgICAgIGlmIG5ld19lbHQgdGhlblxuICAgICAgICBsZXQgKCkgPSBRdWV1ZS5hZGQgdiB0LnF1ZXVlIGluXG4gICAgICAgIHQudW5pcSA8LSBTZXQuYWRkIHYgdC51bmlxXG4gICAgICBlbHNlXG4gICAgICAgICgqIElmIHRoZSBlbGVtZW50IGlzIGFscmVhZHkgaW4gdGhlIHF1ZXVlIHdlIFwiYnViYmxlXCIgaXQgdXAgKilcbiAgICAgICAgKCogVG9kbzogdGhpcyBpcyBub3QgbWFkZSBpbiBhIHZlcnkgZWZmaWNpZW50IHdheS4uLiAqKVxuICAgICAgICBsZXQgbmV3X3F1ZXVlID0gUXVldWUuY3JlYXRlICgpIGluXG4gICAgICAgIFF1ZXVlLml0ZXJcbiAgICAgICAgICAoZnVuIHYnIC0+XG4gICAgICAgICAgICBpZiBub3QgQEAgSW50LmVxdWFsIChPLmNvbXBhcmUgdiB2JykgMCB0aGVuIFF1ZXVlLmFkZCB2JyBuZXdfcXVldWUpXG4gICAgICAgICAgdC5xdWV1ZTtcbiAgICAgICAgUXVldWUuYWRkIHYgbmV3X3F1ZXVlO1xuICAgICAgICB0LnF1ZXVlIDwtIG5ld19xdWV1ZVxuICAgIGluXG4gICAgbmV3X2VsdFxuXG4gIGxldCB0YWtlIHQgPVxuICAgIGxldCBpID0gUXVldWUudGFrZSB0LnF1ZXVlIGluXG4gICAgdC51bmlxIDwtIFNldC5yZW1vdmUgaSB0LnVuaXE7XG4gICAgaVxuXG4gIGxldCBsZW5ndGggdCA9IFF1ZXVlLmxlbmd0aCB0LnF1ZXVlXG5cbiAgbGV0IGNsZWFyIHQgPVxuICAgIGxldCBuZXdfcXVldWUgPSBjcmVhdGUgKCkgaW5cbiAgICB0LnF1ZXVlIDwtIG5ld19xdWV1ZS5xdWV1ZTtcbiAgICB0LnVuaXEgPC0gbmV3X3F1ZXVlLnVuaXFcbmVuZFxuXG5tb2R1bGUgSW50X3VuaXF1ZXVlID0gVW5pcXVldWUgKEludClcblxudHlwZSAnYSByb3dfZGF0YSA9IHtcbiAgaW5kZXggOiBpbnQ7XG4gIGNvbnRlbnQgOiAnYSBvcHRpb247XG4gIHJlbmRlciA6IGludCAtPiAnYSAtPiBFbHdkLnQgRWx3ZC5jb2w7XG59XG5cbnR5cGUgKCdkYXRhLCAnZXJyb3IpIGRhdGFfc291cmNlID0ge1xuICB0b3RhbF9pdGVtcyA6IChpbnQsICdlcnJvcikgRnV0LnJlc3VsdDtcbiAgZmV0Y2ggOiBpbnQgYXJyYXkgLT4gKCdkYXRhIG9wdGlvbiBhcnJheSwgJ2Vycm9yKSBGdXQucmVzdWx0O1xuICByZW5kZXIgOiBpbnQgLT4gJ2RhdGEgLT4gRWx3ZC50IEVsd2QuY29sO1xufVxuXG4oKiBUaGUgdmlydHVhbCB0YWJsZSBpcyBhIGNvbXBsZXggcmVhY3RpdmUgY29tcG9uZW50LiBQcmltYXJpbHksIGl0IHJlYWN0cyB0b1xuICAgY2hhbmdlcyBvZiB0aGUgW2RhdGFfc291cmNlXSBzbyB0aGF0IGNvbnRlbnQgaW4gdGhlIHRhYmxlIGlzIHByb3Blcmx5XG4gICByZWZyZXNoZWQgd2hlbiBpdCBkb2VzLiBBZGRpdGlvbm5hbHkgaXQgbmVlZHMgdG8gcmVhY3QgdG8gbXVsdGlwbGUgZG9tXG4gICBldmVudHMsIG5vdGFibHkgdmVydGljYWwgcmVzaXplIG9mIHRoZSBjb250YWluZXIgYW5kIHNjcm9sbCBldmVudHMsIHRvIGVuc3VyZVxuICAgdGhhdCB0aGUgdmlzaWJsZSBwYXJ0IG9mIHRoZSB0YWxiZSBpcyBhbHdheXMgcG9wdWxhdGVkIHdpdGggcm93cy4gKilcblxubGV0IG1ha2UgKHR5cGUgZGF0YSkgfih1aV90YWJsZSA6IFNjaGVtYS5maXhlZF9yb3dfaGVpZ2h0KVxuICAgID8ocGxhY2Vob2xkZXIgOiBpbnQgLT4gRWx3ZC50IEVsd2QuY29sID0gZnVuIF8gLT4gW10pXG4gICAgKGRhdGFfc291cmNlIDogKGRhdGEsIF8pIGRhdGFfc291cmNlIEx3ZC50KSA9XG4gIGlnbm9yZSBwbGFjZWhvbGRlcjtcbiAgbGV0IHJvd19zaXplID0gdWlfdGFibGUucm93X2hlaWdodCB8PiBVdGlscy5Vbml0LnRvX3N0cmluZyBpblxuICBsZXQgaGVpZ2h0X24gbiA9IFByaW50Zi5zcHJpbnRmIFwiaGVpZ2h0OiBjYWxjKCVzICogJWkpO1wiIHJvd19zaXplIG4gaW5cbiAgbGV0IGhlaWdodCA9IFByaW50Zi5zcHJpbnRmIFwiaGVpZ2h0OiAlcyAhaW1wb3J0YW50O1wiIHJvd19zaXplIGluXG4gIGxldCB0YWJsZSA6IGRhdGEgcm93X2RhdGEgTHdkX3RhYmxlLnQgPSBMd2RfdGFibGUubWFrZSAoKSBpblxuICAoKiBUaGUgW3Jvd3NdIHRhYmxlIGlzIHVzZWQgdG8gcmVsYXRlIGRpdnMgdG8gdGhlIHRhYmxlJ3Mgcm93cyBpbiB0aGVcbiAgICAgb2JzZXJ2ZXIncyBjYWxsYmFjayAqKVxuICBsZXQgcm93X2luZGV4IDogKGludCwgZGF0YSByb3dfZGF0YSBMd2RfdGFibGUucm93KSBIYXNodGJsLnQgPVxuICAgIEhhc2h0YmwuY3JlYXRlIDIwNDhcbiAgaW5cbiAgbGV0IHVubG9hZF9xdWV1ZSA9IEludF91bmlxdWV1ZS5jcmVhdGUgKCkgaW5cblxuICBsZXQgYWRkIH5mZXRjaCA/KG1heF9pdGVtcyA9IDIwMCkgaW5kZXhlcyA9XG4gICAgbGV0IHVubG9hZCBpID1cbiAgICAgIGxldCBvcGVuIE9wdGlvbi5JbmZpeCBpblxuICAgICAgKGxldCogcm93ID0gSGFzaHRibC5nZXQgcm93X2luZGV4IGkgaW5cbiAgICAgICBsZXQrIHJvd19kYXRhID0gTHdkX3RhYmxlLmdldCByb3cgaW5cbiAgICAgICBMd2RfdGFibGUuc2V0IHJvdyB7IHJvd19kYXRhIHdpdGggY29udGVudCA9IE5vbmUgfSlcbiAgICAgIHw+IGlnbm9yZVxuICAgIGluXG4gICAgbGV0IGxvYWQgaW5kZXhlcyA9XG4gICAgICAobGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICAgICBsZXQrIChkYXRhIDogZGF0YSBvcHRpb24gYXJyYXkpID0gZmV0Y2ggaW5kZXhlcyBpblxuICAgICAgIEFycmF5Lml0ZXIyIGluZGV4ZXMgZGF0YSB+ZjooZnVuIGkgZGF0YSAtPlxuICAgICAgICAgICAobGV0IG9wZW4gT3B0aW9uLkluZml4IGluXG4gICAgICAgICAgICBsZXQqIHJvdyA9IEhhc2h0YmwuZ2V0IHJvd19pbmRleCBpIGluXG4gICAgICAgICAgICBsZXQrIHJvd19kYXRhID0gTHdkX3RhYmxlLmdldCByb3cgaW5cbiAgICAgICAgICAgIGxldCBkYXRhID1cbiAgICAgICAgICAgICAgbWF0Y2ggZGF0YSB3aXRoIFNvbWUgZGF0YSAtPiBkYXRhIHwgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICAgIGluXG4gICAgICAgICAgICBMd2RfdGFibGUuc2V0IHJvdyB7IHJvd19kYXRhIHdpdGggY29udGVudCA9IFNvbWUgZGF0YSB9KVxuICAgICAgICAgICB8PiBpZ25vcmUpKVxuICAgICAgfD4gaWdub3JlXG4gICAgaW5cbiAgICBsZXQgY2xlYW51cCAoKSA9XG4gICAgICBsZXQgcV9sZW5ndGggPSBJbnRfdW5pcXVldWUubGVuZ3RoIHVubG9hZF9xdWV1ZSBpblxuICAgICAgaWYgcV9sZW5ndGggPiBtYXhfaXRlbXMgdGhlblxuICAgICAgICBmb3IgXyA9IG1heF9pdGVtcyB0byBxX2xlbmd0aCBkb1xuICAgICAgICAgIHRyeSB1bmxvYWQgKEludF91bmlxdWV1ZS50YWtlIHVubG9hZF9xdWV1ZSkgd2l0aCBRdWV1ZS5FbXB0eSAtPiAoKVxuICAgICAgICBkb25lXG4gICAgaW5cbiAgICBsZXQgdG9fbG9hZCA9XG4gICAgICBMaXN0LmZpbHRlciBpbmRleGVzIH5mOihmdW4gaSAtPiBJbnRfdW5pcXVldWUuYWRkIGkgdW5sb2FkX3F1ZXVlKVxuICAgIGluXG4gICAgbG9hZCAoQXJyYXkub2ZfbGlzdCB0b19sb2FkKTtcbiAgICBjbGVhbnVwICgpXG4gIGluXG4gIGxldCB0YWJsZV9oZWlnaHQgPSBMd2QudmFyIE5vbmUgaW5cbiAgbGV0IGNvbXB1dGVfdmlzaWJsZV9yb3dzIH5sYXN0X3Njcm9sbF95IGRpdiA9XG4gICAgbGV0IGhlaWdodCBlbHQgPVxuICAgICAgbGV0IGp2ID0gRWwudG9fanYgZWx0IGluXG4gICAgICBKdi5nZXQganYgXCJvZmZzZXRIZWlnaHRcIiB8PiBKdi50b19pbnRcbiAgICBpblxuICAgIGxldCBzY3JvbGxfeSA9IEVsLnNjcm9sbF95IGRpdiBpblxuICAgIGxldCBkaXJlY3Rpb24gPSBpZiBzY3JvbGxfeSA+LiAhbGFzdF9zY3JvbGxfeSB0aGVuIGBEb3duIGVsc2UgYFVwIGluXG4gICAgbGV0ICgpID0gbGFzdF9zY3JvbGxfeSA6PSBzY3JvbGxfeSBpblxuICAgIGxldCB2aXNpYmxlX2hlaWdodCA9IGhlaWdodCBkaXYgfD4gZmxvYXRfb2ZfaW50IGluXG4gICAgbGV0IHJvd19oZWlnaHQgPSBVdGlscy5Vbml0LnRvX3B4IH5wYXJlbnQ6ZGl2IHVpX3RhYmxlLnJvd19oZWlnaHQgaW5cbiAgICBsZXQgaGVhZGVyX2hlaWdodCA9IHJvd19oZWlnaHQgaW5cbiAgICBsZXQgbnVtYmVyX29mX3Zpc2libGVfcm93cyA9IHZpc2libGVfaGVpZ2h0IC8uIHJvd19oZWlnaHQgfD4gaW50X29mX2Zsb2F0IGluXG4gICAgbGV0IGJsZWVkaW5nID0gbnVtYmVyX29mX3Zpc2libGVfcm93cyBpblxuICAgIGxldCBzY3JvbGxfeSA9IHNjcm9sbF95IC0uIGhlYWRlcl9oZWlnaHQgaW5cbiAgICBsZXQgZmlyc3RfdmlzaWJsZV9yb3cgPSBpbnRfb2ZfZmxvYXQgKHNjcm9sbF95IC8uIHJvd19oZWlnaHQpICsgMSBpblxuICAgIGxldCBsYXN0X3Zpc2libGVfcm93ID0gZmlyc3RfdmlzaWJsZV9yb3cgKyBudW1iZXJfb2ZfdmlzaWJsZV9yb3dzIGluXG4gICAgbGV0IGZpcnN0ID1cbiAgICAgIGxldCBibGVlZGluZyA9XG4gICAgICAgIG1hdGNoIGRpcmVjdGlvbiB3aXRoIGBVcCAtPiBibGVlZGluZyB8IF8gLT4gYmxlZWRpbmcgLyAyXG4gICAgICBpblxuICAgICAgZmlyc3RfdmlzaWJsZV9yb3cgLSBibGVlZGluZyB8PiBtYXggMFxuICAgIGluXG4gICAgbGV0IGxhc3QgPVxuICAgICAgbGV0IGJsZWVkaW5nID1cbiAgICAgICAgbWF0Y2ggZGlyZWN0aW9uIHdpdGggYERvd24gLT4gYmxlZWRpbmcgfCBfIC0+IGJsZWVkaW5nIC8gMlxuICAgICAgaW5cbiAgICAgIGxhc3RfdmlzaWJsZV9yb3cgKyBibGVlZGluZ1xuICAgIGluXG4gICAgTGlzdC5pbml0IChsYXN0IC0gZmlyc3QpIH5mOihmdW4gaSAtPiBmaXJzdCArIGkpXG4gIGluXG4gIGxldCBwcmVwYXJlIH50b3RhbF9pdGVtczp0b3RhbCB+cmVuZGVyID1cbiAgICBsZXQgKCkgPVxuICAgICAgKCogQ2xlYW51cCAqKVxuICAgICAgTHdkX3RhYmxlLmNsZWFyIHRhYmxlO1xuICAgICAgSGFzaHRibC5jbGVhciByb3dfaW5kZXg7XG4gICAgICBJbnRfdW5pcXVldWUuY2xlYXIgdW5sb2FkX3F1ZXVlXG4gICAgaW5cbiAgICBmb3IgaSA9IDAgdG8gdG90YWwgLSAxIGRvXG4gICAgICBsZXQgc2V0ID0geyBpbmRleCA9IGk7IGNvbnRlbnQgPSBOb25lOyByZW5kZXIgfSBpblxuICAgICAgSGFzaHRibC5hZGQgcm93X2luZGV4IGkgQEAgTHdkX3RhYmxlLmFwcGVuZCB+c2V0IHRhYmxlXG4gICAgZG9uZVxuICBpblxuICBsZXQgcG9wdWxhdGVfb25fc2Nyb2xsID1cbiAgICBMd2QubWFwIGRhdGFfc291cmNlIH5mOihmdW4geyB0b3RhbF9pdGVtczsgZmV0Y2g7IHJlbmRlciB9IC0+XG4gICAgICAgIGxldCBhZGQgPSBhZGQgfmZldGNoIGluXG4gICAgICAgIGxldCBsYXN0X3Njcm9sbF95ID0gcmVmIDAuIGluXG4gICAgICAgIGxldCB1cGRhdGUgZGl2ID1cbiAgICAgICAgICBsZXQgdmlzaWJsZV9yb3dzID0gY29tcHV0ZV92aXNpYmxlX3Jvd3Mgfmxhc3Rfc2Nyb2xsX3kgZGl2IGluXG4gICAgICAgICAgKCogdG9kbzogV2UgZG8gd2F5IHRvbyBtdWNoIHdvcmsgYW5kIHJlYnVpbGQgdGhlIHF1ZXVlIGVhY2hcbiAgICAgICAgICAgICB0aW1lLi4uIGl0J3MgdmVyeSBpbmVmaWNpZW50ICopXG4gICAgICAgICAgYWRkIH5tYXhfaXRlbXM6KDQgKiBMaXN0Lmxlbmd0aCB2aXNpYmxlX3Jvd3MpIHZpc2libGVfcm93c1xuICAgICAgICBpblxuICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgIGxldCsgdG90YWxfaXRlbXMgPSB0b3RhbF9pdGVtcyBpblxuICAgICAgICBtYXRjaCB0b3RhbF9pdGVtcyB3aXRoXG4gICAgICAgIHwgT2sgdG90YWxfaXRlbXMgLT5cbiAgICAgICAgICAgIHByZXBhcmUgfnRvdGFsX2l0ZW1zIH5yZW5kZXI7XG4gICAgICAgICAgICB1cGRhdGVcbiAgICAgICAgfCBfIC0+IGlnbm9yZSlcbiAgaW5cbiAgbGV0IHNjcm9sbF9oYW5kbGVyID1cbiAgICBMd2QubWFwIHBvcHVsYXRlX29uX3Njcm9sbCB+ZjooZnVuIHVwZGF0ZSAtPlxuICAgICAgICBFbHdkLmhhbmRsZXIgRXYuc2Nyb2xsIChmdW4gZXYgLT5cbiAgICAgICAgICAgIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgICAgICAgICAgIGlnbm9yZVxuICAgICAgICAgICAgQEBcbiAgICAgICAgICAgIGxldCsgdXBkYXRlID0gdXBkYXRlIGluXG4gICAgICAgICAgICBsZXQgc2Nyb2xsX2hhbmRsZXIgPVxuICAgICAgICAgICAgICBsZXQgbGFzdF91cGRhdGUgPSByZWYgMC4gaW5cbiAgICAgICAgICAgICAgbGV0IHRpbWVvdXQgPSByZWYgKC0xKSBpblxuICAgICAgICAgICAgICBsZXQgcmVzZXRfdGlja2VyIGRpdiA9XG4gICAgICAgICAgICAgICAgbGV0IGRlYm91bmNpbmdfaW50ZXJ2YWwgPSAyNSBpblxuICAgICAgICAgICAgICAgICgqIFdlIHVzZSBbbGFzdF91cGRhdGVdIHRvIGhhdmUgcmVndWxhciBkZWJvdW5jZWQgdXBkYXRlcyBhbmQgdGhlXG4gICAgICAgICAgICAgICAgICAgW3RpbWVvdXRdIHRvIGVuc3VyZSB0aGF0IHRoZSBsYXN0IHNjcm9sbCBldmVudCBpcyBhbHdheXMgdGFrZW4gaW50b1xuICAgICAgICAgICAgICAgICAgIGFjY291bnQgZXZlbiBpdCBpdCBoYXBwZW5zIGR1cmluZyB0aGUgZGVib3VuY2luZyBpbnRlcnZhbC4gKilcbiAgICAgICAgICAgICAgICBsZXQgbm93ID0gUGVyZm9ybWFuY2Uubm93X21zIEcucGVyZm9ybWFuY2UgaW5cbiAgICAgICAgICAgICAgICBpZiAhdGltZW91dCA+PSAwIHRoZW4gRy5zdG9wX3RpbWVyICF0aW1lb3V0O1xuICAgICAgICAgICAgICAgIHRpbWVvdXQgOj1cbiAgICAgICAgICAgICAgICAgIEcuc2V0X3RpbWVvdXQgfm1zOmRlYm91bmNpbmdfaW50ZXJ2YWwgKGZ1biAoKSAtPiB1cGRhdGUgZGl2KTtcbiAgICAgICAgICAgICAgICBpZiBub3cgLS4gIWxhc3RfdXBkYXRlID4uIGZsb2F0X29mX2ludCBkZWJvdW5jaW5nX2ludGVydmFsIHRoZW4gKFxuICAgICAgICAgICAgICAgICAgbGFzdF91cGRhdGUgOj0gbm93O1xuICAgICAgICAgICAgICAgICAgdXBkYXRlIGRpdilcbiAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgZnVuIGRpdiAtPiByZXNldF90aWNrZXIgZGl2XG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgbGV0IGRpdiA9IEV2LnRhcmdldCBldiB8PiBFdi50YXJnZXRfdG9fanYgfD4gRWwub2ZfanYgaW5cbiAgICAgICAgICAgIHNjcm9sbF9oYW5kbGVyIGRpdikpXG4gIGluXG4gIGxldCAoKSA9XG4gICAgbGV0IHJlcG9wdWxhdGVfZGVwcyA9XG4gICAgICBMd2QubWFwMiBwb3B1bGF0ZV9vbl9zY3JvbGwgKEx3ZC5nZXQgdGFibGVfaGVpZ2h0KSB+ZjooZnVuIGEgYiAtPiAoYSwgYikpXG4gICAgaW5cbiAgICBsZXQgcm9vdCA9IEx3ZC5vYnNlcnZlIHJlcG9wdWxhdGVfZGVwcyBpblxuICAgIEx3ZC5zZXRfb25faW52YWxpZGF0ZSByb290IChmdW4gXyAtPlxuICAgICAgICBtYXRjaCBMd2QucXVpY2tfc2FtcGxlIHJvb3Qgd2l0aFxuICAgICAgICB8IHVwZGF0ZSwgU29tZSAoX2gsIGRpdikgLT4gRnV0LmF3YWl0IHVwZGF0ZSAoZnVuIHVwZGF0ZSAtPiB1cGRhdGUgZGl2KVxuICAgICAgICB8IF8gLT4gKCkpO1xuICAgIEx3ZC5xdWlja19zYW1wbGUgcm9vdCB8PiBpZ25vcmVcbiAgaW5cbiAgbGV0IG1ha2Vfc3BhY2VyIG4gPVxuICAgIGxldCBhdCA9IFsgQXQuY2xhc3MnIChKc3RyLnYgXCJyb3dfc3BhY2VyXCIpIF0gaW5cbiAgICBsZXQgc3R5bGUgPSBBdC5zdHlsZSAoSnN0ci52IEBAIGhlaWdodF9uIG4pIGluXG4gICAgRWwuZGl2IH5hdDooc3R5bGUgOjogYXQpIFtdXG4gIGluXG4gIGxldCByZW5kZXIgXyB7IGNvbnRlbnQ7IGluZGV4OyByZW5kZXIgfSA9XG4gICAgbGV0IGF0ID0gQXR0cnMuYWRkIEF0Lk5hbWUuY2xhc3MnIChgUCBcInJvd1wiKSBbXSBpblxuICAgIGxldCBzdHlsZSA9IGBQIChBdC5zdHlsZSAoSnN0ci52IGhlaWdodCkpIGluXG4gICAgbWF0Y2ggY29udGVudCB3aXRoXG4gICAgfCBTb21lIGRhdGEgLT5cbiAgICAgICAgKDAsIEx3ZF9zZXEuZWxlbWVudCBAQCBFbHdkLmRpdiB+YXQ6KHN0eWxlIDo6IGF0KSAocmVuZGVyIGluZGV4IGRhdGEpLCAwKVxuICAgIHwgTm9uZSAtPiAoMSwgTHdkX3NlcS5lbXB0eSwgMClcbiAgaW5cbiAgbGV0IHRhYmxlX2JvZHkgPVxuICAgIGxldCByb3dzID1cbiAgICAgIEx3ZF90YWJsZS5tYXBfcmVkdWNlIHJlbmRlclxuICAgICAgICAoICgwLCBMd2Rfc2VxLmVtcHR5LCAwKSxcbiAgICAgICAgICBmdW4gKG4sIHMsIG0pIChwLCBzJywgcSkgLT5cbiAgICAgICAgICAgIG1hdGNoIChMd2Rfc2VxLnZpZXcgcywgTHdkX3NlcS52aWV3IHMnKSB3aXRoXG4gICAgICAgICAgICB8IEVtcHR5LCBFbXB0eSAtPlxuICAgICAgICAgICAgICAgICgqIFNpbmNlIHMgaXMgZW1wdHkgaXQgZG9lcyBub3QgbWF0dGVyIG9uIHdoaWNoXG4gICAgICAgICAgICAgICAgICAgXCJzaWRlXCIgb2YgaXQgdGhlIHNwYWNlcyBhcmUgYWNjdW11bGF0ZWQuICopXG4gICAgICAgICAgICAgICAgKG4gKyBtICsgcCArIHEsIHMsIDApXG4gICAgICAgICAgICB8IEVtcHR5LCBfIC0+IChuICsgbSArIHAsIHMnLCBxKVxuICAgICAgICAgICAgfCBfLCBFbXB0eSAtPiAobiwgcywgbSArIHAgKyBxKVxuICAgICAgICAgICAgfCBfLCBfIC0+XG4gICAgICAgICAgICAgICAgbGV0IHMgPVxuICAgICAgICAgICAgICAgICAgaWYgbSArIHAgPiAwIHRoZW5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHNwYWNlciA9IEx3ZC5wdXJlIEBAIG1ha2Vfc3BhY2VyIChtICsgcCkgaW5cbiAgICAgICAgICAgICAgICAgICAgTHdkX3NlcS4oY29uY2F0IHMgQEAgY29uY2F0IChlbGVtZW50IHNwYWNlcikgcycpXG4gICAgICAgICAgICAgICAgICBlbHNlIEx3ZF9zZXEuY29uY2F0IHMgcydcbiAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgIChuLCBzLCBxKSApXG4gICAgICAgIHRhYmxlXG4gICAgaW5cbiAgICBMd2QubWFwIHJvd3MgfmY6KGZ1biAobiwgcywgbSkgLT5cbiAgICAgICAgbGV0IHJlc3VsdCA9XG4gICAgICAgICAgaWYgbiA+IDAgdGhlblxuICAgICAgICAgICAgbGV0IGZpcnN0X3NwYWNlciA9IEx3ZC5wdXJlIEBAIG1ha2Vfc3BhY2VyIG4gaW5cbiAgICAgICAgICAgIEx3ZF9zZXEuKGNvbmNhdCAoZWxlbWVudCBmaXJzdF9zcGFjZXIpIHMpXG4gICAgICAgICAgZWxzZSBzXG4gICAgICAgIGluXG4gICAgICAgIGlmIG0gPiAwIHRoZW5cbiAgICAgICAgICBsZXQgbGFzdF9zcGFjZXIgPSBMd2QucHVyZSBAQCBtYWtlX3NwYWNlciBtIGluXG4gICAgICAgICAgTHdkX3NlcS4oY29uY2F0IHJlc3VsdCAoZWxlbWVudCBsYXN0X3NwYWNlcikpXG4gICAgICAgIGVsc2UgcmVzdWx0KVxuICBpblxuICBsZXQgdGFibGVfaGVhZGVyID0gU2NoZW1hLmhlYWRlciB1aV90YWJsZSBpblxuICBsZXQgb2JzZXJ2ZXIgPVxuICAgICgqIFdlIG9ic2VydmUgdGhlIHNpemUgb2YgdGhlIHRhYmxlIHRvIHJlLXBvcHVsYXRlIGlmIG5lY2Vzc2FyeSAqKVxuICAgIFJlc2l6ZV9vYnNlcnZlci5jcmVhdGUgfmNhbGxiYWNrOihmdW4gZW50cmllcyBfIC0+XG4gICAgICAgIGxldCBlbnRyeSA9IExpc3QuaGQgZW50cmllcyBpblxuICAgICAgICBsZXQgZGl2ID0gUmVzaXplX29ic2VydmVyLkVudHJ5LnRhcmdldCBlbnRyeSBpblxuICAgICAgICBsZXQgcmVjdCA9IFJlc2l6ZV9vYnNlcnZlci5FbnRyeS5jb250ZW50X3JlY3QgZW50cnkgaW5cbiAgICAgICAgbGV0IGhlaWdodCA9IERvbV9yZWN0X3JlYWRfb25seS5oZWlnaHQgcmVjdCBpblxuICAgICAgICBtYXRjaCBMd2QucGVlayB0YWJsZV9oZWlnaHQgd2l0aFxuICAgICAgICB8IFNvbWUgKGgsIF8pIHdoZW4gaCA8PiBoZWlnaHQgLT5cbiAgICAgICAgICAgIEx3ZC5zZXQgdGFibGVfaGVpZ2h0IChTb21lIChoZWlnaHQsIGRpdikpXG4gICAgICAgIHwgTm9uZSAtPiBMd2Quc2V0IHRhYmxlX2hlaWdodCAoU29tZSAoaGVpZ2h0LCBkaXYpKVxuICAgICAgICB8IF8gLT4gKCkpXG4gIGluXG4gIGxldCBhdCA9IEF0dHJzLnRvX2F0IEBAIEF0dHJzLmNsYXNzZXMgWyBcImx3ZHVpLWxhenktdGFibGVcIiBdIGluXG4gIGxldCBncmlkX3N0eWxlID0gU2NoZW1hLnN0eWxlIHVpX3RhYmxlIGluXG4gIGxldCBzID0gQXQuc3R5bGUgKEpzdHIudiBAQCBncmlkX3N0eWxlKSBpblxuICBsZXQgYXQgPSBgUCBzIDo6IGF0IGluXG4gIGxldCBlbCA9XG4gICAgbGV0IGNvbnRhaW5lciA9XG4gICAgICBFbHdkLmRpdlxuICAgICAgICB+ZXY6WyBgUiBzY3JvbGxfaGFuZGxlciBdXG4gICAgICAgIH5hdFxuICAgICAgICBbIGBSIHRhYmxlX2hlYWRlcjsgYFMgKEx3ZF9zZXEubGlmdCB0YWJsZV9ib2R5KSBdXG4gICAgICB8PiBMd2QubWFwIH5mOih0ZWUgKFJlc2l6ZV9vYnNlcnZlci5vYnNlcnZlIG9ic2VydmVyKSlcbiAgICBpblxuICAgIEVsd2QuZGl2XG4gICAgICB+YXQ6QXR0cnMuKHRvX2F0IEBAIGNsYXNzZXMgWyBcImx3ZHVpLWxhenktdGFibGUtd3JhcHBlclwiIF0pXG4gICAgICBbIGBSIGNvbnRhaW5lciBdXG4gIGluXG4gIGVsXG5cbigqKiAjIyMjIyMjKiojKioqKioqIyUlIz09PSsrKyojIyMlIyMjIyMjIyMjIyMqKyMjPSMjIysrKysrKysrKysrKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyojIyMjKioqKiUlIyM9PT09PT09PT09PSsjPT09LT09PT09PT0qIz0jIyMrKysrKysrKysrKysrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMqIyMjIyMqKiojJSMjPT09PT09LS0tPT0rIz09LS0tPT09PT09KiM9IyMjKysrKysrKysrKysrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIz09PT0tLS0tPT0tPSM9LS09PT09PT09PSojPSojIyUjKysrKyslJSUrKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjJSM9PT09LT09PT0tLT0jPT09PT09PT09PT0qIz0qIyMlIysrPSsjKiolJSsrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMqPS0tLS0tLS0tLS09Iz09PT09PT09PT09KyM9KyMjKyUjJSorJSslJSUrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjIyMjIyMrPS0tLS0tLS0tPT0tLS0tLSM9PT09LT09LS0tLSsjPSsjIyorJSMlJSsjIyUlKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjIys9LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09LT0rIz0rIyMjKysrIyolKyMrKysrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjIz0tLS0tLS0tLS09IyMjIz0jPS0tIz0rKz09PT0tLT09PSM9KyMjIyorKyslJSsrJSUrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjKj09PT09PS0tPT0qKiMjIyMjIys9PT09PSs9KysrKysrKiMjPSsjIyMqKysrKysrKysrKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIz0tLS0tLT09KyorIyMjKiMjIyMjIz0jPT0tLS0tPT09PT0rIz0rIyMjKioqKisrKysrKysrSVMrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyM9PS09LT0qIys9IyslKyM9PT0jPT09Iz09LS09PT09PT09PSM9KyMjIyoqKisrKysrKysrKysrK1RISVMrKysrKytcbiMjIyMjIyMjIyMjIyMjPS0jKiMrKiMjPSMjIyMqKyM9Kys9PSM9PT09PT09PT09PSsjPSsjIyMqKioqKioqKysrQSsrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIz09IyMjPSMjIyMjIyMjIyMjIysjKisjPT09PT09PT09PT09IysrIyMjKioqKioqKioqKysrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjPSorIyojIyMjIyMjIyMjIyMjIyM9Iz09PT09PT09PT09PSMrKyMjIyoqKioqKioqKioqKk1PTk9JRCs/KysrKytcbiMjIyMjIyMjIyMjIyMjIyM9PSMjIyMjIyMjIyM9PT09IyMqPSM9PT09PT09IyoqPT0jKysjIyMqKioqKioqKioqKioqKioqKisrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjIz09KyMjIyMjIyMjIyMjIyMjPT0jPT09PT0jIyM9PT09IysrIyMjKioqKioqKioqKioqKioqKioqKioqKisrK1xuIyMjIyMjIyMjIyMjIyMjIyMjPT0jIyMrIyMjIyMjIyMjKyMjIyorPT0jIyM9PT09PSMrKyMjKysrKioqKioqKioqKioqKioqKioqKioqKitcbiMjIyMjIyMjIyMjIyMjKyUlJSUjIyMjIyMjIysjIyMjKj09KyM9PSsjIyMjIyMjIyMjIyMjIyorKyoqKioqKioqKioqKioqKioqKioqKioqXG4jIyMjIyMjIyMjIyMjIysrKysrPSslIyUjKiMjIyojJSUlJSsjPSsjIyMjIyMjIyMjKiMjIysjPSMjKiMqKioqKioqKioqKioqKioqKioqKlxuIyMjIyMjIyMjIyMjIyMqIz09Kz09PT0jIz09PSMjIyUlJSUlJSUjIyMjIyMjIyMjIyMjPSMrIyMjIyMjKioqKisrKj09KyoqKioqKioqKipcbiMjIyMjKz0rIyMjIyMjIyMjIyM9Kz09Kz09PT0jIyMqKyMlJSUlIyMjIyMjIyMjIyMqKysjIyMjIyMjIz09Kis9PT09PT0rKyoqKioqKioqXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyo9PT09PT09IyMjIyMrIyUlKiMjIyMjIyMjKj09IysrIyMjIyMjKj09PT09PT09PT09PT09PT0qKioqKlxuIyMjIyMjIyMjIyMjKyMjIyMjKyMjIyM9PT0rPSMjIyMjIyMrIyMjIyMjIyM9PT09PSMrKyMjIys9PT09PT09PT09PT09PT09PT09KyoqKilcbiIsIm1vZHVsZSB0eXBlIENvbmZpZyA9IHNpZ1xuICB0eXBlIGxhbmdcblxuICAoKiB2YWwgZGVmYXVsdCA6IGxhbmcgKilcbiAgdmFsIGFjdGl2ZSA6IGxhbmcgTHdkLnZhclxuICB2YWwgZ2V0IDogbGFuZyAtPiBzdHJpbmcgLT4gc3RyaW5nXG5lbmRcblxubGV0IG1ha2UgKHR5cGUgYSkgKG1vZHVsZSBDIDogQ29uZmlnIHdpdGggdHlwZSBsYW5nID0gYSkgPVxuICBsZXQgZ2V0IHN0cmluZyA9XG4gICAgTHdkLm1hcCAoTHdkLmdldCBDLmFjdGl2ZSkgfmY6KGZ1biBsYW5nIC0+IEpzdHIudiBAQCBDLmdldCBsYW5nIHN0cmluZylcbiAgaW5cbiAgbGV0IHNldCAobGFuZyA6IGEpID0gTHdkLnNldCBDLmFjdGl2ZSBsYW5nIGluXG4gIChzZXQsIGdldClcbiIsIm9wZW4hIFN0ZFxubW9kdWxlIEI2NCA9IEJhc2U2NFxub3BlbiEgQnJyXG5tb2R1bGUgU3RvcmFnZSA9IEJycl9pby5TdG9yYWdlXG5cbmxldCBrZXlzID0gSGFzaHRibC5jcmVhdGUgNjRcblxubGV0IGNoZWNrX2tleSBrZXkgPVxuICBpZiBIYXNodGJsLm1lbSBrZXlzIGtleSB0aGVuXG4gICAgZmFpbHdpdGggQEAgUHJpbnRmLnNwcmludGYgXCJNdWx0aXBsZSBwZXJzaXRlbnQgdmFyIGFyZSB1c2luZyB0aGUga2V5ICVzXCIga2V5XG4gIGVsc2UgSGFzaHRibC5hZGQga2V5cyBrZXkgKClcblxubGV0IGxvY2FsX3N0b3JhZ2UgPSBTdG9yYWdlLmxvY2FsIEcud2luZG93XG5cbmxldCBzdG9yZSB+a2V5IHZhbHVlID1cbiAgRW5jb2RpbmdzLnRvX2pzdHIgdmFsdWUgfD4gU3RvcmFnZS5zZXRfaXRlbSBsb2NhbF9zdG9yYWdlIGtleVxuXG5sZXQgZmV0Y2ggfmtleSA9XG4gIGxldCBvcGVuIFJlc3VsdC5JbmZpeCBpblxuICBsZXQqIGVuY29kZWRfdmFsdWUgPVxuICAgIG1hdGNoIFN0b3JhZ2UuZ2V0X2l0ZW0gbG9jYWxfc3RvcmFnZSBrZXkgd2l0aFxuICAgIHwgTm9uZSAtPiBFcnJvciBgTm90X2ZvdW5kXG4gICAgfCBTb21lIHYgLT4gT2sgdlxuICBpblxuICBFbmNvZGluZ3Mub2ZfanN0ciBlbmNvZGVkX3ZhbHVlXG5cbmxldCBpbml0aWFsX3ZhbHVlIH5rZXkgZiA9XG4gIG1hdGNoIGZldGNoIH5rZXkgd2l0aFxuICB8IEVycm9yIGBOb3RfZm91bmQgLT4gZiAoKVxuICB8IEVycm9yIChgTXNnIG1zZykgLT5cbiAgICAgIENvbnNvbGUud2FybiBbIG1zZyBdO1xuICAgICAgZiAoKVxuICB8IE9rIHYgLT4gdlxuXG5sZXQgaW5pdGlhbF92YWx1ZV9mdXQgfmtleSBmID1cbiAgbWF0Y2ggZmV0Y2ggfmtleSB3aXRoXG4gIHwgRXJyb3IgYE5vdF9mb3VuZCAtPiBmICgpXG4gIHwgRXJyb3IgKGBNc2cgbXNnKSAtPlxuICAgICAgQ29uc29sZS53YXJuIFsgbXNnIF07XG4gICAgICBmICgpXG4gIHwgT2sgdiAtPiBGdXQub2sgQEAgdlxuXG5sZXQgbWFrZV9wZXJzaXN0ZW50X3ZhciB+a2V5IHZhbHVlID1cbiAgaWdub3JlIEBAIHN0b3JlIH5rZXkgdmFsdWU7XG4gIGxldCB2YXIgPSBMd2QudmFyIHZhbHVlIGluXG4gIGxldCByb290ID0gTHdkLm9ic2VydmUgKEx3ZC5nZXQgdmFyKSBpblxuICBMd2Quc2V0X29uX2ludmFsaWRhdGUgcm9vdCAoZnVuIF8gLT5cbiAgICAgIGxldCBuZXdfdmFsdWUgPSBMd2QucXVpY2tfc2FtcGxlIHJvb3QgaW5cbiAgICAgIGlnbm9yZSBAQCBzdG9yZSB+a2V5IG5ld192YWx1ZSk7XG4gIGxldCBfID0gTHdkLnF1aWNrX3NhbXBsZSByb290IGluXG4gIHZhclxuXG5sZXQgdmFyX2YgfmtleSBmID1cbiAgbGV0ICgpID0gY2hlY2tfa2V5IGtleSBpblxuICBsZXQga2V5ID0gSnN0ci52IGtleSBpblxuICBsZXQgdmFsdWUgPSBpbml0aWFsX3ZhbHVlIH5rZXkgZiBpblxuICBtYWtlX3BlcnNpc3RlbnRfdmFyIH5rZXkgdmFsdWVcblxubGV0IHZhciB+a2V5IGRlZmF1bHQgPSB2YXJfZiB+a2V5IChmdW4gKCkgLT4gZGVmYXVsdClcblxubGV0IHZhcl9mdXQgKHR5cGUgYSBiKSB+a2V5IChmIDogdW5pdCAtPiAoYSwgYikgRnV0LnJlc3VsdCkgOlxuICAgIChhIEx3ZC52YXIsIGIpIEZ1dC5yZXN1bHQgPVxuICBsZXQgKCkgPSBjaGVja19rZXkga2V5IGluXG4gIGxldCBrZXkgPSBKc3RyLnYga2V5IGluXG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgKHZhbHVlIDogYSkgPSAoaW5pdGlhbF92YWx1ZV9mdXQgfmtleSBmIDogKGEsIGIpIEZ1dC5yZXN1bHQpIGluXG4gIG1ha2VfcGVyc2lzdGVudF92YXIgfmtleSB2YWx1ZVxuIiwib3BlbiBTdGRcbm9wZW4gQnJyZXIuQnJyXG5vcGVuIEJycl9sd2Rcbm1vZHVsZSBGaWVsZCA9IEZpZWxkXG5cbnR5cGUgKCd0LCAnYSkgZm9ybV9zZXR0ZXIgPSAndCAtPiAnYSBGaWVsZC52YWxpZGF0aW9uIC0+ICd0XG5cbnR5cGUgJ3JlcyBmb3JtX2ZpZWxkID1cbiAgfCBGIDogJ2EgRmllbGQudCAqICgnZm9ybSwgJ2EpIGZvcm1fc2V0dGVyIC0+ICdmb3JtIGZvcm1fZmllbGRcblxubW9kdWxlIHR5cGUgRm9ybSA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgZGVmYXVsdCA6IHRcbiAgdmFsIGZpZWxkcyA6IHQgZm9ybV9maWVsZCBMd2QudCBMd2Rfc2VxLnQgTHdkLnRcbmVuZFxuXG5sZXQgZmllbGQgZmllbGQgc2V0dGVyID0gTHdkLm1hcCBmaWVsZCB+ZjooZnVuIGZpZWxkIC0+IEYgKGZpZWxkLCBzZXR0ZXIpKVxuXG5sZXQgY3JlYXRlID9kID9hdCA/ZXYgKHR5cGUgdCkgKG1vZHVsZSBGb3JtIDogRm9ybSB3aXRoIHR5cGUgdCA9IHQpIG9uX3N1Ym1pdCA6XG4gICAgRWx3ZC50IEx3ZC50ID1cbiAgbGV0IGZpZWxkcyA9XG4gICAgTHdkX3NlcS5saWZ0IEZvcm0uZmllbGRzXG4gICAgfD4gTHdkX3NlcS5mb2xkX21vbm9pZFxuICAgICAgICAgKGZ1biAoRiAoZmllbGQsIG1hcHBlcikpIC0+XG4gICAgICAgICAgICggTHdkX3NlcS5lbGVtZW50IGZpZWxkLmVsdCxcbiAgICAgICAgICAgICBsZXQgdmFsdWUgKCkgPVxuICAgICAgICAgICAgICAgbWF0Y2ggTHdkLnBlZWsgZmllbGQudmFsdWUgd2l0aFxuICAgICAgICAgICAgICAgfCBOb25lIC0+IEZpZWxkLkVtcHR5XG4gICAgICAgICAgICAgICB8IFNvbWUgdiAtPiBmaWVsZC52YWxpZGF0ZSB2XG4gICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICBmdW4gdCAtPiBtYXBwZXIgdCBAQCB2YWx1ZSAoKSApKVxuICAgICAgICAgKCAoTHdkX3NlcS5lbXB0eSwgRnVuLmlkKSxcbiAgICAgICAgICAgZnVuIChlbHRzLCBmKSAoZWx0cycsIGYnKSAtPlxuICAgICAgICAgICAgIChMd2Rfc2VxLmNvbmNhdCBlbHRzIGVsdHMnLCBmdW4gdCAtPiBmJyAoZiB0KSkgKVxuICBpblxuICBsZXQgaGFuZGxlciA9XG4gICAgTHdkLm1hcCBmaWVsZHMgfmY6KGZ1biAoXywgdmFsdWUpIC0+XG4gICAgICAgIGxldCBvbl9zdWJtaXQgZSA9XG4gICAgICAgICAgb25fc3VibWl0IEBAIHZhbHVlIEZvcm0uZGVmYXVsdDtcbiAgICAgICAgICBFdi5wcmV2ZW50X2RlZmF1bHQgZVxuICAgICAgICBpblxuICAgICAgICBFbHdkLmhhbmRsZXIgRXYuc3VibWl0IG9uX3N1Ym1pdClcbiAgaW5cbiAgbGV0IG9uX3N1Ym1pdCA9IGBSIGhhbmRsZXIgaW5cbiAgbGV0IGVsdHMgPSBMd2QubWFwIGZpZWxkcyB+ZjooZnVuIChlbHRzLCBfKSAtPiBlbHRzKSBpblxuICBsZXQgZXYgPSBPcHRpb24ubWFwX29yIH5kZWZhdWx0Olsgb25fc3VibWl0IF0gKExpc3QuY29ucyBvbl9zdWJtaXQpIGV2IGluXG4gIEVsd2QuZm9ybSA/ZCA/YXQgfmV2IFsgYFMgKEx3ZF9zZXEubGlmdCBlbHRzKSBdXG4iLCJvcGVuISBTdGRcbm9wZW4hIEJycmVyXG5vcGVuISBCcnJcbm9wZW4hIEJycl9sd2RcblxudHlwZSBsYWJlbCA9IEVsd2QudCBFbHdkLmNvbFxudHlwZSBkZXNjID0geyBwbGFjZWhvbGRlciA6IHN0cmluZyBvcHRpb24gTHdkLnQ7IGxhYmVsIDogbGFiZWwgfVxudHlwZSB0ID0geyBuYW1lIDogc3RyaW5nOyBkZWZhdWx0IDogc3RyaW5nIG9wdGlvbjsgZGVzYyA6IGRlc2MgfVxuXG50eXBlICdhIHJlYWN0aXZlX2ZpZWxkID0ge1xuICBmaWVsZCA6IEVsd2QudCBMd2QudDtcbiAgbGFiZWwgOiBFbHdkLnQgTHdkLnQ7XG4gIHZhbHVlIDogJ2EgTHdkLnQ7XG59XG5cbmxldCBuYW1lIH5pZCBiYXNlX25hbWUgPVxuICBpZiBpZCB0aGVuIFByaW50Zi5zcHJpbnRmIFwiJXMtLWlkXCIgYmFzZV9uYW1lXG4gIGVsc2UgUHJpbnRmLnNwcmludGYgXCIlc1wiIGJhc2VfbmFtZVxuXG5sZXQgbWFrZSB0ID1cbiAgbGV0IGlkID0gbmFtZSB+aWQ6dHJ1ZSB0Lm5hbWUgaW5cbiAgbGV0IG5hbWUgPSBuYW1lIH5pZDpmYWxzZSB0Lm5hbWUgaW5cbiAgbGV0IHZhciA9IFBlcnNpc3RlbnQudmFyIH5rZXk6aWQgdC5kZWZhdWx0IGluXG4gIGxldCBmaWVsZCwgbGFiZWwgPVxuICAgIGxldCBvcGVuIEx3ZF9pbmZpeCBpblxuICAgIGxldCBsYWJlbCA9IEVsd2QubGFiZWwgfmF0OlsgYFAgKEF0LmZvcicgKEpzdHIudiBpZCkpIF0gdC5kZXNjLmxhYmVsIGluXG4gICAgbGV0IGF0ID1cbiAgICAgIGxldCBvcGVuIEF0dHJzIGluXG4gICAgICBhZGQgQXQuTmFtZS5pZCAoYFAgaWQpIFtdXG4gICAgICB8PiBhZGQgQXQuTmFtZS5uYW1lIChgUCBuYW1lKVxuICAgICAgfD4gYWRkIEF0Lk5hbWUudHlwZScgKGBQIFwidGV4dFwiKVxuICAgIGluXG4gICAgbGV0IGF0ID1cbiAgICAgIG1hdGNoIEx3ZC5wZWVrIHZhciB3aXRoXG4gICAgICB8IFNvbWUgdiAtPiBgUCAoQXQudmFsdWUgQEAgSnN0ci52IHYpIDo6IGF0XG4gICAgICB8IE5vbmUgLT4gYXRcbiAgICBpblxuICAgIGxldCBvbl9jaGFuZ2UgPVxuICAgICAgRWx3ZC5oYW5kbGVyIEV2LmtleXVwIChmdW4gZXYgLT5cbiAgICAgICAgICBsZXQgdCA9IEV2LnRhcmdldCBldiB8PiBFdi50YXJnZXRfdG9fanYgaW5cbiAgICAgICAgICBsZXQgdmFsdWUgPSBKdi5nZXQgdCBcInZhbHVlXCIgaW5cbiAgICAgICAgICBMd2Quc2V0IHZhciAoU29tZSAoSnYudG9fc3RyaW5nIHZhbHVlKSkpXG4gICAgaW5cbiAgICBsZXQgZXYgPSBbIGBQIG9uX2NoYW5nZSBdIGluXG4gICAgKEVsd2QuKGRpdiBbIGBSIChpbnB1dCB+YXQgfmV2ICgpKSBdKSwgbGFiZWwpXG4gIGluXG4gIHsgZmllbGQ7IGxhYmVsOyB2YWx1ZSA9IEx3ZC5nZXQgdmFyIH1cbiIsIm9wZW4hIFN0ZFxub3BlbiEgQnJyZXJcbm9wZW4hIEJyclxub3BlbiEgQnJyX2x3ZFxuXG50eXBlIGNoZWNrZWQgPSBib29sXG50eXBlIGxhYmVsID0gRWx3ZC50IEVsd2QuY29sXG50eXBlICd2YWx1ZSBkZXNjID0gQ2hlY2sgb2YgJ3ZhbHVlICogbGFiZWwgKiBjaGVja2VkXG4oKiBUT0RPIHwgR3JvdXAgb2YgbGFiZWwgKiAndmFsdWUgZGVzYyBsaXN0ICopXG5cbnR5cGUgJ3ZhbHVlIHQgPSB7IG5hbWUgOiBzdHJpbmc7IGRlc2MgOiAndmFsdWUgZGVzYyBMd2Rfc2VxLnQgTHdkLnQgfVxudHlwZSAnYSByZWFjdGl2ZV9maWVsZCA9IHsgZmllbGQgOiBFbHdkLnQgTHdkLnQ7IHZhbHVlIDogJ2EgTHdkLnQgfVxuXG5sZXQgbmFtZSB+ZyB+biB+aWQgYmFzZV9uYW1lID1cbiAgaWYgaWQgdGhlbiBQcmludGYuc3ByaW50ZiBcIiVzLSVpLSVpLWlkXCIgYmFzZV9uYW1lIGcgblxuICBlbHNlIFByaW50Zi5zcHJpbnRmIFwiJXMtJWktJWlcIiBiYXNlX25hbWUgZyBuXG5cbmxldCBtYWtlIHQgPVxuICBsZXQgbWFrZV9jaGVjayB+ZyB+biB2YWx1ZSBsYWJlbCBjaGVja2VkID1cbiAgICBsZXQgaWQgPSBuYW1lIH5nIH5uIH5pZDp0cnVlIHQubmFtZSBpblxuICAgIGxldCBuYW1lID0gbmFtZSB+ZyB+biB+aWQ6ZmFsc2UgdC5uYW1lIGluXG4gICAgbGV0IHJlc3VsdCBjaGVja2VkID0gaWYgY2hlY2tlZCB0aGVuIFNvbWUgdmFsdWUgZWxzZSBOb25lIGluXG4gICAgbGV0IHZhciA9IFBlcnNpc3RlbnQudmFyIH5rZXk6aWQgKHJlc3VsdCBjaGVja2VkKSBpblxuICAgIGxldCBsYmwgPSBFbHdkLmxhYmVsIH5hdDpbIGBQIChBdC5mb3InIChKc3RyLnYgaWQpKSBdIGxhYmVsIGluXG4gICAgbGV0IGF0ID1cbiAgICAgIGxldCBvcGVuIEF0dHJzIGluXG4gICAgICBhZGQgQXQuTmFtZS5pZCAoYFAgaWQpIFtdXG4gICAgICB8PiBhZGQgQXQuTmFtZS5uYW1lIChgUCBuYW1lKVxuICAgICAgfD4gYWRkIEF0Lk5hbWUudHlwZScgKGBQIFwiY2hlY2tib3hcIilcbiAgICBpblxuICAgIGxldCBjaGVja2VkID1cbiAgICAgIEx3ZC5tYXAgKEx3ZC5nZXQgdmFyKSB+ZjooZnVuY3Rpb25cbiAgICAgICAgfCBTb21lIF8gLT4gQXQuY2hlY2tlZFxuICAgICAgICB8IE5vbmUgLT4gQXQudm9pZClcbiAgICBpblxuICAgIGxldCBhdCA9IGBSIGNoZWNrZWQgOjogYXQgaW5cbiAgICBsZXQgb25fY2hhbmdlID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5jaGFuZ2UgKGZ1biBldiAtPlxuICAgICAgICAgIGxldCB0ID0gRXYudGFyZ2V0IGV2IHw+IEV2LnRhcmdldF90b19qdiBpblxuICAgICAgICAgIGxldCBjaGVja2VkID0gSnYuZ2V0IHQgXCJjaGVja2VkXCIgaW5cbiAgICAgICAgICBMd2Quc2V0IHZhciAocmVzdWx0IChKdi50b19ib29sIGNoZWNrZWQpKSlcbiAgICBpblxuICAgIGxldCBldiA9IFsgYFAgb25fY2hhbmdlIF0gaW5cbiAgICAoRWx3ZC4oZGl2IFsgYFIgKGlucHV0IH5hdCB+ZXYgKCkpOyBgUiBsYmwgXSksIEx3ZC5nZXQgdmFyKVxuICBpblxuICAoKiA8ZmllbGRzZXQ+PGxlZ2VuZD4gKilcbiAgKCogPGZpZWxkc2V0PjxsZWdlbmQ+ICopXG4gIGxldCBtYWtlX2FsbCB+ZyBkZXNjID1cbiAgICBsZXQgbiA9IHJlZiAwIGluXG4gICAgTHdkX3NlcS5tYXBcbiAgICAgIChmdW5jdGlvblxuICAgICAgICB8IENoZWNrICh2LCBsLCBjKSAtPlxuICAgICAgICAgICAgbGV0IGVsdCwgdmFsdWUgPSBtYWtlX2NoZWNrIH5nIH5uOiFuIHYgbCBjIGluXG4gICAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgICAoZWx0LCB2YWx1ZSkpXG4gICAgICBkZXNjXG4gIGluXG4gIGxldCBhbGwgPSBtYWtlX2FsbCB+ZzowIHQuZGVzYyBpblxuICBsZXQgZWx0cyA9IEx3ZF9zZXEubWFwIChmdW4gKGVsdCwgXykgLT4gZWx0KSBhbGwgaW5cbiAgbGV0IHZhbHVlID1cbiAgICBMd2Rfc2VxLmZvbGRfbW9ub2lkIChmdW4gKF8sIHYpIC0+IEx3ZF9zZXEuZWxlbWVudCB2KSBMd2Rfc2VxLm1vbm9pZCBhbGxcbiAgICB8PiBMd2Rfc2VxLmxpZnQgfD4gTHdkX3NlcS5maWx0ZXJfbWFwIEZ1bi5pZCB8PiBMd2QubWFwIH5mOkx3ZF9zZXEudG9fbGlzdFxuICBpblxuICB7IGZpZWxkID0gRWx3ZC5kaXYgWyBgUyAoTHdkX3NlcS5saWZ0IGVsdHMpIF07IHZhbHVlIH1cblxuKCogbGV0IHJlYyBtYWtlX2FsbCB+ZyB+biAoYWNjX2VsdCwgYWNjX3ZhbHVlKSBkZXNjID1cbiAgICAgbWF0Y2ggZGVzYyB3aXRoXG4gICAgIHwgQ2hlY2sgKHYsIGwsIGMpIDo6IHRsIC0+XG4gICAgICAgICBsZXQgZWx0LCB2YWx1ZSA9IG1ha2VfY2hlY2sgfmcgfm4gdiBsIGMgaW5cbiAgICAgICAgIGxldCBhY2NfZWx0ID0gTHdkX3NlcS5jb25jYXQgYWNjX2VsdCBAQCBMd2Rfc2VxLmVsZW1lbnQgZWx0IGluXG4gICAgICAgICBsZXQgYWNjX3ZhbHVlID1cbiAgICAgICAgICAgTHdkLm1hcDIgYWNjX3ZhbHVlIHZhbHVlIH5mOihmdW4gYWNjIC0+IGZ1bmN0aW9uXG4gICAgICAgICAgICAgfCBOb25lIC0+IGFjYyB8IFNvbWUgdiAtPiB2IDo6IGFjYylcbiAgICAgICAgIGluXG4gICAgICAgICBtYWtlX2FsbCB+ZyB+bjoobiArIDEpIChhY2NfZWx0LCBhY2NfdmFsdWUpIHRsXG4gICAgIHwgXyAtPiAoTHdkLnB1cmUgYWNjX2VsdCwgYWNjX3ZhbHVlKVxuICAgaW5cbiAgIGxldCBlbHRzLCB2YWx1ZSA9IG1ha2VfYWxsIH5nOjAgfm46MCAoTHdkX3NlcS5lbXB0eSwgTHdkLnB1cmUgW10pIHQuZGVzYyBpblxuICAgeyBmaWVsZCA9IEVsd2QuZGl2IFsgYFMgKEx3ZF9zZXEubGlmdCBlbHRzKSBdOyB2YWx1ZSB9ICopXG4iLCJvcGVuISBTdGRcbm9wZW4gQnJyXG5vcGVuIEJycl9sd2RcblxubGV0IHYgP2QgPyhhdCA9IFtdKSA/ZXYgdmFsdWUgPVxuICBsZXQgYXQgPVxuICAgIEF0dHJzLmFkZCBBdC5OYW1lLnR5cGUnIChgUCBcImJ1dHRvblwiKSBhdCB8PiBBdHRycy5hZGQgQXQuTmFtZS52YWx1ZSB2YWx1ZVxuICBpblxuICBFbHdkLmlucHV0ID9kIH5hdCA/ZXYgKClcblxudHlwZSAnYSB1cGRhdGUgPSBOb25lIHwgTmV4dCB8IFNldCBvZiAnYVxuXG50eXBlICdzdGF0ZSBoYW5kbGVyX3dpdGhfc3RhdGUgPVxuICB8IEhhbmRsZXJfd2l0aF9zdGF0ZSA6IHtcbiAgICAgIG9wdHMgOiBFdi5saXN0ZW5fb3B0cyBvcHRpb247XG4gICAgICB0eXBlJyA6ICdhIEV2LnR5cGUnO1xuICAgICAgZnVuYyA6ICdzdGF0ZSAtPiAnYSBFdi50IC0+ICdzdGF0ZSB1cGRhdGU7XG4gICAgfVxuICAgICAgLT4gJ3N0YXRlIGhhbmRsZXJfd2l0aF9zdGF0ZVxuXG5sZXQgaGFuZGxlciA/b3B0cyB0eXBlJyBmdW5jID0gSGFuZGxlcl93aXRoX3N0YXRlIHsgb3B0czsgdHlwZSc7IGZ1bmMgfVxuXG5tb2R1bGUgdHlwZSBTdGF0ZSA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgZGVmYXVsdCA6IHRcbiAgdmFsIG5leHQgOiB0IC0+IHRcbmVuZFxuXG5sZXQgYXBwbHlfc3RhdGUgc3RhdGUgZiA9IGYgc3RhdGVcblxubGV0IHdpdGhfc3RhdGUgPyhiYXNlID0gQXR0cnMuZW1wdHkpICh0eXBlIHQpIChtb2R1bGUgUyA6IFN0YXRlIHdpdGggdHlwZSB0ID0gdClcbiAgICA/KHN0YXRlID0gUy5kZWZhdWx0KSA/ZCA/KGF0IDogKFMudCAtPiBBdHRycy50KSBvcHRpb24pXG4gICAgPyhldiA6IHQgaGFuZGxlcl93aXRoX3N0YXRlIEVsd2QuY29sIG9wdGlvbilcbiAgICAoY29udGVudCA6IFMudCAtPiBFbC50IEVsd2QuY29sKSA9XG4gIGxldCB2X3N0YXRlID0gTHdkLnZhciBzdGF0ZSBpblxuICBsZXQgZ2V0X3N0YXRlICgpID0gTHdkLmdldCB2X3N0YXRlIGluXG4gIGxldCBzZXRfc3RhdGUgdCA9IEx3ZC5zZXQgdl9zdGF0ZSB0IGluXG4gIGxldCBlbHQgPVxuICAgIGxldCBvcGVuIEx3ZF9pbmZpeCBpblxuICAgIGxldCQqIHN0YXRlID0gZ2V0X3N0YXRlICgpIGluXG4gICAgbGV0IHdpdGhfc3RhdGUgKEhhbmRsZXJfd2l0aF9zdGF0ZSB7IG9wdHM7IHR5cGUnOyBmdW5jIH0pID1cbiAgICAgIGxldCBmdW5jIGV2ID1cbiAgICAgICAgbWF0Y2ggZnVuYyBzdGF0ZSBldiB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICB8IFNldCBzIC0+IHNldF9zdGF0ZSBzXG4gICAgICAgIHwgTmV4dCAtPiBzZXRfc3RhdGUgQEAgUy5uZXh0IHN0YXRlXG4gICAgICBpblxuICAgICAgRWx3ZC5oYW5kbGVyID9vcHRzIHR5cGUnIGZ1bmNcbiAgICBpblxuICAgIGxldCBhdCA9XG4gICAgICBPcHRpb24ubWFwX29yIH5kZWZhdWx0OmJhc2VcbiAgICAgICAgKGZ1biBhdCAtPiBBdHRycy51bmlvbiBiYXNlIEBAIGFwcGx5X3N0YXRlIHN0YXRlIGF0KVxuICAgICAgICBhdFxuICAgIGluXG4gICAgbGV0IGF0ID0gQXR0cnMudG9fYXQgYXQgaW5cbiAgICBsZXQgZXYgPVxuICAgICAgT3B0aW9uLm1hcFxuICAgICAgICAoTGlzdC5tYXAgfmY6KGZ1bmN0aW9uXG4gICAgICAgICAgfCBgUCBoIC0+IGBQICh3aXRoX3N0YXRlIGgpXG4gICAgICAgICAgfCBgUiBoIC0+IGBSIChMd2QubWFwIGggfmY6d2l0aF9zdGF0ZSlcbiAgICAgICAgICB8IGBTIGggLT4gYFMgKEx3ZF9zZXEubWFwIHdpdGhfc3RhdGUgaCkpKVxuICAgICAgICBldlxuICAgIGluXG4gICAgRWx3ZC5idXR0b24gP2QgfmF0ID9ldiAoY29udGVudCBzdGF0ZSlcbiAgaW5cbiAgKGVsdCwgZ2V0X3N0YXRlLCBzZXRfc3RhdGUpXG5cbnR5cGUgdHdvX3N0YXRlID0gT24gfCBPZmZcblxubW9kdWxlIFR3b19zdGF0ZSA9IHN0cnVjdFxuICB0eXBlIHQgPSB0d29fc3RhdGVcblxuICBsZXQgZGVmYXVsdCA9IE9uXG4gIGxldCBuZXh0ID0gZnVuY3Rpb24gT24gLT4gT2ZmIHwgT2ZmIC0+IE9uXG5lbmRcblxubGV0IHR3b19zdGF0ZSA/YmFzZSA9IHdpdGhfc3RhdGUgP2Jhc2UgKG1vZHVsZSBUd29fc3RhdGUpXG4iLCJvcGVuIFN0ZExhYmVsc1xub3BlbiBNb3JlTGFiZWxzXG5vcGVuISBZb2pzb25cblxudHlwZSB0ID0gWW9qc29uLlNhZmUudFxuXG5sZXQgeW9qc29uX29mX3VuaXQgKCkgOiB0ID0gYE51bGxcbmxldCB5b2pzb25fb2ZfYm9vbCBiIDogdCA9IGBCb29sIGJcbmxldCB5b2pzb25fb2Zfc3RyaW5nIHN0ciA6IHQgPSBgU3RyaW5nIHN0clxubGV0IHlvanNvbl9vZl9ieXRlcyBieXRlcyA6IHQgPSBgU3RyaW5nIChCeXRlcy50b19zdHJpbmcgYnl0ZXMpXG5sZXQgeW9qc29uX29mX2NoYXIgYyA6IHQgPSBgU3RyaW5nIChTdHJpbmcubWFrZSAxIGMpXG5sZXQgeW9qc29uX29mX2ludCBuIDogdCA9IGBJbnQgblxubGV0IHlvanNvbl9vZl9mbG9hdCBuIDogdCA9IGBGbG9hdCBuXG5sZXQgeW9qc29uX29mX2ludDMyIChuIDogSW50MzIudCkgOiB0ID0gYEludGxpdCAoSW50MzIudG9fc3RyaW5nIG4pXG5sZXQgeW9qc29uX29mX2ludDY0IChuIDogSW50NjQudCkgOiB0ID0gYEludGxpdCAoSW50NjQudG9fc3RyaW5nIG4pXG5sZXQgeW9qc29uX29mX25hdGl2ZWludCBuIDogdCA9IGBJbnRsaXQgKE5hdGl2ZWludC50b19zdHJpbmcgbilcbmxldCB5b2pzb25fb2ZfcmVmIHlvanNvbl9vZl9fYSByZiA9IHlvanNvbl9vZl9fYSAhcmZcbmxldCB5b2pzb25fb2ZfbGF6eV90IHlvanNvbl9vZl9fYSBsdiA9IHlvanNvbl9vZl9fYSAoTGF6eS5mb3JjZSBsdilcblxubGV0IHlvanNvbl9vZl9vcHRpb24geW9qc29uX29mX19hID0gZnVuY3Rpb25cbiAgfCBTb21lIHggLT4geW9qc29uX29mX19hIHhcbiAgfCBOb25lIC0+IGBOdWxsXG47O1xuXG5sZXQgeW9qc29uX29mX3BhaXIgeW9qc29uX29mX19hIHlvanNvbl9vZl9fYiAoYSwgYikgPVxuICBgTGlzdCBbIHlvanNvbl9vZl9fYSBhOyB5b2pzb25fb2ZfX2IgYiBdXG47O1xuXG5sZXQgeW9qc29uX29mX3RyaXBsZSB5b2pzb25fb2ZfX2EgeW9qc29uX29mX19iIHlvanNvbl9vZl9fYyAoYSwgYiwgYykgPVxuICBgTGlzdCBbIHlvanNvbl9vZl9fYSBhOyB5b2pzb25fb2ZfX2IgYjsgeW9qc29uX29mX19jIGMgXVxuOztcblxuKCogTGlzdC5yZXYgKExpc3QucmV2X21hcCAuLi4pIGlzIHRhaWwgcmVjdXJzaXZlLCB0aGUgT0NhbWwgc3RhbmRhcmRcbiAgIGxpYnJhcnkgTGlzdC5tYXAgaXMgTk9ULiAqKVxubGV0IHlvanNvbl9vZl9saXN0IHlvanNvbl9vZl9fYSBsc3QgPSBgTGlzdCAoTGlzdC5yZXYgKExpc3QucmV2X21hcCB+Zjp5b2pzb25fb2ZfX2EgbHN0KSlcblxubGV0IHlvanNvbl9vZl9hcnJheSB5b2pzb25fb2ZfX2EgYXIgPVxuICBsZXQgbHN0X3JlZiA9IHJlZiBbXSBpblxuICBmb3IgaSA9IEFycmF5Lmxlbmd0aCBhciAtIDEgZG93bnRvIDAgZG9cbiAgICBsc3RfcmVmIDo9IHlvanNvbl9vZl9fYSBhci4oaSkgOjogIWxzdF9yZWZcbiAgZG9uZTtcbiAgYExpc3QgIWxzdF9yZWZcbjs7XG5cbmxldCB5b2pzb25fb2ZfaGFzaHRibCB5b2pzb25fb2Zfa2V5IHlvanNvbl9vZl92YWwgaHRibCA9XG4gIGxldCBjb2xsIH5rZXk6ayB+ZGF0YTp2IGFjYyA9IGBMaXN0IFsgeW9qc29uX29mX2tleSBrOyB5b2pzb25fb2ZfdmFsIHYgXSA6OiBhY2MgaW5cbiAgYExpc3QgKEhhc2h0YmwuZm9sZCBodGJsIH5pbml0OltdIH5mOmNvbGwpXG47O1xuXG5sZXQgeW9qc29uX29mX29wYXF1ZSBfID0gYFN0cmluZyBcIjxvcGFxdWU+XCJcbmxldCB5b2pzb25fb2ZfZnVuIF8gPSBgU3RyaW5nIFwiPGZ1bj5cIlxuXG5leGNlcHRpb24gT2ZfeW9qc29uX2Vycm9yIG9mIGV4biAqIHRcblxubGV0IHJlY29yZF9jaGVja19leHRyYV9maWVsZHMgPSByZWYgdHJ1ZVxubGV0IG9mX3lvanNvbl9lcnJvcl9leG4gZXhjIHlvanNvbiA9IHJhaXNlIChPZl95b2pzb25fZXJyb3IgKGV4YywgeW9qc29uKSlcbmxldCBvZl95b2pzb25fZXJyb3Igd2hhdCB5b2pzb24gPSByYWlzZSAoT2ZfeW9qc29uX2Vycm9yIChGYWlsdXJlIHdoYXQsIHlvanNvbikpXG5cbmxldCB1bml0X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBOdWxsIC0+ICgpXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJ1bml0X29mX3lvanNvbjogYE51bGwgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgYm9vbF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgQm9vbCB2IC0+IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImJvb2xfb2ZfeW9qc29uOiB0cnVlL2ZhbHNlIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IHN0cmluZ19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgU3RyaW5nIHN0ciAtPiBzdHJcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcInN0cmluZ19vZl95b2pzb246IHN0cmluZyBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBieXRlc19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgU3RyaW5nIHN0ciAtPiBCeXRlcy5vZl9zdHJpbmcgc3RyXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJieXRlc19vZl95b2pzb246IHN0cmluZyBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBjaGFyX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBTdHJpbmcgc3RyIC0+XG4gICAgaWYgU3RyaW5nLmxlbmd0aCBzdHIgPD4gMVxuICAgIHRoZW4gb2ZfeW9qc29uX2Vycm9yIFwiY2hhcl9vZl95b2pzb246IHN0cmluZyBtdXN0IGNvbnRhaW4gb25lIGNoYXJhY3RlciBvbmx5XCIgeW9qc29uO1xuICAgIHN0ci5bMF1cbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImNoYXJfb2ZfeW9qc29uOiBzdHJpbmcgb2Ygc2l6ZSBvbmUgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgaW50X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBJbnQgdiAtPiB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJpbnRfb2ZfeW9qc29uOiBpbnRlZ2VyIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGZsb2F0X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBGbG9hdCB2IC0+IHZcbiAgfCBgSW50IGkgLT4gZmxvYXRfb2ZfaW50IGlcbiAgfCBgSW50bGl0IHN0ciAtPiBmbG9hdF9vZl9zdHJpbmcgc3RyXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJmbG9hdF9vZl95b2pzb246IGZsb2F0IG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGludDMyX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBJbnRsaXQgc3RyIC0+IEludDMyLm9mX3N0cmluZyBzdHJcbiAgfCBgSW50IHYgLT4gSW50MzIub2ZfaW50IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImludDMyX29mX3lvanNvbjogaW50ZWdlciBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBpbnQ2NF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgSW50bGl0IHN0ciAtPiBJbnQ2NC5vZl9zdHJpbmcgc3RyXG4gIHwgYEludCB2IC0+IEludDY0Lm9mX2ludCB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJpbnQ2NF9vZl95b2pzb246IGludGVnZXIgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgbmF0aXZlaW50X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBJbnRsaXQgc3RyIC0+IE5hdGl2ZWludC5vZl9zdHJpbmcgc3RyXG4gIHwgYEludCB2IC0+IE5hdGl2ZWludC5vZl9pbnQgdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwibmF0aXZlaW50X29mX3lvanNvbjogaW50ZWdlciBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCByZWZfb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPSByZWYgKGFfX29mX3lvanNvbiB5b2pzb24pXG5sZXQgbGF6eV90X29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID0gTGF6eS5mcm9tX3ZhbCAoYV9fb2ZfeW9qc29uIHlvanNvbilcblxubGV0IG9wdGlvbl9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYE51bGwgLT4gTm9uZVxuICB8IGVsIC0+IFNvbWUgKGFfX29mX3lvanNvbiBlbClcbjs7XG5cbmxldCBwYWlyX29mX3lvanNvbiBhX19vZl95b2pzb24gYl9fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgWyBhX3lvanNvbjsgYl95b2pzb24gXSAtPlxuICAgIGxldCBhID0gYV9fb2ZfeW9qc29uIGFfeW9qc29uIGluXG4gICAgbGV0IGIgPSBiX19vZl95b2pzb24gYl95b2pzb24gaW5cbiAgICBhLCBiXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJwYWlyX29mX3lvanNvbjogaW52YWxpZCBmb3JtYXRcIiB5b2pzb25cbjs7XG5cbmxldCB0cmlwbGVfb2ZfeW9qc29uIGFfX29mX3lvanNvbiBiX19vZl95b2pzb24gY19fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgWyBhX3lvanNvbjsgYl95b2pzb247IGNfeW9qc29uIF0gLT5cbiAgICBsZXQgYSA9IGFfX29mX3lvanNvbiBhX3lvanNvbiBpblxuICAgIGxldCBiID0gYl9fb2ZfeW9qc29uIGJfeW9qc29uIGluXG4gICAgbGV0IGMgPSBjX19vZl95b2pzb24gY195b2pzb24gaW5cbiAgICBhLCBiLCBjXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJ0cmlwbGVfb2ZfeW9qc29uOiBpbnZhbGlkIGZvcm1hdFwiIHlvanNvblxuOztcblxubGV0IGxpc3Rfb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBMaXN0IGxzdCAtPlxuICAgIGxldCByZXZfbHN0ID0gTGlzdC5yZXZfbWFwIGxzdCB+ZjphX19vZl95b2pzb24gaW5cbiAgICBMaXN0LnJldiByZXZfbHN0XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJsaXN0X29mX3lvanNvbjogbGlzdCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBhcnJheV9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgW10gLT4gW3x8XVxuICB8IGBMaXN0IChoIDo6IHQpIC0+XG4gICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIHQgKyAxIGluXG4gICAgbGV0IHJlcyA9IEFycmF5Lm1ha2UgbGVuIChhX19vZl95b2pzb24gaCkgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9IGZ1bmN0aW9uXG4gICAgICB8IFtdIC0+IHJlc1xuICAgICAgfCBoIDo6IHQgLT5cbiAgICAgICAgcmVzLihpKSA8LSBhX19vZl95b2pzb24gaDtcbiAgICAgICAgbG9vcCAoaSArIDEpIHRcbiAgICBpblxuICAgIGxvb3AgMSB0XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJhcnJheV9vZl95b2pzb246IGxpc3QgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgaGFzaHRibF9vZl95b2pzb24ga2V5X29mX3lvanNvbiB2YWxfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgbHN0IC0+XG4gICAgbGV0IGh0YmwgPSBIYXNodGJsLmNyZWF0ZSAwIGluXG4gICAgbGV0IGFjdCA9IGZ1bmN0aW9uXG4gICAgICB8IGBMaXN0IFsga195b2pzb247IHZfeW9qc29uIF0gLT5cbiAgICAgICAgSGFzaHRibC5hZGQgaHRibCB+a2V5OihrZXlfb2ZfeW9qc29uIGtfeW9qc29uKSB+ZGF0YToodmFsX29mX3lvanNvbiB2X3lvanNvbilcbiAgICAgIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJoYXNodGJsX29mX3lvanNvbjogdHVwbGUgbGlzdCBuZWVkZWRcIiB5b2pzb25cbiAgICBpblxuICAgIExpc3QuaXRlciBsc3QgfmY6YWN0O1xuICAgIGh0YmxcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImhhc2h0Ymxfb2ZfeW9qc29uOiBsaXN0IG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IG9wYXF1ZV9vZl95b2pzb24geW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIFwib3BhcXVlX29mX3lvanNvbjogY2Fubm90IGNvbnZlcnQgb3BhcXVlIHZhbHVlc1wiIHlvanNvblxuOztcblxubGV0IGZ1bl9vZl95b2pzb24geW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIFwiZnVuX29mX3lvanNvbjogY2Fubm90IGNvbnZlcnQgZnVuY3Rpb24gdmFsdWVzXCIgeW9qc29uXG47O1xuXG5tb2R1bGUgUHJpbWl0aXZlcyA9IHN0cnVjdFxuICBsZXQgeW9qc29uX29mX2FycmF5ID0geW9qc29uX29mX2FycmF5XG4gIGxldCBhcnJheV9vZl95b2pzb24gPSBhcnJheV9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9ib29sID0geW9qc29uX29mX2Jvb2xcbiAgbGV0IGJvb2xfb2ZfeW9qc29uID0gYm9vbF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9jaGFyID0geW9qc29uX29mX2NoYXJcbiAgbGV0IGNoYXJfb2ZfeW9qc29uID0gY2hhcl9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9mbG9hdCA9IHlvanNvbl9vZl9mbG9hdFxuICBsZXQgZmxvYXRfb2ZfeW9qc29uID0gZmxvYXRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfaW50ID0geW9qc29uX29mX2ludFxuICBsZXQgaW50X29mX3lvanNvbiA9IGludF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9pbnQzMiA9IHlvanNvbl9vZl9pbnQzMlxuICBsZXQgaW50MzJfb2ZfeW9qc29uID0gaW50MzJfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfaW50NjQgPSB5b2pzb25fb2ZfaW50NjRcbiAgbGV0IGludDY0X29mX3lvanNvbiA9IGludDY0X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2xpc3QgPSB5b2pzb25fb2ZfbGlzdFxuICBsZXQgbGlzdF9vZl95b2pzb24gPSBsaXN0X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX25hdGl2ZWludCA9IHlvanNvbl9vZl9uYXRpdmVpbnRcbiAgbGV0IG5hdGl2ZWludF9vZl95b2pzb24gPSBuYXRpdmVpbnRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2Zfb3B0aW9uID0geW9qc29uX29mX29wdGlvblxuICBsZXQgb3B0aW9uX29mX3lvanNvbiA9IG9wdGlvbl9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9yZWYgPSB5b2pzb25fb2ZfcmVmXG4gIGxldCByZWZfb2ZfeW9qc29uID0gcmVmX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX3N0cmluZyA9IHlvanNvbl9vZl9zdHJpbmdcbiAgbGV0IHN0cmluZ19vZl95b2pzb24gPSBzdHJpbmdfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfYnl0ZXMgPSB5b2pzb25fb2ZfYnl0ZXNcbiAgbGV0IGJ5dGVzX29mX3lvanNvbiA9IGJ5dGVzX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX3VuaXQgPSB5b2pzb25fb2ZfdW5pdFxuICBsZXQgdW5pdF9vZl95b2pzb24gPSB1bml0X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2xhenlfdCA9IHlvanNvbl9vZl9sYXp5X3RcbiAgbGV0IGxhenlfdF9vZl95b2pzb24gPSBsYXp5X3Rfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfaGFzaHRibCA9IHlvanNvbl9vZl9oYXNodGJsXG4gIGxldCBoYXNodGJsX29mX3lvanNvbiA9IGhhc2h0Ymxfb2ZfeW9qc29uXG5lbmRcbiIsIm1vZHVsZSBZb2pzb25fY29udl9lcnJvciA9IFlvanNvbl9jb252X2Vycm9yXG5tb2R1bGUgWW9qc29uX2NvbnYgPSBZb2pzb25fY29udlxubW9kdWxlIFlvanNvbmFibGUgPSBZb2pzb25hYmxlX2ludGZcbm1vZHVsZSBZb2pzb24gPSBZb2pzb25cblxubW9kdWxlIE9wdGlvbiA9IHN0cnVjdFxuICB0eXBlICdhIHQgPSAnYSBvcHRpb24gPVxuICAgIHwgTm9uZVxuICAgIHwgU29tZSBvZiAnYVxuZW5kXG5cbmV4dGVybmFsIGlnbm9yZSA6IF8gLT4gdW5pdCA9IFwiJWlnbm9yZVwiXG5leHRlcm5hbCBwb2x5X2VxdWFsIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxdWFsXCJcblxubGV0ICggISApIDogJ2EgcmVmIC0+ICdhID0gZnVuIHggLT4gIXhcbiIsIm1vZHVsZSBBcGkgPSBKZWxseWZpbl9hcGlcblxudHlwZSBjcmVkZW50aWFscyA9IHsgYmFzZV91cmwgOiBzdHJpbmc7IHVzZXJuYW1lIDogc3RyaW5nOyBwYXNzd29yZCA6IHN0cmluZyB9XG5cbnR5cGUgY29ubmV4aW9uID0ge1xuICBiYXNlX3VybCA6IHN0cmluZztcbiAgYXV0aF9yZXNwb25zZSA6IEFwaS5BdXRoZW50aWNhdGVfYnlfbmFtZS5yZXNwb25zZTtcbn1cblxubGV0IGdldF90b2tlbiB0ID0gdC5hdXRoX3Jlc3BvbnNlLkFwaS5BdXRoZW50aWNhdGVfYnlfbmFtZS5hY2Nlc3NfdG9rZW5cblxubGV0IGNvbm5lY3QgY3JlZGVudGlhbHMgPVxuICBsZXQgbW9kdWxlIEF1dGggPSBBcGkuQXV0aGVudGljYXRlX2J5X25hbWUgaW5cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0IHsgYmFzZV91cmw7IHVzZXJuYW1lOyBwYXNzd29yZCB9ID0gY3JlZGVudGlhbHMgaW5cbiAgbGV0IGF1dGggPSB7IEFwaS5BdXRoZW50aWNhdGVfYnlfbmFtZS51c2VybmFtZTsgcHcgPSBwYXNzd29yZCB9IGluXG4gIGxldCsgYXV0aF9yZXNwb25zZSA9IEFwaS5yZXF1ZXN0IH5iYXNlX3VybCAobW9kdWxlIEF1dGgpIGF1dGggKCkgaW5cbiAgeyBiYXNlX3VybDsgYXV0aF9yZXNwb25zZSB9XG5cbmxldCBxdWVyeSB0ID1cbiAgbGV0IHRva2VuID0gZ2V0X3Rva2VuIHQgaW5cbiAgbGV0IGJhc2VfdXJsID0gdC5iYXNlX3VybCBpblxuICBKZWxseWZpbl9hcGkucmVxdWVzdCB+YmFzZV91cmwgfnRva2VuXG4iLCJvcGVuIFN0ZFxub3BlbiBCcnJcblxudHlwZSB0YWcgPSBCbG9jayBvZiBpbnQgfCBJbnQgb2YgaW50XG5cbmxldCB0YWdfb2YgdiA9XG4gICgqIHdvdyB3b3cgd293LiBpcyB0aGF0IG9rYXl5aXNoID8qKVxuICBsZXQgb2JqID0gT2JqLnJlcHIgdiBpblxuICBpZiBPYmouaXNfYmxvY2sgb2JqIHRoZW4gQmxvY2sgKE9iai50YWcgb2JqKSBlbHNlIEludCAoT2JqLm1hZ2ljIG9iailcblxubW9kdWxlIHR5cGUgUXVlcmllcyA9IHNpZ1xuICB0eXBlICdhIHF1ZXJ5XG4gIHR5cGUgJ2EgZXZlbnRcbmVuZFxuXG5tb2R1bGUgTWFrZSAoUSA6IFF1ZXJpZXMpID0gc3RydWN0XG4gIHR5cGUgZXJyb3IgPSBbIGBKdiBvZiBKdi5FcnJvci50IHwgYE1zZyBvZiBzdHJpbmcgXVxuICB0eXBlICdhIHF1ZXJ5ID0gJ2EgUS5xdWVyeVxuICB0eXBlICdhIGV2ZW50ID0gJ2EgUS5ldmVudFxuICB0eXBlICdhIHdpdGhfdXVpZCA9IHsgdXVpZCA6IHN0cmluZzsgZGF0YSA6ICdhIH1cbiAgdHlwZSAnYSBtZXNzYWdlID0gQW5zd2VyIG9mICdhIHdpdGhfdXVpZCB8IEV2ZW50IG9mICgnYSBldmVudCAqICdhKVxuICB0eXBlIGxpc3RlbmVyID0gc3RyaW5nXG5cbiAgKCogdG9kbzpjaGVjayB0aGF0IHRoZSB3b3JrZXIgYW5kIHRoZSBjbGllbnQgc2hhcmUgdGhlIHNhbWUgYXBpPyAqKVxuXG4gIG1vZHVsZSBTdGFydF9jbGllbnQgKFAgOiBzaWdcbiAgICB2YWwgdXJsIDogc3RyaW5nXG4gIGVuZCkgPVxuICBzdHJ1Y3RcbiAgICBsZXQgZnV0dXJlcyA6IChzdHJpbmcsIEp2LnQgLT4gdW5pdCkgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgNjRcbiAgICBsZXQgbGlzdGVuZXJzIDogKHRhZywgSnYudCAtPiB1bml0KSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSA2NFxuICAgIGxldCB3b3JrZXIgPSBCcnJfd2Vid29ya2Vycy5Xb3JrZXIuY3JlYXRlIEBAIEpzdHIub2Zfc3RyaW5nIFAudXJsXG5cbiAgICBsZXQgcXVlcnkgKHR5cGUgYSkgKHF1ZXJ5IDogYSBxdWVyeSkgOiAoYSwgZXJyb3IpIEZ1dC5yZXN1bHQgPVxuICAgICAgbGV0IHV1aWQgPSBuZXdfdXVpZF92NCAoKSB8PiBVdWlkbS50b19zdHJpbmcgaW5cbiAgICAgIGxldCBmdXQsIHNldCA9IEZ1dC5jcmVhdGUgKCkgaW5cbiAgICAgIGxldCBzZXQganYgPSBzZXQgQEAgRW5jb2RpbmdzLm9mX2p2IGp2IGluXG4gICAgICBsZXQgcXVlcnkgPSB7IHV1aWQ7IGRhdGEgPSBxdWVyeSB9IHw+IEVuY29kaW5ncy50b19qc3RyIGluXG4gICAgICBCcnJfd2Vid29ya2Vycy5Xb3JrZXIucG9zdCB3b3JrZXIgKEp2Lm9mX2pzdHIgcXVlcnkpO1xuICAgICAgSGFzaHRibC5hZGQgZnV0dXJlcyB1dWlkIHNldDtcbiAgICAgIGZ1dFxuXG4gICAgbGV0IGxpc3RlbiAodHlwZSBhKSAoZXZlbnQgOiBhIGV2ZW50KSB+KGYgOiBhIC0+IHVuaXQpIDogbGlzdGVuZXIgPVxuICAgICAgbGV0IHV1aWQgPSBuZXdfdXVpZF92NCAoKSB8PiBVdWlkbS50b19zdHJpbmcgaW5cbiAgICAgIGxldCBzZXQganYgPSBmIChPYmoubWFnaWMganYpIGluXG4gICAgICBIYXNodGJsLmFkZCBsaXN0ZW5lcnMgKHRhZ19vZiBldmVudCkgc2V0O1xuICAgICAgdXVpZFxuXG4gICAgbGV0IG9uX21lc3NhZ2UgZXYgPVxuICAgICAgbGV0IG1lc3NhZ2UgPSBFdi5hc190eXBlIGV2IGluXG4gICAgICBsZXQgb3BlbiBSZXN1bHQgaW5cbiAgICAgIGlnbm9yZSAoKiBUT0RPOiBoYW5kbGVyIGVycm9ycyAqKVxuICAgICAgQEBcbiAgICAgIGxldCsgbWVzc2FnZSA9XG4gICAgICAgIEJycl9pby5NZXNzYWdlLkV2LmRhdGEgbWVzc2FnZSB8PiBKdi50b19qc3RyIHw+IEVuY29kaW5ncy5vZl9qc3RyXG4gICAgICBpblxuICAgICAgbWF0Y2ggbWVzc2FnZSB3aXRoXG4gICAgICB8IEV2ZW50IChlLCB2KSAtPlxuICAgICAgICAgIEhhc2h0YmwuZmluZF9hbGwgbGlzdGVuZXJzICh0YWdfb2YgZSkgfD4gTGlzdC5pdGVyIH5mOihmdW4gZiAtPiBmIHYpXG4gICAgICB8IEFuc3dlciB7IHV1aWQ7IGRhdGEgfSAtPlxuICAgICAgICAgIGxldCBmID0gSGFzaHRibC5maW5kIGZ1dHVyZXMgdXVpZCBpblxuICAgICAgICAgIEhhc2h0YmwucmVtb3ZlIGZ1dHVyZXMgdXVpZDtcbiAgICAgICAgICBmIGRhdGFcblxuICAgIGxldCBfID1cbiAgICAgIEV2Lmxpc3RlbiBCcnJfaW8uTWVzc2FnZS5Fdi5tZXNzYWdlIG9uX21lc3NhZ2VcbiAgICAgIEBAIEJycl93ZWJ3b3JrZXJzLldvcmtlci5hc190YXJnZXQgd29ya2VyXG4gIGVuZFxuXG4gIG1vZHVsZSB0eXBlIFdvcmtlcl9pbXBsID0gZnVuY3RvciAoKSAtPiBzaWdcbiAgICB2YWwgb25fcXVlcnkgOiAnYSBxdWVyeSAtPiAoJ2EsIGVycm9yKSBGdXQucmVzdWx0XG4gIGVuZFxuXG4gIGxldCBkaXNwYXRjaF9ldmVudCAodHlwZSBhKSAoZSA6IGEgZXZlbnQpICh2IDogYSkgPVxuICAgICgqIGxldCBkYXRhID0gRW5jb2RpbmdzLm1hcnNoYWxfdG9fanN0ciB8PiBKdi5vZl9qc3RyIGluICopXG4gICAgQnJyX3dlYndvcmtlcnMuV29ya2VyLkcucG9zdCAoRW5jb2RpbmdzLnRvX2pzdHIgKEV2ZW50IChlLCB2KSkgfD4gSnYub2ZfanN0cilcblxuICAoKiogRXhlY3V0ZSBXJ3MgYm9keSBhbmQgY29uZmlndXJlIG1lc3NhZ2luZyAqKVxuICBtb2R1bGUgTWFrZV93b3JrZXIgKFcgOiBXb3JrZXJfaW1wbCkgPSBzdHJ1Y3RcbiAgICBvcGVuIEJyclxuICAgIG1vZHVsZSBXID0gVyAoKVxuXG4gICAgbGV0IG9uX21lc3NhZ2UgZXYgPVxuICAgICAgbGV0IG1lc3NhZ2UgPSBFdi5hc190eXBlIGV2IGluXG4gICAgICBsZXQgb3BlbiBSZXN1bHQgaW5cbiAgICAgIGlnbm9yZSAoKiBUT0RPOiBoYW5kbGVyIGVycm9ycyAqKVxuICAgICAgQEBcbiAgICAgIGxldCsgKHsgdXVpZDsgZGF0YSB9IDogJ2EgcXVlcnkgd2l0aF91dWlkKSA9XG4gICAgICAgIEJycl9pby5NZXNzYWdlLkV2LmRhdGEgbWVzc2FnZSB8PiBKdi50b19qc3RyIHw+IEVuY29kaW5ncy5vZl9qc3RyXG4gICAgICBpblxuICAgICAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICAgIGxldCsgcmVzdWx0ID0gVy5vbl9xdWVyeSBkYXRhIGluXG4gICAgICBsZXQgZGF0YSA9IEVuY29kaW5ncy50b19qc3RyIHJlc3VsdCB8PiBKdi5vZl9qc3RyIGluXG4gICAgICBCcnJfd2Vid29ya2Vycy5Xb3JrZXIuRy5wb3N0XG4gICAgICAgIChFbmNvZGluZ3MudG9fanN0ciAoQW5zd2VyIHsgdXVpZDsgZGF0YSB9KSB8PiBKdi5vZl9qc3RyKVxuXG4gICAgbGV0IF8gPSBFdi5saXN0ZW4gQnJyX2lvLk1lc3NhZ2UuRXYubWVzc2FnZSBvbl9tZXNzYWdlIEcudGFyZ2V0XG4gIGVuZFxuZW5kXG4iLCJvcGVuIFN0ZFxuXG5tb2R1bGUgU29ydCA9IHN0cnVjdFxuICB0eXBlIGNyaXRlcmlhID0gRGF0ZV9hZGRlZFxuICB0eXBlIGRpcmVjdGlvbiA9IEFzYyB8IERlc2NcbiAgdHlwZSB0ID0gU29tZSBvZiBjcml0ZXJpYSAqIGRpcmVjdGlvbiB8IFJhbmRvbVxuZW5kXG5cbigqKiBTb21lIHNvcnRzIHJlcXVpcmUgYSBjdXN0b20gb3JkZXJpbmcgd2hpY2ggaXMgZG9uZSB1c2luZyBhIHRhYmxlIG9mIGluZGV4ZXMuIEZvciBleGFtcGxlLCB0byBnZXQgYSByYW5kb20gc29ydCB3ZSBzaW1wbGUgc2h1ZmZsZSBhbiBhcnJheSB3aGljaCBzaXplIGlzIHRoZSBvbmUgb2YgdGhlIHJlc3VsdC4gKilcbm1vZHVsZSBPcmRlciA9IHN0cnVjdFxuICB0eXBlIHQgPSBJbml0aWFsIHwgQ3VzdG9tIG9mIGludCBhcnJheVxuXG4gIGxldCBvZl9zb3J0IH5zaXplID0gZnVuY3Rpb25cbiAgICB8IFNvcnQuUmFuZG9tIC0+XG4gICAgICAgIGxldCB0YmwgPSBBcnJheS5pbml0IHNpemUgfmY6RnVuLmlkIGluXG4gICAgICAgIGxldCAoKSA9IEFycmF5LnNodWZmbGUgdGJsIGluXG4gICAgICAgIEN1c3RvbSB0YmxcbiAgICB8IF8gLT4gSW5pdGlhbFxuXG4gIGxldCBhcHBseSB0IGkgPVxuICAgIG1hdGNoIHQgd2l0aCBJbml0aWFsIC0+IGkgfCBDdXN0b20gYSAtPiAoKiB0b2RvIGNoZWNrIGJvdW5kcyAqKSBhLihpKVxuZW5kXG5cbnR5cGUgJ2Egc2VsZWN0aW9uID0gQWxsIHwgT25seSBvZiAnYSBsaXN0XG50eXBlIGtpbmQgPSBBdWRpb1xudHlwZSBmaWx0ZXIgPSBTZWFyY2ggb2Ygc3RyaW5nXG5cbnR5cGUgcmVxID0ge1xuICBraW5kIDoga2luZDtcbiAgc3JjX3ZpZXdzIDogc3RyaW5nIHNlbGVjdGlvbjtcbiAgc29ydCA6IFNvcnQudDtcbiAgZmlsdGVycyA6IGZpbHRlciBsaXN0O1xufVxuXG50eXBlIHQgPSB7XG4gIHV1aWQgOiBVdWlkbS50O1xuICByZXF1ZXN0IDogcmVxO1xuICBvcmRlciA6IE9yZGVyLnQ7XG4gIHN0YXJ0X29mZnNldCA6IGludDtcbiAgaXRlbV9jb3VudCA6IGludDtcbn1cblxubGV0IGl0ZW1fY291bnQgdCA9IHQuaXRlbV9jb3VudCAtIHQuc3RhcnRfb2Zmc2V0XG5cbmxldCByZXEga2luZCA/KHNyY192aWV3cyA9IEFsbCkgPyhzb3J0ID0gU29ydC4oU29tZSAoRGF0ZV9hZGRlZCwgRGVzYykpKVxuICAgID8oZmlsdGVycyA9IFtdKSAoKSA9XG4gIHsga2luZDsgc3JjX3ZpZXdzOyBzb3J0OyBmaWx0ZXJzIH1cblxubGV0IGhhc2ggcmVxID0gSGFzaHRibC5oYXNoIChyZXEuc3JjX3ZpZXdzLCByZXEuZmlsdGVycylcbiIsIm9wZW4hIFN0ZFxubW9kdWxlIERTID0gRGF0YV9zb3VyY2UuSmVsbHlmaW5cbm1vZHVsZSBBcGkgPSBEUy5BcGlcblxudHlwZSBzZXJ2ZXIgPSBzdHJpbmcgKiBEUy5jb25uZXhpb25cblxubW9kdWxlIFF1ZXJpZXMgPSBzdHJ1Y3RcbiAgdHlwZSAnYSBxdWVyeSA9XG4gICAgfCBBZGRfc2VydmVycyA6IHNlcnZlciBsaXN0IC0+IHVuaXQgcXVlcnlcbiAgICB8IEdldF9hbGwgOiB1bml0IC0+IEFwaS5JdGVtLnQgbGlzdCBxdWVyeVxuICAgIHwgR2V0X2xpYnJhcmllcyA6IHVuaXQgLT4gU3RvcmVzLkl0ZW1zLnQgbGlzdCBxdWVyeVxuICAgIHwgR2V0X3NlcnZlcl9saWJyYXJpZXMgOiBzdHJpbmcgLT4gU3RvcmVzLkl0ZW1zLnQgbGlzdCBxdWVyeVxuICAgIHwgQ3JlYXRlX3ZpZXcgOiBWaWV3LnJlcSAtPiBWaWV3LnQgcXVlcnlcbiAgICB8IEdldCA6IFZpZXcudCAqIGludCBhcnJheSAtPiBTdG9yZXMuSXRlbXMudCBvcHRpb24gYXJyYXkgcXVlcnlcblxuICB0eXBlICdhIGV2ZW50ID0gU2VydmVyc19zdGF0dXNfdXBkYXRlIDogKHN0cmluZyAqIFN5bmMucmVwb3J0KSBldmVudFxuZW5kXG5cbmluY2x1ZGUgV29ya2VyX2FwaS5NYWtlIChRdWVyaWVzKVxuIiwibW9kdWxlIFN0b3JlcyA9IFN0b3Jlc1xubW9kdWxlIFN5bmMgPSBTeW5jXG5tb2R1bGUgVmlldyA9IFZpZXdcbm9wZW4gQnJyZXJcbm9wZW4gQnJyXG5tb2R1bGUgT0kgPSBTdG9yZXMuT3JkZXJyZWRfaXRlbXNfc3RvcmVcbm1vZHVsZSBJID0gU3RvcmVzLkl0ZW1zX3N0b3JlXG5tb2R1bGUgVkYgPSBTdG9yZXMuVmlydHVhbF9mb2xkZXJfc3RvcmVcbm1vZHVsZSBXb3JrZXJfYXBpID0gRGJfd29ya2VyX2FwaVxuXG5tb2R1bGUgSXRlbV9zdG9yZSA9IHN0cnVjdFxuICBpbmNsdWRlIFN0b3Jlcy5JdGVtc19zdG9yZVxuXG4gIG1vZHVsZSBJbmRleCA9IHN0cnVjdFxuICAgIG1vZHVsZSBJZCA9IFN0b3Jlcy5JdGVtc0J5SWRcbiAgICBtb2R1bGUgVHlwZV9OYW1lID0gU3RvcmVzLkl0ZW1zQnlUeXBlQW5kTmFtZVxuICAgIG1vZHVsZSBLaW5kX1ZpZXcgPSBTdG9yZXMuSXRlbXNCeVZpZXdBbmRLaW5kXG4gIGVuZFxuZW5kXG5cbmxldCBvbl91cGdyYWRlX25lZWRlZCBlIHEgPVxuICBsZXQgb3BlbiBCcnJfaW8uSW5kZXhlZF9kYiBpblxuICBsZXQgb2xkX3ZlcnNpb24sIG5ld192ZXJzaW9uID1cbiAgICBsZXQgdiA9IEV2LmFzX3R5cGUgZSBpblxuICAgIEV2ZW50cy5WZXJzaW9uX2NoYW5nZS4ob2xkX3ZlcnNpb24gdiwgbmV3X3ZlcnNpb24gdilcbiAgaW5cbiAgQ29uc29sZS5pbmZvXG4gICAgW1xuICAgICAgXCJVcGdyYWRpbmcgaW5kZXhlZF9kYiBzY2hlbWEgZnJvbSB2ZXJzaW9uXCI7IG9sZF92ZXJzaW9uOyBcInRvXCI7IG5ld192ZXJzaW9uO1xuICAgIF07XG4gIGxldCBkYiA9IFJlcXVlc3QucmVzdWx0IHEgaW5cbiAgbGV0IGxpc3QgPVxuICAgIERhdGFiYXNlLmNyZWF0ZV9vYmplY3Rfc3RvcmUgKG1vZHVsZSBPSSkgfmF1dG9faW5jcmVtZW50OmZhbHNlIGRiXG4gIGluXG4gIGxldCBpdGVtcyA9XG4gICAgRGF0YWJhc2UuY3JlYXRlX29iamVjdF9zdG9yZSAobW9kdWxlIEkpIH5hdXRvX2luY3JlbWVudDpmYWxzZSBkYlxuICBpblxuICBsZXQgdmlydHVhbF9mb2xkZXJzID1cbiAgICBEYXRhYmFzZS5jcmVhdGVfb2JqZWN0X3N0b3JlIChtb2R1bGUgVkYpIH5hdXRvX2luY3JlbWVudDpmYWxzZSBkYlxuICBpblxuICBsZXQgaW5kZXhfZGF0ZV9hZGRlZCA9XG4gICAgSS5jcmVhdGVfaW5kZXggKG1vZHVsZSBTdG9yZXMuSXRlbXNCeURhdGVBZGRlZCkgaXRlbXNcbiAgaW5cbiAgbGV0IF8gPSBJLmNyZWF0ZV9pbmRleCAobW9kdWxlIFN0b3Jlcy5JdGVtc0J5VHlwZUFuZE5hbWUpIGl0ZW1zIGluXG4gIGxldCBfID0gSS5jcmVhdGVfaW5kZXggKG1vZHVsZSBTdG9yZXMuSXRlbXNCeVZpZXdBbmRLaW5kKSBpdGVtcyBpblxuICBsZXQgXyA9IEkuY3JlYXRlX2luZGV4IChtb2R1bGUgU3RvcmVzLkl0ZW1zQnlJZCkgaXRlbXMgaW5cbiAgQ29uc29sZS5pbmZvXG4gICAgWyBcIlN0b3JlcyBjcmVhdGVkOlwiOyBsaXN0OyBpdGVtczsgaW5kZXhfZGF0ZV9hZGRlZDsgdmlydHVhbF9mb2xkZXJzIF1cblxubGV0IHdpdGhfaWRiID92ZXJzaW9uIH5uYW1lIGYgPVxuICBsZXQgb3BlbiBCcnJfaW8uSW5kZXhlZF9kYiBpblxuICBsZXQgZiBfZXYgZGJyID1cbiAgICBsZXQgZGIgPSBSZXF1ZXN0LnJlc3VsdCBkYnIgaW5cbiAgICBmIGRiXG4gIGluXG4gIGdldF9mYWN0b3J5ICgpXG4gIHw+IEZhY3Rvcnkub3Blbicgfm5hbWUgP3ZlcnNpb25cbiAgfD4gT3Blbl9kYl9yZXF1ZXN0Lm9uX3VwZ3JhZGVfbmVlZGVkIH5mOm9uX3VwZ3JhZGVfbmVlZGVkXG4gIHw+IFJlcXVlc3Qub25fc3VjY2VzcyB+ZiB8PiBpZ25vcmVcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBNdWx0aW1hcH0gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcblxubW9kdWxlIHR5cGUgUyA9IHNpZ1xuICB0eXBlIGtleVxuICB0eXBlIHZhbHVlXG4gIHR5cGUgdFxuXG4gIHZhbCBlbXB0eSA6IHRcbiAgKCoqIEVtcHR5IG11bHRpbWFwICopXG5cbiAgdmFsIGlzX2VtcHR5IDogdCAtPiBib29sXG4gICgqKiBFbXB0eSBtdWx0aW1hcD8gKilcblxuICB2YWwgYWRkIDogdCAtPiBrZXkgLT4gdmFsdWUgLT4gdFxuICAoKiogQWRkIGEga2V5L3ZhbHVlIGJpbmRpbmcgKilcblxuICB2YWwgcmVtb3ZlIDogdCAtPiBrZXkgLT4gdmFsdWUgLT4gdFxuICAoKiogUmVtb3ZlIHRoZSBiaW5kaW5nICopXG5cbiAgdmFsIHJlbW92ZV9hbGwgOiB0IC0+IGtleSAtPiB0XG4gICgqKiBSZW1vdmUgdGhlIGtleSBmcm9tIHRoZSBtYXAgKilcblxuICB2YWwgbWVtIDogdCAtPiBrZXkgLT4gYm9vbFxuICAoKiogSXMgdGhlcmUgYSBiaW5kaW5nIGZvciB0aGlzIGtleT8gKilcblxuICB2YWwgZmluZCA6IHQgLT4ga2V5IC0+IHZhbHVlIGxpc3RcbiAgKCoqIExpc3Qgb2YgdmFsdWVzIGZvciB0aGlzIGtleSAqKVxuXG4gIHZhbCBmaW5kX2l0ZXIgOiB0IC0+IGtleSAtPiB2YWx1ZSBpdGVyXG4gICgqKiBJdGVyYXRlIG9uIGJpbmRpbmdzIGZvciB0aGlzIGtleSAqKVxuXG4gIHZhbCBjb3VudCA6IHQgLT4ga2V5IC0+IGludFxuICAoKiogTnVtYmVyIG9mIGJpbmRpbmdzIGZvciB0aGlzIGtleSAqKVxuXG4gIHZhbCBpdGVyIDogdCAtPiAoa2V5IC0+IHZhbHVlIC0+IHVuaXQpIC0+IHVuaXRcbiAgKCoqIEl0ZXJhdGUgb24gYWxsIGtleS92YWx1ZSAqKVxuXG4gIHZhbCBmb2xkIDogdCAtPiAnYSAtPiAoJ2EgLT4ga2V5IC0+IHZhbHVlIC0+ICdhKSAtPiAnYVxuICAoKiogRm9sZCBvbiBhbGwga2V5L3ZhbHVlICopXG5cbiAgdmFsIHNpemUgOiB0IC0+IGludFxuICAoKiogTnVtYmVyIG9mIGtleXMgKilcblxuICB2YWwgdW5pb24gOiB0IC0+IHQgLT4gdFxuICAoKiogVW5pb24gb2YgbXVsdGltYXBzICopXG5cbiAgdmFsIGludGVyIDogdCAtPiB0IC0+IHRcbiAgKCoqIEludGVyc2VjdGlvbiBvZiBtdWx0aW1hcHMgKilcblxuICB2YWwgZGlmZiA6IHQgLT4gdCAtPiB0XG4gICgqKiBEaWZmZXJlbmNlIG9mIG1hcHMsIGllIGJpbmRpbmdzIG9mIHRoZSBmaXJzdCB0aGF0IGFyZSBub3RcbiAgICAgIGluIHRoZSBzZWNvbmQgKilcblxuICB2YWwgZXF1YWwgOiB0IC0+IHQgLT4gYm9vbFxuICAoKiogU2FtZSBtdWx0aW1hcCAqKVxuXG4gIHZhbCBjb21wYXJlIDogdCAtPiB0IC0+IGludFxuICAoKiogVG90YWwgb3JkZXIgb24gbXVsdGltYXBzICopXG5cbiAgdmFsIHN1Ym1hcCA6IHQgLT4gdCAtPiBib29sXG4gICgqKiBbc3VibWFwIG0xIG0yXSBpcyB0cnVlIGlmZiBhbGwgYmluZGluZ3Mgb2YgW20xXSBhcmUgYWxzbyBpbiBbbTJdICopXG5cbiAgdmFsIHRvX2l0ZXIgOiB0IC0+IChrZXkgKiB2YWx1ZSkgaXRlclxuICB2YWwgb2ZfaXRlciA6ID9pbml0OnQgLT4gKGtleSAqIHZhbHVlKSBpdGVyIC0+IHRcbiAgdmFsIGtleXMgOiB0IC0+IGtleSBpdGVyXG5cbiAgdmFsIHZhbHVlcyA6IHQgLT4gdmFsdWUgaXRlclxuICAoKiogU29tZSB2YWx1ZXMgbWF5IG9jY3VyIHNldmVyYWwgdGltZXMgKilcbmVuZFxuXG5tb2R1bGUgdHlwZSBPcmRlcmVkVHlwZSA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgY29tcGFyZSA6IHQgLT4gdCAtPiBpbnRcbmVuZFxuXG5tb2R1bGUgTWFrZSAoSyA6IE9yZGVyZWRUeXBlKSAoViA6IE9yZGVyZWRUeXBlKSA9IHN0cnVjdFxuICB0eXBlIGtleSA9IEsudFxuICB0eXBlIHZhbHVlID0gVi50XG5cbiAgbW9kdWxlIE0gPSBNYXAuTWFrZSAoSylcbiAgbW9kdWxlIFMgPSBTZXQuTWFrZSAoVilcblxuICB0eXBlIHQgPSBTLnQgTS50XG4gICgqKiBNYXAgb2Ygc2V0cyAqKVxuXG4gIGxldCBlbXB0eSA9IE0uZW1wdHlcbiAgbGV0IGlzX2VtcHR5ID0gTS5pc19lbXB0eVxuXG4gIGxldCBhZGQgbSBrIHYgPVxuICAgIGxldCBzZXQgPSB0cnkgTS5maW5kIGsgbSB3aXRoIE5vdF9mb3VuZCAtPiBTLmVtcHR5IGluXG4gICAgTS5hZGQgayAoUy5hZGQgdiBzZXQpIG1cblxuICBsZXQgcmVtb3ZlIG0gayB2ID1cbiAgICB0cnlcbiAgICAgIGxldCBzZXQgPSBNLmZpbmQgayBtIGluXG4gICAgICBsZXQgc2V0JyA9IFMucmVtb3ZlIHYgc2V0IGluXG4gICAgICBpZiBTLmlzX2VtcHR5IHNldCcgdGhlblxuICAgICAgICBNLnJlbW92ZSBrIG1cbiAgICAgIGVsc2VcbiAgICAgICAgTS5hZGQgayBzZXQnIG1cbiAgICB3aXRoIE5vdF9mb3VuZCAtPiBtXG5cbiAgbGV0IHJlbW92ZV9hbGwgbSBrID0gTS5yZW1vdmUgayBtXG4gIGxldCBtZW0gbSBrID0gTS5tZW0gayBtXG5cbiAgbGV0IGZpbmQgbSBrID1cbiAgICB0cnlcbiAgICAgIGxldCBzZXQgPSBNLmZpbmQgayBtIGluXG4gICAgICBTLmVsZW1lbnRzIHNldFxuICAgIHdpdGggTm90X2ZvdW5kIC0+IFtdXG5cbiAgbGV0IGZpbmRfaXRlciBtIGsgZiA9XG4gICAgdHJ5XG4gICAgICBsZXQgc2V0ID0gTS5maW5kIGsgbSBpblxuICAgICAgUy5pdGVyIGYgc2V0XG4gICAgd2l0aCBOb3RfZm91bmQgLT4gKClcblxuICBsZXQgY291bnQgbSBrID1cbiAgICB0cnlcbiAgICAgIGxldCBzZXQgPSBNLmZpbmQgayBtIGluXG4gICAgICBTLmNhcmRpbmFsIHNldFxuICAgIHdpdGggTm90X2ZvdW5kIC0+IDBcblxuICBsZXQgaXRlciBtIGYgPSBNLml0ZXIgKGZ1biBrIHNldCAtPiBTLml0ZXIgKGZ1biB2IC0+IGYgayB2KSBzZXQpIG1cblxuICBsZXQgZm9sZCBtIGFjYyBmID1cbiAgICBNLmZvbGQgKGZ1biBrIHNldCBhY2MgLT4gUy5mb2xkIChmdW4gdiBhY2MgLT4gZiBhY2MgayB2KSBzZXQgYWNjKSBtIGFjY1xuXG4gIGxldCBzaXplIG0gPSBNLmNhcmRpbmFsIG1cblxuICBsZXQgdW5pb24gbTEgbTIgPVxuICAgIE0ubWVyZ2VcbiAgICAgIChmdW4gX2sgdjEgdjIgLT5cbiAgICAgICAgbWF0Y2ggdjEsIHYyIHdpdGhcbiAgICAgICAgfCBOb25lLCBOb25lIC0+IE5vbmVcbiAgICAgICAgfCBTb21lIHNldDEsIFNvbWUgc2V0MiAtPiBTb21lIChTLnVuaW9uIHNldDEgc2V0MilcbiAgICAgICAgfCBTb21lIHNldCwgTm9uZSB8IE5vbmUsIFNvbWUgc2V0IC0+IFNvbWUgc2V0KVxuICAgICAgbTEgbTJcblxuICBsZXQgaW50ZXIgbTEgbTIgPVxuICAgIE0ubWVyZ2VcbiAgICAgIChmdW4gX2sgdjEgdjIgLT5cbiAgICAgICAgbWF0Y2ggdjEsIHYyIHdpdGhcbiAgICAgICAgfCBOb25lLCBfIHwgXywgTm9uZSAtPiBOb25lXG4gICAgICAgIHwgU29tZSBzZXQxLCBTb21lIHNldDIgLT5cbiAgICAgICAgICBsZXQgc2V0ID0gUy5pbnRlciBzZXQxIHNldDIgaW5cbiAgICAgICAgICBpZiBTLmlzX2VtcHR5IHNldCB0aGVuXG4gICAgICAgICAgICBOb25lXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgU29tZSBzZXQpXG4gICAgICBtMSBtMlxuXG4gIGxldCBkaWZmIG0xIG0yID1cbiAgICBNLm1lcmdlXG4gICAgICAoZnVuIF9rIHYxIHYyIC0+XG4gICAgICAgIG1hdGNoIHYxLCB2MiB3aXRoXG4gICAgICAgIHwgTm9uZSwgXyAtPiBOb25lXG4gICAgICAgIHwgU29tZSBzZXQsIE5vbmUgLT4gU29tZSBzZXRcbiAgICAgICAgfCBTb21lIHNldDEsIFNvbWUgc2V0MiAtPlxuICAgICAgICAgIGxldCBzZXQnID0gUy5kaWZmIHNldDEgc2V0MiBpblxuICAgICAgICAgIGlmIFMuaXNfZW1wdHkgc2V0JyB0aGVuXG4gICAgICAgICAgICBOb25lXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgU29tZSBzZXQnKVxuICAgICAgbTEgbTJcblxuICBsZXQgZXF1YWwgbTEgbTIgPSBNLmVxdWFsIFMuZXF1YWwgbTEgbTJcbiAgbGV0IGNvbXBhcmUgbTEgbTIgPSBNLmNvbXBhcmUgUy5jb21wYXJlIG0xIG0yXG5cbiAgbGV0IHN1Ym1hcCBtMSBtMiA9XG4gICAgTS5mb3JfYWxsXG4gICAgICAoZnVuIGsgc2V0MSAtPlxuICAgICAgICB0cnlcbiAgICAgICAgICBsZXQgc2V0MiA9IE0uZmluZCBrIG0yIGluXG4gICAgICAgICAgUy5zdWJzZXQgc2V0MSBzZXQyXG4gICAgICAgIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlKVxuICAgICAgbTFcblxuICBsZXQgdG9faXRlciBtIGsgPSBpdGVyIG0gKGZ1biB4IHkgLT4gayAoeCwgeSkpXG5cbiAgbGV0IG9mX2l0ZXIgPyhpbml0ID0gZW1wdHkpIHNlcSA9XG4gICAgbGV0IG0gPSByZWYgaW5pdCBpblxuICAgIHNlcSAoZnVuIChrLCB2KSAtPiBtIDo9IGFkZCAhbSBrIHYpO1xuICAgICFtXG5cbiAgbGV0IGtleXMgbSBrID0gTS5pdGVyIChmdW4geCBfIC0+IGsgeCkgbVxuICBsZXQgdmFsdWVzIG0gayA9IGl0ZXIgbSAoZnVuIF8gdiAtPiBrIHYpXG5lbmRcblxubW9kdWxlIHR5cGUgQklESVIgPSBzaWdcbiAgdHlwZSB0XG4gIHR5cGUgbGVmdFxuICB0eXBlIHJpZ2h0XG5cbiAgdmFsIGVtcHR5IDogdFxuICB2YWwgaXNfZW1wdHkgOiB0IC0+IGJvb2xcblxuICB2YWwgYWRkIDogdCAtPiBsZWZ0IC0+IHJpZ2h0IC0+IHRcbiAgKCoqIEFkZCBhIGJpbmRpbmcgKGxlZnQscmlnaHQpICopXG5cbiAgdmFsIHJlbW92ZSA6IHQgLT4gbGVmdCAtPiByaWdodCAtPiB0XG4gICgqKiBSZW1vdmUgYSBzcGVjaWZpYyBiaW5kaW5nICopXG5cbiAgdmFsIGNhcmRpbmFsX2xlZnQgOiB0IC0+IGludFxuICAoKiogbnVtYmVyIG9mIGRpc3RpbmN0IGxlZnQga2V5cyAqKVxuXG4gIHZhbCBjYXJkaW5hbF9yaWdodCA6IHQgLT4gaW50XG4gICgqKiBudW1iZXIgb2YgZGlzdGluY3QgcmlnaHQga2V5cyAqKVxuXG4gIHZhbCByZW1vdmVfbGVmdCA6IHQgLT4gbGVmdCAtPiB0XG4gICgqKiBSZW1vdmUgYWxsIGJpbmRpbmdzIGZvciB0aGUgbGVmdCBrZXkgKilcblxuICB2YWwgcmVtb3ZlX3JpZ2h0IDogdCAtPiByaWdodCAtPiB0XG4gICgqKiBSZW1vdmUgYWxsIGJpbmRpbmdzIGZvciB0aGUgcmlnaHQga2V5ICopXG5cbiAgdmFsIG1lbV9sZWZ0IDogdCAtPiBsZWZ0IC0+IGJvb2xcbiAgKCoqIElzIHRoZSBsZWZ0IGtleSBwcmVzZW50IGluIGF0IGxlYXN0IG9uZSBwYWlyPyAqKVxuXG4gIHZhbCBtZW1fcmlnaHQgOiB0IC0+IHJpZ2h0IC0+IGJvb2xcbiAgKCoqIElzIHRoZSByaWdodCBrZXkgcHJlc2VudCBpbiBhdCBsZWFzdCBvbmUgcGFpcj8gKilcblxuICB2YWwgZmluZF9sZWZ0IDogdCAtPiBsZWZ0IC0+IHJpZ2h0IGxpc3RcbiAgKCoqIExpc3Qgb2YgdmFsdWVzIGZvciB0aGlzIGdpdmVuIGxlZnQta2V5LlxuICAgICAgVGhpcyB1c2VkIHRvIHJldHVybiBhbiBpdGVyLCBidXQgcmV0dXJucyBhIGxpc3Qgc2luY2UgMy4xMy4gKilcblxuICB2YWwgZmluZF9sZWZ0X2l0ZXIgOiB0IC0+IGxlZnQgLT4gcmlnaHQgaXRlclxuICAoKiogSXRlcmF0ZSBvbiBiaW5kaW5ncyBmb3IgdGhpcyBnaXZlbiBsZWZ0LWtleVxuICAgICAgQHNpbmNlIDMuMTMgKilcblxuICB2YWwgZmluZF9yaWdodCA6IHQgLT4gcmlnaHQgLT4gbGVmdCBsaXN0XG4gICgqKiBMaXN0IG9mIHZhbHVlcyBmb3IgdGhpcyBnaXZlbiByaWdodC1rZXkuXG4gICAgICBUaGlzIHVzZWQgdG8gcmV0dXJuIGFuIGl0ZXIsIGJ1dCByZXR1cm5zIGEgbGlzdCBzaW5jZSAzLjEzLiAqKVxuXG4gIHZhbCBmaW5kX3JpZ2h0X2l0ZXIgOiB0IC0+IHJpZ2h0IC0+IGxlZnQgaXRlclxuICAoKiogSXRlcmF0ZSBvbiBiaW5kaW5ncyBmb3IgdGhpcyBnaXZlbiBsZWZ0LWtleVxuICAgICAgQHNpbmNlIDMuMTMgKilcblxuICB2YWwgZmluZDFfbGVmdCA6IHQgLT4gbGVmdCAtPiByaWdodCBvcHRpb25cbiAgKCoqIGxpa2UgeyFmaW5kX2xlZnR9IGJ1dCByZXR1cm5zIGF0IG1vc3Qgb25lIHZhbHVlICopXG5cbiAgdmFsIGZpbmQxX3JpZ2h0IDogdCAtPiByaWdodCAtPiBsZWZ0IG9wdGlvblxuICAoKiogbGlrZSB7IWZpbmRfcmlnaHR9IGJ1dCByZXR1cm5zIGF0IG1vc3Qgb25lIHZhbHVlICopXG5cbiAgdmFsIGZvbGQgOiAoJ2EgLT4gbGVmdCAtPiByaWdodCAtPiAnYSkgLT4gJ2EgLT4gdCAtPiAnYVxuICAoKiogRm9sZCBvbiBwYWlycyAqKVxuXG4gIHZhbCBwYWlycyA6IHQgLT4gKGxlZnQgKiByaWdodCkgaXRlclxuICAoKiogSXRlcmF0ZSBvbiBwYWlycyAqKVxuXG4gIHZhbCBhZGRfcGFpcnMgOiB0IC0+IChsZWZ0ICogcmlnaHQpIGl0ZXIgLT4gdFxuICAoKiogQWRkIHBhaXJzICopXG5cbiAgdmFsIGl0ZXJfbGVmdCA6IHQgLT4gbGVmdCBpdGVyXG4gIHZhbCBpdGVyX3JpZ2h0IDogdCAtPiByaWdodCBpdGVyXG5lbmRcblxubGV0IF9mb2xkX2l0ZXIgZiBhY2Mgc2VxID1cbiAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgc2VxIChmdW4geCAtPiBhY2MgOj0gZiAhYWNjIHgpO1xuICAhYWNjXG5cbmxldCBfaGVhZF9pdGVyIHNlcSA9XG4gIGxldCByID0gcmVmIE5vbmUgaW5cbiAgKHRyeVxuICAgICBzZXEgKGZ1biB4IC0+XG4gICAgICAgICByIDo9IFNvbWUgeDtcbiAgICAgICAgIHJhaXNlIEV4aXQpXG4gICB3aXRoIEV4aXQgLT4gKCkpO1xuICAhclxuXG5tb2R1bGUgTWFrZUJpZGlyIChMIDogT3JkZXJlZFR5cGUpIChSIDogT3JkZXJlZFR5cGUpID0gc3RydWN0XG4gIHR5cGUgbGVmdCA9IEwudFxuICB0eXBlIHJpZ2h0ID0gUi50XG5cbiAgbW9kdWxlIE1hcEwgPSBNYWtlIChMKSAoUilcbiAgbW9kdWxlIE1hcFIgPSBNYWtlIChSKSAoTClcblxuICB0eXBlIHQgPSB7IGxlZnQ6IE1hcEwudDsgcmlnaHQ6IE1hcFIudCB9XG5cbiAgbGV0IGVtcHR5ID0geyBsZWZ0ID0gTWFwTC5lbXB0eTsgcmlnaHQgPSBNYXBSLmVtcHR5IH1cbiAgbGV0IGlzX2VtcHR5IG0gPSBNYXBMLmlzX2VtcHR5IG0ubGVmdFxuICBsZXQgYWRkIG0gYSBiID0geyBsZWZ0ID0gTWFwTC5hZGQgbS5sZWZ0IGEgYjsgcmlnaHQgPSBNYXBSLmFkZCBtLnJpZ2h0IGIgYSB9XG5cbiAgbGV0IHJlbW92ZSBtIGEgYiA9XG4gICAgeyBsZWZ0ID0gTWFwTC5yZW1vdmUgbS5sZWZ0IGEgYjsgcmlnaHQgPSBNYXBSLnJlbW92ZSBtLnJpZ2h0IGIgYSB9XG5cbiAgbGV0IGNhcmRpbmFsX2xlZnQgbSA9IE1hcEwuc2l6ZSBtLmxlZnRcbiAgbGV0IGNhcmRpbmFsX3JpZ2h0IG0gPSBNYXBSLnNpemUgbS5yaWdodFxuICBsZXQgZmluZF9sZWZ0IG0gYSA9IE1hcEwuZmluZCBtLmxlZnQgYVxuICBsZXQgZmluZF9sZWZ0X2l0ZXIgbSBhID0gTWFwTC5maW5kX2l0ZXIgbS5sZWZ0IGFcbiAgbGV0IGZpbmRfcmlnaHQgbSBiID0gTWFwUi5maW5kIG0ucmlnaHQgYlxuICBsZXQgZmluZF9yaWdodF9pdGVyIG0gYiA9IE1hcFIuZmluZF9pdGVyIG0ucmlnaHQgYlxuXG4gIGxldCByZW1vdmVfbGVmdCBtIGEgPVxuICAgIF9mb2xkX2l0ZXIgKGZ1biBtIGIgLT4gcmVtb3ZlIG0gYSBiKSBtIChmaW5kX2xlZnRfaXRlciBtIGEpXG5cbiAgbGV0IHJlbW92ZV9yaWdodCBtIGIgPVxuICAgIF9mb2xkX2l0ZXIgKGZ1biBtIGEgLT4gcmVtb3ZlIG0gYSBiKSBtIChmaW5kX3JpZ2h0X2l0ZXIgbSBiKVxuXG4gIGxldCBtZW1fbGVmdCBtIGEgPSBNYXBMLm1lbSBtLmxlZnQgYVxuICBsZXQgbWVtX3JpZ2h0IG0gYiA9IE1hcFIubWVtIG0ucmlnaHQgYlxuICBsZXQgZmluZDFfbGVmdCBtIGEgPSBfaGVhZF9pdGVyIChmaW5kX2xlZnRfaXRlciBtIGEpXG4gIGxldCBmaW5kMV9yaWdodCBtIGIgPSBfaGVhZF9pdGVyIChmaW5kX3JpZ2h0X2l0ZXIgbSBiKVxuICBsZXQgZm9sZCBmIGFjYyBtID0gTWFwTC5mb2xkIG0ubGVmdCBhY2MgZlxuICBsZXQgcGFpcnMgbSA9IE1hcEwudG9faXRlciBtLmxlZnRcbiAgbGV0IGFkZF9wYWlycyBtIHNlcSA9IF9mb2xkX2l0ZXIgKGZ1biBtIChhLCBiKSAtPiBhZGQgbSBhIGIpIG0gc2VxXG4gIGxldCBpdGVyX2xlZnQgbSA9IE1hcEwua2V5cyBtLmxlZnRcbiAgbGV0IGl0ZXJfcmlnaHQgbSA9IE1hcFIua2V5cyBtLnJpZ2h0XG5lbmRcbiIsImluY2x1ZGUgU3RkXG5tb2R1bGUgRFMgPSBEYXRhX3NvdXJjZS5KZWxseWZpblxubW9kdWxlIEVsd2QgPSBCcnJfbHdkLkVsd2RcblxubW9kdWxlIFN0cmluZyA9IHN0cnVjdFxuICBpbmNsdWRlIFN0cmluZ1xuICBtb2R1bGUgTU1hcCA9IENDTXVsdGlNYXAuTWFrZSAoU3RyaW5nKVxuICBtb2R1bGUgSXRlbXNfTXVsdGlNYXAgPSBNTWFwIChEYi5TdG9yZXMuSXRlbXMpXG5lbmRcblxubW9kdWxlIFV0aWxzID0gc3RydWN0XG4gIGxldCB3aXRoX3RpbWluZyA/KG5hbWUgPSBcIlwiKSBmID1cbiAgICBsZXQgdCA9IEJyci5QZXJmb3JtYW5jZS5ub3dfbXMgQnJyLkcucGVyZm9ybWFuY2UgaW5cbiAgICBsZXQgcmVzID0gZiAoKSBpblxuICAgIEJyci5Db25zb2xlLmxvZ1xuICAgICAgWyBuYW1lOyBcInRvb2tcIjsgQnJyLlBlcmZvcm1hbmNlLm5vd19tcyBCcnIuRy5wZXJmb3JtYW5jZSAtLiB0IF07XG4gICAgcmVzXG5lbmRcbiIsIm9wZW4gSW1wb3J0XG5vcGVuIEJycmVyXG5vcGVuIEJycl9sd2RfdWlcblxubW9kdWxlIFR3b19zdGF0ZV9idXR0b24gPSBzdHJ1Y3RcbiAgbGV0IGJhc2UgPSBBdHRycy5jbGFzc2VzIFsgXCJidXR0b25cIiBdXG5cbiAgbGV0IGF0ID0gZnVuY3Rpb25cbiAgICB8IEJ1dHRvbi5PbiAtPiBBdHRycy5jbGFzc2VzIFsgXCJvblwiIF1cbiAgICB8IE9mZiAtPiBBdHRycy5jbGFzc2VzIFsgXCJvZmZcIiBdXG5cbiAgbGV0IG1ha2Ugfm9uX2NsaWNrID1cbiAgICBsZXQgb25fY2xpY2sgPSBCdXR0b24uaGFuZGxlciBCcnIuRXYuY2xpY2sgb25fY2xpY2sgaW5cbiAgICBCdXR0b24udHdvX3N0YXRlIH5iYXNlIH5hdCB+ZXY6WyBgUCBvbl9jbGljayBdXG5lbmRcblxub3BlbiBCcnJlci5CcnJcbm9wZW4hIEJycl9sd2RcblxubW9kdWxlIERyYWdnYWJsZV90YWJsZSA9IHN0cnVjdFxuICBtb2R1bGUgdHlwZSBSb3cgPSBzaWdcbiAgICB0eXBlIHRcblxuICAgIHZhbCByZW5kZXIgOiB0IC0+IEVsLnQgbGlzdFxuICBlbmRcblxuICAoKiogQ29sdW1ucyBkZWNsYXJhdGlvbiAqKVxuICBtb2R1bGUgQ29sdW1ucyA9IHN0cnVjdFxuICAgIHR5cGUgY29sdW1uID0geyBuYW1lIDogc3RyaW5nOyBjc3Nfc2l6ZSA6IHN0cmluZyB9XG4gICAgdHlwZSB0ID0gY29sdW1uIGFycmF5XG5cbiAgICBsZXQgY29sdW1uIG5hbWUgY3NzX3NpemUgPSB7IG5hbWU7IGNzc19zaXplIH1cblxuICAgIGxldCB0b19zdHlsZSB0ID1cbiAgICAgIEFycmF5LnRvX3N0cmluZyB+c2VwOlwiIFwiIChmdW4geyBjc3Nfc2l6ZTsgXyB9IC0+IGNzc19zaXplKSB0XG5cbiAgICBsZXQgdG9faGVhZGVyIHQgPVxuICAgICAgbGV0IGNlbGxzID1cbiAgICAgICAgQXJyYXkuZm9sZF9yaWdodCB0IH5pbml0OltdIH5mOihmdW4geyBuYW1lOyBfIH0gYWNjIC0+XG4gICAgICAgICAgICBFbC5kaXYgWyBFbC50eHQnIG5hbWUgXSA6OiBhY2MpXG4gICAgICBpblxuICAgICAgRWwuZGl2IGNlbGxzXG5cbiAgICBsZXQgc2V0IGVsdCB0ID1cbiAgICAgIGxldCB2YWx1ZSA9IEpzdHIudiBAQCB0b19zdHlsZSB0IGluXG4gICAgICBFbC5zZXRfaW5saW5lX3N0eWxlIEVsLlN0eWxlLmdyaWRfdGVtcGxhdGVfY29sdW1ucyB2YWx1ZSBlbHRcbiAgZW5kXG5cbiAgbGV0IGdyaWQgPSBBdHRycy5jbGFzc2VzIFsgXCJkcmFnZ2FibGUtdGFibGVcIiBdXG5cbiAgbGV0IHJlbmRlcl9yb3cgKHR5cGUgdCkgKG1vZHVsZSBSb3cgOiBSb3cgd2l0aCB0eXBlIHQgPSB0KSB+c2hhcmVkX2RyYWdfZGF0YVxuICAgICAgfm4gKHRfcm93IDogdCBMd2RfdGFibGUucm93KSByb3cgPVxuICAgIGxldCBhZGRfaGludCB+dG9wIGVsID1cbiAgICAgIGxldCBjID0gaWYgdG9wIHRoZW4gXCJob3Zlci10b3BcIiBlbHNlIFwiaG92ZXItYm90dG9tXCIgaW5cbiAgICAgIEVsLnNldF9jbGFzcyAoSnN0ci52IGMpIHRydWUgZWxcbiAgICBpblxuICAgIGxldCByZW1vdmVfaGludHMgZWwgPVxuICAgICAgTGlzdC5pdGVyIFsgXCJob3Zlci10b3BcIjsgXCJob3Zlci1ib3R0b21cIiBdIH5mOihmdW4gYyAtPlxuICAgICAgICAgIEVsLnNldF9jbGFzcyAoSnN0ci52IGMpIGZhbHNlIGVsKVxuICAgIGluXG4gICAgbGV0IGlzX29uX3RvcCBlID1cbiAgICAgIGxldCBtb3VzZV9ldiA9IEV2LkRyYWcuYXNfbW91c2UgQEAgRXYuYXNfdHlwZSBlIGluXG4gICAgICBsZXQgb2Zmc2V0X3kgPSBFdi5Nb3VzZS5vZmZzZXRfeSBtb3VzZV9ldiBpblxuICAgICAgbGV0IHRhcmdldCA9IEV2LmN1cnJlbnRfdGFyZ2V0IGUgfD4gRXYudGFyZ2V0X3RvX2p2IHw+IEVsLm9mX2p2IGluXG4gICAgICBsZXQgc2l6ZV9oID0gRWwuaW5uZXJfaCB0YXJnZXQgaW5cbiAgICAgIG9mZnNldF95IDwuIHNpemVfaCAvLiAyLlxuICAgIGluXG4gICAgbGV0IGdldF9ldl90YXJnZXQgZSA9IEV2LmN1cnJlbnRfdGFyZ2V0IGUgfD4gRXYudGFyZ2V0X3RvX2p2IHw+IEVsLm9mX2p2IGluXG4gICAgTHdkX3NlcS5lbGVtZW50XG4gICAgQEBcbiAgICBsZXQgY2VsbHMgPSBSb3cucmVuZGVyIHJvdyBpblxuICAgIGFzc2VydCAoTGlzdC5sZW5ndGggY2VsbHMgPSBuKTtcbiAgICBsZXQgb25fZHJhZ19zdGFydCA9XG4gICAgICBFbHdkLmhhbmRsZXIgRXYuZHJhZ3N0YXJ0IChmdW4gXyAtPlxuICAgICAgICAgIERvY3VtZW50LmJvZHkgRy5kb2N1bWVudCB8PiBFbC5zZXRfY2xhc3MgKEpzdHIudiBcImRyYWdnaW5nXCIpIHRydWU7XG4gICAgICAgICAgTHdkLnNldCBzaGFyZWRfZHJhZ19kYXRhIEBAIFNvbWUgdF9yb3cpXG4gICAgaW5cbiAgICBsZXQgb25fZHJhZ19vdmVyID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5kcmFnb3ZlciAoZnVuIGUgLT5cbiAgICAgICAgICBsZXQgdGFyZ2V0ID0gZ2V0X2V2X3RhcmdldCBlIGluXG4gICAgICAgICAgcmVtb3ZlX2hpbnRzIHRhcmdldDtcbiAgICAgICAgICBsZXQgdG9wID0gaXNfb25fdG9wIGUgaW5cbiAgICAgICAgICBsZXQgbm9vcCA9XG4gICAgICAgICAgICBsZXQgb3BlbiBPcHRpb24gaW5cbiAgICAgICAgICAgIGxldCsgcm93ID0gTHdkLnBlZWsgc2hhcmVkX2RyYWdfZGF0YSBpblxuICAgICAgICAgICAgbGV0IGVxdWFsX3ByZXYgcm93ID1cbiAgICAgICAgICAgICAgT3B0aW9uLm1hcF9vciB+ZGVmYXVsdDpmYWxzZSAoRXF1YWwucGh5c2ljYWwgcm93KVxuICAgICAgICAgICAgICAgIChMd2RfdGFibGUucHJldiB0X3JvdylcbiAgICAgICAgICAgIGluXG4gICAgICAgICAgICBsZXQgZXF1YWxfbmV4dCByb3cgPVxuICAgICAgICAgICAgICBPcHRpb24ubWFwX29yIH5kZWZhdWx0OmZhbHNlIChFcXVhbC5waHlzaWNhbCByb3cpXG4gICAgICAgICAgICAgICAgKEx3ZF90YWJsZS5uZXh0IHRfcm93KVxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgIEVxdWFsLnBoeXNpY2FsIHRfcm93IHJvd1xuICAgICAgICAgICAgfHwgKHRvcCAmJiBlcXVhbF9wcmV2IHJvdylcbiAgICAgICAgICAgIHx8ICgobm90IHRvcCkgJiYgZXF1YWxfbmV4dCByb3cpXG4gICAgICAgICAgaW5cbiAgICAgICAgICBpZiBub3QgKE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDpmYWxzZSBub29wKSB0aGVuIChcbiAgICAgICAgICAgIGFkZF9oaW50IH50b3AgdGFyZ2V0O1xuICAgICAgICAgICAgKCogPiBJZiB0aGUgbW91c2UgaXMgcmVsZWFzZWQgb3ZlciBhbiBlbGVtZW50IHRoYXQgaXMgYSB2YWxpZCBkcm9wIHRhcmdldCxcbiAgICAgICAgICAgICAgID4gdGhhdCBpcywgb25lIHRoYXQgY2FuY2VsbGVkIHRoZSBsYXN0IGRyYWdlbnRlciBvciBkcmFnb3ZlciBldmVudCxcbiAgICAgICAgICAgICAgID4gdGhlbiB0aGUgZHJvcCB3aWxsIGJlIHN1Y2Nlc3NmdWwuXG4gICAgICAgICAgICAgICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTF9EcmFnX2FuZF9Ecm9wX0FQSS9EcmFnX29wZXJhdGlvbnMjc3BlY2lmeWluZ19kcm9wX3RhcmdldHMgKilcbiAgICAgICAgICAgIEV2LnByZXZlbnRfZGVmYXVsdCBlKSlcbiAgICBpblxuICAgIGxldCBvbl9kcmFnX2xlYXZlID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5kcmFnbGVhdmUgKGZ1biBlIC0+IHJlbW92ZV9oaW50cyBAQCBnZXRfZXZfdGFyZ2V0IGUpXG4gICAgaW5cbiAgICBsZXQgb25fZHJhZ19lbmQgPVxuICAgICAgRWx3ZC5oYW5kbGVyIEV2LmRyYWdlbmQgKGZ1biBfIC0+XG4gICAgICAgICAgRG9jdW1lbnQuYm9keSBHLmRvY3VtZW50IHw+IEVsLnNldF9jbGFzcyAoSnN0ci52IFwiZHJhZ2dpbmdcIikgZmFsc2UpXG4gICAgaW5cbiAgICBsZXQgb25fZHJvcCA9XG4gICAgICBFbHdkLmhhbmRsZXIgRXYuZHJvcCAoZnVuIGUgLT5cbiAgICAgICAgICByZW1vdmVfaGludHMgQEAgZ2V0X2V2X3RhcmdldCBlO1xuICAgICAgICAgIGxldCBfID1cbiAgICAgICAgICAgIGxldCBvcGVuIE9wdGlvbiBpblxuICAgICAgICAgICAgbGV0KiByb3cgPSBMd2QucGVlayBzaGFyZWRfZHJhZ19kYXRhIGluXG4gICAgICAgICAgICBsZXQrIHNldCA9IEx3ZF90YWJsZS5nZXQgcm93IGluXG4gICAgICAgICAgICBpZiBpc19vbl90b3AgZSB0aGVuIGlnbm9yZSBAQCBMd2RfdGFibGUuYmVmb3JlIH5zZXQgdF9yb3dcbiAgICAgICAgICAgIGVsc2UgaWdub3JlIEBAIEx3ZF90YWJsZS5hZnRlciB+c2V0IHRfcm93O1xuICAgICAgICAgICAgTHdkX3RhYmxlLnJlbW92ZSByb3dcbiAgICAgICAgICBpblxuICAgICAgICAgIEx3ZC5zZXQgc2hhcmVkX2RyYWdfZGF0YSBOb25lKVxuICAgIGluXG4gICAgRWx3ZC5kaXZcbiAgICAgIH5hdDpbIGBQIChBdC5kcmFnZ2FibGUgQEAgSnN0ci52IFwidHJ1ZVwiKSBdXG4gICAgICB+ZXY6XG4gICAgICAgIFtcbiAgICAgICAgICBgUCBvbl9kcmFnX3N0YXJ0O1xuICAgICAgICAgIGBQIG9uX2RyYWdfb3ZlcjtcbiAgICAgICAgICBgUCBvbl9kcmFnX2xlYXZlO1xuICAgICAgICAgIGBQIG9uX2RyYWdfZW5kO1xuICAgICAgICAgIGBQIG9uX2Ryb3A7XG4gICAgICAgIF1cbiAgICAgIChMaXN0Lm1hcCBjZWxscyB+ZjooZnVuIGMgLT4gYFAgYykpXG5cbiAgbGV0IG1ha2UgKHR5cGUgdCkgKG1vZHVsZSBSb3cgOiBSb3cgd2l0aCB0eXBlIHQgPSB0KSB+Y29sdW1uc1xuICAgICAgPyh0YWJsZSA6IHQgTHdkX3RhYmxlLnQgPSBMd2RfdGFibGUubWFrZSAoKSlcbiAgICAgID8oc2hhcmVkX2RyYWdfZGF0YSA6IHQgTHdkX3RhYmxlLnJvdyBvcHRpb24gTHdkLnZhciA9IEx3ZC52YXIgTm9uZSkgKCkgPVxuICAgIGxldCBhdCA9IEF0dHJzLnRvX2F0IGdyaWQgaW5cbiAgICBsZXQgdGFibGVfaGVhZGVyID0gQ29sdW1ucy50b19oZWFkZXIgY29sdW1ucyBpblxuICAgIGxldCB0YWJsZV9ib2R5ID1cbiAgICAgIEx3ZF90YWJsZS5tYXBfcmVkdWNlXG4gICAgICAgIChyZW5kZXJfcm93IChtb2R1bGUgUm93KSB+c2hhcmVkX2RyYWdfZGF0YSB+bjooQXJyYXkubGVuZ3RoIGNvbHVtbnMpKVxuICAgICAgICBMd2Rfc2VxLm1vbm9pZCB0YWJsZVxuICAgIGluXG4gICAgbGV0IGVsdCA9XG4gICAgICBsZXQgb3BlbiBMd2RfaW5maXggaW5cbiAgICAgIGxldCQgZWx0ID1cbiAgICAgICAgRWx3ZC5kaXYgfmF0IFsgYFAgdGFibGVfaGVhZGVyOyBgUyAoTHdkX3NlcS5saWZ0IHRhYmxlX2JvZHkpIF1cbiAgICAgIGluXG4gICAgICBsZXQgKCkgPSBDb2x1bW5zLnNldCBlbHQgY29sdW1ucyBpblxuICAgICAgZWx0XG4gICAgaW5cbiAgICAoZWx0LCB0YWJsZSlcbmVuZFxuXG5sZXQgcGxheWxpc3RfY29sdW1ucyA9XG4gIERyYWdnYWJsZV90YWJsZS5Db2x1bW5zLlxuICAgIFt8IGNvbHVtbiBcIkZpcnN0Q09sXCIgXCIyNTZweFwiOyBjb2x1bW4gXCJTZWNvbmRcIiBcIjI1NnB4XCIgfF1cblxubW9kdWxlIFBsYXlsaXN0X3JvdyA9IHN0cnVjdFxuICB0eXBlIHQgPSBzdHJpbmcgKiBzdHJpbmdcblxuICBsZXQgcmVuZGVyIChsLCByKSA9IFsgRWwuZGl2IFsgRWwudHh0JyBsIF07IEVsLmRpdiBbIEVsLnR4dCcgciBdIF1cbmVuZFxuXG5sZXQgbWFrZV90YWJsZSByb3dzID1cbiAgbGV0IHRhYmxlID0gTHdkX3RhYmxlLm1ha2UgKCkgaW5cbiAgTGlzdC5pdGVyIHJvd3MgfmY6KGZ1biBzZXQgLT4gaWdub3JlIEBAIEx3ZF90YWJsZS5hcHBlbmQgfnNldCB0YWJsZSk7XG4gIHRhYmxlXG5cbmxldCBkcmFnZ2FibGVfdGFibGUgP3NoYXJlZF9kcmFnX2RhdGEgKCkgPVxuICBEcmFnZ2FibGVfdGFibGUubWFrZVxuICAgIChtb2R1bGUgUGxheWxpc3Rfcm93KVxuICAgIH5jb2x1bW5zOnBsYXlsaXN0X2NvbHVtbnMgP3NoYXJlZF9kcmFnX2RhdGFcbiAgICB+dGFibGU6XG4gICAgICAobWFrZV90YWJsZVxuICAgICAgICAgW1xuICAgICAgICAgICAoXCJ0b3RvXCIsIFwicjFcIik7XG4gICAgICAgICAgIChcInRhdGFcIiwgXCJyMlwiKTtcbiAgICAgICAgICAgKFwidGl0aVwiLCBcInIzXCIpO1xuICAgICAgICAgICAoXCJ0YVwiLCBcInI0XCIpO1xuICAgICAgICAgICAoXCJ0dVwiLCBcInI1XCIpO1xuICAgICAgICAgXSlcbiAgICAoKVxuIiwib3BlbiBJbXBvcnRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyZXIuQnJyXG5vcGVuISBCcnJfbHdkX3VpXG5vcGVuISBCcnJfbHdkXG5tb2R1bGUgQXBpID0gRFMuQXBpXG5cbigqKiBBcHBsaWNhdGlvbiBwYXJ0ICopXG5cbigqKiBDb2x1bW5zIGRlY2xhcmF0aW9uICopXG5sZXQgY29sdW1ucyAoKSA9XG4gIFRhYmxlLkNvbHVtbnMuXG4gICAgW3xcbiAgICAgIHYgXCJPcmRlclwiIFwiNXJlbVwiIEBAIFsgYFAgKEVsLnR4dCcgXCIjXCIpIF07XG4gICAgICB2IFwiQ292ZXJcIiBcIjVyZW1cIiBAQCBbIGBQIChFbC50eHQnIFwiQ292ZXJcIikgXTtcbiAgICAgIHYgXCJUaXRsZVwiIFwiMWZyXCIgQEAgWyBgUCAoRWwudHh0JyBcIlRpdGxlXCIpIF07XG4gICAgfF1cblxubGV0IG1ha2UgfnJlc2V0X3BsYXlsaXN0IH5mZXRjaCAodmlldyA6IChEYi5WaWV3LnQsICdhKSBGdXQucmVzdWx0IEx3ZC50KSA9XG4gIGxldCBpbWdfdXJsIHNlcnZlcl9pZCBpdGVtX2lkID1cbiAgICBsZXQgc2VydmVycyA9XG4gICAgICAoKiBzaG91bGQgdGhpcyBiZSByZWFjdGl2ZSA/ICopXG4gICAgICBMd2QucGVlayBTZXJ2ZXJzLmNvbm5leGlvbnMgfD4gTHdkX3NlcS50b19saXN0XG4gICAgaW5cbiAgICBsZXQgdXJsID1cbiAgICAgIHRyeVxuICAgICAgICBsZXQgY29ubmV4aW9uIDogRFMuY29ubmV4aW9uID0gTGlzdC5hc3NxIHNlcnZlcl9pZCBzZXJ2ZXJzIGluXG4gICAgICAgIFByaW50Zi5zcHJpbnRmIFwiJXMvSXRlbXMvJXMvSW1hZ2VzL1ByaW1hcnk/d2lkdGg9NTBcIiBjb25uZXhpb24uYmFzZV91cmxcbiAgICAgICAgICBpdGVtX2lkXG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiBcInNlcnZlci1lcnJvci5wbmdcIlxuICAgIGluXG4gICAgQXQuc3JjIChKc3RyLnYgdXJsKVxuICBpblxuICBsZXQgcmVuZGVyIHZpZXcgc3RhcnRfaW5kZXhcbiAgICAgIHtcbiAgICAgICAgRGIuU3RvcmVzLkl0ZW1zLml0ZW0gPVxuICAgICAgICAgIHsgQXBpLkl0ZW0uaWQ7IG5hbWU7IGFsYnVtX2lkOyBzZXJ2ZXJfaWQ7IGltYWdlX2JsdXJfaGFzaGVzOyBfIH07XG4gICAgICAgIF87XG4gICAgICB9ID1cbiAgICBsZXQgcGxheV9mcm9tIF8gPVxuICAgICAgaWdub3JlXG4gICAgICAgIChsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgICAgICAgbGV0KyAodmlldyA6IERiLlZpZXcudCkgPSB2aWV3IGluXG4gICAgICAgICByZXNldF9wbGF5bGlzdFxuICAgICAgICAgICB7IHZpZXcgd2l0aCBzdGFydF9vZmZzZXQgPSB2aWV3LnN0YXJ0X29mZnNldCArIHN0YXJ0X2luZGV4IH0pXG4gICAgaW5cbiAgICBsZXQgcGxheV9vbl9jbGljayA9IEVsd2QuaGFuZGxlciBFdi5jbGljayBwbGF5X2Zyb20gaW5cbiAgICBsZXQgaW1nX3VybCA9XG4gICAgICBtYXRjaCAoaW1hZ2VfYmx1cl9oYXNoZXMsIGFsYnVtX2lkKSB3aXRoXG4gICAgICB8IHsgcHJpbWFyeSA9IE5vbmUgfSwgXyB8IF8sIE5vbmUgLT5cbiAgICAgICAgICBMd2QucmV0dXJuIChBdC5zcmMgKEpzdHIudiBcInRyYWNrLnBuZ1wiKSlcbiAgICAgIHwgXywgU29tZSBpZCAtPiBMd2QucmV0dXJuIChpbWdfdXJsIHNlcnZlcl9pZCBpZClcbiAgICBpblxuICAgIGxldCBzdGF0dXMgPVxuICAgICAgTHdkLm1hcCAoTHdkLmdldCBQbGF5ZXIubm93X3BsYXlpbmcpIH5mOihmdW5jdGlvblxuICAgICAgICB8IFNvbWUgeyBpdGVtID0geyBpZCA9IGl0ZW1faWQ7IF8gfTsgXyB9IHdoZW4gU3RyaW5nLmVxdWFsIGl0ZW1faWQgaWQgLT5cbiAgICAgICAgICAgIEVsLmRpdiB+YXQ6WyBBdC5jbGFzcycgKEpzdHIudiBcInBsYXlpbmdcIikgXSBbIEVsLnR4dCcgXCJ8PlwiIF1cbiAgICAgICAgfCBTb21lIF8gfCBOb25lIC0+IEVsLmRpdiBbIEVsLnR4dCcgKHN0cmluZ19vZl9pbnQgKHN0YXJ0X2luZGV4ICsgMSkpIF0pXG4gICAgaW5cbiAgICBbXG4gICAgICBgUiBzdGF0dXM7XG4gICAgICBgUlxuICAgICAgICAoRWx3ZC5kaXZcbiAgICAgICAgICAgfmV2OlsgYFAgcGxheV9vbl9jbGljayBdXG4gICAgICAgICAgIFsgYFIgKEVsd2QuaW1nIH5hdDpbIGBSIGltZ191cmw7IGBQIChBdC53aWR0aCA1MCkgXSAoKSkgXSk7XG4gICAgICBgUCAoRWwuZGl2IFsgRWwuc3BhbiBbIEVsLnR4dCcgbmFtZSBdIF0pO1xuICAgIF1cbiAgaW5cbiAgbGV0IHBsYWNlaG9sZGVyIF9pID0gW10gaW5cbiAgbGV0IHVpX3RhYmxlID1cbiAgICB7IFRhYmxlLnRhYmxlID0geyBjb2x1bW5zID0gY29sdW1ucyAoKSB9OyByb3dfaGVpZ2h0ID0gRW0gNC4gfVxuICBpblxuICBsZXQgZGF0YV9zb3VyY2UgPVxuICAgIEx3ZC5tYXAgdmlldyB+ZjooZnVuIHZpZXcgLT5cbiAgICAgICAgbGV0IHRvdGFsX2l0ZW1zID0gRnV0Lm1hcCAoUmVzdWx0Lm1hcCBEYi5WaWV3Lml0ZW1fY291bnQpIHZpZXcgaW5cbiAgICAgICAgbGV0IGZldGNoIGkgPVxuICAgICAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgICAgbGV0KiB2aWV3ID0gdmlldyBpblxuICAgICAgICAgIGZldGNoIHZpZXcgaVxuICAgICAgICBpblxuICAgICAgICBsZXQgcmVuZGVyID0gcmVuZGVyIHZpZXcgaW5cbiAgICAgICAgeyBUYWJsZS5WaXJ0dWFsLnRvdGFsX2l0ZW1zOyBmZXRjaDsgcmVuZGVyIH0pXG4gIGluXG4gIFRhYmxlLlZpcnR1YWwubWFrZSB+dWlfdGFibGUgfnBsYWNlaG9sZGVyIGRhdGFfc291cmNlXG4iLCJvcGVuIEltcG9ydFxub3BlbiBCcnJcblxubGV0IGZldGNoIHZpZXcgaSA9IFdvcmtlcl9jbGllbnQuKHF1ZXJ5IChHZXQgKHZpZXcsIGkpKSlcblxubW9kdWxlIFAgPSBQbGF5ZXIuUGxheWJhY2tfY29udHJvbGxlciAoc3RydWN0XG4gIGxldCBmZXRjaCA9IGZldGNoXG5lbmQpXG5cbmxldCBhcHAgX2lkYiA9XG4gIGxldCBwbGF5bGlzdCA9IEJycl9sd2RfdWkuUGVyc2lzdGVudC52YXIgfmtleTpcInRvdG8xXCIgMCBpblxuICBsZXQgb25fY2xpY2sgXyBfID1cbiAgICBMd2Quc2V0IHBsYXlsaXN0IChMd2QucGVlayBwbGF5bGlzdCArIDEpO1xuICAgIExhbmcuc2V0IExhbmcuRW47XG4gICAgQnJyX2x3ZF91aS5CdXR0b24uTmV4dFxuICBpblxuICBsZXQgX2J0bl9taXgsIF8sIF8gPVxuICAgIFVpLlR3b19zdGF0ZV9idXR0b24ubWFrZSB+b25fY2xpY2sgKGZ1biBfIC0+XG4gICAgICAgIFtcbiAgICAgICAgICBgUlxuICAgICAgICAgICAgKEx3ZC5tYXAgKEx3ZC5nZXQgcGxheWxpc3QpIH5mOihmdW4gcGwgLT5cbiAgICAgICAgICAgICAgICAgRWwudHh0JyAoXCJjbGlja1wiIF4gc3RyaW5nX29mX2ludCBwbCkpKTtcbiAgICAgICAgXSlcbiAgaW5cbiAgbGV0IHN0YXR1cyA9XG4gICAgRWx3ZC5kaXZcbiAgICAgIH5hdDpbIGBQIChBdC5zdHlsZSAoSnN0ci52IFwiZ3JpZC1jb2x1bW46MS8tMVwiKSkgXVxuICAgICAgWyBgUCAoRWwuaDEgWyBFbC50eHQnIFwiV2VsY29tZSB0byBPQ0FNSVhcIiBdKTsgYFIgKFNlcnZlcnMudWkgKCkpIF1cbiAgaW5cbiAgbGV0IHBsYXllcl91aSA9XG4gICAgbGV0IHBsYXllciA9IFAubWFrZSAoKSBpblxuICAgIEVsd2QuZGl2IH5hdDpbIGBQIChBdC5zdHlsZSAoSnN0ci52IFwiZ3JpZC1jb2x1bW46MS8tMVwiKSkgXSBbIGBSIHBsYXllciBdXG4gIGluXG4gIGxldCBmX3NlYXJjaCA9XG4gICAgbGV0IG9wZW4gQnJyX2x3ZF91aS5GaWVsZF90ZXh0aW5wdXQgaW5cbiAgICBtYWtlXG4gICAgICB7XG4gICAgICAgIG5hbWUgPSBcInBvdWV0XCI7XG4gICAgICAgIGRlZmF1bHQgPSBOb25lO1xuICAgICAgICBkZXNjID0geyBwbGFjZWhvbGRlciA9IEx3ZC5wdXJlIE5vbmU7IGxhYmVsID0gW10gfTtcbiAgICAgIH1cbiAgaW5cblxuICBsZXQgZmlsdGVycywgZl92YWx1ZSA9XG4gICAgbGV0IGZfbGlicmFyaWVzID1cbiAgICAgIGxldCBvcGVuIEJycl9sd2RfdWkuRmllbGRfY2hlY2tib3hlcyBpblxuICAgICAgbGV0IGNob2ljZXMgPVxuICAgICAgICBMd2Rfc2VxLmZvbGRfbW9ub2lkXG4gICAgICAgICAgKGZ1biAoXywgbCkgLT5cbiAgICAgICAgICAgIGxldCBsIDogRGIuU3RvcmVzLkl0ZW1zLnQgbGlzdCBMd2QudCA9IGwgaW5cbiAgICAgICAgICAgIEx3ZC5tYXAgbCB+ZjooZnVuIGwgLT5cbiAgICAgICAgICAgICAgICBMd2Rfc2VxLnRyYW5zZm9ybV9saXN0IGwgKGZ1biBsIC0+XG4gICAgICAgICAgICAgICAgICAgIEx3ZF9zZXEuZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICBAQCBDaGVjayAobC5pdGVtLmlkLCBbIGBQIChFbC50eHQnIGwuaXRlbS5uYW1lKSBdLCB0cnVlKSkpKVxuICAgICAgICAgIChMd2QucmV0dXJuIEx3ZF9zZXEuZW1wdHksIEx3ZC5tYXAyIH5mOkx3ZF9zZXEuY29uY2F0KVxuICAgICAgICAgIFNlcnZlcnMuc2VydmVyc19saWJyYXJpZXNcbiAgICAgIGluXG4gICAgICBtYWtlIHsgbmFtZSA9IFwicG91ZXRcIjsgZGVzYyA9IEx3ZC5qb2luIGNob2ljZXMgfVxuICAgIGluXG4gICAgbGV0IGZpbHRlcnMgPSBFbHdkLmRpdiBbIGBSIGZfc2VhcmNoLmZpZWxkOyBgUiBmX2xpYnJhcmllcy5maWVsZCBdIGluXG4gICAgKGZpbHRlcnMsIGZfbGlicmFyaWVzLnZhbHVlKVxuICBpblxuICBsZXQgbWFpbl92aWV3ID1cbiAgICBMd2QubWFwMiBmX3ZhbHVlIGZfc2VhcmNoLnZhbHVlIH5mOihmdW4gbCB0IC0+XG4gICAgICAgIGxldCBmaWx0ZXJzID0gT3B0aW9uLm1hcCAoZnVuIHMgLT4gWyBEYi5WaWV3LlNlYXJjaCBzIF0pIHQgaW5cbiAgICAgICAgQ29uc29sZS5sb2dcbiAgICAgICAgICBbXG4gICAgICAgICAgICBcIlVwZGF0aW5nIG1haW4gdmlldzpcIjtcbiAgICAgICAgICAgIEp2Lm9mX29wdGlvbiB+bm9uZTooSnYub2Zfc3RyaW5nIFwiXFxcIlxcXCJcIikgSnYub2Zfc3RyaW5nIHQ7XG4gICAgICAgICAgICBKdi5vZl9saXN0IEp2Lm9mX3N0cmluZyBsO1xuICAgICAgICAgIF07XG4gICAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgIFdvcmtlcl9jbGllbnQucXVlcnlcbiAgICAgICAgICAoQ3JlYXRlX3ZpZXdcbiAgICAgICAgICAgICBEYi5WaWV3LihyZXEgQXVkaW8gfnNyY192aWV3czooT25seSBsKSB+c29ydDpSYW5kb20gP2ZpbHRlcnMgKCkpKSlcbiAgaW5cblxuICBsZXQgbWFpbl9saXN0ID1cbiAgICBVaV9wbGF5bGlzdC5tYWtlIH5yZXNldF9wbGF5bGlzdDpQLnJlc2V0X3BsYXlsaXN0IH5mZXRjaCBtYWluX3ZpZXdcbiAgaW5cbiAgbGV0IG5vd19wbGF5aW5nID1cbiAgICBsZXQgcGxheWxpc3QgPVxuICAgICAgTHdkLm1hcCAoTHdkLmdldCBQbGF5ZXIucGxheXN0YXRlLnBsYXlsaXN0KSB+ZjooZnVuY3Rpb25cbiAgICAgICAgfCBOb25lIC0+IEVsd2Quc3BhbiBbIGBQIChFbC50eHQnIFwiTm90aGluZyBwbGF5aW5nXCIpIF1cbiAgICAgICAgfCBTb21lIHBsYXlsaXN0IC0+XG4gICAgICAgICAgICBVaV9wbGF5bGlzdC5tYWtlIH5yZXNldF9wbGF5bGlzdDpQLnJlc2V0X3BsYXlsaXN0IH5mZXRjaFxuICAgICAgICAgICAgICAoTHdkLnB1cmUgKEZ1dC5vayBwbGF5bGlzdCkpKVxuICAgIGluXG4gICAgKCp0b2RvOiBkbyB3ZSBuZWVkIHRoYXQgam9pbiA/KilcbiAgICBMd2Quam9pbiBwbGF5bGlzdFxuICBpblxuICBFbHdkLmRpdlxuICAgIH5hdDpCcnJfbHdkX3VpLkF0dHJzLih0b19hdCB+aWQ6XCJtYWluLWxheW91dFwiIEBAIGNsYXNzZXMgW10pXG4gICAgW1xuICAgICAgYFIgc3RhdHVzO1xuICAgICAgYFJcbiAgICAgICAgKEVsd2QuZGl2XG4gICAgICAgICAgIH5hdDpbIGBQIChBdC5jbGFzcycgKEpzdHIudiBcIml0ZW0tbGlzdFwiKSkgXVxuICAgICAgICAgICBbIGBSIGZpbHRlcnM7IGBSIG1haW5fbGlzdCBdKTtcbiAgICAgIGBSXG4gICAgICAgIChFbHdkLmRpdiB+YXQ6WyBgUCAoQXQuY2xhc3MnIChKc3RyLnYgXCJwbGF5bGlzdFwiKSkgXSBbIGBSIG5vd19wbGF5aW5nIF0pO1xuICAgICAgYFIgcGxheWVyX3VpO1xuICAgIF1cblxubGV0IGlzX3N0b3JhZ2VfcGVyc2lzdGVudCA9XG4gIEJycl9pby5TdG9yYWdlLihtYW5hZ2VyIEcubmF2aWdhdG9yIHw+IE1hbmFnZXIucGVyc2lzdClcblxubGV0IF8gPVxuICBsZXQgb25fbG9hZCBfID1cbiAgICBDb25zb2xlLmxvZyBbIFwiUGVyc2lzdCA/XCI7IGlzX3N0b3JhZ2VfcGVyc2lzdGVudCBdO1xuICAgIERiLndpdGhfaWRiIH5uYW1lOlwidHJhY2tzXCIgfnZlcnNpb246MSBAQCBmdW4gaWRiIC0+XG4gICAgaWdub3JlXG4gICAgQEBcbiAgICBsZXQgYXBwID0gTHdkLm9ic2VydmUgQEAgYXBwIGlkYiBpblxuICAgIGxldCBvbl9pbnZhbGlkYXRlIF8gPVxuICAgICAgaWdub3JlIEBAIEcucmVxdWVzdF9hbmltYXRpb25fZnJhbWVcbiAgICAgIEBAIGZ1biBfIC0+IGlnbm9yZSBAQCBMd2QucXVpY2tfc2FtcGxlIGFwcFxuICAgIGluXG4gICAgRWwuYXBwZW5kX2NoaWxkcmVuIChEb2N1bWVudC5ib2R5IEcuZG9jdW1lbnQpIFsgTHdkLnF1aWNrX3NhbXBsZSBhcHAgXTtcbiAgICBMd2Quc2V0X29uX2ludmFsaWRhdGUgYXBwIG9uX2ludmFsaWRhdGVcbiAgaW5cbiAgRXYubGlzdGVuIEV2LmRvbV9jb250ZW50X2xvYWRlZCBvbl9sb2FkIChXaW5kb3cuYXNfdGFyZ2V0IEcud2luZG93KVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFbnN1cmUgdGhhdCBbYXRfZXhpdF0gZnVuY3Rpb25zIGFyZSBjYWxsZWQgYXQgdGhlIGVuZCBvZiBldmVyeSBwcm9ncmFtICopXG5cbmxldCBfID0gZG9fYXRfZXhpdCgpXG4iXX0=