// source --> https://www.megasite.com.tr/wp-content/plugins/revslider/public/assets/js/jquery.themepunch.tools.min.js?ver=5.4.5 
/********************************************
	-	THEMEPUNCH TOOLS Ver. 1.0     -
	 Last Update of Tools 27.02.2015
*********************************************/


/*
* @fileOverview TouchSwipe - jQuery Plugin
* @version 1.6.9
*
* @author Matt Bryson http://www.github.com/mattbryson
* @see https://github.com/mattbryson/TouchSwipe-Jquery-Plugin
* @see http://labs.skinkers.com/touchSwipe/
* @see http://plugins.jquery.com/project/touchSwipe
*
* Copyright (c) 2010 Matt Bryson
* Dual licensed under the MIT or GPL Version 2 licenses.
*
*/



(function(a){if(typeof define==="function"&&define.amd&&define.amd.jQuery){define(["jquery"],a)}else{a(jQuery)}}(function(f){var y="1.6.9",p="left",o="right",e="up",x="down",c="in",A="out",m="none",s="auto",l="swipe",t="pinch",B="tap",j="doubletap",b="longtap",z="hold",E="horizontal",u="vertical",i="all",r=10,g="start",k="move",h="end",q="cancel",a="ontouchstart" in window,v=window.navigator.msPointerEnabled&&!window.navigator.pointerEnabled,d=window.navigator.pointerEnabled||window.navigator.msPointerEnabled,C="TouchSwipe";var n={fingers:1,threshold:75,cancelThreshold:null,pinchThreshold:20,maxTimeThreshold:null,fingerReleaseThreshold:250,longTapThreshold:500,doubleTapThreshold:200,swipe:null,swipeLeft:null,swipeRight:null,swipeUp:null,swipeDown:null,swipeStatus:null,pinchIn:null,pinchOut:null,pinchStatus:null,click:null,tap:null,doubleTap:null,longTap:null,hold:null,triggerOnTouchEnd:true,triggerOnTouchLeave:false,allowPageScroll:"auto",fallbackToMouseEvents:true,excludedElements:"label, button, input, select, textarea, a, .noSwipe",preventDefaultEvents:true};f.fn.swipetp=function(H){var G=f(this),F=G.data(C);if(F&&typeof H==="string"){if(F[H]){return F[H].apply(this,Array.prototype.slice.call(arguments,1))}else{f.error("Method "+H+" does not exist on jQuery.swipetp")}}else{if(!F&&(typeof H==="object"||!H)){return w.apply(this,arguments)}}return G};f.fn.swipetp.version=y;f.fn.swipetp.defaults=n;f.fn.swipetp.phases={PHASE_START:g,PHASE_MOVE:k,PHASE_END:h,PHASE_CANCEL:q};f.fn.swipetp.directions={LEFT:p,RIGHT:o,UP:e,DOWN:x,IN:c,OUT:A};f.fn.swipetp.pageScroll={NONE:m,HORIZONTAL:E,VERTICAL:u,AUTO:s};f.fn.swipetp.fingers={ONE:1,TWO:2,THREE:3,ALL:i};function w(F){if(F&&(F.allowPageScroll===undefined&&(F.swipe!==undefined||F.swipeStatus!==undefined))){F.allowPageScroll=m}if(F.click!==undefined&&F.tap===undefined){F.tap=F.click}if(!F){F={}}F=f.extend({},f.fn.swipetp.defaults,F);return this.each(function(){var H=f(this);var G=H.data(C);if(!G){G=new D(this,F);H.data(C,G)}})}function D(a5,aw){var aA=(a||d||!aw.fallbackToMouseEvents),K=aA?(d?(v?"MSPointerDown":"pointerdown"):"touchstart"):"mousedown",az=aA?(d?(v?"MSPointerMove":"pointermove"):"touchmove"):"mousemove",V=aA?(d?(v?"MSPointerUp":"pointerup"):"touchend"):"mouseup",T=aA?null:"mouseleave",aE=(d?(v?"MSPointerCancel":"pointercancel"):"touchcancel");var ah=0,aQ=null,ac=0,a2=0,a0=0,H=1,ar=0,aK=0,N=null;var aS=f(a5);var aa="start";var X=0;var aR=null;var U=0,a3=0,a6=0,ae=0,O=0;var aX=null,ag=null;try{aS.bind(K,aO);aS.bind(aE,ba)}catch(al){f.error("events not supported "+K+","+aE+" on jQuery.swipetp")}this.enable=function(){aS.bind(K,aO);aS.bind(aE,ba);return aS};this.disable=function(){aL();return aS};this.destroy=function(){aL();aS.data(C,null);aS=null};this.option=function(bd,bc){if(aw[bd]!==undefined){if(bc===undefined){return aw[bd]}else{aw[bd]=bc}}else{f.error("Option "+bd+" does not exist on jQuery.swipetp.options")}return null};function aO(be){if(aC()){return}if(f(be.target).closest(aw.excludedElements,aS).length>0){return}var bf=be.originalEvent?be.originalEvent:be;var bd,bg=bf.touches,bc=bg?bg[0]:bf;aa=g;if(bg){X=bg.length}else{be.preventDefault()}ah=0;aQ=null;aK=null;ac=0;a2=0;a0=0;H=1;ar=0;aR=ak();N=ab();S();if(!bg||(X===aw.fingers||aw.fingers===i)||aY()){aj(0,bc);U=au();if(X==2){aj(1,bg[1]);a2=a0=av(aR[0].start,aR[1].start)}if(aw.swipeStatus||aw.pinchStatus){bd=P(bf,aa)}}else{bd=false}if(bd===false){aa=q;P(bf,aa);return bd}else{if(aw.hold){ag=setTimeout(f.proxy(function(){aS.trigger("hold",[bf.target]);if(aw.hold){bd=aw.hold.call(aS,bf,bf.target)}},this),aw.longTapThreshold)}ap(true)}return null}function a4(bf){var bi=bf.originalEvent?bf.originalEvent:bf;if(aa===h||aa===q||an()){return}var be,bj=bi.touches,bd=bj?bj[0]:bi;var bg=aI(bd);a3=au();if(bj){X=bj.length}if(aw.hold){clearTimeout(ag)}aa=k;if(X==2){if(a2==0){aj(1,bj[1]);a2=a0=av(aR[0].start,aR[1].start)}else{aI(bj[1]);a0=av(aR[0].end,aR[1].end);aK=at(aR[0].end,aR[1].end)}H=a8(a2,a0);ar=Math.abs(a2-a0)}if((X===aw.fingers||aw.fingers===i)||!bj||aY()){aQ=aM(bg.start,bg.end);am(bf,aQ);ah=aT(bg.start,bg.end);ac=aN();aJ(aQ,ah);if(aw.swipeStatus||aw.pinchStatus){be=P(bi,aa)}if(!aw.triggerOnTouchEnd||aw.triggerOnTouchLeave){var bc=true;if(aw.triggerOnTouchLeave){var bh=aZ(this);bc=F(bg.end,bh)}if(!aw.triggerOnTouchEnd&&bc){aa=aD(k)}else{if(aw.triggerOnTouchLeave&&!bc){aa=aD(h)}}if(aa==q||aa==h){P(bi,aa)}}}else{aa=q;P(bi,aa)}if(be===false){aa=q;P(bi,aa)}}function M(bc){var bd=bc.originalEvent?bc.originalEvent:bc,be=bd.touches;if(be){if(be.length){G();return true}}if(an()){X=ae}a3=au();ac=aN();if(bb()||!ao()){aa=q;P(bd,aa)}else{if(aw.triggerOnTouchEnd||(aw.triggerOnTouchEnd==false&&aa===k)){bc.preventDefault();aa=h;P(bd,aa)}else{if(!aw.triggerOnTouchEnd&&a7()){aa=h;aG(bd,aa,B)}else{if(aa===k){aa=q;P(bd,aa)}}}}ap(false);return null}function ba(){X=0;a3=0;U=0;a2=0;a0=0;H=1;S();ap(false)}function L(bc){var bd=bc.originalEvent?bc.originalEvent:bc;if(aw.triggerOnTouchLeave){aa=aD(h);P(bd,aa)}}function aL(){aS.unbind(K,aO);aS.unbind(aE,ba);aS.unbind(az,a4);aS.unbind(V,M);if(T){aS.unbind(T,L)}ap(false)}function aD(bg){var bf=bg;var be=aB();var bd=ao();var bc=bb();if(!be||bc){bf=q}else{if(bd&&bg==k&&(!aw.triggerOnTouchEnd||aw.triggerOnTouchLeave)){bf=h}else{if(!bd&&bg==h&&aw.triggerOnTouchLeave){bf=q}}}return bf}function P(be,bc){var bd,bf=be.touches;if((J()||W())||(Q()||aY())){if(J()||W()){bd=aG(be,bc,l)}if((Q()||aY())&&bd!==false){bd=aG(be,bc,t)}}else{if(aH()&&bd!==false){bd=aG(be,bc,j)}else{if(aq()&&bd!==false){bd=aG(be,bc,b)}else{if(ai()&&bd!==false){bd=aG(be,bc,B)}}}}if(bc===q){ba(be)}if(bc===h){if(bf){if(!bf.length){ba(be)}}else{ba(be)}}return bd}function aG(bf,bc,be){var bd;if(be==l){aS.trigger("swipeStatus",[bc,aQ||null,ah||0,ac||0,X,aR]);if(aw.swipeStatus){bd=aw.swipeStatus.call(aS,bf,bc,aQ||null,ah||0,ac||0,X,aR);if(bd===false){return false}}if(bc==h&&aW()){aS.trigger("swipe",[aQ,ah,ac,X,aR]);if(aw.swipe){bd=aw.swipe.call(aS,bf,aQ,ah,ac,X,aR);if(bd===false){return false}}switch(aQ){case p:aS.trigger("swipeLeft",[aQ,ah,ac,X,aR]);if(aw.swipeLeft){bd=aw.swipeLeft.call(aS,bf,aQ,ah,ac,X,aR)}break;case o:aS.trigger("swipeRight",[aQ,ah,ac,X,aR]);if(aw.swipeRight){bd=aw.swipeRight.call(aS,bf,aQ,ah,ac,X,aR)}break;case e:aS.trigger("swipeUp",[aQ,ah,ac,X,aR]);if(aw.swipeUp){bd=aw.swipeUp.call(aS,bf,aQ,ah,ac,X,aR)}break;case x:aS.trigger("swipeDown",[aQ,ah,ac,X,aR]);if(aw.swipeDown){bd=aw.swipeDown.call(aS,bf,aQ,ah,ac,X,aR)}break}}}if(be==t){aS.trigger("pinchStatus",[bc,aK||null,ar||0,ac||0,X,H,aR]);if(aw.pinchStatus){bd=aw.pinchStatus.call(aS,bf,bc,aK||null,ar||0,ac||0,X,H,aR);if(bd===false){return false}}if(bc==h&&a9()){switch(aK){case c:aS.trigger("pinchIn",[aK||null,ar||0,ac||0,X,H,aR]);if(aw.pinchIn){bd=aw.pinchIn.call(aS,bf,aK||null,ar||0,ac||0,X,H,aR)}break;case A:aS.trigger("pinchOut",[aK||null,ar||0,ac||0,X,H,aR]);if(aw.pinchOut){bd=aw.pinchOut.call(aS,bf,aK||null,ar||0,ac||0,X,H,aR)}break}}}if(be==B){if(bc===q||bc===h){clearTimeout(aX);clearTimeout(ag);if(Z()&&!I()){O=au();aX=setTimeout(f.proxy(function(){O=null;aS.trigger("tap",[bf.target]);if(aw.tap){bd=aw.tap.call(aS,bf,bf.target)}},this),aw.doubleTapThreshold)}else{O=null;aS.trigger("tap",[bf.target]);if(aw.tap){bd=aw.tap.call(aS,bf,bf.target)}}}}else{if(be==j){if(bc===q||bc===h){clearTimeout(aX);O=null;aS.trigger("doubletap",[bf.target]);if(aw.doubleTap){bd=aw.doubleTap.call(aS,bf,bf.target)}}}else{if(be==b){if(bc===q||bc===h){clearTimeout(aX);O=null;aS.trigger("longtap",[bf.target]);if(aw.longTap){bd=aw.longTap.call(aS,bf,bf.target)}}}}}return bd}function ao(){var bc=true;if(aw.threshold!==null){bc=ah>=aw.threshold}return bc}function bb(){var bc=false;if(aw.cancelThreshold!==null&&aQ!==null){bc=(aU(aQ)-ah)>=aw.cancelThreshold}return bc}function af(){if(aw.pinchThreshold!==null){return ar>=aw.pinchThreshold}return true}function aB(){var bc;if(aw.maxTimeThreshold){if(ac>=aw.maxTimeThreshold){bc=false}else{bc=true}}else{bc=true}return bc}function am(bc,bd){if(aw.preventDefaultEvents===false){return}if(aw.allowPageScroll===m){bc.preventDefault()}else{var be=aw.allowPageScroll===s;switch(bd){case p:if((aw.swipeLeft&&be)||(!be&&aw.allowPageScroll!=E)){bc.preventDefault()}break;case o:if((aw.swipeRight&&be)||(!be&&aw.allowPageScroll!=E)){bc.preventDefault()}break;case e:if((aw.swipeUp&&be)||(!be&&aw.allowPageScroll!=u)){bc.preventDefault()}break;case x:if((aw.swipeDown&&be)||(!be&&aw.allowPageScroll!=u)){bc.preventDefault()}break}}}function a9(){var bd=aP();var bc=Y();var be=af();return bd&&bc&&be}function aY(){return !!(aw.pinchStatus||aw.pinchIn||aw.pinchOut)}function Q(){return !!(a9()&&aY())}function aW(){var bf=aB();var bh=ao();var be=aP();var bc=Y();var bd=bb();var bg=!bd&&bc&&be&&bh&&bf;return bg}function W(){return !!(aw.swipe||aw.swipeStatus||aw.swipeLeft||aw.swipeRight||aw.swipeUp||aw.swipeDown)}function J(){return !!(aW()&&W())}function aP(){return((X===aw.fingers||aw.fingers===i)||!a)}function Y(){return aR[0].end.x!==0}function a7(){return !!(aw.tap)}function Z(){return !!(aw.doubleTap)}function aV(){return !!(aw.longTap)}function R(){if(O==null){return false}var bc=au();return(Z()&&((bc-O)<=aw.doubleTapThreshold))}function I(){return R()}function ay(){return((X===1||!a)&&(isNaN(ah)||ah<aw.threshold))}function a1(){return((ac>aw.longTapThreshold)&&(ah<r))}function ai(){return !!(ay()&&a7())}function aH(){return !!(R()&&Z())}function aq(){return !!(a1()&&aV())}function G(){a6=au();ae=event.touches.length+1}function S(){a6=0;ae=0}function an(){var bc=false;if(a6){var bd=au()-a6;if(bd<=aw.fingerReleaseThreshold){bc=true}}return bc}function aC(){return !!(aS.data(C+"_intouch")===true)}function ap(bc){if(bc===true){aS.bind(az,a4);aS.bind(V,M);if(T){aS.bind(T,L)}}else{aS.unbind(az,a4,false);aS.unbind(V,M,false);if(T){aS.unbind(T,L,false)}}aS.data(C+"_intouch",bc===true)}function aj(bd,bc){var be=bc.identifier!==undefined?bc.identifier:0;aR[bd].identifier=be;aR[bd].start.x=aR[bd].end.x=bc.pageX||bc.clientX;aR[bd].start.y=aR[bd].end.y=bc.pageY||bc.clientY;return aR[bd]}function aI(bc){var be=bc.identifier!==undefined?bc.identifier:0;var bd=ad(be);bd.end.x=bc.pageX||bc.clientX;bd.end.y=bc.pageY||bc.clientY;return bd}function ad(bd){for(var bc=0;bc<aR.length;bc++){if(aR[bc].identifier==bd){return aR[bc]}}}function ak(){var bc=[];for(var bd=0;bd<=5;bd++){bc.push({start:{x:0,y:0},end:{x:0,y:0},identifier:0})}return bc}function aJ(bc,bd){bd=Math.max(bd,aU(bc));N[bc].distance=bd}function aU(bc){if(N[bc]){return N[bc].distance}return undefined}function ab(){var bc={};bc[p]=ax(p);bc[o]=ax(o);bc[e]=ax(e);bc[x]=ax(x);return bc}function ax(bc){return{direction:bc,distance:0}}function aN(){return a3-U}function av(bf,be){var bd=Math.abs(bf.x-be.x);var bc=Math.abs(bf.y-be.y);return Math.round(Math.sqrt(bd*bd+bc*bc))}function a8(bc,bd){var be=(bd/bc)*1;return be.toFixed(2)}function at(){if(H<1){return A}else{return c}}function aT(bd,bc){return Math.round(Math.sqrt(Math.pow(bc.x-bd.x,2)+Math.pow(bc.y-bd.y,2)))}function aF(bf,bd){var bc=bf.x-bd.x;var bh=bd.y-bf.y;var be=Math.atan2(bh,bc);var bg=Math.round(be*180/Math.PI);if(bg<0){bg=360-Math.abs(bg)}return bg}function aM(bd,bc){var be=aF(bd,bc);if((be<=45)&&(be>=0)){return p}else{if((be<=360)&&(be>=315)){return p}else{if((be>=135)&&(be<=225)){return o}else{if((be>45)&&(be<135)){return x}else{return e}}}}}function au(){var bc=new Date();return bc.getTime()}function aZ(bc){bc=f(bc);var be=bc.offset();var bd={left:be.left,right:be.left+bc.outerWidth(),top:be.top,bottom:be.top+bc.outerHeight()};return bd}function F(bc,bd){return(bc.x>bd.left&&bc.x<bd.right&&bc.y>bd.top&&bc.y<bd.bottom)}}}));

if(typeof(console) === 'undefined') {
    var console = {};
    console.log = console.error = console.info = console.debug = console.warn = console.trace = console.dir = console.dirxml = console.group = console.groupEnd = console.time = console.timeEnd = console.assert = console.profile = console.groupCollapsed = function() {};
}

if (window.tplogs==true)
	try {
		console.groupCollapsed("ThemePunch GreenSocks Logs");
	} catch(e) { }


var oldgs = window.GreenSockGlobals;
	oldgs_queue = window._gsQueue;
	
var punchgs = window.GreenSockGlobals = {};

if (window.tplogs==true)
	try {
		console.info("Build GreenSock SandBox for ThemePunch Plugins");
		console.info("GreenSock TweenLite Engine Initalised by ThemePunch Plugin");
	} catch(e) {}


/* TWEEN LITE */
/*!
 * VERSION: 1.19.1
 * DATE: 2017-01-17
 * UPDATES AND DOCS AT: http://greensock.com
 *
 * @license Copyright (c) 2008-2017, GreenSock. All rights reserved.
 * This work is subject to the terms at http://greensock.com/standard-license or for
 * Club GreenSock members, the software agreement that was issued with your membership.
 * 
 * @author: Jack Doyle, jack@greensock.com
 */
!function(a,b){"use strict";var c={},d=a.document,e=a.GreenSockGlobals=a.GreenSockGlobals||a;if(!e.TweenLite){var f,g,h,i,j,k=function(a){var b,c=a.split("."),d=e;for(b=0;b<c.length;b++)d[c[b]]=d=d[c[b]]||{};return d},l=k("com.greensock"),m=1e-10,n=function(a){var b,c=[],d=a.length;for(b=0;b!==d;c.push(a[b++]));return c},o=function(){},p=function(){var a=Object.prototype.toString,b=a.call([]);return function(c){return null!=c&&(c instanceof Array||"object"==typeof c&&!!c.push&&a.call(c)===b)}}(),q={},r=function(d,f,g,h){this.sc=q[d]?q[d].sc:[],q[d]=this,this.gsClass=null,this.func=g;var i=[];this.check=function(j){for(var l,m,n,o,p,s=f.length,t=s;--s>-1;)(l=q[f[s]]||new r(f[s],[])).gsClass?(i[s]=l.gsClass,t--):j&&l.sc.push(this);if(0===t&&g){if(m=("com.greensock."+d).split("."),n=m.pop(),o=k(m.join("."))[n]=this.gsClass=g.apply(g,i),h)if(e[n]=c[n]=o,p="undefined"!=typeof module&&module.exports,!p&&"function"==typeof define&&define.amd)define((a.GreenSockAMDPath?a.GreenSockAMDPath+"/":"")+d.split(".").pop(),[],function(){return o});else if(p)if(d===b){module.exports=c[b]=o;for(s in c)o[s]=c[s]}else c[b]&&(c[b][n]=o);for(s=0;s<this.sc.length;s++)this.sc[s].check()}},this.check(!0)},s=a._gsDefine=function(a,b,c,d){return new r(a,b,c,d)},t=l._class=function(a,b,c){return b=b||function(){},s(a,[],function(){return b},c),b};s.globals=e;var u=[0,0,1,1],v=t("easing.Ease",function(a,b,c,d){this._func=a,this._type=c||0,this._power=d||0,this._params=b?u.concat(b):u},!0),w=v.map={},x=v.register=function(a,b,c,d){for(var e,f,g,h,i=b.split(","),j=i.length,k=(c||"easeIn,easeOut,easeInOut").split(",");--j>-1;)for(f=i[j],e=d?t("easing."+f,null,!0):l.easing[f]||{},g=k.length;--g>-1;)h=k[g],w[f+"."+h]=w[h+f]=e[h]=a.getRatio?a:a[h]||new a};for(h=v.prototype,h._calcEnd=!1,h.getRatio=function(a){if(this._func)return this._params[0]=a,this._func.apply(null,this._params);var b=this._type,c=this._power,d=1===b?1-a:2===b?a:.5>a?2*a:2*(1-a);return 1===c?d*=d:2===c?d*=d*d:3===c?d*=d*d*d:4===c&&(d*=d*d*d*d),1===b?1-d:2===b?d:.5>a?d/2:1-d/2},f=["Linear","Quad","Cubic","Quart","Quint,Strong"],g=f.length;--g>-1;)h=f[g]+",Power"+g,x(new v(null,null,1,g),h,"easeOut",!0),x(new v(null,null,2,g),h,"easeIn"+(0===g?",easeNone":"")),x(new v(null,null,3,g),h,"easeInOut");w.linear=l.easing.Linear.easeIn,w.swing=l.easing.Quad.easeInOut;var y=t("events.EventDispatcher",function(a){this._listeners={},this._eventTarget=a||this});h=y.prototype,h.addEventListener=function(a,b,c,d,e){e=e||0;var f,g,h=this._listeners[a],k=0;for(this!==i||j||i.wake(),null==h&&(this._listeners[a]=h=[]),g=h.length;--g>-1;)f=h[g],f.c===b&&f.s===c?h.splice(g,1):0===k&&f.pr<e&&(k=g+1);h.splice(k,0,{c:b,s:c,up:d,pr:e})},h.removeEventListener=function(a,b){var c,d=this._listeners[a];if(d)for(c=d.length;--c>-1;)if(d[c].c===b)return void d.splice(c,1)},h.dispatchEvent=function(a){var b,c,d,e=this._listeners[a];if(e)for(b=e.length,b>1&&(e=e.slice(0)),c=this._eventTarget;--b>-1;)d=e[b],d&&(d.up?d.c.call(d.s||c,{type:a,target:c}):d.c.call(d.s||c))};var z=a.requestAnimationFrame,A=a.cancelAnimationFrame,B=Date.now||function(){return(new Date).getTime()},C=B();for(f=["ms","moz","webkit","o"],g=f.length;--g>-1&&!z;)z=a[f[g]+"RequestAnimationFrame"],A=a[f[g]+"CancelAnimationFrame"]||a[f[g]+"CancelRequestAnimationFrame"];t("Ticker",function(a,b){var c,e,f,g,h,k=this,l=B(),n=b!==!1&&z?"auto":!1,p=500,q=33,r="tick",s=function(a){var b,d,i=B()-C;i>p&&(l+=i-q),C+=i,k.time=(C-l)/1e3,b=k.time-h,(!c||b>0||a===!0)&&(k.frame++,h+=b+(b>=g?.004:g-b),d=!0),a!==!0&&(f=e(s)),d&&k.dispatchEvent(r)};y.call(k),k.time=k.frame=0,k.tick=function(){s(!0)},k.lagSmoothing=function(a,b){p=a||1/m,q=Math.min(b,p,0)},k.sleep=function(){null!=f&&(n&&A?A(f):clearTimeout(f),e=o,f=null,k===i&&(j=!1))},k.wake=function(a){null!==f?k.sleep():a?l+=-C+(C=B()):k.frame>10&&(C=B()-p+5),e=0===c?o:n&&z?z:function(a){return setTimeout(a,1e3*(h-k.time)+1|0)},k===i&&(j=!0),s(2)},k.fps=function(a){return arguments.length?(c=a,g=1/(c||60),h=this.time+g,void k.wake()):c},k.useRAF=function(a){return arguments.length?(k.sleep(),n=a,void k.fps(c)):n},k.fps(a),setTimeout(function(){"auto"===n&&k.frame<5&&"hidden"!==d.visibilityState&&k.useRAF(!1)},1500)}),h=l.Ticker.prototype=new l.events.EventDispatcher,h.constructor=l.Ticker;var D=t("core.Animation",function(a,b){if(this.vars=b=b||{},this._duration=this._totalDuration=a||0,this._delay=Number(b.delay)||0,this._timeScale=1,this._active=b.immediateRender===!0,this.data=b.data,this._reversed=b.reversed===!0,W){j||i.wake();var c=this.vars.useFrames?V:W;c.add(this,c._time),this.vars.paused&&this.paused(!0)}});i=D.ticker=new l.Ticker,h=D.prototype,h._dirty=h._gc=h._initted=h._paused=!1,h._totalTime=h._time=0,h._rawPrevTime=-1,h._next=h._last=h._onUpdate=h._timeline=h.timeline=null,h._paused=!1;var E=function(){j&&B()-C>2e3&&i.wake(),setTimeout(E,2e3)};E(),h.play=function(a,b){return null!=a&&this.seek(a,b),this.reversed(!1).paused(!1)},h.pause=function(a,b){return null!=a&&this.seek(a,b),this.paused(!0)},h.resume=function(a,b){return null!=a&&this.seek(a,b),this.paused(!1)},h.seek=function(a,b){return this.totalTime(Number(a),b!==!1)},h.restart=function(a,b){return this.reversed(!1).paused(!1).totalTime(a?-this._delay:0,b!==!1,!0)},h.reverse=function(a,b){return null!=a&&this.seek(a||this.totalDuration(),b),this.reversed(!0).paused(!1)},h.render=function(a,b,c){},h.invalidate=function(){return this._time=this._totalTime=0,this._initted=this._gc=!1,this._rawPrevTime=-1,(this._gc||!this.timeline)&&this._enabled(!0),this},h.isActive=function(){var a,b=this._timeline,c=this._startTime;return!b||!this._gc&&!this._paused&&b.isActive()&&(a=b.rawTime(!0))>=c&&a<c+this.totalDuration()/this._timeScale},h._enabled=function(a,b){return j||i.wake(),this._gc=!a,this._active=this.isActive(),b!==!0&&(a&&!this.timeline?this._timeline.add(this,this._startTime-this._delay):!a&&this.timeline&&this._timeline._remove(this,!0)),!1},h._kill=function(a,b){return this._enabled(!1,!1)},h.kill=function(a,b){return this._kill(a,b),this},h._uncache=function(a){for(var b=a?this:this.timeline;b;)b._dirty=!0,b=b.timeline;return this},h._swapSelfInParams=function(a){for(var b=a.length,c=a.concat();--b>-1;)"{self}"===a[b]&&(c[b]=this);return c},h._callback=function(a){var b=this.vars,c=b[a],d=b[a+"Params"],e=b[a+"Scope"]||b.callbackScope||this,f=d?d.length:0;switch(f){case 0:c.call(e);break;case 1:c.call(e,d[0]);break;case 2:c.call(e,d[0],d[1]);break;default:c.apply(e,d)}},h.eventCallback=function(a,b,c,d){if("on"===(a||"").substr(0,2)){var e=this.vars;if(1===arguments.length)return e[a];null==b?delete e[a]:(e[a]=b,e[a+"Params"]=p(c)&&-1!==c.join("").indexOf("{self}")?this._swapSelfInParams(c):c,e[a+"Scope"]=d),"onUpdate"===a&&(this._onUpdate=b)}return this},h.delay=function(a){return arguments.length?(this._timeline.smoothChildTiming&&this.startTime(this._startTime+a-this._delay),this._delay=a,this):this._delay},h.duration=function(a){return arguments.length?(this._duration=this._totalDuration=a,this._uncache(!0),this._timeline.smoothChildTiming&&this._time>0&&this._time<this._duration&&0!==a&&this.totalTime(this._totalTime*(a/this._duration),!0),this):(this._dirty=!1,this._duration)},h.totalDuration=function(a){return this._dirty=!1,arguments.length?this.duration(a):this._totalDuration},h.time=function(a,b){return arguments.length?(this._dirty&&this.totalDuration(),this.totalTime(a>this._duration?this._duration:a,b)):this._time},h.totalTime=function(a,b,c){if(j||i.wake(),!arguments.length)return this._totalTime;if(this._timeline){if(0>a&&!c&&(a+=this.totalDuration()),this._timeline.smoothChildTiming){this._dirty&&this.totalDuration();var d=this._totalDuration,e=this._timeline;if(a>d&&!c&&(a=d),this._startTime=(this._paused?this._pauseTime:e._time)-(this._reversed?d-a:a)/this._timeScale,e._dirty||this._uncache(!1),e._timeline)for(;e._timeline;)e._timeline._time!==(e._startTime+e._totalTime)/e._timeScale&&e.totalTime(e._totalTime,!0),e=e._timeline}this._gc&&this._enabled(!0,!1),(this._totalTime!==a||0===this._duration)&&(J.length&&Y(),this.render(a,b,!1),J.length&&Y())}return this},h.progress=h.totalProgress=function(a,b){var c=this.duration();return arguments.length?this.totalTime(c*a,b):c?this._time/c:this.ratio},h.startTime=function(a){return arguments.length?(a!==this._startTime&&(this._startTime=a,this.timeline&&this.timeline._sortChildren&&this.timeline.add(this,a-this._delay)),this):this._startTime},h.endTime=function(a){return this._startTime+(0!=a?this.totalDuration():this.duration())/this._timeScale},h.timeScale=function(a){if(!arguments.length)return this._timeScale;if(a=a||m,this._timeline&&this._timeline.smoothChildTiming){var b=this._pauseTime,c=b||0===b?b:this._timeline.totalTime();this._startTime=c-(c-this._startTime)*this._timeScale/a}return this._timeScale=a,this._uncache(!1)},h.reversed=function(a){return arguments.length?(a!=this._reversed&&(this._reversed=a,this.totalTime(this._timeline&&!this._timeline.smoothChildTiming?this.totalDuration()-this._totalTime:this._totalTime,!0)),this):this._reversed},h.paused=function(a){if(!arguments.length)return this._paused;var b,c,d=this._timeline;return a!=this._paused&&d&&(j||a||i.wake(),b=d.rawTime(),c=b-this._pauseTime,!a&&d.smoothChildTiming&&(this._startTime+=c,this._uncache(!1)),this._pauseTime=a?b:null,this._paused=a,this._active=this.isActive(),!a&&0!==c&&this._initted&&this.duration()&&(b=d.smoothChildTiming?this._totalTime:(b-this._startTime)/this._timeScale,this.render(b,b===this._totalTime,!0))),this._gc&&!a&&this._enabled(!0,!1),this};var F=t("core.SimpleTimeline",function(a){D.call(this,0,a),this.autoRemoveChildren=this.smoothChildTiming=!0});h=F.prototype=new D,h.constructor=F,h.kill()._gc=!1,h._first=h._last=h._recent=null,h._sortChildren=!1,h.add=h.insert=function(a,b,c,d){var e,f;if(a._startTime=Number(b||0)+a._delay,a._paused&&this!==a._timeline&&(a._pauseTime=a._startTime+(this.rawTime()-a._startTime)/a._timeScale),a.timeline&&a.timeline._remove(a,!0),a.timeline=a._timeline=this,a._gc&&a._enabled(!0,!0),e=this._last,this._sortChildren)for(f=a._startTime;e&&e._startTime>f;)e=e._prev;return e?(a._next=e._next,e._next=a):(a._next=this._first,this._first=a),a._next?a._next._prev=a:this._last=a,a._prev=e,this._recent=a,this._timeline&&this._uncache(!0),this},h._remove=function(a,b){return a.timeline===this&&(b||a._enabled(!1,!0),a._prev?a._prev._next=a._next:this._first===a&&(this._first=a._next),a._next?a._next._prev=a._prev:this._last===a&&(this._last=a._prev),a._next=a._prev=a.timeline=null,a===this._recent&&(this._recent=this._last),this._timeline&&this._uncache(!0)),this},h.render=function(a,b,c){var d,e=this._first;for(this._totalTime=this._time=this._rawPrevTime=a;e;)d=e._next,(e._active||a>=e._startTime&&!e._paused)&&(e._reversed?e.render((e._dirty?e.totalDuration():e._totalDuration)-(a-e._startTime)*e._timeScale,b,c):e.render((a-e._startTime)*e._timeScale,b,c)),e=d},h.rawTime=function(){return j||i.wake(),this._totalTime};var G=t("TweenLite",function(b,c,d){if(D.call(this,c,d),this.render=G.prototype.render,null==b)throw"Cannot tween a null target.";this.target=b="string"!=typeof b?b:G.selector(b)||b;var e,f,g,h=b.jquery||b.length&&b!==a&&b[0]&&(b[0]===a||b[0].nodeType&&b[0].style&&!b.nodeType),i=this.vars.overwrite;if(this._overwrite=i=null==i?U[G.defaultOverwrite]:"number"==typeof i?i>>0:U[i],(h||b instanceof Array||b.push&&p(b))&&"number"!=typeof b[0])for(this._targets=g=n(b),this._propLookup=[],this._siblings=[],e=0;e<g.length;e++)f=g[e],f?"string"!=typeof f?f.length&&f!==a&&f[0]&&(f[0]===a||f[0].nodeType&&f[0].style&&!f.nodeType)?(g.splice(e--,1),this._targets=g=g.concat(n(f))):(this._siblings[e]=Z(f,this,!1),1===i&&this._siblings[e].length>1&&_(f,this,null,1,this._siblings[e])):(f=g[e--]=G.selector(f),"string"==typeof f&&g.splice(e+1,1)):g.splice(e--,1);else this._propLookup={},this._siblings=Z(b,this,!1),1===i&&this._siblings.length>1&&_(b,this,null,1,this._siblings);(this.vars.immediateRender||0===c&&0===this._delay&&this.vars.immediateRender!==!1)&&(this._time=-m,this.render(Math.min(0,-this._delay)))},!0),H=function(b){return b&&b.length&&b!==a&&b[0]&&(b[0]===a||b[0].nodeType&&b[0].style&&!b.nodeType)},I=function(a,b){var c,d={};for(c in a)T[c]||c in b&&"transform"!==c&&"x"!==c&&"y"!==c&&"width"!==c&&"height"!==c&&"className"!==c&&"border"!==c||!(!Q[c]||Q[c]&&Q[c]._autoCSS)||(d[c]=a[c],delete a[c]);a.css=d};h=G.prototype=new D,h.constructor=G,h.kill()._gc=!1,h.ratio=0,h._firstPT=h._targets=h._overwrittenProps=h._startAt=null,h._notifyPluginsOfEnabled=h._lazy=!1,G.version="1.19.1",G.defaultEase=h._ease=new v(null,null,1,1),G.defaultOverwrite="auto",G.ticker=i,G.autoSleep=120,G.lagSmoothing=function(a,b){i.lagSmoothing(a,b)},G.selector=a.$||a.jQuery||function(b){var c=a.$||a.jQuery;return c?(G.selector=c,c(b)):"undefined"==typeof d?b:d.querySelectorAll?d.querySelectorAll(b):d.getElementById("#"===b.charAt(0)?b.substr(1):b)};var J=[],K={},L=/(?:(-|-=|\+=)?\d*\.?\d*(?:e[\-+]?\d+)?)[0-9]/gi,M=function(a){for(var b,c=this._firstPT,d=1e-6;c;)b=c.blob?1===a?this.end:a?this.join(""):this.start:c.c*a+c.s,c.m?b=c.m(b,this._target||c.t):d>b&&b>-d&&!c.blob&&(b=0),c.f?c.fp?c.t[c.p](c.fp,b):c.t[c.p](b):c.t[c.p]=b,c=c._next},N=function(a,b,c,d){var e,f,g,h,i,j,k,l=[],m=0,n="",o=0;for(l.start=a,l.end=b,a=l[0]=a+"",b=l[1]=b+"",c&&(c(l),a=l[0],b=l[1]),l.length=0,e=a.match(L)||[],f=b.match(L)||[],d&&(d._next=null,d.blob=1,l._firstPT=l._applyPT=d),i=f.length,h=0;i>h;h++)k=f[h],j=b.substr(m,b.indexOf(k,m)-m),n+=j||!h?j:",",m+=j.length,o?o=(o+1)%5:"rgba("===j.substr(-5)&&(o=1),k===e[h]||e.length<=h?n+=k:(n&&(l.push(n),n=""),g=parseFloat(e[h]),l.push(g),l._firstPT={_next:l._firstPT,t:l,p:l.length-1,s:g,c:("="===k.charAt(1)?parseInt(k.charAt(0)+"1",10)*parseFloat(k.substr(2)):parseFloat(k)-g)||0,f:0,m:o&&4>o?Math.round:0}),m+=k.length;return n+=b.substr(m),n&&l.push(n),l.setRatio=M,l},O=function(a,b,c,d,e,f,g,h,i){"function"==typeof d&&(d=d(i||0,a));var j,k=typeof a[b],l="function"!==k?"":b.indexOf("set")||"function"!=typeof a["get"+b.substr(3)]?b:"get"+b.substr(3),m="get"!==c?c:l?g?a[l](g):a[l]():a[b],n="string"==typeof d&&"="===d.charAt(1),o={t:a,p:b,s:m,f:"function"===k,pg:0,n:e||b,m:f?"function"==typeof f?f:Math.round:0,pr:0,c:n?parseInt(d.charAt(0)+"1",10)*parseFloat(d.substr(2)):parseFloat(d)-m||0};return("number"!=typeof m||"number"!=typeof d&&!n)&&(g||isNaN(m)||!n&&isNaN(d)||"boolean"==typeof m||"boolean"==typeof d?(o.fp=g,j=N(m,n?o.s+o.c:d,h||G.defaultStringFilter,o),o={t:j,p:"setRatio",s:0,c:1,f:2,pg:0,n:e||b,pr:0,m:0}):(o.s=parseFloat(m),n||(o.c=parseFloat(d)-o.s||0))),o.c?((o._next=this._firstPT)&&(o._next._prev=o),this._firstPT=o,o):void 0},P=G._internals={isArray:p,isSelector:H,lazyTweens:J,blobDif:N},Q=G._plugins={},R=P.tweenLookup={},S=0,T=P.reservedProps={ease:1,delay:1,overwrite:1,onComplete:1,onCompleteParams:1,onCompleteScope:1,useFrames:1,runBackwards:1,startAt:1,onUpdate:1,onUpdateParams:1,onUpdateScope:1,onStart:1,onStartParams:1,onStartScope:1,onReverseComplete:1,onReverseCompleteParams:1,onReverseCompleteScope:1,onRepeat:1,onRepeatParams:1,onRepeatScope:1,easeParams:1,yoyo:1,immediateRender:1,repeat:1,repeatDelay:1,data:1,paused:1,reversed:1,autoCSS:1,lazy:1,onOverwrite:1,callbackScope:1,stringFilter:1,id:1},U={none:0,all:1,auto:2,concurrent:3,allOnStart:4,preexisting:5,"true":1,"false":0},V=D._rootFramesTimeline=new F,W=D._rootTimeline=new F,X=30,Y=P.lazyRender=function(){var a,b=J.length;for(K={};--b>-1;)a=J[b],a&&a._lazy!==!1&&(a.render(a._lazy[0],a._lazy[1],!0),a._lazy=!1);J.length=0};W._startTime=i.time,V._startTime=i.frame,W._active=V._active=!0,setTimeout(Y,1),D._updateRoot=G.render=function(){var a,b,c;if(J.length&&Y(),W.render((i.time-W._startTime)*W._timeScale,!1,!1),V.render((i.frame-V._startTime)*V._timeScale,!1,!1),J.length&&Y(),i.frame>=X){X=i.frame+(parseInt(G.autoSleep,10)||120);for(c in R){for(b=R[c].tweens,a=b.length;--a>-1;)b[a]._gc&&b.splice(a,1);0===b.length&&delete R[c]}if(c=W._first,(!c||c._paused)&&G.autoSleep&&!V._first&&1===i._listeners.tick.length){for(;c&&c._paused;)c=c._next;c||i.sleep()}}},i.addEventListener("tick",D._updateRoot);var Z=function(a,b,c){var d,e,f=a._gsTweenID;if(R[f||(a._gsTweenID=f="t"+S++)]||(R[f]={target:a,tweens:[]}),b&&(d=R[f].tweens,d[e=d.length]=b,c))for(;--e>-1;)d[e]===b&&d.splice(e,1);return R[f].tweens},$=function(a,b,c,d){var e,f,g=a.vars.onOverwrite;return g&&(e=g(a,b,c,d)),g=G.onOverwrite,g&&(f=g(a,b,c,d)),e!==!1&&f!==!1},_=function(a,b,c,d,e){var f,g,h,i;if(1===d||d>=4){for(i=e.length,f=0;i>f;f++)if((h=e[f])!==b)h._gc||h._kill(null,a,b)&&(g=!0);else if(5===d)break;return g}var j,k=b._startTime+m,l=[],n=0,o=0===b._duration;for(f=e.length;--f>-1;)(h=e[f])===b||h._gc||h._paused||(h._timeline!==b._timeline?(j=j||aa(b,0,o),0===aa(h,j,o)&&(l[n++]=h)):h._startTime<=k&&h._startTime+h.totalDuration()/h._timeScale>k&&((o||!h._initted)&&k-h._startTime<=2e-10||(l[n++]=h)));for(f=n;--f>-1;)if(h=l[f],2===d&&h._kill(c,a,b)&&(g=!0),2!==d||!h._firstPT&&h._initted){if(2!==d&&!$(h,b))continue;h._enabled(!1,!1)&&(g=!0)}return g},aa=function(a,b,c){for(var d=a._timeline,e=d._timeScale,f=a._startTime;d._timeline;){if(f+=d._startTime,e*=d._timeScale,d._paused)return-100;d=d._timeline}return f/=e,f>b?f-b:c&&f===b||!a._initted&&2*m>f-b?m:(f+=a.totalDuration()/a._timeScale/e)>b+m?0:f-b-m};h._init=function(){var a,b,c,d,e,f,g=this.vars,h=this._overwrittenProps,i=this._duration,j=!!g.immediateRender,k=g.ease;if(g.startAt){this._startAt&&(this._startAt.render(-1,!0),this._startAt.kill()),e={};for(d in g.startAt)e[d]=g.startAt[d];if(e.overwrite=!1,e.immediateRender=!0,e.lazy=j&&g.lazy!==!1,e.startAt=e.delay=null,this._startAt=G.to(this.target,0,e),j)if(this._time>0)this._startAt=null;else if(0!==i)return}else if(g.runBackwards&&0!==i)if(this._startAt)this._startAt.render(-1,!0),this._startAt.kill(),this._startAt=null;else{0!==this._time&&(j=!1),c={};for(d in g)T[d]&&"autoCSS"!==d||(c[d]=g[d]);if(c.overwrite=0,c.data="isFromStart",c.lazy=j&&g.lazy!==!1,c.immediateRender=j,this._startAt=G.to(this.target,0,c),j){if(0===this._time)return}else this._startAt._init(),this._startAt._enabled(!1),this.vars.immediateRender&&(this._startAt=null)}if(this._ease=k=k?k instanceof v?k:"function"==typeof k?new v(k,g.easeParams):w[k]||G.defaultEase:G.defaultEase,g.easeParams instanceof Array&&k.config&&(this._ease=k.config.apply(k,g.easeParams)),this._easeType=this._ease._type,this._easePower=this._ease._power,this._firstPT=null,this._targets)for(f=this._targets.length,a=0;f>a;a++)this._initProps(this._targets[a],this._propLookup[a]={},this._siblings[a],h?h[a]:null,a)&&(b=!0);else b=this._initProps(this.target,this._propLookup,this._siblings,h,0);if(b&&G._onPluginEvent("_onInitAllProps",this),h&&(this._firstPT||"function"!=typeof this.target&&this._enabled(!1,!1)),g.runBackwards)for(c=this._firstPT;c;)c.s+=c.c,c.c=-c.c,c=c._next;this._onUpdate=g.onUpdate,this._initted=!0},h._initProps=function(b,c,d,e,f){var g,h,i,j,k,l;if(null==b)return!1;K[b._gsTweenID]&&Y(),this.vars.css||b.style&&b!==a&&b.nodeType&&Q.css&&this.vars.autoCSS!==!1&&I(this.vars,b);for(g in this.vars)if(l=this.vars[g],T[g])l&&(l instanceof Array||l.push&&p(l))&&-1!==l.join("").indexOf("{self}")&&(this.vars[g]=l=this._swapSelfInParams(l,this));else if(Q[g]&&(j=new Q[g])._onInitTween(b,this.vars[g],this,f)){for(this._firstPT=k={_next:this._firstPT,t:j,p:"setRatio",s:0,c:1,f:1,n:g,pg:1,pr:j._priority,m:0},h=j._overwriteProps.length;--h>-1;)c[j._overwriteProps[h]]=this._firstPT;(j._priority||j._onInitAllProps)&&(i=!0),(j._onDisable||j._onEnable)&&(this._notifyPluginsOfEnabled=!0),k._next&&(k._next._prev=k)}else c[g]=O.call(this,b,g,"get",l,g,0,null,this.vars.stringFilter,f);return e&&this._kill(e,b)?this._initProps(b,c,d,e,f):this._overwrite>1&&this._firstPT&&d.length>1&&_(b,this,c,this._overwrite,d)?(this._kill(c,b),this._initProps(b,c,d,e,f)):(this._firstPT&&(this.vars.lazy!==!1&&this._duration||this.vars.lazy&&!this._duration)&&(K[b._gsTweenID]=!0),i)},h.render=function(a,b,c){var d,e,f,g,h=this._time,i=this._duration,j=this._rawPrevTime;if(a>=i-1e-7&&a>=0)this._totalTime=this._time=i,this.ratio=this._ease._calcEnd?this._ease.getRatio(1):1,this._reversed||(d=!0,e="onComplete",c=c||this._timeline.autoRemoveChildren),0===i&&(this._initted||!this.vars.lazy||c)&&(this._startTime===this._timeline._duration&&(a=0),(0>j||0>=a&&a>=-1e-7||j===m&&"isPause"!==this.data)&&j!==a&&(c=!0,j>m&&(e="onReverseComplete")),this._rawPrevTime=g=!b||a||j===a?a:m);else if(1e-7>a)this._totalTime=this._time=0,this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0,(0!==h||0===i&&j>0)&&(e="onReverseComplete",d=this._reversed),0>a&&(this._active=!1,0===i&&(this._initted||!this.vars.lazy||c)&&(j>=0&&(j!==m||"isPause"!==this.data)&&(c=!0),this._rawPrevTime=g=!b||a||j===a?a:m)),this._initted||(c=!0);else if(this._totalTime=this._time=a,this._easeType){var k=a/i,l=this._easeType,n=this._easePower;(1===l||3===l&&k>=.5)&&(k=1-k),3===l&&(k*=2),1===n?k*=k:2===n?k*=k*k:3===n?k*=k*k*k:4===n&&(k*=k*k*k*k),1===l?this.ratio=1-k:2===l?this.ratio=k:.5>a/i?this.ratio=k/2:this.ratio=1-k/2}else this.ratio=this._ease.getRatio(a/i);if(this._time!==h||c){if(!this._initted){if(this._init(),!this._initted||this._gc)return;if(!c&&this._firstPT&&(this.vars.lazy!==!1&&this._duration||this.vars.lazy&&!this._duration))return this._time=this._totalTime=h,this._rawPrevTime=j,J.push(this),void(this._lazy=[a,b]);this._time&&!d?this.ratio=this._ease.getRatio(this._time/i):d&&this._ease._calcEnd&&(this.ratio=this._ease.getRatio(0===this._time?0:1))}for(this._lazy!==!1&&(this._lazy=!1),this._active||!this._paused&&this._time!==h&&a>=0&&(this._active=!0),0===h&&(this._startAt&&(a>=0?this._startAt.render(a,b,c):e||(e="_dummyGS")),this.vars.onStart&&(0!==this._time||0===i)&&(b||this._callback("onStart"))),f=this._firstPT;f;)f.f?f.t[f.p](f.c*this.ratio+f.s):f.t[f.p]=f.c*this.ratio+f.s,f=f._next;this._onUpdate&&(0>a&&this._startAt&&a!==-1e-4&&this._startAt.render(a,b,c),b||(this._time!==h||d||c)&&this._callback("onUpdate")),e&&(!this._gc||c)&&(0>a&&this._startAt&&!this._onUpdate&&a!==-1e-4&&this._startAt.render(a,b,c),d&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!b&&this.vars[e]&&this._callback(e),0===i&&this._rawPrevTime===m&&g!==m&&(this._rawPrevTime=0))}},h._kill=function(a,b,c){if("all"===a&&(a=null),null==a&&(null==b||b===this.target))return this._lazy=!1,this._enabled(!1,!1);b="string"!=typeof b?b||this._targets||this.target:G.selector(b)||b;var d,e,f,g,h,i,j,k,l,m=c&&this._time&&c._startTime===this._startTime&&this._timeline===c._timeline;if((p(b)||H(b))&&"number"!=typeof b[0])for(d=b.length;--d>-1;)this._kill(a,b[d],c)&&(i=!0);else{if(this._targets){for(d=this._targets.length;--d>-1;)if(b===this._targets[d]){h=this._propLookup[d]||{},this._overwrittenProps=this._overwrittenProps||[],e=this._overwrittenProps[d]=a?this._overwrittenProps[d]||{}:"all";break}}else{if(b!==this.target)return!1;h=this._propLookup,e=this._overwrittenProps=a?this._overwrittenProps||{}:"all"}if(h){if(j=a||h,k=a!==e&&"all"!==e&&a!==h&&("object"!=typeof a||!a._tempKill),c&&(G.onOverwrite||this.vars.onOverwrite)){for(f in j)h[f]&&(l||(l=[]),l.push(f));if((l||!a)&&!$(this,c,b,l))return!1}for(f in j)(g=h[f])&&(m&&(g.f?g.t[g.p](g.s):g.t[g.p]=g.s,i=!0),g.pg&&g.t._kill(j)&&(i=!0),g.pg&&0!==g.t._overwriteProps.length||(g._prev?g._prev._next=g._next:g===this._firstPT&&(this._firstPT=g._next),g._next&&(g._next._prev=g._prev),g._next=g._prev=null),delete h[f]),k&&(e[f]=1);!this._firstPT&&this._initted&&this._enabled(!1,!1)}}return i},h.invalidate=function(){return this._notifyPluginsOfEnabled&&G._onPluginEvent("_onDisable",this),this._firstPT=this._overwrittenProps=this._startAt=this._onUpdate=null,this._notifyPluginsOfEnabled=this._active=this._lazy=!1,this._propLookup=this._targets?{}:[],D.prototype.invalidate.call(this),this.vars.immediateRender&&(this._time=-m,this.render(Math.min(0,-this._delay))),this},h._enabled=function(a,b){if(j||i.wake(),a&&this._gc){var c,d=this._targets;if(d)for(c=d.length;--c>-1;)this._siblings[c]=Z(d[c],this,!0);else this._siblings=Z(this.target,this,!0)}return D.prototype._enabled.call(this,a,b),this._notifyPluginsOfEnabled&&this._firstPT?G._onPluginEvent(a?"_onEnable":"_onDisable",this):!1},G.to=function(a,b,c){return new G(a,b,c)},G.from=function(a,b,c){return c.runBackwards=!0,c.immediateRender=0!=c.immediateRender,new G(a,b,c)},G.fromTo=function(a,b,c,d){return d.startAt=c,d.immediateRender=0!=d.immediateRender&&0!=c.immediateRender,new G(a,b,d)},G.delayedCall=function(a,b,c,d,e){return new G(b,0,{delay:a,onComplete:b,onCompleteParams:c,callbackScope:d,onReverseComplete:b,onReverseCompleteParams:c,immediateRender:!1,lazy:!1,useFrames:e,overwrite:0})},G.set=function(a,b){return new G(a,0,b)},G.getTweensOf=function(a,b){if(null==a)return[];a="string"!=typeof a?a:G.selector(a)||a;var c,d,e,f;if((p(a)||H(a))&&"number"!=typeof a[0]){for(c=a.length,d=[];--c>-1;)d=d.concat(G.getTweensOf(a[c],b));for(c=d.length;--c>-1;)for(f=d[c],e=c;--e>-1;)f===d[e]&&d.splice(c,1)}else for(d=Z(a).concat(),c=d.length;--c>-1;)(d[c]._gc||b&&!d[c].isActive())&&d.splice(c,1);return d},G.killTweensOf=G.killDelayedCallsTo=function(a,b,c){"object"==typeof b&&(c=b,b=!1);for(var d=G.getTweensOf(a,b),e=d.length;--e>-1;)d[e]._kill(c,a)};var ba=t("plugins.TweenPlugin",function(a,b){this._overwriteProps=(a||"").split(","),this._propName=this._overwriteProps[0],this._priority=b||0,this._super=ba.prototype},!0);if(h=ba.prototype,ba.version="1.19.0",ba.API=2,h._firstPT=null,h._addTween=O,h.setRatio=M,h._kill=function(a){var b,c=this._overwriteProps,d=this._firstPT;if(null!=a[this._propName])this._overwriteProps=[];else for(b=c.length;--b>-1;)null!=a[c[b]]&&c.splice(b,1);for(;d;)null!=a[d.n]&&(d._next&&(d._next._prev=d._prev),d._prev?(d._prev._next=d._next,d._prev=null):this._firstPT===d&&(this._firstPT=d._next)),d=d._next;return!1},h._mod=h._roundProps=function(a){for(var b,c=this._firstPT;c;)b=a[this._propName]||null!=c.n&&a[c.n.split(this._propName+"_").join("")],b&&"function"==typeof b&&(2===c.f?c.t._applyPT.m=b:c.m=b),c=c._next},G._onPluginEvent=function(a,b){var c,d,e,f,g,h=b._firstPT;if("_onInitAllProps"===a){for(;h;){for(g=h._next,d=e;d&&d.pr>h.pr;)d=d._next;(h._prev=d?d._prev:f)?h._prev._next=h:e=h,(h._next=d)?d._prev=h:f=h,h=g}h=b._firstPT=e}for(;h;)h.pg&&"function"==typeof h.t[a]&&h.t[a]()&&(c=!0),h=h._next;return c},ba.activate=function(a){for(var b=a.length;--b>-1;)a[b].API===ba.API&&(Q[(new a[b])._propName]=a[b]);return!0},s.plugin=function(a){if(!(a&&a.propName&&a.init&&a.API))throw"illegal plugin definition.";var b,c=a.propName,d=a.priority||0,e=a.overwriteProps,f={init:"_onInitTween",set:"setRatio",kill:"_kill",round:"_mod",mod:"_mod",initAll:"_onInitAllProps"},g=t("plugins."+c.charAt(0).toUpperCase()+c.substr(1)+"Plugin",function(){ba.call(this,c,d),this._overwriteProps=e||[]},a.global===!0),h=g.prototype=new ba(c);h.constructor=g,g.API=a.API;for(b in f)"function"==typeof a[b]&&(h[f[b]]=a[b]);return g.version=a.version,ba.activate([g]),g},f=a._gsQueue){for(g=0;g<f.length;g++)f[g]();for(h in q)q[h].func||a.console.log("GSAP encountered missing dependency: "+h)}j=!1}}("undefined"!=typeof module&&module.exports&&"undefined"!=typeof global?global:this||window,"TweenLite");
/* TIME LINE LITE */
/*!
 * VERSION: 1.17.0
 * DATE: 2015-05-27
 * UPDATES AND DOCS AT: http://greensock.com
 *
 * @license Copyright (c) 2008-2015, GreenSock. All rights reserved.
 * This work is subject to the terms at http://greensock.com/standard-license or for
 * Club GreenSock members, the software agreement that was issued with your membership.
 * 
 * @author: Jack Doyle, jack@greensock.com
 */
var _gsScope="undefined"!=typeof module&&module.exports&&"undefined"!=typeof global?global:this||window;(_gsScope._gsQueue||(_gsScope._gsQueue=[])).push(function(){"use strict";_gsScope._gsDefine("TimelineLite",["core.Animation","core.SimpleTimeline","TweenLite"],function(t,e,i){var s=function(t){e.call(this,t),this._labels={},this.autoRemoveChildren=this.vars.autoRemoveChildren===!0,this.smoothChildTiming=this.vars.smoothChildTiming===!0,this._sortChildren=!0,this._onUpdate=this.vars.onUpdate;var i,s,r=this.vars;for(s in r)i=r[s],h(i)&&-1!==i.join("").indexOf("{self}")&&(r[s]=this._swapSelfInParams(i));h(r.tweens)&&this.add(r.tweens,0,r.align,r.stagger)},r=1e-10,n=i._internals,a=s._internals={},o=n.isSelector,h=n.isArray,l=n.lazyTweens,_=n.lazyRender,u=[],f=_gsScope._gsDefine.globals,c=function(t){var e,i={};for(e in t)i[e]=t[e];return i},p=a.pauseCallback=function(t,e,i,s){var n,a=t._timeline,o=a._totalTime,h=t._startTime,l=0>t._rawPrevTime||0===t._rawPrevTime&&a._reversed,_=l?0:r,f=l?r:0;if(e||!this._forcingPlayhead){for(a.pause(h),n=t._prev;n&&n._startTime===h;)n._rawPrevTime=f,n=n._prev;for(n=t._next;n&&n._startTime===h;)n._rawPrevTime=_,n=n._next;e&&e.apply(s||a.vars.callbackScope||a,i||u),(this._forcingPlayhead||!a._paused)&&a.seek(o)}},m=function(t){var e,i=[],s=t.length;for(e=0;e!==s;i.push(t[e++]));return i},d=s.prototype=new e;return s.version="1.17.0",d.constructor=s,d.kill()._gc=d._forcingPlayhead=!1,d.to=function(t,e,s,r){var n=s.repeat&&f.TweenMax||i;return e?this.add(new n(t,e,s),r):this.set(t,s,r)},d.from=function(t,e,s,r){return this.add((s.repeat&&f.TweenMax||i).from(t,e,s),r)},d.fromTo=function(t,e,s,r,n){var a=r.repeat&&f.TweenMax||i;return e?this.add(a.fromTo(t,e,s,r),n):this.set(t,r,n)},d.staggerTo=function(t,e,r,n,a,h,l,_){var u,f=new s({onComplete:h,onCompleteParams:l,callbackScope:_,smoothChildTiming:this.smoothChildTiming});for("string"==typeof t&&(t=i.selector(t)||t),t=t||[],o(t)&&(t=m(t)),n=n||0,0>n&&(t=m(t),t.reverse(),n*=-1),u=0;t.length>u;u++)r.startAt&&(r.startAt=c(r.startAt)),f.to(t[u],e,c(r),u*n);return this.add(f,a)},d.staggerFrom=function(t,e,i,s,r,n,a,o){return i.immediateRender=0!=i.immediateRender,i.runBackwards=!0,this.staggerTo(t,e,i,s,r,n,a,o)},d.staggerFromTo=function(t,e,i,s,r,n,a,o,h){return s.startAt=i,s.immediateRender=0!=s.immediateRender&&0!=i.immediateRender,this.staggerTo(t,e,s,r,n,a,o,h)},d.call=function(t,e,s,r){return this.add(i.delayedCall(0,t,e,s),r)},d.set=function(t,e,s){return s=this._parseTimeOrLabel(s,0,!0),null==e.immediateRender&&(e.immediateRender=s===this._time&&!this._paused),this.add(new i(t,0,e),s)},s.exportRoot=function(t,e){t=t||{},null==t.smoothChildTiming&&(t.smoothChildTiming=!0);var r,n,a=new s(t),o=a._timeline;for(null==e&&(e=!0),o._remove(a,!0),a._startTime=0,a._rawPrevTime=a._time=a._totalTime=o._time,r=o._first;r;)n=r._next,e&&r instanceof i&&r.target===r.vars.onComplete||a.add(r,r._startTime-r._delay),r=n;return o.add(a,0),a},d.add=function(r,n,a,o){var l,_,u,f,c,p;if("number"!=typeof n&&(n=this._parseTimeOrLabel(n,0,!0,r)),!(r instanceof t)){if(r instanceof Array||r&&r.push&&h(r)){for(a=a||"normal",o=o||0,l=n,_=r.length,u=0;_>u;u++)h(f=r[u])&&(f=new s({tweens:f})),this.add(f,l),"string"!=typeof f&&"function"!=typeof f&&("sequence"===a?l=f._startTime+f.totalDuration()/f._timeScale:"start"===a&&(f._startTime-=f.delay())),l+=o;return this._uncache(!0)}if("string"==typeof r)return this.addLabel(r,n);if("function"!=typeof r)throw"Cannot add "+r+" into the timeline; it is not a tween, timeline, function, or string.";r=i.delayedCall(0,r)}if(e.prototype.add.call(this,r,n),(this._gc||this._time===this._duration)&&!this._paused&&this._duration<this.duration())for(c=this,p=c.rawTime()>r._startTime;c._timeline;)p&&c._timeline.smoothChildTiming?c.totalTime(c._totalTime,!0):c._gc&&c._enabled(!0,!1),c=c._timeline;return this},d.remove=function(e){if(e instanceof t)return this._remove(e,!1);if(e instanceof Array||e&&e.push&&h(e)){for(var i=e.length;--i>-1;)this.remove(e[i]);return this}return"string"==typeof e?this.removeLabel(e):this.kill(null,e)},d._remove=function(t,i){e.prototype._remove.call(this,t,i);var s=this._last;return s?this._time>s._startTime+s._totalDuration/s._timeScale&&(this._time=this.duration(),this._totalTime=this._totalDuration):this._time=this._totalTime=this._duration=this._totalDuration=0,this},d.append=function(t,e){return this.add(t,this._parseTimeOrLabel(null,e,!0,t))},d.insert=d.insertMultiple=function(t,e,i,s){return this.add(t,e||0,i,s)},d.appendMultiple=function(t,e,i,s){return this.add(t,this._parseTimeOrLabel(null,e,!0,t),i,s)},d.addLabel=function(t,e){return this._labels[t]=this._parseTimeOrLabel(e),this},d.addPause=function(t,e,s,r){var n=i.delayedCall(0,p,["{self}",e,s,r],this);return n.data="isPause",this.add(n,t)},d.removeLabel=function(t){return delete this._labels[t],this},d.getLabelTime=function(t){return null!=this._labels[t]?this._labels[t]:-1},d._parseTimeOrLabel=function(e,i,s,r){var n;if(r instanceof t&&r.timeline===this)this.remove(r);else if(r&&(r instanceof Array||r.push&&h(r)))for(n=r.length;--n>-1;)r[n]instanceof t&&r[n].timeline===this&&this.remove(r[n]);if("string"==typeof i)return this._parseTimeOrLabel(i,s&&"number"==typeof e&&null==this._labels[i]?e-this.duration():0,s);if(i=i||0,"string"!=typeof e||!isNaN(e)&&null==this._labels[e])null==e&&(e=this.duration());else{if(n=e.indexOf("="),-1===n)return null==this._labels[e]?s?this._labels[e]=this.duration()+i:i:this._labels[e]+i;i=parseInt(e.charAt(n-1)+"1",10)*Number(e.substr(n+1)),e=n>1?this._parseTimeOrLabel(e.substr(0,n-1),0,s):this.duration()}return Number(e)+i},d.seek=function(t,e){return this.totalTime("number"==typeof t?t:this._parseTimeOrLabel(t),e!==!1)},d.stop=function(){return this.paused(!0)},d.gotoAndPlay=function(t,e){return this.play(t,e)},d.gotoAndStop=function(t,e){return this.pause(t,e)},d.render=function(t,e,i){this._gc&&this._enabled(!0,!1);var s,n,a,o,h,u=this._dirty?this.totalDuration():this._totalDuration,f=this._time,c=this._startTime,p=this._timeScale,m=this._paused;if(t>=u)this._totalTime=this._time=u,this._reversed||this._hasPausedChild()||(n=!0,o="onComplete",h=!!this._timeline.autoRemoveChildren,0===this._duration&&(0===t||0>this._rawPrevTime||this._rawPrevTime===r)&&this._rawPrevTime!==t&&this._first&&(h=!0,this._rawPrevTime>r&&(o="onReverseComplete"))),this._rawPrevTime=this._duration||!e||t||this._rawPrevTime===t?t:r,t=u+1e-4;else if(1e-7>t)if(this._totalTime=this._time=0,(0!==f||0===this._duration&&this._rawPrevTime!==r&&(this._rawPrevTime>0||0>t&&this._rawPrevTime>=0))&&(o="onReverseComplete",n=this._reversed),0>t)this._active=!1,this._timeline.autoRemoveChildren&&this._reversed?(h=n=!0,o="onReverseComplete"):this._rawPrevTime>=0&&this._first&&(h=!0),this._rawPrevTime=t;else{if(this._rawPrevTime=this._duration||!e||t||this._rawPrevTime===t?t:r,0===t&&n)for(s=this._first;s&&0===s._startTime;)s._duration||(n=!1),s=s._next;t=0,this._initted||(h=!0)}else this._totalTime=this._time=this._rawPrevTime=t;if(this._time!==f&&this._first||i||h){if(this._initted||(this._initted=!0),this._active||!this._paused&&this._time!==f&&t>0&&(this._active=!0),0===f&&this.vars.onStart&&0!==this._time&&(e||this._callback("onStart")),this._time>=f)for(s=this._first;s&&(a=s._next,!this._paused||m);)(s._active||s._startTime<=this._time&&!s._paused&&!s._gc)&&(s._reversed?s.render((s._dirty?s.totalDuration():s._totalDuration)-(t-s._startTime)*s._timeScale,e,i):s.render((t-s._startTime)*s._timeScale,e,i)),s=a;else for(s=this._last;s&&(a=s._prev,!this._paused||m);)(s._active||f>=s._startTime&&!s._paused&&!s._gc)&&(s._reversed?s.render((s._dirty?s.totalDuration():s._totalDuration)-(t-s._startTime)*s._timeScale,e,i):s.render((t-s._startTime)*s._timeScale,e,i)),s=a;this._onUpdate&&(e||(l.length&&_(),this._callback("onUpdate"))),o&&(this._gc||(c===this._startTime||p!==this._timeScale)&&(0===this._time||u>=this.totalDuration())&&(n&&(l.length&&_(),this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!e&&this.vars[o]&&this._callback(o)))}},d._hasPausedChild=function(){for(var t=this._first;t;){if(t._paused||t instanceof s&&t._hasPausedChild())return!0;t=t._next}return!1},d.getChildren=function(t,e,s,r){r=r||-9999999999;for(var n=[],a=this._first,o=0;a;)r>a._startTime||(a instanceof i?e!==!1&&(n[o++]=a):(s!==!1&&(n[o++]=a),t!==!1&&(n=n.concat(a.getChildren(!0,e,s)),o=n.length))),a=a._next;return n},d.getTweensOf=function(t,e){var s,r,n=this._gc,a=[],o=0;for(n&&this._enabled(!0,!0),s=i.getTweensOf(t),r=s.length;--r>-1;)(s[r].timeline===this||e&&this._contains(s[r]))&&(a[o++]=s[r]);return n&&this._enabled(!1,!0),a},d.recent=function(){return this._recent},d._contains=function(t){for(var e=t.timeline;e;){if(e===this)return!0;e=e.timeline}return!1},d.shiftChildren=function(t,e,i){i=i||0;for(var s,r=this._first,n=this._labels;r;)r._startTime>=i&&(r._startTime+=t),r=r._next;if(e)for(s in n)n[s]>=i&&(n[s]+=t);return this._uncache(!0)},d._kill=function(t,e){if(!t&&!e)return this._enabled(!1,!1);for(var i=e?this.getTweensOf(e):this.getChildren(!0,!0,!1),s=i.length,r=!1;--s>-1;)i[s]._kill(t,e)&&(r=!0);return r},d.clear=function(t){var e=this.getChildren(!1,!0,!0),i=e.length;for(this._time=this._totalTime=0;--i>-1;)e[i]._enabled(!1,!1);return t!==!1&&(this._labels={}),this._uncache(!0)},d.invalidate=function(){for(var e=this._first;e;)e.invalidate(),e=e._next;return t.prototype.invalidate.call(this)},d._enabled=function(t,i){if(t===this._gc)for(var s=this._first;s;)s._enabled(t,!0),s=s._next;return e.prototype._enabled.call(this,t,i)},d.totalTime=function(){this._forcingPlayhead=!0;var e=t.prototype.totalTime.apply(this,arguments);return this._forcingPlayhead=!1,e},d.duration=function(t){return arguments.length?(0!==this.duration()&&0!==t&&this.timeScale(this._duration/t),this):(this._dirty&&this.totalDuration(),this._duration)},d.totalDuration=function(t){if(!arguments.length){if(this._dirty){for(var e,i,s=0,r=this._last,n=999999999999;r;)e=r._prev,r._dirty&&r.totalDuration(),r._startTime>n&&this._sortChildren&&!r._paused?this.add(r,r._startTime-r._delay):n=r._startTime,0>r._startTime&&!r._paused&&(s-=r._startTime,this._timeline.smoothChildTiming&&(this._startTime+=r._startTime/this._timeScale),this.shiftChildren(-r._startTime,!1,-9999999999),n=0),i=r._startTime+r._totalDuration/r._timeScale,i>s&&(s=i),r=e;this._duration=this._totalDuration=s,this._dirty=!1}return this._totalDuration}return 0!==this.totalDuration()&&0!==t&&this.timeScale(this._totalDuration/t),this},d.paused=function(e){if(!e)for(var i=this._first,s=this._time;i;)i._startTime===s&&"isPause"===i.data&&(i._rawPrevTime=0),i=i._next;return t.prototype.paused.apply(this,arguments)},d.usesFrames=function(){for(var e=this._timeline;e._timeline;)e=e._timeline;return e===t._rootFramesTimeline},d.rawTime=function(){return this._paused?this._totalTime:(this._timeline.rawTime()-this._startTime)*this._timeScale},s},!0)}),_gsScope._gsDefine&&_gsScope._gsQueue.pop()(),function(t){"use strict";var e=function(){return(_gsScope.GreenSockGlobals||_gsScope)[t]};"function"==typeof define&&define.amd?define(["TweenLite"],e):"undefined"!=typeof module&&module.exports&&(require("./TweenLite.js"),module.exports=e())}("TimelineLite");


/* EASING PLUGIN*/
/*!
 * VERSION: 1.15.5
 * DATE: 2016-07-08
 * UPDATES AND DOCS AT: http://greensock.com
 *
 * @license Copyright (c) 2008-2016, GreenSock. All rights reserved.
 * This work is subject to the terms at http://greensock.com/standard-license or for
 * Club GreenSock members, the software agreement that was issued with your membership.
 * 
 * @author: Jack Doyle, jack@greensock.com
 **/
var _gsScope="undefined"!=typeof module&&module.exports&&"undefined"!=typeof global?global:this||window;(_gsScope._gsQueue||(_gsScope._gsQueue=[])).push(function(){"use strict";_gsScope._gsDefine("easing.Back",["easing.Ease"],function(a){var b,c,d,e=_gsScope.GreenSockGlobals||_gsScope,f=e.com.greensock,g=2*Math.PI,h=Math.PI/2,i=f._class,j=function(b,c){var d=i("easing."+b,function(){},!0),e=d.prototype=new a;return e.constructor=d,e.getRatio=c,d},k=a.register||function(){},l=function(a,b,c,d,e){var f=i("easing."+a,{easeOut:new b,easeIn:new c,easeInOut:new d},!0);return k(f,a),f},m=function(a,b,c){this.t=a,this.v=b,c&&(this.next=c,c.prev=this,this.c=c.v-b,this.gap=c.t-a)},n=function(b,c){var d=i("easing."+b,function(a){this._p1=a||0===a?a:1.70158,this._p2=1.525*this._p1},!0),e=d.prototype=new a;return e.constructor=d,e.getRatio=c,e.config=function(a){return new d(a)},d},o=l("Back",n("BackOut",function(a){return(a-=1)*a*((this._p1+1)*a+this._p1)+1}),n("BackIn",function(a){return a*a*((this._p1+1)*a-this._p1)}),n("BackInOut",function(a){return(a*=2)<1?.5*a*a*((this._p2+1)*a-this._p2):.5*((a-=2)*a*((this._p2+1)*a+this._p2)+2)})),p=i("easing.SlowMo",function(a,b,c){b=b||0===b?b:.7,null==a?a=.7:a>1&&(a=1),this._p=1!==a?b:0,this._p1=(1-a)/2,this._p2=a,this._p3=this._p1+this._p2,this._calcEnd=c===!0},!0),q=p.prototype=new a;return q.constructor=p,q.getRatio=function(a){var b=a+(.5-a)*this._p;return a<this._p1?this._calcEnd?1-(a=1-a/this._p1)*a:b-(a=1-a/this._p1)*a*a*a*b:a>this._p3?this._calcEnd?1-(a=(a-this._p3)/this._p1)*a:b+(a-b)*(a=(a-this._p3)/this._p1)*a*a*a:this._calcEnd?1:b},p.ease=new p(.7,.7),q.config=p.config=function(a,b,c){return new p(a,b,c)},b=i("easing.SteppedEase",function(a){a=a||1,this._p1=1/a,this._p2=a+1},!0),q=b.prototype=new a,q.constructor=b,q.getRatio=function(a){return 0>a?a=0:a>=1&&(a=.999999999),(this._p2*a>>0)*this._p1},q.config=b.config=function(a){return new b(a)},c=i("easing.RoughEase",function(b){b=b||{};for(var c,d,e,f,g,h,i=b.taper||"none",j=[],k=0,l=0|(b.points||20),n=l,o=b.randomize!==!1,p=b.clamp===!0,q=b.template instanceof a?b.template:null,r="number"==typeof b.strength?.4*b.strength:.4;--n>-1;)c=o?Math.random():1/l*n,d=q?q.getRatio(c):c,"none"===i?e=r:"out"===i?(f=1-c,e=f*f*r):"in"===i?e=c*c*r:.5>c?(f=2*c,e=f*f*.5*r):(f=2*(1-c),e=f*f*.5*r),o?d+=Math.random()*e-.5*e:n%2?d+=.5*e:d-=.5*e,p&&(d>1?d=1:0>d&&(d=0)),j[k++]={x:c,y:d};for(j.sort(function(a,b){return a.x-b.x}),h=new m(1,1,null),n=l;--n>-1;)g=j[n],h=new m(g.x,g.y,h);this._prev=new m(0,0,0!==h.t?h:h.next)},!0),q=c.prototype=new a,q.constructor=c,q.getRatio=function(a){var b=this._prev;if(a>b.t){for(;b.next&&a>=b.t;)b=b.next;b=b.prev}else for(;b.prev&&a<=b.t;)b=b.prev;return this._prev=b,b.v+(a-b.t)/b.gap*b.c},q.config=function(a){return new c(a)},c.ease=new c,l("Bounce",j("BounceOut",function(a){return 1/2.75>a?7.5625*a*a:2/2.75>a?7.5625*(a-=1.5/2.75)*a+.75:2.5/2.75>a?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375}),j("BounceIn",function(a){return(a=1-a)<1/2.75?1-7.5625*a*a:2/2.75>a?1-(7.5625*(a-=1.5/2.75)*a+.75):2.5/2.75>a?1-(7.5625*(a-=2.25/2.75)*a+.9375):1-(7.5625*(a-=2.625/2.75)*a+.984375)}),j("BounceInOut",function(a){var b=.5>a;return a=b?1-2*a:2*a-1,a=1/2.75>a?7.5625*a*a:2/2.75>a?7.5625*(a-=1.5/2.75)*a+.75:2.5/2.75>a?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375,b?.5*(1-a):.5*a+.5})),l("Circ",j("CircOut",function(a){return Math.sqrt(1-(a-=1)*a)}),j("CircIn",function(a){return-(Math.sqrt(1-a*a)-1)}),j("CircInOut",function(a){return(a*=2)<1?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)})),d=function(b,c,d){var e=i("easing."+b,function(a,b){this._p1=a>=1?a:1,this._p2=(b||d)/(1>a?a:1),this._p3=this._p2/g*(Math.asin(1/this._p1)||0),this._p2=g/this._p2},!0),f=e.prototype=new a;return f.constructor=e,f.getRatio=c,f.config=function(a,b){return new e(a,b)},e},l("Elastic",d("ElasticOut",function(a){return this._p1*Math.pow(2,-10*a)*Math.sin((a-this._p3)*this._p2)+1},.3),d("ElasticIn",function(a){return-(this._p1*Math.pow(2,10*(a-=1))*Math.sin((a-this._p3)*this._p2))},.3),d("ElasticInOut",function(a){return(a*=2)<1?-.5*(this._p1*Math.pow(2,10*(a-=1))*Math.sin((a-this._p3)*this._p2)):this._p1*Math.pow(2,-10*(a-=1))*Math.sin((a-this._p3)*this._p2)*.5+1},.45)),l("Expo",j("ExpoOut",function(a){return 1-Math.pow(2,-10*a)}),j("ExpoIn",function(a){return Math.pow(2,10*(a-1))-.001}),j("ExpoInOut",function(a){return(a*=2)<1?.5*Math.pow(2,10*(a-1)):.5*(2-Math.pow(2,-10*(a-1)))})),l("Sine",j("SineOut",function(a){return Math.sin(a*h)}),j("SineIn",function(a){return-Math.cos(a*h)+1}),j("SineInOut",function(a){return-.5*(Math.cos(Math.PI*a)-1)})),i("easing.EaseLookup",{find:function(b){return a.map[b]}},!0),k(e.SlowMo,"SlowMo","ease,"),k(c,"RoughEase","ease,"),k(b,"SteppedEase","ease,"),o},!0)}),_gsScope._gsDefine&&_gsScope._gsQueue.pop()(),function(){"use strict";var a=function(){return _gsScope.GreenSockGlobals||_gsScope};"function"==typeof define&&define.amd?define(["TweenLite"],a):"undefined"!=typeof module&&module.exports&&(require("../TweenLite.js"),module.exports=a())}();


/* CSS PLUGIN */
/*!
 * VERSION: 1.19.1
 * DATE: 2017-01-17
 * UPDATES AND DOCS AT: http://greensock.com
 *
 * @license Copyright (c) 2008-2017, GreenSock. All rights reserved.
 * This work is subject to the terms at http://greensock.com/standard-license or for
 * Club GreenSock members, the software agreement that was issued with your membership.
 * 
 * @author: Jack Doyle, jack@greensock.com
 */
var _gsScope="undefined"!=typeof module&&module.exports&&"undefined"!=typeof global?global:this||window;(_gsScope._gsQueue||(_gsScope._gsQueue=[])).push(function(){"use strict";_gsScope._gsDefine("plugins.CSSPlugin",["plugins.TweenPlugin","TweenLite"],function(a,b){var c,d,e,f,g=function(){a.call(this,"css"),this._overwriteProps.length=0,this.setRatio=g.prototype.setRatio},h=_gsScope._gsDefine.globals,i={},j=g.prototype=new a("css");j.constructor=g,g.version="1.19.1",g.API=2,g.defaultTransformPerspective=0,g.defaultSkewType="compensated",g.defaultSmoothOrigin=!0,j="px",g.suffixMap={top:j,right:j,bottom:j,left:j,width:j,height:j,fontSize:j,padding:j,margin:j,perspective:j,lineHeight:""};var k,l,m,n,o,p,q,r,s=/(?:\-|\.|\b)(\d|\.|e\-)+/g,t=/(?:\d|\-\d|\.\d|\-\.\d|\+=\d|\-=\d|\+=.\d|\-=\.\d)+/g,u=/(?:\+=|\-=|\-|\b)[\d\-\.]+[a-zA-Z0-9]*(?:%|\b)/gi,v=/(?![+-]?\d*\.?\d+|[+-]|e[+-]\d+)[^0-9]/g,w=/(?:\d|\-|\+|=|#|\.)*/g,x=/opacity *= *([^)]*)/i,y=/opacity:([^;]*)/i,z=/alpha\(opacity *=.+?\)/i,A=/^(rgb|hsl)/,B=/([A-Z])/g,C=/-([a-z])/gi,D=/(^(?:url\(\"|url\())|(?:(\"\))$|\)$)/gi,E=function(a,b){return b.toUpperCase()},F=/(?:Left|Right|Width)/i,G=/(M11|M12|M21|M22)=[\d\-\.e]+/gi,H=/progid\:DXImageTransform\.Microsoft\.Matrix\(.+?\)/i,I=/,(?=[^\)]*(?:\(|$))/gi,J=/[\s,\(]/i,K=Math.PI/180,L=180/Math.PI,M={},N={style:{}},O=_gsScope.document||{createElement:function(){return N}},P=function(a,b){return O.createElementNS?O.createElementNS(b||"http://www.w3.org/1999/xhtml",a):O.createElement(a)},Q=P("div"),R=P("img"),S=g._internals={_specialProps:i},T=(_gsScope.navigator||{}).userAgent||"",U=function(){var a=T.indexOf("Android"),b=P("a");return m=-1!==T.indexOf("Safari")&&-1===T.indexOf("Chrome")&&(-1===a||parseFloat(T.substr(a+8,2))>3),o=m&&parseFloat(T.substr(T.indexOf("Version/")+8,2))<6,n=-1!==T.indexOf("Firefox"),(/MSIE ([0-9]{1,}[\.0-9]{0,})/.exec(T)||/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/.exec(T))&&(p=parseFloat(RegExp.$1)),b?(b.style.cssText="top:1px;opacity:.55;",/^0.55/.test(b.style.opacity)):!1}(),V=function(a){return x.test("string"==typeof a?a:(a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100:1},W=function(a){_gsScope.console&&console.log(a)},X="",Y="",Z=function(a,b){b=b||Q;var c,d,e=b.style;if(void 0!==e[a])return a;for(a=a.charAt(0).toUpperCase()+a.substr(1),c=["O","Moz","ms","Ms","Webkit"],d=5;--d>-1&&void 0===e[c[d]+a];);return d>=0?(Y=3===d?"ms":c[d],X="-"+Y.toLowerCase()+"-",Y+a):null},$=O.defaultView?O.defaultView.getComputedStyle:function(){},_=g.getStyle=function(a,b,c,d,e){var f;return U||"opacity"!==b?(!d&&a.style[b]?f=a.style[b]:(c=c||$(a))?f=c[b]||c.getPropertyValue(b)||c.getPropertyValue(b.replace(B,"-$1").toLowerCase()):a.currentStyle&&(f=a.currentStyle[b]),null==e||f&&"none"!==f&&"auto"!==f&&"auto auto"!==f?f:e):V(a)},aa=S.convertToPixels=function(a,c,d,e,f){if("px"===e||!e)return d;if("auto"===e||!d)return 0;var h,i,j,k=F.test(c),l=a,m=Q.style,n=0>d,o=1===d;if(n&&(d=-d),o&&(d*=100),"%"===e&&-1!==c.indexOf("border"))h=d/100*(k?a.clientWidth:a.clientHeight);else{if(m.cssText="border:0 solid red;position:"+_(a,"position")+";line-height:0;","%"!==e&&l.appendChild&&"v"!==e.charAt(0)&&"rem"!==e)m[k?"borderLeftWidth":"borderTopWidth"]=d+e;else{if(l=a.parentNode||O.body,i=l._gsCache,j=b.ticker.frame,i&&k&&i.time===j)return i.width*d/100;m[k?"width":"height"]=d+e}l.appendChild(Q),h=parseFloat(Q[k?"offsetWidth":"offsetHeight"]),l.removeChild(Q),k&&"%"===e&&g.cacheWidths!==!1&&(i=l._gsCache=l._gsCache||{},i.time=j,i.width=h/d*100),0!==h||f||(h=aa(a,c,d,e,!0))}return o&&(h/=100),n?-h:h},ba=S.calculateOffset=function(a,b,c){if("absolute"!==_(a,"position",c))return 0;var d="left"===b?"Left":"Top",e=_(a,"margin"+d,c);return a["offset"+d]-(aa(a,b,parseFloat(e),e.replace(w,""))||0)},ca=function(a,b){var c,d,e,f={};if(b=b||$(a,null))if(c=b.length)for(;--c>-1;)e=b[c],(-1===e.indexOf("-transform")||Da===e)&&(f[e.replace(C,E)]=b.getPropertyValue(e));else for(c in b)(-1===c.indexOf("Transform")||Ca===c)&&(f[c]=b[c]);else if(b=a.currentStyle||a.style)for(c in b)"string"==typeof c&&void 0===f[c]&&(f[c.replace(C,E)]=b[c]);return U||(f.opacity=V(a)),d=Ra(a,b,!1),f.rotation=d.rotation,f.skewX=d.skewX,f.scaleX=d.scaleX,f.scaleY=d.scaleY,f.x=d.x,f.y=d.y,Fa&&(f.z=d.z,f.rotationX=d.rotationX,f.rotationY=d.rotationY,f.scaleZ=d.scaleZ),f.filters&&delete f.filters,f},da=function(a,b,c,d,e){var f,g,h,i={},j=a.style;for(g in c)"cssText"!==g&&"length"!==g&&isNaN(g)&&(b[g]!==(f=c[g])||e&&e[g])&&-1===g.indexOf("Origin")&&("number"==typeof f||"string"==typeof f)&&(i[g]="auto"!==f||"left"!==g&&"top"!==g?""!==f&&"auto"!==f&&"none"!==f||"string"!=typeof b[g]||""===b[g].replace(v,"")?f:0:ba(a,g),void 0!==j[g]&&(h=new sa(j,g,j[g],h)));if(d)for(g in d)"className"!==g&&(i[g]=d[g]);return{difs:i,firstMPT:h}},ea={width:["Left","Right"],height:["Top","Bottom"]},fa=["marginLeft","marginRight","marginTop","marginBottom"],ga=function(a,b,c){if("svg"===(a.nodeName+"").toLowerCase())return(c||$(a))[b]||0;if(a.getCTM&&Oa(a))return a.getBBox()[b]||0;var d=parseFloat("width"===b?a.offsetWidth:a.offsetHeight),e=ea[b],f=e.length;for(c=c||$(a,null);--f>-1;)d-=parseFloat(_(a,"padding"+e[f],c,!0))||0,d-=parseFloat(_(a,"border"+e[f]+"Width",c,!0))||0;return d},ha=function(a,b){if("contain"===a||"auto"===a||"auto auto"===a)return a+" ";(null==a||""===a)&&(a="0 0");var c,d=a.split(" "),e=-1!==a.indexOf("left")?"0%":-1!==a.indexOf("right")?"100%":d[0],f=-1!==a.indexOf("top")?"0%":-1!==a.indexOf("bottom")?"100%":d[1];if(d.length>3&&!b){for(d=a.split(", ").join(",").split(","),a=[],c=0;c<d.length;c++)a.push(ha(d[c]));return a.join(",")}return null==f?f="center"===e?"50%":"0":"center"===f&&(f="50%"),("center"===e||isNaN(parseFloat(e))&&-1===(e+"").indexOf("="))&&(e="50%"),a=e+" "+f+(d.length>2?" "+d[2]:""),b&&(b.oxp=-1!==e.indexOf("%"),b.oyp=-1!==f.indexOf("%"),b.oxr="="===e.charAt(1),b.oyr="="===f.charAt(1),b.ox=parseFloat(e.replace(v,"")),b.oy=parseFloat(f.replace(v,"")),b.v=a),b||a},ia=function(a,b){return"function"==typeof a&&(a=a(r,q)),"string"==typeof a&&"="===a.charAt(1)?parseInt(a.charAt(0)+"1",10)*parseFloat(a.substr(2)):parseFloat(a)-parseFloat(b)||0},ja=function(a,b){return"function"==typeof a&&(a=a(r,q)),null==a?b:"string"==typeof a&&"="===a.charAt(1)?parseInt(a.charAt(0)+"1",10)*parseFloat(a.substr(2))+b:parseFloat(a)||0},ka=function(a,b,c,d){var e,f,g,h,i,j=1e-6;return"function"==typeof a&&(a=a(r,q)),null==a?h=b:"number"==typeof a?h=a:(e=360,f=a.split("_"),i="="===a.charAt(1),g=(i?parseInt(a.charAt(0)+"1",10)*parseFloat(f[0].substr(2)):parseFloat(f[0]))*(-1===a.indexOf("rad")?1:L)-(i?0:b),f.length&&(d&&(d[c]=b+g),-1!==a.indexOf("short")&&(g%=e,g!==g%(e/2)&&(g=0>g?g+e:g-e)),-1!==a.indexOf("_cw")&&0>g?g=(g+9999999999*e)%e-(g/e|0)*e:-1!==a.indexOf("ccw")&&g>0&&(g=(g-9999999999*e)%e-(g/e|0)*e)),h=b+g),j>h&&h>-j&&(h=0),h},la={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],fuchsia:[255,0,255],olive:[128,128,0],yellow:[255,255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]},ma=function(a,b,c){return a=0>a?a+1:a>1?a-1:a,255*(1>6*a?b+(c-b)*a*6:.5>a?c:2>3*a?b+(c-b)*(2/3-a)*6:b)+.5|0},na=g.parseColor=function(a,b){var c,d,e,f,g,h,i,j,k,l,m;if(a)if("number"==typeof a)c=[a>>16,a>>8&255,255&a];else{if(","===a.charAt(a.length-1)&&(a=a.substr(0,a.length-1)),la[a])c=la[a];else if("#"===a.charAt(0))4===a.length&&(d=a.charAt(1),e=a.charAt(2),f=a.charAt(3),a="#"+d+d+e+e+f+f),a=parseInt(a.substr(1),16),c=[a>>16,a>>8&255,255&a];else if("hsl"===a.substr(0,3))if(c=m=a.match(s),b){if(-1!==a.indexOf("="))return a.match(t)}else g=Number(c[0])%360/360,h=Number(c[1])/100,i=Number(c[2])/100,e=.5>=i?i*(h+1):i+h-i*h,d=2*i-e,c.length>3&&(c[3]=Number(a[3])),c[0]=ma(g+1/3,d,e),c[1]=ma(g,d,e),c[2]=ma(g-1/3,d,e);else c=a.match(s)||la.transparent;c[0]=Number(c[0]),c[1]=Number(c[1]),c[2]=Number(c[2]),c.length>3&&(c[3]=Number(c[3]))}else c=la.black;return b&&!m&&(d=c[0]/255,e=c[1]/255,f=c[2]/255,j=Math.max(d,e,f),k=Math.min(d,e,f),i=(j+k)/2,j===k?g=h=0:(l=j-k,h=i>.5?l/(2-j-k):l/(j+k),g=j===d?(e-f)/l+(f>e?6:0):j===e?(f-d)/l+2:(d-e)/l+4,g*=60),c[0]=g+.5|0,c[1]=100*h+.5|0,c[2]=100*i+.5|0),c},oa=function(a,b){var c,d,e,f=a.match(pa)||[],g=0,h=f.length?"":a;for(c=0;c<f.length;c++)d=f[c],e=a.substr(g,a.indexOf(d,g)-g),g+=e.length+d.length,d=na(d,b),3===d.length&&d.push(1),h+=e+(b?"hsla("+d[0]+","+d[1]+"%,"+d[2]+"%,"+d[3]:"rgba("+d.join(","))+")";return h+a.substr(g)},pa="(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#(?:[0-9a-f]{3}){1,2}\\b";for(j in la)pa+="|"+j+"\\b";pa=new RegExp(pa+")","gi"),g.colorStringFilter=function(a){var b,c=a[0]+a[1];pa.test(c)&&(b=-1!==c.indexOf("hsl(")||-1!==c.indexOf("hsla("),a[0]=oa(a[0],b),a[1]=oa(a[1],b)),pa.lastIndex=0},b.defaultStringFilter||(b.defaultStringFilter=g.colorStringFilter);var qa=function(a,b,c,d){if(null==a)return function(a){return a};var e,f=b?(a.match(pa)||[""])[0]:"",g=a.split(f).join("").match(u)||[],h=a.substr(0,a.indexOf(g[0])),i=")"===a.charAt(a.length-1)?")":"",j=-1!==a.indexOf(" ")?" ":",",k=g.length,l=k>0?g[0].replace(s,""):"";return k?e=b?function(a){var b,m,n,o;if("number"==typeof a)a+=l;else if(d&&I.test(a)){for(o=a.replace(I,"|").split("|"),n=0;n<o.length;n++)o[n]=e(o[n]);return o.join(",")}if(b=(a.match(pa)||[f])[0],m=a.split(b).join("").match(u)||[],n=m.length,k>n--)for(;++n<k;)m[n]=c?m[(n-1)/2|0]:g[n];return h+m.join(j)+j+b+i+(-1!==a.indexOf("inset")?" inset":"")}:function(a){var b,f,m;if("number"==typeof a)a+=l;else if(d&&I.test(a)){for(f=a.replace(I,"|").split("|"),m=0;m<f.length;m++)f[m]=e(f[m]);return f.join(",")}if(b=a.match(u)||[],m=b.length,k>m--)for(;++m<k;)b[m]=c?b[(m-1)/2|0]:g[m];return h+b.join(j)+i}:function(a){return a}},ra=function(a){return a=a.split(","),function(b,c,d,e,f,g,h){var i,j=(c+"").split(" ");for(h={},i=0;4>i;i++)h[a[i]]=j[i]=j[i]||j[(i-1)/2>>0];return e.parse(b,h,f,g)}},sa=(S._setPluginRatio=function(a){this.plugin.setRatio(a);for(var b,c,d,e,f,g=this.data,h=g.proxy,i=g.firstMPT,j=1e-6;i;)b=h[i.v],i.r?b=Math.round(b):j>b&&b>-j&&(b=0),i.t[i.p]=b,i=i._next;if(g.autoRotate&&(g.autoRotate.rotation=g.mod?g.mod(h.rotation,this.t):h.rotation),1===a||0===a)for(i=g.firstMPT,f=1===a?"e":"b";i;){if(c=i.t,c.type){if(1===c.type){for(e=c.xs0+c.s+c.xs1,d=1;d<c.l;d++)e+=c["xn"+d]+c["xs"+(d+1)];c[f]=e}}else c[f]=c.s+c.xs0;i=i._next}},function(a,b,c,d,e){this.t=a,this.p=b,this.v=c,this.r=e,d&&(d._prev=this,this._next=d)}),ta=(S._parseToProxy=function(a,b,c,d,e,f){var g,h,i,j,k,l=d,m={},n={},o=c._transform,p=M;for(c._transform=null,M=b,d=k=c.parse(a,b,d,e),M=p,f&&(c._transform=o,l&&(l._prev=null,l._prev&&(l._prev._next=null)));d&&d!==l;){if(d.type<=1&&(h=d.p,n[h]=d.s+d.c,m[h]=d.s,f||(j=new sa(d,"s",h,j,d.r),d.c=0),1===d.type))for(g=d.l;--g>0;)i="xn"+g,h=d.p+"_"+i,n[h]=d.data[i],m[h]=d[i],f||(j=new sa(d,i,h,j,d.rxp[i]));d=d._next}return{proxy:m,end:n,firstMPT:j,pt:k}},S.CSSPropTween=function(a,b,d,e,g,h,i,j,k,l,m){this.t=a,this.p=b,this.s=d,this.c=e,this.n=i||b,a instanceof ta||f.push(this.n),this.r=j,this.type=h||0,k&&(this.pr=k,c=!0),this.b=void 0===l?d:l,this.e=void 0===m?d+e:m,g&&(this._next=g,g._prev=this)}),ua=function(a,b,c,d,e,f){var g=new ta(a,b,c,d-c,e,-1,f);return g.b=c,g.e=g.xs0=d,g},va=g.parseComplex=function(a,b,c,d,e,f,h,i,j,l){c=c||f||"","function"==typeof d&&(d=d(r,q)),h=new ta(a,b,0,0,h,l?2:1,null,!1,i,c,d),d+="",e&&pa.test(d+c)&&(d=[c,d],g.colorStringFilter(d),c=d[0],d=d[1]);var m,n,o,p,u,v,w,x,y,z,A,B,C,D=c.split(", ").join(",").split(" "),E=d.split(", ").join(",").split(" "),F=D.length,G=k!==!1;for((-1!==d.indexOf(",")||-1!==c.indexOf(","))&&(D=D.join(" ").replace(I,", ").split(" "),E=E.join(" ").replace(I,", ").split(" "),F=D.length),F!==E.length&&(D=(f||"").split(" "),F=D.length),h.plugin=j,h.setRatio=l,pa.lastIndex=0,m=0;F>m;m++)if(p=D[m],u=E[m],x=parseFloat(p),x||0===x)h.appendXtra("",x,ia(u,x),u.replace(t,""),G&&-1!==u.indexOf("px"),!0);else if(e&&pa.test(p))B=u.indexOf(")")+1,B=")"+(B?u.substr(B):""),C=-1!==u.indexOf("hsl")&&U,p=na(p,C),u=na(u,C),y=p.length+u.length>6,y&&!U&&0===u[3]?(h["xs"+h.l]+=h.l?" transparent":"transparent",h.e=h.e.split(E[m]).join("transparent")):(U||(y=!1),C?h.appendXtra(y?"hsla(":"hsl(",p[0],ia(u[0],p[0]),",",!1,!0).appendXtra("",p[1],ia(u[1],p[1]),"%,",!1).appendXtra("",p[2],ia(u[2],p[2]),y?"%,":"%"+B,!1):h.appendXtra(y?"rgba(":"rgb(",p[0],u[0]-p[0],",",!0,!0).appendXtra("",p[1],u[1]-p[1],",",!0).appendXtra("",p[2],u[2]-p[2],y?",":B,!0),y&&(p=p.length<4?1:p[3],h.appendXtra("",p,(u.length<4?1:u[3])-p,B,!1))),pa.lastIndex=0;else if(v=p.match(s)){if(w=u.match(t),!w||w.length!==v.length)return h;for(o=0,n=0;n<v.length;n++)A=v[n],z=p.indexOf(A,o),h.appendXtra(p.substr(o,z-o),Number(A),ia(w[n],A),"",G&&"px"===p.substr(z+A.length,2),0===n),o=z+A.length;h["xs"+h.l]+=p.substr(o)}else h["xs"+h.l]+=h.l||h["xs"+h.l]?" "+u:u;if(-1!==d.indexOf("=")&&h.data){for(B=h.xs0+h.data.s,m=1;m<h.l;m++)B+=h["xs"+m]+h.data["xn"+m];h.e=B+h["xs"+m]}return h.l||(h.type=-1,h.xs0=h.e),h.xfirst||h},wa=9;for(j=ta.prototype,j.l=j.pr=0;--wa>0;)j["xn"+wa]=0,j["xs"+wa]="";j.xs0="",j._next=j._prev=j.xfirst=j.data=j.plugin=j.setRatio=j.rxp=null,j.appendXtra=function(a,b,c,d,e,f){var g=this,h=g.l;return g["xs"+h]+=f&&(h||g["xs"+h])?" "+a:a||"",c||0===h||g.plugin?(g.l++,g.type=g.setRatio?2:1,g["xs"+g.l]=d||"",h>0?(g.data["xn"+h]=b+c,g.rxp["xn"+h]=e,g["xn"+h]=b,g.plugin||(g.xfirst=new ta(g,"xn"+h,b,c,g.xfirst||g,0,g.n,e,g.pr),g.xfirst.xs0=0),g):(g.data={s:b+c},g.rxp={},g.s=b,g.c=c,g.r=e,g)):(g["xs"+h]+=b+(d||""),g)};var xa=function(a,b){b=b||{},this.p=b.prefix?Z(a)||a:a,i[a]=i[this.p]=this,this.format=b.formatter||qa(b.defaultValue,b.color,b.collapsible,b.multi),b.parser&&(this.parse=b.parser),this.clrs=b.color,this.multi=b.multi,this.keyword=b.keyword,this.dflt=b.defaultValue,this.pr=b.priority||0},ya=S._registerComplexSpecialProp=function(a,b,c){"object"!=typeof b&&(b={parser:c});var d,e,f=a.split(","),g=b.defaultValue;for(c=c||[g],d=0;d<f.length;d++)b.prefix=0===d&&b.prefix,b.defaultValue=c[d]||g,e=new xa(f[d],b)},za=S._registerPluginProp=function(a){if(!i[a]){var b=a.charAt(0).toUpperCase()+a.substr(1)+"Plugin";ya(a,{parser:function(a,c,d,e,f,g,j){var k=h.com.greensock.plugins[b];return k?(k._cssRegister(),i[d].parse(a,c,d,e,f,g,j)):(W("Error: "+b+" js file not loaded."),f)}})}};j=xa.prototype,j.parseComplex=function(a,b,c,d,e,f){var g,h,i,j,k,l,m=this.keyword;if(this.multi&&(I.test(c)||I.test(b)?(h=b.replace(I,"|").split("|"),i=c.replace(I,"|").split("|")):m&&(h=[b],i=[c])),i){for(j=i.length>h.length?i.length:h.length,g=0;j>g;g++)b=h[g]=h[g]||this.dflt,c=i[g]=i[g]||this.dflt,m&&(k=b.indexOf(m),l=c.indexOf(m),k!==l&&(-1===l?h[g]=h[g].split(m).join(""):-1===k&&(h[g]+=" "+m)));b=h.join(", "),c=i.join(", ")}return va(a,this.p,b,c,this.clrs,this.dflt,d,this.pr,e,f)},j.parse=function(a,b,c,d,f,g,h){return this.parseComplex(a.style,this.format(_(a,this.p,e,!1,this.dflt)),this.format(b),f,g)},g.registerSpecialProp=function(a,b,c){ya(a,{parser:function(a,d,e,f,g,h,i){var j=new ta(a,e,0,0,g,2,e,!1,c);return j.plugin=h,j.setRatio=b(a,d,f._tween,e),j},priority:c})},g.useSVGTransformAttr=!0;var Aa,Ba="scaleX,scaleY,scaleZ,x,y,z,skewX,skewY,rotation,rotationX,rotationY,perspective,xPercent,yPercent".split(","),Ca=Z("transform"),Da=X+"transform",Ea=Z("transformOrigin"),Fa=null!==Z("perspective"),Ga=S.Transform=function(){this.perspective=parseFloat(g.defaultTransformPerspective)||0,this.force3D=g.defaultForce3D!==!1&&Fa?g.defaultForce3D||"auto":!1},Ha=_gsScope.SVGElement,Ia=function(a,b,c){var d,e=O.createElementNS("http://www.w3.org/2000/svg",a),f=/([a-z])([A-Z])/g;for(d in c)e.setAttributeNS(null,d.replace(f,"$1-$2").toLowerCase(),c[d]);return b.appendChild(e),e},Ja=O.documentElement||{},Ka=function(){var a,b,c,d=p||/Android/i.test(T)&&!_gsScope.chrome;return O.createElementNS&&!d&&(a=Ia("svg",Ja),b=Ia("rect",a,{width:100,height:50,x:100}),c=b.getBoundingClientRect().width,b.style[Ea]="50% 50%",b.style[Ca]="scaleX(0.5)",d=c===b.getBoundingClientRect().width&&!(n&&Fa),Ja.removeChild(a)),d}(),La=function(a,b,c,d,e,f){var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v=a._gsTransform,w=Qa(a,!0);v&&(t=v.xOrigin,u=v.yOrigin),(!d||(h=d.split(" ")).length<2)&&(n=a.getBBox(),0===n.x&&0===n.y&&n.width+n.height===0&&(n={x:parseFloat(a.hasAttribute("x")?a.getAttribute("x"):a.hasAttribute("cx")?a.getAttribute("cx"):0)||0,y:parseFloat(a.hasAttribute("y")?a.getAttribute("y"):a.hasAttribute("cy")?a.getAttribute("cy"):0)||0,width:0,height:0}),b=ha(b).split(" "),h=[(-1!==b[0].indexOf("%")?parseFloat(b[0])/100*n.width:parseFloat(b[0]))+n.x,(-1!==b[1].indexOf("%")?parseFloat(b[1])/100*n.height:parseFloat(b[1]))+n.y]),c.xOrigin=k=parseFloat(h[0]),c.yOrigin=l=parseFloat(h[1]),d&&w!==Pa&&(m=w[0],n=w[1],o=w[2],p=w[3],q=w[4],r=w[5],s=m*p-n*o,s&&(i=k*(p/s)+l*(-o/s)+(o*r-p*q)/s,j=k*(-n/s)+l*(m/s)-(m*r-n*q)/s,k=c.xOrigin=h[0]=i,l=c.yOrigin=h[1]=j)),v&&(f&&(c.xOffset=v.xOffset,c.yOffset=v.yOffset,v=c),e||e!==!1&&g.defaultSmoothOrigin!==!1?(i=k-t,j=l-u,v.xOffset+=i*w[0]+j*w[2]-i,v.yOffset+=i*w[1]+j*w[3]-j):v.xOffset=v.yOffset=0),f||a.setAttribute("data-svg-origin",h.join(" "))},Ma=function(a){var b,c=P("svg",this.ownerSVGElement.getAttribute("xmlns")||"http://www.w3.org/2000/svg"),d=this.parentNode,e=this.nextSibling,f=this.style.cssText;if(Ja.appendChild(c),c.appendChild(this),this.style.display="block",a)try{b=this.getBBox(),this._originalGetBBox=this.getBBox,this.getBBox=Ma}catch(g){}else this._originalGetBBox&&(b=this._originalGetBBox());return e?d.insertBefore(this,e):d.appendChild(this),Ja.removeChild(c),this.style.cssText=f,b},Na=function(a){try{return a.getBBox()}catch(b){return Ma.call(a,!0)}},Oa=function(a){return!(!(Ha&&a.getCTM&&Na(a))||a.parentNode&&!a.ownerSVGElement)},Pa=[1,0,0,1,0,0],Qa=function(a,b){var c,d,e,f,g,h,i=a._gsTransform||new Ga,j=1e5,k=a.style;if(Ca?d=_(a,Da,null,!0):a.currentStyle&&(d=a.currentStyle.filter.match(G),d=d&&4===d.length?[d[0].substr(4),Number(d[2].substr(4)),Number(d[1].substr(4)),d[3].substr(4),i.x||0,i.y||0].join(","):""),c=!d||"none"===d||"matrix(1, 0, 0, 1, 0, 0)"===d,c&&Ca&&((h="none"===$(a).display)||!a.parentNode)&&(h&&(f=k.display,k.display="block"),a.parentNode||(g=1,Ja.appendChild(a)),d=_(a,Da,null,!0),c=!d||"none"===d||"matrix(1, 0, 0, 1, 0, 0)"===d,f?k.display=f:h&&Va(k,"display"),g&&Ja.removeChild(a)),(i.svg||a.getCTM&&Oa(a))&&(c&&-1!==(k[Ca]+"").indexOf("matrix")&&(d=k[Ca],c=0),e=a.getAttribute("transform"),c&&e&&(-1!==e.indexOf("matrix")?(d=e,c=0):-1!==e.indexOf("translate")&&(d="matrix(1,0,0,1,"+e.match(/(?:\-|\b)[\d\-\.e]+\b/gi).join(",")+")",c=0))),c)return Pa;for(e=(d||"").match(s)||[],wa=e.length;--wa>-1;)f=Number(e[wa]),e[wa]=(g=f-(f|=0))?(g*j+(0>g?-.5:.5)|0)/j+f:f;return b&&e.length>6?[e[0],e[1],e[4],e[5],e[12],e[13]]:e},Ra=S.getTransform=function(a,c,d,e){if(a._gsTransform&&d&&!e)return a._gsTransform;var f,h,i,j,k,l,m=d?a._gsTransform||new Ga:new Ga,n=m.scaleX<0,o=2e-5,p=1e5,q=Fa?parseFloat(_(a,Ea,c,!1,"0 0 0").split(" ")[2])||m.zOrigin||0:0,r=parseFloat(g.defaultTransformPerspective)||0;if(m.svg=!(!a.getCTM||!Oa(a)),m.svg&&(La(a,_(a,Ea,c,!1,"50% 50%")+"",m,a.getAttribute("data-svg-origin")),Aa=g.useSVGTransformAttr||Ka),f=Qa(a),f!==Pa){if(16===f.length){var s,t,u,v,w,x=f[0],y=f[1],z=f[2],A=f[3],B=f[4],C=f[5],D=f[6],E=f[7],F=f[8],G=f[9],H=f[10],I=f[12],J=f[13],K=f[14],M=f[11],N=Math.atan2(D,H);m.zOrigin&&(K=-m.zOrigin,I=F*K-f[12],J=G*K-f[13],K=H*K+m.zOrigin-f[14]),m.rotationX=N*L,N&&(v=Math.cos(-N),w=Math.sin(-N),s=B*v+F*w,t=C*v+G*w,u=D*v+H*w,F=B*-w+F*v,G=C*-w+G*v,H=D*-w+H*v,M=E*-w+M*v,B=s,C=t,D=u),N=Math.atan2(-z,H),m.rotationY=N*L,N&&(v=Math.cos(-N),w=Math.sin(-N),s=x*v-F*w,t=y*v-G*w,u=z*v-H*w,G=y*w+G*v,H=z*w+H*v,M=A*w+M*v,x=s,y=t,z=u),N=Math.atan2(y,x),m.rotation=N*L,N&&(v=Math.cos(-N),w=Math.sin(-N),x=x*v+B*w,t=y*v+C*w,C=y*-w+C*v,D=z*-w+D*v,y=t),m.rotationX&&Math.abs(m.rotationX)+Math.abs(m.rotation)>359.9&&(m.rotationX=m.rotation=0,m.rotationY=180-m.rotationY),m.scaleX=(Math.sqrt(x*x+y*y)*p+.5|0)/p,m.scaleY=(Math.sqrt(C*C+G*G)*p+.5|0)/p,m.scaleZ=(Math.sqrt(D*D+H*H)*p+.5|0)/p,m.rotationX||m.rotationY?m.skewX=0:(m.skewX=B||C?Math.atan2(B,C)*L+m.rotation:m.skewX||0,Math.abs(m.skewX)>90&&Math.abs(m.skewX)<270&&(n?(m.scaleX*=-1,m.skewX+=m.rotation<=0?180:-180,m.rotation+=m.rotation<=0?180:-180):(m.scaleY*=-1,m.skewX+=m.skewX<=0?180:-180))),m.perspective=M?1/(0>M?-M:M):0,m.x=I,m.y=J,m.z=K,m.svg&&(m.x-=m.xOrigin-(m.xOrigin*x-m.yOrigin*B),m.y-=m.yOrigin-(m.yOrigin*y-m.xOrigin*C))}else if(!Fa||e||!f.length||m.x!==f[4]||m.y!==f[5]||!m.rotationX&&!m.rotationY){var O=f.length>=6,P=O?f[0]:1,Q=f[1]||0,R=f[2]||0,S=O?f[3]:1;m.x=f[4]||0,m.y=f[5]||0,i=Math.sqrt(P*P+Q*Q),j=Math.sqrt(S*S+R*R),k=P||Q?Math.atan2(Q,P)*L:m.rotation||0,l=R||S?Math.atan2(R,S)*L+k:m.skewX||0,Math.abs(l)>90&&Math.abs(l)<270&&(n?(i*=-1,l+=0>=k?180:-180,k+=0>=k?180:-180):(j*=-1,l+=0>=l?180:-180)),m.scaleX=i,m.scaleY=j,m.rotation=k,m.skewX=l,Fa&&(m.rotationX=m.rotationY=m.z=0,m.perspective=r,m.scaleZ=1),m.svg&&(m.x-=m.xOrigin-(m.xOrigin*P+m.yOrigin*R),m.y-=m.yOrigin-(m.xOrigin*Q+m.yOrigin*S))}m.zOrigin=q;for(h in m)m[h]<o&&m[h]>-o&&(m[h]=0)}return d&&(a._gsTransform=m,m.svg&&(Aa&&a.style[Ca]?b.delayedCall(.001,function(){Va(a.style,Ca)}):!Aa&&a.getAttribute("transform")&&b.delayedCall(.001,function(){a.removeAttribute("transform")}))),m},Sa=function(a){var b,c,d=this.data,e=-d.rotation*K,f=e+d.skewX*K,g=1e5,h=(Math.cos(e)*d.scaleX*g|0)/g,i=(Math.sin(e)*d.scaleX*g|0)/g,j=(Math.sin(f)*-d.scaleY*g|0)/g,k=(Math.cos(f)*d.scaleY*g|0)/g,l=this.t.style,m=this.t.currentStyle;if(m){c=i,i=-j,j=-c,b=m.filter,l.filter="";var n,o,q=this.t.offsetWidth,r=this.t.offsetHeight,s="absolute"!==m.position,t="progid:DXImageTransform.Microsoft.Matrix(M11="+h+", M12="+i+", M21="+j+", M22="+k,u=d.x+q*d.xPercent/100,v=d.y+r*d.yPercent/100;if(null!=d.ox&&(n=(d.oxp?q*d.ox*.01:d.ox)-q/2,o=(d.oyp?r*d.oy*.01:d.oy)-r/2,u+=n-(n*h+o*i),v+=o-(n*j+o*k)),s?(n=q/2,o=r/2,t+=", Dx="+(n-(n*h+o*i)+u)+", Dy="+(o-(n*j+o*k)+v)+")"):t+=", sizingMethod='auto expand')",-1!==b.indexOf("DXImageTransform.Microsoft.Matrix(")?l.filter=b.replace(H,t):l.filter=t+" "+b,(0===a||1===a)&&1===h&&0===i&&0===j&&1===k&&(s&&-1===t.indexOf("Dx=0, Dy=0")||x.test(b)&&100!==parseFloat(RegExp.$1)||-1===b.indexOf(b.indexOf("Alpha"))&&l.removeAttribute("filter")),!s){var y,z,A,B=8>p?1:-1;for(n=d.ieOffsetX||0,o=d.ieOffsetY||0,d.ieOffsetX=Math.round((q-((0>h?-h:h)*q+(0>i?-i:i)*r))/2+u),d.ieOffsetY=Math.round((r-((0>k?-k:k)*r+(0>j?-j:j)*q))/2+v),wa=0;4>wa;wa++)z=fa[wa],y=m[z],c=-1!==y.indexOf("px")?parseFloat(y):aa(this.t,z,parseFloat(y),y.replace(w,""))||0,A=c!==d[z]?2>wa?-d.ieOffsetX:-d.ieOffsetY:2>wa?n-d.ieOffsetX:o-d.ieOffsetY,l[z]=(d[z]=Math.round(c-A*(0===wa||2===wa?1:B)))+"px"}}},Ta=S.set3DTransformRatio=S.setTransformRatio=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,o,p,q,r,s,t,u,v,w,x,y,z=this.data,A=this.t.style,B=z.rotation,C=z.rotationX,D=z.rotationY,E=z.scaleX,F=z.scaleY,G=z.scaleZ,H=z.x,I=z.y,J=z.z,L=z.svg,M=z.perspective,N=z.force3D,O=z.skewY,P=z.skewX;if(O&&(P+=O,B+=O),((1===a||0===a)&&"auto"===N&&(this.tween._totalTime===this.tween._totalDuration||!this.tween._totalTime)||!N)&&!J&&!M&&!D&&!C&&1===G||Aa&&L||!Fa)return void(B||P||L?(B*=K,x=P*K,y=1e5,c=Math.cos(B)*E,f=Math.sin(B)*E,d=Math.sin(B-x)*-F,g=Math.cos(B-x)*F,x&&"simple"===z.skewType&&(b=Math.tan(x-O*K),b=Math.sqrt(1+b*b),d*=b,g*=b,O&&(b=Math.tan(O*K),b=Math.sqrt(1+b*b),c*=b,f*=b)),L&&(H+=z.xOrigin-(z.xOrigin*c+z.yOrigin*d)+z.xOffset,I+=z.yOrigin-(z.xOrigin*f+z.yOrigin*g)+z.yOffset,Aa&&(z.xPercent||z.yPercent)&&(q=this.t.getBBox(),H+=.01*z.xPercent*q.width,I+=.01*z.yPercent*q.height),q=1e-6,q>H&&H>-q&&(H=0),q>I&&I>-q&&(I=0)),u=(c*y|0)/y+","+(f*y|0)/y+","+(d*y|0)/y+","+(g*y|0)/y+","+H+","+I+")",L&&Aa?this.t.setAttribute("transform","matrix("+u):A[Ca]=(z.xPercent||z.yPercent?"translate("+z.xPercent+"%,"+z.yPercent+"%) matrix(":"matrix(")+u):A[Ca]=(z.xPercent||z.yPercent?"translate("+z.xPercent+"%,"+z.yPercent+"%) matrix(":"matrix(")+E+",0,0,"+F+","+H+","+I+")");if(n&&(q=1e-4,q>E&&E>-q&&(E=G=2e-5),q>F&&F>-q&&(F=G=2e-5),!M||z.z||z.rotationX||z.rotationY||(M=0)),B||P)B*=K,r=c=Math.cos(B),s=f=Math.sin(B),P&&(B-=P*K,r=Math.cos(B),s=Math.sin(B),"simple"===z.skewType&&(b=Math.tan((P-O)*K),b=Math.sqrt(1+b*b),r*=b,s*=b,z.skewY&&(b=Math.tan(O*K),b=Math.sqrt(1+b*b),c*=b,f*=b))),d=-s,g=r;else{if(!(D||C||1!==G||M||L))return void(A[Ca]=(z.xPercent||z.yPercent?"translate("+z.xPercent+"%,"+z.yPercent+"%) translate3d(":"translate3d(")+H+"px,"+I+"px,"+J+"px)"+(1!==E||1!==F?" scale("+E+","+F+")":""));c=g=1,d=f=0}k=1,e=h=i=j=l=m=0,o=M?-1/M:0,p=z.zOrigin,q=1e-6,v=",",w="0",B=D*K,B&&(r=Math.cos(B),s=Math.sin(B),i=-s,l=o*-s,e=c*s,h=f*s,k=r,o*=r,c*=r,f*=r),B=C*K,B&&(r=Math.cos(B),s=Math.sin(B),b=d*r+e*s,t=g*r+h*s,j=k*s,m=o*s,e=d*-s+e*r,h=g*-s+h*r,k*=r,o*=r,d=b,g=t),1!==G&&(e*=G,h*=G,k*=G,o*=G),1!==F&&(d*=F,g*=F,j*=F,m*=F),1!==E&&(c*=E,f*=E,i*=E,l*=E),(p||L)&&(p&&(H+=e*-p,I+=h*-p,J+=k*-p+p),L&&(H+=z.xOrigin-(z.xOrigin*c+z.yOrigin*d)+z.xOffset,I+=z.yOrigin-(z.xOrigin*f+z.yOrigin*g)+z.yOffset),q>H&&H>-q&&(H=w),q>I&&I>-q&&(I=w),q>J&&J>-q&&(J=0)),u=z.xPercent||z.yPercent?"translate("+z.xPercent+"%,"+z.yPercent+"%) matrix3d(":"matrix3d(",u+=(q>c&&c>-q?w:c)+v+(q>f&&f>-q?w:f)+v+(q>i&&i>-q?w:i),u+=v+(q>l&&l>-q?w:l)+v+(q>d&&d>-q?w:d)+v+(q>g&&g>-q?w:g),C||D||1!==G?(u+=v+(q>j&&j>-q?w:j)+v+(q>m&&m>-q?w:m)+v+(q>e&&e>-q?w:e),u+=v+(q>h&&h>-q?w:h)+v+(q>k&&k>-q?w:k)+v+(q>o&&o>-q?w:o)+v):u+=",0,0,0,0,1,0,",u+=H+v+I+v+J+v+(M?1+-J/M:1)+")",A[Ca]=u};j=Ga.prototype,j.x=j.y=j.z=j.skewX=j.skewY=j.rotation=j.rotationX=j.rotationY=j.zOrigin=j.xPercent=j.yPercent=j.xOffset=j.yOffset=0,j.scaleX=j.scaleY=j.scaleZ=1,ya("transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,svgOrigin,transformPerspective,directionalRotation,parseTransform,force3D,skewType,xPercent,yPercent,smoothOrigin",{parser:function(a,b,c,d,f,h,i){if(d._lastParsedTransform===i)return f;d._lastParsedTransform=i;var j,k=i.scale&&"function"==typeof i.scale?i.scale:0;"function"==typeof i[c]&&(j=i[c],i[c]=b),k&&(i.scale=k(r,a));var l,m,n,o,p,s,t,u,v,w=a._gsTransform,x=a.style,y=1e-6,z=Ba.length,A=i,B={},C="transformOrigin",D=Ra(a,e,!0,A.parseTransform),E=A.transform&&("function"==typeof A.transform?A.transform(r,q):A.transform);if(d._transform=D,E&&"string"==typeof E&&Ca)m=Q.style,m[Ca]=E,m.display="block",m.position="absolute",O.body.appendChild(Q),l=Ra(Q,null,!1),D.svg&&(s=D.xOrigin,t=D.yOrigin,l.x-=D.xOffset,l.y-=D.yOffset,(A.transformOrigin||A.svgOrigin)&&(E={},La(a,ha(A.transformOrigin),E,A.svgOrigin,A.smoothOrigin,!0),s=E.xOrigin,t=E.yOrigin,l.x-=E.xOffset-D.xOffset,l.y-=E.yOffset-D.yOffset),(s||t)&&(u=Qa(Q,!0),l.x-=s-(s*u[0]+t*u[2]),l.y-=t-(s*u[1]+t*u[3]))),O.body.removeChild(Q),l.perspective||(l.perspective=D.perspective),null!=A.xPercent&&(l.xPercent=ja(A.xPercent,D.xPercent)),null!=A.yPercent&&(l.yPercent=ja(A.yPercent,D.yPercent));else if("object"==typeof A){if(l={scaleX:ja(null!=A.scaleX?A.scaleX:A.scale,D.scaleX),scaleY:ja(null!=A.scaleY?A.scaleY:A.scale,D.scaleY),scaleZ:ja(A.scaleZ,D.scaleZ),x:ja(A.x,D.x),y:ja(A.y,D.y),z:ja(A.z,D.z),xPercent:ja(A.xPercent,D.xPercent),yPercent:ja(A.yPercent,D.yPercent),perspective:ja(A.transformPerspective,D.perspective)},p=A.directionalRotation,null!=p)if("object"==typeof p)for(m in p)A[m]=p[m];else A.rotation=p;"string"==typeof A.x&&-1!==A.x.indexOf("%")&&(l.x=0,l.xPercent=ja(A.x,D.xPercent)),"string"==typeof A.y&&-1!==A.y.indexOf("%")&&(l.y=0,l.yPercent=ja(A.y,D.yPercent)),l.rotation=ka("rotation"in A?A.rotation:"shortRotation"in A?A.shortRotation+"_short":"rotationZ"in A?A.rotationZ:D.rotation,D.rotation,"rotation",B),Fa&&(l.rotationX=ka("rotationX"in A?A.rotationX:"shortRotationX"in A?A.shortRotationX+"_short":D.rotationX||0,D.rotationX,"rotationX",B),l.rotationY=ka("rotationY"in A?A.rotationY:"shortRotationY"in A?A.shortRotationY+"_short":D.rotationY||0,D.rotationY,"rotationY",B)),l.skewX=ka(A.skewX,D.skewX),l.skewY=ka(A.skewY,D.skewY)}for(Fa&&null!=A.force3D&&(D.force3D=A.force3D,o=!0),D.skewType=A.skewType||D.skewType||g.defaultSkewType,n=D.force3D||D.z||D.rotationX||D.rotationY||l.z||l.rotationX||l.rotationY||l.perspective,n||null==A.scale||(l.scaleZ=1);--z>-1;)v=Ba[z],E=l[v]-D[v],(E>y||-y>E||null!=A[v]||null!=M[v])&&(o=!0,f=new ta(D,v,D[v],E,f),v in B&&(f.e=B[v]),f.xs0=0,f.plugin=h,d._overwriteProps.push(f.n));return E=A.transformOrigin,D.svg&&(E||A.svgOrigin)&&(s=D.xOffset,t=D.yOffset,La(a,ha(E),l,A.svgOrigin,A.smoothOrigin),f=ua(D,"xOrigin",(w?D:l).xOrigin,l.xOrigin,f,C),f=ua(D,"yOrigin",(w?D:l).yOrigin,l.yOrigin,f,C),(s!==D.xOffset||t!==D.yOffset)&&(f=ua(D,"xOffset",w?s:D.xOffset,D.xOffset,f,C),f=ua(D,"yOffset",w?t:D.yOffset,D.yOffset,f,C)),E="0px 0px"),(E||Fa&&n&&D.zOrigin)&&(Ca?(o=!0,v=Ea,E=(E||_(a,v,e,!1,"50% 50%"))+"",f=new ta(x,v,0,0,f,-1,C),f.b=x[v],f.plugin=h,Fa?(m=D.zOrigin,E=E.split(" "),D.zOrigin=(E.length>2&&(0===m||"0px"!==E[2])?parseFloat(E[2]):m)||0,f.xs0=f.e=E[0]+" "+(E[1]||"50%")+" 0px",f=new ta(D,"zOrigin",0,0,f,-1,f.n),f.b=m,f.xs0=f.e=D.zOrigin):f.xs0=f.e=E):ha(E+"",D)),o&&(d._transformType=D.svg&&Aa||!n&&3!==this._transformType?2:3),j&&(i[c]=j),k&&(i.scale=k),f},prefix:!0}),ya("boxShadow",{defaultValue:"0px 0px 0px 0px #999",prefix:!0,color:!0,multi:!0,keyword:"inset"}),ya("borderRadius",{defaultValue:"0px",parser:function(a,b,c,f,g,h){b=this.format(b);var i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y=["borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius"],z=a.style;for(q=parseFloat(a.offsetWidth),r=parseFloat(a.offsetHeight),i=b.split(" "),j=0;j<y.length;j++)this.p.indexOf("border")&&(y[j]=Z(y[j])),m=l=_(a,y[j],e,!1,"0px"),-1!==m.indexOf(" ")&&(l=m.split(" "),m=l[0],l=l[1]),n=k=i[j],o=parseFloat(m),t=m.substr((o+"").length),u="="===n.charAt(1),u?(p=parseInt(n.charAt(0)+"1",10),n=n.substr(2),p*=parseFloat(n),s=n.substr((p+"").length-(0>p?1:0))||""):(p=parseFloat(n),s=n.substr((p+"").length)),""===s&&(s=d[c]||t),s!==t&&(v=aa(a,"borderLeft",o,t),w=aa(a,"borderTop",o,t),"%"===s?(m=v/q*100+"%",l=w/r*100+"%"):"em"===s?(x=aa(a,"borderLeft",1,"em"),m=v/x+"em",l=w/x+"em"):(m=v+"px",l=w+"px"),u&&(n=parseFloat(m)+p+s,k=parseFloat(l)+p+s)),g=va(z,y[j],m+" "+l,n+" "+k,!1,"0px",g);return g},prefix:!0,formatter:qa("0px 0px 0px 0px",!1,!0)}),ya("borderBottomLeftRadius,borderBottomRightRadius,borderTopLeftRadius,borderTopRightRadius",{defaultValue:"0px",parser:function(a,b,c,d,f,g){return va(a.style,c,this.format(_(a,c,e,!1,"0px 0px")),this.format(b),!1,"0px",f)},prefix:!0,formatter:qa("0px 0px",!1,!0)}),ya("backgroundPosition",{defaultValue:"0 0",parser:function(a,b,c,d,f,g){var h,i,j,k,l,m,n="background-position",o=e||$(a,null),q=this.format((o?p?o.getPropertyValue(n+"-x")+" "+o.getPropertyValue(n+"-y"):o.getPropertyValue(n):a.currentStyle.backgroundPositionX+" "+a.currentStyle.backgroundPositionY)||"0 0"),r=this.format(b);if(-1!==q.indexOf("%")!=(-1!==r.indexOf("%"))&&r.split(",").length<2&&(m=_(a,"backgroundImage").replace(D,""),m&&"none"!==m)){for(h=q.split(" "),i=r.split(" "),R.setAttribute("src",m),j=2;--j>-1;)q=h[j],k=-1!==q.indexOf("%"),k!==(-1!==i[j].indexOf("%"))&&(l=0===j?a.offsetWidth-R.width:a.offsetHeight-R.height,h[j]=k?parseFloat(q)/100*l+"px":parseFloat(q)/l*100+"%");q=h.join(" ")}return this.parseComplex(a.style,q,r,f,g)},formatter:ha}),ya("backgroundSize",{defaultValue:"0 0",formatter:function(a){return a+="",ha(-1===a.indexOf(" ")?a+" "+a:a)}}),ya("perspective",{defaultValue:"0px",prefix:!0}),ya("perspectiveOrigin",{defaultValue:"50% 50%",prefix:!0}),ya("transformStyle",{prefix:!0}),ya("backfaceVisibility",{prefix:!0}),ya("userSelect",{prefix:!0}),ya("margin",{parser:ra("marginTop,marginRight,marginBottom,marginLeft")}),ya("padding",{parser:ra("paddingTop,paddingRight,paddingBottom,paddingLeft")}),ya("clip",{defaultValue:"rect(0px,0px,0px,0px)",parser:function(a,b,c,d,f,g){var h,i,j;return 9>p?(i=a.currentStyle,j=8>p?" ":",",h="rect("+i.clipTop+j+i.clipRight+j+i.clipBottom+j+i.clipLeft+")",
b=this.format(b).split(",").join(j)):(h=this.format(_(a,this.p,e,!1,this.dflt)),b=this.format(b)),this.parseComplex(a.style,h,b,f,g)}}),ya("textShadow",{defaultValue:"0px 0px 0px #999",color:!0,multi:!0}),ya("autoRound,strictUnits",{parser:function(a,b,c,d,e){return e}}),ya("border",{defaultValue:"0px solid #000",parser:function(a,b,c,d,f,g){var h=_(a,"borderTopWidth",e,!1,"0px"),i=this.format(b).split(" "),j=i[0].replace(w,"");return"px"!==j&&(h=parseFloat(h)/aa(a,"borderTopWidth",1,j)+j),this.parseComplex(a.style,this.format(h+" "+_(a,"borderTopStyle",e,!1,"solid")+" "+_(a,"borderTopColor",e,!1,"#000")),i.join(" "),f,g)},color:!0,formatter:function(a){var b=a.split(" ");return b[0]+" "+(b[1]||"solid")+" "+(a.match(pa)||["#000"])[0]}}),ya("borderWidth",{parser:ra("borderTopWidth,borderRightWidth,borderBottomWidth,borderLeftWidth")}),ya("float,cssFloat,styleFloat",{parser:function(a,b,c,d,e,f){var g=a.style,h="cssFloat"in g?"cssFloat":"styleFloat";return new ta(g,h,0,0,e,-1,c,!1,0,g[h],b)}});var Ua=function(a){var b,c=this.t,d=c.filter||_(this.data,"filter")||"",e=this.s+this.c*a|0;100===e&&(-1===d.indexOf("atrix(")&&-1===d.indexOf("radient(")&&-1===d.indexOf("oader(")?(c.removeAttribute("filter"),b=!_(this.data,"filter")):(c.filter=d.replace(z,""),b=!0)),b||(this.xn1&&(c.filter=d=d||"alpha(opacity="+e+")"),-1===d.indexOf("pacity")?0===e&&this.xn1||(c.filter=d+" alpha(opacity="+e+")"):c.filter=d.replace(x,"opacity="+e))};ya("opacity,alpha,autoAlpha",{defaultValue:"1",parser:function(a,b,c,d,f,g){var h=parseFloat(_(a,"opacity",e,!1,"1")),i=a.style,j="autoAlpha"===c;return"string"==typeof b&&"="===b.charAt(1)&&(b=("-"===b.charAt(0)?-1:1)*parseFloat(b.substr(2))+h),j&&1===h&&"hidden"===_(a,"visibility",e)&&0!==b&&(h=0),U?f=new ta(i,"opacity",h,b-h,f):(f=new ta(i,"opacity",100*h,100*(b-h),f),f.xn1=j?1:0,i.zoom=1,f.type=2,f.b="alpha(opacity="+f.s+")",f.e="alpha(opacity="+(f.s+f.c)+")",f.data=a,f.plugin=g,f.setRatio=Ua),j&&(f=new ta(i,"visibility",0,0,f,-1,null,!1,0,0!==h?"inherit":"hidden",0===b?"hidden":"inherit"),f.xs0="inherit",d._overwriteProps.push(f.n),d._overwriteProps.push(c)),f}});var Va=function(a,b){b&&(a.removeProperty?(("ms"===b.substr(0,2)||"webkit"===b.substr(0,6))&&(b="-"+b),a.removeProperty(b.replace(B,"-$1").toLowerCase())):a.removeAttribute(b))},Wa=function(a){if(this.t._gsClassPT=this,1===a||0===a){this.t.setAttribute("class",0===a?this.b:this.e);for(var b=this.data,c=this.t.style;b;)b.v?c[b.p]=b.v:Va(c,b.p),b=b._next;1===a&&this.t._gsClassPT===this&&(this.t._gsClassPT=null)}else this.t.getAttribute("class")!==this.e&&this.t.setAttribute("class",this.e)};ya("className",{parser:function(a,b,d,f,g,h,i){var j,k,l,m,n,o=a.getAttribute("class")||"",p=a.style.cssText;if(g=f._classNamePT=new ta(a,d,0,0,g,2),g.setRatio=Wa,g.pr=-11,c=!0,g.b=o,k=ca(a,e),l=a._gsClassPT){for(m={},n=l.data;n;)m[n.p]=1,n=n._next;l.setRatio(1)}return a._gsClassPT=g,g.e="="!==b.charAt(1)?b:o.replace(new RegExp("(?:\\s|^)"+b.substr(2)+"(?![\\w-])"),"")+("+"===b.charAt(0)?" "+b.substr(2):""),a.setAttribute("class",g.e),j=da(a,k,ca(a),i,m),a.setAttribute("class",o),g.data=j.firstMPT,a.style.cssText=p,g=g.xfirst=f.parse(a,j.difs,g,h)}});var Xa=function(a){if((1===a||0===a)&&this.data._totalTime===this.data._totalDuration&&"isFromStart"!==this.data.data){var b,c,d,e,f,g=this.t.style,h=i.transform.parse;if("all"===this.e)g.cssText="",e=!0;else for(b=this.e.split(" ").join("").split(","),d=b.length;--d>-1;)c=b[d],i[c]&&(i[c].parse===h?e=!0:c="transformOrigin"===c?Ea:i[c].p),Va(g,c);e&&(Va(g,Ca),f=this.t._gsTransform,f&&(f.svg&&(this.t.removeAttribute("data-svg-origin"),this.t.removeAttribute("transform")),delete this.t._gsTransform))}};for(ya("clearProps",{parser:function(a,b,d,e,f){return f=new ta(a,d,0,0,f,2),f.setRatio=Xa,f.e=b,f.pr=-10,f.data=e._tween,c=!0,f}}),j="bezier,throwProps,physicsProps,physics2D".split(","),wa=j.length;wa--;)za(j[wa]);j=g.prototype,j._firstPT=j._lastParsedTransform=j._transform=null,j._onInitTween=function(a,b,h,j){if(!a.nodeType)return!1;this._target=q=a,this._tween=h,this._vars=b,r=j,k=b.autoRound,c=!1,d=b.suffixMap||g.suffixMap,e=$(a,""),f=this._overwriteProps;var n,p,s,t,u,v,w,x,z,A=a.style;if(l&&""===A.zIndex&&(n=_(a,"zIndex",e),("auto"===n||""===n)&&this._addLazySet(A,"zIndex",0)),"string"==typeof b&&(t=A.cssText,n=ca(a,e),A.cssText=t+";"+b,n=da(a,n,ca(a)).difs,!U&&y.test(b)&&(n.opacity=parseFloat(RegExp.$1)),b=n,A.cssText=t),b.className?this._firstPT=p=i.className.parse(a,b.className,"className",this,null,null,b):this._firstPT=p=this.parse(a,b,null),this._transformType){for(z=3===this._transformType,Ca?m&&(l=!0,""===A.zIndex&&(w=_(a,"zIndex",e),("auto"===w||""===w)&&this._addLazySet(A,"zIndex",0)),o&&this._addLazySet(A,"WebkitBackfaceVisibility",this._vars.WebkitBackfaceVisibility||(z?"visible":"hidden"))):A.zoom=1,s=p;s&&s._next;)s=s._next;x=new ta(a,"transform",0,0,null,2),this._linkCSSP(x,null,s),x.setRatio=Ca?Ta:Sa,x.data=this._transform||Ra(a,e,!0),x.tween=h,x.pr=-1,f.pop()}if(c){for(;p;){for(v=p._next,s=t;s&&s.pr>p.pr;)s=s._next;(p._prev=s?s._prev:u)?p._prev._next=p:t=p,(p._next=s)?s._prev=p:u=p,p=v}this._firstPT=t}return!0},j.parse=function(a,b,c,f){var g,h,j,l,m,n,o,p,s,t,u=a.style;for(g in b)n=b[g],"function"==typeof n&&(n=n(r,q)),h=i[g],h?c=h.parse(a,n,g,this,c,f,b):(m=_(a,g,e)+"",s="string"==typeof n,"color"===g||"fill"===g||"stroke"===g||-1!==g.indexOf("Color")||s&&A.test(n)?(s||(n=na(n),n=(n.length>3?"rgba(":"rgb(")+n.join(",")+")"),c=va(u,g,m,n,!0,"transparent",c,0,f)):s&&J.test(n)?c=va(u,g,m,n,!0,null,c,0,f):(j=parseFloat(m),o=j||0===j?m.substr((j+"").length):"",(""===m||"auto"===m)&&("width"===g||"height"===g?(j=ga(a,g,e),o="px"):"left"===g||"top"===g?(j=ba(a,g,e),o="px"):(j="opacity"!==g?0:1,o="")),t=s&&"="===n.charAt(1),t?(l=parseInt(n.charAt(0)+"1",10),n=n.substr(2),l*=parseFloat(n),p=n.replace(w,"")):(l=parseFloat(n),p=s?n.replace(w,""):""),""===p&&(p=g in d?d[g]:o),n=l||0===l?(t?l+j:l)+p:b[g],o!==p&&""!==p&&(l||0===l)&&j&&(j=aa(a,g,j,o),"%"===p?(j/=aa(a,g,100,"%")/100,b.strictUnits!==!0&&(m=j+"%")):"em"===p||"rem"===p||"vw"===p||"vh"===p?j/=aa(a,g,1,p):"px"!==p&&(l=aa(a,g,l,p),p="px"),t&&(l||0===l)&&(n=l+j+p)),t&&(l+=j),!j&&0!==j||!l&&0!==l?void 0!==u[g]&&(n||n+""!="NaN"&&null!=n)?(c=new ta(u,g,l||j||0,0,c,-1,g,!1,0,m,n),c.xs0="none"!==n||"display"!==g&&-1===g.indexOf("Style")?n:m):W("invalid "+g+" tween value: "+b[g]):(c=new ta(u,g,j,l-j,c,0,g,k!==!1&&("px"===p||"zIndex"===g),0,m,n),c.xs0=p))),f&&c&&!c.plugin&&(c.plugin=f);return c},j.setRatio=function(a){var b,c,d,e=this._firstPT,f=1e-6;if(1!==a||this._tween._time!==this._tween._duration&&0!==this._tween._time)if(a||this._tween._time!==this._tween._duration&&0!==this._tween._time||this._tween._rawPrevTime===-1e-6)for(;e;){if(b=e.c*a+e.s,e.r?b=Math.round(b):f>b&&b>-f&&(b=0),e.type)if(1===e.type)if(d=e.l,2===d)e.t[e.p]=e.xs0+b+e.xs1+e.xn1+e.xs2;else if(3===d)e.t[e.p]=e.xs0+b+e.xs1+e.xn1+e.xs2+e.xn2+e.xs3;else if(4===d)e.t[e.p]=e.xs0+b+e.xs1+e.xn1+e.xs2+e.xn2+e.xs3+e.xn3+e.xs4;else if(5===d)e.t[e.p]=e.xs0+b+e.xs1+e.xn1+e.xs2+e.xn2+e.xs3+e.xn3+e.xs4+e.xn4+e.xs5;else{for(c=e.xs0+b+e.xs1,d=1;d<e.l;d++)c+=e["xn"+d]+e["xs"+(d+1)];e.t[e.p]=c}else-1===e.type?e.t[e.p]=e.xs0:e.setRatio&&e.setRatio(a);else e.t[e.p]=b+e.xs0;e=e._next}else for(;e;)2!==e.type?e.t[e.p]=e.b:e.setRatio(a),e=e._next;else for(;e;){if(2!==e.type)if(e.r&&-1!==e.type)if(b=Math.round(e.s+e.c),e.type){if(1===e.type){for(d=e.l,c=e.xs0+b+e.xs1,d=1;d<e.l;d++)c+=e["xn"+d]+e["xs"+(d+1)];e.t[e.p]=c}}else e.t[e.p]=b+e.xs0;else e.t[e.p]=e.e;else e.setRatio(a);e=e._next}},j._enableTransforms=function(a){this._transform=this._transform||Ra(this._target,e,!0),this._transformType=this._transform.svg&&Aa||!a&&3!==this._transformType?2:3};var Ya=function(a){this.t[this.p]=this.e,this.data._linkCSSP(this,this._next,null,!0)};j._addLazySet=function(a,b,c){var d=this._firstPT=new ta(a,b,0,0,this._firstPT,2);d.e=c,d.setRatio=Ya,d.data=this},j._linkCSSP=function(a,b,c,d){return a&&(b&&(b._prev=a),a._next&&(a._next._prev=a._prev),a._prev?a._prev._next=a._next:this._firstPT===a&&(this._firstPT=a._next,d=!0),c?c._next=a:d||null!==this._firstPT||(this._firstPT=a),a._next=b,a._prev=c),a},j._mod=function(a){for(var b=this._firstPT;b;)"function"==typeof a[b.p]&&a[b.p]===Math.round&&(b.r=1),b=b._next},j._kill=function(b){var c,d,e,f=b;if(b.autoAlpha||b.alpha){f={};for(d in b)f[d]=b[d];f.opacity=1,f.autoAlpha&&(f.visibility=1)}for(b.className&&(c=this._classNamePT)&&(e=c.xfirst,e&&e._prev?this._linkCSSP(e._prev,c._next,e._prev._prev):e===this._firstPT&&(this._firstPT=c._next),c._next&&this._linkCSSP(c._next,c._next._next,e._prev),this._classNamePT=null),c=this._firstPT;c;)c.plugin&&c.plugin!==d&&c.plugin._kill&&(c.plugin._kill(b),d=c.plugin),c=c._next;return a.prototype._kill.call(this,f)};var Za=function(a,b,c){var d,e,f,g;if(a.slice)for(e=a.length;--e>-1;)Za(a[e],b,c);else for(d=a.childNodes,e=d.length;--e>-1;)f=d[e],g=f.type,f.style&&(b.push(ca(f)),c&&c.push(f)),1!==g&&9!==g&&11!==g||!f.childNodes.length||Za(f,b,c)};return g.cascadeTo=function(a,c,d){var e,f,g,h,i=b.to(a,c,d),j=[i],k=[],l=[],m=[],n=b._internals.reservedProps;for(a=i._targets||i.target,Za(a,k,m),i.render(c,!0,!0),Za(a,l),i.render(0,!0,!0),i._enabled(!0),e=m.length;--e>-1;)if(f=da(m[e],k[e],l[e]),f.firstMPT){f=f.difs;for(g in d)n[g]&&(f[g]=d[g]);h={};for(g in f)h[g]=k[e][g];j.push(b.fromTo(m[e],c,h,f))}return j},a.activate([g]),g},!0)}),_gsScope._gsDefine&&_gsScope._gsQueue.pop()(),function(a){"use strict";var b=function(){return(_gsScope.GreenSockGlobals||_gsScope)[a]};"function"==typeof define&&define.amd?define(["TweenLite"],b):"undefined"!=typeof module&&module.exports&&(require("../TweenLite.js"),module.exports=b())}("CSSPlugin");


/* SPLIT TEXT UTIL */
/*!
 * VERSION: 0.5.6
 * DATE: 2017-01-17
 * UPDATES AND DOCS AT: http://greensock.com
 *
 * @license Copyright (c) 2008-2017, GreenSock. All rights reserved.
 * SplitText is a Club GreenSock membership benefit; You must have a valid membership to use
 * this code without violating the terms of use. Visit http://greensock.com/club/ to sign up or get more details.
 * This work is subject to the software agreement that was issued with your membership.
 * 
 * @author: Jack Doyle, jack@greensock.com
 */
var _gsScope="undefined"!=typeof module&&module.exports&&"undefined"!=typeof global?global:this||window;!function(a){"use strict";var b=a.GreenSockGlobals||a,c=function(a){var c,d=a.split("."),e=b;for(c=0;c<d.length;c++)e[d[c]]=e=e[d[c]]||{};return e},d=c("com.greensock.utils"),e=function(a){var b=a.nodeType,c="";if(1===b||9===b||11===b){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===b||4===b)return a.nodeValue;return c},f=document,g=f.defaultView?f.defaultView.getComputedStyle:function(){},h=/([A-Z])/g,i=function(a,b,c,d){var e;return(c=c||g(a,null))?(a=c.getPropertyValue(b.replace(h,"-$1").toLowerCase()),e=a||c.length?a:c[b]):a.currentStyle&&(c=a.currentStyle,e=c[b]),d?e:parseInt(e,10)||0},j=function(a){return a.length&&a[0]&&(a[0].nodeType&&a[0].style&&!a.nodeType||a[0].length&&a[0][0])?!0:!1},k=function(a){var b,c,d,e=[],f=a.length;for(b=0;f>b;b++)if(c=a[b],j(c))for(d=c.length,d=0;d<c.length;d++)e.push(c[d]);else e.push(c);return e},l=/(?:\r|\n|\t\t)/g,m=/(?:\s\s+)/g,n=55296,o=56319,p=56320,q=127462,r=127487,s=127995,t=127999,u=function(a){return(a.charCodeAt(0)-n<<10)+(a.charCodeAt(1)-p)+65536},v=f.all&&!f.addEventListener,w=" style='position:relative;display:inline-block;"+(v?"*display:inline;*zoom:1;'":"'"),x=function(a,b){a=a||"";var c=-1!==a.indexOf("++"),d=1;return c&&(a=a.split("++").join("")),function(){return"<"+b+w+(a?" class='"+a+(c?d++:"")+"'>":">")}},y=d.SplitText=b.SplitText=function(a,b){if("string"==typeof a&&(a=y.selector(a)),!a)throw"cannot split a null element.";this.elements=j(a)?k(a):[a],this.chars=[],this.words=[],this.lines=[],this._originals=[],this.vars=b||{},this.split(b)},z=function(a,b,c){var d=a.nodeType;if(1===d||9===d||11===d)for(a=a.firstChild;a;a=a.nextSibling)z(a,b,c);else(3===d||4===d)&&(a.nodeValue=a.nodeValue.split(b).join(c))},A=function(a,b){for(var c=b.length;--c>-1;)a.push(b[c])},B=function(a){var b,c=[],d=a.length;for(b=0;b!==d;c.push(a[b++]));return c},C=function(a,b,c){for(var d;a&&a!==b;){if(d=a._next||a.nextSibling)return d.textContent.charAt(0)===c;a=a.parentNode||a._parent}return!1},D=function(a){var b,c,d=B(a.childNodes),e=d.length;for(b=0;e>b;b++)c=d[b],c._isSplit?D(c):(b&&3===c.previousSibling.nodeType?c.previousSibling.nodeValue+=3===c.nodeType?c.nodeValue:c.firstChild.nodeValue:3!==c.nodeType&&a.insertBefore(c.firstChild,c),a.removeChild(c))},E=function(a,b,c,d,e,h,j){var k,l,m,n,o,p,q,r,s,t,u,v,w=g(a),x=i(a,"paddingLeft",w),y=-999,B=i(a,"borderBottomWidth",w)+i(a,"borderTopWidth",w),E=i(a,"borderLeftWidth",w)+i(a,"borderRightWidth",w),F=i(a,"paddingTop",w)+i(a,"paddingBottom",w),G=i(a,"paddingLeft",w)+i(a,"paddingRight",w),H=.2*i(a,"fontSize"),I=i(a,"textAlign",w,!0),J=[],K=[],L=[],M=b.wordDelimiter||" ",N=b.span?"span":"div",O=b.type||b.split||"chars,words,lines",P=e&&-1!==O.indexOf("lines")?[]:null,Q=-1!==O.indexOf("words"),R=-1!==O.indexOf("chars"),S="absolute"===b.position||b.absolute===!0,T=b.linesClass,U=-1!==(T||"").indexOf("++"),V=[];for(P&&1===a.children.length&&a.children[0]._isSplit&&(a=a.children[0]),U&&(T=T.split("++").join("")),l=a.getElementsByTagName("*"),m=l.length,o=[],k=0;m>k;k++)o[k]=l[k];if(P||S)for(k=0;m>k;k++)n=o[k],p=n.parentNode===a,(p||S||R&&!Q)&&(v=n.offsetTop,P&&p&&Math.abs(v-y)>H&&"BR"!==n.nodeName&&(q=[],P.push(q),y=v),S&&(n._x=n.offsetLeft,n._y=v,n._w=n.offsetWidth,n._h=n.offsetHeight),P&&((n._isSplit&&p||!R&&p||Q&&p||!Q&&n.parentNode.parentNode===a&&!n.parentNode._isSplit)&&(q.push(n),n._x-=x,C(n,a,M)&&(n._wordEnd=!0)),"BR"===n.nodeName&&n.nextSibling&&"BR"===n.nextSibling.nodeName&&P.push([])));for(k=0;m>k;k++)n=o[k],p=n.parentNode===a,"BR"!==n.nodeName?(S&&(s=n.style,Q||p||(n._x+=n.parentNode._x,n._y+=n.parentNode._y),s.left=n._x+"px",s.top=n._y+"px",s.position="absolute",s.display="block",s.width=n._w+1+"px",s.height=n._h+"px"),!Q&&R?n._isSplit?(n._next=n.nextSibling,n.parentNode.appendChild(n)):n.parentNode._isSplit?(n._parent=n.parentNode,!n.previousSibling&&n.firstChild&&(n.firstChild._isFirst=!0),n.nextSibling&&" "===n.nextSibling.textContent&&!n.nextSibling.nextSibling&&V.push(n.nextSibling),n._next=n.nextSibling&&n.nextSibling._isFirst?null:n.nextSibling,n.parentNode.removeChild(n),o.splice(k--,1),m--):p||(v=!n.nextSibling&&C(n.parentNode,a,M),n.parentNode._parent&&n.parentNode._parent.appendChild(n),v&&n.parentNode.appendChild(f.createTextNode(" ")),b.span&&(n.style.display="inline"),J.push(n)):n.parentNode._isSplit&&!n._isSplit&&""!==n.innerHTML?K.push(n):R&&!n._isSplit&&(b.span&&(n.style.display="inline"),J.push(n))):P||S?(n.parentNode&&n.parentNode.removeChild(n),o.splice(k--,1),m--):Q||a.appendChild(n);for(k=V.length;--k>-1;)V[k].parentNode.removeChild(V[k]);if(P){for(S&&(t=f.createElement(N),a.appendChild(t),u=t.offsetWidth+"px",v=t.offsetParent===a?0:a.offsetLeft,a.removeChild(t)),s=a.style.cssText,a.style.cssText="display:none;";a.firstChild;)a.removeChild(a.firstChild);for(r=" "===M&&(!S||!Q&&!R),k=0;k<P.length;k++){for(q=P[k],t=f.createElement(N),t.style.cssText="display:block;text-align:"+I+";position:"+(S?"absolute;":"relative;"),T&&(t.className=T+(U?k+1:"")),L.push(t),m=q.length,l=0;m>l;l++)"BR"!==q[l].nodeName&&(n=q[l],t.appendChild(n),r&&n._wordEnd&&t.appendChild(f.createTextNode(" ")),S&&(0===l&&(t.style.top=n._y+"px",t.style.left=x+v+"px"),n.style.top="0px",v&&(n.style.left=n._x-v+"px")));0===m?t.innerHTML="&nbsp;":Q||R||(D(t),z(t,String.fromCharCode(160)," ")),S&&(t.style.width=u,t.style.height=n._h+"px"),a.appendChild(t)}a.style.cssText=s}S&&(j>a.clientHeight&&(a.style.height=j-F+"px",a.clientHeight<j&&(a.style.height=j+B+"px")),h>a.clientWidth&&(a.style.width=h-G+"px",a.clientWidth<h&&(a.style.width=h+E+"px"))),A(c,J),A(d,K),A(e,L)},F=function(a,b,c,d){var g,h,i,j,k,p,v,w,x,y=b.span?"span":"div",A=b.type||b.split||"chars,words,lines",B=(-1!==A.indexOf("words"),-1!==A.indexOf("chars")),C="absolute"===b.position||b.absolute===!0,D=b.wordDelimiter||" ",E=" "!==D?"":C?"&#173; ":" ",F=b.span?"</span>":"</div>",G=!0,H=f.createElement("div"),I=a.parentNode;for(I.insertBefore(H,a),H.textContent=a.nodeValue,I.removeChild(a),a=H,g=e(a),v=-1!==g.indexOf("<"),b.reduceWhiteSpace!==!1&&(g=g.replace(m," ").replace(l,"")),v&&(g=g.split("<").join("{{LT}}")),k=g.length,h=(" "===g.charAt(0)?E:"")+c(),i=0;k>i;i++)if(p=g.charAt(i),p===D&&g.charAt(i-1)!==D&&i){for(h+=G?F:"",G=!1;g.charAt(i+1)===D;)h+=E,i++;i===k-1?h+=E:")"!==g.charAt(i+1)&&(h+=E+c(),G=!0)}else"{"===p&&"{{LT}}"===g.substr(i,6)?(h+=B?d()+"{{LT}}</"+y+">":"{{LT}}",i+=5):p.charCodeAt(0)>=n&&p.charCodeAt(0)<=o||g.charCodeAt(i+1)>=65024&&g.charCodeAt(i+1)<=65039?(w=u(g.substr(i,2)),x=u(g.substr(i+2,2)),j=w>=q&&r>=w&&x>=q&&r>=x||x>=s&&t>=x?4:2,h+=B&&" "!==p?d()+g.substr(i,j)+"</"+y+">":g.substr(i,j),i+=j-1):h+=B&&" "!==p?d()+p+"</"+y+">":p;a.outerHTML=h+(G?F:""),v&&z(I,"{{LT}}","<")},G=function(a,b,c,d){var e,f,g=B(a.childNodes),h=g.length,j="absolute"===b.position||b.absolute===!0;if(3!==a.nodeType||h>1){for(b.absolute=!1,e=0;h>e;e++)f=g[e],(3!==f.nodeType||/\S+/.test(f.nodeValue))&&(j&&3!==f.nodeType&&"inline"===i(f,"display",null,!0)&&(f.style.display="inline-block",f.style.position="relative"),f._isSplit=!0,G(f,b,c,d));return b.absolute=j,void(a._isSplit=!0)}F(a,b,c,d)},H=y.prototype;H.split=function(a){this.isSplit&&this.revert(),this.vars=a=a||this.vars,this._originals.length=this.chars.length=this.words.length=this.lines.length=0;for(var b,c,d,e=this.elements.length,f=a.span?"span":"div",g=("absolute"===a.position||a.absolute===!0,x(a.wordsClass,f)),h=x(a.charsClass,f);--e>-1;)d=this.elements[e],this._originals[e]=d.innerHTML,b=d.clientHeight,c=d.clientWidth,G(d,a,g,h),E(d,a,this.chars,this.words,this.lines,c,b);return this.chars.reverse(),this.words.reverse(),this.lines.reverse(),this.isSplit=!0,this},H.revert=function(){if(!this._originals)throw"revert() call wasn't scoped properly.";for(var a=this._originals.length;--a>-1;)this.elements[a].innerHTML=this._originals[a];return this.chars=[],this.words=[],this.lines=[],this.isSplit=!1,this},y.selector=a.$||a.jQuery||function(b){var c=a.$||a.jQuery;return c?(y.selector=c,c(b)):"undefined"==typeof document?b:document.querySelectorAll?document.querySelectorAll(b):document.getElementById("#"===b.charAt(0)?b.substr(1):b)},y.version="0.5.6"}(_gsScope),function(a){"use strict";var b=function(){return(_gsScope.GreenSockGlobals||_gsScope)[a]};"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports&&(module.exports=b())}("SplitText");


try{
	window.GreenSockGlobals = null;
	window._gsQueue = null;
	window._gsDefine = null;

	delete(window.GreenSockGlobals);
	delete(window._gsQueue);
	delete(window._gsDefine);	
   } catch(e) {}

try{
	window.GreenSockGlobals = oldgs;
	window._gsQueue = oldgs_queue;
	} catch(e) {}

if (window.tplogs==true)
	try {
		console.groupEnd();
	} catch(e) {}

(function(e,t){
		e.waitForImages={hasImageProperties:["backgroundImage","listStyleImage","borderImage","borderCornerImage"]};e.expr[":"].uncached=function(t){var n=document.createElement("img");n.src=t.src;return e(t).is('img[src!=""]')&&!n.complete};e.fn.waitForImages=function(t,n,r){if(e.isPlainObject(arguments[0])){n=t.each;r=t.waitForAll;t=t.finished}t=t||e.noop;n=n||e.noop;r=!!r;if(!e.isFunction(t)||!e.isFunction(n)){throw new TypeError("An invalid callback was supplied.")}return this.each(function(){var i=e(this),s=[];if(r){var o=e.waitForImages.hasImageProperties||[],u=/url\((['"]?)(.*?)\1\)/g;i.find("*").each(function(){var t=e(this);if(t.is("img:uncached")){s.push({src:t.attr("src"),element:t[0]})}e.each(o,function(e,n){var r=t.css(n);if(!r){return true}var i;while(i=u.exec(r)){s.push({src:i[2],element:t[0]})}})})}else{i.find("img:uncached").each(function(){s.push({src:this.src,element:this})})}var f=s.length,l=0;if(f==0){t.call(i[0])}e.each(s,function(r,s){var o=new Image;e(o).bind("load error",function(e){l++;n.call(s.element,l,f,e.type=="load");if(l==f){t.call(i[0]);return false}});o.src=s.src})})};		
})(jQuery);
// source --> https://www.megasite.com.tr/wp-content/plugins/revslider/public/assets/js/jquery.themepunch.revolution.min.js?ver=5.4.5 
/**************************************************************************
 * jquery.themepunch.revolution.js - jQuery Plugin for Revolution Slider
 * @version: 5.4.5 (17.05.2017)
 * @requires jQuery v1.7 or later (tested on 1.9)
 * @author ThemePunch
**************************************************************************/
!function(jQuery,undefined){"use strict";var version={core:"5.4.5","revolution.extensions.actions.min.js":"2.1.0","revolution.extensions.carousel.min.js":"1.2.1","revolution.extensions.kenburn.min.js":"1.3.1","revolution.extensions.layeranimation.min.js":"3.6.1","revolution.extensions.navigation.min.js":"1.3.3","revolution.extensions.parallax.min.js":"2.2.0","revolution.extensions.slideanims.min.js":"1.7","revolution.extensions.video.min.js":"2.1.1"};jQuery.fn.extend({revolution:function(a){var b={delay:9e3,responsiveLevels:4064,visibilityLevels:[2048,1024,778,480],gridwidth:960,gridheight:500,minHeight:0,autoHeight:"off",sliderType:"standard",sliderLayout:"auto",fullScreenAutoWidth:"off",fullScreenAlignForce:"off",fullScreenOffsetContainer:"",fullScreenOffset:"0",hideCaptionAtLimit:0,hideAllCaptionAtLimit:0,hideSliderAtLimit:0,disableProgressBar:"off",stopAtSlide:-1,stopAfterLoops:-1,shadow:0,dottedOverlay:"none",startDelay:0,lazyType:"smart",spinner:"spinner0",shuffle:"off",viewPort:{enable:!1,outof:"wait",visible_area:"60%",presize:!1},fallbacks:{isJoomla:!1,panZoomDisableOnMobile:"off",simplifyAll:"on",nextSlideOnWindowFocus:"off",disableFocusListener:!0,ignoreHeightChanges:"off",ignoreHeightChangesSize:0,allowHTML5AutoPlayOnAndroid:!0},parallax:{type:"off",levels:[10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85],origo:"enterpoint",speed:400,bgparallax:"off",opacity:"on",disable_onmobile:"off",ddd_shadow:"on",ddd_bgfreeze:"off",ddd_overflow:"visible",ddd_layer_overflow:"visible",ddd_z_correction:65,ddd_path:"mouse"},scrolleffect:{fade:"off",blur:"off",scale:"off",grayscale:"off",maxblur:10,on_layers:"off",on_slidebg:"off",on_static_layers:"off",on_parallax_layers:"off",on_parallax_static_layers:"off",direction:"both",multiplicator:1.35,multiplicator_layers:.5,tilt:30,disable_on_mobile:"on"},carousel:{easing:punchgs.Power3.easeInOut,speed:800,showLayersAllTime:"off",horizontal_align:"center",vertical_align:"center",infinity:"on",space:0,maxVisibleItems:3,stretch:"off",fadeout:"on",maxRotation:0,minScale:0,vary_fade:"off",vary_rotation:"on",vary_scale:"off",border_radius:"0px",padding_top:0,padding_bottom:0},navigation:{keyboardNavigation:"off",keyboard_direction:"horizontal",mouseScrollNavigation:"off",onHoverStop:"on",touch:{touchenabled:"off",touchOnDesktop:"off",swipe_treshold:75,swipe_min_touches:1,drag_block_vertical:!1,swipe_direction:"horizontal"},arrows:{style:"",enable:!1,hide_onmobile:!1,hide_onleave:!0,hide_delay:200,hide_delay_mobile:1200,hide_under:0,hide_over:9999,tmp:"",rtl:!1,left:{h_align:"left",v_align:"center",h_offset:20,v_offset:0,container:"slider"},right:{h_align:"right",v_align:"center",h_offset:20,v_offset:0,container:"slider"}},bullets:{container:"slider",rtl:!1,style:"",enable:!1,hide_onmobile:!1,hide_onleave:!0,hide_delay:200,hide_delay_mobile:1200,hide_under:0,hide_over:9999,direction:"horizontal",h_align:"left",v_align:"center",space:0,h_offset:20,v_offset:0,tmp:'<span class="tp-bullet-image"></span><span class="tp-bullet-title"></span>'},thumbnails:{container:"slider",rtl:!1,style:"",enable:!1,width:100,height:50,min_width:100,wrapper_padding:2,wrapper_color:"#f5f5f5",wrapper_opacity:1,tmp:'<span class="tp-thumb-image"></span><span class="tp-thumb-title"></span>',visibleAmount:5,hide_onmobile:!1,hide_onleave:!0,hide_delay:200,hide_delay_mobile:1200,hide_under:0,hide_over:9999,direction:"horizontal",span:!1,position:"inner",space:2,h_align:"left",v_align:"center",h_offset:20,v_offset:0},tabs:{container:"slider",rtl:!1,style:"",enable:!1,width:100,min_width:100,height:50,wrapper_padding:10,wrapper_color:"#f5f5f5",wrapper_opacity:1,tmp:'<span class="tp-tab-image"></span>',visibleAmount:5,hide_onmobile:!1,hide_onleave:!0,hide_delay:200,hide_delay_mobile:1200,hide_under:0,hide_over:9999,direction:"horizontal",span:!1,space:0,position:"inner",h_align:"left",v_align:"center",h_offset:20,v_offset:0}},extensions:"extensions/",extensions_suffix:".min.js",debugMode:!1};return a=jQuery.extend(!0,{},b,a),this.each(function(){var b=jQuery(this);a.minHeight=a.minHeight!=undefined?parseInt(a.minHeight,0):a.minHeight,a.scrolleffect.on="on"===a.scrolleffect.fade||"on"===a.scrolleffect.scale||"on"===a.scrolleffect.blur||"on"===a.scrolleffect.grayscale,"hero"==a.sliderType&&b.find(">ul>li").each(function(a){a>0&&jQuery(this).remove()}),a.jsFileLocation=a.jsFileLocation||getScriptLocation("themepunch.revolution.min.js"),a.jsFileLocation=a.jsFileLocation+a.extensions,a.scriptsneeded=getNeededScripts(a,b),a.curWinRange=0,a.rtl=!0,a.navigation!=undefined&&a.navigation.touch!=undefined&&(a.navigation.touch.swipe_min_touches=a.navigation.touch.swipe_min_touches>5?1:a.navigation.touch.swipe_min_touches),jQuery(this).on("scriptsloaded",function(){if(a.modulesfailing)return b.html('<div style="margin:auto;line-height:40px;font-size:14px;color:#fff;padding:15px;background:#e74c3c;margin:20px 0px;">!! Error at loading Slider Revolution 5.0 Extrensions.'+a.errorm+"</div>").show(),!1;_R.migration!=undefined&&(a=_R.migration(b,a)),punchgs.force3D=!0,"on"!==a.simplifyAll&&punchgs.TweenLite.lagSmoothing(1e3,16),prepareOptions(b,a),initSlider(b,a)}),b[0].opt=a,waitForScripts(b,a)})},getRSVersion:function(a){if(!0===a)return jQuery("body").data("tp_rs_version");var b=jQuery("body").data("tp_rs_version"),c="";c+="---------------------------------------------------------\n",c+="    Currently Loaded Slider Revolution & SR Modules :\n",c+="---------------------------------------------------------\n";for(var d in b)c+=b[d].alias+": "+b[d].ver+"\n";return c+="---------------------------------------------------------\n"},revremoveslide:function(a){return this.each(function(){var b=jQuery(this),c=b[0].opt;if(!(a<0||a>c.slideamount)&&b!=undefined&&b.length>0&&jQuery("body").find("#"+b.attr("id")).length>0&&c&&c.li.length>0&&(a>0||a<=c.li.length)){var d=jQuery(c.li[a]),e=d.data("index"),f=!1;c.slideamount=c.slideamount-1,c.realslideamount=c.realslideamount-1,removeNavWithLiref(".tp-bullet",e,c),removeNavWithLiref(".tp-tab",e,c),removeNavWithLiref(".tp-thumb",e,c),d.hasClass("active-revslide")&&(f=!0),d.remove(),c.li=removeArray(c.li,a),c.carousel&&c.carousel.slides&&(c.carousel.slides=removeArray(c.carousel.slides,a)),c.thumbs=removeArray(c.thumbs,a),_R.updateNavIndexes&&_R.updateNavIndexes(c),f&&b.revnext(),punchgs.TweenLite.set(c.li,{minWidth:"99%"}),punchgs.TweenLite.set(c.li,{minWidth:"100%"})}})},revaddcallback:function(a){return this.each(function(){this.opt&&(this.opt.callBackArray===undefined&&(this.opt.callBackArray=new Array),this.opt.callBackArray.push(a))})},revgetparallaxproc:function(){return jQuery(this)[0].opt.scrollproc},revdebugmode:function(){return this.each(function(){var a=jQuery(this);a[0].opt.debugMode=!0,containerResized(a,a[0].opt)})},revscroll:function(a){return this.each(function(){var b=jQuery(this);jQuery("body,html").animate({scrollTop:b.offset().top+b.height()-a+"px"},{duration:400})})},revredraw:function(a){return this.each(function(){var a=jQuery(this);containerResized(a,a[0].opt)})},revkill:function(a){var b=this,c=jQuery(this);if(punchgs.TweenLite.killDelayedCallsTo(_R.showHideNavElements),c!=undefined&&c.length>0&&jQuery("body").find("#"+c.attr("id")).length>0){c.data("conthover",1),c.data("conthover-changed",1),c.trigger("revolution.slide.onpause");var d=c.parent().find(".tp-bannertimer"),e=c[0].opt;e.tonpause=!0,c.trigger("stoptimer");var f="resize.revslider-"+c.attr("id");jQuery(window).unbind(f),punchgs.TweenLite.killTweensOf(c.find("*"),!1),punchgs.TweenLite.killTweensOf(c,!1),c.unbind("hover, mouseover, mouseenter,mouseleave, resize");var f="resize.revslider-"+c.attr("id");jQuery(window).off(f),c.find("*").each(function(){var a=jQuery(this);a.unbind("on, hover, mouseenter,mouseleave,mouseover, resize,restarttimer, stoptimer"),a.off("on, hover, mouseenter,mouseleave,mouseover, resize"),a.data("mySplitText",null),a.data("ctl",null),a.data("tween")!=undefined&&a.data("tween").kill(),a.data("kenburn")!=undefined&&a.data("kenburn").kill(),a.data("timeline_out")!=undefined&&a.data("timeline_out").kill(),a.data("timeline")!=undefined&&a.data("timeline").kill(),a.remove(),a.empty(),a=null}),punchgs.TweenLite.killTweensOf(c.find("*"),!1),punchgs.TweenLite.killTweensOf(c,!1),d.remove();try{c.closest(".forcefullwidth_wrapper_tp_banner").remove()}catch(a){}try{c.closest(".rev_slider_wrapper").remove()}catch(a){}try{c.remove()}catch(a){}return c.empty(),c.html(),c=null,e=null,delete b.c,delete b.opt,delete b.container,!0}return!1},revpause:function(){return this.each(function(){var a=jQuery(this);a!=undefined&&a.length>0&&jQuery("body").find("#"+a.attr("id")).length>0&&(a.data("conthover",1),a.data("conthover-changed",1),a.trigger("revolution.slide.onpause"),a[0].opt.tonpause=!0,a.trigger("stoptimer"))})},revresume:function(){return this.each(function(){var a=jQuery(this);a!=undefined&&a.length>0&&jQuery("body").find("#"+a.attr("id")).length>0&&(a.data("conthover",0),a.data("conthover-changed",1),a.trigger("revolution.slide.onresume"),a[0].opt.tonpause=!1,a.trigger("starttimer"))})},revstart:function(){var a=jQuery(this);if(a!=undefined&&a.length>0&&jQuery("body").find("#"+a.attr("id")).length>0&&a[0].opt!==undefined)return a[0].opt.sliderisrunning?(console.log("Slider Is Running Already"),!1):(runSlider(a,a[0].opt),!0)},revnext:function(){return this.each(function(){var a=jQuery(this);a!=undefined&&a.length>0&&jQuery("body").find("#"+a.attr("id")).length>0&&_R.callingNewSlide(a,1)})},revprev:function(){return this.each(function(){var a=jQuery(this);a!=undefined&&a.length>0&&jQuery("body").find("#"+a.attr("id")).length>0&&_R.callingNewSlide(a,-1)})},revmaxslide:function(){return jQuery(this).find(".tp-revslider-mainul >li").length},revcurrentslide:function(){var a=jQuery(this);if(a!=undefined&&a.length>0&&jQuery("body").find("#"+a.attr("id")).length>0)return parseInt(a[0].opt.act,0)+1},revlastslide:function(){return jQuery(this).find(".tp-revslider-mainul >li").length},revshowslide:function(a){return this.each(function(){var b=jQuery(this);b!=undefined&&b.length>0&&jQuery("body").find("#"+b.attr("id")).length>0&&_R.callingNewSlide(b,"to"+(a-1))})},revcallslidewithid:function(a){return this.each(function(){var b=jQuery(this);b!=undefined&&b.length>0&&jQuery("body").find("#"+b.attr("id")).length>0&&_R.callingNewSlide(b,a)})}});var _R=jQuery.fn.revolution;jQuery.extend(!0,_R,{getversion:function(){return version},compare_version:function(a){var b=jQuery("body").data("tp_rs_version");return b=b===undefined?new Object:b,b.Core===undefined&&(b.Core=new Object,b.Core.alias="Slider Revolution Core",b.Core.name="jquery.themepunch.revolution.min.js",b.Core.ver=_R.getversion().core),"stop"!=a.check&&(_R.getversion().core<a.min_core?(a.check===undefined&&(console.log("%cSlider Revolution Warning (Core:"+_R.getversion().core+")","color:#c0392b;font-weight:bold;"),console.log("%c     Core is older than expected ("+a.min_core+") from "+a.alias,"color:#333"),console.log("%c     Please update Slider Revolution to the latest version.","color:#333"),console.log("%c     It might be required to purge and clear Server/Client side Caches.","color:#333")),a.check="stop"):_R.getversion()[a.name]!=undefined&&a.version<_R.getversion()[a.name]&&(a.check===undefined&&(console.log("%cSlider Revolution Warning (Core:"+_R.getversion().core+")","color:#c0392b;font-weight:bold;"),console.log("%c     "+a.alias+" ("+a.version+") is older than requiered ("+_R.getversion()[a.name]+")","color:#333"),console.log("%c     Please update Slider Revolution to the latest version.","color:#333"),console.log("%c     It might be required to purge and clear Server/Client side Caches.","color:#333")),a.check="stop")),b[a.alias]===undefined&&(b[a.alias]=new Object,b[a.alias].alias=a.alias,b[a.alias].ver=a.version,b[a.alias].name=a.name),jQuery("body").data("tp_rs_version",b),a},currentSlideIndex:function(a){var b=a.c.find(".active-revslide").index();return b=-1==b?0:b},simp:function(a,b,c){var d=Math.abs(a)-Math.floor(Math.abs(a/b))*b;return c?d:a<0?-1*d:d},iOSVersion:function(){var a=!1;return navigator.userAgent.match(/iPhone/i)||navigator.userAgent.match(/iPod/i)||navigator.userAgent.match(/iPad/i)?navigator.userAgent.match(/OS 4_\d like Mac OS X/i)&&(a=!0):a=!1,a},isIE:function(a,b){var c=jQuery('<div style="display:none;"/>').appendTo(jQuery("body"));c.html("\x3c!--[if "+(b||"")+" IE "+(a||"")+"]><a>&nbsp;</a><![endif]--\x3e");var d=c.find("a").length;return c.remove(),d},is_mobile:function(){var a=["android","webos","iphone","ipad","blackberry","Android","webos",,"iPod","iPhone","iPad","Blackberry","BlackBerry"],b=!1;for(var c in a)navigator.userAgent.split(a[c]).length>1&&(b=!0);return b},is_android:function(){var a=["android","Android"],b=!1;for(var c in a)navigator.userAgent.split(a[c]).length>1&&(b=!0);return b},callBackHandling:function(a,b,c){try{a.callBackArray&&jQuery.each(a.callBackArray,function(a,d){d&&d.inmodule&&d.inmodule===b&&d.atposition&&d.atposition===c&&d.callback&&d.callback.call()})}catch(a){console.log("Call Back Failed")}},get_browser:function(){var c,a=navigator.appName,b=navigator.userAgent,d=b.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);return d&&null!=(c=b.match(/version\/([\.\d]+)/i))&&(d[2]=c[1]),d=d?[d[1],d[2]]:[a,navigator.appVersion,"-?"],d[0]},get_browser_version:function(){var c,a=navigator.appName,b=navigator.userAgent,d=b.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);return d&&null!=(c=b.match(/version\/([\.\d]+)/i))&&(d[2]=c[1]),d=d?[d[1],d[2]]:[a,navigator.appVersion,"-?"],d[1]},getHorizontalOffset:function(a,b){var c=gWiderOut(a,".outer-left"),d=gWiderOut(a,".outer-right");switch(b){case"left":return c;case"right":return d;case"both":return c+d}},callingNewSlide:function(a,b){var c=a.find(".next-revslide").length>0?a.find(".next-revslide").index():a.find(".processing-revslide").length>0?a.find(".processing-revslide").index():a.find(".active-revslide").index(),d=0,e=a[0].opt;a.find(".next-revslide").removeClass("next-revslide"),a.find(".active-revslide").hasClass("tp-invisible-slide")&&(c=e.last_shown_slide),b&&jQuery.isNumeric(b)||b.match(/to/g)?(1===b||-1===b?(d=c+b,d=d<0?e.slideamount-1:d>=e.slideamount?0:d):(b=jQuery.isNumeric(b)?b:parseInt(b.split("to")[1],0),d=b<0?0:b>e.slideamount-1?e.slideamount-1:b),a.find(".tp-revslider-slidesli:eq("+d+")").addClass("next-revslide")):b&&a.find(".tp-revslider-slidesli").each(function(){var a=jQuery(this);a.data("index")===b&&a.addClass("next-revslide")}),d=a.find(".next-revslide").index(),a.trigger("revolution.nextslide.waiting"),c===d&&c===e.last_shown_slide||d!==c&&-1!=d?swapSlide(a):a.find(".next-revslide").removeClass("next-revslide")},slotSize:function(a,b){b.slotw=Math.ceil(b.width/b.slots),"fullscreen"==b.sliderLayout?b.sloth=Math.ceil(jQuery(window).height()/b.slots):b.sloth=Math.ceil(b.height/b.slots),"on"==b.autoHeight&&a!==undefined&&""!==a&&(b.sloth=Math.ceil(a.height()/b.slots))},setSize:function(a){var b=(a.top_outer||0)+(a.bottom_outer||0),c=parseInt(a.carousel.padding_top||0,0),d=parseInt(a.carousel.padding_bottom||0,0),e=a.gridheight[a.curWinRange],f=0,g=-1===a.nextSlide||a.nextSlide===undefined?0:a.nextSlide;if(a.paddings=a.paddings===undefined?{top:parseInt(a.c.parent().css("paddingTop"),0)||0,bottom:parseInt(a.c.parent().css("paddingBottom"),0)||0}:a.paddings,a.rowzones&&a.rowzones.length>0)for(var h=0;h<a.rowzones[g].length;h++)f+=a.rowzones[g][h][0].offsetHeight;if(e=e<a.minHeight?a.minHeight:e,e=e<f?f:e,"fullwidth"==a.sliderLayout&&"off"==a.autoHeight&&punchgs.TweenLite.set(a.c,{maxHeight:e+"px"}),a.c.css({marginTop:c,marginBottom:d}),a.width=a.ul.width(),a.height=a.ul.height(),setScale(a),a.height=Math.round(a.gridheight[a.curWinRange]*(a.width/a.gridwidth[a.curWinRange])),a.height>a.gridheight[a.curWinRange]&&"on"!=a.autoHeight&&(a.height=a.gridheight[a.curWinRange]),"fullscreen"==a.sliderLayout||a.infullscreenmode){a.height=a.bw*a.gridheight[a.curWinRange];var j=(a.c.parent().width(),jQuery(window).height());if(a.fullScreenOffsetContainer!=undefined){try{var k=a.fullScreenOffsetContainer.split(",");k&&jQuery.each(k,function(a,b){j=jQuery(b).length>0?j-jQuery(b).outerHeight(!0):j})}catch(a){}try{a.fullScreenOffset.split("%").length>1&&a.fullScreenOffset!=undefined&&a.fullScreenOffset.length>0?j-=jQuery(window).height()*parseInt(a.fullScreenOffset,0)/100:a.fullScreenOffset!=undefined&&a.fullScreenOffset.length>0&&(j-=parseInt(a.fullScreenOffset,0))}catch(a){}}j=j<a.minHeight?a.minHeight:j,j-=b,a.c.parent().height(j),a.c.closest(".rev_slider_wrapper").height(j),a.c.css({height:"100%"}),a.height=j,a.minHeight!=undefined&&a.height<a.minHeight&&(a.height=a.minHeight),a.height=parseInt(f,0)>parseInt(a.height,0)?f:a.height}else a.minHeight!=undefined&&a.height<a.minHeight&&(a.height=a.minHeight),a.height=parseInt(f,0)>parseInt(a.height,0)?f:a.height,a.c.height(a.height);var l={height:c+d+b+a.height+a.paddings.top+a.paddings.bottom};a.c.closest(".forcefullwidth_wrapper_tp_banner").find(".tp-fullwidth-forcer").css(l),a.c.closest(".rev_slider_wrapper").css(l),setScale(a)},enterInViewPort:function(a){a.waitForCountDown&&(countDown(a.c,a),a.waitForCountDown=!1),a.waitForFirstSlide&&(swapSlide(a.c),a.waitForFirstSlide=!1,setTimeout(function(){a.c.removeClass("tp-waitforfirststart")},500)),"playing"!=a.sliderlaststatus&&a.sliderlaststatus!=undefined||a.c.trigger("starttimer"),a.lastplayedvideos!=undefined&&a.lastplayedvideos.length>0&&jQuery.each(a.lastplayedvideos,function(b,c){_R.playVideo(c,a)})},leaveViewPort:function(a){a.sliderlaststatus=a.sliderstatus,a.c.trigger("stoptimer"),a.playingvideos!=undefined&&a.playingvideos.length>0&&(a.lastplayedvideos=jQuery.extend(!0,[],a.playingvideos),a.playingvideos&&jQuery.each(a.playingvideos,function(b,c){a.leaveViewPortBasedStop=!0,_R.stopVideo&&_R.stopVideo(c,a)}))},unToggleState:function(a){a!=undefined&&a.length>0&&jQuery.each(a,function(a,b){b.removeClass("rs-toggle-content-active")})},toggleState:function(a){a!=undefined&&a.length>0&&jQuery.each(a,function(a,b){b.addClass("rs-toggle-content-active")})},swaptoggleState:function(a){a!=undefined&&a.length>0&&jQuery.each(a,function(a,b){jQuery(b).hasClass("rs-toggle-content-active")?jQuery(b).removeClass("rs-toggle-content-active"):jQuery(b).addClass("rs-toggle-content-active")})},lastToggleState:function(a){var b=0;return a!=undefined&&a.length>0&&jQuery.each(a,function(a,c){b=c.hasClass("rs-toggle-content-active")}),b}});var _ISM=_R.is_mobile(),_ANDROID=_R.is_android(),checkIDS=function(a,b){if(a.anyid=a.anyid===undefined?[]:a.anyid,-1!=jQuery.inArray(b.attr("id"),a.anyid)){var d=b.attr("id")+"_"+Math.round(9999*Math.random());b.attr("id",d)}a.anyid.push(b.attr("id"))},removeArray=function(a,b){var c=[];return jQuery.each(a,function(a,d){a!=b&&c.push(d)}),c},removeNavWithLiref=function(a,b,c){c.c.find(a).each(function(){var a=jQuery(this);a.data("liref")===b&&a.remove()})},lAjax=function(a,b){return!jQuery("body").data(a)&&(b.filesystem?(b.errorm===undefined&&(b.errorm="<br>Local Filesystem Detected !<br>Put this to your header:"),console.warn("Local Filesystem detected !"),b.errorm=b.errorm+'<br>&lt;script type="text/javascript" src="'+b.jsFileLocation+a+b.extensions_suffix+'"&gt;&lt;/script&gt;',console.warn(b.jsFileLocation+a+b.extensions_suffix+" could not be loaded !"),console.warn("Please use a local Server or work online or make sure that you load all needed Libraries manually in your Document."),console.log(" "),b.modulesfailing=!0,!1):(jQuery.ajax({url:b.jsFileLocation+a+b.extensions_suffix+"?version="+version.core,dataType:"script",cache:!0,error:function(c){console.warn("Slider Revolution 5.0 Error !"),console.error("Failure at Loading:"+a+b.extensions_suffix+" on Path:"+b.jsFileLocation),console.info(c)}}),void jQuery("body").data(a,!0)))},getNeededScripts=function(a,b){var c=new Object,d=a.navigation;return c.kenburns=!1,c.parallax=!1,c.carousel=!1,c.navigation=!1,c.videos=!1,c.actions=!1,c.layeranim=!1,c.migration=!1,b.data("version")&&b.data("version").toString().match(/5./gi)?(b.find("img").each(function(){"on"==jQuery(this).data("kenburns")&&(c.kenburns=!0)}),("carousel"==a.sliderType||"on"==d.keyboardNavigation||"on"==d.mouseScrollNavigation||"on"==d.touch.touchenabled||d.arrows.enable||d.bullets.enable||d.thumbnails.enable||d.tabs.enable)&&(c.navigation=!0),b.find(".tp-caption, .tp-static-layer, .rs-background-video-layer").each(function(){var a=jQuery(this);(a.data("ytid")!=undefined||a.find("iframe").length>0&&a.find("iframe").attr("src").toLowerCase().indexOf("youtube")>0)&&(c.videos=!0),(a.data("vimeoid")!=undefined||a.find("iframe").length>0&&a.find("iframe").attr("src").toLowerCase().indexOf("vimeo")>0)&&(c.videos=!0),a.data("actions")!==undefined&&(c.actions=!0),c.layeranim=!0}),b.find("li").each(function(){jQuery(this).data("link")&&jQuery(this).data("link")!=undefined&&(c.layeranim=!0,c.actions=!0)}),!c.videos&&(b.find(".rs-background-video-layer").length>0||b.find(".tp-videolayer").length>0||b.find(".tp-audiolayer").length>0||b.find("iframe").length>0||b.find("video").length>0)&&(c.videos=!0),"carousel"==a.sliderType&&(c.carousel=!0),("off"!==a.parallax.type||a.viewPort.enable||"true"==a.viewPort.enable||"true"===a.scrolleffect.on||a.scrolleffect.on)&&(c.parallax=!0)):(c.kenburns=!0,c.parallax=!0,c.carousel=!1,c.navigation=!0,c.videos=!0,c.actions=!0,c.layeranim=!0,c.migration=!0),"hero"==a.sliderType&&(c.carousel=!1,c.navigation=!1),window.location.href.match(/file:/gi)&&(c.filesystem=!0,a.filesystem=!0),c.videos&&void 0===_R.isVideoPlaying&&lAjax("revolution.extension.video",a),c.carousel&&void 0===_R.prepareCarousel&&lAjax("revolution.extension.carousel",a),c.carousel||void 0!==_R.animateSlide||lAjax("revolution.extension.slideanims",a),c.actions&&void 0===_R.checkActions&&lAjax("revolution.extension.actions",a),c.layeranim&&void 0===_R.handleStaticLayers&&lAjax("revolution.extension.layeranimation",a),c.kenburns&&void 0===_R.stopKenBurn&&lAjax("revolution.extension.kenburn",a),c.navigation&&void 0===_R.createNavigation&&lAjax("revolution.extension.navigation",a),c.migration&&void 0===_R.migration&&lAjax("revolution.extension.migration",a),c.parallax&&void 0===_R.checkForParallax&&lAjax("revolution.extension.parallax",a),a.addons!=undefined&&a.addons.length>0&&jQuery.each(a.addons,function(b,c){"object"==typeof c&&c.fileprefix!=undefined&&lAjax(c.fileprefix,a)}),c},waitForScripts=function(a,b){var c=!0,d=b.scriptsneeded;b.addons!=undefined&&b.addons.length>0&&jQuery.each(b.addons,function(a,b){"object"==typeof b&&b.init!=undefined&&_R[b.init]===undefined&&(c=!1)}),d.filesystem||"undefined"!=typeof punchgs&&c&&(!d.kenburns||d.kenburns&&void 0!==_R.stopKenBurn)&&(!d.navigation||d.navigation&&void 0!==_R.createNavigation)&&(!d.carousel||d.carousel&&void 0!==_R.prepareCarousel)&&(!d.videos||d.videos&&void 0!==_R.resetVideo)&&(!d.actions||d.actions&&void 0!==_R.checkActions)&&(!d.layeranim||d.layeranim&&void 0!==_R.handleStaticLayers)&&(!d.migration||d.migration&&void 0!==_R.migration)&&(!d.parallax||d.parallax&&void 0!==_R.checkForParallax)&&(d.carousel||!d.carousel&&void 0!==_R.animateSlide)?a.trigger("scriptsloaded"):setTimeout(function(){waitForScripts(a,b)},50)},getScriptLocation=function(a){var b=new RegExp("themepunch.revolution.min.js","gi"),c="";return jQuery("script").each(function(){var a=jQuery(this).attr("src");a&&a.match(b)&&(c=a)}),c=c.replace("jquery.themepunch.revolution.min.js",""),c=c.replace("jquery.themepunch.revolution.js",""),c=c.split("?")[0]},setCurWinRange=function(a,b){var d=9999,e=0,f=0,g=0,h=jQuery(window).width(),i=b&&9999==a.responsiveLevels?a.visibilityLevels:a.responsiveLevels;i&&i.length&&jQuery.each(i,function(a,b){h<b&&(0==e||e>b)&&(d=b,g=a,e=b),h>b&&e<b&&(e=b,f=a)}),e<d&&(g=f),b?a.forcedWinRange=g:a.curWinRange=g},prepareOptions=function(a,b){b.carousel.maxVisibleItems=b.carousel.maxVisibleItems<1?999:b.carousel.maxVisibleItems,b.carousel.vertical_align="top"===b.carousel.vertical_align?"0%":"bottom"===b.carousel.vertical_align?"100%":"50%"},gWiderOut=function(a,b){var c=0;return a.find(b).each(function(){var a=jQuery(this);!a.hasClass("tp-forcenotvisible")&&c<a.outerWidth()&&(c=a.outerWidth())}),c},initSlider=function(container,opt){if(container==undefined)return!1;container.data("aimg")!=undefined&&("enabled"==container.data("aie8")&&_R.isIE(8)||"enabled"==container.data("amobile")&&_ISM)&&container.html('<img class="tp-slider-alternative-image" src="'+container.data("aimg")+'">'),container.find(">ul").addClass("tp-revslider-mainul"),opt.c=container,opt.ul=container.find(".tp-revslider-mainul"),opt.ul.find(">li").each(function(a){var b=jQuery(this);"on"==b.data("hideslideonmobile")&&_ISM&&b.remove(),(b.data("invisible")||!0===b.data("invisible"))&&(b.addClass("tp-invisible-slide"),b.appendTo(opt.ul))}),opt.addons!=undefined&&opt.addons.length>0&&jQuery.each(opt.addons,function(i,obj){"object"==typeof obj&&obj.init!=undefined&&_R[obj.init](eval(obj.params))}),opt.cid=container.attr("id"),opt.ul.css({visibility:"visible"}),opt.slideamount=opt.ul.find(">li").not(".tp-invisible-slide").length,opt.realslideamount=opt.ul.find(">li").length,opt.slayers=container.find(".tp-static-layers"),opt.slayers.data("index","staticlayers"),1!=opt.waitForInit&&(container[0].opt=opt,runSlider(container,opt))},onFullScreenChange=function(){jQuery("body").data("rs-fullScreenMode",!jQuery("body").data("rs-fullScreenMode")),jQuery("body").data("rs-fullScreenMode")&&setTimeout(function(){jQuery(window).trigger("resize")},200)},runSlider=function(a,b){if(b.sliderisrunning=!0,b.ul.find(">li").each(function(a){jQuery(this).data("originalindex",a)}),b.allli=b.ul.find(">li"),jQuery.each(b.allli,function(a,b){var b=jQuery(b);b.data("origindex",b.index())}),b.li=b.ul.find(">li").not(".tp-invisible-slide"),"on"==b.shuffle){var c=new Object,d=b.ul.find(">li:first-child");c.fstransition=d.data("fstransition"),c.fsmasterspeed=d.data("fsmasterspeed"),c.fsslotamount=d.data("fsslotamount");for(var e=0;e<b.slideamount;e++){var f=Math.round(Math.random()*b.slideamount);b.ul.find(">li:eq("+f+")").prependTo(b.ul)}var g=b.ul.find(">li:first-child");g.data("fstransition",c.fstransition),g.data("fsmasterspeed",c.fsmasterspeed),g.data("fsslotamount",c.fsslotamount),b.allli=b.ul.find(">li"),b.li=b.ul.find(">li").not(".tp-invisible-slide")}if(b.inli=b.ul.find(">li.tp-invisible-slide"),b.thumbs=new Array,b.slots=4,b.act=-1,b.firststart=1,b.loadqueue=new Array,b.syncload=0,b.conw=a.width(),b.conh=a.height(),b.responsiveLevels.length>1?b.responsiveLevels[0]=9999:b.responsiveLevels=9999,jQuery.each(b.allli,function(a,c){var c=jQuery(c),d=c.find(".rev-slidebg")||c.find("img").first(),e=0;c.addClass("tp-revslider-slidesli"),c.data("index")===undefined&&c.data("index","rs-"+Math.round(999999*Math.random()));var f=new Object;f.params=new Array,f.id=c.data("index"),f.src=c.data("thumb")!==undefined?c.data("thumb"):d.data("lazyload")!==undefined?d.data("lazyload"):d.attr("src"),c.data("title")!==undefined&&f.params.push({from:RegExp("\\{\\{title\\}\\}","g"),to:c.data("title")}),c.data("description")!==undefined&&f.params.push({from:RegExp("\\{\\{description\\}\\}","g"),to:c.data("description")});for(var e=1;e<=10;e++)c.data("param"+e)!==undefined&&f.params.push({from:RegExp("\\{\\{param"+e+"\\}\\}","g"),to:c.data("param"+e)});if(b.thumbs.push(f),c.data("link")!=undefined){var g=c.data("link"),h=c.data("target")||"_self",i="back"===c.data("slideindex")?0:60,j=c.data("linktoslide"),k=j;j!=undefined&&"next"!=j&&"prev"!=j&&b.allli.each(function(){var a=jQuery(this);a.data("origindex")+1==k&&(j=a.data("index"))}),"slide"!=g&&(j="no");var l='<div class="tp-caption slidelink" style="cursor:pointer;width:100%;height:100%;z-index:'+i+';" data-x="center" data-y="center" data-basealign="slide" ',m="scroll_under"===j?'[{"event":"click","action":"scrollbelow","offset":"100px","delay":"0"}]':"prev"===j?'[{"event":"click","action":"jumptoslide","slide":"prev","delay":"0.2"}]':"next"===j?'[{"event":"click","action":"jumptoslide","slide":"next","delay":"0.2"}]':'[{"event":"click","action":"jumptoslide","slide":"'+j+'","delay":"0.2"}]',n=' data-frames=\'[{"delay":0,"speed":100,"frame":"0","from":"opacity:0;","to":"o:1;","ease":"Power3.easeInOut"},{"delay":"wait","speed":300,"frame":"999","to":"opacity:0;","ease":"Power3.easeInOut"}]\'';l="no"==j?l+n+" >":l+"data-actions='"+m+"'"+n+" >",l+='<a style="width:100%;height:100%;display:block"',l="slide"!=g?l+' target="'+h+'" href="'+g+'"':l,l+='><span style="width:100%;height:100%;display:block"></span></a></div>',c.append(l)}}),b.rle=b.responsiveLevels.length||1,b.gridwidth=cArray(b.gridwidth,b.rle),b.gridheight=cArray(b.gridheight,b.rle),"on"==b.simplifyAll&&(_R.isIE(8)||_R.iOSVersion())&&(a.find(".tp-caption").each(function(){var a=jQuery(this);a.removeClass("customin customout").addClass("fadein fadeout"),a.data("splitin",""),a.data("speed",400)}),b.allli.each(function(){var a=jQuery(this);a.data("transition","fade"),a.data("masterspeed",500),a.data("slotamount",1),(a.find(".rev-slidebg")||a.find(">img").first()).data("kenburns","off")})),b.desktop=!navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|BB10|mobi|tablet|opera mini|nexus 7)/i),b.autoHeight="fullscreen"==b.sliderLayout?"on":b.autoHeight,"fullwidth"==b.sliderLayout&&"off"==b.autoHeight&&a.css({maxHeight:b.gridheight[b.curWinRange]+"px"}),"auto"!=b.sliderLayout&&0==a.closest(".forcefullwidth_wrapper_tp_banner").length&&("fullscreen"!==b.sliderLayout||"on"!=b.fullScreenAutoWidth)){var h=a.parent(),i=h.css("marginBottom"),j=h.css("marginTop"),k=a.attr("id")+"_forcefullwidth";i=i===undefined?0:i,j=j===undefined?0:j,h.wrap('<div class="forcefullwidth_wrapper_tp_banner" id="'+k+'" style="position:relative;width:100%;height:auto;margin-top:'+j+";margin-bottom:"+i+'"></div>'),a.closest(".forcefullwidth_wrapper_tp_banner").append('<div class="tp-fullwidth-forcer" style="width:100%;height:'+a.height()+'px"></div>'),a.parent().css({marginTop:"0px",marginBottom:"0px"}),a.parent().css({position:"absolute"})}if(b.shadow!==undefined&&b.shadow>0&&(a.parent().addClass("tp-shadow"+b.shadow),a.parent().append('<div class="tp-shadowcover"></div>'),a.parent().find(".tp-shadowcover").css({backgroundColor:a.parent().css("backgroundColor"),backgroundImage:a.parent().css("backgroundImage")})),setCurWinRange(b),setCurWinRange(b,!0),!a.hasClass("revslider-initialised")){a.addClass("revslider-initialised"),a.addClass("tp-simpleresponsive"),a.attr("id")==undefined&&a.attr("id","revslider-"+Math.round(1e3*Math.random()+5)),checkIDS(b,a),b.firefox13=!1,b.ie=!jQuery.support.opacity,b.ie9=9==document.documentMode,b.origcd=b.delay;var l=jQuery.fn.jquery.split("."),m=parseFloat(l[0]),n=parseFloat(l[1]);parseFloat(l[2]||"0");1==m&&n<7&&a.html('<div style="text-align:center; padding:40px 0px; font-size:20px; color:#992222;"> The Current Version of jQuery:'+l+" <br>Please update your jQuery Version to min. 1.7 in Case you wish to use the Revolution Slider Plugin</div>"),m>1&&(b.ie=!1);var p=new Object;p.addedyt=0,p.addedvim=0,p.addedvid=0,b.scrolleffect.on&&(b.scrolleffect.layers=new Array),a.find(".tp-caption, .rs-background-video-layer").each(function(a){var c=jQuery(this),d=c.data(),e=d.autoplayonlyfirsttime,f=d.autoplay,g=d.videomp4!==undefined||d.videowebm!==undefined||d.videoogv!==undefined,h=c.hasClass("tp-audiolayer"),i=d.videoloop,j=!0,k=!1;d.startclasses=c.attr("class"),d.isparallaxlayer=d.startclasses.indexOf("rs-parallax")>=0,c.hasClass("tp-static-layer")&&_R.handleStaticLayers&&(_R.handleStaticLayers(c,b),b.scrolleffect.on&&("on"===b.scrolleffect.on_parallax_static_layers&&d.isparallaxlayer||"on"===b.scrolleffect.on_static_layers&&!d.isparallaxlayer)&&(k=!0),j=!1);var l=c.data("noposteronmobile")||c.data("noPosterOnMobile")||c.data("posteronmobile")||c.data("posterOnMobile")||c.data("posterOnMObile");c.data("noposteronmobile",l);var m=0;if(c.find("iframe").each(function(){punchgs.TweenLite.set(jQuery(this),{autoAlpha:0}),m++}),m>0&&c.data("iframes",!0),c.hasClass("tp-caption")){var n=c.hasClass("slidelink")?"width:100% !important;height:100% !important;":"",o=c.data(),q="",r=o.type,s="row"===r||"column"===r?"relative":"absolute",t="";"row"===r?(c.addClass("rev_row").removeClass("tp-resizeme"),t="rev_row_wrap"):"column"===r?(q=o.verticalalign===undefined?" vertical-align:bottom;":" vertical-align:"+o.verticalalign+";",t="rev_column",c.addClass("rev_column_inner").removeClass("tp-resizeme"),c.data("width","auto"),punchgs.TweenLite.set(c,{width:"auto"})):"group"===r&&c.removeClass("tp-resizeme");var u="",v="";"row"!==r&&"group"!==r&&"column"!==r?(u="display:"+c.css("display")+";",c.closest(".rev_column").length>0?(c.addClass("rev_layer_in_column"),j=!1):c.closest(".rev_group").length>0&&(c.addClass("rev_layer_in_group"),j=!1)):"column"===r&&(j=!1),o.wrapper_class!==undefined&&(t=t+" "+o.wrapper_class),o.wrapper_id!==undefined&&(v='id="'+o.wrapper_id+'"'),c.wrap("<div "+v+' class="tp-parallax-wrap '+t+'" style="'+q+" "+n+"position:"+s+";"+u+';visibility:hidden"><div class="tp-loop-wrap" style="'+n+"position:"+s+";"+u+';"><div class="tp-mask-wrap" style="'+n+"position:"+s+";"+u+';" ></div></div></div>'),j&&b.scrolleffect.on&&("on"===b.scrolleffect.on_parallax_layers&&d.isparallaxlayer||"on"===b.scrolleffect.on_layers&&!d.isparallaxlayer)&&b.scrolleffect.layers.push(c.parent()),k&&b.scrolleffect.layers.push(c.parent()),"column"===r&&(c.append('<div class="rev_column_bg rev_column_bg_man_sized" style="visibility:hidden"></div>'),c.closest(".tp-parallax-wrap").append('<div class="rev_column_bg rev_column_bg_auto_sized"></div>'));var w=["pendulum","rotate","slideloop","pulse","wave"],x=c.closest(".tp-loop-wrap");jQuery.each(w,function(a,b){var d=c.find(".rs-"+b),e=d.data()||"";""!=e&&(x.data(e),x.addClass("rs-"+b),d.children(0).unwrap(),c.data("loopanimation","on"))}),c.attr("id")===undefined&&c.attr("id","layer-"+Math.round(999999999*Math.random())),checkIDS(b,c),punchgs.TweenLite.set(c,{visibility:"hidden"})}var y=c.data("actions");y!==undefined&&_R.checkActions(c,b,y),checkHoverDependencies(c,b),_R.checkVideoApis&&(p=_R.checkVideoApis(c,b,p)),!_ISM||b.fallbacks.allowHTML5AutoPlayOnAndroid&&g||(1!=e&&"true"!=e||(d.autoplayonlyfirsttime=!1,e=!1),1!=f&&"true"!=f&&"on"!=f&&"1sttime"!=f||(d.autoplay="off",f="off")),h||1!=e&&"true"!=e&&"1sttime"!=f||"loopandnoslidestop"==i||c.closest("li.tp-revslider-slidesli").addClass("rs-pause-timer-once"),h||1!=f&&"true"!=f&&"on"!=f&&"no1sttime"!=f||"loopandnoslidestop"==i||c.closest("li.tp-revslider-slidesli").addClass("rs-pause-timer-always")}),a[0].addEventListener("mouseenter",function(){a.trigger("tp-mouseenter"),b.overcontainer=!0},{passive:!0}),a[0].addEventListener("mouseover",function(){a.trigger("tp-mouseover"),b.overcontainer=!0},{passive:!0}),a[0].addEventListener("mouseleave",function(){a.trigger("tp-mouseleft"),b.overcontainer=!1},{passive:!0}),a.find(".tp-caption video").each(function(a){var b=jQuery(this);b.removeClass("video-js vjs-default-skin"),b.attr("preload",""),b.css({display:"none"})}),"standard"!==b.sliderType&&(b.lazyType="all"),loadImages(a.find(".tp-static-layers"),b,0,!0),waitForCurrentImages(a.find(".tp-static-layers"),b,function(){a.find(".tp-static-layers img").each(function(){var a=jQuery(this),c=a.data("lazyload")!=undefined?a.data("lazyload"):a.attr("src"),d=getLoadObj(b,c);a.attr("src",d.src)})}),b.rowzones=[],b.allli.each(function(a){var c=jQuery(this);b.rowzones[a]=[],c.find(".rev_row_zone").each(function(){b.rowzones[a].push(jQuery(this))}),"all"!=b.lazyType&&("smart"!=b.lazyType||0!=a&&1!=a&&a!=b.slideamount&&a!=b.slideamount-1)||(loadImages(c,b,a),waitForCurrentImages(c,b,function(){}))});var q=getUrlVars("#")[0];if(q.length<9&&q.split("slide").length>1){var r=parseInt(q.split("slide")[1],0);r<1&&(r=1),r>b.slideamount&&(r=b.slideamount),b.startWithSlide=r-1}a.append('<div class="tp-loader '+b.spinner+'"><div class="dot1"></div><div class="dot2"></div><div class="bounce1"></div><div class="bounce2"></div><div class="bounce3"></div></div>'),b.loader=a.find(".tp-loader"),0===a.find(".tp-bannertimer").length&&a.append('<div class="tp-bannertimer" style="visibility:hidden"></div>'),a.find(".tp-bannertimer").css({width:"0%"}),b.ul.css({display:"block"}),prepareSlides(a,b),("off"!==b.parallax.type||b.scrolleffect.on)&&_R.checkForParallax&&_R.checkForParallax(a,b),_R.setSize(b),"hero"!==b.sliderType&&_R.createNavigation&&_R.createNavigation(a,b),_R.resizeThumbsTabs&&_R.resizeThumbsTabs&&_R.resizeThumbsTabs(b),contWidthManager(b);var s=b.viewPort;b.inviewport=!1,s!=undefined&&s.enable&&(jQuery.isNumeric(s.visible_area)||-1!==s.visible_area.indexOf("%")&&(s.visible_area=parseInt(s.visible_area)/100),_R.scrollTicker&&_R.scrollTicker(b,a)),"carousel"===b.sliderType&&_R.prepareCarousel&&(punchgs.TweenLite.set(b.ul,{opacity:0}),_R.prepareCarousel(b,new punchgs.TimelineLite,undefined,0),b.onlyPreparedSlide=!0),setTimeout(function(){if(!s.enable||s.enable&&b.inviewport||s.enable&&!b.inviewport&&"wait"==!s.outof)swapSlide(a);else if(b.c.addClass("tp-waitforfirststart"),b.waitForFirstSlide=!0,s.presize){var c=jQuery(b.li[0]);loadImages(c,b,0,!0),waitForCurrentImages(c.find(".tp-layers"),b,function(){_R.animateTheCaptions({slide:c,opt:b,preset:!0})})}_R.manageNavigation&&_R.manageNavigation(b),b.slideamount>1&&(!s.enable||s.enable&&b.inviewport?countDown(a,b):b.waitForCountDown=!0),setTimeout(function(){a.trigger("revolution.slide.onloaded")},100)},b.startDelay),b.startDelay=0,jQuery("body").data("rs-fullScreenMode",!1),window.addEventListener("fullscreenchange",onFullScreenChange,{passive:!0}),window.addEventListener("mozfullscreenchange",onFullScreenChange,{passive:!0}),window.addEventListener("webkitfullscreenchange",onFullScreenChange,{passive:!0});var t="resize.revslider-"+a.attr("id");jQuery(window).on(t,function(){if(a==undefined)return!1;0!=jQuery("body").find(a)&&contWidthManager(b);var c=!1;if("fullscreen"==b.sliderLayout){var d=jQuery(window).height();"mobile"==b.fallbacks.ignoreHeightChanges&&_ISM||"always"==b.fallbacks.ignoreHeightChanges?(b.fallbacks.ignoreHeightChangesSize=b.fallbacks.ignoreHeightChangesSize==undefined?0:b.fallbacks.ignoreHeightChangesSize,c=d!=b.lastwindowheight&&Math.abs(d-b.lastwindowheight)>b.fallbacks.ignoreHeightChangesSize):c=d!=b.lastwindowheight}(a.outerWidth(!0)!=b.width||a.is(":hidden")||c)&&(b.lastwindowheight=jQuery(window).height(),containerResized(a,b))}),hideSliderUnder(a,b),contWidthManager(b),b.fallbacks.disableFocusListener||"true"==b.fallbacks.disableFocusListener||!0===b.fallbacks.disableFocusListener||(a.addClass("rev_redraw_on_blurfocus"),tabBlurringCheck())}},cArray=function(a,b){if(!jQuery.isArray(a)){var c=a;a=new Array,a.push(c)}if(a.length<b)for(var c=a[a.length-1],d=0;d<b-a.length+2;d++)a.push(c);return a},checkHoverDependencies=function(a,b){var c=a.data();("sliderenter"===c.start||c.frames!==undefined&&c.frames[0]!=undefined&&"sliderenter"===c.frames[0].delay)&&(b.layersonhover===undefined&&(b.c.on("tp-mouseenter",function(){b.layersonhover&&jQuery.each(b.layersonhover,function(a,c){var d=c.data("closestli")||c.closest(".tp-revslider-slidesli"),e=c.data("staticli")||c.closest(".tp-static-layers");c.data("closestli")===undefined&&(c.data("closestli",d),c.data("staticli",e)),(d.length>0&&d.hasClass("active-revslide")||d.hasClass("processing-revslide")||e.length>0)&&(c.data("animdirection","in"),_R.playAnimationFrame&&_R.playAnimationFrame({caption:c,opt:b,frame:"frame_0",triggerdirection:"in",triggerframein:"frame_0",triggerframeout:"frame_999"}),c.data("triggerstate","on"))})}),b.c.on("tp-mouseleft",function(){b.layersonhover&&jQuery.each(b.layersonhover,function(a,c){c.data("animdirection","out"),c.data("triggered",!0),c.data("triggerstate","off"),_R.stopVideo&&_R.stopVideo(c,b),_R.playAnimationFrame&&_R.playAnimationFrame({caption:c,opt:b,frame:"frame_999",triggerdirection:"out",triggerframein:"frame_0",triggerframeout:"frame_999"})})}),b.layersonhover=new Array),b.layersonhover.push(a))},contWidthManager=function(a){var b=_R.getHorizontalOffset(a.c,"left");if("auto"==a.sliderLayout||"fullscreen"===a.sliderLayout&&"on"==a.fullScreenAutoWidth)"fullscreen"==a.sliderLayout&&"on"==a.fullScreenAutoWidth?punchgs.TweenLite.set(a.ul,{left:0,width:a.c.width()}):punchgs.TweenLite.set(a.ul,{left:b,width:a.c.width()-_R.getHorizontalOffset(a.c,"both")});else{var c=Math.ceil(a.c.closest(".forcefullwidth_wrapper_tp_banner").offset().left-b);punchgs.TweenLite.set(a.c.parent(),{left:0-c+"px",width:jQuery(window).width()-_R.getHorizontalOffset(a.c,"both")})}a.slayers&&"fullwidth"!=a.sliderLayout&&"fullscreen"!=a.sliderLayout&&punchgs.TweenLite.set(a.slayers,{left:b})},cv=function(a,b){return a===undefined?b:a},hideSliderUnder=function(a,b,c){var d=a.parent();jQuery(window).width()<b.hideSliderAtLimit?(a.trigger("stoptimer"),"none"!=d.css("display")&&d.data("olddisplay",d.css("display")),d.css({display:"none"})):a.is(":hidden")&&c&&(d.data("olddisplay")!=undefined&&"undefined"!=d.data("olddisplay")&&"none"!=d.data("olddisplay")?d.css({display:d.data("olddisplay")}):d.css({display:"block"}),a.trigger("restarttimer"),setTimeout(function(){containerResized(a,b)},150)),_R.hideUnHideNav&&_R.hideUnHideNav(b)},containerResized=function(a,b){if(a.trigger("revolution.slide.beforeredraw"),1==b.infullscreenmode&&(b.minHeight=jQuery(window).height()),setCurWinRange(b),setCurWinRange(b,!0),!_R.resizeThumbsTabs||!0===_R.resizeThumbsTabs(b)){if(hideSliderUnder(a,b,!0),contWidthManager(b),"carousel"==b.sliderType&&_R.prepareCarousel(b,!0),a===undefined)return!1;_R.setSize(b),b.conw=b.c.width(),b.conh=b.infullscreenmode?b.minHeight:b.c.height();var c=a.find(".active-revslide .slotholder"),d=a.find(".processing-revslide .slotholder");removeSlots(a,b,a,2),"standard"===b.sliderType&&(punchgs.TweenLite.set(d.find(".defaultimg"),{opacity:0}),c.find(".defaultimg").css({opacity:1})),"carousel"===b.sliderType&&b.lastconw!=b.conw&&(clearTimeout(b.pcartimer),b.pcartimer=setTimeout(function(){_R.prepareCarousel(b,!0),"carousel"==b.sliderType&&"on"===b.carousel.showLayersAllTime&&jQuery.each(b.li,function(a){_R.animateTheCaptions({slide:jQuery(b.li[a]),opt:b,recall:!0})})},100),b.lastconw=b.conw),_R.manageNavigation&&_R.manageNavigation(b),_R.animateTheCaptions&&a.find(".active-revslide").length>0&&_R.animateTheCaptions({slide:a.find(".active-revslide"),opt:b,recall:!0}),"on"==d.data("kenburns")&&_R.startKenBurn(d,b,d.data("kbtl")!==undefined?d.data("kbtl").progress():0),"on"==c.data("kenburns")&&_R.startKenBurn(c,b,c.data("kbtl")!==undefined?c.data("kbtl").progress():0),_R.animateTheCaptions&&a.find(".processing-revslide").length>0&&_R.animateTheCaptions({slide:a.find(".processing-revslide"),opt:b,recall:!0}),_R.manageNavigation&&_R.manageNavigation(b)}a.trigger("revolution.slide.afterdraw")},setScale=function(a){a.bw=a.width/a.gridwidth[a.curWinRange],a.bh=a.height/a.gridheight[a.curWinRange],a.bh>a.bw?a.bh=a.bw:a.bw=a.bh,(a.bh>1||a.bw>1)&&(a.bw=1,a.bh=1)},prepareSlides=function(a,b){if(a.find(".tp-caption").each(function(){var a=jQuery(this);a.data("transition")!==undefined&&a.addClass(a.data("transition"))}),b.ul.css({overflow:"hidden",width:"100%",height:"100%",maxHeight:a.parent().css("maxHeight")}),"on"==b.autoHeight&&(b.ul.css({overflow:"hidden",width:"100%",height:"100%",maxHeight:"none"}),a.css({maxHeight:"none"}),a.parent().css({maxHeight:"none"})),b.allli.each(function(a){var c=jQuery(this),d=c.data("originalindex");(b.startWithSlide!=undefined&&d==b.startWithSlide||b.startWithSlide===undefined&&0==a)&&c.addClass("next-revslide"),c.css({width:"100%",height:"100%",overflow:"hidden"})}),"carousel"===b.sliderType){b.ul.css({overflow:"visible"}).wrap('<div class="tp-carousel-wrapper" style="width:100%;height:100%;position:absolute;top:0px;left:0px;overflow:hidden;"></div>');var c='<div style="clear:both;display:block;width:100%;height:1px;position:relative;margin-bottom:-1px"></div>';b.c.parent().prepend(c),b.c.parent().append(c),_R.prepareCarousel(b)}a.parent().css({overflow:"visible"}),b.allli.find(">img").each(function(a){var c=jQuery(this),d=c.closest("li"),e=d.find(".rs-background-video-layer");e.addClass("defaultvid").css({zIndex:30}),c.addClass("defaultimg"),"on"==b.fallbacks.panZoomDisableOnMobile&&_ISM&&(c.data("kenburns","off"),c.data("bgfit","cover"));var f=d.data("mediafilter");f="none"===f||f===undefined?"":f,c.wrap('<div class="slotholder" style="position:absolute; top:0px; left:0px; z-index:0;width:100%;height:100%;"></div>'),e.appendTo(d.find(".slotholder"));var g=c.data();c.closest(".slotholder").data(g),e.length>0&&g.bgparallax!=undefined&&(e.data("bgparallax",g.bgparallax),e.data("showcoveronpause","on")),"none"!=b.dottedOverlay&&b.dottedOverlay!=undefined&&c.closest(".slotholder").append('<div class="tp-dottedoverlay '+b.dottedOverlay+'"></div>');var h=c.attr("src");g.src=h,g.bgfit=g.bgfit||"cover",g.bgrepeat=g.bgrepeat||"no-repeat",g.bgposition=g.bgposition||"center center";var j=(c.closest(".slotholder"),c.data("bgcolor")),k="";k=j!==undefined&&j.indexOf("gradient")>=0?'"background:'+j+';width:100%;height:100%;"':'"background-color:'+j+";background-repeat:"+g.bgrepeat+";background-image:url("+h+");background-size:"+g.bgfit+";background-position:"+g.bgposition+';width:100%;height:100%;"',c.data("mediafilter",f),f="on"===c.data("kenburns")?"":f;var l=jQuery('<div class="tp-bgimg defaultimg '+f+'" data-bgcolor="'+j+'" style='+k+"></div>");c.parent().append(l);var m=document.createComment("Runtime Modification - Img tag is Still Available for SEO Goals in Source - "+c.get(0).outerHTML);c.replaceWith(m),l.data(g),l.attr("src",h),"standard"!==b.sliderType&&"undefined"!==b.sliderType||l.css({opacity:0})}),b.scrolleffect.on&&"on"===b.scrolleffect.on_slidebg&&(b.allslotholder=new Array,b.allli.find(".slotholder").each(function(){jQuery(this).wrap('<div style="display:block;position:absolute;top:0px;left:0px;width:100%;height:100%" class="slotholder_fadeoutwrap"></div>')}),b.allslotholder=b.c.find(".slotholder_fadeoutwrap"))},removeSlots=function(a,b,c,d){b.removePrepare=b.removePrepare+d,c.find(".slot, .slot-circle-wrapper").each(function(){jQuery(this).remove()}),b.transition=0,b.removePrepare=0},cutParams=function(a){var b=a;return a!=undefined&&a.length>0&&(b=a.split("?")[0]),b},relativeRedir=function(a){return location.pathname.replace(/(.*)\/[^\/]*/,"$1/"+a)},abstorel=function(a,b){var c=a.split("/"),d=b.split("/");c.pop();for(var e=0;e<d.length;e++)"."!=d[e]&&(".."==d[e]?c.pop():c.push(d[e]));return c.join("/")},imgLoaded=function(a,b,c){b.syncload--,b.loadqueue&&jQuery.each(b.loadqueue,function(b,d){var e=d.src.replace(/\.\.\/\.\.\//gi,""),f=self.location.href,g=document.location.origin,h=f.substring(0,f.length-1)+"/"+e,i=g+"/"+e,j=abstorel(self.location.href,d.src);f=f.substring(0,f.length-1)+e,g+=e,(cutParams(g)===cutParams(decodeURIComponent(a.src))||cutParams(f)===cutParams(decodeURIComponent(a.src))||cutParams(j)===cutParams(decodeURIComponent(a.src))||cutParams(i)===cutParams(decodeURIComponent(a.src))||cutParams(h)===cutParams(decodeURIComponent(a.src))||cutParams(d.src)===cutParams(decodeURIComponent(a.src))||cutParams(d.src).replace(/^.*\/\/[^\/]+/,"")===cutParams(decodeURIComponent(a.src)).replace(/^.*\/\/[^\/]+/,"")||"file://"===window.location.origin&&cutParams(a.src).match(new RegExp(e)))&&(d.progress=c,d.width=a.width,d.height=a.height)}),progressImageLoad(b)},progressImageLoad=function(a){3!=a.syncload&&a.loadqueue&&jQuery.each(a.loadqueue,function(b,c){if(c.progress.match(/prepared/g)&&a.syncload<=3){if(a.syncload++,"img"==c.type){var d=new Image;d.onload=function(){imgLoaded(this,a,"loaded"),c.error=!1},d.onerror=function(){imgLoaded(this,a,"failed"),c.error=!0},d.src=c.src}else jQuery.get(c.src,function(b){c.innerHTML=(new XMLSerializer).serializeToString(b.documentElement),c.progress="loaded",a.syncload--,progressImageLoad(a)}).fail(function(){c.progress="failed",a.syncload--,progressImageLoad(a)});c.progress="inload"}})},addToLoadQueue=function(a,b,c,d,e){var f=!1;if(b.loadqueue&&jQuery.each(b.loadqueue,function(b,c){c.src===a&&(f=!0)}),!f){var g=new Object;g.src=a,g.starttoload=jQuery.now(),g.type=d||"img",g.prio=c,g.progress="prepared",g.static=e,b.loadqueue.push(g)}},loadImages=function(a,b,c,d){a.find("img,.defaultimg, .tp-svg-layer").each(function(){var a=jQuery(this),e=a.data("lazyload")!==undefined&&"undefined"!==a.data("lazyload")?a.data("lazyload"):a.data("svg_src")!=undefined?a.data("svg_src"):a.attr("src"),f=a.data("svg_src")!=undefined?"svg":"img";a.data("start-to-load",jQuery.now()),addToLoadQueue(e,b,c,f,d)}),progressImageLoad(b)},getLoadObj=function(a,b){var c=new Object;return a.loadqueue&&jQuery.each(a.loadqueue,function(a,d){d.src==b&&(c=d)}),c},waitForCurrentImages=function(a,b,c){var d=!1;a.find("img,.defaultimg, .tp-svg-layer").each(function(){var c=jQuery(this),e=c.data("lazyload")!=undefined?c.data("lazyload"):c.data("svg_src")!=undefined?c.data("svg_src"):c.attr("src"),f=getLoadObj(b,e);if(c.data("loaded")===undefined&&f!==undefined&&f.progress&&f.progress.match(/loaded/g)){if(c.attr("src",f.src),"img"==f.type)if(c.hasClass("defaultimg"))_R.isIE(8)?defimg.attr("src",f.src):-1==f.src.indexOf("images/transparent.png")&&-1==f.src.indexOf("assets/transparent.png")||c.data("bgcolor")===undefined?c.css({backgroundImage:'url("'+f.src+'")'}):c.data("bgcolor")!==undefined&&c.css({background:c.data("bgcolor")}),a.data("owidth",f.width),a.data("oheight",f.height),a.find(".slotholder").data("owidth",f.width),a.find(".slotholder").data("oheight",f.height);else{var g=c.data("ww"),h=c.data("hh");c.data("owidth",f.width),c.data("oheight",f.height),g=g==undefined||"auto"==g||""==g?f.width:g,h=h==undefined||"auto"==h||""==h?f.height:h,!jQuery.isNumeric(g)&&g.indexOf("%")>0&&(h=g),c.data("ww",g),c.data("hh",h)}else"svg"==f.type&&"loaded"==f.progress&&(c.append('<div class="tp-svg-innercontainer"></div>'),c.find(".tp-svg-innercontainer").append(f.innerHTML));c.data("loaded",!0)}if(f&&f.progress&&f.progress.match(/inprogress|inload|prepared/g)&&(!f.error&&jQuery.now()-c.data("start-to-load")<5e3?d=!0:(f.progress="failed",f.reported_img||(f.reported_img=!0,console.warn(e+"  Could not be loaded !")))),1==b.youtubeapineeded&&(!window.YT||YT.Player==undefined)&&(d=!0,jQuery.now()-b.youtubestarttime>5e3&&1!=b.youtubewarning)){b.youtubewarning=!0;var i="YouTube Api Could not be loaded !";"https:"===location.protocol&&(i+=" Please Check and Renew SSL Certificate !"),console.error(i),b.c.append('<div style="position:absolute;top:50%;width:100%;color:#e74c3c;  font-size:16px; text-align:center; padding:15px;background:#000; display:block;"><strong>'+i+"</strong></div>")}if(1==b.vimeoapineeded&&!window.Froogaloop&&(d=!0,jQuery.now()-b.vimeostarttime>5e3&&1!=b.vimeowarning)){b.vimeowarning=!0;var i="Vimeo Froogaloop Api Could not be loaded !";"https:"===location.protocol&&(i+=" Please Check and Renew SSL Certificate !"),console.error(i),b.c.append('<div style="position:absolute;top:50%;width:100%;color:#e74c3c;  font-size:16px; text-align:center; padding:15px;background:#000; display:block;"><strong>'+i+"</strong></div>")}}),!_ISM&&b.audioqueue&&b.audioqueue.length>0&&jQuery.each(b.audioqueue,function(a,b){b.status&&"prepared"===b.status&&jQuery.now()-b.start<b.waittime&&(d=!0)}),jQuery.each(b.loadqueue,function(a,b){!0!==b.static||"loaded"==b.progress&&"failed"!==b.progress||("failed"==b.progress?b.reported||(b.reported=!0,console.warn("Static Image "+b.src+"  Could not be loaded in time. Error Exists:"+b.error)):!b.error&&jQuery.now()-b.starttoload<5e3?d=!0:b.reported||(b.reported=!0,console.warn("Static Image "+b.src+"  Could not be loaded within 5s! Error Exists:"+b.error)))}),d?punchgs.TweenLite.delayedCall(.18,waitForCurrentImages,[a,b,c]):punchgs.TweenLite.delayedCall(.18,c)},swapSlide=function(a){var b=a[0].opt;if(clearTimeout(b.waitWithSwapSlide),a.find(".processing-revslide").length>0)return b.waitWithSwapSlide=setTimeout(function(){swapSlide(a)},150),!1;var c=a.find(".active-revslide"),d=a.find(".next-revslide"),e=d.find(".defaultimg");if("carousel"!==b.sliderType||b.carousel.fadein||(punchgs.TweenLite.to(b.ul,1,{opacity:1}),b.carousel.fadein=!0),d.index()===c.index()&&!0!==b.onlyPreparedSlide)return d.removeClass("next-revslide"),!1;!0===b.onlyPreparedSlide&&(b.onlyPreparedSlide=!1,jQuery(b.li[0]).addClass("processing-revslide")),d.removeClass("next-revslide").addClass("processing-revslide"),-1===d.index()&&"carousel"===b.sliderType&&(d=jQuery(b.li[0])),d.data("slide_on_focus_amount",d.data("slide_on_focus_amount")+1||1),"on"==b.stopLoop&&d.index()==b.lastslidetoshow-1&&(a.find(".tp-bannertimer").css({visibility:"hidden"}),a.trigger("revolution.slide.onstop"),b.noloopanymore=1),d.index()===b.slideamount-1&&(b.looptogo=b.looptogo-1,b.looptogo<=0&&(b.stopLoop="on")),b.tonpause=!0,a.trigger("stoptimer"),b.cd=0,"off"===b.spinner&&(b.loader!==undefined?b.loader.css({display:"none"}):b.loadertimer=setTimeout(function(){b.loader!==undefined&&b.loader.css({display:"block"})},50)),loadImages(d,b,1),_R.preLoadAudio&&_R.preLoadAudio(d,b,1),waitForCurrentImages(d,b,function(){d.find(".rs-background-video-layer").each(function(){var a=jQuery(this);a.hasClass("HasListener")||(a.data("bgvideo",1),_R.manageVideoLayer&&_R.manageVideoLayer(a,b)),0==a.find(".rs-fullvideo-cover").length&&a.append('<div class="rs-fullvideo-cover"></div>')}),swapSlideProgress(e,a)})},swapSlideProgress=function(a,b){var c=b.find(".active-revslide"),d=b.find(".processing-revslide"),e=c.find(".slotholder"),f=d.find(".slotholder"),g=b[0].opt;g.tonpause=!1,g.cd=0,clearTimeout(g.loadertimer),g.loader!==undefined&&g.loader.css({display:"none"}),_R.setSize(g),_R.slotSize(a,g),_R.manageNavigation&&_R.manageNavigation(g);var h={};h.nextslide=d,h.currentslide=c,b.trigger("revolution.slide.onbeforeswap",h),g.transition=1,g.videoplaying=!1,d.data("delay")!=undefined?(g.cd=0,g.delay=d.data("delay")):g.delay=g.origcd,"true"==d.data("ssop")||!0===d.data("ssop")?g.ssop=!0:g.ssop=!1,b.trigger("nulltimer");var i=c.index(),j=d.index();g.sdir=j<i?1:0,"arrow"==g.sc_indicator&&(0==i&&j==g.slideamount-1&&(g.sdir=1),i==g.slideamount-1&&0==j&&(g.sdir=0)),g.lsdir=g.lsdir===undefined?g.sdir:g.lsdir,g.dirc=g.lsdir!=g.sdir,g.lsdir=g.sdir,c.index()!=d.index()&&1!=g.firststart&&_R.removeTheCaptions&&_R.removeTheCaptions(c,g),d.hasClass("rs-pause-timer-once")||d.hasClass("rs-pause-timer-always")?g.videoplaying=!0:b.trigger("restarttimer"),d.removeClass("rs-pause-timer-once");var k,m;if(g.currentSlide=c.index(),g.nextSlide=d.index(),"carousel"==g.sliderType)m=new punchgs.TimelineLite,_R.prepareCarousel(g,m),letItFree(b,f,e,d,c,m),g.transition=0,g.firststart=0;else{m=new punchgs.TimelineLite({onComplete:function(){letItFree(b,f,e,d,c,m)}}),m.add(punchgs.TweenLite.set(f.find(".defaultimg"),{opacity:0})),m.pause(),_R.animateTheCaptions&&_R.animateTheCaptions({slide:d,opt:g,preset:!0}),1==g.firststart&&(punchgs.TweenLite.set(c,{autoAlpha:0}),g.firststart=0),punchgs.TweenLite.set(c,{zIndex:18}),punchgs.TweenLite.set(d,{autoAlpha:0,zIndex:20}),"prepared"==d.data("differentissplayed")&&(d.data("differentissplayed","done"),d.data("transition",d.data("savedtransition")),d.data("slotamount",d.data("savedslotamount")),d.data("masterspeed",d.data("savedmasterspeed"))),d.data("fstransition")!=undefined&&"done"!=d.data("differentissplayed")&&(d.data("savedtransition",d.data("transition")),d.data("savedslotamount",d.data("slotamount")),d.data("savedmasterspeed",d.data("masterspeed")),d.data("transition",d.data("fstransition")),d.data("slotamount",d.data("fsslotamount")),d.data("masterspeed",d.data("fsmasterspeed")),d.data("differentissplayed","prepared")),d.data("transition")==undefined&&d.data("transition","random"),k=0;var n=d.data("transition")!==undefined?d.data("transition").split(","):"fade",o=d.data("nexttransid")==undefined?-1:d.data("nexttransid");"on"==d.data("randomtransition")?o=Math.round(Math.random()*n.length):o+=1,o==n.length&&(o=0),d.data("nexttransid",o);var p=n[o];g.ie&&("boxfade"==p&&(p="boxslide"),"slotfade-vertical"==p&&(p="slotzoom-vertical"),"slotfade-horizontal"==p&&(p="slotzoom-horizontal")),_R.isIE(8)&&(p=11),m=_R.animateSlide(k,p,b,d,c,f,e,m),"on"==f.data("kenburns")&&(_R.startKenBurn(f,g),m.add(punchgs.TweenLite.set(f,{autoAlpha:0}))),m.pause()}_R.scrollHandling&&(_R.scrollHandling(g,!0,0),m.eventCallback("onUpdate",function(){_R.scrollHandling(g,!0,0)})),"off"!=g.parallax.type&&g.parallax.firstgo==undefined&&_R.scrollHandling&&(g.parallax.firstgo=!0,g.lastscrolltop=-999,_R.scrollHandling(g,!0,0),setTimeout(function(){g.lastscrolltop=-999,_R.scrollHandling(g,!0,0)},210),setTimeout(function(){g.lastscrolltop=-999,_R.scrollHandling(g,!0,0)},420)),_R.animateTheCaptions?"carousel"===g.sliderType&&"on"===g.carousel.showLayersAllTime?(jQuery.each(g.li,function(a){g.carousel.allLayersStarted?_R.animateTheCaptions({slide:jQuery(g.li[a]),opt:g,recall:!0}):g.li[a]===d?_R.animateTheCaptions({slide:jQuery(g.li[a]),maintimeline:m,opt:g,startslideanimat:0}):_R.animateTheCaptions({slide:jQuery(g.li[a]),opt:g,startslideanimat:0})}),g.carousel.allLayersStarted=!0):_R.animateTheCaptions({slide:d,opt:g,maintimeline:m,startslideanimat:0}):m!=undefined&&setTimeout(function(){m.resume()},30),punchgs.TweenLite.to(d,.001,{autoAlpha:1})},letItFree=function(a,b,c,d,e,f){var g=a[0].opt;"carousel"===g.sliderType||(g.removePrepare=0,punchgs.TweenLite.to(b.find(".defaultimg"),.001,{zIndex:20,autoAlpha:1,onComplete:function(){removeSlots(a,g,d,1)}}),d.index()!=e.index()&&punchgs.TweenLite.to(e,.2,{zIndex:18,autoAlpha:0,onComplete:function(){removeSlots(a,g,e,1)}})),a.find(".active-revslide").removeClass("active-revslide"),a.find(".processing-revslide").removeClass("processing-revslide").addClass("active-revslide"),g.act=d.index(),g.c.attr("data-slideactive",a.find(".active-revslide").data("index")),"scroll"!=g.parallax.type&&"scroll+mouse"!=g.parallax.type&&"mouse+scroll"!=g.parallax.type||(g.lastscrolltop=-999,_R.scrollHandling(g)),f.clear(),c.data("kbtl")!=undefined&&(c.data("kbtl").reverse(),c.data("kbtl").timeScale(25)),"on"==b.data("kenburns")&&(b.data("kbtl")!=undefined?(b.data("kbtl").timeScale(1),b.data("kbtl").play()):_R.startKenBurn(b,g)),d.find(".rs-background-video-layer").each(function(a){if(_ISM&&!g.fallbacks.allowHTML5AutoPlayOnAndroid)return!1;var b=jQuery(this);_R.resetVideo(b,g),punchgs.TweenLite.fromTo(b,1,{autoAlpha:0},{autoAlpha:1,ease:punchgs.Power3.easeInOut,delay:.2,onComplete:function(){_R.animcompleted&&_R.animcompleted(b,g)}})}),e.find(".rs-background-video-layer").each(function(a){if(_ISM)return!1;var b=jQuery(this);_R.stopVideo&&(_R.resetVideo(b,g),_R.stopVideo(b,g)),punchgs.TweenLite.to(b,1,{autoAlpha:0,ease:punchgs.Power3.easeInOut,delay:.2})});var h={};if(h.slideIndex=d.index()+1,h.slideLIIndex=d.index(),h.slide=d,h.currentslide=d,h.prevslide=e,g.last_shown_slide=e.index(),a.trigger("revolution.slide.onchange",h),a.trigger("revolution.slide.onafterswap",h),g.startWithSlide!==undefined&&"done"!==g.startWithSlide&&"carousel"===g.sliderType){for(var i=g.startWithSlide,j=0;j<=g.li.length-1;j++){jQuery(g.li[j]).data("originalindex")===g.startWithSlide&&(i=j)}0!==i&&_R.callingNewSlide(g.c,i),g.startWithSlide="done"}g.duringslidechange=!1;var l=e.data("slide_on_focus_amount"),m=e.data("hideafterloop");0!=m&&m<=l&&g.c.revremoveslide(e.index());var n=-1===g.nextSlide||g.nextSlide===undefined?0:g.nextSlide;g.rowzones!=undefined&&(n=n>g.rowzones.length?g.rowzones.length:n),g.rowzones!=undefined&&g.rowzones.length>0&&g.rowzones[n]!=undefined&&n>=0&&n<=g.rowzones.length&&g.rowzones[n].length>0&&_R.setSize(g)},removeAllListeners=function(a,b){a.children().each(function(){try{jQuery(this).die("click")}catch(a){}try{jQuery(this).die("mouseenter")}catch(a){}try{jQuery(this).die("mouseleave")}catch(a){}try{jQuery(this).unbind("hover")}catch(a){}});try{a.die("click","mouseenter","mouseleave")}catch(a){}clearInterval(b.cdint),a=null},countDown=function(a,b){b.cd=0,b.loop=0,b.stopAfterLoops!=undefined&&b.stopAfterLoops>-1?b.looptogo=b.stopAfterLoops:b.looptogo=9999999,b.stopAtSlide!=undefined&&b.stopAtSlide>-1?b.lastslidetoshow=b.stopAtSlide:b.lastslidetoshow=999,b.stopLoop="off",0==b.looptogo&&(b.stopLoop="on");var c=a.find(".tp-bannertimer");a.on("stoptimer",function(){var a=jQuery(this).find(".tp-bannertimer");a[0].tween.pause(),"on"==b.disableProgressBar&&a.css({visibility:"hidden"}),b.sliderstatus="paused",_R.unToggleState(b.slidertoggledby)}),a.on("starttimer",function(){b.forcepause_viatoggle||(1!=b.conthover&&1!=b.videoplaying&&b.width>b.hideSliderAtLimit&&1!=b.tonpause&&1!=b.overnav&&1!=b.ssop&&(1===b.noloopanymore||b.viewPort.enable&&!b.inviewport||(c.css({visibility:"visible"}),c[0].tween.resume(),b.sliderstatus="playing")),"on"==b.disableProgressBar&&c.css({visibility:"hidden"}),_R.toggleState(b.slidertoggledby))}),a.on("restarttimer",function(){if(!b.forcepause_viatoggle){var a=jQuery(this).find(".tp-bannertimer");if(b.mouseoncontainer&&"on"==b.navigation.onHoverStop&&!_ISM)return!1;1===b.noloopanymore||b.viewPort.enable&&!b.inviewport||1==b.ssop||(a.css({visibility:"visible"}),a[0].tween.kill(),a[0].tween=punchgs.TweenLite.fromTo(a,b.delay/1e3,{width:"0%"},{force3D:"auto",width:"100%",ease:punchgs.Linear.easeNone,onComplete:d,delay:1}),b.sliderstatus="playing"),"on"==b.disableProgressBar&&a.css({visibility:"hidden"}),_R.toggleState(b.slidertoggledby)}}),a.on("nulltimer",function(){c[0].tween.kill(),c[0].tween=punchgs.TweenLite.fromTo(c,b.delay/1e3,{width:"0%"},{force3D:"auto",width:"100%",ease:punchgs.Linear.easeNone,onComplete:d,delay:1}),c[0].tween.pause(0),"on"==b.disableProgressBar&&c.css({visibility:"hidden"}),b.sliderstatus="paused"});var d=function(){0==jQuery("body").find(a).length&&(removeAllListeners(a,b),clearInterval(b.cdint)),a.trigger("revolution.slide.slideatend"),1==a.data("conthover-changed")&&(b.conthover=a.data("conthover"),a.data("conthover-changed",0)),_R.callingNewSlide(a,1)};c[0].tween=punchgs.TweenLite.fromTo(c,b.delay/1e3,{width:"0%"},{force3D:"auto",width:"100%",ease:punchgs.Linear.easeNone,onComplete:d,delay:1}),b.slideamount>1&&(0!=b.stopAfterLoops||1!=b.stopAtSlide)?a.trigger("starttimer"):(b.noloopanymore=1,a.trigger("nulltimer")),a.on("tp-mouseenter",function(){b.mouseoncontainer=!0,"on"!=b.navigation.onHoverStop||_ISM||(a.trigger("stoptimer"),a.trigger("revolution.slide.onpause"))}),a.on("tp-mouseleft",function(){b.mouseoncontainer=!1,1!=a.data("conthover")&&"on"==b.navigation.onHoverStop&&(1==b.viewPort.enable&&b.inviewport||0==b.viewPort.enable)&&(a.trigger("revolution.slide.onresume"),a.trigger("starttimer"))})},vis=function(){var a,b,c={hidden:"visibilitychange",webkitHidden:"webkitvisibilitychange",mozHidden:"mozvisibilitychange",msHidden:"msvisibilitychange"};for(a in c)if(a in document){b=c[a];break}return function(c){return c&&document.addEventListener(b,c,{pasive:!0}),!document[a]}}(),restartOnFocus=function(){jQuery(".rev_redraw_on_blurfocus").each(function(){var a=jQuery(this)[0].opt;if(a==undefined||a.c==undefined||0===a.c.length)return!1;1!=a.windowfocused&&(a.windowfocused=!0,punchgs.TweenLite.delayedCall(.3,function(){"on"==a.fallbacks.nextSlideOnWindowFocus&&a.c.revnext(),a.c.revredraw(),"playing"==a.lastsliderstatus&&a.c.revresume()}))})},lastStatBlur=function(){jQuery(".rev_redraw_on_blurfocus").each(function(){var a=jQuery(this)[0].opt;a.windowfocused=!1,a.lastsliderstatus=a.sliderstatus,a.c.revpause();var b=a.c.find(".active-revslide .slotholder"),c=a.c.find(".processing-revslide .slotholder");"on"==c.data("kenburns")&&_R.stopKenBurn(c,a),"on"==b.data("kenburns")&&_R.stopKenBurn(b,a)})},tabBlurringCheck=function(){var a=document.documentMode===undefined,b=window.chrome;1!==jQuery("body").data("revslider_focus_blur_listener")&&(jQuery("body").data("revslider_focus_blur_listener",1),a&&!b?jQuery(window).on("focusin",function(){restartOnFocus()}).on("focusout",function(){lastStatBlur()}):window.addEventListener?(window.addEventListener("focus",function(a){restartOnFocus()},{capture:!1,passive:!0}),window.addEventListener("blur",function(a){lastStatBlur()},{capture:!1,passive:!0})):(window.attachEvent("focus",function(a){restartOnFocus()}),window.attachEvent("blur",function(a){lastStatBlur()})))},getUrlVars=function(a){for(var c,b=[],d=window.location.href.slice(window.location.href.indexOf(a)+1).split("_"),e=0;e<d.length;e++)d[e]=d[e].replace("%3D","="),c=d[e].split("="),b.push(c[0]),b[c[0]]=c[1];return b}}(jQuery);
// source --> https://www.megasite.com.tr/wp-content/themes/kradio/js/nprogress.js?ver=20151215 
;(function(root,factory){if(typeof define==='function'&&define.amd){define(factory);}else if(typeof exports==='object'){module.exports=factory();}else{root.NProgress=factory();}})(this,function(){var NProgress={};NProgress.version='0.2.0';var Settings=NProgress.settings={minimum:0.08,easing:'ease',positionUsing:'',speed:200,trickle:true,trickleRate:0.02,trickleSpeed:800,showSpinner:true,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:'body',template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};NProgress.configure=function(options){var key,value;for(key in options){value=options[key];if(value!==undefined&&options.hasOwnProperty(key))Settings[key]=value;}
return this;};NProgress.status=null;NProgress.set=function(n){var started=NProgress.isStarted();n=clamp(n,Settings.minimum,1);NProgress.status=(n===1?null:n);var progress=NProgress.render(!started),bar=progress.querySelector(Settings.barSelector),speed=Settings.speed,ease=Settings.easing;progress.offsetWidth;queue(function(next){if(Settings.positionUsing==='')Settings.positionUsing=NProgress.getPositioningCSS();css(bar,barPositionCSS(n,speed,ease));if(n===1){css(progress,{transition:'none',opacity:1});progress.offsetWidth;setTimeout(function(){css(progress,{transition:'all '+speed+'ms linear',opacity:0});setTimeout(function(){NProgress.remove();next();},speed);},speed);}else{setTimeout(next,speed);}});return this;};NProgress.isStarted=function(){return typeof NProgress.status==='number';};NProgress.start=function(){if(!NProgress.status)NProgress.set(0);var work=function(){setTimeout(function(){if(!NProgress.status)return;NProgress.trickle();work();},Settings.trickleSpeed);};if(Settings.trickle)work();return this;};NProgress.done=function(force){if(!force&&!NProgress.status)return this;return NProgress.inc(0.3+0.5*Math.random()).set(1);};NProgress.inc=function(amount){var n=NProgress.status;if(!n){return NProgress.start();}else{if(typeof amount!=='number'){amount=(1-n)*clamp(Math.random()*n,0.1,0.95);}
n=clamp(n+amount,0,0.994);return NProgress.set(n);}};NProgress.trickle=function(){return NProgress.inc(Math.random()*Settings.trickleRate);};(function(){var initial=0,current=0;NProgress.promise=function($promise){if(!$promise||$promise.state()==="resolved"){return this;}
if(current===0){NProgress.start();}
initial++;current++;$promise.always(function(){current--;if(current===0){initial=0;NProgress.done();}else{NProgress.set((initial-current)/initial);}});return this;};})();NProgress.render=function(fromStart){if(NProgress.isRendered())return document.getElementById('nprogress');addClass(document.documentElement,'nprogress-busy');var progress=document.createElement('div');progress.id='nprogress';progress.innerHTML=Settings.template;var bar=progress.querySelector(Settings.barSelector),perc=fromStart?'-100':toBarPerc(NProgress.status||0),parent=document.querySelector(Settings.parent),spinner;css(bar,{transition:'all 0 linear',transform:'translate3d('+perc+'%,0,0)'});if(!Settings.showSpinner){spinner=progress.querySelector(Settings.spinnerSelector);spinner&&removeElement(spinner);}
if(parent!=document.body){addClass(parent,'nprogress-custom-parent');}
parent.appendChild(progress);return progress;};NProgress.remove=function(){removeClass(document.documentElement,'nprogress-busy');removeClass(document.querySelector(Settings.parent),'nprogress-custom-parent');var progress=document.getElementById('nprogress');progress&&removeElement(progress);};NProgress.isRendered=function(){return!!document.getElementById('nprogress');};NProgress.getPositioningCSS=function(){var bodyStyle=document.body.style;var vendorPrefix=('WebkitTransform'in bodyStyle)?'Webkit':('MozTransform'in bodyStyle)?'Moz':('msTransform'in bodyStyle)?'ms':('OTransform'in bodyStyle)?'O':'';if(vendorPrefix+'Perspective'in bodyStyle){return 'translate3d';}else if(vendorPrefix+'Transform'in bodyStyle){return 'translate';}else{return 'margin';}};function clamp(n,min,max){if(n<min)return min;if(n>max)return max;return n;}
function toBarPerc(n){return(-1+n)*100;}
function barPositionCSS(n,speed,ease){var barCSS;if(Settings.positionUsing==='translate3d'){barCSS={transform:'translate3d('+toBarPerc(n)+'%,0,0)'};}else if(Settings.positionUsing==='translate'){barCSS={transform:'translate('+toBarPerc(n)+'%,0)'};}else{barCSS={'margin-left':toBarPerc(n)+'%'};}
barCSS.transition='all '+speed+'ms '+ease;return barCSS;}
var queue=(function(){var pending=[];function next(){var fn=pending.shift();if(fn){fn(next);}}
return function(fn){pending.push(fn);if(pending.length==1)next();};})();var css=(function(){var cssPrefixes=['Webkit','O','Moz','ms'],cssProps={};function camelCase(string){return string.replace(/^-ms-/,'ms-').replace(/-([\da-z])/gi,function(match,letter){return letter.toUpperCase();});}
function getVendorProp(name){var style=document.body.style;if(name in style)return name;var i=cssPrefixes.length,capName=name.charAt(0).toUpperCase()+name.slice(1),vendorName;while(i--){vendorName=cssPrefixes[i]+capName;if(vendorName in style)return vendorName;}
return name;}
function getStyleProp(name){name=camelCase(name);return cssProps[name]||(cssProps[name]=getVendorProp(name));}
function applyCss(element,prop,value){prop=getStyleProp(prop);element.style[prop]=value;}
return function(element,properties){var args=arguments,prop,value;if(args.length==2){for(prop in properties){value=properties[prop];if(value!==undefined&&properties.hasOwnProperty(prop))applyCss(element,prop,value);}}else{applyCss(element,args[1],args[2]);}}})();function hasClass(element,name){var list=typeof element=='string'?element:classList(element);return list.indexOf(' '+name+' ')>=0;}
function addClass(element,name){var oldList=classList(element),newList=oldList+name;if(hasClass(oldList,name))return;element.className=newList.substring(1);}
function removeClass(element,name){var oldList=classList(element),newList;if(!hasClass(element,name))return;newList=oldList.replace(' '+name+' ',' ');element.className=newList.substring(1,newList.length-1);}
function classList(element){return(' '+(element.className||'')+' ').replace(/\s+/gi,' ');}
function removeElement(element){element&&element.parentNode&&element.parentNode.removeChild(element);}
return NProgress;});
// source --> https://www.megasite.com.tr/wp-content/themes/kradio/js/jquery.pjax.js?ver=20151215 
/*! pjax-api v3.26.2 https://github.com/falsandtru/pjax-api | (c) 2012, falsandtru | (Apache-2.0 AND MPL-2.0) License */
require = function () {
    function r(e, n, t) {
        function o(i, f) {
            if (!n[i]) {
                if (!e[i]) {
                    var c = 'function' == typeof require && require;
                    if (!f && c)
                        return c(i, !0);
                    if (u)
                        return u(i, !0);
                    var a = new Error('Cannot find module \'' + i + '\'');
                    throw a.code = 'MODULE_NOT_FOUND', a;
                }
                var p = n[i] = { exports: {} };
                e[i][0].call(p.exports, function (r) {
                    var n = e[i][1][r];
                    return o(n || r);
                }, p, p.exports, r, e, n, t);
            }
            return n[i].exports;
        }
        for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++)
            o(t[i]);
        return o;
    }
    return r;
}()({
    1: [
        function (_dereq_, module, exports) {
        },
        {}
    ],
    2: [
        function (_dereq_, module, exports) {
            arguments[4][1][0].apply(exports, arguments);
        },
        { 'dup': 1 }
    ],
    3: [
        function (_dereq_, module, exports) {
            arguments[4][1][0].apply(exports, arguments);
        },
        { 'dup': 1 }
    ],
    4: [
        function (_dereq_, module, exports) {
            var asn1 = exports;
            asn1.bignum = _dereq_('bn.js');
            asn1.define = _dereq_('./asn1/api').define;
            asn1.base = _dereq_('./asn1/base');
            asn1.constants = _dereq_('./asn1/constants');
            asn1.decoders = _dereq_('./asn1/decoders');
            asn1.encoders = _dereq_('./asn1/encoders');
        },
        {
            './asn1/api': 5,
            './asn1/base': 7,
            './asn1/constants': 11,
            './asn1/decoders': 13,
            './asn1/encoders': 16,
            'bn.js': 19
        }
    ],
    5: [
        function (_dereq_, module, exports) {
            var asn1 = _dereq_('../asn1');
            var inherits = _dereq_('inherits');
            var api = exports;
            api.define = function define(name, body) {
                return new Entity(name, body);
            };
            function Entity(name, body) {
                this.name = name;
                this.body = body;
                this.decoders = {};
                this.encoders = {};
            }
            ;
            Entity.prototype._createNamed = function createNamed(base) {
                var named;
                try {
                    named = _dereq_('vm').runInThisContext('(function ' + this.name + '(entity) {\n' + '  this._initNamed(entity);\n' + '})');
                } catch (e) {
                    named = function (entity) {
                        this._initNamed(entity);
                    };
                }
                inherits(named, base);
                named.prototype._initNamed = function initnamed(entity) {
                    base.call(this, entity);
                };
                return new named(this);
            };
            Entity.prototype._getDecoder = function _getDecoder(enc) {
                enc = enc || 'der';
                if (!this.decoders.hasOwnProperty(enc))
                    this.decoders[enc] = this._createNamed(asn1.decoders[enc]);
                return this.decoders[enc];
            };
            Entity.prototype.decode = function decode(data, enc, options) {
                return this._getDecoder(enc).decode(data, options);
            };
            Entity.prototype._getEncoder = function _getEncoder(enc) {
                enc = enc || 'der';
                if (!this.encoders.hasOwnProperty(enc))
                    this.encoders[enc] = this._createNamed(asn1.encoders[enc]);
                return this.encoders[enc];
            };
            Entity.prototype.encode = function encode(data, enc, reporter) {
                return this._getEncoder(enc).encode(data, reporter);
            };
        },
        {
            '../asn1': 4,
            'inherits': 103,
            'vm': 249
        }
    ],
    6: [
        function (_dereq_, module, exports) {
            var inherits = _dereq_('inherits');
            var Reporter = _dereq_('../base').Reporter;
            var Buffer = _dereq_('buffer').Buffer;
            function DecoderBuffer(base, options) {
                Reporter.call(this, options);
                if (!Buffer.isBuffer(base)) {
                    this.error('Input not Buffer');
                    return;
                }
                this.base = base;
                this.offset = 0;
                this.length = base.length;
            }
            inherits(DecoderBuffer, Reporter);
            exports.DecoderBuffer = DecoderBuffer;
            DecoderBuffer.prototype.save = function save() {
                return {
                    offset: this.offset,
                    reporter: Reporter.prototype.save.call(this)
                };
            };
            DecoderBuffer.prototype.restore = function restore(save) {
                var res = new DecoderBuffer(this.base);
                res.offset = save.offset;
                res.length = this.offset;
                this.offset = save.offset;
                Reporter.prototype.restore.call(this, save.reporter);
                return res;
            };
            DecoderBuffer.prototype.isEmpty = function isEmpty() {
                return this.offset === this.length;
            };
            DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {
                if (this.offset + 1 <= this.length)
                    return this.base.readUInt8(this.offset++, true);
                else
                    return this.error(fail || 'DecoderBuffer overrun');
            };
            DecoderBuffer.prototype.skip = function skip(bytes, fail) {
                if (!(this.offset + bytes <= this.length))
                    return this.error(fail || 'DecoderBuffer overrun');
                var res = new DecoderBuffer(this.base);
                res._reporterState = this._reporterState;
                res.offset = this.offset;
                res.length = this.offset + bytes;
                this.offset += bytes;
                return res;
            };
            DecoderBuffer.prototype.raw = function raw(save) {
                return this.base.slice(save ? save.offset : this.offset, this.length);
            };
            function EncoderBuffer(value, reporter) {
                if (Array.isArray(value)) {
                    this.length = 0;
                    this.value = value.map(function (item) {
                        if (!(item instanceof EncoderBuffer))
                            item = new EncoderBuffer(item, reporter);
                        this.length += item.length;
                        return item;
                    }, this);
                } else if (typeof value === 'number') {
                    if (!(0 <= value && value <= 255))
                        return reporter.error('non-byte EncoderBuffer value');
                    this.value = value;
                    this.length = 1;
                } else if (typeof value === 'string') {
                    this.value = value;
                    this.length = Buffer.byteLength(value);
                } else if (Buffer.isBuffer(value)) {
                    this.value = value;
                    this.length = value.length;
                } else {
                    return reporter.error('Unsupported type: ' + typeof value);
                }
            }
            exports.EncoderBuffer = EncoderBuffer;
            EncoderBuffer.prototype.join = function join(out, offset) {
                if (!out)
                    out = new Buffer(this.length);
                if (!offset)
                    offset = 0;
                if (this.length === 0)
                    return out;
                if (Array.isArray(this.value)) {
                    this.value.forEach(function (item) {
                        item.join(out, offset);
                        offset += item.length;
                    });
                } else {
                    if (typeof this.value === 'number')
                        out[offset] = this.value;
                    else if (typeof this.value === 'string')
                        out.write(this.value, offset);
                    else if (Buffer.isBuffer(this.value))
                        this.value.copy(out, offset);
                    offset += this.length;
                }
                return out;
            };
        },
        {
            '../base': 7,
            'buffer': 50,
            'inherits': 103
        }
    ],
    7: [
        function (_dereq_, module, exports) {
            var base = exports;
            base.Reporter = _dereq_('./reporter').Reporter;
            base.DecoderBuffer = _dereq_('./buffer').DecoderBuffer;
            base.EncoderBuffer = _dereq_('./buffer').EncoderBuffer;
            base.Node = _dereq_('./node');
        },
        {
            './buffer': 6,
            './node': 8,
            './reporter': 9
        }
    ],
    8: [
        function (_dereq_, module, exports) {
            var Reporter = _dereq_('../base').Reporter;
            var EncoderBuffer = _dereq_('../base').EncoderBuffer;
            var DecoderBuffer = _dereq_('../base').DecoderBuffer;
            var assert = _dereq_('minimalistic-assert');
            var tags = [
                'seq',
                'seqof',
                'set',
                'setof',
                'objid',
                'bool',
                'gentime',
                'utctime',
                'null_',
                'enum',
                'int',
                'objDesc',
                'bitstr',
                'bmpstr',
                'charstr',
                'genstr',
                'graphstr',
                'ia5str',
                'iso646str',
                'numstr',
                'octstr',
                'printstr',
                't61str',
                'unistr',
                'utf8str',
                'videostr'
            ];
            var methods = [
                'key',
                'obj',
                'use',
                'optional',
                'explicit',
                'implicit',
                'def',
                'choice',
                'any',
                'contains'
            ].concat(tags);
            var overrided = [
                '_peekTag',
                '_decodeTag',
                '_use',
                '_decodeStr',
                '_decodeObjid',
                '_decodeTime',
                '_decodeNull',
                '_decodeInt',
                '_decodeBool',
                '_decodeList',
                '_encodeComposite',
                '_encodeStr',
                '_encodeObjid',
                '_encodeTime',
                '_encodeNull',
                '_encodeInt',
                '_encodeBool'
            ];
            function Node(enc, parent) {
                var state = {};
                this._baseState = state;
                state.enc = enc;
                state.parent = parent || null;
                state.children = null;
                state.tag = null;
                state.args = null;
                state.reverseArgs = null;
                state.choice = null;
                state.optional = false;
                state.any = false;
                state.obj = false;
                state.use = null;
                state.useDecoder = null;
                state.key = null;
                state['default'] = null;
                state.explicit = null;
                state.implicit = null;
                state.contains = null;
                if (!state.parent) {
                    state.children = [];
                    this._wrap();
                }
            }
            module.exports = Node;
            var stateProps = [
                'enc',
                'parent',
                'children',
                'tag',
                'args',
                'reverseArgs',
                'choice',
                'optional',
                'any',
                'obj',
                'use',
                'alteredUse',
                'key',
                'default',
                'explicit',
                'implicit',
                'contains'
            ];
            Node.prototype.clone = function clone() {
                var state = this._baseState;
                var cstate = {};
                stateProps.forEach(function (prop) {
                    cstate[prop] = state[prop];
                });
                var res = new this.constructor(cstate.parent);
                res._baseState = cstate;
                return res;
            };
            Node.prototype._wrap = function wrap() {
                var state = this._baseState;
                methods.forEach(function (method) {
                    this[method] = function _wrappedMethod() {
                        var clone = new this.constructor(this);
                        state.children.push(clone);
                        return clone[method].apply(clone, arguments);
                    };
                }, this);
            };
            Node.prototype._init = function init(body) {
                var state = this._baseState;
                body.call(this);
                state.children = state.children.filter(function (child) {
                    return child._baseState.parent === this;
                }, this);
            };
            Node.prototype._useArgs = function useArgs(args) {
                var state = this._baseState;
                var children = args.filter(function (arg) {
                    return arg instanceof this.constructor;
                }, this);
                args = args.filter(function (arg) {
                    return !(arg instanceof this.constructor);
                }, this);
                if (children.length !== 0) {
                    state.children = children;
                    children.forEach(function (child) {
                        child._baseState.parent = this;
                    }, this);
                }
                if (args.length !== 0) {
                    state.args = args;
                    state.reverseArgs = args.map(function (arg) {
                        if (typeof arg !== 'object' || arg.constructor !== Object)
                            return arg;
                        var res = {};
                        Object.keys(arg).forEach(function (key) {
                            if (key == (key | 0))
                                key |= 0;
                            var value = arg[key];
                            res[value] = key;
                        });
                        return res;
                    });
                }
            };
            overrided.forEach(function (method) {
                Node.prototype[method] = function _overrided() {
                    var state = this._baseState;
                    throw new Error(method + ' not implemented for encoding: ' + state.enc);
                };
            });
            tags.forEach(function (tag) {
                Node.prototype[tag] = function _tagMethod() {
                    var state = this._baseState;
                    var args = Array.prototype.slice.call(arguments);
                    state.tag = tag;
                    this._useArgs(args);
                    return this;
                };
            });
            Node.prototype.use = function use(item) {
                var state = this._baseState;
                state.use = item;
                return this;
            };
            Node.prototype.optional = function optional() {
                var state = this._baseState;
                state.optional = true;
                return this;
            };
            Node.prototype.def = function def(val) {
                var state = this._baseState;
                state['default'] = val;
                state.optional = true;
                return this;
            };
            Node.prototype.explicit = function explicit(num) {
                var state = this._baseState;
                state.explicit = num;
                return this;
            };
            Node.prototype.implicit = function implicit(num) {
                var state = this._baseState;
                state.implicit = num;
                return this;
            };
            Node.prototype.obj = function obj() {
                var state = this._baseState;
                var args = Array.prototype.slice.call(arguments);
                state.obj = true;
                if (args.length !== 0)
                    this._useArgs(args);
                return this;
            };
            Node.prototype.key = function key(newKey) {
                var state = this._baseState;
                state.key = newKey;
                return this;
            };
            Node.prototype.any = function any() {
                var state = this._baseState;
                state.any = true;
                return this;
            };
            Node.prototype.choice = function choice(obj) {
                var state = this._baseState;
                state.choice = obj;
                this._useArgs(Object.keys(obj).map(function (key) {
                    return obj[key];
                }));
                return this;
            };
            Node.prototype.contains = function contains(item) {
                var state = this._baseState;
                state.contains = item;
                return this;
            };
            Node.prototype._decode = function decode(input, options) {
                var state = this._baseState;
                if (state.parent === null)
                    return input.wrapResult(state.children[0]._decode(input, options));
                var result = state['default'];
                var present = true;
                var prevKey = null;
                if (state.key !== null)
                    prevKey = input.enterKey(state.key);
                if (state.optional) {
                    var tag = null;
                    if (state.explicit !== null)
                        tag = state.explicit;
                    else if (state.implicit !== null)
                        tag = state.implicit;
                    else if (state.tag !== null)
                        tag = state.tag;
                    if (tag === null && !state.any) {
                        var save = input.save();
                        try {
                            if (state.choice === null)
                                this._decodeGeneric(state.tag, input, options);
                            else
                                this._decodeChoice(input, options);
                            present = true;
                        } catch (e) {
                            present = false;
                        }
                        input.restore(save);
                    } else {
                        present = this._peekTag(input, tag, state.any);
                        if (input.isError(present))
                            return present;
                    }
                }
                var prevObj;
                if (state.obj && present)
                    prevObj = input.enterObject();
                if (present) {
                    if (state.explicit !== null) {
                        var explicit = this._decodeTag(input, state.explicit);
                        if (input.isError(explicit))
                            return explicit;
                        input = explicit;
                    }
                    var start = input.offset;
                    if (state.use === null && state.choice === null) {
                        if (state.any)
                            var save = input.save();
                        var body = this._decodeTag(input, state.implicit !== null ? state.implicit : state.tag, state.any);
                        if (input.isError(body))
                            return body;
                        if (state.any)
                            result = input.raw(save);
                        else
                            input = body;
                    }
                    if (options && options.track && state.tag !== null)
                        options.track(input.path(), start, input.length, 'tagged');
                    if (options && options.track && state.tag !== null)
                        options.track(input.path(), input.offset, input.length, 'content');
                    if (state.any)
                        result = result;
                    else if (state.choice === null)
                        result = this._decodeGeneric(state.tag, input, options);
                    else
                        result = this._decodeChoice(input, options);
                    if (input.isError(result))
                        return result;
                    if (!state.any && state.choice === null && state.children !== null) {
                        state.children.forEach(function decodeChildren(child) {
                            child._decode(input, options);
                        });
                    }
                    if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {
                        var data = new DecoderBuffer(result);
                        result = this._getUse(state.contains, input._reporterState.obj)._decode(data, options);
                    }
                }
                if (state.obj && present)
                    result = input.leaveObject(prevObj);
                if (state.key !== null && (result !== null || present === true))
                    input.leaveKey(prevKey, state.key, result);
                else if (prevKey !== null)
                    input.exitKey(prevKey);
                return result;
            };
            Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {
                var state = this._baseState;
                if (tag === 'seq' || tag === 'set')
                    return null;
                if (tag === 'seqof' || tag === 'setof')
                    return this._decodeList(input, tag, state.args[0], options);
                else if (/str$/.test(tag))
                    return this._decodeStr(input, tag, options);
                else if (tag === 'objid' && state.args)
                    return this._decodeObjid(input, state.args[0], state.args[1], options);
                else if (tag === 'objid')
                    return this._decodeObjid(input, null, null, options);
                else if (tag === 'gentime' || tag === 'utctime')
                    return this._decodeTime(input, tag, options);
                else if (tag === 'null_')
                    return this._decodeNull(input, options);
                else if (tag === 'bool')
                    return this._decodeBool(input, options);
                else if (tag === 'objDesc')
                    return this._decodeStr(input, tag, options);
                else if (tag === 'int' || tag === 'enum')
                    return this._decodeInt(input, state.args && state.args[0], options);
                if (state.use !== null) {
                    return this._getUse(state.use, input._reporterState.obj)._decode(input, options);
                } else {
                    return input.error('unknown tag: ' + tag);
                }
            };
            Node.prototype._getUse = function _getUse(entity, obj) {
                var state = this._baseState;
                state.useDecoder = this._use(entity, obj);
                state.useDecoder = state.useDecoder._baseState.children[0];
                if (state.implicit !== state.useDecoder._baseState.implicit) {
                    state.useDecoder = state.useDecoder.clone();
                    state.useDecoder._baseState.implicit = state.implicit;
                }
                return state.useDecoder;
            };
            Node.prototype._decodeChoice = function decodeChoice(input, options) {
                var state = this._baseState;
                var result = null;
                var match = false;
                Object.keys(state.choice).some(function (key) {
                    var save = input.save();
                    var node = state.choice[key];
                    try {
                        var value = node._decode(input, options);
                        if (input.isError(value))
                            return false;
                        result = {
                            type: key,
                            value: value
                        };
                        match = true;
                    } catch (e) {
                        input.restore(save);
                        return false;
                    }
                    return true;
                }, this);
                if (!match)
                    return input.error('Choice not matched');
                return result;
            };
            Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) {
                return new EncoderBuffer(data, this.reporter);
            };
            Node.prototype._encode = function encode(data, reporter, parent) {
                var state = this._baseState;
                if (state['default'] !== null && state['default'] === data)
                    return;
                var result = this._encodeValue(data, reporter, parent);
                if (result === undefined)
                    return;
                if (this._skipDefault(result, reporter, parent))
                    return;
                return result;
            };
            Node.prototype._encodeValue = function encode(data, reporter, parent) {
                var state = this._baseState;
                if (state.parent === null)
                    return state.children[0]._encode(data, reporter || new Reporter());
                var result = null;
                this.reporter = reporter;
                if (state.optional && data === undefined) {
                    if (state['default'] !== null)
                        data = state['default'];
                    else
                        return;
                }
                var content = null;
                var primitive = false;
                if (state.any) {
                    result = this._createEncoderBuffer(data);
                } else if (state.choice) {
                    result = this._encodeChoice(data, reporter);
                } else if (state.contains) {
                    content = this._getUse(state.contains, parent)._encode(data, reporter);
                    primitive = true;
                } else if (state.children) {
                    content = state.children.map(function (child) {
                        if (child._baseState.tag === 'null_')
                            return child._encode(null, reporter, data);
                        if (child._baseState.key === null)
                            return reporter.error('Child should have a key');
                        var prevKey = reporter.enterKey(child._baseState.key);
                        if (typeof data !== 'object')
                            return reporter.error('Child expected, but input is not object');
                        var res = child._encode(data[child._baseState.key], reporter, data);
                        reporter.leaveKey(prevKey);
                        return res;
                    }, this).filter(function (child) {
                        return child;
                    });
                    content = this._createEncoderBuffer(content);
                } else {
                    if (state.tag === 'seqof' || state.tag === 'setof') {
                        if (!(state.args && state.args.length === 1))
                            return reporter.error('Too many args for : ' + state.tag);
                        if (!Array.isArray(data))
                            return reporter.error('seqof/setof, but data is not Array');
                        var child = this.clone();
                        child._baseState.implicit = null;
                        content = this._createEncoderBuffer(data.map(function (item) {
                            var state = this._baseState;
                            return this._getUse(state.args[0], data)._encode(item, reporter);
                        }, child));
                    } else if (state.use !== null) {
                        result = this._getUse(state.use, parent)._encode(data, reporter);
                    } else {
                        content = this._encodePrimitive(state.tag, data);
                        primitive = true;
                    }
                }
                var result;
                if (!state.any && state.choice === null) {
                    var tag = state.implicit !== null ? state.implicit : state.tag;
                    var cls = state.implicit === null ? 'universal' : 'context';
                    if (tag === null) {
                        if (state.use === null)
                            reporter.error('Tag could be omitted only for .use()');
                    } else {
                        if (state.use === null)
                            result = this._encodeComposite(tag, primitive, cls, content);
                    }
                }
                if (state.explicit !== null)
                    result = this._encodeComposite(state.explicit, false, 'context', result);
                return result;
            };
            Node.prototype._encodeChoice = function encodeChoice(data, reporter) {
                var state = this._baseState;
                var node = state.choice[data.type];
                if (!node) {
                }
                return node._encode(data.value, reporter);
            };
            Node.prototype._encodePrimitive = function encodePrimitive(tag, data) {
                var state = this._baseState;
                if (/str$/.test(tag))
                    return this._encodeStr(data, tag);
                else if (tag === 'objid' && state.args)
                    return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);
                else if (tag === 'objid')
                    return this._encodeObjid(data, null, null);
                else if (tag === 'gentime' || tag === 'utctime')
                    return this._encodeTime(data, tag);
                else if (tag === 'null_')
                    return this._encodeNull();
                else if (tag === 'int' || tag === 'enum')
                    return this._encodeInt(data, state.args && state.reverseArgs[0]);
                else if (tag === 'bool')
                    return this._encodeBool(data);
                else if (tag === 'objDesc')
                    return this._encodeStr(data, tag);
                else
                    throw new Error('Unsupported tag: ' + tag);
            };
            Node.prototype._isNumstr = function isNumstr(str) {
                return /^[0-9 ]*$/.test(str);
            };
            Node.prototype._isPrintstr = function isPrintstr(str) {
                return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str);
            };
        },
        {
            '../base': 7,
            'minimalistic-assert': 108
        }
    ],
    9: [
        function (_dereq_, module, exports) {
            var inherits = _dereq_('inherits');
            function Reporter(options) {
                this._reporterState = {
                    obj: null,
                    path: [],
                    options: options || {},
                    errors: []
                };
            }
            exports.Reporter = Reporter;
            Reporter.prototype.isError = function isError(obj) {
                return obj instanceof ReporterError;
            };
            Reporter.prototype.save = function save() {
                var state = this._reporterState;
                return {
                    obj: state.obj,
                    pathLen: state.path.length
                };
            };
            Reporter.prototype.restore = function restore(data) {
                var state = this._reporterState;
                state.obj = data.obj;
                state.path = state.path.slice(0, data.pathLen);
            };
            Reporter.prototype.enterKey = function enterKey(key) {
                return this._reporterState.path.push(key);
            };
            Reporter.prototype.exitKey = function exitKey(index) {
                var state = this._reporterState;
                state.path = state.path.slice(0, index - 1);
            };
            Reporter.prototype.leaveKey = function leaveKey(index, key, value) {
                var state = this._reporterState;
                this.exitKey(index);
                if (state.obj !== null)
                    state.obj[key] = value;
            };
            Reporter.prototype.path = function path() {
                return this._reporterState.path.join('/');
            };
            Reporter.prototype.enterObject = function enterObject() {
                var state = this._reporterState;
                var prev = state.obj;
                state.obj = {};
                return prev;
            };
            Reporter.prototype.leaveObject = function leaveObject(prev) {
                var state = this._reporterState;
                var now = state.obj;
                state.obj = prev;
                return now;
            };
            Reporter.prototype.error = function error(msg) {
                var err;
                var state = this._reporterState;
                var inherited = msg instanceof ReporterError;
                if (inherited) {
                    err = msg;
                } else {
                    err = new ReporterError(state.path.map(function (elem) {
                        return '[' + JSON.stringify(elem) + ']';
                    }).join(''), msg.message || msg, msg.stack);
                }
                if (!state.options.partial)
                    throw err;
                if (!inherited)
                    state.errors.push(err);
                return err;
            };
            Reporter.prototype.wrapResult = function wrapResult(result) {
                var state = this._reporterState;
                if (!state.options.partial)
                    return result;
                return {
                    result: this.isError(result) ? null : result,
                    errors: state.errors
                };
            };
            function ReporterError(path, msg) {
                this.path = path;
                this.rethrow(msg);
            }
            ;
            inherits(ReporterError, Error);
            ReporterError.prototype.rethrow = function rethrow(msg) {
                this.message = msg + ' at: ' + (this.path || '(shallow)');
                if (Error.captureStackTrace)
                    Error.captureStackTrace(this, ReporterError);
                if (!this.stack) {
                    try {
                        throw new Error(this.message);
                    } catch (e) {
                        this.stack = e.stack;
                    }
                }
                return this;
            };
        },
        { 'inherits': 103 }
    ],
    10: [
        function (_dereq_, module, exports) {
            var constants = _dereq_('../constants');
            exports.tagClass = {
                0: 'universal',
                1: 'application',
                2: 'context',
                3: 'private'
            };
            exports.tagClassByName = constants._reverse(exports.tagClass);
            exports.tag = {
                0: 'end',
                1: 'bool',
                2: 'int',
                3: 'bitstr',
                4: 'octstr',
                5: 'null_',
                6: 'objid',
                7: 'objDesc',
                8: 'external',
                9: 'real',
                10: 'enum',
                11: 'embed',
                12: 'utf8str',
                13: 'relativeOid',
                16: 'seq',
                17: 'set',
                18: 'numstr',
                19: 'printstr',
                20: 't61str',
                21: 'videostr',
                22: 'ia5str',
                23: 'utctime',
                24: 'gentime',
                25: 'graphstr',
                26: 'iso646str',
                27: 'genstr',
                28: 'unistr',
                29: 'charstr',
                30: 'bmpstr'
            };
            exports.tagByName = constants._reverse(exports.tag);
        },
        { '../constants': 11 }
    ],
    11: [
        function (_dereq_, module, exports) {
            var constants = exports;
            constants._reverse = function reverse(map) {
                var res = {};
                Object.keys(map).forEach(function (key) {
                    if ((key | 0) == key)
                        key = key | 0;
                    var value = map[key];
                    res[value] = key;
                });
                return res;
            };
            constants.der = _dereq_('./der');
        },
        { './der': 10 }
    ],
    12: [
        function (_dereq_, module, exports) {
            var inherits = _dereq_('inherits');
            var asn1 = _dereq_('../../asn1');
            var base = asn1.base;
            var bignum = asn1.bignum;
            var der = asn1.constants.der;
            function DERDecoder(entity) {
                this.enc = 'der';
                this.name = entity.name;
                this.entity = entity;
                this.tree = new DERNode();
                this.tree._init(entity.body);
            }
            ;
            module.exports = DERDecoder;
            DERDecoder.prototype.decode = function decode(data, options) {
                if (!(data instanceof base.DecoderBuffer))
                    data = new base.DecoderBuffer(data, options);
                return this.tree._decode(data, options);
            };
            function DERNode(parent) {
                base.Node.call(this, 'der', parent);
            }
            inherits(DERNode, base.Node);
            DERNode.prototype._peekTag = function peekTag(buffer, tag, any) {
                if (buffer.isEmpty())
                    return false;
                var state = buffer.save();
                var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"');
                if (buffer.isError(decodedTag))
                    return decodedTag;
                buffer.restore(state);
                return decodedTag.tag === tag || decodedTag.tagStr === tag || decodedTag.tagStr + 'of' === tag || any;
            };
            DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {
                var decodedTag = derDecodeTag(buffer, 'Failed to decode tag of "' + tag + '"');
                if (buffer.isError(decodedTag))
                    return decodedTag;
                var len = derDecodeLen(buffer, decodedTag.primitive, 'Failed to get length of "' + tag + '"');
                if (buffer.isError(len))
                    return len;
                if (!any && decodedTag.tag !== tag && decodedTag.tagStr !== tag && decodedTag.tagStr + 'of' !== tag) {
                    return buffer.error('Failed to match tag: "' + tag + '"');
                }
                if (decodedTag.primitive || len !== null)
                    return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
                var state = buffer.save();
                var res = this._skipUntilEnd(buffer, 'Failed to skip indefinite length body: "' + this.tag + '"');
                if (buffer.isError(res))
                    return res;
                len = buffer.offset - state.offset;
                buffer.restore(state);
                return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
            };
            DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {
                while (true) {
                    var tag = derDecodeTag(buffer, fail);
                    if (buffer.isError(tag))
                        return tag;
                    var len = derDecodeLen(buffer, tag.primitive, fail);
                    if (buffer.isError(len))
                        return len;
                    var res;
                    if (tag.primitive || len !== null)
                        res = buffer.skip(len);
                    else
                        res = this._skipUntilEnd(buffer, fail);
                    if (buffer.isError(res))
                        return res;
                    if (tag.tagStr === 'end')
                        break;
                }
            };
            DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder, options) {
                var result = [];
                while (!buffer.isEmpty()) {
                    var possibleEnd = this._peekTag(buffer, 'end');
                    if (buffer.isError(possibleEnd))
                        return possibleEnd;
                    var res = decoder.decode(buffer, 'der', options);
                    if (buffer.isError(res) && possibleEnd)
                        break;
                    result.push(res);
                }
                return result;
            };
            DERNode.prototype._decodeStr = function decodeStr(buffer, tag) {
                if (tag === 'bitstr') {
                    var unused = buffer.readUInt8();
                    if (buffer.isError(unused))
                        return unused;
                    return {
                        unused: unused,
                        data: buffer.raw()
                    };
                } else if (tag === 'bmpstr') {
                    var raw = buffer.raw();
                    if (raw.length % 2 === 1)
                        return buffer.error('Decoding of string type: bmpstr length mismatch');
                    var str = '';
                    for (var i = 0; i < raw.length / 2; i++) {
                        str += String.fromCharCode(raw.readUInt16BE(i * 2));
                    }
                    return str;
                } else if (tag === 'numstr') {
                    var numstr = buffer.raw().toString('ascii');
                    if (!this._isNumstr(numstr)) {
                        return buffer.error('Decoding of string type: ' + 'numstr unsupported characters');
                    }
                    return numstr;
                } else if (tag === 'octstr') {
                    return buffer.raw();
                } else if (tag === 'objDesc') {
                    return buffer.raw();
                } else if (tag === 'printstr') {
                    var printstr = buffer.raw().toString('ascii');
                    if (!this._isPrintstr(printstr)) {
                        return buffer.error('Decoding of string type: ' + 'printstr unsupported characters');
                    }
                    return printstr;
                } else if (/str$/.test(tag)) {
                    return buffer.raw().toString();
                } else {
                    return buffer.error('Decoding of string type: ' + tag + ' unsupported');
                }
            };
            DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {
                var result;
                var identifiers = [];
                var ident = 0;
                while (!buffer.isEmpty()) {
                    var subident = buffer.readUInt8();
                    ident <<= 7;
                    ident |= subident & 127;
                    if ((subident & 128) === 0) {
                        identifiers.push(ident);
                        ident = 0;
                    }
                }
                if (subident & 128)
                    identifiers.push(ident);
                var first = identifiers[0] / 40 | 0;
                var second = identifiers[0] % 40;
                if (relative)
                    result = identifiers;
                else
                    result = [
                        first,
                        second
                    ].concat(identifiers.slice(1));
                if (values) {
                    var tmp = values[result.join(' ')];
                    if (tmp === undefined)
                        tmp = values[result.join('.')];
                    if (tmp !== undefined)
                        result = tmp;
                }
                return result;
            };
            DERNode.prototype._decodeTime = function decodeTime(buffer, tag) {
                var str = buffer.raw().toString();
                if (tag === 'gentime') {
                    var year = str.slice(0, 4) | 0;
                    var mon = str.slice(4, 6) | 0;
                    var day = str.slice(6, 8) | 0;
                    var hour = str.slice(8, 10) | 0;
                    var min = str.slice(10, 12) | 0;
                    var sec = str.slice(12, 14) | 0;
                } else if (tag === 'utctime') {
                    var year = str.slice(0, 2) | 0;
                    var mon = str.slice(2, 4) | 0;
                    var day = str.slice(4, 6) | 0;
                    var hour = str.slice(6, 8) | 0;
                    var min = str.slice(8, 10) | 0;
                    var sec = str.slice(10, 12) | 0;
                    if (year < 70)
                        year = 2000 + year;
                    else
                        year = 1900 + year;
                } else {
                    return buffer.error('Decoding ' + tag + ' time is not supported yet');
                }
                return Date.UTC(year, mon - 1, day, hour, min, sec, 0);
            };
            DERNode.prototype._decodeNull = function decodeNull(buffer) {
                return null;
            };
            DERNode.prototype._decodeBool = function decodeBool(buffer) {
                var res = buffer.readUInt8();
                if (buffer.isError(res))
                    return res;
                else
                    return res !== 0;
            };
            DERNode.prototype._decodeInt = function decodeInt(buffer, values) {
                var raw = buffer.raw();
                var res = new bignum(raw);
                if (values)
                    res = values[res.toString(10)] || res;
                return res;
            };
            DERNode.prototype._use = function use(entity, obj) {
                if (typeof entity === 'function')
                    entity = entity(obj);
                return entity._getDecoder('der').tree;
            };
            function derDecodeTag(buf, fail) {
                var tag = buf.readUInt8(fail);
                if (buf.isError(tag))
                    return tag;
                var cls = der.tagClass[tag >> 6];
                var primitive = (tag & 32) === 0;
                if ((tag & 31) === 31) {
                    var oct = tag;
                    tag = 0;
                    while ((oct & 128) === 128) {
                        oct = buf.readUInt8(fail);
                        if (buf.isError(oct))
                            return oct;
                        tag <<= 7;
                        tag |= oct & 127;
                    }
                } else {
                    tag &= 31;
                }
                var tagStr = der.tag[tag];
                return {
                    cls: cls,
                    primitive: primitive,
                    tag: tag,
                    tagStr: tagStr
                };
            }
            function derDecodeLen(buf, primitive, fail) {
                var len = buf.readUInt8(fail);
                if (buf.isError(len))
                    return len;
                if (!primitive && len === 128)
                    return null;
                if ((len & 128) === 0) {
                    return len;
                }
                var num = len & 127;
                if (num > 4)
                    return buf.error('length octect is too long');
                len = 0;
                for (var i = 0; i < num; i++) {
                    len <<= 8;
                    var j = buf.readUInt8(fail);
                    if (buf.isError(j))
                        return j;
                    len |= j;
                }
                return len;
            }
        },
        {
            '../../asn1': 4,
            'inherits': 103
        }
    ],
    13: [
        function (_dereq_, module, exports) {
            var decoders = exports;
            decoders.der = _dereq_('./der');
            decoders.pem = _dereq_('./pem');
        },
        {
            './der': 12,
            './pem': 14
        }
    ],
    14: [
        function (_dereq_, module, exports) {
            var inherits = _dereq_('inherits');
            var Buffer = _dereq_('buffer').Buffer;
            var DERDecoder = _dereq_('./der');
            function PEMDecoder(entity) {
                DERDecoder.call(this, entity);
                this.enc = 'pem';
            }
            ;
            inherits(PEMDecoder, DERDecoder);
            module.exports = PEMDecoder;
            PEMDecoder.prototype.decode = function decode(data, options) {
                var lines = data.toString().split(/[\r\n]+/g);
                var label = options.label.toUpperCase();
                var re = /^-----(BEGIN|END) ([^-]+)-----$/;
                var start = -1;
                var end = -1;
                for (var i = 0; i < lines.length; i++) {
                    var match = lines[i].match(re);
                    if (match === null)
                        continue;
                    if (match[2] !== label)
                        continue;
                    if (start === -1) {
                        if (match[1] !== 'BEGIN')
                            break;
                        start = i;
                    } else {
                        if (match[1] !== 'END')
                            break;
                        end = i;
                        break;
                    }
                }
                if (start === -1 || end === -1)
                    throw new Error('PEM section not found for: ' + label);
                var base64 = lines.slice(start + 1, end).join('');
                base64.replace(/[^a-z0-9\+\/=]+/gi, '');
                var input = new Buffer(base64, 'base64');
                return DERDecoder.prototype.decode.call(this, input, options);
            };
        },
        {
            './der': 12,
            'buffer': 50,
            'inherits': 103
        }
    ],
    15: [
        function (_dereq_, module, exports) {
            var inherits = _dereq_('inherits');
            var Buffer = _dereq_('buffer').Buffer;
            var asn1 = _dereq_('../../asn1');
            var base = asn1.base;
            var der = asn1.constants.der;
            function DEREncoder(entity) {
                this.enc = 'der';
                this.name = entity.name;
                this.entity = entity;
                this.tree = new DERNode();
                this.tree._init(entity.body);
            }
            ;
            module.exports = DEREncoder;
            DEREncoder.prototype.encode = function encode(data, reporter) {
                return this.tree._encode(data, reporter).join();
            };
            function DERNode(parent) {
                base.Node.call(this, 'der', parent);
            }
            inherits(DERNode, base.Node);
            DERNode.prototype._encodeComposite = function encodeComposite(tag, primitive, cls, content) {
                var encodedTag = encodeTag(tag, primitive, cls, this.reporter);
                if (content.length < 128) {
                    var header = new Buffer(2);
                    header[0] = encodedTag;
                    header[1] = content.length;
                    return this._createEncoderBuffer([
                        header,
                        content
                    ]);
                }
                var lenOctets = 1;
                for (var i = content.length; i >= 256; i >>= 8)
                    lenOctets++;
                var header = new Buffer(1 + 1 + lenOctets);
                header[0] = encodedTag;
                header[1] = 128 | lenOctets;
                for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)
                    header[i] = j & 255;
                return this._createEncoderBuffer([
                    header,
                    content
                ]);
            };
            DERNode.prototype._encodeStr = function encodeStr(str, tag) {
                if (tag === 'bitstr') {
                    return this._createEncoderBuffer([
                        str.unused | 0,
                        str.data
                    ]);
                } else if (tag === 'bmpstr') {
                    var buf = new Buffer(str.length * 2);
                    for (var i = 0; i < str.length; i++) {
                        buf.writeUInt16BE(str.charCodeAt(i), i * 2);
                    }
                    return this._createEncoderBuffer(buf);
                } else if (tag === 'numstr') {
                    if (!this._isNumstr(str)) {
                        return this.reporter.error('Encoding of string type: numstr supports ' + 'only digits and space');
                    }
                    return this._createEncoderBuffer(str);
                } else if (tag === 'printstr') {
                    if (!this._isPrintstr(str)) {
                        return this.reporter.error('Encoding of string type: printstr supports ' + 'only latin upper and lower case letters, ' + 'digits, space, apostrophe, left and rigth ' + 'parenthesis, plus sign, comma, hyphen, ' + 'dot, slash, colon, equal sign, ' + 'question mark');
                    }
                    return this._createEncoderBuffer(str);
                } else if (/str$/.test(tag)) {
                    return this._createEncoderBuffer(str);
                } else if (tag === 'objDesc') {
                    return this._createEncoderBuffer(str);
                } else {
                    return this.reporter.error('Encoding of string type: ' + tag + ' unsupported');
                }
            };
            DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {
                if (typeof id === 'string') {
                    if (!values)
                        return this.reporter.error('string objid given, but no values map found');
                    if (!values.hasOwnProperty(id))
                        return this.reporter.error('objid not found in values map');
                    id = values[id].split(/[\s\.]+/g);
                    for (var i = 0; i < id.length; i++)
                        id[i] |= 0;
                } else if (Array.isArray(id)) {
                    id = id.slice();
                    for (var i = 0; i < id.length; i++)
                        id[i] |= 0;
                }
                if (!Array.isArray(id)) {
                    return this.reporter.error('objid() should be either array or string, ' + 'got: ' + JSON.stringify(id));
                }
                if (!relative) {
                    if (id[1] >= 40)
                        return this.reporter.error('Second objid identifier OOB');
                    id.splice(0, 2, id[0] * 40 + id[1]);
                }
                var size = 0;
                for (var i = 0; i < id.length; i++) {
                    var ident = id[i];
                    for (size++; ident >= 128; ident >>= 7)
                        size++;
                }
                var objid = new Buffer(size);
                var offset = objid.length - 1;
                for (var i = id.length - 1; i >= 0; i--) {
                    var ident = id[i];
                    objid[offset--] = ident & 127;
                    while ((ident >>= 7) > 0)
                        objid[offset--] = 128 | ident & 127;
                }
                return this._createEncoderBuffer(objid);
            };
            function two(num) {
                if (num < 10)
                    return '0' + num;
                else
                    return num;
            }
            DERNode.prototype._encodeTime = function encodeTime(time, tag) {
                var str;
                var date = new Date(time);
                if (tag === 'gentime') {
                    str = [
                        two(date.getFullYear()),
                        two(date.getUTCMonth() + 1),
                        two(date.getUTCDate()),
                        two(date.getUTCHours()),
                        two(date.getUTCMinutes()),
                        two(date.getUTCSeconds()),
                        'Z'
                    ].join('');
                } else if (tag === 'utctime') {
                    str = [
                        two(date.getFullYear() % 100),
                        two(date.getUTCMonth() + 1),
                        two(date.getUTCDate()),
                        two(date.getUTCHours()),
                        two(date.getUTCMinutes()),
                        two(date.getUTCSeconds()),
                        'Z'
                    ].join('');
                } else {
                    this.reporter.error('Encoding ' + tag + ' time is not supported yet');
                }
                return this._encodeStr(str, 'octstr');
            };
            DERNode.prototype._encodeNull = function encodeNull() {
                return this._createEncoderBuffer('');
            };
            DERNode.prototype._encodeInt = function encodeInt(num, values) {
                if (typeof num === 'string') {
                    if (!values)
                        return this.reporter.error('String int or enum given, but no values map');
                    if (!values.hasOwnProperty(num)) {
                        return this.reporter.error('Values map doesn\'t contain: ' + JSON.stringify(num));
                    }
                    num = values[num];
                }
                if (typeof num !== 'number' && !Buffer.isBuffer(num)) {
                    var numArray = num.toArray();
                    if (!num.sign && numArray[0] & 128) {
                        numArray.unshift(0);
                    }
                    num = new Buffer(numArray);
                }
                if (Buffer.isBuffer(num)) {
                    var size = num.length;
                    if (num.length === 0)
                        size++;
                    var out = new Buffer(size);
                    num.copy(out);
                    if (num.length === 0)
                        out[0] = 0;
                    return this._createEncoderBuffer(out);
                }
                if (num < 128)
                    return this._createEncoderBuffer(num);
                if (num < 256)
                    return this._createEncoderBuffer([
                        0,
                        num
                    ]);
                var size = 1;
                for (var i = num; i >= 256; i >>= 8)
                    size++;
                var out = new Array(size);
                for (var i = out.length - 1; i >= 0; i--) {
                    out[i] = num & 255;
                    num >>= 8;
                }
                if (out[0] & 128) {
                    out.unshift(0);
                }
                return this._createEncoderBuffer(new Buffer(out));
            };
            DERNode.prototype._encodeBool = function encodeBool(value) {
                return this._createEncoderBuffer(value ? 255 : 0);
            };
            DERNode.prototype._use = function use(entity, obj) {
                if (typeof entity === 'function')
                    entity = entity(obj);
                return entity._getEncoder('der').tree;
            };
            DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {
                var state = this._baseState;
                var i;
                if (state['default'] === null)
                    return false;
                var data = dataBuffer.join();
                if (state.defaultBuffer === undefined)
                    state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();
                if (data.length !== state.defaultBuffer.length)
                    return false;
                for (i = 0; i < data.length; i++)
                    if (data[i] !== state.defaultBuffer[i])
                        return false;
                return true;
            };
            function encodeTag(tag, primitive, cls, reporter) {
                var res;
                if (tag === 'seqof')
                    tag = 'seq';
                else if (tag === 'setof')
                    tag = 'set';
                if (der.tagByName.hasOwnProperty(tag))
                    res = der.tagByName[tag];
                else if (typeof tag === 'number' && (tag | 0) === tag)
                    res = tag;
                else
                    return reporter.error('Unknown tag: ' + tag);
                if (res >= 31)
                    return reporter.error('Multi-octet tag encoding unsupported');
                if (!primitive)
                    res |= 32;
                res |= der.tagClassByName[cls || 'universal'] << 6;
                return res;
            }
        },
        {
            '../../asn1': 4,
            'buffer': 50,
            'inherits': 103
        }
    ],
    16: [
        function (_dereq_, module, exports) {
            var encoders = exports;
            encoders.der = _dereq_('./der');
            encoders.pem = _dereq_('./pem');
        },
        {
            './der': 15,
            './pem': 17
        }
    ],
    17: [
        function (_dereq_, module, exports) {
            var inherits = _dereq_('inherits');
            var DEREncoder = _dereq_('./der');
            function PEMEncoder(entity) {
                DEREncoder.call(this, entity);
                this.enc = 'pem';
            }
            ;
            inherits(PEMEncoder, DEREncoder);
            module.exports = PEMEncoder;
            PEMEncoder.prototype.encode = function encode(data, options) {
                var buf = DEREncoder.prototype.encode.call(this, data);
                var p = buf.toString('base64');
                var out = ['-----BEGIN ' + options.label + '-----'];
                for (var i = 0; i < p.length; i += 64)
                    out.push(p.slice(i, i + 64));
                out.push('-----END ' + options.label + '-----');
                return out.join('\n');
            };
        },
        {
            './der': 15,
            'inherits': 103
        }
    ],
    18: [
        function (_dereq_, module, exports) {
            'use strict';
            exports.byteLength = byteLength;
            exports.toByteArray = toByteArray;
            exports.fromByteArray = fromByteArray;
            var lookup = [];
            var revLookup = [];
            var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;
            var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
            for (var i = 0, len = code.length; i < len; ++i) {
                lookup[i] = code[i];
                revLookup[code.charCodeAt(i)] = i;
            }
            revLookup['-'.charCodeAt(0)] = 62;
            revLookup['_'.charCodeAt(0)] = 63;
            function getLens(b64) {
                var len = b64.length;
                if (len % 4 > 0) {
                    throw new Error('Invalid string. Length must be a multiple of 4');
                }
                var validLen = b64.indexOf('=');
                if (validLen === -1)
                    validLen = len;
                var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;
                return [
                    validLen,
                    placeHoldersLen
                ];
            }
            function byteLength(b64) {
                var lens = getLens(b64);
                var validLen = lens[0];
                var placeHoldersLen = lens[1];
                return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
            }
            function _byteLength(b64, validLen, placeHoldersLen) {
                return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
            }
            function toByteArray(b64) {
                var tmp;
                var lens = getLens(b64);
                var validLen = lens[0];
                var placeHoldersLen = lens[1];
                var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));
                var curByte = 0;
                var len = placeHoldersLen > 0 ? validLen - 4 : validLen;
                for (var i = 0; i < len; i += 4) {
                    tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)];
                    arr[curByte++] = tmp >> 16 & 255;
                    arr[curByte++] = tmp >> 8 & 255;
                    arr[curByte++] = tmp & 255;
                }
                if (placeHoldersLen === 2) {
                    tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;
                    arr[curByte++] = tmp & 255;
                }
                if (placeHoldersLen === 1) {
                    tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;
                    arr[curByte++] = tmp >> 8 & 255;
                    arr[curByte++] = tmp & 255;
                }
                return arr;
            }
            function tripletToBase64(num) {
                return lookup[num >> 18 & 63] + lookup[num >> 12 & 63] + lookup[num >> 6 & 63] + lookup[num & 63];
            }
            function encodeChunk(uint8, start, end) {
                var tmp;
                var output = [];
                for (var i = start; i < end; i += 3) {
                    tmp = (uint8[i] << 16 & 16711680) + (uint8[i + 1] << 8 & 65280) + (uint8[i + 2] & 255);
                    output.push(tripletToBase64(tmp));
                }
                return output.join('');
            }
            function fromByteArray(uint8) {
                var tmp;
                var len = uint8.length;
                var extraBytes = len % 3;
                var parts = [];
                var maxChunkLength = 16383;
                for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
                    parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength));
                }
                if (extraBytes === 1) {
                    tmp = uint8[len - 1];
                    parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 63] + '==');
                } else if (extraBytes === 2) {
                    tmp = (uint8[len - 2] << 8) + uint8[len - 1];
                    parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 63] + lookup[tmp << 2 & 63] + '=');
                }
                return parts.join('');
            }
        },
        {}
    ],
    19: [
        function (_dereq_, module, exports) {
            (function (module, exports) {
                'use strict';
                function assert(val, msg) {
                    if (!val)
                        throw new Error(msg || 'Assertion failed');
                }
                function inherits(ctor, superCtor) {
                    ctor.super_ = superCtor;
                    var TempCtor = function () {
                    };
                    TempCtor.prototype = superCtor.prototype;
                    ctor.prototype = new TempCtor();
                    ctor.prototype.constructor = ctor;
                }
                function BN(number, base, endian) {
                    if (BN.isBN(number)) {
                        return number;
                    }
                    this.negative = 0;
                    this.words = null;
                    this.length = 0;
                    this.red = null;
                    if (number !== null) {
                        if (base === 'le' || base === 'be') {
                            endian = base;
                            base = 10;
                        }
                        this._init(number || 0, base || 10, endian || 'be');
                    }
                }
                if (typeof module === 'object') {
                    module.exports = BN;
                } else {
                    exports.BN = BN;
                }
                BN.BN = BN;
                BN.wordSize = 26;
                var Buffer;
                try {
                    Buffer = _dereq_('buffer').Buffer;
                } catch (e) {
                }
                BN.isBN = function isBN(num) {
                    if (num instanceof BN) {
                        return true;
                    }
                    return num !== null && typeof num === 'object' && num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
                };
                BN.max = function max(left, right) {
                    if (left.cmp(right) > 0)
                        return left;
                    return right;
                };
                BN.min = function min(left, right) {
                    if (left.cmp(right) < 0)
                        return left;
                    return right;
                };
                BN.prototype._init = function init(number, base, endian) {
                    if (typeof number === 'number') {
                        return this._initNumber(number, base, endian);
                    }
                    if (typeof number === 'object') {
                        return this._initArray(number, base, endian);
                    }
                    if (base === 'hex') {
                        base = 16;
                    }
                    number = number.toString().replace(/\s+/g, '');
                    var start = 0;
                    if (number[0] === '-') {
                        start++;
                    }
                    if (base === 16) {
                        this._parseHex(number, start);
                    } else {
                        this._parseBase(number, base, start);
                    }
                    if (number[0] === '-') {
                        this.negative = 1;
                    }
                    this.strip();
                    if (endian !== 'le')
                        return;
                    this._initArray(this.toArray(), base, endian);
                };
                BN.prototype._initNumber = function _initNumber(number, base, endian) {
                    if (number < 0) {
                        this.negative = 1;
                        number = -number;
                    }
                    if (number < 67108864) {
                        this.words = [number & 67108863];
                        this.length = 1;
                    } else if (number < 4503599627370496) {
                        this.words = [
                            number & 67108863,
                            number / 67108864 & 67108863
                        ];
                        this.length = 2;
                    } else {
                        this.words = [
                            number & 67108863,
                            number / 67108864 & 67108863,
                            1
                        ];
                        this.length = 3;
                    }
                    if (endian !== 'le')
                        return;
                    this._initArray(this.toArray(), base, endian);
                };
                BN.prototype._initArray = function _initArray(number, base, endian) {
                    if (number.length <= 0) {
                        this.words = [0];
                        this.length = 1;
                        return this;
                    }
                    this.length = Math.ceil(number.length / 3);
                    this.words = new Array(this.length);
                    for (var i = 0; i < this.length; i++) {
                        this.words[i] = 0;
                    }
                    var j, w;
                    var off = 0;
                    if (endian === 'be') {
                        for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
                            w = number[i] | number[i - 1] << 8 | number[i - 2] << 16;
                            this.words[j] |= w << off & 67108863;
                            this.words[j + 1] = w >>> 26 - off & 67108863;
                            off += 24;
                            if (off >= 26) {
                                off -= 26;
                                j++;
                            }
                        }
                    } else if (endian === 'le') {
                        for (i = 0, j = 0; i < number.length; i += 3) {
                            w = number[i] | number[i + 1] << 8 | number[i + 2] << 16;
                            this.words[j] |= w << off & 67108863;
                            this.words[j + 1] = w >>> 26 - off & 67108863;
                            off += 24;
                            if (off >= 26) {
                                off -= 26;
                                j++;
                            }
                        }
                    }
                    return this.strip();
                };
                function parseHex(str, start, end) {
                    var r = 0;
                    var len = Math.min(str.length, end);
                    for (var i = start; i < len; i++) {
                        var c = str.charCodeAt(i) - 48;
                        r <<= 4;
                        if (c >= 49 && c <= 54) {
                            r |= c - 49 + 10;
                        } else if (c >= 17 && c <= 22) {
                            r |= c - 17 + 10;
                        } else {
                            r |= c & 15;
                        }
                    }
                    return r;
                }
                BN.prototype._parseHex = function _parseHex(number, start) {
                    this.length = Math.ceil((number.length - start) / 6);
                    this.words = new Array(this.length);
                    for (var i = 0; i < this.length; i++) {
                        this.words[i] = 0;
                    }
                    var j, w;
                    var off = 0;
                    for (i = number.length - 6, j = 0; i >= start; i -= 6) {
                        w = parseHex(number, i, i + 6);
                        this.words[j] |= w << off & 67108863;
                        this.words[j + 1] |= w >>> 26 - off & 4194303;
                        off += 24;
                        if (off >= 26) {
                            off -= 26;
                            j++;
                        }
                    }
                    if (i + 6 !== start) {
                        w = parseHex(number, start, i + 6);
                        this.words[j] |= w << off & 67108863;
                        this.words[j + 1] |= w >>> 26 - off & 4194303;
                    }
                    this.strip();
                };
                function parseBase(str, start, end, mul) {
                    var r = 0;
                    var len = Math.min(str.length, end);
                    for (var i = start; i < len; i++) {
                        var c = str.charCodeAt(i) - 48;
                        r *= mul;
                        if (c >= 49) {
                            r += c - 49 + 10;
                        } else if (c >= 17) {
                            r += c - 17 + 10;
                        } else {
                            r += c;
                        }
                    }
                    return r;
                }
                BN.prototype._parseBase = function _parseBase(number, base, start) {
                    this.words = [0];
                    this.length = 1;
                    for (var limbLen = 0, limbPow = 1; limbPow <= 67108863; limbPow *= base) {
                        limbLen++;
                    }
                    limbLen--;
                    limbPow = limbPow / base | 0;
                    var total = number.length - start;
                    var mod = total % limbLen;
                    var end = Math.min(total, total - mod) + start;
                    var word = 0;
                    for (var i = start; i < end; i += limbLen) {
                        word = parseBase(number, i, i + limbLen, base);
                        this.imuln(limbPow);
                        if (this.words[0] + word < 67108864) {
                            this.words[0] += word;
                        } else {
                            this._iaddn(word);
                        }
                    }
                    if (mod !== 0) {
                        var pow = 1;
                        word = parseBase(number, i, number.length, base);
                        for (i = 0; i < mod; i++) {
                            pow *= base;
                        }
                        this.imuln(pow);
                        if (this.words[0] + word < 67108864) {
                            this.words[0] += word;
                        } else {
                            this._iaddn(word);
                        }
                    }
                };
                BN.prototype.copy = function copy(dest) {
                    dest.words = new Array(this.length);
                    for (var i = 0; i < this.length; i++) {
                        dest.words[i] = this.words[i];
                    }
                    dest.length = this.length;
                    dest.negative = this.negative;
                    dest.red = this.red;
                };
                BN.prototype.clone = function clone() {
                    var r = new BN(null);
                    this.copy(r);
                    return r;
                };
                BN.prototype._expand = function _expand(size) {
                    while (this.length < size) {
                        this.words[this.length++] = 0;
                    }
                    return this;
                };
                BN.prototype.strip = function strip() {
                    while (this.length > 1 && this.words[this.length - 1] === 0) {
                        this.length--;
                    }
                    return this._normSign();
                };
                BN.prototype._normSign = function _normSign() {
                    if (this.length === 1 && this.words[0] === 0) {
                        this.negative = 0;
                    }
                    return this;
                };
                BN.prototype.inspect = function inspect() {
                    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
                };
                var zeros = [
                    '',
                    '0',
                    '00',
                    '000',
                    '0000',
                    '00000',
                    '000000',
                    '0000000',
                    '00000000',
                    '000000000',
                    '0000000000',
                    '00000000000',
                    '000000000000',
                    '0000000000000',
                    '00000000000000',
                    '000000000000000',
                    '0000000000000000',
                    '00000000000000000',
                    '000000000000000000',
                    '0000000000000000000',
                    '00000000000000000000',
                    '000000000000000000000',
                    '0000000000000000000000',
                    '00000000000000000000000',
                    '000000000000000000000000',
                    '0000000000000000000000000'
                ];
                var groupSizes = [
                    0,
                    0,
                    25,
                    16,
                    12,
                    11,
                    10,
                    9,
                    8,
                    8,
                    7,
                    7,
                    7,
                    7,
                    6,
                    6,
                    6,
                    6,
                    6,
                    6,
                    6,
                    5,
                    5,
                    5,
                    5,
                    5,
                    5,
                    5,
                    5,
                    5,
                    5,
                    5,
                    5,
                    5,
                    5,
                    5,
                    5
                ];
                var groupBases = [
                    0,
                    0,
                    33554432,
                    43046721,
                    16777216,
                    48828125,
                    60466176,
                    40353607,
                    16777216,
                    43046721,
                    10000000,
                    19487171,
                    35831808,
                    62748517,
                    7529536,
                    11390625,
                    16777216,
                    24137569,
                    34012224,
                    47045881,
                    64000000,
                    4084101,
                    5153632,
                    6436343,
                    7962624,
                    9765625,
                    11881376,
                    14348907,
                    17210368,
                    20511149,
                    24300000,
                    28629151,
                    33554432,
                    39135393,
                    45435424,
                    52521875,
                    60466176
                ];
                BN.prototype.toString = function toString(base, padding) {
                    base = base || 10;
                    padding = padding | 0 || 1;
                    var out;
                    if (base === 16 || base === 'hex') {
                        out = '';
                        var off = 0;
                        var carry = 0;
                        for (var i = 0; i < this.length; i++) {
                            var w = this.words[i];
                            var word = ((w << off | carry) & 16777215).toString(16);
                            carry = w >>> 24 - off & 16777215;
                            if (carry !== 0 || i !== this.length - 1) {
                                out = zeros[6 - word.length] + word + out;
                            } else {
                                out = word + out;
                            }
                            off += 2;
                            if (off >= 26) {
                                off -= 26;
                                i--;
                            }
                        }
                        if (carry !== 0) {
                            out = carry.toString(16) + out;
                        }
                        while (out.length % padding !== 0) {
                            out = '0' + out;
                        }
                        if (this.negative !== 0) {
                            out = '-' + out;
                        }
                        return out;
                    }
                    if (base === (base | 0) && base >= 2 && base <= 36) {
                        var groupSize = groupSizes[base];
                        var groupBase = groupBases[base];
                        out = '';
                        var c = this.clone();
                        c.negative = 0;
                        while (!c.isZero()) {
                            var r = c.modn(groupBase).toString(base);
                            c = c.idivn(groupBase);
                            if (!c.isZero()) {
                                out = zeros[groupSize - r.length] + r + out;
                            } else {
                                out = r + out;
                            }
                        }
                        if (this.isZero()) {
                            out = '0' + out;
                        }
                        while (out.length % padding !== 0) {
                            out = '0' + out;
                        }
                        if (this.negative !== 0) {
                            out = '-' + out;
                        }
                        return out;
                    }
                };
                BN.prototype.toNumber = function toNumber() {
                    var ret = this.words[0];
                    if (this.length === 2) {
                        ret += this.words[1] * 67108864;
                    } else if (this.length === 3 && this.words[2] === 1) {
                        ret += 4503599627370496 + this.words[1] * 67108864;
                    } else if (this.length > 2) {
                    }
                    return this.negative !== 0 ? -ret : ret;
                };
                BN.prototype.toJSON = function toJSON() {
                    return this.toString(16);
                };
                BN.prototype.toBuffer = function toBuffer(endian, length) {
                    return this.toArrayLike(Buffer, endian, length);
                };
                BN.prototype.toArray = function toArray(endian, length) {
                    return this.toArrayLike(Array, endian, length);
                };
                BN.prototype.toArrayLike = function toArrayLike(ArrayType, endian, length) {
                    var byteLength = this.byteLength();
                    var reqLength = length || Math.max(1, byteLength);
                    this.strip();
                    var littleEndian = endian === 'le';
                    var res = new ArrayType(reqLength);
                    var b, i;
                    var q = this.clone();
                    if (!littleEndian) {
                        for (i = 0; i < reqLength - byteLength; i++) {
                            res[i] = 0;
                        }
                        for (i = 0; !q.isZero(); i++) {
                            b = q.andln(255);
                            q.iushrn(8);
                            res[reqLength - i - 1] = b;
                        }
                    } else {
                        for (i = 0; !q.isZero(); i++) {
                            b = q.andln(255);
                            q.iushrn(8);
                            res[i] = b;
                        }
                        for (; i < reqLength; i++) {
                            res[i] = 0;
                        }
                    }
                    return res;
                };
                if (Math.clz32) {
                    BN.prototype._countBits = function _countBits(w) {
                        return 32 - Math.clz32(w);
                    };
                } else {
                    BN.prototype._countBits = function _countBits(w) {
                        var t = w;
                        var r = 0;
                        if (t >= 4096) {
                            r += 13;
                            t >>>= 13;
                        }
                        if (t >= 64) {
                            r += 7;
                            t >>>= 7;
                        }
                        if (t >= 8) {
                            r += 4;
                            t >>>= 4;
                        }
                        if (t >= 2) {
                            r += 2;
                            t >>>= 2;
                        }
                        return r + t;
                    };
                }
                BN.prototype._zeroBits = function _zeroBits(w) {
                    if (w === 0)
                        return 26;
                    var t = w;
                    var r = 0;
                    if ((t & 8191) === 0) {
                        r += 13;
                        t >>>= 13;
                    }
                    if ((t & 127) === 0) {
                        r += 7;
                        t >>>= 7;
                    }
                    if ((t & 15) === 0) {
                        r += 4;
                        t >>>= 4;
                    }
                    if ((t & 3) === 0) {
                        r += 2;
                        t >>>= 2;
                    }
                    if ((t & 1) === 0) {
                        r++;
                    }
                    return r;
                };
                BN.prototype.bitLength = function bitLength() {
                    var w = this.words[this.length - 1];
                    var hi = this._countBits(w);
                    return (this.length - 1) * 26 + hi;
                };
                function toBitArray(num) {
                    var w = new Array(num.bitLength());
                    for (var bit = 0; bit < w.length; bit++) {
                        var off = bit / 26 | 0;
                        var wbit = bit % 26;
                        w[bit] = (num.words[off] & 1 << wbit) >>> wbit;
                    }
                    return w;
                }
                BN.prototype.zeroBits = function zeroBits() {
                    if (this.isZero())
                        return 0;
                    var r = 0;
                    for (var i = 0; i < this.length; i++) {
                        var b = this._zeroBits(this.words[i]);
                        r += b;
                        if (b !== 26)
                            break;
                    }
                    return r;
                };
                BN.prototype.byteLength = function byteLength() {
                    return Math.ceil(this.bitLength() / 8);
                };
                BN.prototype.toTwos = function toTwos(width) {
                    if (this.negative !== 0) {
                        return this.abs().inotn(width).iaddn(1);
                    }
                    return this.clone();
                };
                BN.prototype.fromTwos = function fromTwos(width) {
                    if (this.testn(width - 1)) {
                        return this.notn(width).iaddn(1).ineg();
                    }
                    return this.clone();
                };
                BN.prototype.isNeg = function isNeg() {
                    return this.negative !== 0;
                };
                BN.prototype.neg = function neg() {
                    return this.clone().ineg();
                };
                BN.prototype.ineg = function ineg() {
                    if (!this.isZero()) {
                        this.negative ^= 1;
                    }
                    return this;
                };
                BN.prototype.iuor = function iuor(num) {
                    while (this.length < num.length) {
                        this.words[this.length++] = 0;
                    }
                    for (var i = 0; i < num.length; i++) {
                        this.words[i] = this.words[i] | num.words[i];
                    }
                    return this.strip();
                };
                BN.prototype.ior = function ior(num) {
                    return this.iuor(num);
                };
                BN.prototype.or = function or(num) {
                    if (this.length > num.length)
                        return this.clone().ior(num);
                    return num.clone().ior(this);
                };
                BN.prototype.uor = function uor(num) {
                    if (this.length > num.length)
                        return this.clone().iuor(num);
                    return num.clone().iuor(this);
                };
                BN.prototype.iuand = function iuand(num) {
                    var b;
                    if (this.length > num.length) {
                        b = num;
                    } else {
                        b = this;
                    }
                    for (var i = 0; i < b.length; i++) {
                        this.words[i] = this.words[i] & num.words[i];
                    }
                    this.length = b.length;
                    return this.strip();
                };
                BN.prototype.iand = function iand(num) {
                    return this.iuand(num);
                };
                BN.prototype.and = function and(num) {
                    if (this.length > num.length)
                        return this.clone().iand(num);
                    return num.clone().iand(this);
                };
                BN.prototype.uand = function uand(num) {
                    if (this.length > num.length)
                        return this.clone().iuand(num);
                    return num.clone().iuand(this);
                };
                BN.prototype.iuxor = function iuxor(num) {
                    var a;
                    var b;
                    if (this.length > num.length) {
                        a = this;
                        b = num;
                    } else {
                        a = num;
                        b = this;
                    }
                    for (var i = 0; i < b.length; i++) {
                        this.words[i] = a.words[i] ^ b.words[i];
                    }
                    if (this !== a) {
                        for (; i < a.length; i++) {
                            this.words[i] = a.words[i];
                        }
                    }
                    this.length = a.length;
                    return this.strip();
                };
                BN.prototype.ixor = function ixor(num) {
                    return this.iuxor(num);
                };
                BN.prototype.xor = function xor(num) {
                    if (this.length > num.length)
                        return this.clone().ixor(num);
                    return num.clone().ixor(this);
                };
                BN.prototype.uxor = function uxor(num) {
                    if (this.length > num.length)
                        return this.clone().iuxor(num);
                    return num.clone().iuxor(this);
                };
                BN.prototype.inotn = function inotn(width) {
                    var bytesNeeded = Math.ceil(width / 26) | 0;
                    var bitsLeft = width % 26;
                    this._expand(bytesNeeded);
                    if (bitsLeft > 0) {
                        bytesNeeded--;
                    }
                    for (var i = 0; i < bytesNeeded; i++) {
                        this.words[i] = ~this.words[i] & 67108863;
                    }
                    if (bitsLeft > 0) {
                        this.words[i] = ~this.words[i] & 67108863 >> 26 - bitsLeft;
                    }
                    return this.strip();
                };
                BN.prototype.notn = function notn(width) {
                    return this.clone().inotn(width);
                };
                BN.prototype.setn = function setn(bit, val) {
                    var off = bit / 26 | 0;
                    var wbit = bit % 26;
                    this._expand(off + 1);
                    if (val) {
                        this.words[off] = this.words[off] | 1 << wbit;
                    } else {
                        this.words[off] = this.words[off] & ~(1 << wbit);
                    }
                    return this.strip();
                };
                BN.prototype.iadd = function iadd(num) {
                    var r;
                    if (this.negative !== 0 && num.negative === 0) {
                        this.negative = 0;
                        r = this.isub(num);
                        this.negative ^= 1;
                        return this._normSign();
                    } else if (this.negative === 0 && num.negative !== 0) {
                        num.negative = 0;
                        r = this.isub(num);
                        num.negative = 1;
                        return r._normSign();
                    }
                    var a, b;
                    if (this.length > num.length) {
                        a = this;
                        b = num;
                    } else {
                        a = num;
                        b = this;
                    }
                    var carry = 0;
                    for (var i = 0; i < b.length; i++) {
                        r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
                        this.words[i] = r & 67108863;
                        carry = r >>> 26;
                    }
                    for (; carry !== 0 && i < a.length; i++) {
                        r = (a.words[i] | 0) + carry;
                        this.words[i] = r & 67108863;
                        carry = r >>> 26;
                    }
                    this.length = a.length;
                    if (carry !== 0) {
                        this.words[this.length] = carry;
                        this.length++;
                    } else if (a !== this) {
                        for (; i < a.length; i++) {
                            this.words[i] = a.words[i];
                        }
                    }
                    return this;
                };
                BN.prototype.add = function add(num) {
                    var res;
                    if (num.negative !== 0 && this.negative === 0) {
                        num.negative = 0;
                        res = this.sub(num);
                        num.negative ^= 1;
                        return res;
                    } else if (num.negative === 0 && this.negative !== 0) {
                        this.negative = 0;
                        res = num.sub(this);
                        this.negative = 1;
                        return res;
                    }
                    if (this.length > num.length)
                        return this.clone().iadd(num);
                    return num.clone().iadd(this);
                };
                BN.prototype.isub = function isub(num) {
                    if (num.negative !== 0) {
                        num.negative = 0;
                        var r = this.iadd(num);
                        num.negative = 1;
                        return r._normSign();
                    } else if (this.negative !== 0) {
                        this.negative = 0;
                        this.iadd(num);
                        this.negative = 1;
                        return this._normSign();
                    }
                    var cmp = this.cmp(num);
                    if (cmp === 0) {
                        this.negative = 0;
                        this.length = 1;
                        this.words[0] = 0;
                        return this;
                    }
                    var a, b;
                    if (cmp > 0) {
                        a = this;
                        b = num;
                    } else {
                        a = num;
                        b = this;
                    }
                    var carry = 0;
                    for (var i = 0; i < b.length; i++) {
                        r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
                        carry = r >> 26;
                        this.words[i] = r & 67108863;
                    }
                    for (; carry !== 0 && i < a.length; i++) {
                        r = (a.words[i] | 0) + carry;
                        carry = r >> 26;
                        this.words[i] = r & 67108863;
                    }
                    if (carry === 0 && i < a.length && a !== this) {
                        for (; i < a.length; i++) {
                            this.words[i] = a.words[i];
                        }
                    }
                    this.length = Math.max(this.length, i);
                    if (a !== this) {
                        this.negative = 1;
                    }
                    return this.strip();
                };
                BN.prototype.sub = function sub(num) {
                    return this.clone().isub(num);
                };
                function smallMulTo(self, num, out) {
                    out.negative = num.negative ^ self.negative;
                    var len = self.length + num.length | 0;
                    out.length = len;
                    len = len - 1 | 0;
                    var a = self.words[0] | 0;
                    var b = num.words[0] | 0;
                    var r = a * b;
                    var lo = r & 67108863;
                    var carry = r / 67108864 | 0;
                    out.words[0] = lo;
                    for (var k = 1; k < len; k++) {
                        var ncarry = carry >>> 26;
                        var rword = carry & 67108863;
                        var maxJ = Math.min(k, num.length - 1);
                        for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
                            var i = k - j | 0;
                            a = self.words[i] | 0;
                            b = num.words[j] | 0;
                            r = a * b + rword;
                            ncarry += r / 67108864 | 0;
                            rword = r & 67108863;
                        }
                        out.words[k] = rword | 0;
                        carry = ncarry | 0;
                    }
                    if (carry !== 0) {
                        out.words[k] = carry | 0;
                    } else {
                        out.length--;
                    }
                    return out.strip();
                }
                var comb10MulTo = function comb10MulTo(self, num, out) {
                    var a = self.words;
                    var b = num.words;
                    var o = out.words;
                    var c = 0;
                    var lo;
                    var mid;
                    var hi;
                    var a0 = a[0] | 0;
                    var al0 = a0 & 8191;
                    var ah0 = a0 >>> 13;
                    var a1 = a[1] | 0;
                    var al1 = a1 & 8191;
                    var ah1 = a1 >>> 13;
                    var a2 = a[2] | 0;
                    var al2 = a2 & 8191;
                    var ah2 = a2 >>> 13;
                    var a3 = a[3] | 0;
                    var al3 = a3 & 8191;
                    var ah3 = a3 >>> 13;
                    var a4 = a[4] | 0;
                    var al4 = a4 & 8191;
                    var ah4 = a4 >>> 13;
                    var a5 = a[5] | 0;
                    var al5 = a5 & 8191;
                    var ah5 = a5 >>> 13;
                    var a6 = a[6] | 0;
                    var al6 = a6 & 8191;
                    var ah6 = a6 >>> 13;
                    var a7 = a[7] | 0;
                    var al7 = a7 & 8191;
                    var ah7 = a7 >>> 13;
                    var a8 = a[8] | 0;
                    var al8 = a8 & 8191;
                    var ah8 = a8 >>> 13;
                    var a9 = a[9] | 0;
                    var al9 = a9 & 8191;
                    var ah9 = a9 >>> 13;
                    var b0 = b[0] | 0;
                    var bl0 = b0 & 8191;
                    var bh0 = b0 >>> 13;
                    var b1 = b[1] | 0;
                    var bl1 = b1 & 8191;
                    var bh1 = b1 >>> 13;
                    var b2 = b[2] | 0;
                    var bl2 = b2 & 8191;
                    var bh2 = b2 >>> 13;
                    var b3 = b[3] | 0;
                    var bl3 = b3 & 8191;
                    var bh3 = b3 >>> 13;
                    var b4 = b[4] | 0;
                    var bl4 = b4 & 8191;
                    var bh4 = b4 >>> 13;
                    var b5 = b[5] | 0;
                    var bl5 = b5 & 8191;
                    var bh5 = b5 >>> 13;
                    var b6 = b[6] | 0;
                    var bl6 = b6 & 8191;
                    var bh6 = b6 >>> 13;
                    var b7 = b[7] | 0;
                    var bl7 = b7 & 8191;
                    var bh7 = b7 >>> 13;
                    var b8 = b[8] | 0;
                    var bl8 = b8 & 8191;
                    var bh8 = b8 >>> 13;
                    var b9 = b[9] | 0;
                    var bl9 = b9 & 8191;
                    var bh9 = b9 >>> 13;
                    out.negative = self.negative ^ num.negative;
                    out.length = 19;
                    lo = Math.imul(al0, bl0);
                    mid = Math.imul(al0, bh0);
                    mid = mid + Math.imul(ah0, bl0) | 0;
                    hi = Math.imul(ah0, bh0);
                    var w0 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
                    c = (hi + (mid >>> 13) | 0) + (w0 >>> 26) | 0;
                    w0 &= 67108863;
                    lo = Math.imul(al1, bl0);
                    mid = Math.imul(al1, bh0);
                    mid = mid + Math.imul(ah1, bl0) | 0;
                    hi = Math.imul(ah1, bh0);
                    lo = lo + Math.imul(al0, bl1) | 0;
                    mid = mid + Math.imul(al0, bh1) | 0;
                    mid = mid + Math.imul(ah0, bl1) | 0;
                    hi = hi + Math.imul(ah0, bh1) | 0;
                    var w1 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
                    c = (hi + (mid >>> 13) | 0) + (w1 >>> 26) | 0;
                    w1 &= 67108863;
                    lo = Math.imul(al2, bl0);
                    mid = Math.imul(al2, bh0);
                    mid = mid + Math.imul(ah2, bl0) | 0;
                    hi = Math.imul(ah2, bh0);
                    lo = lo + Math.imul(al1, bl1) | 0;
                    mid = mid + Math.imul(al1, bh1) | 0;
                    mid = mid + Math.imul(ah1, bl1) | 0;
                    hi = hi + Math.imul(ah1, bh1) | 0;
                    lo = lo + Math.imul(al0, bl2) | 0;
                    mid = mid + Math.imul(al0, bh2) | 0;
                    mid = mid + Math.imul(ah0, bl2) | 0;
                    hi = hi + Math.imul(ah0, bh2) | 0;
                    var w2 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
                    c = (hi + (mid >>> 13) | 0) + (w2 >>> 26) | 0;
                    w2 &= 67108863;
                    lo = Math.imul(al3, bl0);
                    mid = Math.imul(al3, bh0);
                    mid = mid + Math.imul(ah3, bl0) | 0;
                    hi = Math.imul(ah3, bh0);
                    lo = lo + Math.imul(al2, bl1) | 0;
                    mid = mid + Math.imul(al2, bh1) | 0;
                    mid = mid + Math.imul(ah2, bl1) | 0;
                    hi = hi + Math.imul(ah2, bh1) | 0;
                    lo = lo + Math.imul(al1, bl2) | 0;
                    mid = mid + Math.imul(al1, bh2) | 0;
                    mid = mid + Math.imul(ah1, bl2) | 0;
                    hi = hi + Math.imul(ah1, bh2) | 0;
                    lo = lo + Math.imul(al0, bl3) | 0;
                    mid = mid + Math.imul(al0, bh3) | 0;
                    mid = mid + Math.imul(ah0, bl3) | 0;
                    hi = hi + Math.imul(ah0, bh3) | 0;
                    var w3 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
                    c = (hi + (mid >>> 13) | 0) + (w3 >>> 26) | 0;
                    w3 &= 67108863;
                    lo = Math.imul(al4, bl0);
                    mid = Math.imul(al4, bh0);
                    mid = mid + Math.imul(ah4, bl0) | 0;
                    hi = Math.imul(ah4, bh0);
                    lo = lo + Math.imul(al3, bl1) | 0;
                    mid = mid + Math.imul(al3, bh1) | 0;
                    mid = mid + Math.imul(ah3, bl1) | 0;
                    hi = hi + Math.imul(ah3, bh1) | 0;
                    lo = lo + Math.imul(al2, bl2) | 0;
                    mid = mid + Math.imul(al2, bh2) | 0;
                    mid = mid + Math.imul(ah2, bl2) | 0;
                    hi = hi + Math.imul(ah2, bh2) | 0;
                    lo = lo + Math.imul(al1, bl3) | 0;
                    mid = mid + Math.imul(al1, bh3) | 0;
                    mid = mid + Math.imul(ah1, bl3) | 0;
                    hi = hi + Math.imul(ah1, bh3) | 0;
                    lo = lo + Math.imul(al0, bl4) | 0;
                    mid = mid + Math.imul(al0, bh4) | 0;
                    mid = mid + Math.imul(ah0, bl4) | 0;
                    hi = hi + Math.imul(ah0, bh4) | 0;
                    var w4 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
                    c = (hi + (mid >>> 13) | 0) + (w4 >>> 26) | 0;
                    w4 &= 67108863;
                    lo = Math.imul(al5, bl0);
                    mid = Math.imul(al5, bh0);
                    mid = mid + Math.imul(ah5, bl0) | 0;
                    hi = Math.imul(ah5, bh0);
                    lo = lo + Math.imul(al4, bl1) | 0;
                    mid = mid + Math.imul(al4, bh1) | 0;
                    mid = mid + Math.imul(ah4, bl1) | 0;
                    hi = hi + Math.imul(ah4, bh1) | 0;
                    lo = lo + Math.imul(al3, bl2) | 0;
                    mid = mid + Math.imul(al3, bh2) | 0;
                    mid = mid + Math.imul(ah3, bl2) | 0;
                    hi = hi + Math.imul(ah3, bh2) | 0;
                    lo = lo + Math.imul(al2, bl3) | 0;
                    mid = mid + Math.imul(al2, bh3) | 0;
                    mid = mid + Math.imul(ah2, bl3) | 0;
                    hi = hi + Math.imul(ah2, bh3) | 0;
                    lo = lo + Math.imul(al1, bl4) | 0;
                    mid = mid + Math.imul(al1, bh4) | 0;
                    mid = mid + Math.imul(ah1, bl4) | 0;
                    hi = hi + Math.imul(ah1, bh4) | 0;
                    lo = lo + Math.imul(al0, bl5) | 0;
                    mid = mid + Math.imul(al0, bh5) | 0;
                    mid = mid + Math.imul(ah0, bl5) | 0;
                    hi = hi + Math.imul(ah0, bh5) | 0;
                    var w5 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
                    c = (hi + (mid >>> 13) | 0) + (w5 >>> 26) | 0;
                    w5 &= 67108863;
                    lo = Math.imul(al6, bl0);
                    mid = Math.imul(al6, bh0);
                    mid = mid + Math.imul(ah6, bl0) | 0;
                    hi = Math.imul(ah6, bh0);
                    lo = lo + Math.imul(al5, bl1) | 0;
                    mid = mid + Math.imul(al5, bh1) | 0;
                    mid = mid + Math.imul(ah5, bl1) | 0;
                    hi = hi + Math.imul(ah5, bh1) | 0;
                    lo = lo + Math.imul(al4, bl2) | 0;
                    mid = mid + Math.imul(al4, bh2) | 0;
                    mid = mid + Math.imul(ah4, bl2) | 0;
                    hi = hi + Math.imul(ah4, bh2) | 0;
                    lo = lo + Math.imul(al3, bl3) | 0;
                    mid = mid + Math.imul(al3, bh3) | 0;
                    mid = mid + Math.imul(ah3, bl3) | 0;
                    hi = hi + Math.imul(ah3, bh3) | 0;
                    lo = lo + Math.imul(al2, bl4) | 0;
                    mid = mid + Math.imul(al2, bh4) | 0;
                    mid = mid + Math.imul(ah2, bl4) | 0;
                    hi = hi + Math.imul(ah2, bh4) | 0;
                    lo = lo + Math.imul(al1, bl5) | 0;
                    mid = mid + Math.imul(al1, bh5) | 0;
                    mid = mid + Math.imul(ah1, bl5) | 0;
                    hi = hi + Math.imul(ah1, bh5) | 0;
                    lo = lo + Math.imul(al0, bl6) | 0;
                    mid = mid + Math.imul(al0, bh6) | 0;
                    mid = mid + Math.imul(ah0, bl6) | 0;
                    hi = hi + Math.imul(ah0, bh6) | 0;
                    var w6 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
                    c = (hi + (mid >>> 13) | 0) + (w6 >>> 26) | 0;
                    w6 &= 67108863;
                    lo = Math.imul(al7, bl0);
                    mid = Math.imul(al7, bh0);
                    mid = mid + Math.imul(ah7, bl0) | 0;
                    hi = Math.imul(ah7, bh0);
                    lo = lo + Math.imul(al6, bl1) | 0;
                    mid = mid + Math.imul(al6, bh1) | 0;
                    mid = mid + Math.imul(ah6, bl1) | 0;
                    hi = hi + Math.imul(ah6, bh1) | 0;
                    lo = lo + Math.imul(al5, bl2) | 0;
                    mid = mid + Math.imul(al5, bh2) | 0;
                    mid = mid + Math.imul(ah5, bl2) | 0;
                    hi = hi + Math.imul(ah5, bh2) | 0;
                    lo = lo + Math.imul(al4, bl3) | 0;
                    mid = mid + Math.imul(al4, bh3) | 0;
                    mid = mid + Math.imul(ah4, bl3) | 0;
                    hi = hi + Math.imul(ah4, bh3) | 0;
                    lo = lo + Math.imul(al3, bl4) | 0;
                    mid = mid + Math.imul(al3, bh4) | 0;
                    mid = mid + Math.imul(ah3, bl4) | 0;
                    hi = hi + Math.imul(ah3, bh4) | 0;
                    lo = lo + Math.imul(al2, bl5) | 0;
                    mid = mid + Math.imul(al2, bh5) | 0;
                    mid = mid + Math.imul(ah2, bl5) | 0;
                    hi = hi + Math.imul(ah2, bh5) | 0;
                    lo = lo + Math.imul(al1, bl6) | 0;
                    mid = mid + Math.imul(al1, bh6) | 0;
                    mid = mid + Math.imul(ah1, bl6) | 0;
                    hi = hi + Math.imul(ah1, bh6) | 0;
                    lo = lo + Math.imul(al0, bl7) | 0;
                    mid = mid + Math.imul(al0, bh7) | 0;
                    mid = mid + Math.imul(ah0, bl7) | 0;
                    hi = hi + Math.imul(ah0, bh7) | 0;
                    var w7 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
                    c = (hi + (mid >>> 13) | 0) + (w7 >>> 26) | 0;
                    w7 &= 67108863;
                    lo = Math.imul(al8, bl0);
                    mid = Math.imul(al8, bh0);
                    mid = mid + Math.imul(ah8, bl0) | 0;
                    hi = Math.imul(ah8, bh0);
                    lo = lo + Math.imul(al7, bl1) | 0;
                    mid = mid + Math.imul(al7, bh1) | 0;
                    mid = mid + Math.imul(ah7, bl1) | 0;
                    hi = hi + Math.imul(ah7, bh1) | 0;
                    lo = lo + Math.imul(al6, bl2) | 0;
                    mid = mid + Math.imul(al6, bh2) | 0;
                    mid = mid + Math.imul(ah6, bl2) | 0;
                    hi = hi + Math.imul(ah6, bh2) | 0;
                    lo = lo + Math.imul(al5, bl3) | 0;
                    mid = mid + Math.imul(al5, bh3) | 0;
                    mid = mid + Math.imul(ah5, bl3) | 0;
                    hi = hi + Math.imul(ah5, bh3) | 0;
                    lo = lo + Math.imul(al4, bl4) | 0;
                    mid = mid + Math.imul(al4, bh4) | 0;
                    mid = mid + Math.imul(ah4, bl4) | 0;
                    hi = hi + Math.imul(ah4, bh4) | 0;
                    lo = lo + Math.imul(al3, bl5) | 0;
                    mid = mid + Math.imul(al3, bh5) | 0;
                    mid = mid + Math.imul(ah3, bl5) | 0;
                    hi = hi + Math.imul(ah3, bh5) | 0;
                    lo = lo + Math.imul(al2, bl6) | 0;
                    mid = mid + Math.imul(al2, bh6) | 0;
                    mid = mid + Math.imul(ah2, bl6) | 0;
                    hi = hi + Math.imul(ah2, bh6) | 0;
                    lo = lo + Math.imul(al1, bl7) | 0;
                    mid = mid + Math.imul(al1, bh7) | 0;
                    mid = mid + Math.imul(ah1, bl7) | 0;
                    hi = hi + Math.imul(ah1, bh7) | 0;
                    lo = lo + Math.imul(al0, bl8) | 0;
                    mid = mid + Math.imul(al0, bh8) | 0;
                    mid = mid + Math.imul(ah0, bl8) | 0;
                    hi = hi + Math.imul(ah0, bh8) | 0;
                    var w8 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
                    c = (hi + (mid >>> 13) | 0) + (w8 >>> 26) | 0;
                    w8 &= 67108863;
                    lo = Math.imul(al9, bl0);
                    mid = Math.imul(al9, bh0);
                    mid = mid + Math.imul(ah9, bl0) | 0;
                    hi = Math.imul(ah9, bh0);
                    lo = lo + Math.imul(al8, bl1) | 0;
                    mid = mid + Math.imul(al8, bh1) | 0;
                    mid = mid + Math.imul(ah8, bl1) | 0;
                    hi = hi + Math.imul(ah8, bh1) | 0;
                    lo = lo + Math.imul(al7, bl2) | 0;
                    mid = mid + Math.imul(al7, bh2) | 0;
                    mid = mid + Math.imul(ah7, bl2) | 0;
                    hi = hi + Math.imul(ah7, bh2) | 0;
                    lo = lo + Math.imul(al6, bl3) | 0;
                    mid = mid + Math.imul(al6, bh3) | 0;
                    mid = mid + Math.imul(ah6, bl3) | 0;
                    hi = hi + Math.imul(ah6, bh3) | 0;
                    lo = lo + Math.imul(al5, bl4) | 0;
                    mid = mid + Math.imul(al5, bh4) | 0;
                    mid = mid + Math.imul(ah5, bl4) | 0;
                    hi = hi + Math.imul(ah5, bh4) | 0;
                    lo = lo + Math.imul(al4, bl5) | 0;
                    mid = mid + Math.imul(al4, bh5) | 0;
                    mid = mid + Math.imul(ah4, bl5) | 0;
                    hi = hi + Math.imul(ah4, bh5) | 0;
                    lo = lo + Math.imul(al3, bl6) | 0;
                    mid = mid + Math.imul(al3, bh6) | 0;
                    mid = mid + Math.imul(ah3, bl6) | 0;
                    hi = hi + Math.imul(ah3, bh6) | 0;
                    lo = lo + Math.imul(al2, bl7) | 0;
                    mid = mid + Math.imul(al2, bh7) | 0;
                    mid = mid + Math.imul(ah2, bl7) | 0;
                    hi = hi + Math.imul(ah2, bh7) | 0;
                    lo = lo + Math.imul(al1, bl8) | 0;
                    mid = mid + Math.imul(al1, bh8) | 0;
                    mid = mid + Math.imul(ah1, bl8) | 0;
                    hi = hi + Math.imul(ah1, bh8) | 0;
                    lo = lo + Math.imul(al0, bl9) | 0;
                    mid = mid + Math.imul(al0, bh9) | 0;
                    mid = mid + Math.imul(ah0, bl9) | 0;
                    hi = hi + Math.imul(ah0, bh9) | 0;
                    var w9 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
                    c = (hi + (mid >>> 13) | 0) + (w9 >>> 26) | 0;
                    w9 &= 67108863;
                    lo = Math.imul(al9, bl1);
                    mid = Math.imul(al9, bh1);
                    mid = mid + Math.imul(ah9, bl1) | 0;
                    hi = Math.imul(ah9, bh1);
                    lo = lo + Math.imul(al8, bl2) | 0;
                    mid = mid + Math.imul(al8, bh2) | 0;
                    mid = mid + Math.imul(ah8, bl2) | 0;
                    hi = hi + Math.imul(ah8, bh2) | 0;
                    lo = lo + Math.imul(al7, bl3) | 0;
                    mid = mid + Math.imul(al7, bh3) | 0;
                    mid = mid + Math.imul(ah7, bl3) | 0;
                    hi = hi + Math.imul(ah7, bh3) | 0;
                    lo = lo + Math.imul(al6, bl4) | 0;
                    mid = mid + Math.imul(al6, bh4) | 0;
                    mid = mid + Math.imul(ah6, bl4) | 0;
                    hi = hi + Math.imul(ah6, bh4) | 0;
                    lo = lo + Math.imul(al5, bl5) | 0;
                    mid = mid + Math.imul(al5, bh5) | 0;
                    mid = mid + Math.imul(ah5, bl5) | 0;
                    hi = hi + Math.imul(ah5, bh5) | 0;
                    lo = lo + Math.imul(al4, bl6) | 0;
                    mid = mid + Math.imul(al4, bh6) | 0;
                    mid = mid + Math.imul(ah4, bl6) | 0;
                    hi = hi + Math.imul(ah4, bh6) | 0;
                    lo = lo + Math.imul(al3, bl7) | 0;
                    mid = mid + Math.imul(al3, bh7) | 0;
                    mid = mid + Math.imul(ah3, bl7) | 0;
                    hi = hi + Math.imul(ah3, bh7) | 0;
                    lo = lo + Math.imul(al2, bl8) | 0;
                    mid = mid + Math.imul(al2, bh8) | 0;
                    mid = mid + Math.imul(ah2, bl8) | 0;
                    hi = hi + Math.imul(ah2, bh8) | 0;
                    lo = lo + Math.imul(al1, bl9) | 0;
                    mid = mid + Math.imul(al1, bh9) | 0;
                    mid = mid + Math.imul(ah1, bl9) | 0;
                    hi = hi + Math.imul(ah1, bh9) | 0;
                    var w10 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
                    c = (hi + (mid >>> 13) | 0) + (w10 >>> 26) | 0;
                    w10 &= 67108863;
                    lo = Math.imul(al9, bl2);
                    mid = Math.imul(al9, bh2);
                    mid = mid + Math.imul(ah9, bl2) | 0;
                    hi = Math.imul(ah9, bh2);
                    lo = lo + Math.imul(al8, bl3) | 0;
                    mid = mid + Math.imul(al8, bh3) | 0;
                    mid = mid + Math.imul(ah8, bl3) | 0;
                    hi = hi + Math.imul(ah8, bh3) | 0;
                    lo = lo + Math.imul(al7, bl4) | 0;
                    mid = mid + Math.imul(al7, bh4) | 0;
                    mid = mid + Math.imul(ah7, bl4) | 0;
                    hi = hi + Math.imul(ah7, bh4) | 0;
                    lo = lo + Math.imul(al6, bl5) | 0;
                    mid = mid + Math.imul(al6, bh5) | 0;
                    mid = mid + Math.imul(ah6, bl5) | 0;
                    hi = hi + Math.imul(ah6, bh5) | 0;
                    lo = lo + Math.imul(al5, bl6) | 0;
                    mid = mid + Math.imul(al5, bh6) | 0;
                    mid = mid + Math.imul(ah5, bl6) | 0;
                    hi = hi + Math.imul(ah5, bh6) | 0;
                    lo = lo + Math.imul(al4, bl7) | 0;
                    mid = mid + Math.imul(al4, bh7) | 0;
                    mid = mid + Math.imul(ah4, bl7) | 0;
                    hi = hi + Math.imul(ah4, bh7) | 0;
                    lo = lo + Math.imul(al3, bl8) | 0;
                    mid = mid + Math.imul(al3, bh8) | 0;
                    mid = mid + Math.imul(ah3, bl8) | 0;
                    hi = hi + Math.imul(ah3, bh8) | 0;
                    lo = lo + Math.imul(al2, bl9) | 0;
                    mid = mid + Math.imul(al2, bh9) | 0;
                    mid = mid + Math.imul(ah2, bl9) | 0;
                    hi = hi + Math.imul(ah2, bh9) | 0;
                    var w11 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
                    c = (hi + (mid >>> 13) | 0) + (w11 >>> 26) | 0;
                    w11 &= 67108863;
                    lo = Math.imul(al9, bl3);
                    mid = Math.imul(al9, bh3);
                    mid = mid + Math.imul(ah9, bl3) | 0;
                    hi = Math.imul(ah9, bh3);
                    lo = lo + Math.imul(al8, bl4) | 0;
                    mid = mid + Math.imul(al8, bh4) | 0;
                    mid = mid + Math.imul(ah8, bl4) | 0;
                    hi = hi + Math.imul(ah8, bh4) | 0;
                    lo = lo + Math.imul(al7, bl5) | 0;
                    mid = mid + Math.imul(al7, bh5) | 0;
                    mid = mid + Math.imul(ah7, bl5) | 0;
                    hi = hi + Math.imul(ah7, bh5) | 0;
                    lo = lo + Math.imul(al6, bl6) | 0;
                    mid = mid + Math.imul(al6, bh6) | 0;
                    mid = mid + Math.imul(ah6, bl6) | 0;
                    hi = hi + Math.imul(ah6, bh6) | 0;
                    lo = lo + Math.imul(al5, bl7) | 0;
                    mid = mid + Math.imul(al5, bh7) | 0;
                    mid = mid + Math.imul(ah5, bl7) | 0;
                    hi = hi + Math.imul(ah5, bh7) | 0;
                    lo = lo + Math.imul(al4, bl8) | 0;
                    mid = mid + Math.imul(al4, bh8) | 0;
                    mid = mid + Math.imul(ah4, bl8) | 0;
                    hi = hi + Math.imul(ah4, bh8) | 0;
                    lo = lo + Math.imul(al3, bl9) | 0;
                    mid = mid + Math.imul(al3, bh9) | 0;
                    mid = mid + Math.imul(ah3, bl9) | 0;
                    hi = hi + Math.imul(ah3, bh9) | 0;
                    var w12 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
                    c = (hi + (mid >>> 13) | 0) + (w12 >>> 26) | 0;
                    w12 &= 67108863;
                    lo = Math.imul(al9, bl4);
                    mid = Math.imul(al9, bh4);
                    mid = mid + Math.imul(ah9, bl4) | 0;
                    hi = Math.imul(ah9, bh4);
                    lo = lo + Math.imul(al8, bl5) | 0;
                    mid = mid + Math.imul(al8, bh5) | 0;
                    mid = mid + Math.imul(ah8, bl5) | 0;
                    hi = hi + Math.imul(ah8, bh5) | 0;
                    lo = lo + Math.imul(al7, bl6) | 0;
                    mid = mid + Math.imul(al7, bh6) | 0;
                    mid = mid + Math.imul(ah7, bl6) | 0;
                    hi = hi + Math.imul(ah7, bh6) | 0;
                    lo = lo + Math.imul(al6, bl7) | 0;
                    mid = mid + Math.imul(al6, bh7) | 0;
                    mid = mid + Math.imul(ah6, bl7) | 0;
                    hi = hi + Math.imul(ah6, bh7) | 0;
                    lo = lo + Math.imul(al5, bl8) | 0;
                    mid = mid + Math.imul(al5, bh8) | 0;
                    mid = mid + Math.imul(ah5, bl8) | 0;
                    hi = hi + Math.imul(ah5, bh8) | 0;
                    lo = lo + Math.imul(al4, bl9) | 0;
                    mid = mid + Math.imul(al4, bh9) | 0;
                    mid = mid + Math.imul(ah4, bl9) | 0;
                    hi = hi + Math.imul(ah4, bh9) | 0;
                    var w13 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
                    c = (hi + (mid >>> 13) | 0) + (w13 >>> 26) | 0;
                    w13 &= 67108863;
                    lo = Math.imul(al9, bl5);
                    mid = Math.imul(al9, bh5);
                    mid = mid + Math.imul(ah9, bl5) | 0;
                    hi = Math.imul(ah9, bh5);
                    lo = lo + Math.imul(al8, bl6) | 0;
                    mid = mid + Math.imul(al8, bh6) | 0;
                    mid = mid + Math.imul(ah8, bl6) | 0;
                    hi = hi + Math.imul(ah8, bh6) | 0;
                    lo = lo + Math.imul(al7, bl7) | 0;
                    mid = mid + Math.imul(al7, bh7) | 0;
                    mid = mid + Math.imul(ah7, bl7) | 0;
                    hi = hi + Math.imul(ah7, bh7) | 0;
                    lo = lo + Math.imul(al6, bl8) | 0;
                    mid = mid + Math.imul(al6, bh8) | 0;
                    mid = mid + Math.imul(ah6, bl8) | 0;
                    hi = hi + Math.imul(ah6, bh8) | 0;
                    lo = lo + Math.imul(al5, bl9) | 0;
                    mid = mid + Math.imul(al5, bh9) | 0;
                    mid = mid + Math.imul(ah5, bl9) | 0;
                    hi = hi + Math.imul(ah5, bh9) | 0;
                    var w14 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
                    c = (hi + (mid >>> 13) | 0) + (w14 >>> 26) | 0;
                    w14 &= 67108863;
                    lo = Math.imul(al9, bl6);
                    mid = Math.imul(al9, bh6);
                    mid = mid + Math.imul(ah9, bl6) | 0;
                    hi = Math.imul(ah9, bh6);
                    lo = lo + Math.imul(al8, bl7) | 0;
                    mid = mid + Math.imul(al8, bh7) | 0;
                    mid = mid + Math.imul(ah8, bl7) | 0;
                    hi = hi + Math.imul(ah8, bh7) | 0;
                    lo = lo + Math.imul(al7, bl8) | 0;
                    mid = mid + Math.imul(al7, bh8) | 0;
                    mid = mid + Math.imul(ah7, bl8) | 0;
                    hi = hi + Math.imul(ah7, bh8) | 0;
                    lo = lo + Math.imul(al6, bl9) | 0;
                    mid = mid + Math.imul(al6, bh9) | 0;
                    mid = mid + Math.imul(ah6, bl9) | 0;
                    hi = hi + Math.imul(ah6, bh9) | 0;
                    var w15 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
                    c = (hi + (mid >>> 13) | 0) + (w15 >>> 26) | 0;
                    w15 &= 67108863;
                    lo = Math.imul(al9, bl7);
                    mid = Math.imul(al9, bh7);
                    mid = mid + Math.imul(ah9, bl7) | 0;
                    hi = Math.imul(ah9, bh7);
                    lo = lo + Math.imul(al8, bl8) | 0;
                    mid = mid + Math.imul(al8, bh8) | 0;
                    mid = mid + Math.imul(ah8, bl8) | 0;
                    hi = hi + Math.imul(ah8, bh8) | 0;
                    lo = lo + Math.imul(al7, bl9) | 0;
                    mid = mid + Math.imul(al7, bh9) | 0;
                    mid = mid + Math.imul(ah7, bl9) | 0;
                    hi = hi + Math.imul(ah7, bh9) | 0;
                    var w16 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
                    c = (hi + (mid >>> 13) | 0) + (w16 >>> 26) | 0;
                    w16 &= 67108863;
                    lo = Math.imul(al9, bl8);
                    mid = Math.imul(al9, bh8);
                    mid = mid + Math.imul(ah9, bl8) | 0;
                    hi = Math.imul(ah9, bh8);
                    lo = lo + Math.imul(al8, bl9) | 0;
                    mid = mid + Math.imul(al8, bh9) | 0;
                    mid = mid + Math.imul(ah8, bl9) | 0;
                    hi = hi + Math.imul(ah8, bh9) | 0;
                    var w17 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
                    c = (hi + (mid >>> 13) | 0) + (w17 >>> 26) | 0;
                    w17 &= 67108863;
                    lo = Math.imul(al9, bl9);
                    mid = Math.imul(al9, bh9);
                    mid = mid + Math.imul(ah9, bl9) | 0;
                    hi = Math.imul(ah9, bh9);
                    var w18 = (c + lo | 0) + ((mid & 8191) << 13) | 0;
                    c = (hi + (mid >>> 13) | 0) + (w18 >>> 26) | 0;
                    w18 &= 67108863;
                    o[0] = w0;
                    o[1] = w1;
                    o[2] = w2;
                    o[3] = w3;
                    o[4] = w4;
                    o[5] = w5;
                    o[6] = w6;
                    o[7] = w7;
                    o[8] = w8;
                    o[9] = w9;
                    o[10] = w10;
                    o[11] = w11;
                    o[12] = w12;
                    o[13] = w13;
                    o[14] = w14;
                    o[15] = w15;
                    o[16] = w16;
                    o[17] = w17;
                    o[18] = w18;
                    if (c !== 0) {
                        o[19] = c;
                        out.length++;
                    }
                    return out;
                };
                if (!Math.imul) {
                    comb10MulTo = smallMulTo;
                }
                function bigMulTo(self, num, out) {
                    out.negative = num.negative ^ self.negative;
                    out.length = self.length + num.length;
                    var carry = 0;
                    var hncarry = 0;
                    for (var k = 0; k < out.length - 1; k++) {
                        var ncarry = hncarry;
                        hncarry = 0;
                        var rword = carry & 67108863;
                        var maxJ = Math.min(k, num.length - 1);
                        for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
                            var i = k - j;
                            var a = self.words[i] | 0;
                            var b = num.words[j] | 0;
                            var r = a * b;
                            var lo = r & 67108863;
                            ncarry = ncarry + (r / 67108864 | 0) | 0;
                            lo = lo + rword | 0;
                            rword = lo & 67108863;
                            ncarry = ncarry + (lo >>> 26) | 0;
                            hncarry += ncarry >>> 26;
                            ncarry &= 67108863;
                        }
                        out.words[k] = rword;
                        carry = ncarry;
                        ncarry = hncarry;
                    }
                    if (carry !== 0) {
                        out.words[k] = carry;
                    } else {
                        out.length--;
                    }
                    return out.strip();
                }
                function jumboMulTo(self, num, out) {
                    var fftm = new FFTM();
                    return fftm.mulp(self, num, out);
                }
                BN.prototype.mulTo = function mulTo(num, out) {
                    var res;
                    var len = this.length + num.length;
                    if (this.length === 10 && num.length === 10) {
                        res = comb10MulTo(this, num, out);
                    } else if (len < 63) {
                        res = smallMulTo(this, num, out);
                    } else if (len < 1024) {
                        res = bigMulTo(this, num, out);
                    } else {
                        res = jumboMulTo(this, num, out);
                    }
                    return res;
                };
                function FFTM(x, y) {
                    this.x = x;
                    this.y = y;
                }
                FFTM.prototype.makeRBT = function makeRBT(N) {
                    var t = new Array(N);
                    var l = BN.prototype._countBits(N) - 1;
                    for (var i = 0; i < N; i++) {
                        t[i] = this.revBin(i, l, N);
                    }
                    return t;
                };
                FFTM.prototype.revBin = function revBin(x, l, N) {
                    if (x === 0 || x === N - 1)
                        return x;
                    var rb = 0;
                    for (var i = 0; i < l; i++) {
                        rb |= (x & 1) << l - i - 1;
                        x >>= 1;
                    }
                    return rb;
                };
                FFTM.prototype.permute = function permute(rbt, rws, iws, rtws, itws, N) {
                    for (var i = 0; i < N; i++) {
                        rtws[i] = rws[rbt[i]];
                        itws[i] = iws[rbt[i]];
                    }
                };
                FFTM.prototype.transform = function transform(rws, iws, rtws, itws, N, rbt) {
                    this.permute(rbt, rws, iws, rtws, itws, N);
                    for (var s = 1; s < N; s <<= 1) {
                        var l = s << 1;
                        var rtwdf = Math.cos(2 * Math.PI / l);
                        var itwdf = Math.sin(2 * Math.PI / l);
                        for (var p = 0; p < N; p += l) {
                            var rtwdf_ = rtwdf;
                            var itwdf_ = itwdf;
                            for (var j = 0; j < s; j++) {
                                var re = rtws[p + j];
                                var ie = itws[p + j];
                                var ro = rtws[p + j + s];
                                var io = itws[p + j + s];
                                var rx = rtwdf_ * ro - itwdf_ * io;
                                io = rtwdf_ * io + itwdf_ * ro;
                                ro = rx;
                                rtws[p + j] = re + ro;
                                itws[p + j] = ie + io;
                                rtws[p + j + s] = re - ro;
                                itws[p + j + s] = ie - io;
                                if (j !== l) {
                                    rx = rtwdf * rtwdf_ - itwdf * itwdf_;
                                    itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
                                    rtwdf_ = rx;
                                }
                            }
                        }
                    }
                };
                FFTM.prototype.guessLen13b = function guessLen13b(n, m) {
                    var N = Math.max(m, n) | 1;
                    var odd = N & 1;
                    var i = 0;
                    for (N = N / 2 | 0; N; N = N >>> 1) {
                        i++;
                    }
                    return 1 << i + 1 + odd;
                };
                FFTM.prototype.conjugate = function conjugate(rws, iws, N) {
                    if (N <= 1)
                        return;
                    for (var i = 0; i < N / 2; i++) {
                        var t = rws[i];
                        rws[i] = rws[N - i - 1];
                        rws[N - i - 1] = t;
                        t = iws[i];
                        iws[i] = -iws[N - i - 1];
                        iws[N - i - 1] = -t;
                    }
                };
                FFTM.prototype.normalize13b = function normalize13b(ws, N) {
                    var carry = 0;
                    for (var i = 0; i < N / 2; i++) {
                        var w = Math.round(ws[2 * i + 1] / N) * 8192 + Math.round(ws[2 * i] / N) + carry;
                        ws[i] = w & 67108863;
                        if (w < 67108864) {
                            carry = 0;
                        } else {
                            carry = w / 67108864 | 0;
                        }
                    }
                    return ws;
                };
                FFTM.prototype.convert13b = function convert13b(ws, len, rws, N) {
                    var carry = 0;
                    for (var i = 0; i < len; i++) {
                        carry = carry + (ws[i] | 0);
                        rws[2 * i] = carry & 8191;
                        carry = carry >>> 13;
                        rws[2 * i + 1] = carry & 8191;
                        carry = carry >>> 13;
                    }
                    for (i = 2 * len; i < N; ++i) {
                        rws[i] = 0;
                    }
                };
                FFTM.prototype.stub = function stub(N) {
                    var ph = new Array(N);
                    for (var i = 0; i < N; i++) {
                        ph[i] = 0;
                    }
                    return ph;
                };
                FFTM.prototype.mulp = function mulp(x, y, out) {
                    var N = 2 * this.guessLen13b(x.length, y.length);
                    var rbt = this.makeRBT(N);
                    var _ = this.stub(N);
                    var rws = new Array(N);
                    var rwst = new Array(N);
                    var iwst = new Array(N);
                    var nrws = new Array(N);
                    var nrwst = new Array(N);
                    var niwst = new Array(N);
                    var rmws = out.words;
                    rmws.length = N;
                    this.convert13b(x.words, x.length, rws, N);
                    this.convert13b(y.words, y.length, nrws, N);
                    this.transform(rws, _, rwst, iwst, N, rbt);
                    this.transform(nrws, _, nrwst, niwst, N, rbt);
                    for (var i = 0; i < N; i++) {
                        var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
                        iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
                        rwst[i] = rx;
                    }
                    this.conjugate(rwst, iwst, N);
                    this.transform(rwst, iwst, rmws, _, N, rbt);
                    this.conjugate(rmws, _, N);
                    this.normalize13b(rmws, N);
                    out.negative = x.negative ^ y.negative;
                    out.length = x.length + y.length;
                    return out.strip();
                };
                BN.prototype.mul = function mul(num) {
                    var out = new BN(null);
                    out.words = new Array(this.length + num.length);
                    return this.mulTo(num, out);
                };
                BN.prototype.mulf = function mulf(num) {
                    var out = new BN(null);
                    out.words = new Array(this.length + num.length);
                    return jumboMulTo(this, num, out);
                };
                BN.prototype.imul = function imul(num) {
                    return this.clone().mulTo(num, this);
                };
                BN.prototype.imuln = function imuln(num) {
                    var carry = 0;
                    for (var i = 0; i < this.length; i++) {
                        var w = (this.words[i] | 0) * num;
                        var lo = (w & 67108863) + (carry & 67108863);
                        carry >>= 26;
                        carry += w / 67108864 | 0;
                        carry += lo >>> 26;
                        this.words[i] = lo & 67108863;
                    }
                    if (carry !== 0) {
                        this.words[i] = carry;
                        this.length++;
                    }
                    return this;
                };
                BN.prototype.muln = function muln(num) {
                    return this.clone().imuln(num);
                };
                BN.prototype.sqr = function sqr() {
                    return this.mul(this);
                };
                BN.prototype.isqr = function isqr() {
                    return this.imul(this.clone());
                };
                BN.prototype.pow = function pow(num) {
                    var w = toBitArray(num);
                    if (w.length === 0)
                        return new BN(1);
                    var res = this;
                    for (var i = 0; i < w.length; i++, res = res.sqr()) {
                        if (w[i] !== 0)
                            break;
                    }
                    if (++i < w.length) {
                        for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
                            if (w[i] === 0)
                                continue;
                            res = res.mul(q);
                        }
                    }
                    return res;
                };
                BN.prototype.iushln = function iushln(bits) {
                    var r = bits % 26;
                    var s = (bits - r) / 26;
                    var carryMask = 67108863 >>> 26 - r << 26 - r;
                    var i;
                    if (r !== 0) {
                        var carry = 0;
                        for (i = 0; i < this.length; i++) {
                            var newCarry = this.words[i] & carryMask;
                            var c = (this.words[i] | 0) - newCarry << r;
                            this.words[i] = c | carry;
                            carry = newCarry >>> 26 - r;
                        }
                        if (carry) {
                            this.words[i] = carry;
                            this.length++;
                        }
                    }
                    if (s !== 0) {
                        for (i = this.length - 1; i >= 0; i--) {
                            this.words[i + s] = this.words[i];
                        }
                        for (i = 0; i < s; i++) {
                            this.words[i] = 0;
                        }
                        this.length += s;
                    }
                    return this.strip();
                };
                BN.prototype.ishln = function ishln(bits) {
                    return this.iushln(bits);
                };
                BN.prototype.iushrn = function iushrn(bits, hint, extended) {
                    var h;
                    if (hint) {
                        h = (hint - hint % 26) / 26;
                    } else {
                        h = 0;
                    }
                    var r = bits % 26;
                    var s = Math.min((bits - r) / 26, this.length);
                    var mask = 67108863 ^ 67108863 >>> r << r;
                    var maskedWords = extended;
                    h -= s;
                    h = Math.max(0, h);
                    if (maskedWords) {
                        for (var i = 0; i < s; i++) {
                            maskedWords.words[i] = this.words[i];
                        }
                        maskedWords.length = s;
                    }
                    if (s === 0) {
                    } else if (this.length > s) {
                        this.length -= s;
                        for (i = 0; i < this.length; i++) {
                            this.words[i] = this.words[i + s];
                        }
                    } else {
                        this.words[0] = 0;
                        this.length = 1;
                    }
                    var carry = 0;
                    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
                        var word = this.words[i] | 0;
                        this.words[i] = carry << 26 - r | word >>> r;
                        carry = word & mask;
                    }
                    if (maskedWords && carry !== 0) {
                        maskedWords.words[maskedWords.length++] = carry;
                    }
                    if (this.length === 0) {
                        this.words[0] = 0;
                        this.length = 1;
                    }
                    return this.strip();
                };
                BN.prototype.ishrn = function ishrn(bits, hint, extended) {
                    return this.iushrn(bits, hint, extended);
                };
                BN.prototype.shln = function shln(bits) {
                    return this.clone().ishln(bits);
                };
                BN.prototype.ushln = function ushln(bits) {
                    return this.clone().iushln(bits);
                };
                BN.prototype.shrn = function shrn(bits) {
                    return this.clone().ishrn(bits);
                };
                BN.prototype.ushrn = function ushrn(bits) {
                    return this.clone().iushrn(bits);
                };
                BN.prototype.testn = function testn(bit) {
                    var r = bit % 26;
                    var s = (bit - r) / 26;
                    var q = 1 << r;
                    if (this.length <= s)
                        return false;
                    var w = this.words[s];
                    return !!(w & q);
                };
                BN.prototype.imaskn = function imaskn(bits) {
                    var r = bits % 26;
                    var s = (bits - r) / 26;
                    if (this.length <= s) {
                        return this;
                    }
                    if (r !== 0) {
                        s++;
                    }
                    this.length = Math.min(s, this.length);
                    if (r !== 0) {
                        var mask = 67108863 ^ 67108863 >>> r << r;
                        this.words[this.length - 1] &= mask;
                    }
                    return this.strip();
                };
                BN.prototype.maskn = function maskn(bits) {
                    return this.clone().imaskn(bits);
                };
                BN.prototype.iaddn = function iaddn(num) {
                    if (num < 0)
                        return this.isubn(-num);
                    if (this.negative !== 0) {
                        if (this.length === 1 && (this.words[0] | 0) < num) {
                            this.words[0] = num - (this.words[0] | 0);
                            this.negative = 0;
                            return this;
                        }
                        this.negative = 0;
                        this.isubn(num);
                        this.negative = 1;
                        return this;
                    }
                    return this._iaddn(num);
                };
                BN.prototype._iaddn = function _iaddn(num) {
                    this.words[0] += num;
                    for (var i = 0; i < this.length && this.words[i] >= 67108864; i++) {
                        this.words[i] -= 67108864;
                        if (i === this.length - 1) {
                            this.words[i + 1] = 1;
                        } else {
                            this.words[i + 1]++;
                        }
                    }
                    this.length = Math.max(this.length, i + 1);
                    return this;
                };
                BN.prototype.isubn = function isubn(num) {
                    if (num < 0)
                        return this.iaddn(-num);
                    if (this.negative !== 0) {
                        this.negative = 0;
                        this.iaddn(num);
                        this.negative = 1;
                        return this;
                    }
                    this.words[0] -= num;
                    if (this.length === 1 && this.words[0] < 0) {
                        this.words[0] = -this.words[0];
                        this.negative = 1;
                    } else {
                        for (var i = 0; i < this.length && this.words[i] < 0; i++) {
                            this.words[i] += 67108864;
                            this.words[i + 1] -= 1;
                        }
                    }
                    return this.strip();
                };
                BN.prototype.addn = function addn(num) {
                    return this.clone().iaddn(num);
                };
                BN.prototype.subn = function subn(num) {
                    return this.clone().isubn(num);
                };
                BN.prototype.iabs = function iabs() {
                    this.negative = 0;
                    return this;
                };
                BN.prototype.abs = function abs() {
                    return this.clone().iabs();
                };
                BN.prototype._ishlnsubmul = function _ishlnsubmul(num, mul, shift) {
                    var len = num.length + shift;
                    var i;
                    this._expand(len);
                    var w;
                    var carry = 0;
                    for (i = 0; i < num.length; i++) {
                        w = (this.words[i + shift] | 0) + carry;
                        var right = (num.words[i] | 0) * mul;
                        w -= right & 67108863;
                        carry = (w >> 26) - (right / 67108864 | 0);
                        this.words[i + shift] = w & 67108863;
                    }
                    for (; i < this.length - shift; i++) {
                        w = (this.words[i + shift] | 0) + carry;
                        carry = w >> 26;
                        this.words[i + shift] = w & 67108863;
                    }
                    if (carry === 0)
                        return this.strip();
                    carry = 0;
                    for (i = 0; i < this.length; i++) {
                        w = -(this.words[i] | 0) + carry;
                        carry = w >> 26;
                        this.words[i] = w & 67108863;
                    }
                    this.negative = 1;
                    return this.strip();
                };
                BN.prototype._wordDiv = function _wordDiv(num, mode) {
                    var shift = this.length - num.length;
                    var a = this.clone();
                    var b = num;
                    var bhi = b.words[b.length - 1] | 0;
                    var bhiBits = this._countBits(bhi);
                    shift = 26 - bhiBits;
                    if (shift !== 0) {
                        b = b.ushln(shift);
                        a.iushln(shift);
                        bhi = b.words[b.length - 1] | 0;
                    }
                    var m = a.length - b.length;
                    var q;
                    if (mode !== 'mod') {
                        q = new BN(null);
                        q.length = m + 1;
                        q.words = new Array(q.length);
                        for (var i = 0; i < q.length; i++) {
                            q.words[i] = 0;
                        }
                    }
                    var diff = a.clone()._ishlnsubmul(b, 1, m);
                    if (diff.negative === 0) {
                        a = diff;
                        if (q) {
                            q.words[m] = 1;
                        }
                    }
                    for (var j = m - 1; j >= 0; j--) {
                        var qj = (a.words[b.length + j] | 0) * 67108864 + (a.words[b.length + j - 1] | 0);
                        qj = Math.min(qj / bhi | 0, 67108863);
                        a._ishlnsubmul(b, qj, j);
                        while (a.negative !== 0) {
                            qj--;
                            a.negative = 0;
                            a._ishlnsubmul(b, 1, j);
                            if (!a.isZero()) {
                                a.negative ^= 1;
                            }
                        }
                        if (q) {
                            q.words[j] = qj;
                        }
                    }
                    if (q) {
                        q.strip();
                    }
                    a.strip();
                    if (mode !== 'div' && shift !== 0) {
                        a.iushrn(shift);
                    }
                    return {
                        div: q || null,
                        mod: a
                    };
                };
                BN.prototype.divmod = function divmod(num, mode, positive) {
                    if (this.isZero()) {
                        return {
                            div: new BN(0),
                            mod: new BN(0)
                        };
                    }
                    var div, mod, res;
                    if (this.negative !== 0 && num.negative === 0) {
                        res = this.neg().divmod(num, mode);
                        if (mode !== 'mod') {
                            div = res.div.neg();
                        }
                        if (mode !== 'div') {
                            mod = res.mod.neg();
                            if (positive && mod.negative !== 0) {
                                mod.iadd(num);
                            }
                        }
                        return {
                            div: div,
                            mod: mod
                        };
                    }
                    if (this.negative === 0 && num.negative !== 0) {
                        res = this.divmod(num.neg(), mode);
                        if (mode !== 'mod') {
                            div = res.div.neg();
                        }
                        return {
                            div: div,
                            mod: res.mod
                        };
                    }
                    if ((this.negative & num.negative) !== 0) {
                        res = this.neg().divmod(num.neg(), mode);
                        if (mode !== 'div') {
                            mod = res.mod.neg();
                            if (positive && mod.negative !== 0) {
                                mod.isub(num);
                            }
                        }
                        return {
                            div: res.div,
                            mod: mod
                        };
                    }
                    if (num.length > this.length || this.cmp(num) < 0) {
                        return {
                            div: new BN(0),
                            mod: this
                        };
                    }
                    if (num.length === 1) {
                        if (mode === 'div') {
                            return {
                                div: this.divn(num.words[0]),
                                mod: null
                            };
                        }
                        if (mode === 'mod') {
                            return {
                                div: null,
                                mod: new BN(this.modn(num.words[0]))
                            };
                        }
                        return {
                            div: this.divn(num.words[0]),
                            mod: new BN(this.modn(num.words[0]))
                        };
                    }
                    return this._wordDiv(num, mode);
                };
                BN.prototype.div = function div(num) {
                    return this.divmod(num, 'div', false).div;
                };
                BN.prototype.mod = function mod(num) {
                    return this.divmod(num, 'mod', false).mod;
                };
                BN.prototype.umod = function umod(num) {
                    return this.divmod(num, 'mod', true).mod;
                };
                BN.prototype.divRound = function divRound(num) {
                    var dm = this.divmod(num);
                    if (dm.mod.isZero())
                        return dm.div;
                    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
                    var half = num.ushrn(1);
                    var r2 = num.andln(1);
                    var cmp = mod.cmp(half);
                    if (cmp < 0 || r2 === 1 && cmp === 0)
                        return dm.div;
                    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
                };
                BN.prototype.modn = function modn(num) {
                    var p = (1 << 26) % num;
                    var acc = 0;
                    for (var i = this.length - 1; i >= 0; i--) {
                        acc = (p * acc + (this.words[i] | 0)) % num;
                    }
                    return acc;
                };
                BN.prototype.idivn = function idivn(num) {
                    var carry = 0;
                    for (var i = this.length - 1; i >= 0; i--) {
                        var w = (this.words[i] | 0) + carry * 67108864;
                        this.words[i] = w / num | 0;
                        carry = w % num;
                    }
                    return this.strip();
                };
                BN.prototype.divn = function divn(num) {
                    return this.clone().idivn(num);
                };
                BN.prototype.egcd = function egcd(p) {
                    var x = this;
                    var y = p.clone();
                    if (x.negative !== 0) {
                        x = x.umod(p);
                    } else {
                        x = x.clone();
                    }
                    var A = new BN(1);
                    var B = new BN(0);
                    var C = new BN(0);
                    var D = new BN(1);
                    var g = 0;
                    while (x.isEven() && y.isEven()) {
                        x.iushrn(1);
                        y.iushrn(1);
                        ++g;
                    }
                    var yp = y.clone();
                    var xp = x.clone();
                    while (!x.isZero()) {
                        for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
                        if (i > 0) {
                            x.iushrn(i);
                            while (i-- > 0) {
                                if (A.isOdd() || B.isOdd()) {
                                    A.iadd(yp);
                                    B.isub(xp);
                                }
                                A.iushrn(1);
                                B.iushrn(1);
                            }
                        }
                        for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
                        if (j > 0) {
                            y.iushrn(j);
                            while (j-- > 0) {
                                if (C.isOdd() || D.isOdd()) {
                                    C.iadd(yp);
                                    D.isub(xp);
                                }
                                C.iushrn(1);
                                D.iushrn(1);
                            }
                        }
                        if (x.cmp(y) >= 0) {
                            x.isub(y);
                            A.isub(C);
                            B.isub(D);
                        } else {
                            y.isub(x);
                            C.isub(A);
                            D.isub(B);
                        }
                    }
                    return {
                        a: C,
                        b: D,
                        gcd: y.iushln(g)
                    };
                };
                BN.prototype._invmp = function _invmp(p) {
                    var a = this;
                    var b = p.clone();
                    if (a.negative !== 0) {
                        a = a.umod(p);
                    } else {
                        a = a.clone();
                    }
                    var x1 = new BN(1);
                    var x2 = new BN(0);
                    var delta = b.clone();
                    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
                        for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
                        if (i > 0) {
                            a.iushrn(i);
                            while (i-- > 0) {
                                if (x1.isOdd()) {
                                    x1.iadd(delta);
                                }
                                x1.iushrn(1);
                            }
                        }
                        for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
                        if (j > 0) {
                            b.iushrn(j);
                            while (j-- > 0) {
                                if (x2.isOdd()) {
                                    x2.iadd(delta);
                                }
                                x2.iushrn(1);
                            }
                        }
                        if (a.cmp(b) >= 0) {
                            a.isub(b);
                            x1.isub(x2);
                        } else {
                            b.isub(a);
                            x2.isub(x1);
                        }
                    }
                    var res;
                    if (a.cmpn(1) === 0) {
                        res = x1;
                    } else {
                        res = x2;
                    }
                    if (res.cmpn(0) < 0) {
                        res.iadd(p);
                    }
                    return res;
                };
                BN.prototype.gcd = function gcd(num) {
                    if (this.isZero())
                        return num.abs();
                    if (num.isZero())
                        return this.abs();
                    var a = this.clone();
                    var b = num.clone();
                    a.negative = 0;
                    b.negative = 0;
                    for (var shift = 0; a.isEven() && b.isEven(); shift++) {
                        a.iushrn(1);
                        b.iushrn(1);
                    }
                    do {
                        while (a.isEven()) {
                            a.iushrn(1);
                        }
                        while (b.isEven()) {
                            b.iushrn(1);
                        }
                        var r = a.cmp(b);
                        if (r < 0) {
                            var t = a;
                            a = b;
                            b = t;
                        } else if (r === 0 || b.cmpn(1) === 0) {
                            break;
                        }
                        a.isub(b);
                    } while (true);
                    return b.iushln(shift);
                };
                BN.prototype.invm = function invm(num) {
                    return this.egcd(num).a.umod(num);
                };
                BN.prototype.isEven = function isEven() {
                    return (this.words[0] & 1) === 0;
                };
                BN.prototype.isOdd = function isOdd() {
                    return (this.words[0] & 1) === 1;
                };
                BN.prototype.andln = function andln(num) {
                    return this.words[0] & num;
                };
                BN.prototype.bincn = function bincn(bit) {
                    var r = bit % 26;
                    var s = (bit - r) / 26;
                    var q = 1 << r;
                    if (this.length <= s) {
                        this._expand(s + 1);
                        this.words[s] |= q;
                        return this;
                    }
                    var carry = q;
                    for (var i = s; carry !== 0 && i < this.length; i++) {
                        var w = this.words[i] | 0;
                        w += carry;
                        carry = w >>> 26;
                        w &= 67108863;
                        this.words[i] = w;
                    }
                    if (carry !== 0) {
                        this.words[i] = carry;
                        this.length++;
                    }
                    return this;
                };
                BN.prototype.isZero = function isZero() {
                    return this.length === 1 && this.words[0] === 0;
                };
                BN.prototype.cmpn = function cmpn(num) {
                    var negative = num < 0;
                    if (this.negative !== 0 && !negative)
                        return -1;
                    if (this.negative === 0 && negative)
                        return 1;
                    this.strip();
                    var res;
                    if (this.length > 1) {
                        res = 1;
                    } else {
                        if (negative) {
                            num = -num;
                        }
                        var w = this.words[0] | 0;
                        res = w === num ? 0 : w < num ? -1 : 1;
                    }
                    if (this.negative !== 0)
                        return -res | 0;
                    return res;
                };
                BN.prototype.cmp = function cmp(num) {
                    if (this.negative !== 0 && num.negative === 0)
                        return -1;
                    if (this.negative === 0 && num.negative !== 0)
                        return 1;
                    var res = this.ucmp(num);
                    if (this.negative !== 0)
                        return -res | 0;
                    return res;
                };
                BN.prototype.ucmp = function ucmp(num) {
                    if (this.length > num.length)
                        return 1;
                    if (this.length < num.length)
                        return -1;
                    var res = 0;
                    for (var i = this.length - 1; i >= 0; i--) {
                        var a = this.words[i] | 0;
                        var b = num.words[i] | 0;
                        if (a === b)
                            continue;
                        if (a < b) {
                            res = -1;
                        } else if (a > b) {
                            res = 1;
                        }
                        break;
                    }
                    return res;
                };
                BN.prototype.gtn = function gtn(num) {
                    return this.cmpn(num) === 1;
                };
                BN.prototype.gt = function gt(num) {
                    return this.cmp(num) === 1;
                };
                BN.prototype.gten = function gten(num) {
                    return this.cmpn(num) >= 0;
                };
                BN.prototype.gte = function gte(num) {
                    return this.cmp(num) >= 0;
                };
                BN.prototype.ltn = function ltn(num) {
                    return this.cmpn(num) === -1;
                };
                BN.prototype.lt = function lt(num) {
                    return this.cmp(num) === -1;
                };
                BN.prototype.lten = function lten(num) {
                    return this.cmpn(num) <= 0;
                };
                BN.prototype.lte = function lte(num) {
                    return this.cmp(num) <= 0;
                };
                BN.prototype.eqn = function eqn(num) {
                    return this.cmpn(num) === 0;
                };
                BN.prototype.eq = function eq(num) {
                    return this.cmp(num) === 0;
                };
                BN.red = function red(num) {
                    return new Red(num);
                };
                BN.prototype.toRed = function toRed(ctx) {
                    return ctx.convertTo(this)._forceRed(ctx);
                };
                BN.prototype.fromRed = function fromRed() {
                    return this.red.convertFrom(this);
                };
                BN.prototype._forceRed = function _forceRed(ctx) {
                    this.red = ctx;
                    return this;
                };
                BN.prototype.forceRed = function forceRed(ctx) {
                    return this._forceRed(ctx);
                };
                BN.prototype.redAdd = function redAdd(num) {
                    return this.red.add(this, num);
                };
                BN.prototype.redIAdd = function redIAdd(num) {
                    return this.red.iadd(this, num);
                };
                BN.prototype.redSub = function redSub(num) {
                    return this.red.sub(this, num);
                };
                BN.prototype.redISub = function redISub(num) {
                    return this.red.isub(this, num);
                };
                BN.prototype.redShl = function redShl(num) {
                    return this.red.shl(this, num);
                };
                BN.prototype.redMul = function redMul(num) {
                    this.red._verify2(this, num);
                    return this.red.mul(this, num);
                };
                BN.prototype.redIMul = function redIMul(num) {
                    this.red._verify2(this, num);
                    return this.red.imul(this, num);
                };
                BN.prototype.redSqr = function redSqr() {
                    this.red._verify1(this);
                    return this.red.sqr(this);
                };
                BN.prototype.redISqr = function redISqr() {
                    this.red._verify1(this);
                    return this.red.isqr(this);
                };
                BN.prototype.redSqrt = function redSqrt() {
                    this.red._verify1(this);
                    return this.red.sqrt(this);
                };
                BN.prototype.redInvm = function redInvm() {
                    this.red._verify1(this);
                    return this.red.invm(this);
                };
                BN.prototype.redNeg = function redNeg() {
                    this.red._verify1(this);
                    return this.red.neg(this);
                };
                BN.prototype.redPow = function redPow(num) {
                    this.red._verify1(this);
                    return this.red.pow(this, num);
                };
                var primes = {
                    k256: null,
                    p224: null,
                    p192: null,
                    p25519: null
                };
                function MPrime(name, p) {
                    this.name = name;
                    this.p = new BN(p, 16);
                    this.n = this.p.bitLength();
                    this.k = new BN(1).iushln(this.n).isub(this.p);
                    this.tmp = this._tmp();
                }
                MPrime.prototype._tmp = function _tmp() {
                    var tmp = new BN(null);
                    tmp.words = new Array(Math.ceil(this.n / 13));
                    return tmp;
                };
                MPrime.prototype.ireduce = function ireduce(num) {
                    var r = num;
                    var rlen;
                    do {
                        this.split(r, this.tmp);
                        r = this.imulK(r);
                        r = r.iadd(this.tmp);
                        rlen = r.bitLength();
                    } while (rlen > this.n);
                    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
                    if (cmp === 0) {
                        r.words[0] = 0;
                        r.length = 1;
                    } else if (cmp > 0) {
                        r.isub(this.p);
                    } else {
                        r.strip();
                    }
                    return r;
                };
                MPrime.prototype.split = function split(input, out) {
                    input.iushrn(this.n, 0, out);
                };
                MPrime.prototype.imulK = function imulK(num) {
                    return num.imul(this.k);
                };
                function K256() {
                    MPrime.call(this, 'k256', 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
                }
                inherits(K256, MPrime);
                K256.prototype.split = function split(input, output) {
                    var mask = 4194303;
                    var outLen = Math.min(input.length, 9);
                    for (var i = 0; i < outLen; i++) {
                        output.words[i] = input.words[i];
                    }
                    output.length = outLen;
                    if (input.length <= 9) {
                        input.words[0] = 0;
                        input.length = 1;
                        return;
                    }
                    var prev = input.words[9];
                    output.words[output.length++] = prev & mask;
                    for (i = 10; i < input.length; i++) {
                        var next = input.words[i] | 0;
                        input.words[i - 10] = (next & mask) << 4 | prev >>> 22;
                        prev = next;
                    }
                    prev >>>= 22;
                    input.words[i - 10] = prev;
                    if (prev === 0 && input.length > 10) {
                        input.length -= 10;
                    } else {
                        input.length -= 9;
                    }
                };
                K256.prototype.imulK = function imulK(num) {
                    num.words[num.length] = 0;
                    num.words[num.length + 1] = 0;
                    num.length += 2;
                    var lo = 0;
                    for (var i = 0; i < num.length; i++) {
                        var w = num.words[i] | 0;
                        lo += w * 977;
                        num.words[i] = lo & 67108863;
                        lo = w * 64 + (lo / 67108864 | 0);
                    }
                    if (num.words[num.length - 1] === 0) {
                        num.length--;
                        if (num.words[num.length - 1] === 0) {
                            num.length--;
                        }
                    }
                    return num;
                };
                function P224() {
                    MPrime.call(this, 'p224', 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
                }
                inherits(P224, MPrime);
                function P192() {
                    MPrime.call(this, 'p192', 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
                }
                inherits(P192, MPrime);
                function P25519() {
                    MPrime.call(this, '25519', '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
                }
                inherits(P25519, MPrime);
                P25519.prototype.imulK = function imulK(num) {
                    var carry = 0;
                    for (var i = 0; i < num.length; i++) {
                        var hi = (num.words[i] | 0) * 19 + carry;
                        var lo = hi & 67108863;
                        hi >>>= 26;
                        num.words[i] = lo;
                        carry = hi;
                    }
                    if (carry !== 0) {
                        num.words[num.length++] = carry;
                    }
                    return num;
                };
                BN._prime = function prime(name) {
                    if (primes[name])
                        return primes[name];
                    var prime;
                    if (name === 'k256') {
                        prime = new K256();
                    } else if (name === 'p224') {
                        prime = new P224();
                    } else if (name === 'p192') {
                        prime = new P192();
                    } else if (name === 'p25519') {
                        prime = new P25519();
                    } else {
                        throw new Error('Unknown prime ' + name);
                    }
                    primes[name] = prime;
                    return prime;
                };
                function Red(m) {
                    if (typeof m === 'string') {
                        var prime = BN._prime(m);
                        this.m = prime.p;
                        this.prime = prime;
                    } else {
                        this.m = m;
                        this.prime = null;
                    }
                }
                Red.prototype._verify1 = function _verify1(a) {
                };
                Red.prototype._verify2 = function _verify2(a, b) {
                };
                Red.prototype.imod = function imod(a) {
                    if (this.prime)
                        return this.prime.ireduce(a)._forceRed(this);
                    return a.umod(this.m)._forceRed(this);
                };
                Red.prototype.neg = function neg(a) {
                    if (a.isZero()) {
                        return a.clone();
                    }
                    return this.m.sub(a)._forceRed(this);
                };
                Red.prototype.add = function add(a, b) {
                    this._verify2(a, b);
                    var res = a.add(b);
                    if (res.cmp(this.m) >= 0) {
                        res.isub(this.m);
                    }
                    return res._forceRed(this);
                };
                Red.prototype.iadd = function iadd(a, b) {
                    this._verify2(a, b);
                    var res = a.iadd(b);
                    if (res.cmp(this.m) >= 0) {
                        res.isub(this.m);
                    }
                    return res;
                };
                Red.prototype.sub = function sub(a, b) {
                    this._verify2(a, b);
                    var res = a.sub(b);
                    if (res.cmpn(0) < 0) {
                        res.iadd(this.m);
                    }
                    return res._forceRed(this);
                };
                Red.prototype.isub = function isub(a, b) {
                    this._verify2(a, b);
                    var res = a.isub(b);
                    if (res.cmpn(0) < 0) {
                        res.iadd(this.m);
                    }
                    return res;
                };
                Red.prototype.shl = function shl(a, num) {
                    this._verify1(a);
                    return this.imod(a.ushln(num));
                };
                Red.prototype.imul = function imul(a, b) {
                    this._verify2(a, b);
                    return this.imod(a.imul(b));
                };
                Red.prototype.mul = function mul(a, b) {
                    this._verify2(a, b);
                    return this.imod(a.mul(b));
                };
                Red.prototype.isqr = function isqr(a) {
                    return this.imul(a, a.clone());
                };
                Red.prototype.sqr = function sqr(a) {
                    return this.mul(a, a);
                };
                Red.prototype.sqrt = function sqrt(a) {
                    if (a.isZero())
                        return a.clone();
                    var mod3 = this.m.andln(3);
                    if (mod3 === 3) {
                        var pow = this.m.add(new BN(1)).iushrn(2);
                        return this.pow(a, pow);
                    }
                    var q = this.m.subn(1);
                    var s = 0;
                    while (!q.isZero() && q.andln(1) === 0) {
                        s++;
                        q.iushrn(1);
                    }
                    var one = new BN(1).toRed(this);
                    var nOne = one.redNeg();
                    var lpow = this.m.subn(1).iushrn(1);
                    var z = this.m.bitLength();
                    z = new BN(2 * z * z).toRed(this);
                    while (this.pow(z, lpow).cmp(nOne) !== 0) {
                        z.redIAdd(nOne);
                    }
                    var c = this.pow(z, q);
                    var r = this.pow(a, q.addn(1).iushrn(1));
                    var t = this.pow(a, q);
                    var m = s;
                    while (t.cmp(one) !== 0) {
                        var tmp = t;
                        for (var i = 0; tmp.cmp(one) !== 0; i++) {
                            tmp = tmp.redSqr();
                        }
                        var b = this.pow(c, new BN(1).iushln(m - i - 1));
                        r = r.redMul(b);
                        c = b.redSqr();
                        t = t.redMul(c);
                        m = i;
                    }
                    return r;
                };
                Red.prototype.invm = function invm(a) {
                    var inv = a._invmp(this.m);
                    if (inv.negative !== 0) {
                        inv.negative = 0;
                        return this.imod(inv).redNeg();
                    } else {
                        return this.imod(inv);
                    }
                };
                Red.prototype.pow = function pow(a, num) {
                    if (num.isZero())
                        return new BN(1).toRed(this);
                    if (num.cmpn(1) === 0)
                        return a.clone();
                    var windowSize = 4;
                    var wnd = new Array(1 << windowSize);
                    wnd[0] = new BN(1).toRed(this);
                    wnd[1] = a;
                    for (var i = 2; i < wnd.length; i++) {
                        wnd[i] = this.mul(wnd[i - 1], a);
                    }
                    var res = wnd[0];
                    var current = 0;
                    var currentLen = 0;
                    var start = num.bitLength() % 26;
                    if (start === 0) {
                        start = 26;
                    }
                    for (i = num.length - 1; i >= 0; i--) {
                        var word = num.words[i];
                        for (var j = start - 1; j >= 0; j--) {
                            var bit = word >> j & 1;
                            if (res !== wnd[0]) {
                                res = this.sqr(res);
                            }
                            if (bit === 0 && current === 0) {
                                currentLen = 0;
                                continue;
                            }
                            current <<= 1;
                            current |= bit;
                            currentLen++;
                            if (currentLen !== windowSize && (i !== 0 || j !== 0))
                                continue;
                            res = this.mul(res, wnd[current]);
                            currentLen = 0;
                            current = 0;
                        }
                        start = 26;
                    }
                    return res;
                };
                Red.prototype.convertTo = function convertTo(num) {
                    var r = num.umod(this.m);
                    return r === num ? r.clone() : r;
                };
                Red.prototype.convertFrom = function convertFrom(num) {
                    var res = num.clone();
                    res.red = null;
                    return res;
                };
                BN.mont = function mont(num) {
                    return new Mont(num);
                };
                function Mont(m) {
                    Red.call(this, m);
                    this.shift = this.m.bitLength();
                    if (this.shift % 26 !== 0) {
                        this.shift += 26 - this.shift % 26;
                    }
                    this.r = new BN(1).iushln(this.shift);
                    this.r2 = this.imod(this.r.sqr());
                    this.rinv = this.r._invmp(this.m);
                    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
                    this.minv = this.minv.umod(this.r);
                    this.minv = this.r.sub(this.minv);
                }
                inherits(Mont, Red);
                Mont.prototype.convertTo = function convertTo(num) {
                    return this.imod(num.ushln(this.shift));
                };
                Mont.prototype.convertFrom = function convertFrom(num) {
                    var r = this.imod(num.mul(this.rinv));
                    r.red = null;
                    return r;
                };
                Mont.prototype.imul = function imul(a, b) {
                    if (a.isZero() || b.isZero()) {
                        a.words[0] = 0;
                        a.length = 1;
                        return a;
                    }
                    var t = a.imul(b);
                    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
                    var u = t.isub(c).iushrn(this.shift);
                    var res = u;
                    if (u.cmp(this.m) >= 0) {
                        res = u.isub(this.m);
                    } else if (u.cmpn(0) < 0) {
                        res = u.iadd(this.m);
                    }
                    return res._forceRed(this);
                };
                Mont.prototype.mul = function mul(a, b) {
                    if (a.isZero() || b.isZero())
                        return new BN(0)._forceRed(this);
                    var t = a.mul(b);
                    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
                    var u = t.isub(c).iushrn(this.shift);
                    var res = u;
                    if (u.cmp(this.m) >= 0) {
                        res = u.isub(this.m);
                    } else if (u.cmpn(0) < 0) {
                        res = u.iadd(this.m);
                    }
                    return res._forceRed(this);
                };
                Mont.prototype.invm = function invm(a) {
                    var res = this.imod(a._invmp(this.m).mul(this.r2));
                    return res._forceRed(this);
                };
            }(typeof module === 'undefined' || module, this));
        },
        { 'buffer': 21 }
    ],
    20: [
        function (_dereq_, module, exports) {
            var r;
            module.exports = function rand(len) {
                if (!r)
                    r = new Rand(null);
                return r.generate(len);
            };
            function Rand(rand) {
                this.rand = rand;
            }
            module.exports.Rand = Rand;
            Rand.prototype.generate = function generate(len) {
                return this._rand(len);
            };
            Rand.prototype._rand = function _rand(n) {
                if (this.rand.getBytes)
                    return this.rand.getBytes(n);
                var res = new Uint8Array(n);
                for (var i = 0; i < res.length; i++)
                    res[i] = this.rand.getByte();
                return res;
            };
            if (typeof self === 'object') {
                if (self.crypto && self.crypto.getRandomValues) {
                    Rand.prototype._rand = function _rand(n) {
                        var arr = new Uint8Array(n);
                        self.crypto.getRandomValues(arr);
                        return arr;
                    };
                } else if (self.msCrypto && self.msCrypto.getRandomValues) {
                    Rand.prototype._rand = function _rand(n) {
                        var arr = new Uint8Array(n);
                        self.msCrypto.getRandomValues(arr);
                        return arr;
                    };
                } else if (typeof window === 'object') {
                    Rand.prototype._rand = function () {
                        throw new Error('Not implemented yet');
                    };
                }
            } else {
                try {
                    var crypto = _dereq_('crypto');
                    if (typeof crypto.randomBytes !== 'function')
                        throw new Error('Not supported');
                    Rand.prototype._rand = function _rand(n) {
                        return crypto.randomBytes(n);
                    };
                } catch (e) {
                }
            }
        },
        { 'crypto': 21 }
    ],
    21: [
        function (_dereq_, module, exports) {
            arguments[4][1][0].apply(exports, arguments);
        },
        { 'dup': 1 }
    ],
    22: [
        function (_dereq_, module, exports) {
            var Buffer = _dereq_('safe-buffer').Buffer;
            function asUInt32Array(buf) {
                if (!Buffer.isBuffer(buf))
                    buf = Buffer.from(buf);
                var len = buf.length / 4 | 0;
                var out = new Array(len);
                for (var i = 0; i < len; i++) {
                    out[i] = buf.readUInt32BE(i * 4);
                }
                return out;
            }
            function scrubVec(v) {
                for (var i = 0; i < v.length; v++) {
                    v[i] = 0;
                }
            }
            function cryptBlock(M, keySchedule, SUB_MIX, SBOX, nRounds) {
                var SUB_MIX0 = SUB_MIX[0];
                var SUB_MIX1 = SUB_MIX[1];
                var SUB_MIX2 = SUB_MIX[2];
                var SUB_MIX3 = SUB_MIX[3];
                var s0 = M[0] ^ keySchedule[0];
                var s1 = M[1] ^ keySchedule[1];
                var s2 = M[2] ^ keySchedule[2];
                var s3 = M[3] ^ keySchedule[3];
                var t0, t1, t2, t3;
                var ksRow = 4;
                for (var round = 1; round < nRounds; round++) {
                    t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[s1 >>> 16 & 255] ^ SUB_MIX2[s2 >>> 8 & 255] ^ SUB_MIX3[s3 & 255] ^ keySchedule[ksRow++];
                    t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[s2 >>> 16 & 255] ^ SUB_MIX2[s3 >>> 8 & 255] ^ SUB_MIX3[s0 & 255] ^ keySchedule[ksRow++];
                    t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[s3 >>> 16 & 255] ^ SUB_MIX2[s0 >>> 8 & 255] ^ SUB_MIX3[s1 & 255] ^ keySchedule[ksRow++];
                    t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[s0 >>> 16 & 255] ^ SUB_MIX2[s1 >>> 8 & 255] ^ SUB_MIX3[s2 & 255] ^ keySchedule[ksRow++];
                    s0 = t0;
                    s1 = t1;
                    s2 = t2;
                    s3 = t3;
                }
                t0 = (SBOX[s0 >>> 24] << 24 | SBOX[s1 >>> 16 & 255] << 16 | SBOX[s2 >>> 8 & 255] << 8 | SBOX[s3 & 255]) ^ keySchedule[ksRow++];
                t1 = (SBOX[s1 >>> 24] << 24 | SBOX[s2 >>> 16 & 255] << 16 | SBOX[s3 >>> 8 & 255] << 8 | SBOX[s0 & 255]) ^ keySchedule[ksRow++];
                t2 = (SBOX[s2 >>> 24] << 24 | SBOX[s3 >>> 16 & 255] << 16 | SBOX[s0 >>> 8 & 255] << 8 | SBOX[s1 & 255]) ^ keySchedule[ksRow++];
                t3 = (SBOX[s3 >>> 24] << 24 | SBOX[s0 >>> 16 & 255] << 16 | SBOX[s1 >>> 8 & 255] << 8 | SBOX[s2 & 255]) ^ keySchedule[ksRow++];
                t0 = t0 >>> 0;
                t1 = t1 >>> 0;
                t2 = t2 >>> 0;
                t3 = t3 >>> 0;
                return [
                    t0,
                    t1,
                    t2,
                    t3
                ];
            }
            var RCON = [
                0,
                1,
                2,
                4,
                8,
                16,
                32,
                64,
                128,
                27,
                54
            ];
            var G = function () {
                var d = new Array(256);
                for (var j = 0; j < 256; j++) {
                    if (j < 128) {
                        d[j] = j << 1;
                    } else {
                        d[j] = j << 1 ^ 283;
                    }
                }
                var SBOX = [];
                var INV_SBOX = [];
                var SUB_MIX = [
                    [],
                    [],
                    [],
                    []
                ];
                var INV_SUB_MIX = [
                    [],
                    [],
                    [],
                    []
                ];
                var x = 0;
                var xi = 0;
                for (var i = 0; i < 256; ++i) {
                    var sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4;
                    sx = sx >>> 8 ^ sx & 255 ^ 99;
                    SBOX[x] = sx;
                    INV_SBOX[sx] = x;
                    var x2 = d[x];
                    var x4 = d[x2];
                    var x8 = d[x4];
                    var t = d[sx] * 257 ^ sx * 16843008;
                    SUB_MIX[0][x] = t << 24 | t >>> 8;
                    SUB_MIX[1][x] = t << 16 | t >>> 16;
                    SUB_MIX[2][x] = t << 8 | t >>> 24;
                    SUB_MIX[3][x] = t;
                    t = x8 * 16843009 ^ x4 * 65537 ^ x2 * 257 ^ x * 16843008;
                    INV_SUB_MIX[0][sx] = t << 24 | t >>> 8;
                    INV_SUB_MIX[1][sx] = t << 16 | t >>> 16;
                    INV_SUB_MIX[2][sx] = t << 8 | t >>> 24;
                    INV_SUB_MIX[3][sx] = t;
                    if (x === 0) {
                        x = xi = 1;
                    } else {
                        x = x2 ^ d[d[d[x8 ^ x2]]];
                        xi ^= d[d[xi]];
                    }
                }
                return {
                    SBOX: SBOX,
                    INV_SBOX: INV_SBOX,
                    SUB_MIX: SUB_MIX,
                    INV_SUB_MIX: INV_SUB_MIX
                };
            }();
            function AES(key) {
                this._key = asUInt32Array(key);
                this._reset();
            }
            AES.blockSize = 4 * 4;
            AES.keySize = 256 / 8;
            AES.prototype.blockSize = AES.blockSize;
            AES.prototype.keySize = AES.keySize;
            AES.prototype._reset = function () {
                var keyWords = this._key;
                var keySize = keyWords.length;
                var nRounds = keySize + 6;
                var ksRows = (nRounds + 1) * 4;
                var keySchedule = [];
                for (var k = 0; k < keySize; k++) {
                    keySchedule[k] = keyWords[k];
                }
                for (k = keySize; k < ksRows; k++) {
                    var t = keySchedule[k - 1];
                    if (k % keySize === 0) {
                        t = t << 8 | t >>> 24;
                        t = G.SBOX[t >>> 24] << 24 | G.SBOX[t >>> 16 & 255] << 16 | G.SBOX[t >>> 8 & 255] << 8 | G.SBOX[t & 255];
                        t ^= RCON[k / keySize | 0] << 24;
                    } else if (keySize > 6 && k % keySize === 4) {
                        t = G.SBOX[t >>> 24] << 24 | G.SBOX[t >>> 16 & 255] << 16 | G.SBOX[t >>> 8 & 255] << 8 | G.SBOX[t & 255];
                    }
                    keySchedule[k] = keySchedule[k - keySize] ^ t;
                }
                var invKeySchedule = [];
                for (var ik = 0; ik < ksRows; ik++) {
                    var ksR = ksRows - ik;
                    var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)];
                    if (ik < 4 || ksR <= 4) {
                        invKeySchedule[ik] = tt;
                    } else {
                        invKeySchedule[ik] = G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^ G.INV_SUB_MIX[1][G.SBOX[tt >>> 16 & 255]] ^ G.INV_SUB_MIX[2][G.SBOX[tt >>> 8 & 255]] ^ G.INV_SUB_MIX[3][G.SBOX[tt & 255]];
                    }
                }
                this._nRounds = nRounds;
                this._keySchedule = keySchedule;
                this._invKeySchedule = invKeySchedule;
            };
            AES.prototype.encryptBlockRaw = function (M) {
                M = asUInt32Array(M);
                return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds);
            };
            AES.prototype.encryptBlock = function (M) {
                var out = this.encryptBlockRaw(M);
                var buf = Buffer.allocUnsafe(16);
                buf.writeUInt32BE(out[0], 0);
                buf.writeUInt32BE(out[1], 4);
                buf.writeUInt32BE(out[2], 8);
                buf.writeUInt32BE(out[3], 12);
                return buf;
            };
            AES.prototype.decryptBlock = function (M) {
                M = asUInt32Array(M);
                var m1 = M[1];
                M[1] = M[3];
                M[3] = m1;
                var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds);
                var buf = Buffer.allocUnsafe(16);
                buf.writeUInt32BE(out[0], 0);
                buf.writeUInt32BE(out[3], 4);
                buf.writeUInt32BE(out[2], 8);
                buf.writeUInt32BE(out[1], 12);
                return buf;
            };
            AES.prototype.scrub = function () {
                scrubVec(this._keySchedule);
                scrubVec(this._invKeySchedule);
                scrubVec(this._key);
            };
            module.exports.AES = AES;
        },
        { 'safe-buffer': 145 }
    ],
    23: [
        function (_dereq_, module, exports) {
            var aes = _dereq_('./aes');
            var Buffer = _dereq_('safe-buffer').Buffer;
            var Transform = _dereq_('cipher-base');
            var inherits = _dereq_('inherits');
            var GHASH = _dereq_('./ghash');
            var xor = _dereq_('buffer-xor');
            var incr32 = _dereq_('./incr32');
            function xorTest(a, b) {
                var out = 0;
                if (a.length !== b.length)
                    out++;
                var len = Math.min(a.length, b.length);
                for (var i = 0; i < len; ++i) {
                    out += a[i] ^ b[i];
                }
                return out;
            }
            function calcIv(self, iv, ck) {
                if (iv.length === 12) {
                    self._finID = Buffer.concat([
                        iv,
                        Buffer.from([
                            0,
                            0,
                            0,
                            1
                        ])
                    ]);
                    return Buffer.concat([
                        iv,
                        Buffer.from([
                            0,
                            0,
                            0,
                            2
                        ])
                    ]);
                }
                var ghash = new GHASH(ck);
                var len = iv.length;
                var toPad = len % 16;
                ghash.update(iv);
                if (toPad) {
                    toPad = 16 - toPad;
                    ghash.update(Buffer.alloc(toPad, 0));
                }
                ghash.update(Buffer.alloc(8, 0));
                var ivBits = len * 8;
                var tail = Buffer.alloc(8);
                tail.writeUIntBE(ivBits, 0, 8);
                ghash.update(tail);
                self._finID = ghash.state;
                var out = Buffer.from(self._finID);
                incr32(out);
                return out;
            }
            function StreamCipher(mode, key, iv, decrypt) {
                Transform.call(this);
                var h = Buffer.alloc(4, 0);
                this._cipher = new aes.AES(key);
                var ck = this._cipher.encryptBlock(h);
                this._ghash = new GHASH(ck);
                iv = calcIv(this, iv, ck);
                this._prev = Buffer.from(iv);
                this._cache = Buffer.allocUnsafe(0);
                this._secCache = Buffer.allocUnsafe(0);
                this._decrypt = decrypt;
                this._alen = 0;
                this._len = 0;
                this._mode = mode;
                this._authTag = null;
                this._called = false;
            }
            inherits(StreamCipher, Transform);
            StreamCipher.prototype._update = function (chunk) {
                if (!this._called && this._alen) {
                    var rump = 16 - this._alen % 16;
                    if (rump < 16) {
                        rump = Buffer.alloc(rump, 0);
                        this._ghash.update(rump);
                    }
                }
                this._called = true;
                var out = this._mode.encrypt(this, chunk);
                if (this._decrypt) {
                    this._ghash.update(chunk);
                } else {
                    this._ghash.update(out);
                }
                this._len += chunk.length;
                return out;
            };
            StreamCipher.prototype._final = function () {
                if (this._decrypt && !this._authTag)
                    throw new Error('Unsupported state or unable to authenticate data');
                var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID));
                if (this._decrypt && xorTest(tag, this._authTag))
                    throw new Error('Unsupported state or unable to authenticate data');
                this._authTag = tag;
                this._cipher.scrub();
            };
            StreamCipher.prototype.getAuthTag = function getAuthTag() {
                if (this._decrypt || !Buffer.isBuffer(this._authTag))
                    throw new Error('Attempting to get auth tag in unsupported state');
                return this._authTag;
            };
            StreamCipher.prototype.setAuthTag = function setAuthTag(tag) {
                if (!this._decrypt)
                    throw new Error('Attempting to set auth tag in unsupported state');
                this._authTag = tag;
            };
            StreamCipher.prototype.setAAD = function setAAD(buf) {
                if (this._called)
                    throw new Error('Attempting to set AAD in unsupported state');
                this._ghash.update(buf);
                this._alen += buf.length;
            };
            module.exports = StreamCipher;
        },
        {
            './aes': 22,
            './ghash': 27,
            './incr32': 28,
            'buffer-xor': 49,
            'cipher-base': 51,
            'inherits': 103,
            'safe-buffer': 145
        }
    ],
    24: [
        function (_dereq_, module, exports) {
            var ciphers = _dereq_('./encrypter');
            var deciphers = _dereq_('./decrypter');
            var modes = _dereq_('./modes/list.json');
            function getCiphers() {
                return Object.keys(modes);
            }
            exports.createCipher = exports.Cipher = ciphers.createCipher;
            exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv;
            exports.createDecipher = exports.Decipher = deciphers.createDecipher;
            exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv;
            exports.listCiphers = exports.getCiphers = getCiphers;
        },
        {
            './decrypter': 25,
            './encrypter': 26,
            './modes/list.json': 36
        }
    ],
    25: [
        function (_dereq_, module, exports) {
            var AuthCipher = _dereq_('./authCipher');
            var Buffer = _dereq_('safe-buffer').Buffer;
            var MODES = _dereq_('./modes');
            var StreamCipher = _dereq_('./streamCipher');
            var Transform = _dereq_('cipher-base');
            var aes = _dereq_('./aes');
            var ebtk = _dereq_('evp_bytestokey');
            var inherits = _dereq_('inherits');
            function Decipher(mode, key, iv) {
                Transform.call(this);
                this._cache = new Splitter();
                this._last = void 0;
                this._cipher = new aes.AES(key);
                this._prev = Buffer.from(iv);
                this._mode = mode;
                this._autopadding = true;
            }
            inherits(Decipher, Transform);
            Decipher.prototype._update = function (data) {
                this._cache.add(data);
                var chunk;
                var thing;
                var out = [];
                while (chunk = this._cache.get(this._autopadding)) {
                    thing = this._mode.decrypt(this, chunk);
                    out.push(thing);
                }
                return Buffer.concat(out);
            };
            Decipher.prototype._final = function () {
                var chunk = this._cache.flush();
                if (this._autopadding) {
                    return unpad(this._mode.decrypt(this, chunk));
                } else if (chunk) {
                    throw new Error('data not multiple of block length');
                }
            };
            Decipher.prototype.setAutoPadding = function (setTo) {
                this._autopadding = !!setTo;
                return this;
            };
            function Splitter() {
                this.cache = Buffer.allocUnsafe(0);
            }
            Splitter.prototype.add = function (data) {
                this.cache = Buffer.concat([
                    this.cache,
                    data
                ]);
            };
            Splitter.prototype.get = function (autoPadding) {
                var out;
                if (autoPadding) {
                    if (this.cache.length > 16) {
                        out = this.cache.slice(0, 16);
                        this.cache = this.cache.slice(16);
                        return out;
                    }
                } else {
                    if (this.cache.length >= 16) {
                        out = this.cache.slice(0, 16);
                        this.cache = this.cache.slice(16);
                        return out;
                    }
                }
                return null;
            };
            Splitter.prototype.flush = function () {
                if (this.cache.length)
                    return this.cache;
            };
            function unpad(last) {
                var padded = last[15];
                if (padded < 1 || padded > 16) {
                    throw new Error('unable to decrypt data');
                }
                var i = -1;
                while (++i < padded) {
                    if (last[i + (16 - padded)] !== padded) {
                        throw new Error('unable to decrypt data');
                    }
                }
                if (padded === 16)
                    return;
                return last.slice(0, 16 - padded);
            }
            function createDecipheriv(suite, password, iv) {
                var config = MODES[suite.toLowerCase()];
                if (!config)
                    throw new TypeError('invalid suite type');
                if (typeof iv === 'string')
                    iv = Buffer.from(iv);
                if (config.mode !== 'GCM' && iv.length !== config.iv)
                    throw new TypeError('invalid iv length ' + iv.length);
                if (typeof password === 'string')
                    password = Buffer.from(password);
                if (password.length !== config.key / 8)
                    throw new TypeError('invalid key length ' + password.length);
                if (config.type === 'stream') {
                    return new StreamCipher(config.module, password, iv, true);
                } else if (config.type === 'auth') {
                    return new AuthCipher(config.module, password, iv, true);
                }
                return new Decipher(config.module, password, iv);
            }
            function createDecipher(suite, password) {
                var config = MODES[suite.toLowerCase()];
                if (!config)
                    throw new TypeError('invalid suite type');
                var keys = ebtk(password, false, config.key, config.iv);
                return createDecipheriv(suite, keys.key, keys.iv);
            }
            exports.createDecipher = createDecipher;
            exports.createDecipheriv = createDecipheriv;
        },
        {
            './aes': 22,
            './authCipher': 23,
            './modes': 35,
            './streamCipher': 38,
            'cipher-base': 51,
            'evp_bytestokey': 86,
            'inherits': 103,
            'safe-buffer': 145
        }
    ],
    26: [
        function (_dereq_, module, exports) {
            var MODES = _dereq_('./modes');
            var AuthCipher = _dereq_('./authCipher');
            var Buffer = _dereq_('safe-buffer').Buffer;
            var StreamCipher = _dereq_('./streamCipher');
            var Transform = _dereq_('cipher-base');
            var aes = _dereq_('./aes');
            var ebtk = _dereq_('evp_bytestokey');
            var inherits = _dereq_('inherits');
            function Cipher(mode, key, iv) {
                Transform.call(this);
                this._cache = new Splitter();
                this._cipher = new aes.AES(key);
                this._prev = Buffer.from(iv);
                this._mode = mode;
                this._autopadding = true;
            }
            inherits(Cipher, Transform);
            Cipher.prototype._update = function (data) {
                this._cache.add(data);
                var chunk;
                var thing;
                var out = [];
                while (chunk = this._cache.get()) {
                    thing = this._mode.encrypt(this, chunk);
                    out.push(thing);
                }
                return Buffer.concat(out);
            };
            var PADDING = Buffer.alloc(16, 16);
            Cipher.prototype._final = function () {
                var chunk = this._cache.flush();
                if (this._autopadding) {
                    chunk = this._mode.encrypt(this, chunk);
                    this._cipher.scrub();
                    return chunk;
                }
                if (!chunk.equals(PADDING)) {
                    this._cipher.scrub();
                    throw new Error('data not multiple of block length');
                }
            };
            Cipher.prototype.setAutoPadding = function (setTo) {
                this._autopadding = !!setTo;
                return this;
            };
            function Splitter() {
                this.cache = Buffer.allocUnsafe(0);
            }
            Splitter.prototype.add = function (data) {
                this.cache = Buffer.concat([
                    this.cache,
                    data
                ]);
            };
            Splitter.prototype.get = function () {
                if (this.cache.length > 15) {
                    var out = this.cache.slice(0, 16);
                    this.cache = this.cache.slice(16);
                    return out;
                }
                return null;
            };
            Splitter.prototype.flush = function () {
                var len = 16 - this.cache.length;
                var padBuff = Buffer.allocUnsafe(len);
                var i = -1;
                while (++i < len) {
                    padBuff.writeUInt8(len, i);
                }
                return Buffer.concat([
                    this.cache,
                    padBuff
                ]);
            };
            function createCipheriv(suite, password, iv) {
                var config = MODES[suite.toLowerCase()];
                if (!config)
                    throw new TypeError('invalid suite type');
                if (typeof password === 'string')
                    password = Buffer.from(password);
                if (password.length !== config.key / 8)
                    throw new TypeError('invalid key length ' + password.length);
                if (typeof iv === 'string')
                    iv = Buffer.from(iv);
                if (config.mode !== 'GCM' && iv.length !== config.iv)
                    throw new TypeError('invalid iv length ' + iv.length);
                if (config.type === 'stream') {
                    return new StreamCipher(config.module, password, iv);
                } else if (config.type === 'auth') {
                    return new AuthCipher(config.module, password, iv);
                }
                return new Cipher(config.module, password, iv);
            }
            function createCipher(suite, password) {
                var config = MODES[suite.toLowerCase()];
                if (!config)
                    throw new TypeError('invalid suite type');
                var keys = ebtk(password, false, config.key, config.iv);
                return createCipheriv(suite, keys.key, keys.iv);
            }
            exports.createCipheriv = createCipheriv;
            exports.createCipher = createCipher;
        },
        {
            './aes': 22,
            './authCipher': 23,
            './modes': 35,
            './streamCipher': 38,
            'cipher-base': 51,
            'evp_bytestokey': 86,
            'inherits': 103,
            'safe-buffer': 145
        }
    ],
    27: [
        function (_dereq_, module, exports) {
            var Buffer = _dereq_('safe-buffer').Buffer;
            var ZEROES = Buffer.alloc(16, 0);
            function toArray(buf) {
                return [
                    buf.readUInt32BE(0),
                    buf.readUInt32BE(4),
                    buf.readUInt32BE(8),
                    buf.readUInt32BE(12)
                ];
            }
            function fromArray(out) {
                var buf = Buffer.allocUnsafe(16);
                buf.writeUInt32BE(out[0] >>> 0, 0);
                buf.writeUInt32BE(out[1] >>> 0, 4);
                buf.writeUInt32BE(out[2] >>> 0, 8);
                buf.writeUInt32BE(out[3] >>> 0, 12);
                return buf;
            }
            function GHASH(key) {
                this.h = key;
                this.state = Buffer.alloc(16, 0);
                this.cache = Buffer.allocUnsafe(0);
            }
            GHASH.prototype.ghash = function (block) {
                var i = -1;
                while (++i < block.length) {
                    this.state[i] ^= block[i];
                }
                this._multiply();
            };
            GHASH.prototype._multiply = function () {
                var Vi = toArray(this.h);
                var Zi = [
                    0,
                    0,
                    0,
                    0
                ];
                var j, xi, lsbVi;
                var i = -1;
                while (++i < 128) {
                    xi = (this.state[~~(i / 8)] & 1 << 7 - i % 8) !== 0;
                    if (xi) {
                        Zi[0] ^= Vi[0];
                        Zi[1] ^= Vi[1];
                        Zi[2] ^= Vi[2];
                        Zi[3] ^= Vi[3];
                    }
                    lsbVi = (Vi[3] & 1) !== 0;
                    for (j = 3; j > 0; j--) {
                        Vi[j] = Vi[j] >>> 1 | (Vi[j - 1] & 1) << 31;
                    }
                    Vi[0] = Vi[0] >>> 1;
                    if (lsbVi) {
                        Vi[0] = Vi[0] ^ 225 << 24;
                    }
                }
                this.state = fromArray(Zi);
            };
            GHASH.prototype.update = function (buf) {
                this.cache = Buffer.concat([
                    this.cache,
                    buf
                ]);
                var chunk;
                while (this.cache.length >= 16) {
                    chunk = this.cache.slice(0, 16);
                    this.cache = this.cache.slice(16);
                    this.ghash(chunk);
                }
            };
            GHASH.prototype.final = function (abl, bl) {
                if (this.cache.length) {
                    this.ghash(Buffer.concat([
                        this.cache,
                        ZEROES
                    ], 16));
                }
                this.ghash(fromArray([
                    0,
                    abl,
                    0,
                    bl
                ]));
                return this.state;
            };
            module.exports = GHASH;
        },
        { 'safe-buffer': 145 }
    ],
    28: [
        function (_dereq_, module, exports) {
            function incr32(iv) {
                var len = iv.length;
                var item;
                while (len--) {
                    item = iv.readUInt8(len);
                    if (item === 255) {
                        iv.writeUInt8(0, len);
                    } else {
                        item++;
                        iv.writeUInt8(item, len);
                        break;
                    }
                }
            }
            module.exports = incr32;
        },
        {}
    ],
    29: [
        function (_dereq_, module, exports) {
            var xor = _dereq_('buffer-xor');
            exports.encrypt = function (self, block) {
                var data = xor(block, self._prev);
                self._prev = self._cipher.encryptBlock(data);
                return self._prev;
            };
            exports.decrypt = function (self, block) {
                var pad = self._prev;
                self._prev = block;
                var out = self._cipher.decryptBlock(block);
                return xor(out, pad);
            };
        },
        { 'buffer-xor': 49 }
    ],
    30: [
        function (_dereq_, module, exports) {
            var Buffer = _dereq_('safe-buffer').Buffer;
            var xor = _dereq_('buffer-xor');
            function encryptStart(self, data, decrypt) {
                var len = data.length;
                var out = xor(data, self._cache);
                self._cache = self._cache.slice(len);
                self._prev = Buffer.concat([
                    self._prev,
                    decrypt ? data : out
                ]);
                return out;
            }
            exports.encrypt = function (self, data, decrypt) {
                var out = Buffer.allocUnsafe(0);
                var len;
                while (data.length) {
                    if (self._cache.length === 0) {
                        self._cache = self._cipher.encryptBlock(self._prev);
                        self._prev = Buffer.allocUnsafe(0);
                    }
                    if (self._cache.length <= data.length) {
                        len = self._cache.length;
                        out = Buffer.concat([
                            out,
                            encryptStart(self, data.slice(0, len), decrypt)
                        ]);
                        data = data.slice(len);
                    } else {
                        out = Buffer.concat([
                            out,
                            encryptStart(self, data, decrypt)
                        ]);
                        break;
                    }
                }
                return out;
            };
        },
        {
            'buffer-xor': 49,
            'safe-buffer': 145
        }
    ],
    31: [
        function (_dereq_, module, exports) {
            var Buffer = _dereq_('safe-buffer').Buffer;
            function encryptByte(self, byteParam, decrypt) {
                var pad;
                var i = -1;
                var len = 8;
                var out = 0;
                var bit, value;
                while (++i < len) {
                    pad = self._cipher.encryptBlock(self._prev);
                    bit = byteParam & 1 << 7 - i ? 128 : 0;
                    value = pad[0] ^ bit;
                    out += (value & 128) >> i % 8;
                    self._prev = shiftIn(self._prev, decrypt ? bit : value);
                }
                return out;
            }
            function shiftIn(buffer, value) {
                var len = buffer.length;
                var i = -1;
                var out = Buffer.allocUnsafe(buffer.length);
                buffer = Buffer.concat([
                    buffer,
                    Buffer.from([value])
                ]);
                while (++i < len) {
                    out[i] = buffer[i] << 1 | buffer[i + 1] >> 7;
                }
                return out;
            }
            exports.encrypt = function (self, chunk, decrypt) {
                var len = chunk.length;
                var out = Buffer.allocUnsafe(len);
                var i = -1;
                while (++i < len) {
                    out[i] = encryptByte(self, chunk[i], decrypt);
                }
                return out;
            };
        },
        { 'safe-buffer': 145 }
    ],
    32: [
        function (_dereq_, module, exports) {
            var Buffer = _dereq_('safe-buffer').Buffer;
            function encryptByte(self, byteParam, decrypt) {
                var pad = self._cipher.encryptBlock(self._prev);
                var out = pad[0] ^ byteParam;
                self._prev = Buffer.concat([
                    self._prev.slice(1),
                    Buffer.from([decrypt ? byteParam : out])
                ]);
                return out;
            }
            exports.encrypt = function (self, chunk, decrypt) {
                var len = chunk.length;
                var out = Buffer.allocUnsafe(len);
                var i = -1;
                while (++i < len) {
                    out[i] = encryptByte(self, chunk[i], decrypt);
                }
                return out;
            };
        },
        { 'safe-buffer': 145 }
    ],
    33: [
        function (_dereq_, module, exports) {
            var xor = _dereq_('buffer-xor');
            var Buffer = _dereq_('safe-buffer').Buffer;
            var incr32 = _dereq_('../incr32');
            function getBlock(self) {
                var out = self._cipher.encryptBlockRaw(self._prev);
                incr32(self._prev);
                return out;
            }
            var blockSize = 16;
            exports.encrypt = function (self, chunk) {
                var chunkNum = Math.ceil(chunk.length / blockSize);
                var start = self._cache.length;
                self._cache = Buffer.concat([
                    self._cache,
                    Buffer.allocUnsafe(chunkNum * blockSize)
                ]);
                for (var i = 0; i < chunkNum; i++) {
                    var out = getBlock(self);
                    var offset = start + i * blockSize;
                    self._cache.writeUInt32BE(out[0], offset + 0);
                    self._cache.writeUInt32BE(out[1], offset + 4);
                    self._cache.writeUInt32BE(out[2], offset + 8);
                    self._cache.writeUInt32BE(out[3], offset + 12);
                }
                var pad = self._cache.slice(0, chunk.length);
                self._cache = self._cache.slice(chunk.length);
                return xor(chunk, pad);
            };
        },
        {
            '../incr32': 28,
            'buffer-xor': 49,
            'safe-buffer': 145
        }
    ],
    34: [
        function (_dereq_, module, exports) {
            exports.encrypt = function (self, block) {
                return self._cipher.encryptBlock(block);
            };
            exports.decrypt = function (self, block) {
                return self._cipher.decryptBlock(block);
            };
        },
        {}
    ],
    35: [
        function (_dereq_, module, exports) {
            var modeModules = {
                ECB: _dereq_('./ecb'),
                CBC: _dereq_('./cbc'),
                CFB: _dereq_('./cfb'),
                CFB8: _dereq_('./cfb8'),
                CFB1: _dereq_('./cfb1'),
                OFB: _dereq_('./ofb'),
                CTR: _dereq_('./ctr'),
                GCM: _dereq_('./ctr')
            };
            var modes = _dereq_('./list.json');
            for (var key in modes) {
                modes[key].module = modeModules[modes[key].mode];
            }
            module.exports = modes;
        },
        {
            './cbc': 29,
            './cfb': 30,
            './cfb1': 31,
            './cfb8': 32,
            './ctr': 33,
            './ecb': 34,
            './list.json': 36,
            './ofb': 37
        }
    ],
    36: [
        function (_dereq_, module, exports) {
            module.exports = {
                'aes-128-ecb': {
                    'cipher': 'AES',
                    'key': 128,
                    'iv': 0,
                    'mode': 'ECB',
                    'type': 'block'
                },
                'aes-192-ecb': {
                    'cipher': 'AES',
                    'key': 192,
                    'iv': 0,
                    'mode': 'ECB',
                    'type': 'block'
                },
                'aes-256-ecb': {
                    'cipher': 'AES',
                    'key': 256,
                    'iv': 0,
                    'mode': 'ECB',
                    'type': 'block'
                },
                'aes-128-cbc': {
                    'cipher': 'AES',
                    'key': 128,
                    'iv': 16,
                    'mode': 'CBC',
                    'type': 'block'
                },
                'aes-192-cbc': {
                    'cipher': 'AES',
                    'key': 192,
                    'iv': 16,
                    'mode': 'CBC',
                    'type': 'block'
                },
                'aes-256-cbc': {
                    'cipher': 'AES',
                    'key': 256,
                    'iv': 16,
                    'mode': 'CBC',
                    'type': 'block'
                },
                'aes128': {
                    'cipher': 'AES',
                    'key': 128,
                    'iv': 16,
                    'mode': 'CBC',
                    'type': 'block'
                },
                'aes192': {
                    'cipher': 'AES',
                    'key': 192,
                    'iv': 16,
                    'mode': 'CBC',
                    'type': 'block'
                },
                'aes256': {
                    'cipher': 'AES',
                    'key': 256,
                    'iv': 16,
                    'mode': 'CBC',
                    'type': 'block'
                },
                'aes-128-cfb': {
                    'cipher': 'AES',
                    'key': 128,
                    'iv': 16,
                    'mode': 'CFB',
                    'type': 'stream'
                },
                'aes-192-cfb': {
                    'cipher': 'AES',
                    'key': 192,
                    'iv': 16,
                    'mode': 'CFB',
                    'type': 'stream'
                },
                'aes-256-cfb': {
                    'cipher': 'AES',
                    'key': 256,
                    'iv': 16,
                    'mode': 'CFB',
                    'type': 'stream'
                },
                'aes-128-cfb8': {
                    'cipher': 'AES',
                    'key': 128,
                    'iv': 16,
                    'mode': 'CFB8',
                    'type': 'stream'
                },
                'aes-192-cfb8': {
                    'cipher': 'AES',
                    'key': 192,
                    'iv': 16,
                    'mode': 'CFB8',
                    'type': 'stream'
                },
                'aes-256-cfb8': {
                    'cipher': 'AES',
                    'key': 256,
                    'iv': 16,
                    'mode': 'CFB8',
                    'type': 'stream'
                },
                'aes-128-cfb1': {
                    'cipher': 'AES',
                    'key': 128,
                    'iv': 16,
                    'mode': 'CFB1',
                    'type': 'stream'
                },
                'aes-192-cfb1': {
                    'cipher': 'AES',
                    'key': 192,
                    'iv': 16,
                    'mode': 'CFB1',
                    'type': 'stream'
                },
                'aes-256-cfb1': {
                    'cipher': 'AES',
                    'key': 256,
                    'iv': 16,
                    'mode': 'CFB1',
                    'type': 'stream'
                },
                'aes-128-ofb': {
                    'cipher': 'AES',
                    'key': 128,
                    'iv': 16,
                    'mode': 'OFB',
                    'type': 'stream'
                },
                'aes-192-ofb': {
                    'cipher': 'AES',
                    'key': 192,
                    'iv': 16,
                    'mode': 'OFB',
                    'type': 'stream'
                },
                'aes-256-ofb': {
                    'cipher': 'AES',
                    'key': 256,
                    'iv': 16,
                    'mode': 'OFB',
                    'type': 'stream'
                },
                'aes-128-ctr': {
                    'cipher': 'AES',
                    'key': 128,
                    'iv': 16,
                    'mode': 'CTR',
                    'type': 'stream'
                },
                'aes-192-ctr': {
                    'cipher': 'AES',
                    'key': 192,
                    'iv': 16,
                    'mode': 'CTR',
                    'type': 'stream'
                },
                'aes-256-ctr': {
                    'cipher': 'AES',
                    'key': 256,
                    'iv': 16,
                    'mode': 'CTR',
                    'type': 'stream'
                },
                'aes-128-gcm': {
                    'cipher': 'AES',
                    'key': 128,
                    'iv': 12,
                    'mode': 'GCM',
                    'type': 'auth'
                },
                'aes-192-gcm': {
                    'cipher': 'AES',
                    'key': 192,
                    'iv': 12,
                    'mode': 'GCM',
                    'type': 'auth'
                },
                'aes-256-gcm': {
                    'cipher': 'AES',
                    'key': 256,
                    'iv': 12,
                    'mode': 'GCM',
                    'type': 'auth'
                }
            };
        },
        {}
    ],
    37: [
        function (_dereq_, module, exports) {
            (function (Buffer) {
                var xor = _dereq_('buffer-xor');
                function getBlock(self) {
                    self._prev = self._cipher.encryptBlock(self._prev);
                    return self._prev;
                }
                exports.encrypt = function (self, chunk) {
                    while (self._cache.length < chunk.length) {
                        self._cache = Buffer.concat([
                            self._cache,
                            getBlock(self)
                        ]);
                    }
                    var pad = self._cache.slice(0, chunk.length);
                    self._cache = self._cache.slice(chunk.length);
                    return xor(chunk, pad);
                };
            }.call(this, _dereq_('buffer').Buffer));
        },
        {
            'buffer': 50,
            'buffer-xor': 49
        }
    ],
    38: [
        function (_dereq_, module, exports) {
            var aes = _dereq_('./aes');
            var Buffer = _dereq_('safe-buffer').Buffer;
            var Transform = _dereq_('cipher-base');
            var inherits = _dereq_('inherits');
            function StreamCipher(mode, key, iv, decrypt) {
                Transform.call(this);
                this._cipher = new aes.AES(key);
                this._prev = Buffer.from(iv);
                this._cache = Buffer.allocUnsafe(0);
                this._secCache = Buffer.allocUnsafe(0);
                this._decrypt = decrypt;
                this._mode = mode;
            }
            inherits(StreamCipher, Transform);
            StreamCipher.prototype._update = function (chunk) {
                return this._mode.encrypt(this, chunk, this._decrypt);
            };
            StreamCipher.prototype._final = function () {
                this._cipher.scrub();
            };
            module.exports = StreamCipher;
        },
        {
            './aes': 22,
            'cipher-base': 51,
            'inherits': 103,
            'safe-buffer': 145
        }
    ],
    39: [
        function (_dereq_, module, exports) {
            var DES = _dereq_('browserify-des');
            var aes = _dereq_('browserify-aes/browser');
            var aesModes = _dereq_('browserify-aes/modes');
            var desModes = _dereq_('browserify-des/modes');
            var ebtk = _dereq_('evp_bytestokey');
            function createCipher(suite, password) {
                suite = suite.toLowerCase();
                var keyLen, ivLen;
                if (aesModes[suite]) {
                    keyLen = aesModes[suite].key;
                    ivLen = aesModes[suite].iv;
                } else if (desModes[suite]) {
                    keyLen = desModes[suite].key * 8;
                    ivLen = desModes[suite].iv;
                } else {
                    throw new TypeError('invalid suite type');
                }
                var keys = ebtk(password, false, keyLen, ivLen);
                return createCipheriv(suite, keys.key, keys.iv);
            }
            function createDecipher(suite, password) {
                suite = suite.toLowerCase();
                var keyLen, ivLen;
                if (aesModes[suite]) {
                    keyLen = aesModes[suite].key;
                    ivLen = aesModes[suite].iv;
                } else if (desModes[suite]) {
                    keyLen = desModes[suite].key * 8;
                    ivLen = desModes[suite].iv;
                } else {
                    throw new TypeError('invalid suite type');
                }
                var keys = ebtk(password, false, keyLen, ivLen);
                return createDecipheriv(suite, keys.key, keys.iv);
            }
            function createCipheriv(suite, key, iv) {
                suite = suite.toLowerCase();
                if (aesModes[suite])
                    return aes.createCipheriv(suite, key, iv);
                if (desModes[suite])
                    return new DES({
                        key: key,
                        iv: iv,
                        mode: suite
                    });
                throw new TypeError('invalid suite type');
            }
            function createDecipheriv(suite, key, iv) {
                suite = suite.toLowerCase();
                if (aesModes[suite])
                    return aes.createDecipheriv(suite, key, iv);
                if (desModes[suite])
                    return new DES({
                        key: key,
                        iv: iv,
                        mode: suite,
                        decrypt: true
                    });
                throw new TypeError('invalid suite type');
            }
            function getCiphers() {
                return Object.keys(desModes).concat(aes.getCiphers());
            }
            exports.createCipher = exports.Cipher = createCipher;
            exports.createCipheriv = exports.Cipheriv = createCipheriv;
            exports.createDecipher = exports.Decipher = createDecipher;
            exports.createDecipheriv = exports.Decipheriv = createDecipheriv;
            exports.listCiphers = exports.getCiphers = getCiphers;
        },
        {
            'browserify-aes/browser': 24,
            'browserify-aes/modes': 35,
            'browserify-des': 40,
            'browserify-des/modes': 41,
            'evp_bytestokey': 86
        }
    ],
    40: [
        function (_dereq_, module, exports) {
            var CipherBase = _dereq_('cipher-base');
            var des = _dereq_('des.js');
            var inherits = _dereq_('inherits');
            var Buffer = _dereq_('safe-buffer').Buffer;
            var modes = {
                'des-ede3-cbc': des.CBC.instantiate(des.EDE),
                'des-ede3': des.EDE,
                'des-ede-cbc': des.CBC.instantiate(des.EDE),
                'des-ede': des.EDE,
                'des-cbc': des.CBC.instantiate(des.DES),
                'des-ecb': des.DES
            };
            modes.des = modes['des-cbc'];
            modes.des3 = modes['des-ede3-cbc'];
            module.exports = DES;
            inherits(DES, CipherBase);
            function DES(opts) {
                CipherBase.call(this);
                var modeName = opts.mode.toLowerCase();
                var mode = modes[modeName];
                var type;
                if (opts.decrypt) {
                    type = 'decrypt';
                } else {
                    type = 'encrypt';
                }
                var key = opts.key;
                if (!Buffer.isBuffer(key)) {
                    key = Buffer.from(key);
                }
                if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {
                    key = Buffer.concat([
                        key,
                        key.slice(0, 8)
                    ]);
                }
                var iv = opts.iv;
                if (!Buffer.isBuffer(iv)) {
                    iv = Buffer.from(iv);
                }
                this._des = mode.create({
                    key: key,
                    iv: iv,
                    type: type
                });
            }
            DES.prototype._update = function (data) {
                return Buffer.from(this._des.update(data));
            };
            DES.prototype._final = function () {
                return Buffer.from(this._des.final());
            };
        },
        {
            'cipher-base': 51,
            'des.js': 59,
            'inherits': 103,
            'safe-buffer': 145
        }
    ],
    41: [
        function (_dereq_, module, exports) {
            exports['des-ecb'] = {
                key: 8,
                iv: 0
            };
            exports['des-cbc'] = exports.des = {
                key: 8,
                iv: 8
            };
            exports['des-ede3-cbc'] = exports.des3 = {
                key: 24,
                iv: 8
            };
            exports['des-ede3'] = {
                key: 24,
                iv: 0
            };
            exports['des-ede-cbc'] = {
                key: 16,
                iv: 8
            };
            exports['des-ede'] = {
                key: 16,
                iv: 0
            };
        },
        {}
    ],
    42: [
        function (_dereq_, module, exports) {
            (function (Buffer) {
                var bn = _dereq_('bn.js');
                var randomBytes = _dereq_('randombytes');
                module.exports = crt;
                function blind(priv) {
                    var r = getr(priv);
                    var blinder = r.toRed(bn.mont(priv.modulus)).redPow(new bn(priv.publicExponent)).fromRed();
                    return {
                        blinder: blinder,
                        unblinder: r.invm(priv.modulus)
                    };
                }
                function crt(msg, priv) {
                    var blinds = blind(priv);
                    var len = priv.modulus.byteLength();
                    var mod = bn.mont(priv.modulus);
                    var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);
                    var c1 = blinded.toRed(bn.mont(priv.prime1));
                    var c2 = blinded.toRed(bn.mont(priv.prime2));
                    var qinv = priv.coefficient;
                    var p = priv.prime1;
                    var q = priv.prime2;
                    var m1 = c1.redPow(priv.exponent1);
                    var m2 = c2.redPow(priv.exponent2);
                    m1 = m1.fromRed();
                    m2 = m2.fromRed();
                    var h = m1.isub(m2).imul(qinv).umod(p);
                    h.imul(q);
                    m2.iadd(h);
                    return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));
                }
                crt.getr = getr;
                function getr(priv) {
                    var len = priv.modulus.byteLength();
                    var r = new bn(randomBytes(len));
                    while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {
                        r = new bn(randomBytes(len));
                    }
                    return r;
                }
            }.call(this, _dereq_('buffer').Buffer));
        },
        {
            'bn.js': 19,
            'buffer': 50,
            'randombytes': 128
        }
    ],
    43: [
        function (_dereq_, module, exports) {
            module.exports = _dereq_('./browser/algorithms.json');
        },
        { './browser/algorithms.json': 44 }
    ],
    44: [
        function (_dereq_, module, exports) {
            module.exports = {
                'sha224WithRSAEncryption': {
                    'sign': 'rsa',
                    'hash': 'sha224',
                    'id': '302d300d06096086480165030402040500041c'
                },
                'RSA-SHA224': {
                    'sign': 'ecdsa/rsa',
                    'hash': 'sha224',
                    'id': '302d300d06096086480165030402040500041c'
                },
                'sha256WithRSAEncryption': {
                    'sign': 'rsa',
                    'hash': 'sha256',
                    'id': '3031300d060960864801650304020105000420'
                },
                'RSA-SHA256': {
                    'sign': 'ecdsa/rsa',
                    'hash': 'sha256',
                    'id': '3031300d060960864801650304020105000420'
                },
                'sha384WithRSAEncryption': {
                    'sign': 'rsa',
                    'hash': 'sha384',
                    'id': '3041300d060960864801650304020205000430'
                },
                'RSA-SHA384': {
                    'sign': 'ecdsa/rsa',
                    'hash': 'sha384',
                    'id': '3041300d060960864801650304020205000430'
                },
                'sha512WithRSAEncryption': {
                    'sign': 'rsa',
                    'hash': 'sha512',
                    'id': '3051300d060960864801650304020305000440'
                },
                'RSA-SHA512': {
                    'sign': 'ecdsa/rsa',
                    'hash': 'sha512',
                    'id': '3051300d060960864801650304020305000440'
                },
                'RSA-SHA1': {
                    'sign': 'rsa',
                    'hash': 'sha1',
                    'id': '3021300906052b0e03021a05000414'
                },
                'ecdsa-with-SHA1': {
                    'sign': 'ecdsa',
                    'hash': 'sha1',
                    'id': ''
                },
                'sha256': {
                    'sign': 'ecdsa',
                    'hash': 'sha256',
                    'id': ''
                },
                'sha224': {
                    'sign': 'ecdsa',
                    'hash': 'sha224',
                    'id': ''
                },
                'sha384': {
                    'sign': 'ecdsa',
                    'hash': 'sha384',
                    'id': ''
                },
                'sha512': {
                    'sign': 'ecdsa',
                    'hash': 'sha512',
                    'id': ''
                },
                'DSA-SHA': {
                    'sign': 'dsa',
                    'hash': 'sha1',
                    'id': ''
                },
                'DSA-SHA1': {
                    'sign': 'dsa',
                    'hash': 'sha1',
                    'id': ''
                },
                'DSA': {
                    'sign': 'dsa',
                    'hash': 'sha1',
                    'id': ''
                },
                'DSA-WITH-SHA224': {
                    'sign': 'dsa',
                    'hash': 'sha224',
                    'id': ''
                },
                'DSA-SHA224': {
                    'sign': 'dsa',
                    'hash': 'sha224',
                    'id': ''
                },
                'DSA-WITH-SHA256': {
                    'sign': 'dsa',
                    'hash': 'sha256',
                    'id': ''
                },
                'DSA-SHA256': {
                    'sign': 'dsa',
                    'hash': 'sha256',
                    'id': ''
                },
                'DSA-WITH-SHA384': {
                    'sign': 'dsa',
                    'hash': 'sha384',
                    'id': ''
                },
                'DSA-SHA384': {
                    'sign': 'dsa',
                    'hash': 'sha384',
                    'id': ''
                },
                'DSA-WITH-SHA512': {
                    'sign': 'dsa',
                    'hash': 'sha512',
                    'id': ''
                },
                'DSA-SHA512': {
                    'sign': 'dsa',
                    'hash': 'sha512',
                    'id': ''
                },
                'DSA-RIPEMD160': {
                    'sign': 'dsa',
                    'hash': 'rmd160',
                    'id': ''
                },
                'ripemd160WithRSA': {
                    'sign': 'rsa',
                    'hash': 'rmd160',
                    'id': '3021300906052b2403020105000414'
                },
                'RSA-RIPEMD160': {
                    'sign': 'rsa',
                    'hash': 'rmd160',
                    'id': '3021300906052b2403020105000414'
                },
                'md5WithRSAEncryption': {
                    'sign': 'rsa',
                    'hash': 'md5',
                    'id': '3020300c06082a864886f70d020505000410'
                },
                'RSA-MD5': {
                    'sign': 'rsa',
                    'hash': 'md5',
                    'id': '3020300c06082a864886f70d020505000410'
                }
            };
        },
        {}
    ],
    45: [
        function (_dereq_, module, exports) {
            module.exports = {
                '1.3.132.0.10': 'secp256k1',
                '1.3.132.0.33': 'p224',
                '1.2.840.10045.3.1.1': 'p192',
                '1.2.840.10045.3.1.7': 'p256',
                '1.3.132.0.34': 'p384',
                '1.3.132.0.35': 'p521'
            };
        },
        {}
    ],
    46: [
        function (_dereq_, module, exports) {
            (function (Buffer) {
                var createHash = _dereq_('create-hash');
                var stream = _dereq_('stream');
                var inherits = _dereq_('inherits');
                var sign = _dereq_('./sign');
                var verify = _dereq_('./verify');
                var algorithms = _dereq_('./algorithms.json');
                Object.keys(algorithms).forEach(function (key) {
                    algorithms[key].id = new Buffer(algorithms[key].id, 'hex');
                    algorithms[key.toLowerCase()] = algorithms[key];
                });
                function Sign(algorithm) {
                    stream.Writable.call(this);
                    var data = algorithms[algorithm];
                    if (!data)
                        throw new Error('Unknown message digest');
                    this._hashType = data.hash;
                    this._hash = createHash(data.hash);
                    this._tag = data.id;
                    this._signType = data.sign;
                }
                inherits(Sign, stream.Writable);
                Sign.prototype._write = function _write(data, _, done) {
                    this._hash.update(data);
                    done();
                };
                Sign.prototype.update = function update(data, enc) {
                    if (typeof data === 'string')
                        data = new Buffer(data, enc);
                    this._hash.update(data);
                    return this;
                };
                Sign.prototype.sign = function signMethod(key, enc) {
                    this.end();
                    var hash = this._hash.digest();
                    var sig = sign(hash, key, this._hashType, this._signType, this._tag);
                    return enc ? sig.toString(enc) : sig;
                };
                function Verify(algorithm) {
                    stream.Writable.call(this);
                    var data = algorithms[algorithm];
                    if (!data)
                        throw new Error('Unknown message digest');
                    this._hash = createHash(data.hash);
                    this._tag = data.id;
                    this._signType = data.sign;
                }
                inherits(Verify, stream.Writable);
                Verify.prototype._write = function _write(data, _, done) {
                    this._hash.update(data);
                    done();
                };
                Verify.prototype.update = function update(data, enc) {
                    if (typeof data === 'string')
                        data = new Buffer(data, enc);
                    this._hash.update(data);
                    return this;
                };
                Verify.prototype.verify = function verifyMethod(key, sig, enc) {
                    if (typeof sig === 'string')
                        sig = new Buffer(sig, enc);
                    this.end();
                    var hash = this._hash.digest();
                    return verify(sig, hash, key, this._signType, this._tag);
                };
                function createSign(algorithm) {
                    return new Sign(algorithm);
                }
                function createVerify(algorithm) {
                    return new Verify(algorithm);
                }
                module.exports = {
                    Sign: createSign,
                    Verify: createVerify,
                    createSign: createSign,
                    createVerify: createVerify
                };
            }.call(this, _dereq_('buffer').Buffer));
        },
        {
            './algorithms.json': 44,
            './sign': 47,
            './verify': 48,
            'buffer': 50,
            'create-hash': 54,
            'inherits': 103,
            'stream': 236
        }
    ],
    47: [
        function (_dereq_, module, exports) {
            (function (Buffer) {
                var createHmac = _dereq_('create-hmac');
                var crt = _dereq_('browserify-rsa');
                var EC = _dereq_('elliptic').ec;
                var BN = _dereq_('bn.js');
                var parseKeys = _dereq_('parse-asn1');
                var curves = _dereq_('./curves.json');
                function sign(hash, key, hashType, signType, tag) {
                    var priv = parseKeys(key);
                    if (priv.curve) {
                        if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa')
                            throw new Error('wrong private key type');
                        return ecSign(hash, priv);
                    } else if (priv.type === 'dsa') {
                        if (signType !== 'dsa')
                            throw new Error('wrong private key type');
                        return dsaSign(hash, priv, hashType);
                    } else {
                        if (signType !== 'rsa' && signType !== 'ecdsa/rsa')
                            throw new Error('wrong private key type');
                    }
                    hash = Buffer.concat([
                        tag,
                        hash
                    ]);
                    var len = priv.modulus.byteLength();
                    var pad = [
                        0,
                        1
                    ];
                    while (hash.length + pad.length + 1 < len)
                        pad.push(255);
                    pad.push(0);
                    var i = -1;
                    while (++i < hash.length)
                        pad.push(hash[i]);
                    var out = crt(pad, priv);
                    return out;
                }
                function ecSign(hash, priv) {
                    var curveId = curves[priv.curve.join('.')];
                    if (!curveId)
                        throw new Error('unknown curve ' + priv.curve.join('.'));
                    var curve = new EC(curveId);
                    var key = curve.keyFromPrivate(priv.privateKey);
                    var out = key.sign(hash);
                    return new Buffer(out.toDER());
                }
                function dsaSign(hash, priv, algo) {
                    var x = priv.params.priv_key;
                    var p = priv.params.p;
                    var q = priv.params.q;
                    var g = priv.params.g;
                    var r = new BN(0);
                    var k;
                    var H = bits2int(hash, q).mod(q);
                    var s = false;
                    var kv = getKey(x, q, hash, algo);
                    while (s === false) {
                        k = makeKey(q, kv, algo);
                        r = makeR(g, k, p, q);
                        s = k.invm(q).imul(H.add(x.mul(r))).mod(q);
                        if (s.cmpn(0) === 0) {
                            s = false;
                            r = new BN(0);
                        }
                    }
                    return toDER(r, s);
                }
                function toDER(r, s) {
                    r = r.toArray();
                    s = s.toArray();
                    if (r[0] & 128)
                        r = [0].concat(r);
                    if (s[0] & 128)
                        s = [0].concat(s);
                    var total = r.length + s.length + 4;
                    var res = [
                        48,
                        total,
                        2,
                        r.length
                    ];
                    res = res.concat(r, [
                        2,
                        s.length
                    ], s);
                    return new Buffer(res);
                }
                function getKey(x, q, hash, algo) {
                    x = new Buffer(x.toArray());
                    if (x.length < q.byteLength()) {
                        var zeros = new Buffer(q.byteLength() - x.length);
                        zeros.fill(0);
                        x = Buffer.concat([
                            zeros,
                            x
                        ]);
                    }
                    var hlen = hash.length;
                    var hbits = bits2octets(hash, q);
                    var v = new Buffer(hlen);
                    v.fill(1);
                    var k = new Buffer(hlen);
                    k.fill(0);
                    k = createHmac(algo, k).update(v).update(new Buffer([0])).update(x).update(hbits).digest();
                    v = createHmac(algo, k).update(v).digest();
                    k = createHmac(algo, k).update(v).update(new Buffer([1])).update(x).update(hbits).digest();
                    v = createHmac(algo, k).update(v).digest();
                    return {
                        k: k,
                        v: v
                    };
                }
                function bits2int(obits, q) {
                    var bits = new BN(obits);
                    var shift = (obits.length << 3) - q.bitLength();
                    if (shift > 0)
                        bits.ishrn(shift);
                    return bits;
                }
                function bits2octets(bits, q) {
                    bits = bits2int(bits, q);
                    bits = bits.mod(q);
                    var out = new Buffer(bits.toArray());
                    if (out.length < q.byteLength()) {
                        var zeros = new Buffer(q.byteLength() - out.length);
                        zeros.fill(0);
                        out = Buffer.concat([
                            zeros,
                            out
                        ]);
                    }
                    return out;
                }
                function makeKey(q, kv, algo) {
                    var t;
                    var k;
                    do {
                        t = new Buffer(0);
                        while (t.length * 8 < q.bitLength()) {
                            kv.v = createHmac(algo, kv.k).update(kv.v).digest();
                            t = Buffer.concat([
                                t,
                                kv.v
                            ]);
                        }
                        k = bits2int(t, q);
                        kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([0])).digest();
                        kv.v = createHmac(algo, kv.k).update(kv.v).digest();
                    } while (k.cmp(q) !== -1);
                    return k;
                }
                function makeR(g, k, p, q) {
                    return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q);
                }
                module.exports = sign;
                module.exports.getKey = getKey;
                module.exports.makeKey = makeKey;
            }.call(this, _dereq_('buffer').Buffer));
        },
        {
            './curves.json': 45,
            'bn.js': 19,
            'browserify-rsa': 42,
            'buffer': 50,
            'create-hmac': 56,
            'elliptic': 69,
            'parse-asn1': 114
        }
    ],
    48: [
        function (_dereq_, module, exports) {
            (function (Buffer) {
                var BN = _dereq_('bn.js');
                var EC = _dereq_('elliptic').ec;
                var parseKeys = _dereq_('parse-asn1');
                var curves = _dereq_('./curves.json');
                function verify(sig, hash, key, signType, tag) {
                    var pub = parseKeys(key);
                    if (pub.type === 'ec') {
                        if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa')
                            throw new Error('wrong public key type');
                        return ecVerify(sig, hash, pub);
                    } else if (pub.type === 'dsa') {
                        if (signType !== 'dsa')
                            throw new Error('wrong public key type');
                        return dsaVerify(sig, hash, pub);
                    } else {
                        if (signType !== 'rsa' && signType !== 'ecdsa/rsa')
                            throw new Error('wrong public key type');
                    }
                    hash = Buffer.concat([
                        tag,
                        hash
                    ]);
                    var len = pub.modulus.byteLength();
                    var pad = [1];
                    var padNum = 0;
                    while (hash.length + pad.length + 2 < len) {
                        pad.push(255);
                        padNum++;
                    }
                    pad.push(0);
                    var i = -1;
                    while (++i < hash.length) {
                        pad.push(hash[i]);
                    }
                    pad = new Buffer(pad);
                    var red = BN.mont(pub.modulus);
                    sig = new BN(sig).toRed(red);
                    sig = sig.redPow(new BN(pub.publicExponent));
                    sig = new Buffer(sig.fromRed().toArray());
                    var out = padNum < 8 ? 1 : 0;
                    len = Math.min(sig.length, pad.length);
                    if (sig.length !== pad.length)
                        out = 1;
                    i = -1;
                    while (++i < len)
                        out |= sig[i] ^ pad[i];
                    return out === 0;
                }
                function ecVerify(sig, hash, pub) {
                    var curveId = curves[pub.data.algorithm.curve.join('.')];
                    if (!curveId)
                        throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'));
                    var curve = new EC(curveId);
                    var pubkey = pub.data.subjectPrivateKey.data;
                    return curve.verify(hash, sig, pubkey);
                }
                function dsaVerify(sig, hash, pub) {
                    var p = pub.data.p;
                    var q = pub.data.q;
                    var g = pub.data.g;
                    var y = pub.data.pub_key;
                    var unpacked = parseKeys.signature.decode(sig, 'der');
                    var s = unpacked.s;
                    var r = unpacked.r;
                    checkValue(s, q);
                    checkValue(r, q);
                    var montp = BN.mont(p);
                    var w = s.invm(q);
                    var v = g.toRed(montp).redPow(new BN(hash).mul(w).mod(q)).fromRed().mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed()).mod(p).mod(q);
                    return v.cmp(r) === 0;
                }
                function checkValue(b, q) {
                    if (b.cmpn(0) <= 0)
                        throw new Error('invalid sig');
                    if (b.cmp(q) >= q)
                        throw new Error('invalid sig');
                }
                module.exports = verify;
            }.call(this, _dereq_('buffer').Buffer));
        },
        {
            './curves.json': 45,
            'bn.js': 19,
            'buffer': 50,
            'elliptic': 69,
            'parse-asn1': 114
        }
    ],
    49: [
        function (_dereq_, module, exports) {
            (function (Buffer) {
                module.exports = function xor(a, b) {
                    var length = Math.min(a.length, b.length);
                    var buffer = new Buffer(length);
                    for (var i = 0; i < length; ++i) {
                        buffer[i] = a[i] ^ b[i];
                    }
                    return buffer;
                };
            }.call(this, _dereq_('buffer').Buffer));
        },
        { 'buffer': 50 }
    ],
    50: [
        function (_dereq_, module, exports) {
            'use strict';
            var base64 = _dereq_('base64-js');
            var ieee754 = _dereq_('ieee754');
            exports.Buffer = Buffer;
            exports.SlowBuffer = SlowBuffer;
            exports.INSPECT_MAX_BYTES = 50;
            var K_MAX_LENGTH = 2147483647;
            exports.kMaxLength = K_MAX_LENGTH;
            Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport();
            if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && typeof console.error === 'function') {
                console.error('This browser lacks typed array (Uint8Array) support which is required by ' + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.');
            }
            function typedArraySupport() {
                try {
                    var arr = new Uint8Array(1);
                    arr.__proto__ = {
                        __proto__: Uint8Array.prototype,
                        foo: function () {
                            return 42;
                        }
                    };
                    return arr.foo() === 42;
                } catch (e) {
                    return false;
                }
            }
            Object.defineProperty(Buffer.prototype, 'parent', {
                enumerable: true,
                get: function () {
                    if (!Buffer.isBuffer(this))
                        return undefined;
                    return this.buffer;
                }
            });
            Object.defineProperty(Buffer.prototype, 'offset', {
                enumerable: true,
                get: function () {
                    if (!Buffer.isBuffer(this))
                        return undefined;
                    return this.byteOffset;
                }
            });
            function createBuffer(length) {
                if (length > K_MAX_LENGTH) {
                    throw new RangeError('The value "' + length + '" is invalid for option "size"');
                }
                var buf = new Uint8Array(length);
                buf.__proto__ = Buffer.prototype;
                return buf;
            }
            function Buffer(arg, encodingOrOffset, length) {
                if (typeof arg === 'number') {
                    if (typeof encodingOrOffset === 'string') {
                        throw new TypeError('The "string" argument must be of type string. Received type number');
                    }
                    return allocUnsafe(arg);
                }
                return from(arg, encodingOrOffset, length);
            }
            if (typeof Symbol !== 'undefined' && Symbol.species != null && Buffer[Symbol.species] === Buffer) {
                Object.defineProperty(Buffer, Symbol.species, {
                    value: null,
                    configurable: true,
                    enumerable: false,
                    writable: false
                });
            }
            Buffer.poolSize = 8192;
            function from(value, encodingOrOffset, length) {
                if (typeof value === 'string') {
                    return fromString(value, encodingOrOffset);
                }
                if (ArrayBuffer.isView(value)) {
                    return fromArrayLike(value);
                }
                if (value == null) {
                    throw TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + 'or Array-like Object. Received type ' + typeof value);
                }
                if (isInstance(value, ArrayBuffer) || value && isInstance(value.buffer, ArrayBuffer)) {
                    return fromArrayBuffer(value, encodingOrOffset, length);
                }
                if (typeof value === 'number') {
                    throw new TypeError('The "value" argument must not be of type number. Received type number');
                }
                var valueOf = value.valueOf && value.valueOf();
                if (valueOf != null && valueOf !== value) {
                    return Buffer.from(valueOf, encodingOrOffset, length);
                }
                var b = fromObject(value);
                if (b)
                    return b;
                if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === 'function') {
                    return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length);
                }
                throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + 'or Array-like Object. Received type ' + typeof value);
            }
            Buffer.from = function (value, encodingOrOffset, length) {
                return from(value, encodingOrOffset, length);
            };
            Buffer.prototype.__proto__ = Uint8Array.prototype;
            Buffer.__proto__ = Uint8Array;
            function assertSize(size) {
                if (typeof size !== 'number') {
                    throw new TypeError('"size" argument must be of type number');
                } else if (size < 0) {
                    throw new RangeError('The value "' + size + '" is invalid for option "size"');
                }
            }
            function alloc(size, fill, encoding) {
                assertSize(size);
                if (size <= 0) {
                    return createBuffer(size);
                }
                if (fill !== undefined) {
                    return typeof encoding === 'string' ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill);
                }
                return createBuffer(size);
            }
            Buffer.alloc = function (size, fill, encoding) {
                return alloc(size, fill, encoding);
            };
            function allocUnsafe(size) {
                assertSize(size);
                return createBuffer(size < 0 ? 0 : checked(size) | 0);
            }
            Buffer.allocUnsafe = function (size) {
                return allocUnsafe(size);
            };
            Buffer.allocUnsafeSlow = function (size) {
                return allocUnsafe(size);
            };
            function fromString(string, encoding) {
                if (typeof encoding !== 'string' || encoding === '') {
                    encoding = 'utf8';
                }
                if (!Buffer.isEncoding(encoding)) {
                    throw new TypeError('Unknown encoding: ' + encoding);
                }
                var length = byteLength(string, encoding) | 0;
                var buf = createBuffer(length);
                var actual = buf.write(string, encoding);
                if (actual !== length) {
                    buf = buf.slice(0, actual);
                }
                return buf;
            }
            function fromArrayLike(array) {
                var length = array.length < 0 ? 0 : checked(array.length) | 0;
                var buf = createBuffer(length);
                for (var i = 0; i < length; i += 1) {
                    buf[i] = array[i] & 255;
                }
                return buf;
            }
            function fromArrayBuffer(array, byteOffset, length) {
                if (byteOffset < 0 || array.byteLength < byteOffset) {
                    throw new RangeError('"offset" is outside of buffer bounds');
                }
                if (array.byteLength < byteOffset + (length || 0)) {
                    throw new RangeError('"length" is outside of buffer bounds');
                }
                var buf;
                if (byteOffset === undefined && length === undefined) {
                    buf = new Uint8Array(array);
                } else if (length === undefined) {
                    buf = new Uint8Array(array, byteOffset);
                } else {
                    buf = new Uint8Array(array, byteOffset, length);
                }
                buf.__proto__ = Buffer.prototype;
                return buf;
            }
            function fromObject(obj) {
                if (Buffer.isBuffer(obj)) {
                    var len = checked(obj.length) | 0;
                    var buf = createBuffer(len);
                    if (buf.length === 0) {
                        return buf;
                    }
                    obj.copy(buf, 0, 0, len);
                    return buf;
                }
                if (obj.length !== undefined) {
                    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
                        return createBuffer(0);
                    }
                    return fromArrayLike(obj);
                }
                if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
                    return fromArrayLike(obj.data);
                }
            }
            function checked(length) {
                if (length >= K_MAX_LENGTH) {
                    throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes');
                }
                return length | 0;
            }
            function SlowBuffer(length) {
                if (+length != length) {
                    length = 0;
                }
                return Buffer.alloc(+length);
            }
            Buffer.isBuffer = function isBuffer(b) {
                return b != null && b._isBuffer === true && b !== Buffer.prototype;
            };
            Buffer.compare = function compare(a, b) {
                if (isInstance(a, Uint8Array))
                    a = Buffer.from(a, a.offset, a.byteLength);
                if (isInstance(b, Uint8Array))
                    b = Buffer.from(b, b.offset, b.byteLength);
                if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
                    throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');
                }
                if (a === b)
                    return 0;
                var x = a.length;
                var y = b.length;
                for (var i = 0, len = Math.min(x, y); i < len; ++i) {
                    if (a[i] !== b[i]) {
                        x = a[i];
                        y = b[i];
                        break;
                    }
                }
                if (x < y)
                    return -1;
                if (y < x)
                    return 1;
                return 0;
            };
            Buffer.isEncoding = function isEncoding(encoding) {
                switch (String(encoding).toLowerCase()) {
                case 'hex':
                case 'utf8':
                case 'utf-8':
                case 'ascii':
                case 'latin1':
                case 'binary':
                case 'base64':
                case 'ucs2':
                case 'ucs-2':
                case 'utf16le':
                case 'utf-16le':
                    return true;
                default:
                    return false;
                }
            };
            Buffer.concat = function concat(list, length) {
                if (!Array.isArray(list)) {
                    throw new TypeError('"list" argument must be an Array of Buffers');
                }
                if (list.length === 0) {
                    return Buffer.alloc(0);
                }
                var i;
                if (length === undefined) {
                    length = 0;
                    for (i = 0; i < list.length; ++i) {
                        length += list[i].length;
                    }
                }
                var buffer = Buffer.allocUnsafe(length);
                var pos = 0;
                for (i = 0; i < list.length; ++i) {
                    var buf = list[i];
                    if (isInstance(buf, Uint8Array)) {
                        buf = Buffer.from(buf);
                    }
                    if (!Buffer.isBuffer(buf)) {
                        throw new TypeError('"list" argument must be an Array of Buffers');
                    }
                    buf.copy(buffer, pos);
                    pos += buf.length;
                }
                return buffer;
            };
            function byteLength(string, encoding) {
                if (Buffer.isBuffer(string)) {
                    return string.length;
                }
                if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {
                    return string.byteLength;
                }
                if (typeof string !== 'string') {
                    throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + 'Received type ' + typeof string);
                }
                var len = string.length;
                var mustMatch = arguments.length > 2 && arguments[2] === true;
                if (!mustMatch && len === 0)
                    return 0;
                var loweredCase = false;
                for (;;) {
                    switch (encoding) {
                    case 'ascii':
                    case 'latin1':
                    case 'binary':
                        return len;
                    case 'utf8':
                    case 'utf-8':
                        return utf8ToBytes(string).length;
                    case 'ucs2':
                    case 'ucs-2':
                    case 'utf16le':
                    case 'utf-16le':
                        return len * 2;
                    case 'hex':
                        return len >>> 1;
                    case 'base64':
                        return base64ToBytes(string).length;
                    default:
                        if (loweredCase) {
                            return mustMatch ? -1 : utf8ToBytes(string).length;
                        }
                        encoding = ('' + encoding).toLowerCase();
                        loweredCase = true;
                    }
                }
            }
            Buffer.byteLength = byteLength;
            function slowToString(encoding, start, end) {
                var loweredCase = false;
                if (start === undefined || start < 0) {
                    start = 0;
                }
                if (start > this.length) {
                    return '';
                }
                if (end === undefined || end > this.length) {
                    end = this.length;
                }
                if (end <= 0) {
                    return '';
                }
                end >>>= 0;
                start >>>= 0;
                if (end <= start) {
                    return '';
                }
                if (!encoding)
                    encoding = 'utf8';
                while (true) {
                    switch (encoding) {
                    case 'hex':
                        return hexSlice(this, start, end);
                    case 'utf8':
                    case 'utf-8':
                        return utf8Slice(this, start, end);
                    case 'ascii':
                        return asciiSlice(this, start, end);
                    case 'latin1':
                    case 'binary':
                        return latin1Slice(this, start, end);
                    case 'base64':
                        return base64Slice(this, start, end);
                    case 'ucs2':
                    case 'ucs-2':
                    case 'utf16le':
                    case 'utf-16le':
                        return utf16leSlice(this, start, end);
                    default:
                        if (loweredCase)
                            throw new TypeError('Unknown encoding: ' + encoding);
                        encoding = (encoding + '').toLowerCase();
                        loweredCase = true;
                    }
                }
            }
            Buffer.prototype._isBuffer = true;
            function swap(b, n, m) {
                var i = b[n];
                b[n] = b[m];
                b[m] = i;
            }
            Buffer.prototype.swap16 = function swap16() {
                var len = this.length;
                if (len % 2 !== 0) {
                    throw new RangeError('Buffer size must be a multiple of 16-bits');
                }
                for (var i = 0; i < len; i += 2) {
                    swap(this, i, i + 1);
                }
                return this;
            };
            Buffer.prototype.swap32 = function swap32() {
                var len = this.length;
                if (len % 4 !== 0) {
                    throw new RangeError('Buffer size must be a multiple of 32-bits');
                }
                for (var i = 0; i < len; i += 4) {
                    swap(this, i, i + 3);
                    swap(this, i + 1, i + 2);
                }
                return this;
            };
            Buffer.prototype.swap64 = function swap64() {
                var len = this.length;
                if (len % 8 !== 0) {
                    throw new RangeError('Buffer size must be a multiple of 64-bits');
                }
                for (var i = 0; i < len; i += 8) {
                    swap(this, i, i + 7);
                    swap(this, i + 1, i + 6);
                    swap(this, i + 2, i + 5);
                    swap(this, i + 3, i + 4);
                }
                return this;
            };
            Buffer.prototype.toString = function toString() {
                var length = this.length;
                if (length === 0)
                    return '';
                if (arguments.length === 0)
                    return utf8Slice(this, 0, length);
                return slowToString.apply(this, arguments);
            };
            Buffer.prototype.toLocaleString = Buffer.prototype.toString;
            Buffer.prototype.equals = function equals(b) {
                if (!Buffer.isBuffer(b))
                    throw new TypeError('Argument must be a Buffer');
                if (this === b)
                    return true;
                return Buffer.compare(this, b) === 0;
            };
            Buffer.prototype.inspect = function inspect() {
                var str = '';
                var max = exports.INSPECT_MAX_BYTES;
                str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim();
                if (this.length > max)
                    str += ' ... ';
                return '<Buffer ' + str + '>';
            };
            Buffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {
                if (isInstance(target, Uint8Array)) {
                    target = Buffer.from(target, target.offset, target.byteLength);
                }
                if (!Buffer.isBuffer(target)) {
                    throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. ' + 'Received type ' + typeof target);
                }
                if (start === undefined) {
                    start = 0;
                }
                if (end === undefined) {
                    end = target ? target.length : 0;
                }
                if (thisStart === undefined) {
                    thisStart = 0;
                }
                if (thisEnd === undefined) {
                    thisEnd = this.length;
                }
                if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
                    throw new RangeError('out of range index');
                }
                if (thisStart >= thisEnd && start >= end) {
                    return 0;
                }
                if (thisStart >= thisEnd) {
                    return -1;
                }
                if (start >= end) {
                    return 1;
                }
                start >>>= 0;
                end >>>= 0;
                thisStart >>>= 0;
                thisEnd >>>= 0;
                if (this === target)
                    return 0;
                var x = thisEnd - thisStart;
                var y = end - start;
                var len = Math.min(x, y);
                var thisCopy = this.slice(thisStart, thisEnd);
                var targetCopy = target.slice(start, end);
                for (var i = 0; i < len; ++i) {
                    if (thisCopy[i] !== targetCopy[i]) {
                        x = thisCopy[i];
                        y = targetCopy[i];
                        break;
                    }
                }
                if (x < y)
                    return -1;
                if (y < x)
                    return 1;
                return 0;
            };
            function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {
                if (buffer.length === 0)
                    return -1;
                if (typeof byteOffset === 'string') {
                    encoding = byteOffset;
                    byteOffset = 0;
                } else if (byteOffset > 2147483647) {
                    byteOffset = 2147483647;
                } else if (byteOffset < -2147483648) {
                    byteOffset = -2147483648;
                }
                byteOffset = +byteOffset;
                if (numberIsNaN(byteOffset)) {
                    byteOffset = dir ? 0 : buffer.length - 1;
                }
                if (byteOffset < 0)
                    byteOffset = buffer.length + byteOffset;
                if (byteOffset >= buffer.length) {
                    if (dir)
                        return -1;
                    else
                        byteOffset = buffer.length - 1;
                } else if (byteOffset < 0) {
                    if (dir)
                        byteOffset = 0;
                    else
                        return -1;
                }
                if (typeof val === 'string') {
                    val = Buffer.from(val, encoding);
                }
                if (Buffer.isBuffer(val)) {
                    if (val.length === 0) {
                        return -1;
                    }
                    return arrayIndexOf(buffer, val, byteOffset, encoding, dir);
                } else if (typeof val === 'number') {
                    val = val & 255;
                    if (typeof Uint8Array.prototype.indexOf === 'function') {
                        if (dir) {
                            return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);
                        } else {
                            return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);
                        }
                    }
                    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);
                }
                throw new TypeError('val must be string, number or Buffer');
            }
            function arrayIndexOf(arr, val, byteOffset, encoding, dir) {
                var indexSize = 1;
                var arrLength = arr.length;
                var valLength = val.length;
                if (encoding !== undefined) {
                    encoding = String(encoding).toLowerCase();
                    if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') {
                        if (arr.length < 2 || val.length < 2) {
                            return -1;
                        }
                        indexSize = 2;
                        arrLength /= 2;
                        valLength /= 2;
                        byteOffset /= 2;
                    }
                }
                function read(buf, i) {
                    if (indexSize === 1) {
                        return buf[i];
                    } else {
                        return buf.readUInt16BE(i * indexSize);
                    }
                }
                var i;
                if (dir) {
                    var foundIndex = -1;
                    for (i = byteOffset; i < arrLength; i++) {
                        if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
                            if (foundIndex === -1)
                                foundIndex = i;
                            if (i - foundIndex + 1 === valLength)
                                return foundIndex * indexSize;
                        } else {
                            if (foundIndex !== -1)
                                i -= i - foundIndex;
                            foundIndex = -1;
                        }
                    }
                } else {
                    if (byteOffset + valLength > arrLength)
                        byteOffset = arrLength - valLength;
                    for (i = byteOffset; i >= 0; i--) {
                        var found = true;
                        for (var j = 0; j < valLength; j++) {
                            if (read(arr, i + j) !== read(val, j)) {
                                found = false;
                                break;
                            }
                        }
                        if (found)
                            return i;
                    }
                }
                return -1;
            }
            Buffer.prototype.includes = function includes(val, byteOffset, encoding) {
                return this.indexOf(val, byteOffset, encoding) !== -1;
            };
            Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {
                return bidirectionalIndexOf(this, val, byteOffset, encoding, true);
            };
            Buffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {
                return bidirectionalIndexOf(this, val, byteOffset, encoding, false);
            };
            function hexWrite(buf, string, offset, length) {
                offset = Number(offset) || 0;
                var remaining = buf.length - offset;
                if (!length) {
                    length = remaining;
                } else {
                    length = Number(length);
                    if (length > remaining) {
                        length = remaining;
                    }
                }
                var strLen = string.length;
                if (length > strLen / 2) {
                    length = strLen / 2;
                }
                for (var i = 0; i < length; ++i) {
                    var parsed = parseInt(string.substr(i * 2, 2), 16);
                    if (numberIsNaN(parsed))
                        return i;
                    buf[offset + i] = parsed;
                }
                return i;
            }
            function utf8Write(buf, string, offset, length) {
                return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);
            }
            function asciiWrite(buf, string, offset, length) {
                return blitBuffer(asciiToBytes(string), buf, offset, length);
            }
            function latin1Write(buf, string, offset, length) {
                return asciiWrite(buf, string, offset, length);
            }
            function base64Write(buf, string, offset, length) {
                return blitBuffer(base64ToBytes(string), buf, offset, length);
            }
            function ucs2Write(buf, string, offset, length) {
                return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);
            }
            Buffer.prototype.write = function write(string, offset, length, encoding) {
                if (offset === undefined) {
                    encoding = 'utf8';
                    length = this.length;
                    offset = 0;
                } else if (length === undefined && typeof offset === 'string') {
                    encoding = offset;
                    length = this.length;
                    offset = 0;
                } else if (isFinite(offset)) {
                    offset = offset >>> 0;
                    if (isFinite(length)) {
                        length = length >>> 0;
                        if (encoding === undefined)
                            encoding = 'utf8';
                    } else {
                        encoding = length;
                        length = undefined;
                    }
                } else {
                    throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported');
                }
                var remaining = this.length - offset;
                if (length === undefined || length > remaining)
                    length = remaining;
                if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {
                    throw new RangeError('Attempt to write outside buffer bounds');
                }
                if (!encoding)
                    encoding = 'utf8';
                var loweredCase = false;
                for (;;) {
                    switch (encoding) {
                    case 'hex':
                        return hexWrite(this, string, offset, length);
                    case 'utf8':
                    case 'utf-8':
                        return utf8Write(this, string, offset, length);
                    case 'ascii':
                        return asciiWrite(this, string, offset, length);
                    case 'latin1':
                    case 'binary':
                        return latin1Write(this, string, offset, length);
                    case 'base64':
                        return base64Write(this, string, offset, length);
                    case 'ucs2':
                    case 'ucs-2':
                    case 'utf16le':
                    case 'utf-16le':
                        return ucs2Write(this, string, offset, length);
                    default:
                        if (loweredCase)
                            throw new TypeError('Unknown encoding: ' + encoding);
                        encoding = ('' + encoding).toLowerCase();
                        loweredCase = true;
                    }
                }
            };
            Buffer.prototype.toJSON = function toJSON() {
                return {
                    type: 'Buffer',
                    data: Array.prototype.slice.call(this._arr || this, 0)
                };
            };
            function base64Slice(buf, start, end) {
                if (start === 0 && end === buf.length) {
                    return base64.fromByteArray(buf);
                } else {
                    return base64.fromByteArray(buf.slice(start, end));
                }
            }
            function utf8Slice(buf, start, end) {
                end = Math.min(buf.length, end);
                var res = [];
                var i = start;
                while (i < end) {
                    var firstByte = buf[i];
                    var codePoint = null;
                    var bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1;
                    if (i + bytesPerSequence <= end) {
                        var secondByte, thirdByte, fourthByte, tempCodePoint;
                        switch (bytesPerSequence) {
                        case 1:
                            if (firstByte < 128) {
                                codePoint = firstByte;
                            }
                            break;
                        case 2:
                            secondByte = buf[i + 1];
                            if ((secondByte & 192) === 128) {
                                tempCodePoint = (firstByte & 31) << 6 | secondByte & 63;
                                if (tempCodePoint > 127) {
                                    codePoint = tempCodePoint;
                                }
                            }
                            break;
                        case 3:
                            secondByte = buf[i + 1];
                            thirdByte = buf[i + 2];
                            if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) {
                                tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63;
                                if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) {
                                    codePoint = tempCodePoint;
                                }
                            }
                            break;
                        case 4:
                            secondByte = buf[i + 1];
                            thirdByte = buf[i + 2];
                            fourthByte = buf[i + 3];
                            if ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) {
                                tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63;
                                if (tempCodePoint > 65535 && tempCodePoint < 1114112) {
                                    codePoint = tempCodePoint;
                                }
                            }
                        }
                    }
                    if (codePoint === null) {
                        codePoint = 65533;
                        bytesPerSequence = 1;
                    } else if (codePoint > 65535) {
                        codePoint -= 65536;
                        res.push(codePoint >>> 10 & 1023 | 55296);
                        codePoint = 56320 | codePoint & 1023;
                    }
                    res.push(codePoint);
                    i += bytesPerSequence;
                }
                return decodeCodePointsArray(res);
            }
            var MAX_ARGUMENTS_LENGTH = 4096;
            function decodeCodePointsArray(codePoints) {
                var len = codePoints.length;
                if (len <= MAX_ARGUMENTS_LENGTH) {
                    return String.fromCharCode.apply(String, codePoints);
                }
                var res = '';
                var i = 0;
                while (i < len) {
                    res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));
                }
                return res;
            }
            function asciiSlice(buf, start, end) {
                var ret = '';
                end = Math.min(buf.length, end);
                for (var i = start; i < end; ++i) {
                    ret += String.fromCharCode(buf[i] & 127);
                }
                return ret;
            }
            function latin1Slice(buf, start, end) {
                var ret = '';
                end = Math.min(buf.length, end);
                for (var i = start; i < end; ++i) {
                    ret += String.fromCharCode(buf[i]);
                }
                return ret;
            }
            function hexSlice(buf, start, end) {
                var len = buf.length;
                if (!start || start < 0)
                    start = 0;
                if (!end || end < 0 || end > len)
                    end = len;
                var out = '';
                for (var i = start; i < end; ++i) {
                    out += toHex(buf[i]);
                }
                return out;
            }
            function utf16leSlice(buf, start, end) {
                var bytes = buf.slice(start, end);
                var res = '';
                for (var i = 0; i < bytes.length; i += 2) {
                    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);
                }
                return res;
            }
            Buffer.prototype.slice = function slice(start, end) {
                var len = this.length;
                start = ~~start;
                end = end === undefined ? len : ~~end;
                if (start < 0) {
                    start += len;
                    if (start < 0)
                        start = 0;
                } else if (start > len) {
                    start = len;
                }
                if (end < 0) {
                    end += len;
                    if (end < 0)
                        end = 0;
                } else if (end > len) {
                    end = len;
                }
                if (end < start)
                    end = start;
                var newBuf = this.subarray(start, end);
                newBuf.__proto__ = Buffer.prototype;
                return newBuf;
            };
            function checkOffset(offset, ext, length) {
                if (offset % 1 !== 0 || offset < 0)
                    throw new RangeError('offset is not uint');
                if (offset + ext > length)
                    throw new RangeError('Trying to access beyond buffer length');
            }
            Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {
                offset = offset >>> 0;
                byteLength = byteLength >>> 0;
                if (!noAssert)
                    checkOffset(offset, byteLength, this.length);
                var val = this[offset];
                var mul = 1;
                var i = 0;
                while (++i < byteLength && (mul *= 256)) {
                    val += this[offset + i] * mul;
                }
                return val;
            };
            Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {
                offset = offset >>> 0;
                byteLength = byteLength >>> 0;
                if (!noAssert) {
                    checkOffset(offset, byteLength, this.length);
                }
                var val = this[offset + --byteLength];
                var mul = 1;
                while (byteLength > 0 && (mul *= 256)) {
                    val += this[offset + --byteLength] * mul;
                }
                return val;
            };
            Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {
                offset = offset >>> 0;
                if (!noAssert)
                    checkOffset(offset, 1, this.length);
                return this[offset];
            };
            Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {
                offset = offset >>> 0;
                if (!noAssert)
                    checkOffset(offset, 2, this.length);
                return this[offset] | this[offset + 1] << 8;
            };
            Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {
                offset = offset >>> 0;
                if (!noAssert)
                    checkOffset(offset, 2, this.length);
                return this[offset] << 8 | this[offset + 1];
            };
            Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {
                offset = offset >>> 0;
                if (!noAssert)
                    checkOffset(offset, 4, this.length);
                return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 16777216;
            };
            Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {
                offset = offset >>> 0;
                if (!noAssert)
                    checkOffset(offset, 4, this.length);
                return this[offset] * 16777216 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);
            };
            Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {
                offset = offset >>> 0;
                byteLength = byteLength >>> 0;
                if (!noAssert)
                    checkOffset(offset, byteLength, this.length);
                var val = this[offset];
                var mul = 1;
                var i = 0;
                while (++i < byteLength && (mul *= 256)) {
                    val += this[offset + i] * mul;
                }
                mul *= 128;
                if (val >= mul)
                    val -= Math.pow(2, 8 * byteLength);
                return val;
            };
            Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {
                offset = offset >>> 0;
                byteLength = byteLength >>> 0;
                if (!noAssert)
                    checkOffset(offset, byteLength, this.length);
                var i = byteLength;
                var mul = 1;
                var val = this[offset + --i];
                while (i > 0 && (mul *= 256)) {
                    val += this[offset + --i] * mul;
                }
                mul *= 128;
                if (val >= mul)
                    val -= Math.pow(2, 8 * byteLength);
                return val;
            };
            Buffer.prototype.readInt8 = function readInt8(offset, noAssert) {
                offset = offset >>> 0;
                if (!noAssert)
                    checkOffset(offset, 1, this.length);
                if (!(this[offset] & 128))
                    return this[offset];
                return (255 - this[offset] + 1) * -1;
            };
            Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {
                offset = offset >>> 0;
                if (!noAssert)
                    checkOffset(offset, 2, this.length);
                var val = this[offset] | this[offset + 1] << 8;
                return val & 32768 ? val | 4294901760 : val;
            };
            Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {
                offset = offset >>> 0;
                if (!noAssert)
                    checkOffset(offset, 2, this.length);
                var val = this[offset + 1] | this[offset] << 8;
                return val & 32768 ? val | 4294901760 : val;
            };
            Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {
                offset = offset >>> 0;
                if (!noAssert)
                    checkOffset(offset, 4, this.length);
                return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;
            };
            Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {
                offset = offset >>> 0;
                if (!noAssert)
                    checkOffset(offset, 4, this.length);
                return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];
            };
            Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {
                offset = offset >>> 0;
                if (!noAssert)
                    checkOffset(offset, 4, this.length);
                return ieee754.read(this, offset, true, 23, 4);
            };
            Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {
                offset = offset >>> 0;
                if (!noAssert)
                    checkOffset(offset, 4, this.length);
                return ieee754.read(this, offset, false, 23, 4);
            };
            Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {
                offset = offset >>> 0;
                if (!noAssert)
                    checkOffset(offset, 8, this.length);
                return ieee754.read(this, offset, true, 52, 8);
            };
            Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {
                offset = offset >>> 0;
                if (!noAssert)
                    checkOffset(offset, 8, this.length);
                return ieee754.read(this, offset, false, 52, 8);
            };
            function checkInt(buf, value, offset, ext, max, min) {
                if (!Buffer.isBuffer(buf))
                    throw new TypeError('"buffer" argument must be a Buffer instance');
                if (value > max || value < min)
                    throw new RangeError('"value" argument is out of bounds');
                if (offset + ext > buf.length)
                    throw new RangeError('Index out of range');
            }
            Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {
                value = +value;
                offset = offset >>> 0;
                byteLength = byteLength >>> 0;
                if (!noAssert) {
                    var maxBytes = Math.pow(2, 8 * byteLength) - 1;
                    checkInt(this, value, offset, byteLength, maxBytes, 0);
                }
                var mul = 1;
                var i = 0;
                this[offset] = value & 255;
                while (++i < byteLength && (mul *= 256)) {
                    this[offset + i] = value / mul & 255;
                }
                return offset + byteLength;
            };
            Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {
                value = +value;
                offset = offset >>> 0;
                byteLength = byteLength >>> 0;
                if (!noAssert) {
                    var maxBytes = Math.pow(2, 8 * byteLength) - 1;
                    checkInt(this, value, offset, byteLength, maxBytes, 0);
                }
                var i = byteLength - 1;
                var mul = 1;
                this[offset + i] = value & 255;
                while (--i >= 0 && (mul *= 256)) {
                    this[offset + i] = value / mul & 255;
                }
                return offset + byteLength;
            };
            Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {
                value = +value;
                offset = offset >>> 0;
                if (!noAssert)
                    checkInt(this, value, offset, 1, 255, 0);
                this[offset] = value & 255;
                return offset + 1;
            };
            Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {
                value = +value;
                offset = offset >>> 0;
                if (!noAssert)
                    checkInt(this, value, offset, 2, 65535, 0);
                this[offset] = value & 255;
                this[offset + 1] = value >>> 8;
                return offset + 2;
            };
            Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {
                value = +value;
                offset = offset >>> 0;
                if (!noAssert)
                    checkInt(this, value, offset, 2, 65535, 0);
                this[offset] = value >>> 8;
                this[offset + 1] = value & 255;
                return offset + 2;
            };
            Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {
                value = +value;
                offset = offset >>> 0;
                if (!noAssert)
                    checkInt(this, value, offset, 4, 4294967295, 0);
                this[offset + 3] = value >>> 24;
                this[offset + 2] = value >>> 16;
                this[offset + 1] = value >>> 8;
                this[offset] = value & 255;
                return offset + 4;
            };
            Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {
                value = +value;
                offset = offset >>> 0;
                if (!noAssert)
                    checkInt(this, value, offset, 4, 4294967295, 0);
                this[offset] = value >>> 24;
                this[offset + 1] = value >>> 16;
                this[offset + 2] = value >>> 8;
                this[offset + 3] = value & 255;
                return offset + 4;
            };
            Buffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {
                value = +value;
                offset = offset >>> 0;
                if (!noAssert) {
                    var limit = Math.pow(2, 8 * byteLength - 1);
                    checkInt(this, value, offset, byteLength, limit - 1, -limit);
                }
                var i = 0;
                var mul = 1;
                var sub = 0;
                this[offset] = value & 255;
                while (++i < byteLength && (mul *= 256)) {
                    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
                        sub = 1;
                    }
                    this[offset + i] = (value / mul >> 0) - sub & 255;
                }
                return offset + byteLength;
            };
            Buffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {
                value = +value;
                offset = offset >>> 0;
                if (!noAssert) {
                    var limit = Math.pow(2, 8 * byteLength - 1);
                    checkInt(this, value, offset, byteLength, limit - 1, -limit);
                }
                var i = byteLength - 1;
                var mul = 1;
                var sub = 0;
                this[offset + i] = value & 255;
                while (--i >= 0 && (mul *= 256)) {
                    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
                        sub = 1;
                    }
                    this[offset + i] = (value / mul >> 0) - sub & 255;
                }
                return offset + byteLength;
            };
            Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {
                value = +value;
                offset = offset >>> 0;
                if (!noAssert)
                    checkInt(this, value, offset, 1, 127, -128);
                if (value < 0)
                    value = 255 + value + 1;
                this[offset] = value & 255;
                return offset + 1;
            };
            Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {
                value = +value;
                offset = offset >>> 0;
                if (!noAssert)
                    checkInt(this, value, offset, 2, 32767, -32768);
                this[offset] = value & 255;
                this[offset + 1] = value >>> 8;
                return offset + 2;
            };
            Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {
                value = +value;
                offset = offset >>> 0;
                if (!noAssert)
                    checkInt(this, value, offset, 2, 32767, -32768);
                this[offset] = value >>> 8;
                this[offset + 1] = value & 255;
                return offset + 2;
            };
            Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {
                value = +value;
                offset = offset >>> 0;
                if (!noAssert)
                    checkInt(this, value, offset, 4, 2147483647, -2147483648);
                this[offset] = value & 255;
                this[offset + 1] = value >>> 8;
                this[offset + 2] = value >>> 16;
                this[offset + 3] = value >>> 24;
                return offset + 4;
            };
            Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {
                value = +value;
                offset = offset >>> 0;
                if (!noAssert)
                    checkInt(this, value, offset, 4, 2147483647, -2147483648);
                if (value < 0)
                    value = 4294967295 + value + 1;
                this[offset] = value >>> 24;
                this[offset + 1] = value >>> 16;
                this[offset + 2] = value >>> 8;
                this[offset + 3] = value & 255;
                return offset + 4;
            };
            function checkIEEE754(buf, value, offset, ext, max, min) {
                if (offset + ext > buf.length)
                    throw new RangeError('Index out of range');
                if (offset < 0)
                    throw new RangeError('Index out of range');
            }
            function writeFloat(buf, value, offset, littleEndian, noAssert) {
                value = +value;
                offset = offset >>> 0;
                if (!noAssert) {
                    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38);
                }
                ieee754.write(buf, value, offset, littleEndian, 23, 4);
                return offset + 4;
            }
            Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {
                return writeFloat(this, value, offset, true, noAssert);
            };
            Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {
                return writeFloat(this, value, offset, false, noAssert);
            };
            function writeDouble(buf, value, offset, littleEndian, noAssert) {
                value = +value;
                offset = offset >>> 0;
                if (!noAssert) {
                    checkIEEE754(buf, value, offset, 8, 1.7976931348623157e+308, -1.7976931348623157e+308);
                }
                ieee754.write(buf, value, offset, littleEndian, 52, 8);
                return offset + 8;
            }
            Buffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {
                return writeDouble(this, value, offset, true, noAssert);
            };
            Buffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {
                return writeDouble(this, value, offset, false, noAssert);
            };
            Buffer.prototype.copy = function copy(target, targetStart, start, end) {
                if (!Buffer.isBuffer(target))
                    throw new TypeError('argument should be a Buffer');
                if (!start)
                    start = 0;
                if (!end && end !== 0)
                    end = this.length;
                if (targetStart >= target.length)
                    targetStart = target.length;
                if (!targetStart)
                    targetStart = 0;
                if (end > 0 && end < start)
                    end = start;
                if (end === start)
                    return 0;
                if (target.length === 0 || this.length === 0)
                    return 0;
                if (targetStart < 0) {
                    throw new RangeError('targetStart out of bounds');
                }
                if (start < 0 || start >= this.length)
                    throw new RangeError('Index out of range');
                if (end < 0)
                    throw new RangeError('sourceEnd out of bounds');
                if (end > this.length)
                    end = this.length;
                if (target.length - targetStart < end - start) {
                    end = target.length - targetStart + start;
                }
                var len = end - start;
                if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {
                    this.copyWithin(targetStart, start, end);
                } else if (this === target && start < targetStart && targetStart < end) {
                    for (var i = len - 1; i >= 0; --i) {
                        target[i + targetStart] = this[i + start];
                    }
                } else {
                    Uint8Array.prototype.set.call(target, this.subarray(start, end), targetStart);
                }
                return len;
            };
            Buffer.prototype.fill = function fill(val, start, end, encoding) {
                if (typeof val === 'string') {
                    if (typeof start === 'string') {
                        encoding = start;
                        start = 0;
                        end = this.length;
                    } else if (typeof end === 'string') {
                        encoding = end;
                        end = this.length;
                    }
                    if (encoding !== undefined && typeof encoding !== 'string') {
                        throw new TypeError('encoding must be a string');
                    }
                    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
                        throw new TypeError('Unknown encoding: ' + encoding);
                    }
                    if (val.length === 1) {
                        var code = val.charCodeAt(0);
                        if (encoding === 'utf8' && code < 128 || encoding === 'latin1') {
                            val = code;
                        }
                    }
                } else if (typeof val === 'number') {
                    val = val & 255;
                }
                if (start < 0 || this.length < start || this.length < end) {
                    throw new RangeError('Out of range index');
                }
                if (end <= start) {
                    return this;
                }
                start = start >>> 0;
                end = end === undefined ? this.length : end >>> 0;
                if (!val)
                    val = 0;
                var i;
                if (typeof val === 'number') {
                    for (i = start; i < end; ++i) {
                        this[i] = val;
                    }
                } else {
                    var bytes = Buffer.isBuffer(val) ? val : Buffer.from(val, encoding);
                    var len = bytes.length;
                    if (len === 0) {
                        throw new TypeError('The value "' + val + '" is invalid for argument "value"');
                    }
                    for (i = 0; i < end - start; ++i) {
                        this[i + start] = bytes[i % len];
                    }
                }
                return this;
            };
            var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;
            function base64clean(str) {
                str = str.split('=')[0];
                str = str.trim().replace(INVALID_BASE64_RE, '');
                if (str.length < 2)
                    return '';
                while (str.length % 4 !== 0) {
                    str = str + '=';
                }
                return str;
            }
            function toHex(n) {
                if (n < 16)
                    return '0' + n.toString(16);
                return n.toString(16);
            }
            function utf8ToBytes(string, units) {
                units = units || Infinity;
                var codePoint;
                var length = string.length;
                var leadSurrogate = null;
                var bytes = [];
                for (var i = 0; i < length; ++i) {
                    codePoint = string.charCodeAt(i);
                    if (codePoint > 55295 && codePoint < 57344) {
                        if (!leadSurrogate) {
                            if (codePoint > 56319) {
                                if ((units -= 3) > -1)
                                    bytes.push(239, 191, 189);
                                continue;
                            } else if (i + 1 === length) {
                                if ((units -= 3) > -1)
                                    bytes.push(239, 191, 189);
                                continue;
                            }
                            leadSurrogate = codePoint;
                            continue;
                        }
                        if (codePoint < 56320) {
                            if ((units -= 3) > -1)
                                bytes.push(239, 191, 189);
                            leadSurrogate = codePoint;
                            continue;
                        }
                        codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536;
                    } else if (leadSurrogate) {
                        if ((units -= 3) > -1)
                            bytes.push(239, 191, 189);
                    }
                    leadSurrogate = null;
                    if (codePoint < 128) {
                        if ((units -= 1) < 0)
                            break;
                        bytes.push(codePoint);
                    } else if (codePoint < 2048) {
                        if ((units -= 2) < 0)
                            break;
                        bytes.push(codePoint >> 6 | 192, codePoint & 63 | 128);
                    } else if (codePoint < 65536) {
                        if ((units -= 3) < 0)
                            break;
                        bytes.push(codePoint >> 12 | 224, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);
                    } else if (codePoint < 1114112) {
                        if ((units -= 4) < 0)
                            break;
                        bytes.push(codePoint >> 18 | 240, codePoint >> 12 & 63 | 128, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);
                    } else {
                        throw new Error('Invalid code point');
                    }
                }
                return bytes;
            }
            function asciiToBytes(str) {
                var byteArray = [];
                for (var i = 0; i < str.length; ++i) {
                    byteArray.push(str.charCodeAt(i) & 255);
                }
                return byteArray;
            }
            function utf16leToBytes(str, units) {
                var c, hi, lo;
                var byteArray = [];
                for (var i = 0; i < str.length; ++i) {
                    if ((units -= 2) < 0)
                        break;
                    c = str.charCodeAt(i);
                    hi = c >> 8;
                    lo = c % 256;
                    byteArray.push(lo);
                    byteArray.push(hi);
                }
                return byteArray;
            }
            function base64ToBytes(str) {
                return base64.toByteArray(base64clean(str));
            }
            function blitBuffer(src, dst, offset, length) {
                for (var i = 0; i < length; ++i) {
                    if (i + offset >= dst.length || i >= src.length)
                        break;
                    dst[i + offset] = src[i];
                }
                return i;
            }
            function isInstance(obj, type) {
                return obj instanceof type || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name;
            }
            function numberIsNaN(obj) {
                return obj !== obj;
            }
        },
        {
            'base64-js': 18,
            'ieee754': 102
        }
    ],
    51: [
        function (_dereq_, module, exports) {
            var Buffer = _dereq_('safe-buffer').Buffer;
            var Transform = _dereq_('stream').Transform;
            var StringDecoder = _dereq_('string_decoder').StringDecoder;
            var inherits = _dereq_('inherits');
            function CipherBase(hashMode) {
                Transform.call(this);
                this.hashMode = typeof hashMode === 'string';
                if (this.hashMode) {
                    this[hashMode] = this._finalOrDigest;
                } else {
                    this.final = this._finalOrDigest;
                }
                if (this._final) {
                    this.__final = this._final;
                    this._final = null;
                }
                this._decoder = null;
                this._encoding = null;
            }
            inherits(CipherBase, Transform);
            CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
                if (typeof data === 'string') {
                    data = Buffer.from(data, inputEnc);
                }
                var outData = this._update(data);
                if (this.hashMode)
                    return this;
                if (outputEnc) {
                    outData = this._toString(outData, outputEnc);
                }
                return outData;
            };
            CipherBase.prototype.setAutoPadding = function () {
            };
            CipherBase.prototype.getAuthTag = function () {
                throw new Error('trying to get auth tag in unsupported state');
            };
            CipherBase.prototype.setAuthTag = function () {
                throw new Error('trying to set auth tag in unsupported state');
            };
            CipherBase.prototype.setAAD = function () {
                throw new Error('trying to set aad in unsupported state');
            };
            CipherBase.prototype._transform = function (data, _, next) {
                var err;
                try {
                    if (this.hashMode) {
                        this._update(data);
                    } else {
                        this.push(this._update(data));
                    }
                } catch (e) {
                    err = e;
                } finally {
                    next(err);
                }
            };
            CipherBase.prototype._flush = function (done) {
                var err;
                try {
                    this.push(this.__final());
                } catch (e) {
                    err = e;
                }
                done(err);
            };
            CipherBase.prototype._finalOrDigest = function (outputEnc) {
                var outData = this.__final() || Buffer.alloc(0);
                if (outputEnc) {
                    outData = this._toString(outData, outputEnc, true);
                }
                return outData;
            };
            CipherBase.prototype._toString = function (value, enc, fin) {
                if (!this._decoder) {
                    this._decoder = new StringDecoder(enc);
                    this._encoding = enc;
                }
                if (this._encoding !== enc)
                    throw new Error('can\'t switch encodings');
                var out = this._decoder.write(value);
                if (fin) {
                    out += this._decoder.end();
                }
                return out;
            };
            module.exports = CipherBase;
        },
        {
            'inherits': 103,
            'safe-buffer': 145,
            'stream': 236,
            'string_decoder': 237
        }
    ],
    52: [
        function (_dereq_, module, exports) {
            (function (Buffer) {
                function isArray(arg) {
                    if (Array.isArray) {
                        return Array.isArray(arg);
                    }
                    return objectToString(arg) === '[object Array]';
                }
                exports.isArray = isArray;
                function isBoolean(arg) {
                    return typeof arg === 'boolean';
                }
                exports.isBoolean = isBoolean;
                function isNull(arg) {
                    return arg === null;
                }
                exports.isNull = isNull;
                function isNullOrUndefined(arg) {
                    return arg == null;
                }
                exports.isNullOrUndefined = isNullOrUndefined;
                function isNumber(arg) {
                    return typeof arg === 'number';
                }
                exports.isNumber = isNumber;
                function isString(arg) {
                    return typeof arg === 'string';
                }
                exports.isString = isString;
                function isSymbol(arg) {
                    return typeof arg === 'symbol';
                }
                exports.isSymbol = isSymbol;
                function isUndefined(arg) {
                    return arg === void 0;
                }
                exports.isUndefined = isUndefined;
                function isRegExp(re) {
                    return objectToString(re) === '[object RegExp]';
                }
                exports.isRegExp = isRegExp;
                function isObject(arg) {
                    return typeof arg === 'object' && arg !== null;
                }
                exports.isObject = isObject;
                function isDate(d) {
                    return objectToString(d) === '[object Date]';
                }
                exports.isDate = isDate;
                function isError(e) {
                    return objectToString(e) === '[object Error]' || e instanceof Error;
                }
                exports.isError = isError;
                function isFunction(arg) {
                    return typeof arg === 'function';
                }
                exports.isFunction = isFunction;
                function isPrimitive(arg) {
                    return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || typeof arg === 'symbol' || typeof arg === 'undefined';
                }
                exports.isPrimitive = isPrimitive;
                exports.isBuffer = Buffer.isBuffer;
                function objectToString(o) {
                    return Object.prototype.toString.call(o);
                }
            }.call(this, { 'isBuffer': _dereq_('../../is-buffer/index.js') }));
        },
        { '../../is-buffer/index.js': 104 }
    ],
    53: [
        function (_dereq_, module, exports) {
            (function (Buffer) {
                var elliptic = _dereq_('elliptic');
                var BN = _dereq_('bn.js');
                module.exports = function createECDH(curve) {
                    return new ECDH(curve);
                };
                var aliases = {
                    secp256k1: {
                        name: 'secp256k1',
                        byteLength: 32
                    },
                    secp224r1: {
                        name: 'p224',
                        byteLength: 28
                    },
                    prime256v1: {
                        name: 'p256',
                        byteLength: 32
                    },
                    prime192v1: {
                        name: 'p192',
                        byteLength: 24
                    },
                    ed25519: {
                        name: 'ed25519',
                        byteLength: 32
                    },
                    secp384r1: {
                        name: 'p384',
                        byteLength: 48
                    },
                    secp521r1: {
                        name: 'p521',
                        byteLength: 66
                    }
                };
                aliases.p224 = aliases.secp224r1;
                aliases.p256 = aliases.secp256r1 = aliases.prime256v1;
                aliases.p192 = aliases.secp192r1 = aliases.prime192v1;
                aliases.p384 = aliases.secp384r1;
                aliases.p521 = aliases.secp521r1;
                function ECDH(curve) {
                    this.curveType = aliases[curve];
                    if (!this.curveType) {
                        this.curveType = { name: curve };
                    }
                    this.curve = new elliptic.ec(this.curveType.name);
                    this.keys = void 0;
                }
                ECDH.prototype.generateKeys = function (enc, format) {
                    this.keys = this.curve.genKeyPair();
                    return this.getPublicKey(enc, format);
                };
                ECDH.prototype.computeSecret = function (other, inenc, enc) {
                    inenc = inenc || 'utf8';
                    if (!Buffer.isBuffer(other)) {
                        other = new Buffer(other, inenc);
                    }
                    var otherPub = this.curve.keyFromPublic(other).getPublic();
                    var out = otherPub.mul(this.keys.getPrivate()).getX();
                    return formatReturnValue(out, enc, this.curveType.byteLength);
                };
                ECDH.prototype.getPublicKey = function (enc, format) {
                    var key = this.keys.getPublic(format === 'compressed', true);
                    if (format === 'hybrid') {
                        if (key[key.length - 1] % 2) {
                            key[0] = 7;
                        } else {
                            key[0] = 6;
                        }
                    }
                    return formatReturnValue(key, enc);
                };
                ECDH.prototype.getPrivateKey = function (enc) {
                    return formatReturnValue(this.keys.getPrivate(), enc);
                };
                ECDH.prototype.setPublicKey = function (pub, enc) {
                    enc = enc || 'utf8';
                    if (!Buffer.isBuffer(pub)) {
                        pub = new Buffer(pub, enc);
                    }
                    this.keys._importPublic(pub);
                    return this;
                };
                ECDH.prototype.setPrivateKey = function (priv, enc) {
                    enc = enc || 'utf8';
                    if (!Buffer.isBuffer(priv)) {
                        priv = new Buffer(priv, enc);
                    }
                    var _priv = new BN(priv);
                    _priv = _priv.toString(16);
                    this.keys = this.curve.genKeyPair();
                    this.keys._importPrivate(_priv);
                    return this;
                };
                function formatReturnValue(bn, enc, len) {
                    if (!Array.isArray(bn)) {
                        bn = bn.toArray();
                    }
                    var buf = new Buffer(bn);
                    if (len && buf.length < len) {
                        var zeros = new Buffer(len - buf.length);
                        zeros.fill(0);
                        buf = Buffer.concat([
                            zeros,
                            buf
                        ]);
                    }
                    if (!enc) {
                        return buf;
                    } else {
                        return buf.toString(enc);
                    }
                }
            }.call(this, _dereq_('buffer').Buffer));
        },
        {
            'bn.js': 19,
            'buffer': 50,
            'elliptic': 69
        }
    ],
    54: [
        function (_dereq_, module, exports) {
            'use strict';
            var inherits = _dereq_('inherits');
            var MD5 = _dereq_('md5.js');
            var RIPEMD160 = _dereq_('ripemd160');
            var sha = _dereq_('sha.js');
            var Base = _dereq_('cipher-base');
            function Hash(hash) {
                Base.call(this, 'digest');
                this._hash = hash;
            }
            inherits(Hash, Base);
            Hash.prototype._update = function (data) {
                this._hash.update(data);
            };
            Hash.prototype._final = function () {
                return this._hash.digest();
            };
            module.exports = function createHash(alg) {
                alg = alg.toLowerCase();
                if (alg === 'md5')
                    return new MD5();
                if (alg === 'rmd160' || alg === 'ripemd160')
                    return new RIPEMD160();
                return new Hash(sha(alg));
            };
        },
        {
            'cipher-base': 51,
            'inherits': 103,
            'md5.js': 106,
            'ripemd160': 144,
            'sha.js': 147
        }
    ],
    55: [
        function (_dereq_, module, exports) {
            var MD5 = _dereq_('md5.js');
            module.exports = function (buffer) {
                return new MD5().update(buffer).digest();
            };
        },
        { 'md5.js': 106 }
    ],
    56: [
        function (_dereq_, module, exports) {
            'use strict';
            var inherits = _dereq_('inherits');
            var Legacy = _dereq_('./legacy');
            var Base = _dereq_('cipher-base');
            var Buffer = _dereq_('safe-buffer').Buffer;
            var md5 = _dereq_('create-hash/md5');
            var RIPEMD160 = _dereq_('ripemd160');
            var sha = _dereq_('sha.js');
            var ZEROS = Buffer.alloc(128);
            function Hmac(alg, key) {
                Base.call(this, 'digest');
                if (typeof key === 'string') {
                    key = Buffer.from(key);
                }
                var blocksize = alg === 'sha512' || alg === 'sha384' ? 128 : 64;
                this._alg = alg;
                this._key = key;
                if (key.length > blocksize) {
                    var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg);
                    key = hash.update(key).digest();
                } else if (key.length < blocksize) {
                    key = Buffer.concat([
                        key,
                        ZEROS
                    ], blocksize);
                }
                var ipad = this._ipad = Buffer.allocUnsafe(blocksize);
                var opad = this._opad = Buffer.allocUnsafe(blocksize);
                for (var i = 0; i < blocksize; i++) {
                    ipad[i] = key[i] ^ 54;
                    opad[i] = key[i] ^ 92;
                }
                this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg);
                this._hash.update(ipad);
            }
            inherits(Hmac, Base);
            Hmac.prototype._update = function (data) {
                this._hash.update(data);
            };
            Hmac.prototype._final = function () {
                var h = this._hash.digest();
                var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg);
                return hash.update(this._opad).update(h).digest();
            };
            module.exports = function createHmac(alg, key) {
                alg = alg.toLowerCase();
                if (alg === 'rmd160' || alg === 'ripemd160') {
                    return new Hmac('rmd160', key);
                }
                if (alg === 'md5') {
                    return new Legacy(md5, key);
                }
                return new Hmac(alg, key);
            };
        },
        {
            './legacy': 57,
            'cipher-base': 51,
            'create-hash/md5': 55,
            'inherits': 103,
            'ripemd160': 144,
            'safe-buffer': 145,
            'sha.js': 147
        }
    ],
    57: [
        function (_dereq_, module, exports) {
            'use strict';
            var inherits = _dereq_('inherits');
            var Buffer = _dereq_('safe-buffer').Buffer;
            var Base = _dereq_('cipher-base');
            var ZEROS = Buffer.alloc(128);
            var blocksize = 64;
            function Hmac(alg, key) {
                Base.call(this, 'digest');
                if (typeof key === 'string') {
                    key = Buffer.from(key);
                }
                this._alg = alg;
                this._key = key;
                if (key.length > blocksize) {
                    key = alg(key);
                } else if (key.length < blocksize) {
                    key = Buffer.concat([
                        key,
                        ZEROS
                    ], blocksize);
                }
                var ipad = this._ipad = Buffer.allocUnsafe(blocksize);
                var opad = this._opad = Buffer.allocUnsafe(blocksize);
                for (var i = 0; i < blocksize; i++) {
                    ipad[i] = key[i] ^ 54;
                    opad[i] = key[i] ^ 92;
                }
                this._hash = [ipad];
            }
            inherits(Hmac, Base);
            Hmac.prototype._update = function (data) {
                this._hash.push(data);
            };
            Hmac.prototype._final = function () {
                var h = this._alg(Buffer.concat(this._hash));
                return this._alg(Buffer.concat([
                    this._opad,
                    h
                ]));
            };
            module.exports = Hmac;
        },
        {
            'cipher-base': 51,
            'inherits': 103,
            'safe-buffer': 145
        }
    ],
    58: [
        function (_dereq_, module, exports) {
            'use strict';
            exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = _dereq_('randombytes');
            exports.createHash = exports.Hash = _dereq_('create-hash');
            exports.createHmac = exports.Hmac = _dereq_('create-hmac');
            var algos = _dereq_('browserify-sign/algos');
            var algoKeys = Object.keys(algos);
            var hashes = [
                'sha1',
                'sha224',
                'sha256',
                'sha384',
                'sha512',
                'md5',
                'rmd160'
            ].concat(algoKeys);
            exports.getHashes = function () {
                return hashes;
            };
            var p = _dereq_('pbkdf2');
            exports.pbkdf2 = p.pbkdf2;
            exports.pbkdf2Sync = p.pbkdf2Sync;
            var aes = _dereq_('browserify-cipher');
            exports.Cipher = aes.Cipher;
            exports.createCipher = aes.createCipher;
            exports.Cipheriv = aes.Cipheriv;
            exports.createCipheriv = aes.createCipheriv;
            exports.Decipher = aes.Decipher;
            exports.createDecipher = aes.createDecipher;
            exports.Decipheriv = aes.Decipheriv;
            exports.createDecipheriv = aes.createDecipheriv;
            exports.getCiphers = aes.getCiphers;
            exports.listCiphers = aes.listCiphers;
            var dh = _dereq_('diffie-hellman');
            exports.DiffieHellmanGroup = dh.DiffieHellmanGroup;
            exports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup;
            exports.getDiffieHellman = dh.getDiffieHellman;
            exports.createDiffieHellman = dh.createDiffieHellman;
            exports.DiffieHellman = dh.DiffieHellman;
            var sign = _dereq_('browserify-sign');
            exports.createSign = sign.createSign;
            exports.Sign = sign.Sign;
            exports.createVerify = sign.createVerify;
            exports.Verify = sign.Verify;
            exports.createECDH = _dereq_('create-ecdh');
            var publicEncrypt = _dereq_('public-encrypt');
            exports.publicEncrypt = publicEncrypt.publicEncrypt;
            exports.privateEncrypt = publicEncrypt.privateEncrypt;
            exports.publicDecrypt = publicEncrypt.publicDecrypt;
            exports.privateDecrypt = publicEncrypt.privateDecrypt;
            var rf = _dereq_('randomfill');
            exports.randomFill = rf.randomFill;
            exports.randomFillSync = rf.randomFillSync;
            exports.createCredentials = function () {
                throw new Error([
                    'sorry, createCredentials is not implemented yet',
                    'we accept pull requests',
                    'https://github.com/crypto-browserify/crypto-browserify'
                ].join('\n'));
            };
            exports.constants = {
                'DH_CHECK_P_NOT_SAFE_PRIME': 2,
                'DH_CHECK_P_NOT_PRIME': 1,
                'DH_UNABLE_TO_CHECK_GENERATOR': 4,
                'DH_NOT_SUITABLE_GENERATOR': 8,
                'NPN_ENABLED': 1,
                'ALPN_ENABLED': 1,
                'RSA_PKCS1_PADDING': 1,
                'RSA_SSLV23_PADDING': 2,
                'RSA_NO_PADDING': 3,
                'RSA_PKCS1_OAEP_PADDING': 4,
                'RSA_X931_PADDING': 5,
                'RSA_PKCS1_PSS_PADDING': 6,
                'POINT_CONVERSION_COMPRESSED': 2,
                'POINT_CONVERSION_UNCOMPRESSED': 4,
                'POINT_CONVERSION_HYBRID': 6
            };
        },
        {
            'browserify-cipher': 39,
            'browserify-sign': 46,
            'browserify-sign/algos': 43,
            'create-ecdh': 53,
            'create-hash': 54,
            'create-hmac': 56,
            'diffie-hellman': 65,
            'pbkdf2': 115,
            'public-encrypt': 122,
            'randombytes': 128,
            'randomfill': 129
        }
    ],
    59: [
        function (_dereq_, module, exports) {
            'use strict';
            exports.utils = _dereq_('./des/utils');
            exports.Cipher = _dereq_('./des/cipher');
            exports.DES = _dereq_('./des/des');
            exports.CBC = _dereq_('./des/cbc');
            exports.EDE = _dereq_('./des/ede');
        },
        {
            './des/cbc': 60,
            './des/cipher': 61,
            './des/des': 62,
            './des/ede': 63,
            './des/utils': 64
        }
    ],
    60: [
        function (_dereq_, module, exports) {
            'use strict';
            var assert = _dereq_('minimalistic-assert');
            var inherits = _dereq_('inherits');
            var proto = {};
            function CBCState(iv) {
                this.iv = new Array(8);
                for (var i = 0; i < this.iv.length; i++)
                    this.iv[i] = iv[i];
            }
            function instantiate(Base) {
                function CBC(options) {
                    Base.call(this, options);
                    this._cbcInit();
                }
                inherits(CBC, Base);
                var keys = Object.keys(proto);
                for (var i = 0; i < keys.length; i++) {
                    var key = keys[i];
                    CBC.prototype[key] = proto[key];
                }
                CBC.create = function create(options) {
                    return new CBC(options);
                };
                return CBC;
            }
            exports.instantiate = instantiate;
            proto._cbcInit = function _cbcInit() {
                var state = new CBCState(this.options.iv);
                this._cbcState = state;
            };
            proto._update = function _update(inp, inOff, out, outOff) {
                var state = this._cbcState;
                var superProto = this.constructor.super_.prototype;
                var iv = state.iv;
                if (this.type === 'encrypt') {
                    for (var i = 0; i < this.blockSize; i++)
                        iv[i] ^= inp[inOff + i];
                    superProto._update.call(this, iv, 0, out, outOff);
                    for (var i = 0; i < this.blockSize; i++)
                        iv[i] = out[outOff + i];
                } else {
                    superProto._update.call(this, inp, inOff, out, outOff);
                    for (var i = 0; i < this.blockSize; i++)
                        out[outOff + i] ^= iv[i];
                    for (var i = 0; i < this.blockSize; i++)
                        iv[i] = inp[inOff + i];
                }
            };
        },
        {
            'inherits': 103,
            'minimalistic-assert': 108
        }
    ],
    61: [
        function (_dereq_, module, exports) {
            'use strict';
            var assert = _dereq_('minimalistic-assert');
            function Cipher(options) {
                this.options = options;
                this.type = this.options.type;
                this.blockSize = 8;
                this._init();
                this.buffer = new Array(this.blockSize);
                this.bufferOff = 0;
            }
            module.exports = Cipher;
            Cipher.prototype._init = function _init() {
            };
            Cipher.prototype.update = function update(data) {
                if (data.length === 0)
                    return [];
                if (this.type === 'decrypt')
                    return this._updateDecrypt(data);
                else
                    return this._updateEncrypt(data);
            };
            Cipher.prototype._buffer = function _buffer(data, off) {
                var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);
                for (var i = 0; i < min; i++)
                    this.buffer[this.bufferOff + i] = data[off + i];
                this.bufferOff += min;
                return min;
            };
            Cipher.prototype._flushBuffer = function _flushBuffer(out, off) {
                this._update(this.buffer, 0, out, off);
                this.bufferOff = 0;
                return this.blockSize;
            };
            Cipher.prototype._updateEncrypt = function _updateEncrypt(data) {
                var inputOff = 0;
                var outputOff = 0;
                var count = (this.bufferOff + data.length) / this.blockSize | 0;
                var out = new Array(count * this.blockSize);
                if (this.bufferOff !== 0) {
                    inputOff += this._buffer(data, inputOff);
                    if (this.bufferOff === this.buffer.length)
                        outputOff += this._flushBuffer(out, outputOff);
                }
                var max = data.length - (data.length - inputOff) % this.blockSize;
                for (; inputOff < max; inputOff += this.blockSize) {
                    this._update(data, inputOff, out, outputOff);
                    outputOff += this.blockSize;
                }
                for (; inputOff < data.length; inputOff++, this.bufferOff++)
                    this.buffer[this.bufferOff] = data[inputOff];
                return out;
            };
            Cipher.prototype._updateDecrypt = function _updateDecrypt(data) {
                var inputOff = 0;
                var outputOff = 0;
                var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;
                var out = new Array(count * this.blockSize);
                for (; count > 0; count--) {
                    inputOff += this._buffer(data, inputOff);
                    outputOff += this._flushBuffer(out, outputOff);
                }
                inputOff += this._buffer(data, inputOff);
                return out;
            };
            Cipher.prototype.final = function final(buffer) {
                var first;
                if (buffer)
                    first = this.update(buffer);
                var last;
                if (this.type === 'encrypt')
                    last = this._finalEncrypt();
                else
                    last = this._finalDecrypt();
                if (first)
                    return first.concat(last);
                else
                    return last;
            };
            Cipher.prototype._pad = function _pad(buffer, off) {
                if (off === 0)
                    return false;
                while (off < buffer.length)
                    buffer[off++] = 0;
                return true;
            };
            Cipher.prototype._finalEncrypt = function _finalEncrypt() {
                if (!this._pad(this.buffer, this.bufferOff))
                    return [];
                var out = new Array(this.blockSize);
                this._update(this.buffer, 0, out, 0);
                return out;
            };
            Cipher.prototype._unpad = function _unpad(buffer) {
                return buffer;
            };
            Cipher.prototype._finalDecrypt = function _finalDecrypt() {
                var out = new Array(this.blockSize);
                this._flushBuffer(out, 0);
                return this._unpad(out);
            };
        },
        { 'minimalistic-assert': 108 }
    ],
    62: [
        function (_dereq_, module, exports) {
            'use strict';
            var assert = _dereq_('minimalistic-assert');
            var inherits = _dereq_('inherits');
            var des = _dereq_('../des');
            var utils = des.utils;
            var Cipher = des.Cipher;
            function DESState() {
                this.tmp = new Array(2);
                this.keys = null;
            }
            function DES(options) {
                Cipher.call(this, options);
                var state = new DESState();
                this._desState = state;
                this.deriveKeys(state, options.key);
            }
            inherits(DES, Cipher);
            module.exports = DES;
            DES.create = function create(options) {
                return new DES(options);
            };
            var shiftTable = [
                1,
                1,
                2,
                2,
                2,
                2,
                2,
                2,
                1,
                2,
                2,
                2,
                2,
                2,
                2,
                1
            ];
            DES.prototype.deriveKeys = function deriveKeys(state, key) {
                state.keys = new Array(16 * 2);
                var kL = utils.readUInt32BE(key, 0);
                var kR = utils.readUInt32BE(key, 4);
                utils.pc1(kL, kR, state.tmp, 0);
                kL = state.tmp[0];
                kR = state.tmp[1];
                for (var i = 0; i < state.keys.length; i += 2) {
                    var shift = shiftTable[i >>> 1];
                    kL = utils.r28shl(kL, shift);
                    kR = utils.r28shl(kR, shift);
                    utils.pc2(kL, kR, state.keys, i);
                }
            };
            DES.prototype._update = function _update(inp, inOff, out, outOff) {
                var state = this._desState;
                var l = utils.readUInt32BE(inp, inOff);
                var r = utils.readUInt32BE(inp, inOff + 4);
                utils.ip(l, r, state.tmp, 0);
                l = state.tmp[0];
                r = state.tmp[1];
                if (this.type === 'encrypt')
                    this._encrypt(state, l, r, state.tmp, 0);
                else
                    this._decrypt(state, l, r, state.tmp, 0);
                l = state.tmp[0];
                r = state.tmp[1];
                utils.writeUInt32BE(out, l, outOff);
                utils.writeUInt32BE(out, r, outOff + 4);
            };
            DES.prototype._pad = function _pad(buffer, off) {
                var value = buffer.length - off;
                for (var i = off; i < buffer.length; i++)
                    buffer[i] = value;
                return true;
            };
            DES.prototype._unpad = function _unpad(buffer) {
                var pad = buffer[buffer.length - 1];
                for (var i = buffer.length - pad; i < buffer.length; i++) {
                }
                return buffer.slice(0, buffer.length - pad);
            };
            DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {
                var l = lStart;
                var r = rStart;
                for (var i = 0; i < state.keys.length; i += 2) {
                    var keyL = state.keys[i];
                    var keyR = state.keys[i + 1];
                    utils.expand(r, state.tmp, 0);
                    keyL ^= state.tmp[0];
                    keyR ^= state.tmp[1];
                    var s = utils.substitute(keyL, keyR);
                    var f = utils.permute(s);
                    var t = r;
                    r = (l ^ f) >>> 0;
                    l = t;
                }
                utils.rip(r, l, out, off);
            };
            DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {
                var l = rStart;
                var r = lStart;
                for (var i = state.keys.length - 2; i >= 0; i -= 2) {
                    var keyL = state.keys[i];
                    var keyR = state.keys[i + 1];
                    utils.expand(l, state.tmp, 0);
                    keyL ^= state.tmp[0];
                    keyR ^= state.tmp[1];
                    var s = utils.substitute(keyL, keyR);
                    var f = utils.permute(s);
                    var t = l;
                    l = (r ^ f) >>> 0;
                    r = t;
                }
                utils.rip(l, r, out, off);
            };
        },
        {
            '../des': 59,
            'inherits': 103,
            'minimalistic-assert': 108
        }
    ],
    63: [
        function (_dereq_, module, exports) {
            'use strict';
            var assert = _dereq_('minimalistic-assert');
            var inherits = _dereq_('inherits');
            var des = _dereq_('../des');
            var Cipher = des.Cipher;
            var DES = des.DES;
            function EDEState(type, key) {
                var k1 = key.slice(0, 8);
                var k2 = key.slice(8, 16);
                var k3 = key.slice(16, 24);
                if (type === 'encrypt') {
                    this.ciphers = [
                        DES.create({
                            type: 'encrypt',
                            key: k1
                        }),
                        DES.create({
                            type: 'decrypt',
                            key: k2
                        }),
                        DES.create({
                            type: 'encrypt',
                            key: k3
                        })
                    ];
                } else {
                    this.ciphers = [
                        DES.create({
                            type: 'decrypt',
                            key: k3
                        }),
                        DES.create({
                            type: 'encrypt',
                            key: k2
                        }),
                        DES.create({
                            type: 'decrypt',
                            key: k1
                        })
                    ];
                }
            }
            function EDE(options) {
                Cipher.call(this, options);
                var state = new EDEState(this.type, this.options.key);
                this._edeState = state;
            }
            inherits(EDE, Cipher);
            module.exports = EDE;
            EDE.create = function create(options) {
                return new EDE(options);
            };
            EDE.prototype._update = function _update(inp, inOff, out, outOff) {
                var state = this._edeState;
                state.ciphers[0]._update(inp, inOff, out, outOff);
                state.ciphers[1]._update(out, outOff, out, outOff);
                state.ciphers[2]._update(out, outOff, out, outOff);
            };
            EDE.prototype._pad = DES.prototype._pad;
            EDE.prototype._unpad = DES.prototype._unpad;
        },
        {
            '../des': 59,
            'inherits': 103,
            'minimalistic-assert': 108
        }
    ],
    64: [
        function (_dereq_, module, exports) {
            'use strict';
            exports.readUInt32BE = function readUInt32BE(bytes, off) {
                var res = bytes[0 + off] << 24 | bytes[1 + off] << 16 | bytes[2 + off] << 8 | bytes[3 + off];
                return res >>> 0;
            };
            exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {
                bytes[0 + off] = value >>> 24;
                bytes[1 + off] = value >>> 16 & 255;
                bytes[2 + off] = value >>> 8 & 255;
                bytes[3 + off] = value & 255;
            };
            exports.ip = function ip(inL, inR, out, off) {
                var outL = 0;
                var outR = 0;
                for (var i = 6; i >= 0; i -= 2) {
                    for (var j = 0; j <= 24; j += 8) {
                        outL <<= 1;
                        outL |= inR >>> j + i & 1;
                    }
                    for (var j = 0; j <= 24; j += 8) {
                        outL <<= 1;
                        outL |= inL >>> j + i & 1;
                    }
                }
                for (var i = 6; i >= 0; i -= 2) {
                    for (var j = 1; j <= 25; j += 8) {
                        outR <<= 1;
                        outR |= inR >>> j + i & 1;
                    }
                    for (var j = 1; j <= 25; j += 8) {
                        outR <<= 1;
                        outR |= inL >>> j + i & 1;
                    }
                }
                out[off + 0] = outL >>> 0;
                out[off + 1] = outR >>> 0;
            };
            exports.rip = function rip(inL, inR, out, off) {
                var outL = 0;
                var outR = 0;
                for (var i = 0; i < 4; i++) {
                    for (var j = 24; j >= 0; j -= 8) {
                        outL <<= 1;
                        outL |= inR >>> j + i & 1;
                        outL <<= 1;
                        outL |= inL >>> j + i & 1;
                    }
                }
                for (var i = 4; i < 8; i++) {
                    for (var j = 24; j >= 0; j -= 8) {
                        outR <<= 1;
                        outR |= inR >>> j + i & 1;
                        outR <<= 1;
                        outR |= inL >>> j + i & 1;
                    }
                }
                out[off + 0] = outL >>> 0;
                out[off + 1] = outR >>> 0;
            };
            exports.pc1 = function pc1(inL, inR, out, off) {
                var outL = 0;
                var outR = 0;
                for (var i = 7; i >= 5; i--) {
                    for (var j = 0; j <= 24; j += 8) {
                        outL <<= 1;
                        outL |= inR >> j + i & 1;
                    }
                    for (var j = 0; j <= 24; j += 8) {
                        outL <<= 1;
                        outL |= inL >> j + i & 1;
                    }
                }
                for (var j = 0; j <= 24; j += 8) {
                    outL <<= 1;
                    outL |= inR >> j + i & 1;
                }
                for (var i = 1; i <= 3; i++) {
                    for (var j = 0; j <= 24; j += 8) {
                        outR <<= 1;
                        outR |= inR >> j + i & 1;
                    }
                    for (var j = 0; j <= 24; j += 8) {
                        outR <<= 1;
                        outR |= inL >> j + i & 1;
                    }
                }
                for (var j = 0; j <= 24; j += 8) {
                    outR <<= 1;
                    outR |= inL >> j + i & 1;
                }
                out[off + 0] = outL >>> 0;
                out[off + 1] = outR >>> 0;
            };
            exports.r28shl = function r28shl(num, shift) {
                return num << shift & 268435455 | num >>> 28 - shift;
            };
            var pc2table = [
                14,
                11,
                17,
                4,
                27,
                23,
                25,
                0,
                13,
                22,
                7,
                18,
                5,
                9,
                16,
                24,
                2,
                20,
                12,
                21,
                1,
                8,
                15,
                26,
                15,
                4,
                25,
                19,
                9,
                1,
                26,
                16,
                5,
                11,
                23,
                8,
                12,
                7,
                17,
                0,
                22,
                3,
                10,
                14,
                6,
                20,
                27,
                24
            ];
            exports.pc2 = function pc2(inL, inR, out, off) {
                var outL = 0;
                var outR = 0;
                var len = pc2table.length >>> 1;
                for (var i = 0; i < len; i++) {
                    outL <<= 1;
                    outL |= inL >>> pc2table[i] & 1;
                }
                for (var i = len; i < pc2table.length; i++) {
                    outR <<= 1;
                    outR |= inR >>> pc2table[i] & 1;
                }
                out[off + 0] = outL >>> 0;
                out[off + 1] = outR >>> 0;
            };
            exports.expand = function expand(r, out, off) {
                var outL = 0;
                var outR = 0;
                outL = (r & 1) << 5 | r >>> 27;
                for (var i = 23; i >= 15; i -= 4) {
                    outL <<= 6;
                    outL |= r >>> i & 63;
                }
                for (var i = 11; i >= 3; i -= 4) {
                    outR |= r >>> i & 63;
                    outR <<= 6;
                }
                outR |= (r & 31) << 1 | r >>> 31;
                out[off + 0] = outL >>> 0;
                out[off + 1] = outR >>> 0;
            };
            var sTable = [
                14,
                0,
                4,
                15,
                13,
                7,
                1,
                4,
                2,
                14,
                15,
                2,
                11,
                13,
                8,
                1,
                3,
                10,
                10,
                6,
                6,
                12,
                12,
                11,
                5,
                9,
                9,
                5,
                0,
                3,
                7,
                8,
                4,
                15,
                1,
                12,
                14,
                8,
                8,
                2,
                13,
                4,
                6,
                9,
                2,
                1,
                11,
                7,
                15,
                5,
                12,
                11,
                9,
                3,
                7,
                14,
                3,
                10,
                10,
                0,
                5,
                6,
                0,
                13,
                15,
                3,
                1,
                13,
                8,
                4,
                14,
                7,
                6,
                15,
                11,
                2,
                3,
                8,
                4,
                14,
                9,
                12,
                7,
                0,
                2,
                1,
                13,
                10,
                12,
                6,
                0,
                9,
                5,
                11,
                10,
                5,
                0,
                13,
                14,
                8,
                7,
                10,
                11,
                1,
                10,
                3,
                4,
                15,
                13,
                4,
                1,
                2,
                5,
                11,
                8,
                6,
                12,
                7,
                6,
                12,
                9,
                0,
                3,
                5,
                2,
                14,
                15,
                9,
                10,
                13,
                0,
                7,
                9,
                0,
                14,
                9,
                6,
                3,
                3,
                4,
                15,
                6,
                5,
                10,
                1,
                2,
                13,
                8,
                12,
                5,
                7,
                14,
                11,
                12,
                4,
                11,
                2,
                15,
                8,
                1,
                13,
                1,
                6,
                10,
                4,
                13,
                9,
                0,
                8,
                6,
                15,
                9,
                3,
                8,
                0,
                7,
                11,
                4,
                1,
                15,
                2,
                14,
                12,
                3,
                5,
                11,
                10,
                5,
                14,
                2,
                7,
                12,
                7,
                13,
                13,
                8,
                14,
                11,
                3,
                5,
                0,
                6,
                6,
                15,
                9,
                0,
                10,
                3,
                1,
                4,
                2,
                7,
                8,
                2,
                5,
                12,
                11,
                1,
                12,
                10,
                4,
                14,
                15,
                9,
                10,
                3,
                6,
                15,
                9,
                0,
                0,
                6,
                12,
                10,
                11,
                1,
                7,
                13,
                13,
                8,
                15,
                9,
                1,
                4,
                3,
                5,
                14,
                11,
                5,
                12,
                2,
                7,
                8,
                2,
                4,
                14,
                2,
                14,
                12,
                11,
                4,
                2,
                1,
                12,
                7,
                4,
                10,
                7,
                11,
                13,
                6,
                1,
                8,
                5,
                5,
                0,
                3,
                15,
                15,
                10,
                13,
                3,
                0,
                9,
                14,
                8,
                9,
                6,
                4,
                11,
                2,
                8,
                1,
                12,
                11,
                7,
                10,
                1,
                13,
                14,
                7,
                2,
                8,
                13,
                15,
                6,
                9,
                15,
                12,
                0,
                5,
                9,
                6,
                10,
                3,
                4,
                0,
                5,
                14,
                3,
                12,
                10,
                1,
                15,
                10,
                4,
                15,
                2,
                9,
                7,
                2,
                12,
                6,
                9,
                8,
                5,
                0,
                6,
                13,
                1,
                3,
                13,
                4,
                14,
                14,
                0,
                7,
                11,
                5,
                3,
                11,
                8,
                9,
                4,
                14,
                3,
                15,
                2,
                5,
                12,
                2,
                9,
                8,
                5,
                12,
                15,
                3,
                10,
                7,
                11,
                0,
                14,
                4,
                1,
                10,
                7,
                1,
                6,
                13,
                0,
                11,
                8,
                6,
                13,
                4,
                13,
                11,
                0,
                2,
                11,
                14,
                7,
                15,
                4,
                0,
                9,
                8,
                1,
                13,
                10,
                3,
                14,
                12,
                3,
                9,
                5,
                7,
                12,
                5,
                2,
                10,
                15,
                6,
                8,
                1,
                6,
                1,
                6,
                4,
                11,
                11,
                13,
                13,
                8,
                12,
                1,
                3,
                4,
                7,
                10,
                14,
                7,
                10,
                9,
                15,
                5,
                6,
                0,
                8,
                15,
                0,
                14,
                5,
                2,
                9,
                3,
                2,
                12,
                13,
                1,
                2,
                15,
                8,
                13,
                4,
                8,
                6,
                10,
                15,
                3,
                11,
                7,
                1,
                4,
                10,
                12,
                9,
                5,
                3,
                6,
                14,
                11,
                5,
                0,
                0,
                14,
                12,
                9,
                7,
                2,
                7,
                2,
                11,
                1,
                4,
                14,
                1,
                7,
                9,
                4,
                12,
                10,
                14,
                8,
                2,
                13,
                0,
                15,
                6,
                12,
                10,
                9,
                13,
                0,
                15,
                3,
                3,
                5,
                5,
                6,
                8,
                11
            ];
            exports.substitute = function substitute(inL, inR) {
                var out = 0;
                for (var i = 0; i < 4; i++) {
                    var b = inL >>> 18 - i * 6 & 63;
                    var sb = sTable[i * 64 + b];
                    out <<= 4;
                    out |= sb;
                }
                for (var i = 0; i < 4; i++) {
                    var b = inR >>> 18 - i * 6 & 63;
                    var sb = sTable[4 * 64 + i * 64 + b];
                    out <<= 4;
                    out |= sb;
                }
                return out >>> 0;
            };
            var permuteTable = [
                16,
                25,
                12,
                11,
                3,
                20,
                4,
                15,
                31,
                17,
                9,
                6,
                27,
                14,
                1,
                22,
                30,
                24,
                8,
                18,
                0,
                5,
                29,
                23,
                13,
                19,
                2,
                26,
                10,
                21,
                28,
                7
            ];
            exports.permute = function permute(num) {
                var out = 0;
                for (var i = 0; i < permuteTable.length; i++) {
                    out <<= 1;
                    out |= num >>> permuteTable[i] & 1;
                }
                return out >>> 0;
            };
            exports.padSplit = function padSplit(num, size, group) {
                var str = num.toString(2);
                while (str.length < size)
                    str = '0' + str;
                var out = [];
                for (var i = 0; i < size; i += group)
                    out.push(str.slice(i, i + group));
                return out.join(' ');
            };
        },
        {}
    ],
    65: [
        function (_dereq_, module, exports) {
            (function (Buffer) {
                var generatePrime = _dereq_('./lib/generatePrime');
                var primes = _dereq_('./lib/primes.json');
                var DH = _dereq_('./lib/dh');
                function getDiffieHellman(mod) {
                    var prime = new Buffer(primes[mod].prime, 'hex');
                    var gen = new Buffer(primes[mod].gen, 'hex');
                    return new DH(prime, gen);
                }
                var ENCODINGS = {
                    'binary': true,
                    'hex': true,
                    'base64': true
                };
                function createDiffieHellman(prime, enc, generator, genc) {
                    if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {
                        return createDiffieHellman(prime, 'binary', enc, generator);
                    }
                    enc = enc || 'binary';
                    genc = genc || 'binary';
                    generator = generator || new Buffer([2]);
                    if (!Buffer.isBuffer(generator)) {
                        generator = new Buffer(generator, genc);
                    }
                    if (typeof prime === 'number') {
                        return new DH(generatePrime(prime, generator), generator, true);
                    }
                    if (!Buffer.isBuffer(prime)) {
                        prime = new Buffer(prime, enc);
                    }
                    return new DH(prime, generator, true);
                }
                exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman;
                exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman;
            }.call(this, _dereq_('buffer').Buffer));
        },
        {
            './lib/dh': 66,
            './lib/generatePrime': 67,
            './lib/primes.json': 68,
            'buffer': 50
        }
    ],
    66: [
        function (_dereq_, module, exports) {
            (function (Buffer) {
                var BN = _dereq_('bn.js');
                var MillerRabin = _dereq_('miller-rabin');
                var millerRabin = new MillerRabin();
                var TWENTYFOUR = new BN(24);
                var ELEVEN = new BN(11);
                var TEN = new BN(10);
                var THREE = new BN(3);
                var SEVEN = new BN(7);
                var primes = _dereq_('./generatePrime');
                var randomBytes = _dereq_('randombytes');
                module.exports = DH;
                function setPublicKey(pub, enc) {
                    enc = enc || 'utf8';
                    if (!Buffer.isBuffer(pub)) {
                        pub = new Buffer(pub, enc);
                    }
                    this._pub = new BN(pub);
                    return this;
                }
                function setPrivateKey(priv, enc) {
                    enc = enc || 'utf8';
                    if (!Buffer.isBuffer(priv)) {
                        priv = new Buffer(priv, enc);
                    }
                    this._priv = new BN(priv);
                    return this;
                }
                var primeCache = {};
                function checkPrime(prime, generator) {
                    var gen = generator.toString('hex');
                    var hex = [
                        gen,
                        prime.toString(16)
                    ].join('_');
                    if (hex in primeCache) {
                        return primeCache[hex];
                    }
                    var error = 0;
                    if (prime.isEven() || !primes.simpleSieve || !primes.fermatTest(prime) || !millerRabin.test(prime)) {
                        error += 1;
                        if (gen === '02' || gen === '05') {
                            error += 8;
                        } else {
                            error += 4;
                        }
                        primeCache[hex] = error;
                        return error;
                    }
                    if (!millerRabin.test(prime.shrn(1))) {
                        error += 2;
                    }
                    var rem;
                    switch (gen) {
                    case '02':
                        if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {
                            error += 8;
                        }
                        break;
                    case '05':
                        rem = prime.mod(TEN);
                        if (rem.cmp(THREE) && rem.cmp(SEVEN)) {
                            error += 8;
                        }
                        break;
                    default:
                        error += 4;
                    }
                    primeCache[hex] = error;
                    return error;
                }
                function DH(prime, generator, malleable) {
                    this.setGenerator(generator);
                    this.__prime = new BN(prime);
                    this._prime = BN.mont(this.__prime);
                    this._primeLen = prime.length;
                    this._pub = undefined;
                    this._priv = undefined;
                    this._primeCode = undefined;
                    if (malleable) {
                        this.setPublicKey = setPublicKey;
                        this.setPrivateKey = setPrivateKey;
                    } else {
                        this._primeCode = 8;
                    }
                }
                Object.defineProperty(DH.prototype, 'verifyError', {
                    enumerable: true,
                    get: function () {
                        if (typeof this._primeCode !== 'number') {
                            this._primeCode = checkPrime(this.__prime, this.__gen);
                        }
                        return this._primeCode;
                    }
                });
                DH.prototype.generateKeys = function () {
                    if (!this._priv) {
                        this._priv = new BN(randomBytes(this._primeLen));
                    }
                    this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();
                    return this.getPublicKey();
                };
                DH.prototype.computeSecret = function (other) {
                    other = new BN(other);
                    other = other.toRed(this._prime);
                    var secret = other.redPow(this._priv).fromRed();
                    var out = new Buffer(secret.toArray());
                    var prime = this.getPrime();
                    if (out.length < prime.length) {
                        var front = new Buffer(prime.length - out.length);
                        front.fill(0);
                        out = Buffer.concat([
                            front,
                            out
                        ]);
                    }
                    return out;
                };
                DH.prototype.getPublicKey = function getPublicKey(enc) {
                    return formatReturnValue(this._pub, enc);
                };
                DH.prototype.getPrivateKey = function getPrivateKey(enc) {
                    return formatReturnValue(this._priv, enc);
                };
                DH.prototype.getPrime = function (enc) {
                    return formatReturnValue(this.__prime, enc);
                };
                DH.prototype.getGenerator = function (enc) {
                    return formatReturnValue(this._gen, enc);
                };
                DH.prototype.setGenerator = function (gen, enc) {
                    enc = enc || 'utf8';
                    if (!Buffer.isBuffer(gen)) {
                        gen = new Buffer(gen, enc);
                    }
                    this.__gen = gen;
                    this._gen = new BN(gen);
                    return this;
                };
                function formatReturnValue(bn, enc) {
                    var buf = new Buffer(bn.toArray());
                    if (!enc) {
                        return buf;
                    } else {
                        return buf.toString(enc);
                    }
                }
            }.call(this, _dereq_('buffer').Buffer));
        },
        {
            './generatePrime': 67,
            'bn.js': 19,
            'buffer': 50,
            'miller-rabin': 107,
            'randombytes': 128
        }
    ],
    67: [
        function (_dereq_, module, exports) {
            var randomBytes = _dereq_('randombytes');
            module.exports = findPrime;
            findPrime.simpleSieve = simpleSieve;
            findPrime.fermatTest = fermatTest;
            var BN = _dereq_('bn.js');
            var TWENTYFOUR = new BN(24);
            var MillerRabin = _dereq_('miller-rabin');
            var millerRabin = new MillerRabin();
            var ONE = new BN(1);
            var TWO = new BN(2);
            var FIVE = new BN(5);
            var SIXTEEN = new BN(16);
            var EIGHT = new BN(8);
            var TEN = new BN(10);
            var THREE = new BN(3);
            var SEVEN = new BN(7);
            var ELEVEN = new BN(11);
            var FOUR = new BN(4);
            var TWELVE = new BN(12);
            var primes = null;
            function _getPrimes() {
                if (primes !== null)
                    return primes;
                var limit = 1048576;
                var res = [];
                res[0] = 2;
                for (var i = 1, k = 3; k < limit; k += 2) {
                    var sqrt = Math.ceil(Math.sqrt(k));
                    for (var j = 0; j < i && res[j] <= sqrt; j++)
                        if (k % res[j] === 0)
                            break;
                    if (i !== j && res[j] <= sqrt)
                        continue;
                    res[i++] = k;
                }
                primes = res;
                return res;
            }
            function simpleSieve(p) {
                var primes = _getPrimes();
                for (var i = 0; i < primes.length; i++)
                    if (p.modn(primes[i]) === 0) {
                        if (p.cmpn(primes[i]) === 0) {
                            return true;
                        } else {
                            return false;
                        }
                    }
                return true;
            }
            function fermatTest(p) {
                var red = BN.mont(p);
                return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;
            }
            function findPrime(bits, gen) {
                if (bits < 16) {
                    if (gen === 2 || gen === 5) {
                        return new BN([
                            140,
                            123
                        ]);
                    } else {
                        return new BN([
                            140,
                            39
                        ]);
                    }
                }
                gen = new BN(gen);
                var num, n2;
                while (true) {
                    num = new BN(randomBytes(Math.ceil(bits / 8)));
                    while (num.bitLength() > bits) {
                        num.ishrn(1);
                    }
                    if (num.isEven()) {
                        num.iadd(ONE);
                    }
                    if (!num.testn(1)) {
                        num.iadd(TWO);
                    }
                    if (!gen.cmp(TWO)) {
                        while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {
                            num.iadd(FOUR);
                        }
                    } else if (!gen.cmp(FIVE)) {
                        while (num.mod(TEN).cmp(THREE)) {
                            num.iadd(FOUR);
                        }
                    }
                    n2 = num.shrn(1);
                    if (simpleSieve(n2) && simpleSieve(num) && fermatTest(n2) && fermatTest(num) && millerRabin.test(n2) && millerRabin.test(num)) {
                        return num;
                    }
                }
            }
        },
        {
            'bn.js': 19,
            'miller-rabin': 107,
            'randombytes': 128
        }
    ],
    68: [
        function (_dereq_, module, exports) {
            module.exports = {
                'modp1': {
                    'gen': '02',
                    'prime': 'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff'
                },
                'modp2': {
                    'gen': '02',
                    'prime': 'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff'
                },
                'modp5': {
                    'gen': '02',
                    'prime': 'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff'
                },
                'modp14': {
                    'gen': '02',
                    'prime': 'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff'
                },
                'modp15': {
                    'gen': '02',
                    'prime': 'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff'
                },
                'modp16': {
                    'gen': '02',
                    'prime': 'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff'
                },
                'modp17': {
                    'gen': '02',
                    'prime': 'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff'
                },
                'modp18': {
                    'gen': '02',
                    'prime': 'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff'
                }
            };
        },
        {}
    ],
    69: [
        function (_dereq_, module, exports) {
            'use strict';
            var elliptic = exports;
            elliptic.version = _dereq_('../package.json').version;
            elliptic.utils = _dereq_('./elliptic/utils');
            elliptic.rand = _dereq_('brorand');
            elliptic.curve = _dereq_('./elliptic/curve');
            elliptic.curves = _dereq_('./elliptic/curves');
            elliptic.ec = _dereq_('./elliptic/ec');
            elliptic.eddsa = _dereq_('./elliptic/eddsa');
        },
        {
            '../package.json': 84,
            './elliptic/curve': 72,
            './elliptic/curves': 75,
            './elliptic/ec': 76,
            './elliptic/eddsa': 79,
            './elliptic/utils': 83,
            'brorand': 20
        }
    ],
    70: [
        function (_dereq_, module, exports) {
            'use strict';
            var BN = _dereq_('bn.js');
            var elliptic = _dereq_('../../elliptic');
            var utils = elliptic.utils;
            var getNAF = utils.getNAF;
            var getJSF = utils.getJSF;
            var assert = utils.assert;
            function BaseCurve(type, conf) {
                this.type = type;
                this.p = new BN(conf.p, 16);
                this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
                this.zero = new BN(0).toRed(this.red);
                this.one = new BN(1).toRed(this.red);
                this.two = new BN(2).toRed(this.red);
                this.n = conf.n && new BN(conf.n, 16);
                this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
                this._wnafT1 = new Array(4);
                this._wnafT2 = new Array(4);
                this._wnafT3 = new Array(4);
                this._wnafT4 = new Array(4);
                var adjustCount = this.n && this.p.div(this.n);
                if (!adjustCount || adjustCount.cmpn(100) > 0) {
                    this.redN = null;
                } else {
                    this._maxwellTrick = true;
                    this.redN = this.n.toRed(this.red);
                }
            }
            module.exports = BaseCurve;
            BaseCurve.prototype.point = function point() {
                throw new Error('Not implemented');
            };
            BaseCurve.prototype.validate = function validate() {
                throw new Error('Not implemented');
            };
            BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
                var doubles = p._getDoubles();
                var naf = getNAF(k, 1);
                var I = (1 << doubles.step + 1) - (doubles.step % 2 === 0 ? 2 : 1);
                I /= 3;
                var repr = [];
                for (var j = 0; j < naf.length; j += doubles.step) {
                    var nafW = 0;
                    for (var k = j + doubles.step - 1; k >= j; k--)
                        nafW = (nafW << 1) + naf[k];
                    repr.push(nafW);
                }
                var a = this.jpoint(null, null, null);
                var b = this.jpoint(null, null, null);
                for (var i = I; i > 0; i--) {
                    for (var j = 0; j < repr.length; j++) {
                        var nafW = repr[j];
                        if (nafW === i)
                            b = b.mixedAdd(doubles.points[j]);
                        else if (nafW === -i)
                            b = b.mixedAdd(doubles.points[j].neg());
                    }
                    a = a.add(b);
                }
                return a.toP();
            };
            BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
                var w = 4;
                var nafPoints = p._getNAFPoints(w);
                w = nafPoints.wnd;
                var wnd = nafPoints.points;
                var naf = getNAF(k, w);
                var acc = this.jpoint(null, null, null);
                for (var i = naf.length - 1; i >= 0; i--) {
                    for (var k = 0; i >= 0 && naf[i] === 0; i--)
                        k++;
                    if (i >= 0)
                        k++;
                    acc = acc.dblp(k);
                    if (i < 0)
                        break;
                    var z = naf[i];
                    if (p.type === 'affine') {
                        if (z > 0)
                            acc = acc.mixedAdd(wnd[z - 1 >> 1]);
                        else
                            acc = acc.mixedAdd(wnd[-z - 1 >> 1].neg());
                    } else {
                        if (z > 0)
                            acc = acc.add(wnd[z - 1 >> 1]);
                        else
                            acc = acc.add(wnd[-z - 1 >> 1].neg());
                    }
                }
                return p.type === 'affine' ? acc.toP() : acc;
            };
            BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, points, coeffs, len, jacobianResult) {
                var wndWidth = this._wnafT1;
                var wnd = this._wnafT2;
                var naf = this._wnafT3;
                var max = 0;
                for (var i = 0; i < len; i++) {
                    var p = points[i];
                    var nafPoints = p._getNAFPoints(defW);
                    wndWidth[i] = nafPoints.wnd;
                    wnd[i] = nafPoints.points;
                }
                for (var i = len - 1; i >= 1; i -= 2) {
                    var a = i - 1;
                    var b = i;
                    if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
                        naf[a] = getNAF(coeffs[a], wndWidth[a]);
                        naf[b] = getNAF(coeffs[b], wndWidth[b]);
                        max = Math.max(naf[a].length, max);
                        max = Math.max(naf[b].length, max);
                        continue;
                    }
                    var comb = [
                        points[a],
                        null,
                        null,
                        points[b]
                    ];
                    if (points[a].y.cmp(points[b].y) === 0) {
                        comb[1] = points[a].add(points[b]);
                        comb[2] = points[a].toJ().mixedAdd(points[b].neg());
                    } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
                        comb[1] = points[a].toJ().mixedAdd(points[b]);
                        comb[2] = points[a].add(points[b].neg());
                    } else {
                        comb[1] = points[a].toJ().mixedAdd(points[b]);
                        comb[2] = points[a].toJ().mixedAdd(points[b].neg());
                    }
                    var index = [
                        -3,
                        -1,
                        -5,
                        -7,
                        0,
                        7,
                        5,
                        1,
                        3
                    ];
                    var jsf = getJSF(coeffs[a], coeffs[b]);
                    max = Math.max(jsf[0].length, max);
                    naf[a] = new Array(max);
                    naf[b] = new Array(max);
                    for (var j = 0; j < max; j++) {
                        var ja = jsf[0][j] | 0;
                        var jb = jsf[1][j] | 0;
                        naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
                        naf[b][j] = 0;
                        wnd[a] = comb;
                    }
                }
                var acc = this.jpoint(null, null, null);
                var tmp = this._wnafT4;
                for (var i = max; i >= 0; i--) {
                    var k = 0;
                    while (i >= 0) {
                        var zero = true;
                        for (var j = 0; j < len; j++) {
                            tmp[j] = naf[j][i] | 0;
                            if (tmp[j] !== 0)
                                zero = false;
                        }
                        if (!zero)
                            break;
                        k++;
                        i--;
                    }
                    if (i >= 0)
                        k++;
                    acc = acc.dblp(k);
                    if (i < 0)
                        break;
                    for (var j = 0; j < len; j++) {
                        var z = tmp[j];
                        var p;
                        if (z === 0)
                            continue;
                        else if (z > 0)
                            p = wnd[j][z - 1 >> 1];
                        else if (z < 0)
                            p = wnd[j][-z - 1 >> 1].neg();
                        if (p.type === 'affine')
                            acc = acc.mixedAdd(p);
                        else
                            acc = acc.add(p);
                    }
                }
                for (var i = 0; i < len; i++)
                    wnd[i] = null;
                if (jacobianResult)
                    return acc;
                else
                    return acc.toP();
            };
            function BasePoint(curve, type) {
                this.curve = curve;
                this.type = type;
                this.precomputed = null;
            }
            BaseCurve.BasePoint = BasePoint;
            BasePoint.prototype.eq = function eq() {
                throw new Error('Not implemented');
            };
            BasePoint.prototype.validate = function validate() {
                return this.curve.validate(this);
            };
            BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
                bytes = utils.toArray(bytes, enc);
                var len = this.p.byteLength();
                if ((bytes[0] === 4 || bytes[0] === 6 || bytes[0] === 7) && bytes.length - 1 === 2 * len) {
                    if (bytes[0] === 6) {
                    } else if (bytes[0] === 7) {
                    }
                    var res = this.point(bytes.slice(1, 1 + len), bytes.slice(1 + len, 1 + 2 * len));
                    return res;
                } else if ((bytes[0] === 2 || bytes[0] === 3) && bytes.length - 1 === len) {
                    return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 3);
                }
                throw new Error('Unknown point format');
            };
            BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
                return this.encode(enc, true);
            };
            BasePoint.prototype._encode = function _encode(compact) {
                var len = this.curve.p.byteLength();
                var x = this.getX().toArray('be', len);
                if (compact)
                    return [this.getY().isEven() ? 2 : 3].concat(x);
                return [4].concat(x, this.getY().toArray('be', len));
            };
            BasePoint.prototype.encode = function encode(enc, compact) {
                return utils.encode(this._encode(compact), enc);
            };
            BasePoint.prototype.precompute = function precompute(power) {
                if (this.precomputed)
                    return this;
                var precomputed = {
                    doubles: null,
                    naf: null,
                    beta: null
                };
                precomputed.naf = this._getNAFPoints(8);
                precomputed.doubles = this._getDoubles(4, power);
                precomputed.beta = this._getBeta();
                this.precomputed = precomputed;
                return this;
            };
            BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
                if (!this.precomputed)
                    return false;
                var doubles = this.precomputed.doubles;
                if (!doubles)
                    return false;
                return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
            };
            BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
                if (this.precomputed && this.precomputed.doubles)
                    return this.precomputed.doubles;
                var doubles = [this];
                var acc = this;
                for (var i = 0; i < power; i += step) {
                    for (var j = 0; j < step; j++)
                        acc = acc.dbl();
                    doubles.push(acc);
                }
                return {
                    step: step,
                    points: doubles
                };
            };
            BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
                if (this.precomputed && this.precomputed.naf)
                    return this.precomputed.naf;
                var res = [this];
                var max = (1 << wnd) - 1;
                var dbl = max === 1 ? null : this.dbl();
                for (var i = 1; i < max; i++)
                    res[i] = res[i - 1].add(dbl);
                return {
                    wnd: wnd,
                    points: res
                };
            };
            BasePoint.prototype._getBeta = function _getBeta() {
                return null;
            };
            BasePoint.prototype.dblp = function dblp(k) {
                var r = this;
                for (var i = 0; i < k; i++)
                    r = r.dbl();
                return r;
            };
        },
        {
            '../../elliptic': 69,
            'bn.js': 19
        }
    ],
    71: [
        function (_dereq_, module, exports) {
            'use strict';
            var curve = _dereq_('../curve');
            var elliptic = _dereq_('../../elliptic');
            var BN = _dereq_('bn.js');
            var inherits = _dereq_('inherits');
            var Base = curve.base;
            var assert = elliptic.utils.assert;
            function EdwardsCurve(conf) {
                this.twisted = (conf.a | 0) !== 1;
                this.mOneA = this.twisted && (conf.a | 0) === -1;
                this.extended = this.mOneA;
                Base.call(this, 'edwards', conf);
                this.a = new BN(conf.a, 16).umod(this.red.m);
                this.a = this.a.toRed(this.red);
                this.c = new BN(conf.c, 16).toRed(this.red);
                this.c2 = this.c.redSqr();
                this.d = new BN(conf.d, 16).toRed(this.red);
                this.dd = this.d.redAdd(this.d);
                this.oneC = (conf.c | 0) === 1;
            }
            inherits(EdwardsCurve, Base);
            module.exports = EdwardsCurve;
            EdwardsCurve.prototype._mulA = function _mulA(num) {
                if (this.mOneA)
                    return num.redNeg();
                else
                    return this.a.redMul(num);
            };
            EdwardsCurve.prototype._mulC = function _mulC(num) {
                if (this.oneC)
                    return num;
                else
                    return this.c.redMul(num);
            };
            EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
                return this.point(x, y, z, t);
            };
            EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
                x = new BN(x, 16);
                if (!x.red)
                    x = x.toRed(this.red);
                var x2 = x.redSqr();
                var rhs = this.c2.redSub(this.a.redMul(x2));
                var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
                var y2 = rhs.redMul(lhs.redInvm());
                var y = y2.redSqrt();
                if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
                    throw new Error('invalid point');
                var isOdd = y.fromRed().isOdd();
                if (odd && !isOdd || !odd && isOdd)
                    y = y.redNeg();
                return this.point(x, y);
            };
            EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
                y = new BN(y, 16);
                if (!y.red)
                    y = y.toRed(this.red);
                var y2 = y.redSqr();
                var lhs = y2.redSub(this.c2);
                var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);
                var x2 = lhs.redMul(rhs.redInvm());
                if (x2.cmp(this.zero) === 0) {
                    if (odd)
                        throw new Error('invalid point');
                    else
                        return this.point(this.zero, y);
                }
                var x = x2.redSqrt();
                if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
                    throw new Error('invalid point');
                if (x.fromRed().isOdd() !== odd)
                    x = x.redNeg();
                return this.point(x, y);
            };
            EdwardsCurve.prototype.validate = function validate(point) {
                if (point.isInfinity())
                    return true;
                point.normalize();
                var x2 = point.x.redSqr();
                var y2 = point.y.redSqr();
                var lhs = x2.redMul(this.a).redAdd(y2);
                var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
                return lhs.cmp(rhs) === 0;
            };
            function Point(curve, x, y, z, t) {
                Base.BasePoint.call(this, curve, 'projective');
                if (x === null && y === null && z === null) {
                    this.x = this.curve.zero;
                    this.y = this.curve.one;
                    this.z = this.curve.one;
                    this.t = this.curve.zero;
                    this.zOne = true;
                } else {
                    this.x = new BN(x, 16);
                    this.y = new BN(y, 16);
                    this.z = z ? new BN(z, 16) : this.curve.one;
                    this.t = t && new BN(t, 16);
                    if (!this.x.red)
                        this.x = this.x.toRed(this.curve.red);
                    if (!this.y.red)
                        this.y = this.y.toRed(this.curve.red);
                    if (!this.z.red)
                        this.z = this.z.toRed(this.curve.red);
                    if (this.t && !this.t.red)
                        this.t = this.t.toRed(this.curve.red);
                    this.zOne = this.z === this.curve.one;
                    if (this.curve.extended && !this.t) {
                        this.t = this.x.redMul(this.y);
                        if (!this.zOne)
                            this.t = this.t.redMul(this.z.redInvm());
                    }
                }
            }
            inherits(Point, Base.BasePoint);
            EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
                return Point.fromJSON(this, obj);
            };
            EdwardsCurve.prototype.point = function point(x, y, z, t) {
                return new Point(this, x, y, z, t);
            };
            Point.fromJSON = function fromJSON(curve, obj) {
                return new Point(curve, obj[0], obj[1], obj[2]);
            };
            Point.prototype.inspect = function inspect() {
                if (this.isInfinity())
                    return '<EC Point Infinity>';
                return '<EC Point x: ' + this.x.fromRed().toString(16, 2) + ' y: ' + this.y.fromRed().toString(16, 2) + ' z: ' + this.z.fromRed().toString(16, 2) + '>';
            };
            Point.prototype.isInfinity = function isInfinity() {
                return this.x.cmpn(0) === 0 && (this.y.cmp(this.z) === 0 || this.zOne && this.y.cmp(this.curve.c) === 0);
            };
            Point.prototype._extDbl = function _extDbl() {
                var a = this.x.redSqr();
                var b = this.y.redSqr();
                var c = this.z.redSqr();
                c = c.redIAdd(c);
                var d = this.curve._mulA(a);
                var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
                var g = d.redAdd(b);
                var f = g.redSub(c);
                var h = d.redSub(b);
                var nx = e.redMul(f);
                var ny = g.redMul(h);
                var nt = e.redMul(h);
                var nz = f.redMul(g);
                return this.curve.point(nx, ny, nz, nt);
            };
            Point.prototype._projDbl = function _projDbl() {
                var b = this.x.redAdd(this.y).redSqr();
                var c = this.x.redSqr();
                var d = this.y.redSqr();
                var nx;
                var ny;
                var nz;
                if (this.curve.twisted) {
                    var e = this.curve._mulA(c);
                    var f = e.redAdd(d);
                    if (this.zOne) {
                        nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
                        ny = f.redMul(e.redSub(d));
                        nz = f.redSqr().redSub(f).redSub(f);
                    } else {
                        var h = this.z.redSqr();
                        var j = f.redSub(h).redISub(h);
                        nx = b.redSub(c).redISub(d).redMul(j);
                        ny = f.redMul(e.redSub(d));
                        nz = f.redMul(j);
                    }
                } else {
                    var e = c.redAdd(d);
                    var h = this.curve._mulC(this.z).redSqr();
                    var j = e.redSub(h).redSub(h);
                    nx = this.curve._mulC(b.redISub(e)).redMul(j);
                    ny = this.curve._mulC(e).redMul(c.redISub(d));
                    nz = e.redMul(j);
                }
                return this.curve.point(nx, ny, nz);
            };
            Point.prototype.dbl = function dbl() {
                if (this.isInfinity())
                    return this;
                if (this.curve.extended)
                    return this._extDbl();
                else
                    return this._projDbl();
            };
            Point.prototype._extAdd = function _extAdd(p) {
                var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
                var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
                var c = this.t.redMul(this.curve.dd).redMul(p.t);
                var d = this.z.redMul(p.z.redAdd(p.z));
                var e = b.redSub(a);
                var f = d.redSub(c);
                var g = d.redAdd(c);
                var h = b.redAdd(a);
                var nx = e.redMul(f);
                var ny = g.redMul(h);
                var nt = e.redMul(h);
                var nz = f.redMul(g);
                return this.curve.point(nx, ny, nz, nt);
            };
            Point.prototype._projAdd = function _projAdd(p) {
                var a = this.z.redMul(p.z);
                var b = a.redSqr();
                var c = this.x.redMul(p.x);
                var d = this.y.redMul(p.y);
                var e = this.curve.d.redMul(c).redMul(d);
                var f = b.redSub(e);
                var g = b.redAdd(e);
                var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
                var nx = a.redMul(f).redMul(tmp);
                var ny;
                var nz;
                if (this.curve.twisted) {
                    ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
                    nz = f.redMul(g);
                } else {
                    ny = a.redMul(g).redMul(d.redSub(c));
                    nz = this.curve._mulC(f).redMul(g);
                }
                return this.curve.point(nx, ny, nz);
            };
            Point.prototype.add = function add(p) {
                if (this.isInfinity())
                    return p;
                if (p.isInfinity())
                    return this;
                if (this.curve.extended)
                    return this._extAdd(p);
                else
                    return this._projAdd(p);
            };
            Point.prototype.mul = function mul(k) {
                if (this._hasDoubles(k))
                    return this.curve._fixedNafMul(this, k);
                else
                    return this.curve._wnafMul(this, k);
            };
            Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
                return this.curve._wnafMulAdd(1, [
                    this,
                    p
                ], [
                    k1,
                    k2
                ], 2, false);
            };
            Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
                return this.curve._wnafMulAdd(1, [
                    this,
                    p
                ], [
                    k1,
                    k2
                ], 2, true);
            };
            Point.prototype.normalize = function normalize() {
                if (this.zOne)
                    return this;
                var zi = this.z.redInvm();
                this.x = this.x.redMul(zi);
                this.y = this.y.redMul(zi);
                if (this.t)
                    this.t = this.t.redMul(zi);
                this.z = this.curve.one;
                this.zOne = true;
                return this;
            };
            Point.prototype.neg = function neg() {
                return this.curve.point(this.x.redNeg(), this.y, this.z, this.t && this.t.redNeg());
            };
            Point.prototype.getX = function getX() {
                this.normalize();
                return this.x.fromRed();
            };
            Point.prototype.getY = function getY() {
                this.normalize();
                return this.y.fromRed();
            };
            Point.prototype.eq = function eq(other) {
                return this === other || this.getX().cmp(other.getX()) === 0 && this.getY().cmp(other.getY()) === 0;
            };
            Point.prototype.eqXToP = function eqXToP(x) {
                var rx = x.toRed(this.curve.red).redMul(this.z);
                if (this.x.cmp(rx) === 0)
                    return true;
                var xc = x.clone();
                var t = this.curve.redN.redMul(this.z);
                for (;;) {
                    xc.iadd(this.curve.n);
                    if (xc.cmp(this.curve.p) >= 0)
                        return false;
                    rx.redIAdd(t);
                    if (this.x.cmp(rx) === 0)
                        return true;
                }
            };
            Point.prototype.toP = Point.prototype.normalize;
            Point.prototype.mixedAdd = Point.prototype.add;
        },
        {
            '../../elliptic': 69,
            '../curve': 72,
            'bn.js': 19,
            'inherits': 103
        }
    ],
    72: [
        function (_dereq_, module, exports) {
            'use strict';
            var curve = exports;
            curve.base = _dereq_('./base');
            curve.short = _dereq_('./short');
            curve.mont = _dereq_('./mont');
            curve.edwards = _dereq_('./edwards');
        },
        {
            './base': 70,
            './edwards': 71,
            './mont': 73,
            './short': 74
        }
    ],
    73: [
        function (_dereq_, module, exports) {
            'use strict';
            var curve = _dereq_('../curve');
            var BN = _dereq_('bn.js');
            var inherits = _dereq_('inherits');
            var Base = curve.base;
            var elliptic = _dereq_('../../elliptic');
            var utils = elliptic.utils;
            function MontCurve(conf) {
                Base.call(this, 'mont', conf);
                this.a = new BN(conf.a, 16).toRed(this.red);
                this.b = new BN(conf.b, 16).toRed(this.red);
                this.i4 = new BN(4).toRed(this.red).redInvm();
                this.two = new BN(2).toRed(this.red);
                this.a24 = this.i4.redMul(this.a.redAdd(this.two));
            }
            inherits(MontCurve, Base);
            module.exports = MontCurve;
            MontCurve.prototype.validate = function validate(point) {
                var x = point.normalize().x;
                var x2 = x.redSqr();
                var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
                var y = rhs.redSqrt();
                return y.redSqr().cmp(rhs) === 0;
            };
            function Point(curve, x, z) {
                Base.BasePoint.call(this, curve, 'projective');
                if (x === null && z === null) {
                    this.x = this.curve.one;
                    this.z = this.curve.zero;
                } else {
                    this.x = new BN(x, 16);
                    this.z = new BN(z, 16);
                    if (!this.x.red)
                        this.x = this.x.toRed(this.curve.red);
                    if (!this.z.red)
                        this.z = this.z.toRed(this.curve.red);
                }
            }
            inherits(Point, Base.BasePoint);
            MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
                return this.point(utils.toArray(bytes, enc), 1);
            };
            MontCurve.prototype.point = function point(x, z) {
                return new Point(this, x, z);
            };
            MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
                return Point.fromJSON(this, obj);
            };
            Point.prototype.precompute = function precompute() {
            };
            Point.prototype._encode = function _encode() {
                return this.getX().toArray('be', this.curve.p.byteLength());
            };
            Point.fromJSON = function fromJSON(curve, obj) {
                return new Point(curve, obj[0], obj[1] || curve.one);
            };
            Point.prototype.inspect = function inspect() {
                if (this.isInfinity())
                    return '<EC Point Infinity>';
                return '<EC Point x: ' + this.x.fromRed().toString(16, 2) + ' z: ' + this.z.fromRed().toString(16, 2) + '>';
            };
            Point.prototype.isInfinity = function isInfinity() {
                return this.z.cmpn(0) === 0;
            };
            Point.prototype.dbl = function dbl() {
                var a = this.x.redAdd(this.z);
                var aa = a.redSqr();
                var b = this.x.redSub(this.z);
                var bb = b.redSqr();
                var c = aa.redSub(bb);
                var nx = aa.redMul(bb);
                var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
                return this.curve.point(nx, nz);
            };
            Point.prototype.add = function add() {
                throw new Error('Not supported on Montgomery curve');
            };
            Point.prototype.diffAdd = function diffAdd(p, diff) {
                var a = this.x.redAdd(this.z);
                var b = this.x.redSub(this.z);
                var c = p.x.redAdd(p.z);
                var d = p.x.redSub(p.z);
                var da = d.redMul(a);
                var cb = c.redMul(b);
                var nx = diff.z.redMul(da.redAdd(cb).redSqr());
                var nz = diff.x.redMul(da.redISub(cb).redSqr());
                return this.curve.point(nx, nz);
            };
            Point.prototype.mul = function mul(k) {
                var t = k.clone();
                var a = this;
                var b = this.curve.point(null, null);
                var c = this;
                for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
                    bits.push(t.andln(1));
                for (var i = bits.length - 1; i >= 0; i--) {
                    if (bits[i] === 0) {
                        a = a.diffAdd(b, c);
                        b = b.dbl();
                    } else {
                        b = a.diffAdd(b, c);
                        a = a.dbl();
                    }
                }
                return b;
            };
            Point.prototype.mulAdd = function mulAdd() {
                throw new Error('Not supported on Montgomery curve');
            };
            Point.prototype.jumlAdd = function jumlAdd() {
                throw new Error('Not supported on Montgomery curve');
            };
            Point.prototype.eq = function eq(other) {
                return this.getX().cmp(other.getX()) === 0;
            };
            Point.prototype.normalize = function normalize() {
                this.x = this.x.redMul(this.z.redInvm());
                this.z = this.curve.one;
                return this;
            };
            Point.prototype.getX = function getX() {
                this.normalize();
                return this.x.fromRed();
            };
        },
        {
            '../../elliptic': 69,
            '../curve': 72,
            'bn.js': 19,
            'inherits': 103
        }
    ],
    74: [
        function (_dereq_, module, exports) {
            'use strict';
            var curve = _dereq_('../curve');
            var elliptic = _dereq_('../../elliptic');
            var BN = _dereq_('bn.js');
            var inherits = _dereq_('inherits');
            var Base = curve.base;
            var assert = elliptic.utils.assert;
            function ShortCurve(conf) {
                Base.call(this, 'short', conf);
                this.a = new BN(conf.a, 16).toRed(this.red);
                this.b = new BN(conf.b, 16).toRed(this.red);
                this.tinv = this.two.redInvm();
                this.zeroA = this.a.fromRed().cmpn(0) === 0;
                this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
                this.endo = this._getEndomorphism(conf);
                this._endoWnafT1 = new Array(4);
                this._endoWnafT2 = new Array(4);
            }
            inherits(ShortCurve, Base);
            module.exports = ShortCurve;
            ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
                if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
                    return;
                var beta;
                var lambda;
                if (conf.beta) {
                    beta = new BN(conf.beta, 16).toRed(this.red);
                } else {
                    var betas = this._getEndoRoots(this.p);
                    beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
                    beta = beta.toRed(this.red);
                }
                if (conf.lambda) {
                    lambda = new BN(conf.lambda, 16);
                } else {
                    var lambdas = this._getEndoRoots(this.n);
                    if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
                        lambda = lambdas[0];
                    } else {
                        lambda = lambdas[1];
                    }
                }
                var basis;
                if (conf.basis) {
                    basis = conf.basis.map(function (vec) {
                        return {
                            a: new BN(vec.a, 16),
                            b: new BN(vec.b, 16)
                        };
                    });
                } else {
                    basis = this._getEndoBasis(lambda);
                }
                return {
                    beta: beta,
                    lambda: lambda,
                    basis: basis
                };
            };
            ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
                var red = num === this.p ? this.red : BN.mont(num);
                var tinv = new BN(2).toRed(red).redInvm();
                var ntinv = tinv.redNeg();
                var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
                var l1 = ntinv.redAdd(s).fromRed();
                var l2 = ntinv.redSub(s).fromRed();
                return [
                    l1,
                    l2
                ];
            };
            ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
                var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
                var u = lambda;
                var v = this.n.clone();
                var x1 = new BN(1);
                var y1 = new BN(0);
                var x2 = new BN(0);
                var y2 = new BN(1);
                var a0;
                var b0;
                var a1;
                var b1;
                var a2;
                var b2;
                var prevR;
                var i = 0;
                var r;
                var x;
                while (u.cmpn(0) !== 0) {
                    var q = v.div(u);
                    r = v.sub(q.mul(u));
                    x = x2.sub(q.mul(x1));
                    var y = y2.sub(q.mul(y1));
                    if (!a1 && r.cmp(aprxSqrt) < 0) {
                        a0 = prevR.neg();
                        b0 = x1;
                        a1 = r.neg();
                        b1 = x;
                    } else if (a1 && ++i === 2) {
                        break;
                    }
                    prevR = r;
                    v = u;
                    u = r;
                    x2 = x1;
                    x1 = x;
                    y2 = y1;
                    y1 = y;
                }
                a2 = r.neg();
                b2 = x;
                var len1 = a1.sqr().add(b1.sqr());
                var len2 = a2.sqr().add(b2.sqr());
                if (len2.cmp(len1) >= 0) {
                    a2 = a0;
                    b2 = b0;
                }
                if (a1.negative) {
                    a1 = a1.neg();
                    b1 = b1.neg();
                }
                if (a2.negative) {
                    a2 = a2.neg();
                    b2 = b2.neg();
                }
                return [
                    {
                        a: a1,
                        b: b1
                    },
                    {
                        a: a2,
                        b: b2
                    }
                ];
            };
            ShortCurve.prototype._endoSplit = function _endoSplit(k) {
                var basis = this.endo.basis;
                var v1 = basis[0];
                var v2 = basis[1];
                var c1 = v2.b.mul(k).divRound(this.n);
                var c2 = v1.b.neg().mul(k).divRound(this.n);
                var p1 = c1.mul(v1.a);
                var p2 = c2.mul(v2.a);
                var q1 = c1.mul(v1.b);
                var q2 = c2.mul(v2.b);
                var k1 = k.sub(p1).sub(p2);
                var k2 = q1.add(q2).neg();
                return {
                    k1: k1,
                    k2: k2
                };
            };
            ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
                x = new BN(x, 16);
                if (!x.red)
                    x = x.toRed(this.red);
                var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
                var y = y2.redSqrt();
                if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
                    throw new Error('invalid point');
                var isOdd = y.fromRed().isOdd();
                if (odd && !isOdd || !odd && isOdd)
                    y = y.redNeg();
                return this.point(x, y);
            };
            ShortCurve.prototype.validate = function validate(point) {
                if (point.inf)
                    return true;
                var x = point.x;
                var y = point.y;
                var ax = this.a.redMul(x);
                var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
                return y.redSqr().redISub(rhs).cmpn(0) === 0;
            };
            ShortCurve.prototype._endoWnafMulAdd = function _endoWnafMulAdd(points, coeffs, jacobianResult) {
                var npoints = this._endoWnafT1;
                var ncoeffs = this._endoWnafT2;
                for (var i = 0; i < points.length; i++) {
                    var split = this._endoSplit(coeffs[i]);
                    var p = points[i];
                    var beta = p._getBeta();
                    if (split.k1.negative) {
                        split.k1.ineg();
                        p = p.neg(true);
                    }
                    if (split.k2.negative) {
                        split.k2.ineg();
                        beta = beta.neg(true);
                    }
                    npoints[i * 2] = p;
                    npoints[i * 2 + 1] = beta;
                    ncoeffs[i * 2] = split.k1;
                    ncoeffs[i * 2 + 1] = split.k2;
                }
                var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
                for (var j = 0; j < i * 2; j++) {
                    npoints[j] = null;
                    ncoeffs[j] = null;
                }
                return res;
            };
            function Point(curve, x, y, isRed) {
                Base.BasePoint.call(this, curve, 'affine');
                if (x === null && y === null) {
                    this.x = null;
                    this.y = null;
                    this.inf = true;
                } else {
                    this.x = new BN(x, 16);
                    this.y = new BN(y, 16);
                    if (isRed) {
                        this.x.forceRed(this.curve.red);
                        this.y.forceRed(this.curve.red);
                    }
                    if (!this.x.red)
                        this.x = this.x.toRed(this.curve.red);
                    if (!this.y.red)
                        this.y = this.y.toRed(this.curve.red);
                    this.inf = false;
                }
            }
            inherits(Point, Base.BasePoint);
            ShortCurve.prototype.point = function point(x, y, isRed) {
                return new Point(this, x, y, isRed);
            };
            ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
                return Point.fromJSON(this, obj, red);
            };
            Point.prototype._getBeta = function _getBeta() {
                if (!this.curve.endo)
                    return;
                var pre = this.precomputed;
                if (pre && pre.beta)
                    return pre.beta;
                var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
                if (pre) {
                    var curve = this.curve;
                    var endoMul = function (p) {
                        return curve.point(p.x.redMul(curve.endo.beta), p.y);
                    };
                    pre.beta = beta;
                    beta.precomputed = {
                        beta: null,
                        naf: pre.naf && {
                            wnd: pre.naf.wnd,
                            points: pre.naf.points.map(endoMul)
                        },
                        doubles: pre.doubles && {
                            step: pre.doubles.step,
                            points: pre.doubles.points.map(endoMul)
                        }
                    };
                }
                return beta;
            };
            Point.prototype.toJSON = function toJSON() {
                if (!this.precomputed)
                    return [
                        this.x,
                        this.y
                    ];
                return [
                    this.x,
                    this.y,
                    this.precomputed && {
                        doubles: this.precomputed.doubles && {
                            step: this.precomputed.doubles.step,
                            points: this.precomputed.doubles.points.slice(1)
                        },
                        naf: this.precomputed.naf && {
                            wnd: this.precomputed.naf.wnd,
                            points: this.precomputed.naf.points.slice(1)
                        }
                    }
                ];
            };
            Point.fromJSON = function fromJSON(curve, obj, red) {
                if (typeof obj === 'string')
                    obj = JSON.parse(obj);
                var res = curve.point(obj[0], obj[1], red);
                if (!obj[2])
                    return res;
                function obj2point(obj) {
                    return curve.point(obj[0], obj[1], red);
                }
                var pre = obj[2];
                res.precomputed = {
                    beta: null,
                    doubles: pre.doubles && {
                        step: pre.doubles.step,
                        points: [res].concat(pre.doubles.points.map(obj2point))
                    },
                    naf: pre.naf && {
                        wnd: pre.naf.wnd,
                        points: [res].concat(pre.naf.points.map(obj2point))
                    }
                };
                return res;
            };
            Point.prototype.inspect = function inspect() {
                if (this.isInfinity())
                    return '<EC Point Infinity>';
                return '<EC Point x: ' + this.x.fromRed().toString(16, 2) + ' y: ' + this.y.fromRed().toString(16, 2) + '>';
            };
            Point.prototype.isInfinity = function isInfinity() {
                return this.inf;
            };
            Point.prototype.add = function add(p) {
                if (this.inf)
                    return p;
                if (p.inf)
                    return this;
                if (this.eq(p))
                    return this.dbl();
                if (this.neg().eq(p))
                    return this.curve.point(null, null);
                if (this.x.cmp(p.x) === 0)
                    return this.curve.point(null, null);
                var c = this.y.redSub(p.y);
                if (c.cmpn(0) !== 0)
                    c = c.redMul(this.x.redSub(p.x).redInvm());
                var nx = c.redSqr().redISub(this.x).redISub(p.x);
                var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
                return this.curve.point(nx, ny);
            };
            Point.prototype.dbl = function dbl() {
                if (this.inf)
                    return this;
                var ys1 = this.y.redAdd(this.y);
                if (ys1.cmpn(0) === 0)
                    return this.curve.point(null, null);
                var a = this.curve.a;
                var x2 = this.x.redSqr();
                var dyinv = ys1.redInvm();
                var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
                var nx = c.redSqr().redISub(this.x.redAdd(this.x));
                var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
                return this.curve.point(nx, ny);
            };
            Point.prototype.getX = function getX() {
                return this.x.fromRed();
            };
            Point.prototype.getY = function getY() {
                return this.y.fromRed();
            };
            Point.prototype.mul = function mul(k) {
                k = new BN(k, 16);
                if (this._hasDoubles(k))
                    return this.curve._fixedNafMul(this, k);
                else if (this.curve.endo)
                    return this.curve._endoWnafMulAdd([this], [k]);
                else
                    return this.curve._wnafMul(this, k);
            };
            Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
                var points = [
                    this,
                    p2
                ];
                var coeffs = [
                    k1,
                    k2
                ];
                if (this.curve.endo)
                    return this.curve._endoWnafMulAdd(points, coeffs);
                else
                    return this.curve._wnafMulAdd(1, points, coeffs, 2);
            };
            Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
                var points = [
                    this,
                    p2
                ];
                var coeffs = [
                    k1,
                    k2
                ];
                if (this.curve.endo)
                    return this.curve._endoWnafMulAdd(points, coeffs, true);
                else
                    return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
            };
            Point.prototype.eq = function eq(p) {
                return this === p || this.inf === p.inf && (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
            };
            Point.prototype.neg = function neg(_precompute) {
                if (this.inf)
                    return this;
                var res = this.curve.point(this.x, this.y.redNeg());
                if (_precompute && this.precomputed) {
                    var pre = this.precomputed;
                    var negate = function (p) {
                        return p.neg();
                    };
                    res.precomputed = {
                        naf: pre.naf && {
                            wnd: pre.naf.wnd,
                            points: pre.naf.points.map(negate)
                        },
                        doubles: pre.doubles && {
                            step: pre.doubles.step,
                            points: pre.doubles.points.map(negate)
                        }
                    };
                }
                return res;
            };
            Point.prototype.toJ = function toJ() {
                if (this.inf)
                    return this.curve.jpoint(null, null, null);
                var res = this.curve.jpoint(this.x, this.y, this.curve.one);
                return res;
            };
            function JPoint(curve, x, y, z) {
                Base.BasePoint.call(this, curve, 'jacobian');
                if (x === null && y === null && z === null) {
                    this.x = this.curve.one;
                    this.y = this.curve.one;
                    this.z = new BN(0);
                } else {
                    this.x = new BN(x, 16);
                    this.y = new BN(y, 16);
                    this.z = new BN(z, 16);
                }
                if (!this.x.red)
                    this.x = this.x.toRed(this.curve.red);
                if (!this.y.red)
                    this.y = this.y.toRed(this.curve.red);
                if (!this.z.red)
                    this.z = this.z.toRed(this.curve.red);
                this.zOne = this.z === this.curve.one;
            }
            inherits(JPoint, Base.BasePoint);
            ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
                return new JPoint(this, x, y, z);
            };
            JPoint.prototype.toP = function toP() {
                if (this.isInfinity())
                    return this.curve.point(null, null);
                var zinv = this.z.redInvm();
                var zinv2 = zinv.redSqr();
                var ax = this.x.redMul(zinv2);
                var ay = this.y.redMul(zinv2).redMul(zinv);
                return this.curve.point(ax, ay);
            };
            JPoint.prototype.neg = function neg() {
                return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
            };
            JPoint.prototype.add = function add(p) {
                if (this.isInfinity())
                    return p;
                if (p.isInfinity())
                    return this;
                var pz2 = p.z.redSqr();
                var z2 = this.z.redSqr();
                var u1 = this.x.redMul(pz2);
                var u2 = p.x.redMul(z2);
                var s1 = this.y.redMul(pz2.redMul(p.z));
                var s2 = p.y.redMul(z2.redMul(this.z));
                var h = u1.redSub(u2);
                var r = s1.redSub(s2);
                if (h.cmpn(0) === 0) {
                    if (r.cmpn(0) !== 0)
                        return this.curve.jpoint(null, null, null);
                    else
                        return this.dbl();
                }
                var h2 = h.redSqr();
                var h3 = h2.redMul(h);
                var v = u1.redMul(h2);
                var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
                var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
                var nz = this.z.redMul(p.z).redMul(h);
                return this.curve.jpoint(nx, ny, nz);
            };
            JPoint.prototype.mixedAdd = function mixedAdd(p) {
                if (this.isInfinity())
                    return p.toJ();
                if (p.isInfinity())
                    return this;
                var z2 = this.z.redSqr();
                var u1 = this.x;
                var u2 = p.x.redMul(z2);
                var s1 = this.y;
                var s2 = p.y.redMul(z2).redMul(this.z);
                var h = u1.redSub(u2);
                var r = s1.redSub(s2);
                if (h.cmpn(0) === 0) {
                    if (r.cmpn(0) !== 0)
                        return this.curve.jpoint(null, null, null);
                    else
                        return this.dbl();
                }
                var h2 = h.redSqr();
                var h3 = h2.redMul(h);
                var v = u1.redMul(h2);
                var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
                var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
                var nz = this.z.redMul(h);
                return this.curve.jpoint(nx, ny, nz);
            };
            JPoint.prototype.dblp = function dblp(pow) {
                if (pow === 0)
                    return this;
                if (this.isInfinity())
                    return this;
                if (!pow)
                    return this.dbl();
                if (this.curve.zeroA || this.curve.threeA) {
                    var r = this;
                    for (var i = 0; i < pow; i++)
                        r = r.dbl();
                    return r;
                }
                var a = this.curve.a;
                var tinv = this.curve.tinv;
                var jx = this.x;
                var jy = this.y;
                var jz = this.z;
                var jz4 = jz.redSqr().redSqr();
                var jyd = jy.redAdd(jy);
                for (var i = 0; i < pow; i++) {
                    var jx2 = jx.redSqr();
                    var jyd2 = jyd.redSqr();
                    var jyd4 = jyd2.redSqr();
                    var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
                    var t1 = jx.redMul(jyd2);
                    var nx = c.redSqr().redISub(t1.redAdd(t1));
                    var t2 = t1.redISub(nx);
                    var dny = c.redMul(t2);
                    dny = dny.redIAdd(dny).redISub(jyd4);
                    var nz = jyd.redMul(jz);
                    if (i + 1 < pow)
                        jz4 = jz4.redMul(jyd4);
                    jx = nx;
                    jz = nz;
                    jyd = dny;
                }
                return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
            };
            JPoint.prototype.dbl = function dbl() {
                if (this.isInfinity())
                    return this;
                if (this.curve.zeroA)
                    return this._zeroDbl();
                else if (this.curve.threeA)
                    return this._threeDbl();
                else
                    return this._dbl();
            };
            JPoint.prototype._zeroDbl = function _zeroDbl() {
                var nx;
                var ny;
                var nz;
                if (this.zOne) {
                    var xx = this.x.redSqr();
                    var yy = this.y.redSqr();
                    var yyyy = yy.redSqr();
                    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
                    s = s.redIAdd(s);
                    var m = xx.redAdd(xx).redIAdd(xx);
                    var t = m.redSqr().redISub(s).redISub(s);
                    var yyyy8 = yyyy.redIAdd(yyyy);
                    yyyy8 = yyyy8.redIAdd(yyyy8);
                    yyyy8 = yyyy8.redIAdd(yyyy8);
                    nx = t;
                    ny = m.redMul(s.redISub(t)).redISub(yyyy8);
                    nz = this.y.redAdd(this.y);
                } else {
                    var a = this.x.redSqr();
                    var b = this.y.redSqr();
                    var c = b.redSqr();
                    var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
                    d = d.redIAdd(d);
                    var e = a.redAdd(a).redIAdd(a);
                    var f = e.redSqr();
                    var c8 = c.redIAdd(c);
                    c8 = c8.redIAdd(c8);
                    c8 = c8.redIAdd(c8);
                    nx = f.redISub(d).redISub(d);
                    ny = e.redMul(d.redISub(nx)).redISub(c8);
                    nz = this.y.redMul(this.z);
                    nz = nz.redIAdd(nz);
                }
                return this.curve.jpoint(nx, ny, nz);
            };
            JPoint.prototype._threeDbl = function _threeDbl() {
                var nx;
                var ny;
                var nz;
                if (this.zOne) {
                    var xx = this.x.redSqr();
                    var yy = this.y.redSqr();
                    var yyyy = yy.redSqr();
                    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
                    s = s.redIAdd(s);
                    var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
                    var t = m.redSqr().redISub(s).redISub(s);
                    nx = t;
                    var yyyy8 = yyyy.redIAdd(yyyy);
                    yyyy8 = yyyy8.redIAdd(yyyy8);
                    yyyy8 = yyyy8.redIAdd(yyyy8);
                    ny = m.redMul(s.redISub(t)).redISub(yyyy8);
                    nz = this.y.redAdd(this.y);
                } else {
                    var delta = this.z.redSqr();
                    var gamma = this.y.redSqr();
                    var beta = this.x.redMul(gamma);
                    var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
                    alpha = alpha.redAdd(alpha).redIAdd(alpha);
                    var beta4 = beta.redIAdd(beta);
                    beta4 = beta4.redIAdd(beta4);
                    var beta8 = beta4.redAdd(beta4);
                    nx = alpha.redSqr().redISub(beta8);
                    nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
                    var ggamma8 = gamma.redSqr();
                    ggamma8 = ggamma8.redIAdd(ggamma8);
                    ggamma8 = ggamma8.redIAdd(ggamma8);
                    ggamma8 = ggamma8.redIAdd(ggamma8);
                    ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
                }
                return this.curve.jpoint(nx, ny, nz);
            };
            JPoint.prototype._dbl = function _dbl() {
                var a = this.curve.a;
                var jx = this.x;
                var jy = this.y;
                var jz = this.z;
                var jz4 = jz.redSqr().redSqr();
                var jx2 = jx.redSqr();
                var jy2 = jy.redSqr();
                var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
                var jxd4 = jx.redAdd(jx);
                jxd4 = jxd4.redIAdd(jxd4);
                var t1 = jxd4.redMul(jy2);
                var nx = c.redSqr().redISub(t1.redAdd(t1));
                var t2 = t1.redISub(nx);
                var jyd8 = jy2.redSqr();
                jyd8 = jyd8.redIAdd(jyd8);
                jyd8 = jyd8.redIAdd(jyd8);
                jyd8 = jyd8.redIAdd(jyd8);
                var ny = c.redMul(t2).redISub(jyd8);
                var nz = jy.redAdd(jy).redMul(jz);
                return this.curve.jpoint(nx, ny, nz);
            };
            JPoint.prototype.trpl = function trpl() {
                if (!this.curve.zeroA)
                    return this.dbl().add(this);
                var xx = this.x.redSqr();
                var yy = this.y.redSqr();
                var zz = this.z.redSqr();
                var yyyy = yy.redSqr();
                var m = xx.redAdd(xx).redIAdd(xx);
                var mm = m.redSqr();
                var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
                e = e.redIAdd(e);
                e = e.redAdd(e).redIAdd(e);
                e = e.redISub(mm);
                var ee = e.redSqr();
                var t = yyyy.redIAdd(yyyy);
                t = t.redIAdd(t);
                t = t.redIAdd(t);
                t = t.redIAdd(t);
                var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
                var yyu4 = yy.redMul(u);
                yyu4 = yyu4.redIAdd(yyu4);
                yyu4 = yyu4.redIAdd(yyu4);
                var nx = this.x.redMul(ee).redISub(yyu4);
                nx = nx.redIAdd(nx);
                nx = nx.redIAdd(nx);
                var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
                ny = ny.redIAdd(ny);
                ny = ny.redIAdd(ny);
                ny = ny.redIAdd(ny);
                var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
                return this.curve.jpoint(nx, ny, nz);
            };
            JPoint.prototype.mul = function mul(k, kbase) {
                k = new BN(k, kbase);
                return this.curve._wnafMul(this, k);
            };
            JPoint.prototype.eq = function eq(p) {
                if (p.type === 'affine')
                    return this.eq(p.toJ());
                if (this === p)
                    return true;
                var z2 = this.z.redSqr();
                var pz2 = p.z.redSqr();
                if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
                    return false;
                var z3 = z2.redMul(this.z);
                var pz3 = pz2.redMul(p.z);
                return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
            };
            JPoint.prototype.eqXToP = function eqXToP(x) {
                var zs = this.z.redSqr();
                var rx = x.toRed(this.curve.red).redMul(zs);
                if (this.x.cmp(rx) === 0)
                    return true;
                var xc = x.clone();
                var t = this.curve.redN.redMul(zs);
                for (;;) {
                    xc.iadd(this.curve.n);
                    if (xc.cmp(this.curve.p) >= 0)
                        return false;
                    rx.redIAdd(t);
                    if (this.x.cmp(rx) === 0)
                        return true;
                }
            };
            JPoint.prototype.inspect = function inspect() {
                if (this.isInfinity())
                    return '<EC JPoint Infinity>';
                return '<EC JPoint x: ' + this.x.toString(16, 2) + ' y: ' + this.y.toString(16, 2) + ' z: ' + this.z.toString(16, 2) + '>';
            };
            JPoint.prototype.isInfinity = function isInfinity() {
                return this.z.cmpn(0) === 0;
            };
        },
        {
            '../../elliptic': 69,
            '../curve': 72,
            'bn.js': 19,
            'inherits': 103
        }
    ],
    75: [
        function (_dereq_, module, exports) {
            'use strict';
            var curves = exports;
            var hash = _dereq_('hash.js');
            var elliptic = _dereq_('../elliptic');
            var assert = elliptic.utils.assert;
            function PresetCurve(options) {
                if (options.type === 'short')
                    this.curve = new elliptic.curve.short(options);
                else if (options.type === 'edwards')
                    this.curve = new elliptic.curve.edwards(options);
                else
                    this.curve = new elliptic.curve.mont(options);
                this.g = this.curve.g;
                this.n = this.curve.n;
                this.hash = options.hash;
            }
            curves.PresetCurve = PresetCurve;
            function defineCurve(name, options) {
                Object.defineProperty(curves, name, {
                    configurable: true,
                    enumerable: true,
                    get: function () {
                        var curve = new PresetCurve(options);
                        Object.defineProperty(curves, name, {
                            configurable: true,
                            enumerable: true,
                            value: curve
                        });
                        return curve;
                    }
                });
            }
            defineCurve('p192', {
                type: 'short',
                prime: 'p192',
                p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
                a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
                b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
                n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
                hash: hash.sha256,
                gRed: false,
                g: [
                    '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
                    '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
                ]
            });
            defineCurve('p224', {
                type: 'short',
                prime: 'p224',
                p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
                a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
                b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
                n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
                hash: hash.sha256,
                gRed: false,
                g: [
                    'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
                    'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
                ]
            });
            defineCurve('p256', {
                type: 'short',
                prime: null,
                p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
                a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
                b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
                n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
                hash: hash.sha256,
                gRed: false,
                g: [
                    '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
                    '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
                ]
            });
            defineCurve('p384', {
                type: 'short',
                prime: null,
                p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'fffffffe ffffffff 00000000 00000000 ffffffff',
                a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'fffffffe ffffffff 00000000 00000000 fffffffc',
                b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
                n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
                hash: hash.sha384,
                gRed: false,
                g: [
                    'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' + '5502f25d bf55296c 3a545e38 72760ab7',
                    '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' + '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
                ]
            });
            defineCurve('p521', {
                type: 'short',
                prime: null,
                p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff',
                a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff fffffffc',
                b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
                n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
                hash: hash.sha512,
                gRed: false,
                g: [
                    '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' + '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' + 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
                    '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' + '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' + '3fad0761 353c7086 a272c240 88be9476 9fd16650'
                ]
            });
            defineCurve('curve25519', {
                type: 'mont',
                prime: 'p25519',
                p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
                a: '76d06',
                b: '1',
                n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
                hash: hash.sha256,
                gRed: false,
                g: ['9']
            });
            defineCurve('ed25519', {
                type: 'edwards',
                prime: 'p25519',
                p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
                a: '-1',
                c: '1',
                d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
                n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
                hash: hash.sha256,
                gRed: false,
                g: [
                    '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
                    '6666666666666666666666666666666666666666666666666666666666666658'
                ]
            });
            var pre;
            try {
                pre = _dereq_('./precomputed/secp256k1');
            } catch (e) {
                pre = undefined;
            }
            defineCurve('secp256k1', {
                type: 'short',
                prime: 'k256',
                p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
                a: '0',
                b: '7',
                n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
                h: '1',
                hash: hash.sha256,
                beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
                lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
                basis: [
                    {
                        a: '3086d221a7d46bcde86c90e49284eb15',
                        b: '-e4437ed6010e88286f547fa90abfe4c3'
                    },
                    {
                        a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
                        b: '3086d221a7d46bcde86c90e49284eb15'
                    }
                ],
                gRed: false,
                g: [
                    '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
                    '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
                    pre
                ]
            });
        },
        {
            '../elliptic': 69,
            './precomputed/secp256k1': 82,
            'hash.js': 89
        }
    ],
    76: [
        function (_dereq_, module, exports) {
            'use strict';
            var BN = _dereq_('bn.js');
            var HmacDRBG = _dereq_('hmac-drbg');
            var elliptic = _dereq_('../../elliptic');
            var utils = elliptic.utils;
            var assert = utils.assert;
            var KeyPair = _dereq_('./key');
            var Signature = _dereq_('./signature');
            function EC(options) {
                if (!(this instanceof EC))
                    return new EC(options);
                if (typeof options === 'string') {
                    options = elliptic.curves[options];
                }
                if (options instanceof elliptic.curves.PresetCurve)
                    options = { curve: options };
                this.curve = options.curve.curve;
                this.n = this.curve.n;
                this.nh = this.n.ushrn(1);
                this.g = this.curve.g;
                this.g = options.curve.g;
                this.g.precompute(options.curve.n.bitLength() + 1);
                this.hash = options.hash || options.curve.hash;
            }
            module.exports = EC;
            EC.prototype.keyPair = function keyPair(options) {
                return new KeyPair(this, options);
            };
            EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
                return KeyPair.fromPrivate(this, priv, enc);
            };
            EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
                return KeyPair.fromPublic(this, pub, enc);
            };
            EC.prototype.genKeyPair = function genKeyPair(options) {
                if (!options)
                    options = {};
                var drbg = new HmacDRBG({
                    hash: this.hash,
                    pers: options.pers,
                    persEnc: options.persEnc || 'utf8',
                    entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
                    entropyEnc: options.entropy && options.entropyEnc || 'utf8',
                    nonce: this.n.toArray()
                });
                var bytes = this.n.byteLength();
                var ns2 = this.n.sub(new BN(2));
                do {
                    var priv = new BN(drbg.generate(bytes));
                    if (priv.cmp(ns2) > 0)
                        continue;
                    priv.iaddn(1);
                    return this.keyFromPrivate(priv);
                } while (true);
            };
            EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
                var delta = msg.byteLength() * 8 - this.n.bitLength();
                if (delta > 0)
                    msg = msg.ushrn(delta);
                if (!truncOnly && msg.cmp(this.n) >= 0)
                    return msg.sub(this.n);
                else
                    return msg;
            };
            EC.prototype.sign = function sign(msg, key, enc, options) {
                if (typeof enc === 'object') {
                    options = enc;
                    enc = null;
                }
                if (!options)
                    options = {};
                key = this.keyFromPrivate(key, enc);
                msg = this._truncateToN(new BN(msg, 16));
                var bytes = this.n.byteLength();
                var bkey = key.getPrivate().toArray('be', bytes);
                var nonce = msg.toArray('be', bytes);
                var drbg = new HmacDRBG({
                    hash: this.hash,
                    entropy: bkey,
                    nonce: nonce,
                    pers: options.pers,
                    persEnc: options.persEnc || 'utf8'
                });
                var ns1 = this.n.sub(new BN(1));
                for (var iter = 0; true; iter++) {
                    var k = options.k ? options.k(iter) : new BN(drbg.generate(this.n.byteLength()));
                    k = this._truncateToN(k, true);
                    if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
                        continue;
                    var kp = this.g.mul(k);
                    if (kp.isInfinity())
                        continue;
                    var kpX = kp.getX();
                    var r = kpX.umod(this.n);
                    if (r.cmpn(0) === 0)
                        continue;
                    var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
                    s = s.umod(this.n);
                    if (s.cmpn(0) === 0)
                        continue;
                    var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | (kpX.cmp(r) !== 0 ? 2 : 0);
                    if (options.canonical && s.cmp(this.nh) > 0) {
                        s = this.n.sub(s);
                        recoveryParam ^= 1;
                    }
                    return new Signature({
                        r: r,
                        s: s,
                        recoveryParam: recoveryParam
                    });
                }
            };
            EC.prototype.verify = function verify(msg, signature, key, enc) {
                msg = this._truncateToN(new BN(msg, 16));
                key = this.keyFromPublic(key, enc);
                signature = new Signature(signature, 'hex');
                var r = signature.r;
                var s = signature.s;
                if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
                    return false;
                if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
                    return false;
                var sinv = s.invm(this.n);
                var u1 = sinv.mul(msg).umod(this.n);
                var u2 = sinv.mul(r).umod(this.n);
                if (!this.curve._maxwellTrick) {
                    var p = this.g.mulAdd(u1, key.getPublic(), u2);
                    if (p.isInfinity())
                        return false;
                    return p.getX().umod(this.n).cmp(r) === 0;
                }
                var p = this.g.jmulAdd(u1, key.getPublic(), u2);
                if (p.isInfinity())
                    return false;
                return p.eqXToP(r);
            };
            EC.prototype.recoverPubKey = function (msg, signature, j, enc) {
                signature = new Signature(signature, enc);
                var n = this.n;
                var e = new BN(msg);
                var r = signature.r;
                var s = signature.s;
                var isYOdd = j & 1;
                var isSecondKey = j >> 1;
                if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
                    throw new Error('Unable to find sencond key candinate');
                if (isSecondKey)
                    r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
                else
                    r = this.curve.pointFromX(r, isYOdd);
                var rInv = signature.r.invm(n);
                var s1 = n.sub(e).mul(rInv).umod(n);
                var s2 = s.mul(rInv).umod(n);
                return this.g.mulAdd(s1, r, s2);
            };
            EC.prototype.getKeyRecoveryParam = function (e, signature, Q, enc) {
                signature = new Signature(signature, enc);
                if (signature.recoveryParam !== null)
                    return signature.recoveryParam;
                for (var i = 0; i < 4; i++) {
                    var Qprime;
                    try {
                        Qprime = this.recoverPubKey(e, signature, i);
                    } catch (e) {
                        continue;
                    }
                    if (Qprime.eq(Q))
                        return i;
                }
                throw new Error('Unable to find valid recovery factor');
            };
        },
        {
            '../../elliptic': 69,
            './key': 77,
            './signature': 78,
            'bn.js': 19,
            'hmac-drbg': 101
        }
    ],
    77: [
        function (_dereq_, module, exports) {
            'use strict';
            var BN = _dereq_('bn.js');
            var elliptic = _dereq_('../../elliptic');
            var utils = elliptic.utils;
            var assert = utils.assert;
            function KeyPair(ec, options) {
                this.ec = ec;
                this.priv = null;
                this.pub = null;
                if (options.priv)
                    this._importPrivate(options.priv, options.privEnc);
                if (options.pub)
                    this._importPublic(options.pub, options.pubEnc);
            }
            module.exports = KeyPair;
            KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
                if (pub instanceof KeyPair)
                    return pub;
                return new KeyPair(ec, {
                    pub: pub,
                    pubEnc: enc
                });
            };
            KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
                if (priv instanceof KeyPair)
                    return priv;
                return new KeyPair(ec, {
                    priv: priv,
                    privEnc: enc
                });
            };
            KeyPair.prototype.validate = function validate() {
                var pub = this.getPublic();
                if (pub.isInfinity())
                    return {
                        result: false,
                        reason: 'Invalid public key'
                    };
                if (!pub.validate())
                    return {
                        result: false,
                        reason: 'Public key is not a point'
                    };
                if (!pub.mul(this.ec.curve.n).isInfinity())
                    return {
                        result: false,
                        reason: 'Public key * N != O'
                    };
                return {
                    result: true,
                    reason: null
                };
            };
            KeyPair.prototype.getPublic = function getPublic(compact, enc) {
                if (typeof compact === 'string') {
                    enc = compact;
                    compact = null;
                }
                if (!this.pub)
                    this.pub = this.ec.g.mul(this.priv);
                if (!enc)
                    return this.pub;
                return this.pub.encode(enc, compact);
            };
            KeyPair.prototype.getPrivate = function getPrivate(enc) {
                if (enc === 'hex')
                    return this.priv.toString(16, 2);
                else
                    return this.priv;
            };
            KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
                this.priv = new BN(key, enc || 16);
                this.priv = this.priv.umod(this.ec.curve.n);
            };
            KeyPair.prototype._importPublic = function _importPublic(key, enc) {
                if (key.x || key.y) {
                    if (this.ec.curve.type === 'mont') {
                    } else if (this.ec.curve.type === 'short' || this.ec.curve.type === 'edwards') {
                    }
                    this.pub = this.ec.curve.point(key.x, key.y);
                    return;
                }
                this.pub = this.ec.curve.decodePoint(key, enc);
            };
            KeyPair.prototype.derive = function derive(pub) {
                return pub.mul(this.priv).getX();
            };
            KeyPair.prototype.sign = function sign(msg, enc, options) {
                return this.ec.sign(msg, this, enc, options);
            };
            KeyPair.prototype.verify = function verify(msg, signature) {
                return this.ec.verify(msg, signature, this);
            };
            KeyPair.prototype.inspect = function inspect() {
                return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) + ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
            };
        },
        {
            '../../elliptic': 69,
            'bn.js': 19
        }
    ],
    78: [
        function (_dereq_, module, exports) {
            'use strict';
            var BN = _dereq_('bn.js');
            var elliptic = _dereq_('../../elliptic');
            var utils = elliptic.utils;
            var assert = utils.assert;
            function Signature(options, enc) {
                if (options instanceof Signature)
                    return options;
                if (this._importDER(options, enc))
                    return;
                this.r = new BN(options.r, 16);
                this.s = new BN(options.s, 16);
                if (options.recoveryParam === undefined)
                    this.recoveryParam = null;
                else
                    this.recoveryParam = options.recoveryParam;
            }
            module.exports = Signature;
            function Position() {
                this.place = 0;
            }
            function getLength(buf, p) {
                var initial = buf[p.place++];
                if (!(initial & 128)) {
                    return initial;
                }
                var octetLen = initial & 15;
                var val = 0;
                for (var i = 0, off = p.place; i < octetLen; i++, off++) {
                    val <<= 8;
                    val |= buf[off];
                }
                p.place = off;
                return val;
            }
            function rmPadding(buf) {
                var i = 0;
                var len = buf.length - 1;
                while (!buf[i] && !(buf[i + 1] & 128) && i < len) {
                    i++;
                }
                if (i === 0) {
                    return buf;
                }
                return buf.slice(i);
            }
            Signature.prototype._importDER = function _importDER(data, enc) {
                data = utils.toArray(data, enc);
                var p = new Position();
                if (data[p.place++] !== 48) {
                    return false;
                }
                var len = getLength(data, p);
                if (len + p.place !== data.length) {
                    return false;
                }
                if (data[p.place++] !== 2) {
                    return false;
                }
                var rlen = getLength(data, p);
                var r = data.slice(p.place, rlen + p.place);
                p.place += rlen;
                if (data[p.place++] !== 2) {
                    return false;
                }
                var slen = getLength(data, p);
                if (data.length !== slen + p.place) {
                    return false;
                }
                var s = data.slice(p.place, slen + p.place);
                if (r[0] === 0 && r[1] & 128) {
                    r = r.slice(1);
                }
                if (s[0] === 0 && s[1] & 128) {
                    s = s.slice(1);
                }
                this.r = new BN(r);
                this.s = new BN(s);
                this.recoveryParam = null;
                return true;
            };
            function constructLength(arr, len) {
                if (len < 128) {
                    arr.push(len);
                    return;
                }
                var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
                arr.push(octets | 128);
                while (--octets) {
                    arr.push(len >>> (octets << 3) & 255);
                }
                arr.push(len);
            }
            Signature.prototype.toDER = function toDER(enc) {
                var r = this.r.toArray();
                var s = this.s.toArray();
                if (r[0] & 128)
                    r = [0].concat(r);
                if (s[0] & 128)
                    s = [0].concat(s);
                r = rmPadding(r);
                s = rmPadding(s);
                while (!s[0] && !(s[1] & 128)) {
                    s = s.slice(1);
                }
                var arr = [2];
                constructLength(arr, r.length);
                arr = arr.concat(r);
                arr.push(2);
                constructLength(arr, s.length);
                var backHalf = arr.concat(s);
                var res = [48];
                constructLength(res, backHalf.length);
                res = res.concat(backHalf);
                return utils.encode(res, enc);
            };
        },
        {
            '../../elliptic': 69,
            'bn.js': 19
        }
    ],
    79: [
        function (_dereq_, module, exports) {
            'use strict';
            var hash = _dereq_('hash.js');
            var elliptic = _dereq_('../../elliptic');
            var utils = elliptic.utils;
            var assert = utils.assert;
            var parseBytes = utils.parseBytes;
            var KeyPair = _dereq_('./key');
            var Signature = _dereq_('./signature');
            function EDDSA(curve) {
                if (!(this instanceof EDDSA))
                    return new EDDSA(curve);
                var curve = elliptic.curves[curve].curve;
                this.curve = curve;
                this.g = curve.g;
                this.g.precompute(curve.n.bitLength() + 1);
                this.pointClass = curve.point().constructor;
                this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
                this.hash = hash.sha512;
            }
            module.exports = EDDSA;
            EDDSA.prototype.sign = function sign(message, secret) {
                message = parseBytes(message);
                var key = this.keyFromSecret(secret);
                var r = this.hashInt(key.messagePrefix(), message);
                var R = this.g.mul(r);
                var Rencoded = this.encodePoint(R);
                var s_ = this.hashInt(Rencoded, key.pubBytes(), message).mul(key.priv());
                var S = r.add(s_).umod(this.curve.n);
                return this.makeSignature({
                    R: R,
                    S: S,
                    Rencoded: Rencoded
                });
            };
            EDDSA.prototype.verify = function verify(message, sig, pub) {
                message = parseBytes(message);
                sig = this.makeSignature(sig);
                var key = this.keyFromPublic(pub);
                var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
                var SG = this.g.mul(sig.S());
                var RplusAh = sig.R().add(key.pub().mul(h));
                return RplusAh.eq(SG);
            };
            EDDSA.prototype.hashInt = function hashInt() {
                var hash = this.hash();
                for (var i = 0; i < arguments.length; i++)
                    hash.update(arguments[i]);
                return utils.intFromLE(hash.digest()).umod(this.curve.n);
            };
            EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
                return KeyPair.fromPublic(this, pub);
            };
            EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
                return KeyPair.fromSecret(this, secret);
            };
            EDDSA.prototype.makeSignature = function makeSignature(sig) {
                if (sig instanceof Signature)
                    return sig;
                return new Signature(this, sig);
            };
            EDDSA.prototype.encodePoint = function encodePoint(point) {
                var enc = point.getY().toArray('le', this.encodingLength);
                enc[this.encodingLength - 1] |= point.getX().isOdd() ? 128 : 0;
                return enc;
            };
            EDDSA.prototype.decodePoint = function decodePoint(bytes) {
                bytes = utils.parseBytes(bytes);
                var lastIx = bytes.length - 1;
                var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~128);
                var xIsOdd = (bytes[lastIx] & 128) !== 0;
                var y = utils.intFromLE(normed);
                return this.curve.pointFromY(y, xIsOdd);
            };
            EDDSA.prototype.encodeInt = function encodeInt(num) {
                return num.toArray('le', this.encodingLength);
            };
            EDDSA.prototype.decodeInt = function decodeInt(bytes) {
                return utils.intFromLE(bytes);
            };
            EDDSA.prototype.isPoint = function isPoint(val) {
                return val instanceof this.pointClass;
            };
        },
        {
            '../../elliptic': 69,
            './key': 80,
            './signature': 81,
            'hash.js': 89
        }
    ],
    80: [
        function (_dereq_, module, exports) {
            'use strict';
            var elliptic = _dereq_('../../elliptic');
            var utils = elliptic.utils;
            var assert = utils.assert;
            var parseBytes = utils.parseBytes;
            var cachedProperty = utils.cachedProperty;
            function KeyPair(eddsa, params) {
                this.eddsa = eddsa;
                this._secret = parseBytes(params.secret);
                if (eddsa.isPoint(params.pub))
                    this._pub = params.pub;
                else
                    this._pubBytes = parseBytes(params.pub);
            }
            KeyPair.fromPublic = function fromPublic(eddsa, pub) {
                if (pub instanceof KeyPair)
                    return pub;
                return new KeyPair(eddsa, { pub: pub });
            };
            KeyPair.fromSecret = function fromSecret(eddsa, secret) {
                if (secret instanceof KeyPair)
                    return secret;
                return new KeyPair(eddsa, { secret: secret });
            };
            KeyPair.prototype.secret = function secret() {
                return this._secret;
            };
            cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
                return this.eddsa.encodePoint(this.pub());
            });
            cachedProperty(KeyPair, 'pub', function pub() {
                if (this._pubBytes)
                    return this.eddsa.decodePoint(this._pubBytes);
                return this.eddsa.g.mul(this.priv());
            });
            cachedProperty(KeyPair, 'privBytes', function privBytes() {
                var eddsa = this.eddsa;
                var hash = this.hash();
                var lastIx = eddsa.encodingLength - 1;
                var a = hash.slice(0, eddsa.encodingLength);
                a[0] &= 248;
                a[lastIx] &= 127;
                a[lastIx] |= 64;
                return a;
            });
            cachedProperty(KeyPair, 'priv', function priv() {
                return this.eddsa.decodeInt(this.privBytes());
            });
            cachedProperty(KeyPair, 'hash', function hash() {
                return this.eddsa.hash().update(this.secret()).digest();
            });
            cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
                return this.hash().slice(this.eddsa.encodingLength);
            });
            KeyPair.prototype.sign = function sign(message) {
                return this.eddsa.sign(message, this);
            };
            KeyPair.prototype.verify = function verify(message, sig) {
                return this.eddsa.verify(message, sig, this);
            };
            KeyPair.prototype.getSecret = function getSecret(enc) {
                return utils.encode(this.secret(), enc);
            };
            KeyPair.prototype.getPublic = function getPublic(enc) {
                return utils.encode(this.pubBytes(), enc);
            };
            module.exports = KeyPair;
        },
        { '../../elliptic': 69 }
    ],
    81: [
        function (_dereq_, module, exports) {
            'use strict';
            var BN = _dereq_('bn.js');
            var elliptic = _dereq_('../../elliptic');
            var utils = elliptic.utils;
            var assert = utils.assert;
            var cachedProperty = utils.cachedProperty;
            var parseBytes = utils.parseBytes;
            function Signature(eddsa, sig) {
                this.eddsa = eddsa;
                if (typeof sig !== 'object')
                    sig = parseBytes(sig);
                if (Array.isArray(sig)) {
                    sig = {
                        R: sig.slice(0, eddsa.encodingLength),
                        S: sig.slice(eddsa.encodingLength)
                    };
                }
                if (eddsa.isPoint(sig.R))
                    this._R = sig.R;
                if (sig.S instanceof BN)
                    this._S = sig.S;
                this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
                this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
            }
            cachedProperty(Signature, 'S', function S() {
                return this.eddsa.decodeInt(this.Sencoded());
            });
            cachedProperty(Signature, 'R', function R() {
                return this.eddsa.decodePoint(this.Rencoded());
            });
            cachedProperty(Signature, 'Rencoded', function Rencoded() {
                return this.eddsa.encodePoint(this.R());
            });
            cachedProperty(Signature, 'Sencoded', function Sencoded() {
                return this.eddsa.encodeInt(this.S());
            });
            Signature.prototype.toBytes = function toBytes() {
                return this.Rencoded().concat(this.Sencoded());
            };
            Signature.prototype.toHex = function toHex() {
                return utils.encode(this.toBytes(), 'hex').toUpperCase();
            };
            module.exports = Signature;
        },
        {
            '../../elliptic': 69,
            'bn.js': 19
        }
    ],
    82: [
        function (_dereq_, module, exports) {
            module.exports = {
                doubles: {
                    step: 4,
                    points: [
                        [
                            'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
                            'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
                        ],
                        [
                            '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
                            '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
                        ],
                        [
                            '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
                            'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
                        ],
                        [
                            '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
                            '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
                        ],
                        [
                            '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
                            '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
                        ],
                        [
                            '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
                            '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
                        ],
                        [
                            'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
                            '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
                        ],
                        [
                            '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
                            'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
                        ],
                        [
                            'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
                            '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
                        ],
                        [
                            'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
                            'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
                        ],
                        [
                            'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
                            '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
                        ],
                        [
                            '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
                            '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
                        ],
                        [
                            '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
                            '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
                        ],
                        [
                            '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
                            '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
                        ],
                        [
                            '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
                            '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
                        ],
                        [
                            '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
                            '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
                        ],
                        [
                            '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
                            '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
                        ],
                        [
                            '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
                            '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
                        ],
                        [
                            '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
                            'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
                        ],
                        [
                            'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
                            '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
                        ],
                        [
                            'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
                            '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
                        ],
                        [
                            '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
                            '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
                        ],
                        [
                            '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
                            '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
                        ],
                        [
                            'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
                            '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
                        ],
                        [
                            '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
                            'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
                        ],
                        [
                            'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
                            '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
                        ],
                        [
                            'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
                            'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
                        ],
                        [
                            'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
                            '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
                        ],
                        [
                            'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
                            'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
                        ],
                        [
                            'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
                            '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
                        ],
                        [
                            '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
                            'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
                        ],
                        [
                            '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
                            '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
                        ],
                        [
                            'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
                            '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
                        ],
                        [
                            '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
                            'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
                        ],
                        [
                            'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
                            '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
                        ],
                        [
                            'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
                            '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
                        ],
                        [
                            'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
                            'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
                        ],
                        [
                            '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
                            '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
                        ],
                        [
                            '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
                            '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
                        ],
                        [
                            '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
                            'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
                        ],
                        [
                            '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
                            '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
                        ],
                        [
                            'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
                            '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
                        ],
                        [
                            '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
                            '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
                        ],
                        [
                            '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
                            'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
                        ],
                        [
                            '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
                            '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
                        ],
                        [
                            'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
                            '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
                        ],
                        [
                            '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
                            'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
                        ],
                        [
                            'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
                            'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
                        ],
                        [
                            'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
                            '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
                        ],
                        [
                            '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
                            'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
                        ],
                        [
                            '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
                            'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
                        ],
                        [
                            'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
                            '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
                        ],
                        [
                            'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
                            '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
                        ],
                        [
                            'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
                            '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
                        ],
                        [
                            '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
                            'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
                        ],
                        [
                            '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
                            '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
                        ],
                        [
                            'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
                            'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
                        ],
                        [
                            '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
                            'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
                        ],
                        [
                            '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
                            '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
                        ],
                        [
                            '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
                            '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
                        ],
                        [
                            'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
                            'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
                        ],
                        [
                            '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
                            '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
                        ],
                        [
                            '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
                            '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
                        ],
                        [
                            'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
                            '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
                        ],
                        [
                            'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
                            'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
                        ]
                    ]
                },
                naf: {
                    wnd: 7,
                    points: [
                        [
                            'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
                            '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
                        ],
                        [
                            '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
                            'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
                        ],
                        [
                            '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
                            '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
                        ],
                        [
                            'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
                            'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
                        ],
                        [
                            '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
                            'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
                        ],
                        [
                            'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
                            'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
                        ],
                        [
                            'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
                            '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
                        ],
                        [
                            'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
                            '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
                        ],
                        [
                            '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
                            '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
                        ],
                        [
                            '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
                            '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
                        ],
                        [
                            '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
                            '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
                        ],
                        [
                            '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
                            '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
                        ],
                        [
                            'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
                            'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
                        ],
                        [
                            'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
                            '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
                        ],
                        [
                            '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
                            'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
                        ],
                        [
                            '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
                            'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
                        ],
                        [
                            '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
                            '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
                        ],
                        [
                            '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
                            '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
                        ],
                        [
                            '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
                            '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
                        ],
                        [
                            '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
                            'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
                        ],
                        [
                            'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
                            'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
                        ],
                        [
                            '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
                            '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
                        ],
                        [
                            '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
                            '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
                        ],
                        [
                            'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
                            'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
                        ],
                        [
                            '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
                            '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
                        ],
                        [
                            'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
                            'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
                        ],
                        [
                            'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
                            'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
                        ],
                        [
                            '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
                            '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
                        ],
                        [
                            '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
                            '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
                        ],
                        [
                            '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
                            '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
                        ],
                        [
                            'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
                            '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
                        ],
                        [
                            '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
                            '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
                        ],
                        [
                            'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
                            '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
                        ],
                        [
                            '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
                            'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
                        ],
                        [
                            '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
                            'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
                        ],
                        [
                            'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
                            'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
                        ],
                        [
                            '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
                            '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
                        ],
                        [
                            '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
                            'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
                        ],
                        [
                            'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
                            'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
                        ],
                        [
                            '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
                            '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
                        ],
                        [
                            '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
                            'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
                        ],
                        [
                            '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
                            '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
                        ],
                        [
                            '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
                            'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
                        ],
                        [
                            'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
                            '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
                        ],
                        [
                            '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
                            '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
                        ],
                        [
                            '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
                            'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
                        ],
                        [
                            '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
                            'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
                        ],
                        [
                            'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
                            'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
                        ],
                        [
                            'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
                            'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
                        ],
                        [
                            '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
                            '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
                        ],
                        [
                            '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
                            '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
                        ],
                        [
                            'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
                            '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
                        ],
                        [
                            'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
                            'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
                        ],
                        [
                            '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
                            '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
                        ],
                        [
                            '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
                            '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
                        ],
                        [
                            'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
                            '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
                        ],
                        [
                            '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
                            '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
                        ],
                        [
                            'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
                            'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
                        ],
                        [
                            '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
                            'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
                        ],
                        [
                            '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
                            '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
                        ],
                        [
                            'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
                            '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
                        ],
                        [
                            'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
                            '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
                        ],
                        [
                            '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
                            '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
                        ],
                        [
                            '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
                            '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
                        ],
                        [
                            '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
                            'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
                        ],
                        [
                            '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
                            'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
                        ],
                        [
                            '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
                            '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
                        ],
                        [
                            '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
                            '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
                        ],
                        [
                            '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
                            '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
                        ],
                        [
                            '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
                            'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
                        ],
                        [
                            'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
                            'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
                        ],
                        [
                            '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
                            'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
                        ],
                        [
                            'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
                            '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
                        ],
                        [
                            'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
                            '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
                        ],
                        [
                            'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
                            '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
                        ],
                        [
                            'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
                            '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
                        ],
                        [
                            '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
                            'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
                        ],
                        [
                            '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
                            '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
                        ],
                        [
                            '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
                            'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
                        ],
                        [
                            'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
                            'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
                        ],
                        [
                            'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
                            '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
                        ],
                        [
                            'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
                            'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
                        ],
                        [
                            'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
                            '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
                        ],
                        [
                            '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
                            '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
                        ],
                        [
                            'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
                            '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
                        ],
                        [
                            'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
                            '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
                        ],
                        [
                            '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
                            '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
                        ],
                        [
                            '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
                            'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
                        ],
                        [
                            'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
                            '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
                        ],
                        [
                            'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
                            '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
                        ],
                        [
                            'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
                            '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
                        ],
                        [
                            '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
                            '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
                        ],
                        [
                            'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
                            'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
                        ],
                        [
                            '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
                            'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
                        ],
                        [
                            'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
                            'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
                        ],
                        [
                            'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
                            '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
                        ],
                        [
                            '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
                            'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
                        ],
                        [
                            'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
                            '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
                        ],
                        [
                            'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
                            '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
                        ],
                        [
                            'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
                            '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
                        ],
                        [
                            '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
                            'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
                        ],
                        [
                            '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
                            'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
                        ],
                        [
                            'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
                            '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
                        ],
                        [
                            '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
                            'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
                        ],
                        [
                            '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
                            '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
                        ],
                        [
                            '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
                            'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
                        ],
                        [
                            'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
                            'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
                        ],
                        [
                            '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
                            'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
                        ],
                        [
                            '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
                            '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
                        ],
                        [
                            '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
                            'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
                        ],
                        [
                            '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
                            '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
                        ],
                        [
                            'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
                            'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
                        ],
                        [
                            '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
                            '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
                        ],
                        [
                            'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
                            '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
                        ],
                        [
                            '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
                            '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
                        ],
                        [
                            'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
                            'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
                        ],
                        [
                            'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
                            '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
                        ],
                        [
                            'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
                            'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
                        ],
                        [
                            '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
                            'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
                        ],
                        [
                            '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
                            '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
                        ],
                        [
                            '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
                            'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
                        ],
                        [
                            '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
                            '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
                        ],
                        [
                            '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
                            '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
                        ],
                        [
                            '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
                            'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
                        ],
                        [
                            '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
                            '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
                        ],
                        [
                            '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
                            '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
                        ],
                        [
                            '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
                            '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
                        ]
                    ]
                }
            };
        },
        {}
    ],
    83: [
        function (_dereq_, module, exports) {
            'use strict';
            var utils = exports;
            var BN = _dereq_('bn.js');
            var minAssert = _dereq_('minimalistic-assert');
            var minUtils = _dereq_('minimalistic-crypto-utils');
            utils.assert = minAssert;
            utils.toArray = minUtils.toArray;
            utils.zero2 = minUtils.zero2;
            utils.toHex = minUtils.toHex;
            utils.encode = minUtils.encode;
            function getNAF(num, w) {
                var naf = [];
                var ws = 1 << w + 1;
                var k = num.clone();
                while (k.cmpn(1) >= 0) {
                    var z;
                    if (k.isOdd()) {
                        var mod = k.andln(ws - 1);
                        if (mod > (ws >> 1) - 1)
                            z = (ws >> 1) - mod;
                        else
                            z = mod;
                        k.isubn(z);
                    } else {
                        z = 0;
                    }
                    naf.push(z);
                    var shift = k.cmpn(0) !== 0 && k.andln(ws - 1) === 0 ? w + 1 : 1;
                    for (var i = 1; i < shift; i++)
                        naf.push(0);
                    k.iushrn(shift);
                }
                return naf;
            }
            utils.getNAF = getNAF;
            function getJSF(k1, k2) {
                var jsf = [
                    [],
                    []
                ];
                k1 = k1.clone();
                k2 = k2.clone();
                var d1 = 0;
                var d2 = 0;
                while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
                    var m14 = k1.andln(3) + d1 & 3;
                    var m24 = k2.andln(3) + d2 & 3;
                    if (m14 === 3)
                        m14 = -1;
                    if (m24 === 3)
                        m24 = -1;
                    var u1;
                    if ((m14 & 1) === 0) {
                        u1 = 0;
                    } else {
                        var m8 = k1.andln(7) + d1 & 7;
                        if ((m8 === 3 || m8 === 5) && m24 === 2)
                            u1 = -m14;
                        else
                            u1 = m14;
                    }
                    jsf[0].push(u1);
                    var u2;
                    if ((m24 & 1) === 0) {
                        u2 = 0;
                    } else {
                        var m8 = k2.andln(7) + d2 & 7;
                        if ((m8 === 3 || m8 === 5) && m14 === 2)
                            u2 = -m24;
                        else
                            u2 = m24;
                    }
                    jsf[1].push(u2);
                    if (2 * d1 === u1 + 1)
                        d1 = 1 - d1;
                    if (2 * d2 === u2 + 1)
                        d2 = 1 - d2;
                    k1.iushrn(1);
                    k2.iushrn(1);
                }
                return jsf;
            }
            utils.getJSF = getJSF;
            function cachedProperty(obj, name, computer) {
                var key = '_' + name;
                obj.prototype[name] = function cachedProperty() {
                    return this[key] !== undefined ? this[key] : this[key] = computer.call(this);
                };
            }
            utils.cachedProperty = cachedProperty;
            function parseBytes(bytes) {
                return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : bytes;
            }
            utils.parseBytes = parseBytes;
            function intFromLE(bytes) {
                return new BN(bytes, 'hex', 'le');
            }
            utils.intFromLE = intFromLE;
        },
        {
            'bn.js': 19,
            'minimalistic-assert': 108,
            'minimalistic-crypto-utils': 109
        }
    ],
    84: [
        function (_dereq_, module, exports) {
            module.exports = {
                '_from': 'elliptic@^6.0.0',
                '_id': 'elliptic@6.4.1',
                '_inBundle': false,
                '_integrity': 'sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==',
                '_location': '/elliptic',
                '_phantomChildren': {},
                '_requested': {
                    'type': 'range',
                    'registry': true,
                    'raw': 'elliptic@^6.0.0',
                    'name': 'elliptic',
                    'escapedName': 'elliptic',
                    'rawSpec': '^6.0.0',
                    'saveSpec': null,
                    'fetchSpec': '^6.0.0'
                },
                '_requiredBy': [
                    '/browserify-sign',
                    '/create-ecdh'
                ],
                '_resolved': 'https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz',
                '_shasum': 'c2d0b7776911b86722c632c3c06c60f2f819939a',
                '_spec': 'elliptic@^6.0.0',
                '_where': '/home/travis/build/falsandtru/pjax-api/node_modules/browserify-sign',
                'author': {
                    'name': 'Fedor Indutny',
                    'email': 'fedor@indutny.com'
                },
                'bugs': { 'url': 'https://github.com/indutny/elliptic/issues' },
                'bundleDependencies': false,
                'dependencies': {
                    'bn.js': '^4.4.0',
                    'brorand': '^1.0.1',
                    'hash.js': '^1.0.0',
                    'hmac-drbg': '^1.0.0',
                    'inherits': '^2.0.1',
                    'minimalistic-assert': '^1.0.0',
                    'minimalistic-crypto-utils': '^1.0.0'
                },
                'deprecated': false,
                'description': 'EC cryptography',
                'devDependencies': {
                    'brfs': '^1.4.3',
                    'coveralls': '^2.11.3',
                    'grunt': '^0.4.5',
                    'grunt-browserify': '^5.0.0',
                    'grunt-cli': '^1.2.0',
                    'grunt-contrib-connect': '^1.0.0',
                    'grunt-contrib-copy': '^1.0.0',
                    'grunt-contrib-uglify': '^1.0.1',
                    'grunt-mocha-istanbul': '^3.0.1',
                    'grunt-saucelabs': '^8.6.2',
                    'istanbul': '^0.4.2',
                    'jscs': '^2.9.0',
                    'jshint': '^2.6.0',
                    'mocha': '^2.1.0'
                },
                'files': ['lib'],
                'homepage': 'https://github.com/indutny/elliptic',
                'keywords': [
                    'EC',
                    'Elliptic',
                    'curve',
                    'Cryptography'
                ],
                'license': 'MIT',
                'main': 'lib/elliptic.js',
                'name': 'elliptic',
                'repository': {
                    'type': 'git',
                    'url': 'git+ssh://git@github.com/indutny/elliptic.git'
                },
                'scripts': {
                    'jscs': 'jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js',
                    'jshint': 'jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js',
                    'lint': 'npm run jscs && npm run jshint',
                    'test': 'npm run lint && npm run unit',
                    'unit': 'istanbul test _mocha --reporter=spec test/index.js',
                    'version': 'grunt dist && git add dist/'
                },
                'version': '6.4.1'
            };
        },
        {}
    ],
    85: [
        function (_dereq_, module, exports) {
            var objectCreate = Object.create || objectCreatePolyfill;
            var objectKeys = Object.keys || objectKeysPolyfill;
            var bind = Function.prototype.bind || functionBindPolyfill;
            function EventEmitter() {
                if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) {
                    this._events = objectCreate(null);
                    this._eventsCount = 0;
                }
                this._maxListeners = this._maxListeners || undefined;
            }
            module.exports = EventEmitter;
            EventEmitter.EventEmitter = EventEmitter;
            EventEmitter.prototype._events = undefined;
            EventEmitter.prototype._maxListeners = undefined;
            var defaultMaxListeners = 10;
            var hasDefineProperty;
            try {
                var o = {};
                if (Object.defineProperty)
                    Object.defineProperty(o, 'x', { value: 0 });
                hasDefineProperty = o.x === 0;
            } catch (err) {
                hasDefineProperty = false;
            }
            if (hasDefineProperty) {
                Object.defineProperty(EventEmitter, 'defaultMaxListeners', {
                    enumerable: true,
                    get: function () {
                        return defaultMaxListeners;
                    },
                    set: function (arg) {
                        if (typeof arg !== 'number' || arg < 0 || arg !== arg)
                            throw new TypeError('"defaultMaxListeners" must be a positive number');
                        defaultMaxListeners = arg;
                    }
                });
            } else {
                EventEmitter.defaultMaxListeners = defaultMaxListeners;
            }
            EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
                if (typeof n !== 'number' || n < 0 || isNaN(n))
                    throw new TypeError('"n" argument must be a positive number');
                this._maxListeners = n;
                return this;
            };
            function $getMaxListeners(that) {
                if (that._maxListeners === undefined)
                    return EventEmitter.defaultMaxListeners;
                return that._maxListeners;
            }
            EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
                return $getMaxListeners(this);
            };
            function emitNone(handler, isFn, self) {
                if (isFn)
                    handler.call(self);
                else {
                    var len = handler.length;
                    var listeners = arrayClone(handler, len);
                    for (var i = 0; i < len; ++i)
                        listeners[i].call(self);
                }
            }
            function emitOne(handler, isFn, self, arg1) {
                if (isFn)
                    handler.call(self, arg1);
                else {
                    var len = handler.length;
                    var listeners = arrayClone(handler, len);
                    for (var i = 0; i < len; ++i)
                        listeners[i].call(self, arg1);
                }
            }
            function emitTwo(handler, isFn, self, arg1, arg2) {
                if (isFn)
                    handler.call(self, arg1, arg2);
                else {
                    var len = handler.length;
                    var listeners = arrayClone(handler, len);
                    for (var i = 0; i < len; ++i)
                        listeners[i].call(self, arg1, arg2);
                }
            }
            function emitThree(handler, isFn, self, arg1, arg2, arg3) {
                if (isFn)
                    handler.call(self, arg1, arg2, arg3);
                else {
                    var len = handler.length;
                    var listeners = arrayClone(handler, len);
                    for (var i = 0; i < len; ++i)
                        listeners[i].call(self, arg1, arg2, arg3);
                }
            }
            function emitMany(handler, isFn, self, args) {
                if (isFn)
                    handler.apply(self, args);
                else {
                    var len = handler.length;
                    var listeners = arrayClone(handler, len);
                    for (var i = 0; i < len; ++i)
                        listeners[i].apply(self, args);
                }
            }
            EventEmitter.prototype.emit = function emit(type) {
                var er, handler, len, args, i, events;
                var doError = type === 'error';
                events = this._events;
                if (events)
                    doError = doError && events.error == null;
                else if (!doError)
                    return false;
                if (doError) {
                    if (arguments.length > 1)
                        er = arguments[1];
                    if (er instanceof Error) {
                        throw er;
                    } else {
                        var err = new Error('Unhandled "error" event. (' + er + ')');
                        err.context = er;
                        throw err;
                    }
                    return false;
                }
                handler = events[type];
                if (!handler)
                    return false;
                var isFn = typeof handler === 'function';
                len = arguments.length;
                switch (len) {
                case 1:
                    emitNone(handler, isFn, this);
                    break;
                case 2:
                    emitOne(handler, isFn, this, arguments[1]);
                    break;
                case 3:
                    emitTwo(handler, isFn, this, arguments[1], arguments[2]);
                    break;
                case 4:
                    emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);
                    break;
                default:
                    args = new Array(len - 1);
                    for (i = 1; i < len; i++)
                        args[i - 1] = arguments[i];
                    emitMany(handler, isFn, this, args);
                }
                return true;
            };
            function _addListener(target, type, listener, prepend) {
                var m;
                var events;
                var existing;
                if (typeof listener !== 'function')
                    throw new TypeError('"listener" argument must be a function');
                events = target._events;
                if (!events) {
                    events = target._events = objectCreate(null);
                    target._eventsCount = 0;
                } else {
                    if (events.newListener) {
                        target.emit('newListener', type, listener.listener ? listener.listener : listener);
                        events = target._events;
                    }
                    existing = events[type];
                }
                if (!existing) {
                    existing = events[type] = listener;
                    ++target._eventsCount;
                } else {
                    if (typeof existing === 'function') {
                        existing = events[type] = prepend ? [
                            listener,
                            existing
                        ] : [
                            existing,
                            listener
                        ];
                    } else {
                        if (prepend) {
                            existing.unshift(listener);
                        } else {
                            existing.push(listener);
                        }
                    }
                    if (!existing.warned) {
                        m = $getMaxListeners(target);
                        if (m && m > 0 && existing.length > m) {
                            existing.warned = true;
                            var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' "' + String(type) + '" listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit.');
                            w.name = 'MaxListenersExceededWarning';
                            w.emitter = target;
                            w.type = type;
                            w.count = existing.length;
                            if (typeof console === 'object' && console.warn) {
                                console.warn('%s: %s', w.name, w.message);
                            }
                        }
                    }
                }
                return target;
            }
            EventEmitter.prototype.addListener = function addListener(type, listener) {
                return _addListener(this, type, listener, false);
            };
            EventEmitter.prototype.on = EventEmitter.prototype.addListener;
            EventEmitter.prototype.prependListener = function prependListener(type, listener) {
                return _addListener(this, type, listener, true);
            };
            function onceWrapper() {
                if (!this.fired) {
                    this.target.removeListener(this.type, this.wrapFn);
                    this.fired = true;
                    switch (arguments.length) {
                    case 0:
                        return this.listener.call(this.target);
                    case 1:
                        return this.listener.call(this.target, arguments[0]);
                    case 2:
                        return this.listener.call(this.target, arguments[0], arguments[1]);
                    case 3:
                        return this.listener.call(this.target, arguments[0], arguments[1], arguments[2]);
                    default:
                        var args = new Array(arguments.length);
                        for (var i = 0; i < args.length; ++i)
                            args[i] = arguments[i];
                        this.listener.apply(this.target, args);
                    }
                }
            }
            function _onceWrap(target, type, listener) {
                var state = {
                    fired: false,
                    wrapFn: undefined,
                    target: target,
                    type: type,
                    listener: listener
                };
                var wrapped = bind.call(onceWrapper, state);
                wrapped.listener = listener;
                state.wrapFn = wrapped;
                return wrapped;
            }
            EventEmitter.prototype.once = function once(type, listener) {
                if (typeof listener !== 'function')
                    throw new TypeError('"listener" argument must be a function');
                this.on(type, _onceWrap(this, type, listener));
                return this;
            };
            EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) {
                if (typeof listener !== 'function')
                    throw new TypeError('"listener" argument must be a function');
                this.prependListener(type, _onceWrap(this, type, listener));
                return this;
            };
            EventEmitter.prototype.removeListener = function removeListener(type, listener) {
                var list, events, position, i, originalListener;
                if (typeof listener !== 'function')
                    throw new TypeError('"listener" argument must be a function');
                events = this._events;
                if (!events)
                    return this;
                list = events[type];
                if (!list)
                    return this;
                if (list === listener || list.listener === listener) {
                    if (--this._eventsCount === 0)
                        this._events = objectCreate(null);
                    else {
                        delete events[type];
                        if (events.removeListener)
                            this.emit('removeListener', type, list.listener || listener);
                    }
                } else if (typeof list !== 'function') {
                    position = -1;
                    for (i = list.length - 1; i >= 0; i--) {
                        if (list[i] === listener || list[i].listener === listener) {
                            originalListener = list[i].listener;
                            position = i;
                            break;
                        }
                    }
                    if (position < 0)
                        return this;
                    if (position === 0)
                        list.shift();
                    else
                        spliceOne(list, position);
                    if (list.length === 1)
                        events[type] = list[0];
                    if (events.removeListener)
                        this.emit('removeListener', type, originalListener || listener);
                }
                return this;
            };
            EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {
                var listeners, events, i;
                events = this._events;
                if (!events)
                    return this;
                if (!events.removeListener) {
                    if (arguments.length === 0) {
                        this._events = objectCreate(null);
                        this._eventsCount = 0;
                    } else if (events[type]) {
                        if (--this._eventsCount === 0)
                            this._events = objectCreate(null);
                        else
                            delete events[type];
                    }
                    return this;
                }
                if (arguments.length === 0) {
                    var keys = objectKeys(events);
                    var key;
                    for (i = 0; i < keys.length; ++i) {
                        key = keys[i];
                        if (key === 'removeListener')
                            continue;
                        this.removeAllListeners(key);
                    }
                    this.removeAllListeners('removeListener');
                    this._events = objectCreate(null);
                    this._eventsCount = 0;
                    return this;
                }
                listeners = events[type];
                if (typeof listeners === 'function') {
                    this.removeListener(type, listeners);
                } else if (listeners) {
                    for (i = listeners.length - 1; i >= 0; i--) {
                        this.removeListener(type, listeners[i]);
                    }
                }
                return this;
            };
            function _listeners(target, type, unwrap) {
                var events = target._events;
                if (!events)
                    return [];
                var evlistener = events[type];
                if (!evlistener)
                    return [];
                if (typeof evlistener === 'function')
                    return unwrap ? [evlistener.listener || evlistener] : [evlistener];
                return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
            }
            EventEmitter.prototype.listeners = function listeners(type) {
                return _listeners(this, type, true);
            };
            EventEmitter.prototype.rawListeners = function rawListeners(type) {
                return _listeners(this, type, false);
            };
            EventEmitter.listenerCount = function (emitter, type) {
                if (typeof emitter.listenerCount === 'function') {
                    return emitter.listenerCount(type);
                } else {
                    return listenerCount.call(emitter, type);
                }
            };
            EventEmitter.prototype.listenerCount = listenerCount;
            function listenerCount(type) {
                var events = this._events;
                if (events) {
                    var evlistener = events[type];
                    if (typeof evlistener === 'function') {
                        return 1;
                    } else if (evlistener) {
                        return evlistener.length;
                    }
                }
                return 0;
            }
            EventEmitter.prototype.eventNames = function eventNames() {
                return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];
            };
            function spliceOne(list, index) {
                for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)
                    list[i] = list[k];
                list.pop();
            }
            function arrayClone(arr, n) {
                var copy = new Array(n);
                for (var i = 0; i < n; ++i)
                    copy[i] = arr[i];
                return copy;
            }
            function unwrapListeners(arr) {
                var ret = new Array(arr.length);
                for (var i = 0; i < ret.length; ++i) {
                    ret[i] = arr[i].listener || arr[i];
                }
                return ret;
            }
            function objectCreatePolyfill(proto) {
                var F = function () {
                };
                F.prototype = proto;
                return new F();
            }
            function objectKeysPolyfill(obj) {
                var keys = [];
                for (var k in obj)
                    if (Object.prototype.hasOwnProperty.call(obj, k)) {
                        keys.push(k);
                    }
                return k;
            }
            function functionBindPolyfill(context) {
                var fn = this;
                return function () {
                    return fn.apply(context, arguments);
                };
            }
        },
        {}
    ],
    86: [
        function (_dereq_, module, exports) {
            var Buffer = _dereq_('safe-buffer').Buffer;
            var MD5 = _dereq_('md5.js');
            function EVP_BytesToKey(password, salt, keyBits, ivLen) {
                if (!Buffer.isBuffer(password))
                    password = Buffer.from(password, 'binary');
                if (salt) {
                    if (!Buffer.isBuffer(salt))
                        salt = Buffer.from(salt, 'binary');
                    if (salt.length !== 8)
                        throw new RangeError('salt should be Buffer with 8 byte length');
                }
                var keyLen = keyBits / 8;
                var key = Buffer.alloc(keyLen);
                var iv = Buffer.alloc(ivLen || 0);
                var tmp = Buffer.alloc(0);
                while (keyLen > 0 || ivLen > 0) {
                    var hash = new MD5();
                    hash.update(tmp);
                    hash.update(password);
                    if (salt)
                        hash.update(salt);
                    tmp = hash.digest();
                    var used = 0;
                    if (keyLen > 0) {
                        var keyStart = key.length - keyLen;
                        used = Math.min(keyLen, tmp.length);
                        tmp.copy(key, keyStart, 0, used);
                        keyLen -= used;
                    }
                    if (used < tmp.length && ivLen > 0) {
                        var ivStart = iv.length - ivLen;
                        var length = Math.min(ivLen, tmp.length - used);
                        tmp.copy(iv, ivStart, used, used + length);
                        ivLen -= length;
                    }
                }
                tmp.fill(0);
                return {
                    key: key,
                    iv: iv
                };
            }
            module.exports = EVP_BytesToKey;
        },
        {
            'md5.js': 106,
            'safe-buffer': 145
        }
    ],
    87: [
        function (_dereq_, module, exports) {
            'use strict';
            class FiggyPudding {
                constructor(specs, opts, providers) {
                    this.__specs = specs || {};
                    Object.keys(this.__specs).forEach(alias => {
                        if (typeof this.__specs[alias] === 'string') {
                            const key = this.__specs[alias];
                            const realSpec = this.__specs[key];
                            if (realSpec) {
                                const aliasArr = realSpec.aliases || [];
                                aliasArr.push(alias, key);
                                realSpec.aliases = [...new Set(aliasArr)];
                                this.__specs[alias] = realSpec;
                            } else {
                                throw new Error(`Alias refers to invalid key: ${ key } -> ${ alias }`);
                            }
                        }
                    });
                    this.__opts = opts || {};
                    this.__providers = reverse(providers.filter(x => x != null && typeof x === 'object'));
                    this.__isFiggyPudding = true;
                }
                get(key) {
                    return pudGet(this, key, true);
                }
                get [Symbol.toStringTag]() {
                    return 'FiggyPudding';
                }
                forEach(fn, thisArg = this) {
                    for (let [key, value] of this.entries()) {
                        fn.call(thisArg, value, key, this);
                    }
                }
                toJSON() {
                    const obj = {};
                    this.forEach((val, key) => {
                        obj[key] = val;
                    });
                    return obj;
                }
                *entries(_matcher) {
                    for (let key of Object.keys(this.__specs)) {
                        yield [
                            key,
                            this.get(key)
                        ];
                    }
                    const matcher = _matcher || this.__opts.other;
                    if (matcher) {
                        const seen = new Set();
                        for (let p of this.__providers) {
                            const iter = p.entries ? p.entries(matcher) : entries(p);
                            for (let [key, val] of iter) {
                                if (matcher(key) && !seen.has(key)) {
                                    seen.add(key);
                                    yield [
                                        key,
                                        val
                                    ];
                                }
                            }
                        }
                    }
                }
                *[Symbol.iterator]() {
                    for (let [key, value] of this.entries()) {
                        yield [
                            key,
                            value
                        ];
                    }
                }
                *keys() {
                    for (let [key] of this.entries()) {
                        yield key;
                    }
                }
                *values() {
                    for (let [, value] of this.entries()) {
                        yield value;
                    }
                }
                concat(...moreConfig) {
                    return new Proxy(new FiggyPudding(this.__specs, this.__opts, reverse(this.__providers).concat(moreConfig)), proxyHandler);
                }
            }
            try {
                const util = _dereq_('util');
                FiggyPudding.prototype[util.inspect.custom] = function (depth, opts) {
                    return this[Symbol.toStringTag] + ' ' + util.inspect(this.toJSON(), opts);
                };
            } catch (e) {
            }
            function BadKeyError(key) {
                throw Object.assign(new Error(`invalid config key requested: ${ key }`), { code: 'EBADKEY' });
            }
            function pudGet(pud, key, validate) {
                let spec = pud.__specs[key];
                if (validate && !spec && (!pud.__opts.other || !pud.__opts.other(key))) {
                    BadKeyError(key);
                } else {
                    if (!spec) {
                        spec = {};
                    }
                    let ret;
                    for (let p of pud.__providers) {
                        ret = tryGet(key, p);
                        if (ret === undefined && spec.aliases && spec.aliases.length) {
                            for (let alias of spec.aliases) {
                                if (alias === key) {
                                    continue;
                                }
                                ret = tryGet(alias, p);
                                if (ret !== undefined) {
                                    break;
                                }
                            }
                        }
                        if (ret !== undefined) {
                            break;
                        }
                    }
                    if (ret === undefined && spec.default !== undefined) {
                        if (typeof spec.default === 'function') {
                            return spec.default(pud);
                        } else {
                            return spec.default;
                        }
                    } else {
                        return ret;
                    }
                }
            }
            function tryGet(key, p) {
                let ret;
                if (p.__isFiggyPudding) {
                    ret = pudGet(p, key, false);
                } else if (typeof p.get === 'function') {
                    ret = p.get(key);
                } else {
                    ret = p[key];
                }
                return ret;
            }
            const proxyHandler = {
                has(obj, prop) {
                    return prop in obj.__specs && pudGet(obj, prop, false) !== undefined;
                },
                ownKeys(obj) {
                    return Object.keys(obj.__specs);
                },
                get(obj, prop) {
                    if (typeof prop === 'symbol' || prop.slice(0, 2) === '__' || prop in FiggyPudding.prototype) {
                        return obj[prop];
                    }
                    return obj.get(prop);
                },
                set(obj, prop, value) {
                    if (typeof prop === 'symbol' || prop.slice(0, 2) === '__') {
                        obj[prop] = value;
                        return true;
                    } else {
                        throw new Error('figgyPudding options cannot be modified. Use .concat() instead.');
                    }
                },
                deleteProperty() {
                    throw new Error('figgyPudding options cannot be deleted. Use .concat() and shadow them instead.');
                }
            };
            module.exports = figgyPudding;
            function figgyPudding(specs, opts) {
                function factory(...providers) {
                    return new Proxy(new FiggyPudding(specs, opts, providers), proxyHandler);
                }
                return factory;
            }
            function reverse(arr) {
                const ret = [];
                arr.forEach(x => ret.unshift(x));
                return ret;
            }
            function entries(obj) {
                return Object.keys(obj).map(k => [
                    k,
                    obj[k]
                ]);
            }
        },
        { 'util': 248 }
    ],
    88: [
        function (_dereq_, module, exports) {
            'use strict';
            var Buffer = _dereq_('safe-buffer').Buffer;
            var Transform = _dereq_('stream').Transform;
            var inherits = _dereq_('inherits');
            function throwIfNotStringOrBuffer(val, prefix) {
                if (!Buffer.isBuffer(val) && typeof val !== 'string') {
                    throw new TypeError(prefix + ' must be a string or a buffer');
                }
            }
            function HashBase(blockSize) {
                Transform.call(this);
                this._block = Buffer.allocUnsafe(blockSize);
                this._blockSize = blockSize;
                this._blockOffset = 0;
                this._length = [
                    0,
                    0,
                    0,
                    0
                ];
                this._finalized = false;
            }
            inherits(HashBase, Transform);
            HashBase.prototype._transform = function (chunk, encoding, callback) {
                var error = null;
                try {
                    this.update(chunk, encoding);
                } catch (err) {
                    error = err;
                }
                callback(error);
            };
            HashBase.prototype._flush = function (callback) {
                var error = null;
                try {
                    this.push(this.digest());
                } catch (err) {
                    error = err;
                }
                callback(error);
            };
            HashBase.prototype.update = function (data, encoding) {
                throwIfNotStringOrBuffer(data, 'Data');
                if (this._finalized)
                    throw new Error('Digest already called');
                if (!Buffer.isBuffer(data))
                    data = Buffer.from(data, encoding);
                var block = this._block;
                var offset = 0;
                while (this._blockOffset + data.length - offset >= this._blockSize) {
                    for (var i = this._blockOffset; i < this._blockSize;)
                        block[i++] = data[offset++];
                    this._update();
                    this._blockOffset = 0;
                }
                while (offset < data.length)
                    block[this._blockOffset++] = data[offset++];
                for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
                    this._length[j] += carry;
                    carry = this._length[j] / 4294967296 | 0;
                    if (carry > 0)
                        this._length[j] -= 4294967296 * carry;
                }
                return this;
            };
            HashBase.prototype._update = function () {
                throw new Error('_update is not implemented');
            };
            HashBase.prototype.digest = function (encoding) {
                if (this._finalized)
                    throw new Error('Digest already called');
                this._finalized = true;
                var digest = this._digest();
                if (encoding !== undefined)
                    digest = digest.toString(encoding);
                this._block.fill(0);
                this._blockOffset = 0;
                for (var i = 0; i < 4; ++i)
                    this._length[i] = 0;
                return digest;
            };
            HashBase.prototype._digest = function () {
                throw new Error('_digest is not implemented');
            };
            module.exports = HashBase;
        },
        {
            'inherits': 103,
            'safe-buffer': 145,
            'stream': 236
        }
    ],
    89: [
        function (_dereq_, module, exports) {
            var hash = exports;
            hash.utils = _dereq_('./hash/utils');
            hash.common = _dereq_('./hash/common');
            hash.sha = _dereq_('./hash/sha');
            hash.ripemd = _dereq_('./hash/ripemd');
            hash.hmac = _dereq_('./hash/hmac');
            hash.sha1 = hash.sha.sha1;
            hash.sha256 = hash.sha.sha256;
            hash.sha224 = hash.sha.sha224;
            hash.sha384 = hash.sha.sha384;
            hash.sha512 = hash.sha.sha512;
            hash.ripemd160 = hash.ripemd.ripemd160;
        },
        {
            './hash/common': 90,
            './hash/hmac': 91,
            './hash/ripemd': 92,
            './hash/sha': 93,
            './hash/utils': 100
        }
    ],
    90: [
        function (_dereq_, module, exports) {
            'use strict';
            var utils = _dereq_('./utils');
            var assert = _dereq_('minimalistic-assert');
            function BlockHash() {
                this.pending = null;
                this.pendingTotal = 0;
                this.blockSize = this.constructor.blockSize;
                this.outSize = this.constructor.outSize;
                this.hmacStrength = this.constructor.hmacStrength;
                this.padLength = this.constructor.padLength / 8;
                this.endian = 'big';
                this._delta8 = this.blockSize / 8;
                this._delta32 = this.blockSize / 32;
            }
            exports.BlockHash = BlockHash;
            BlockHash.prototype.update = function update(msg, enc) {
                msg = utils.toArray(msg, enc);
                if (!this.pending)
                    this.pending = msg;
                else
                    this.pending = this.pending.concat(msg);
                this.pendingTotal += msg.length;
                if (this.pending.length >= this._delta8) {
                    msg = this.pending;
                    var r = msg.length % this._delta8;
                    this.pending = msg.slice(msg.length - r, msg.length);
                    if (this.pending.length === 0)
                        this.pending = null;
                    msg = utils.join32(msg, 0, msg.length - r, this.endian);
                    for (var i = 0; i < msg.length; i += this._delta32)
                        this._update(msg, i, i + this._delta32);
                }
                return this;
            };
            BlockHash.prototype.digest = function digest(enc) {
                this.update(this._pad());
                return this._digest(enc);
            };
            BlockHash.prototype._pad = function pad() {
                var len = this.pendingTotal;
                var bytes = this._delta8;
                var k = bytes - (len + this.padLength) % bytes;
                var res = new Array(k + this.padLength);
                res[0] = 128;
                for (var i = 1; i < k; i++)
                    res[i] = 0;
                len <<= 3;
                if (this.endian === 'big') {
                    for (var t = 8; t < this.padLength; t++)
                        res[i++] = 0;
                    res[i++] = 0;
                    res[i++] = 0;
                    res[i++] = 0;
                    res[i++] = 0;
                    res[i++] = len >>> 24 & 255;
                    res[i++] = len >>> 16 & 255;
                    res[i++] = len >>> 8 & 255;
                    res[i++] = len & 255;
                } else {
                    res[i++] = len & 255;
                    res[i++] = len >>> 8 & 255;
                    res[i++] = len >>> 16 & 255;
                    res[i++] = len >>> 24 & 255;
                    res[i++] = 0;
                    res[i++] = 0;
                    res[i++] = 0;
                    res[i++] = 0;
                    for (t = 8; t < this.padLength; t++)
                        res[i++] = 0;
                }
                return res;
            };
        },
        {
            './utils': 100,
            'minimalistic-assert': 108
        }
    ],
    91: [
        function (_dereq_, module, exports) {
            'use strict';
            var utils = _dereq_('./utils');
            var assert = _dereq_('minimalistic-assert');
            function Hmac(hash, key, enc) {
                if (!(this instanceof Hmac))
                    return new Hmac(hash, key, enc);
                this.Hash = hash;
                this.blockSize = hash.blockSize / 8;
                this.outSize = hash.outSize / 8;
                this.inner = null;
                this.outer = null;
                this._init(utils.toArray(key, enc));
            }
            module.exports = Hmac;
            Hmac.prototype._init = function init(key) {
                if (key.length > this.blockSize)
                    key = new this.Hash().update(key).digest();
                for (var i = key.length; i < this.blockSize; i++)
                    key.push(0);
                for (i = 0; i < key.length; i++)
                    key[i] ^= 54;
                this.inner = new this.Hash().update(key);
                for (i = 0; i < key.length; i++)
                    key[i] ^= 106;
                this.outer = new this.Hash().update(key);
            };
            Hmac.prototype.update = function update(msg, enc) {
                this.inner.update(msg, enc);
                return this;
            };
            Hmac.prototype.digest = function digest(enc) {
                this.outer.update(this.inner.digest());
                return this.outer.digest(enc);
            };
        },
        {
            './utils': 100,
            'minimalistic-assert': 108
        }
    ],
    92: [
        function (_dereq_, module, exports) {
            'use strict';
            var utils = _dereq_('./utils');
            var common = _dereq_('./common');
            var rotl32 = utils.rotl32;
            var sum32 = utils.sum32;
            var sum32_3 = utils.sum32_3;
            var sum32_4 = utils.sum32_4;
            var BlockHash = common.BlockHash;
            function RIPEMD160() {
                if (!(this instanceof RIPEMD160))
                    return new RIPEMD160();
                BlockHash.call(this);
                this.h = [
                    1732584193,
                    4023233417,
                    2562383102,
                    271733878,
                    3285377520
                ];
                this.endian = 'little';
            }
            utils.inherits(RIPEMD160, BlockHash);
            exports.ripemd160 = RIPEMD160;
            RIPEMD160.blockSize = 512;
            RIPEMD160.outSize = 160;
            RIPEMD160.hmacStrength = 192;
            RIPEMD160.padLength = 64;
            RIPEMD160.prototype._update = function update(msg, start) {
                var A = this.h[0];
                var B = this.h[1];
                var C = this.h[2];
                var D = this.h[3];
                var E = this.h[4];
                var Ah = A;
                var Bh = B;
                var Ch = C;
                var Dh = D;
                var Eh = E;
                for (var j = 0; j < 80; j++) {
                    var T = sum32(rotl32(sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), s[j]), E);
                    A = E;
                    E = D;
                    D = rotl32(C, 10);
                    C = B;
                    B = T;
                    T = sum32(rotl32(sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), sh[j]), Eh);
                    Ah = Eh;
                    Eh = Dh;
                    Dh = rotl32(Ch, 10);
                    Ch = Bh;
                    Bh = T;
                }
                T = sum32_3(this.h[1], C, Dh);
                this.h[1] = sum32_3(this.h[2], D, Eh);
                this.h[2] = sum32_3(this.h[3], E, Ah);
                this.h[3] = sum32_3(this.h[4], A, Bh);
                this.h[4] = sum32_3(this.h[0], B, Ch);
                this.h[0] = T;
            };
            RIPEMD160.prototype._digest = function digest(enc) {
                if (enc === 'hex')
                    return utils.toHex32(this.h, 'little');
                else
                    return utils.split32(this.h, 'little');
            };
            function f(j, x, y, z) {
                if (j <= 15)
                    return x ^ y ^ z;
                else if (j <= 31)
                    return x & y | ~x & z;
                else if (j <= 47)
                    return (x | ~y) ^ z;
                else if (j <= 63)
                    return x & z | y & ~z;
                else
                    return x ^ (y | ~z);
            }
            function K(j) {
                if (j <= 15)
                    return 0;
                else if (j <= 31)
                    return 1518500249;
                else if (j <= 47)
                    return 1859775393;
                else if (j <= 63)
                    return 2400959708;
                else
                    return 2840853838;
            }
            function Kh(j) {
                if (j <= 15)
                    return 1352829926;
                else if (j <= 31)
                    return 1548603684;
                else if (j <= 47)
                    return 1836072691;
                else if (j <= 63)
                    return 2053994217;
                else
                    return 0;
            }
            var r = [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                14,
                15,
                7,
                4,
                13,
                1,
                10,
                6,
                15,
                3,
                12,
                0,
                9,
                5,
                2,
                14,
                11,
                8,
                3,
                10,
                14,
                4,
                9,
                15,
                8,
                1,
                2,
                7,
                0,
                6,
                13,
                11,
                5,
                12,
                1,
                9,
                11,
                10,
                0,
                8,
                12,
                4,
                13,
                3,
                7,
                15,
                14,
                5,
                6,
                2,
                4,
                0,
                5,
                9,
                7,
                12,
                2,
                10,
                14,
                1,
                3,
                8,
                11,
                6,
                15,
                13
            ];
            var rh = [
                5,
                14,
                7,
                0,
                9,
                2,
                11,
                4,
                13,
                6,
                15,
                8,
                1,
                10,
                3,
                12,
                6,
                11,
                3,
                7,
                0,
                13,
                5,
                10,
                14,
                15,
                8,
                12,
                4,
                9,
                1,
                2,
                15,
                5,
                1,
                3,
                7,
                14,
                6,
                9,
                11,
                8,
                12,
                2,
                10,
                0,
                4,
                13,
                8,
                6,
                4,
                1,
                3,
                11,
                15,
                0,
                5,
                12,
                2,
                13,
                9,
                7,
                10,
                14,
                12,
                15,
                10,
                4,
                1,
                5,
                8,
                7,
                6,
                2,
                13,
                14,
                0,
                3,
                9,
                11
            ];
            var s = [
                11,
                14,
                15,
                12,
                5,
                8,
                7,
                9,
                11,
                13,
                14,
                15,
                6,
                7,
                9,
                8,
                7,
                6,
                8,
                13,
                11,
                9,
                7,
                15,
                7,
                12,
                15,
                9,
                11,
                7,
                13,
                12,
                11,
                13,
                6,
                7,
                14,
                9,
                13,
                15,
                14,
                8,
                13,
                6,
                5,
                12,
                7,
                5,
                11,
                12,
                14,
                15,
                14,
                15,
                9,
                8,
                9,
                14,
                5,
                6,
                8,
                6,
                5,
                12,
                9,
                15,
                5,
                11,
                6,
                8,
                13,
                12,
                5,
                12,
                13,
                14,
                11,
                8,
                5,
                6
            ];
            var sh = [
                8,
                9,
                9,
                11,
                13,
                15,
                15,
                5,
                7,
                7,
                8,
                11,
                14,
                14,
                12,
                6,
                9,
                13,
                15,
                7,
                12,
                8,
                9,
                11,
                7,
                7,
                12,
                7,
                6,
                15,
                13,
                11,
                9,
                7,
                15,
                11,
                8,
                6,
                6,
                14,
                12,
                13,
                5,
                14,
                13,
                13,
                7,
                5,
                15,
                5,
                8,
                11,
                14,
                14,
                6,
                14,
                6,
                9,
                12,
                9,
                12,
                5,
                15,
                8,
                8,
                5,
                12,
                9,
                12,
                5,
                14,
                6,
                8,
                13,
                6,
                5,
                15,
                13,
                11,
                11
            ];
        },
        {
            './common': 90,
            './utils': 100
        }
    ],
    93: [
        function (_dereq_, module, exports) {
            'use strict';
            exports.sha1 = _dereq_('./sha/1');
            exports.sha224 = _dereq_('./sha/224');
            exports.sha256 = _dereq_('./sha/256');
            exports.sha384 = _dereq_('./sha/384');
            exports.sha512 = _dereq_('./sha/512');
        },
        {
            './sha/1': 94,
            './sha/224': 95,
            './sha/256': 96,
            './sha/384': 97,
            './sha/512': 98
        }
    ],
    94: [
        function (_dereq_, module, exports) {
            'use strict';
            var utils = _dereq_('../utils');
            var common = _dereq_('../common');
            var shaCommon = _dereq_('./common');
            var rotl32 = utils.rotl32;
            var sum32 = utils.sum32;
            var sum32_5 = utils.sum32_5;
            var ft_1 = shaCommon.ft_1;
            var BlockHash = common.BlockHash;
            var sha1_K = [
                1518500249,
                1859775393,
                2400959708,
                3395469782
            ];
            function SHA1() {
                if (!(this instanceof SHA1))
                    return new SHA1();
                BlockHash.call(this);
                this.h = [
                    1732584193,
                    4023233417,
                    2562383102,
                    271733878,
                    3285377520
                ];
                this.W = new Array(80);
            }
            utils.inherits(SHA1, BlockHash);
            module.exports = SHA1;
            SHA1.blockSize = 512;
            SHA1.outSize = 160;
            SHA1.hmacStrength = 80;
            SHA1.padLength = 64;
            SHA1.prototype._update = function _update(msg, start) {
                var W = this.W;
                for (var i = 0; i < 16; i++)
                    W[i] = msg[start + i];
                for (; i < W.length; i++)
                    W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
                var a = this.h[0];
                var b = this.h[1];
                var c = this.h[2];
                var d = this.h[3];
                var e = this.h[4];
                for (i = 0; i < W.length; i++) {
                    var s = ~~(i / 20);
                    var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
                    e = d;
                    d = c;
                    c = rotl32(b, 30);
                    b = a;
                    a = t;
                }
                this.h[0] = sum32(this.h[0], a);
                this.h[1] = sum32(this.h[1], b);
                this.h[2] = sum32(this.h[2], c);
                this.h[3] = sum32(this.h[3], d);
                this.h[4] = sum32(this.h[4], e);
            };
            SHA1.prototype._digest = function digest(enc) {
                if (enc === 'hex')
                    return utils.toHex32(this.h, 'big');
                else
                    return utils.split32(this.h, 'big');
            };
        },
        {
            '../common': 90,
            '../utils': 100,
            './common': 99
        }
    ],
    95: [
        function (_dereq_, module, exports) {
            'use strict';
            var utils = _dereq_('../utils');
            var SHA256 = _dereq_('./256');
            function SHA224() {
                if (!(this instanceof SHA224))
                    return new SHA224();
                SHA256.call(this);
                this.h = [
                    3238371032,
                    914150663,
                    812702999,
                    4144912697,
                    4290775857,
                    1750603025,
                    1694076839,
                    3204075428
                ];
            }
            utils.inherits(SHA224, SHA256);
            module.exports = SHA224;
            SHA224.blockSize = 512;
            SHA224.outSize = 224;
            SHA224.hmacStrength = 192;
            SHA224.padLength = 64;
            SHA224.prototype._digest = function digest(enc) {
                if (enc === 'hex')
                    return utils.toHex32(this.h.slice(0, 7), 'big');
                else
                    return utils.split32(this.h.slice(0, 7), 'big');
            };
        },
        {
            '../utils': 100,
            './256': 96
        }
    ],
    96: [
        function (_dereq_, module, exports) {
            'use strict';
            var utils = _dereq_('../utils');
            var common = _dereq_('../common');
            var shaCommon = _dereq_('./common');
            var assert = _dereq_('minimalistic-assert');
            var sum32 = utils.sum32;
            var sum32_4 = utils.sum32_4;
            var sum32_5 = utils.sum32_5;
            var ch32 = shaCommon.ch32;
            var maj32 = shaCommon.maj32;
            var s0_256 = shaCommon.s0_256;
            var s1_256 = shaCommon.s1_256;
            var g0_256 = shaCommon.g0_256;
            var g1_256 = shaCommon.g1_256;
            var BlockHash = common.BlockHash;
            var sha256_K = [
                1116352408,
                1899447441,
                3049323471,
                3921009573,
                961987163,
                1508970993,
                2453635748,
                2870763221,
                3624381080,
                310598401,
                607225278,
                1426881987,
                1925078388,
                2162078206,
                2614888103,
                3248222580,
                3835390401,
                4022224774,
                264347078,
                604807628,
                770255983,
                1249150122,
                1555081692,
                1996064986,
                2554220882,
                2821834349,
                2952996808,
                3210313671,
                3336571891,
                3584528711,
                113926993,
                338241895,
                666307205,
                773529912,
                1294757372,
                1396182291,
                1695183700,
                1986661051,
                2177026350,
                2456956037,
                2730485921,
                2820302411,
                3259730800,
                3345764771,
                3516065817,
                3600352804,
                4094571909,
                275423344,
                430227734,
                506948616,
                659060556,
                883997877,
                958139571,
                1322822218,
                1537002063,
                1747873779,
                1955562222,
                2024104815,
                2227730452,
                2361852424,
                2428436474,
                2756734187,
                3204031479,
                3329325298
            ];
            function SHA256() {
                if (!(this instanceof SHA256))
                    return new SHA256();
                BlockHash.call(this);
                this.h = [
                    1779033703,
                    3144134277,
                    1013904242,
                    2773480762,
                    1359893119,
                    2600822924,
                    528734635,
                    1541459225
                ];
                this.k = sha256_K;
                this.W = new Array(64);
            }
            utils.inherits(SHA256, BlockHash);
            module.exports = SHA256;
            SHA256.blockSize = 512;
            SHA256.outSize = 256;
            SHA256.hmacStrength = 192;
            SHA256.padLength = 64;
            SHA256.prototype._update = function _update(msg, start) {
                var W = this.W;
                for (var i = 0; i < 16; i++)
                    W[i] = msg[start + i];
                for (; i < W.length; i++)
                    W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
                var a = this.h[0];
                var b = this.h[1];
                var c = this.h[2];
                var d = this.h[3];
                var e = this.h[4];
                var f = this.h[5];
                var g = this.h[6];
                var h = this.h[7];
                for (i = 0; i < W.length; i++) {
                    var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
                    var T2 = sum32(s0_256(a), maj32(a, b, c));
                    h = g;
                    g = f;
                    f = e;
                    e = sum32(d, T1);
                    d = c;
                    c = b;
                    b = a;
                    a = sum32(T1, T2);
                }
                this.h[0] = sum32(this.h[0], a);
                this.h[1] = sum32(this.h[1], b);
                this.h[2] = sum32(this.h[2], c);
                this.h[3] = sum32(this.h[3], d);
                this.h[4] = sum32(this.h[4], e);
                this.h[5] = sum32(this.h[5], f);
                this.h[6] = sum32(this.h[6], g);
                this.h[7] = sum32(this.h[7], h);
            };
            SHA256.prototype._digest = function digest(enc) {
                if (enc === 'hex')
                    return utils.toHex32(this.h, 'big');
                else
                    return utils.split32(this.h, 'big');
            };
        },
        {
            '../common': 90,
            '../utils': 100,
            './common': 99,
            'minimalistic-assert': 108
        }
    ],
    97: [
        function (_dereq_, module, exports) {
            'use strict';
            var utils = _dereq_('../utils');
            var SHA512 = _dereq_('./512');
            function SHA384() {
                if (!(this instanceof SHA384))
                    return new SHA384();
                SHA512.call(this);
                this.h = [
                    3418070365,
                    3238371032,
                    1654270250,
                    914150663,
                    2438529370,
                    812702999,
                    355462360,
                    4144912697,
                    1731405415,
                    4290775857,
                    2394180231,
                    1750603025,
                    3675008525,
                    1694076839,
                    1203062813,
                    3204075428
                ];
            }
            utils.inherits(SHA384, SHA512);
            module.exports = SHA384;
            SHA384.blockSize = 1024;
            SHA384.outSize = 384;
            SHA384.hmacStrength = 192;
            SHA384.padLength = 128;
            SHA384.prototype._digest = function digest(enc) {
                if (enc === 'hex')
                    return utils.toHex32(this.h.slice(0, 12), 'big');
                else
                    return utils.split32(this.h.slice(0, 12), 'big');
            };
        },
        {
            '../utils': 100,
            './512': 98
        }
    ],
    98: [
        function (_dereq_, module, exports) {
            'use strict';
            var utils = _dereq_('../utils');
            var common = _dereq_('../common');
            var assert = _dereq_('minimalistic-assert');
            var rotr64_hi = utils.rotr64_hi;
            var rotr64_lo = utils.rotr64_lo;
            var shr64_hi = utils.shr64_hi;
            var shr64_lo = utils.shr64_lo;
            var sum64 = utils.sum64;
            var sum64_hi = utils.sum64_hi;
            var sum64_lo = utils.sum64_lo;
            var sum64_4_hi = utils.sum64_4_hi;
            var sum64_4_lo = utils.sum64_4_lo;
            var sum64_5_hi = utils.sum64_5_hi;
            var sum64_5_lo = utils.sum64_5_lo;
            var BlockHash = common.BlockHash;
            var sha512_K = [
                1116352408,
                3609767458,
                1899447441,
                602891725,
                3049323471,
                3964484399,
                3921009573,
                2173295548,
                961987163,
                4081628472,
                1508970993,
                3053834265,
                2453635748,
                2937671579,
                2870763221,
                3664609560,
                3624381080,
                2734883394,
                310598401,
                1164996542,
                607225278,
                1323610764,
                1426881987,
                3590304994,
                1925078388,
                4068182383,
                2162078206,
                991336113,
                2614888103,
                633803317,
                3248222580,
                3479774868,
                3835390401,
                2666613458,
                4022224774,
                944711139,
                264347078,
                2341262773,
                604807628,
                2007800933,
                770255983,
                1495990901,
                1249150122,
                1856431235,
                1555081692,
                3175218132,
                1996064986,
                2198950837,
                2554220882,
                3999719339,
                2821834349,
                766784016,
                2952996808,
                2566594879,
                3210313671,
                3203337956,
                3336571891,
                1034457026,
                3584528711,
                2466948901,
                113926993,
                3758326383,
                338241895,
                168717936,
                666307205,
                1188179964,
                773529912,
                1546045734,
                1294757372,
                1522805485,
                1396182291,
                2643833823,
                1695183700,
                2343527390,
                1986661051,
                1014477480,
                2177026350,
                1206759142,
                2456956037,
                344077627,
                2730485921,
                1290863460,
                2820302411,
                3158454273,
                3259730800,
                3505952657,
                3345764771,
                106217008,
                3516065817,
                3606008344,
                3600352804,
                1432725776,
                4094571909,
                1467031594,
                275423344,
                851169720,
                430227734,
                3100823752,
                506948616,
                1363258195,
                659060556,
                3750685593,
                883997877,
                3785050280,
                958139571,
                3318307427,
                1322822218,
                3812723403,
                1537002063,
                2003034995,
                1747873779,
                3602036899,
                1955562222,
                1575990012,
                2024104815,
                1125592928,
                2227730452,
                2716904306,
                2361852424,
                442776044,
                2428436474,
                593698344,
                2756734187,
                3733110249,
                3204031479,
                2999351573,
                3329325298,
                3815920427,
                3391569614,
                3928383900,
                3515267271,
                566280711,
                3940187606,
                3454069534,
                4118630271,
                4000239992,
                116418474,
                1914138554,
                174292421,
                2731055270,
                289380356,
                3203993006,
                460393269,
                320620315,
                685471733,
                587496836,
                852142971,
                1086792851,
                1017036298,
                365543100,
                1126000580,
                2618297676,
                1288033470,
                3409855158,
                1501505948,
                4234509866,
                1607167915,
                987167468,
                1816402316,
                1246189591
            ];
            function SHA512() {
                if (!(this instanceof SHA512))
                    return new SHA512();
                BlockHash.call(this);
                this.h = [
                    1779033703,
                    4089235720,
                    3144134277,
                    2227873595,
                    1013904242,
                    4271175723,
                    2773480762,
                    1595750129,
                    1359893119,
                    2917565137,
                    2600822924,
                    725511199,
                    528734635,
                    4215389547,
                    1541459225,
                    327033209
                ];
                this.k = sha512_K;
                this.W = new Array(160);
            }
            utils.inherits(SHA512, BlockHash);
            module.exports = SHA512;
            SHA512.blockSize = 1024;
            SHA512.outSize = 512;
            SHA512.hmacStrength = 192;
            SHA512.padLength = 128;
            SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
                var W = this.W;
                for (var i = 0; i < 32; i++)
                    W[i] = msg[start + i];
                for (; i < W.length; i += 2) {
                    var c0_hi = g1_512_hi(W[i - 4], W[i - 3]);
                    var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
                    var c1_hi = W[i - 14];
                    var c1_lo = W[i - 13];
                    var c2_hi = g0_512_hi(W[i - 30], W[i - 29]);
                    var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
                    var c3_hi = W[i - 32];
                    var c3_lo = W[i - 31];
                    W[i] = sum64_4_hi(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo);
                    W[i + 1] = sum64_4_lo(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo);
                }
            };
            SHA512.prototype._update = function _update(msg, start) {
                this._prepareBlock(msg, start);
                var W = this.W;
                var ah = this.h[0];
                var al = this.h[1];
                var bh = this.h[2];
                var bl = this.h[3];
                var ch = this.h[4];
                var cl = this.h[5];
                var dh = this.h[6];
                var dl = this.h[7];
                var eh = this.h[8];
                var el = this.h[9];
                var fh = this.h[10];
                var fl = this.h[11];
                var gh = this.h[12];
                var gl = this.h[13];
                var hh = this.h[14];
                var hl = this.h[15];
                for (var i = 0; i < W.length; i += 2) {
                    var c0_hi = hh;
                    var c0_lo = hl;
                    var c1_hi = s1_512_hi(eh, el);
                    var c1_lo = s1_512_lo(eh, el);
                    var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
                    var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
                    var c3_hi = this.k[i];
                    var c3_lo = this.k[i + 1];
                    var c4_hi = W[i];
                    var c4_lo = W[i + 1];
                    var T1_hi = sum64_5_hi(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo, c4_hi, c4_lo);
                    var T1_lo = sum64_5_lo(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo, c4_hi, c4_lo);
                    c0_hi = s0_512_hi(ah, al);
                    c0_lo = s0_512_lo(ah, al);
                    c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
                    c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
                    var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
                    var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
                    hh = gh;
                    hl = gl;
                    gh = fh;
                    gl = fl;
                    fh = eh;
                    fl = el;
                    eh = sum64_hi(dh, dl, T1_hi, T1_lo);
                    el = sum64_lo(dl, dl, T1_hi, T1_lo);
                    dh = ch;
                    dl = cl;
                    ch = bh;
                    cl = bl;
                    bh = ah;
                    bl = al;
                    ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
                    al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
                }
                sum64(this.h, 0, ah, al);
                sum64(this.h, 2, bh, bl);
                sum64(this.h, 4, ch, cl);
                sum64(this.h, 6, dh, dl);
                sum64(this.h, 8, eh, el);
                sum64(this.h, 10, fh, fl);
                sum64(this.h, 12, gh, gl);
                sum64(this.h, 14, hh, hl);
            };
            SHA512.prototype._digest = function digest(enc) {
                if (enc === 'hex')
                    return utils.toHex32(this.h, 'big');
                else
                    return utils.split32(this.h, 'big');
            };
            function ch64_hi(xh, xl, yh, yl, zh) {
                var r = xh & yh ^ ~xh & zh;
                if (r < 0)
                    r += 4294967296;
                return r;
            }
            function ch64_lo(xh, xl, yh, yl, zh, zl) {
                var r = xl & yl ^ ~xl & zl;
                if (r < 0)
                    r += 4294967296;
                return r;
            }
            function maj64_hi(xh, xl, yh, yl, zh) {
                var r = xh & yh ^ xh & zh ^ yh & zh;
                if (r < 0)
                    r += 4294967296;
                return r;
            }
            function maj64_lo(xh, xl, yh, yl, zh, zl) {
                var r = xl & yl ^ xl & zl ^ yl & zl;
                if (r < 0)
                    r += 4294967296;
                return r;
            }
            function s0_512_hi(xh, xl) {
                var c0_hi = rotr64_hi(xh, xl, 28);
                var c1_hi = rotr64_hi(xl, xh, 2);
                var c2_hi = rotr64_hi(xl, xh, 7);
                var r = c0_hi ^ c1_hi ^ c2_hi;
                if (r < 0)
                    r += 4294967296;
                return r;
            }
            function s0_512_lo(xh, xl) {
                var c0_lo = rotr64_lo(xh, xl, 28);
                var c1_lo = rotr64_lo(xl, xh, 2);
                var c2_lo = rotr64_lo(xl, xh, 7);
                var r = c0_lo ^ c1_lo ^ c2_lo;
                if (r < 0)
                    r += 4294967296;
                return r;
            }
            function s1_512_hi(xh, xl) {
                var c0_hi = rotr64_hi(xh, xl, 14);
                var c1_hi = rotr64_hi(xh, xl, 18);
                var c2_hi = rotr64_hi(xl, xh, 9);
                var r = c0_hi ^ c1_hi ^ c2_hi;
                if (r < 0)
                    r += 4294967296;
                return r;
            }
            function s1_512_lo(xh, xl) {
                var c0_lo = rotr64_lo(xh, xl, 14);
                var c1_lo = rotr64_lo(xh, xl, 18);
                var c2_lo = rotr64_lo(xl, xh, 9);
                var r = c0_lo ^ c1_lo ^ c2_lo;
                if (r < 0)
                    r += 4294967296;
                return r;
            }
            function g0_512_hi(xh, xl) {
                var c0_hi = rotr64_hi(xh, xl, 1);
                var c1_hi = rotr64_hi(xh, xl, 8);
                var c2_hi = shr64_hi(xh, xl, 7);
                var r = c0_hi ^ c1_hi ^ c2_hi;
                if (r < 0)
                    r += 4294967296;
                return r;
            }
            function g0_512_lo(xh, xl) {
                var c0_lo = rotr64_lo(xh, xl, 1);
                var c1_lo = rotr64_lo(xh, xl, 8);
                var c2_lo = shr64_lo(xh, xl, 7);
                var r = c0_lo ^ c1_lo ^ c2_lo;
                if (r < 0)
                    r += 4294967296;
                return r;
            }
            function g1_512_hi(xh, xl) {
                var c0_hi = rotr64_hi(xh, xl, 19);
                var c1_hi = rotr64_hi(xl, xh, 29);
                var c2_hi = shr64_hi(xh, xl, 6);
                var r = c0_hi ^ c1_hi ^ c2_hi;
                if (r < 0)
                    r += 4294967296;
                return r;
            }
            function g1_512_lo(xh, xl) {
                var c0_lo = rotr64_lo(xh, xl, 19);
                var c1_lo = rotr64_lo(xl, xh, 29);
                var c2_lo = shr64_lo(xh, xl, 6);
                var r = c0_lo ^ c1_lo ^ c2_lo;
                if (r < 0)
                    r += 4294967296;
                return r;
            }
        },
        {
            '../common': 90,
            '../utils': 100,
            'minimalistic-assert': 108
        }
    ],
    99: [
        function (_dereq_, module, exports) {
            'use strict';
            var utils = _dereq_('../utils');
            var rotr32 = utils.rotr32;
            function ft_1(s, x, y, z) {
                if (s === 0)
                    return ch32(x, y, z);
                if (s === 1 || s === 3)
                    return p32(x, y, z);
                if (s === 2)
                    return maj32(x, y, z);
            }
            exports.ft_1 = ft_1;
            function ch32(x, y, z) {
                return x & y ^ ~x & z;
            }
            exports.ch32 = ch32;
            function maj32(x, y, z) {
                return x & y ^ x & z ^ y & z;
            }
            exports.maj32 = maj32;
            function p32(x, y, z) {
                return x ^ y ^ z;
            }
            exports.p32 = p32;
            function s0_256(x) {
                return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
            }
            exports.s0_256 = s0_256;
            function s1_256(x) {
                return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
            }
            exports.s1_256 = s1_256;
            function g0_256(x) {
                return rotr32(x, 7) ^ rotr32(x, 18) ^ x >>> 3;
            }
            exports.g0_256 = g0_256;
            function g1_256(x) {
                return rotr32(x, 17) ^ rotr32(x, 19) ^ x >>> 10;
            }
            exports.g1_256 = g1_256;
        },
        { '../utils': 100 }
    ],
    100: [
        function (_dereq_, module, exports) {
            'use strict';
            var assert = _dereq_('minimalistic-assert');
            var inherits = _dereq_('inherits');
            exports.inherits = inherits;
            function isSurrogatePair(msg, i) {
                if ((msg.charCodeAt(i) & 64512) !== 55296) {
                    return false;
                }
                if (i < 0 || i + 1 >= msg.length) {
                    return false;
                }
                return (msg.charCodeAt(i + 1) & 64512) === 56320;
            }
            function toArray(msg, enc) {
                if (Array.isArray(msg))
                    return msg.slice();
                if (!msg)
                    return [];
                var res = [];
                if (typeof msg === 'string') {
                    if (!enc) {
                        var p = 0;
                        for (var i = 0; i < msg.length; i++) {
                            var c = msg.charCodeAt(i);
                            if (c < 128) {
                                res[p++] = c;
                            } else if (c < 2048) {
                                res[p++] = c >> 6 | 192;
                                res[p++] = c & 63 | 128;
                            } else if (isSurrogatePair(msg, i)) {
                                c = 65536 + ((c & 1023) << 10) + (msg.charCodeAt(++i) & 1023);
                                res[p++] = c >> 18 | 240;
                                res[p++] = c >> 12 & 63 | 128;
                                res[p++] = c >> 6 & 63 | 128;
                                res[p++] = c & 63 | 128;
                            } else {
                                res[p++] = c >> 12 | 224;
                                res[p++] = c >> 6 & 63 | 128;
                                res[p++] = c & 63 | 128;
                            }
                        }
                    } else if (enc === 'hex') {
                        msg = msg.replace(/[^a-z0-9]+/ig, '');
                        if (msg.length % 2 !== 0)
                            msg = '0' + msg;
                        for (i = 0; i < msg.length; i += 2)
                            res.push(parseInt(msg[i] + msg[i + 1], 16));
                    }
                } else {
                    for (i = 0; i < msg.length; i++)
                        res[i] = msg[i] | 0;
                }
                return res;
            }
            exports.toArray = toArray;
            function toHex(msg) {
                var res = '';
                for (var i = 0; i < msg.length; i++)
                    res += zero2(msg[i].toString(16));
                return res;
            }
            exports.toHex = toHex;
            function htonl(w) {
                var res = w >>> 24 | w >>> 8 & 65280 | w << 8 & 16711680 | (w & 255) << 24;
                return res >>> 0;
            }
            exports.htonl = htonl;
            function toHex32(msg, endian) {
                var res = '';
                for (var i = 0; i < msg.length; i++) {
                    var w = msg[i];
                    if (endian === 'little')
                        w = htonl(w);
                    res += zero8(w.toString(16));
                }
                return res;
            }
            exports.toHex32 = toHex32;
            function zero2(word) {
                if (word.length === 1)
                    return '0' + word;
                else
                    return word;
            }
            exports.zero2 = zero2;
            function zero8(word) {
                if (word.length === 7)
                    return '0' + word;
                else if (word.length === 6)
                    return '00' + word;
                else if (word.length === 5)
                    return '000' + word;
                else if (word.length === 4)
                    return '0000' + word;
                else if (word.length === 3)
                    return '00000' + word;
                else if (word.length === 2)
                    return '000000' + word;
                else if (word.length === 1)
                    return '0000000' + word;
                else
                    return word;
            }
            exports.zero8 = zero8;
            function join32(msg, start, end, endian) {
                var len = end - start;
                var res = new Array(len / 4);
                for (var i = 0, k = start; i < res.length; i++, k += 4) {
                    var w;
                    if (endian === 'big')
                        w = msg[k] << 24 | msg[k + 1] << 16 | msg[k + 2] << 8 | msg[k + 3];
                    else
                        w = msg[k + 3] << 24 | msg[k + 2] << 16 | msg[k + 1] << 8 | msg[k];
                    res[i] = w >>> 0;
                }
                return res;
            }
            exports.join32 = join32;
            function split32(msg, endian) {
                var res = new Array(msg.length * 4);
                for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
                    var m = msg[i];
                    if (endian === 'big') {
                        res[k] = m >>> 24;
                        res[k + 1] = m >>> 16 & 255;
                        res[k + 2] = m >>> 8 & 255;
                        res[k + 3] = m & 255;
                    } else {
                        res[k + 3] = m >>> 24;
                        res[k + 2] = m >>> 16 & 255;
                        res[k + 1] = m >>> 8 & 255;
                        res[k] = m & 255;
                    }
                }
                return res;
            }
            exports.split32 = split32;
            function rotr32(w, b) {
                return w >>> b | w << 32 - b;
            }
            exports.rotr32 = rotr32;
            function rotl32(w, b) {
                return w << b | w >>> 32 - b;
            }
            exports.rotl32 = rotl32;
            function sum32(a, b) {
                return a + b >>> 0;
            }
            exports.sum32 = sum32;
            function sum32_3(a, b, c) {
                return a + b + c >>> 0;
            }
            exports.sum32_3 = sum32_3;
            function sum32_4(a, b, c, d) {
                return a + b + c + d >>> 0;
            }
            exports.sum32_4 = sum32_4;
            function sum32_5(a, b, c, d, e) {
                return a + b + c + d + e >>> 0;
            }
            exports.sum32_5 = sum32_5;
            function sum64(buf, pos, ah, al) {
                var bh = buf[pos];
                var bl = buf[pos + 1];
                var lo = al + bl >>> 0;
                var hi = (lo < al ? 1 : 0) + ah + bh;
                buf[pos] = hi >>> 0;
                buf[pos + 1] = lo;
            }
            exports.sum64 = sum64;
            function sum64_hi(ah, al, bh, bl) {
                var lo = al + bl >>> 0;
                var hi = (lo < al ? 1 : 0) + ah + bh;
                return hi >>> 0;
            }
            exports.sum64_hi = sum64_hi;
            function sum64_lo(ah, al, bh, bl) {
                var lo = al + bl;
                return lo >>> 0;
            }
            exports.sum64_lo = sum64_lo;
            function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
                var carry = 0;
                var lo = al;
                lo = lo + bl >>> 0;
                carry += lo < al ? 1 : 0;
                lo = lo + cl >>> 0;
                carry += lo < cl ? 1 : 0;
                lo = lo + dl >>> 0;
                carry += lo < dl ? 1 : 0;
                var hi = ah + bh + ch + dh + carry;
                return hi >>> 0;
            }
            exports.sum64_4_hi = sum64_4_hi;
            function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
                var lo = al + bl + cl + dl;
                return lo >>> 0;
            }
            exports.sum64_4_lo = sum64_4_lo;
            function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
                var carry = 0;
                var lo = al;
                lo = lo + bl >>> 0;
                carry += lo < al ? 1 : 0;
                lo = lo + cl >>> 0;
                carry += lo < cl ? 1 : 0;
                lo = lo + dl >>> 0;
                carry += lo < dl ? 1 : 0;
                lo = lo + el >>> 0;
                carry += lo < el ? 1 : 0;
                var hi = ah + bh + ch + dh + eh + carry;
                return hi >>> 0;
            }
            exports.sum64_5_hi = sum64_5_hi;
            function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
                var lo = al + bl + cl + dl + el;
                return lo >>> 0;
            }
            exports.sum64_5_lo = sum64_5_lo;
            function rotr64_hi(ah, al, num) {
                var r = al << 32 - num | ah >>> num;
                return r >>> 0;
            }
            exports.rotr64_hi = rotr64_hi;
            function rotr64_lo(ah, al, num) {
                var r = ah << 32 - num | al >>> num;
                return r >>> 0;
            }
            exports.rotr64_lo = rotr64_lo;
            function shr64_hi(ah, al, num) {
                return ah >>> num;
            }
            exports.shr64_hi = shr64_hi;
            function shr64_lo(ah, al, num) {
                var r = ah << 32 - num | al >>> num;
                return r >>> 0;
            }
            exports.shr64_lo = shr64_lo;
        },
        {
            'inherits': 103,
            'minimalistic-assert': 108
        }
    ],
    101: [
        function (_dereq_, module, exports) {
            'use strict';
            var hash = _dereq_('hash.js');
            var utils = _dereq_('minimalistic-crypto-utils');
            var assert = _dereq_('minimalistic-assert');
            function HmacDRBG(options) {
                if (!(this instanceof HmacDRBG))
                    return new HmacDRBG(options);
                this.hash = options.hash;
                this.predResist = !!options.predResist;
                this.outLen = this.hash.outSize;
                this.minEntropy = options.minEntropy || this.hash.hmacStrength;
                this._reseed = null;
                this.reseedInterval = null;
                this.K = null;
                this.V = null;
                var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');
                var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');
                var pers = utils.toArray(options.pers, options.persEnc || 'hex');
                this._init(entropy, nonce, pers);
            }
            module.exports = HmacDRBG;
            HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
                var seed = entropy.concat(nonce).concat(pers);
                this.K = new Array(this.outLen / 8);
                this.V = new Array(this.outLen / 8);
                for (var i = 0; i < this.V.length; i++) {
                    this.K[i] = 0;
                    this.V[i] = 1;
                }
                this._update(seed);
                this._reseed = 1;
                this.reseedInterval = 281474976710656;
            };
            HmacDRBG.prototype._hmac = function hmac() {
                return new hash.hmac(this.hash, this.K);
            };
            HmacDRBG.prototype._update = function update(seed) {
                var kmac = this._hmac().update(this.V).update([0]);
                if (seed)
                    kmac = kmac.update(seed);
                this.K = kmac.digest();
                this.V = this._hmac().update(this.V).digest();
                if (!seed)
                    return;
                this.K = this._hmac().update(this.V).update([1]).update(seed).digest();
                this.V = this._hmac().update(this.V).digest();
            };
            HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
                if (typeof entropyEnc !== 'string') {
                    addEnc = add;
                    add = entropyEnc;
                    entropyEnc = null;
                }
                entropy = utils.toArray(entropy, entropyEnc);
                add = utils.toArray(add, addEnc);
                this._update(entropy.concat(add || []));
                this._reseed = 1;
            };
            HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
                if (this._reseed > this.reseedInterval)
                    throw new Error('Reseed is required');
                if (typeof enc !== 'string') {
                    addEnc = add;
                    add = enc;
                    enc = null;
                }
                if (add) {
                    add = utils.toArray(add, addEnc || 'hex');
                    this._update(add);
                }
                var temp = [];
                while (temp.length < len) {
                    this.V = this._hmac().update(this.V).digest();
                    temp = temp.concat(this.V);
                }
                var res = temp.slice(0, len);
                this._update(add);
                this._reseed++;
                return utils.encode(res, enc);
            };
        },
        {
            'hash.js': 89,
            'minimalistic-assert': 108,
            'minimalistic-crypto-utils': 109
        }
    ],
    102: [
        function (_dereq_, module, exports) {
            exports.read = function (buffer, offset, isLE, mLen, nBytes) {
                var e, m;
                var eLen = nBytes * 8 - mLen - 1;
                var eMax = (1 << eLen) - 1;
                var eBias = eMax >> 1;
                var nBits = -7;
                var i = isLE ? nBytes - 1 : 0;
                var d = isLE ? -1 : 1;
                var s = buffer[offset + i];
                i += d;
                e = s & (1 << -nBits) - 1;
                s >>= -nBits;
                nBits += eLen;
                for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {
                }
                m = e & (1 << -nBits) - 1;
                e >>= -nBits;
                nBits += mLen;
                for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {
                }
                if (e === 0) {
                    e = 1 - eBias;
                } else if (e === eMax) {
                    return m ? NaN : (s ? -1 : 1) * Infinity;
                } else {
                    m = m + Math.pow(2, mLen);
                    e = e - eBias;
                }
                return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
            };
            exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
                var e, m, c;
                var eLen = nBytes * 8 - mLen - 1;
                var eMax = (1 << eLen) - 1;
                var eBias = eMax >> 1;
                var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;
                var i = isLE ? 0 : nBytes - 1;
                var d = isLE ? 1 : -1;
                var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;
                value = Math.abs(value);
                if (isNaN(value) || value === Infinity) {
                    m = isNaN(value) ? 1 : 0;
                    e = eMax;
                } else {
                    e = Math.floor(Math.log(value) / Math.LN2);
                    if (value * (c = Math.pow(2, -e)) < 1) {
                        e--;
                        c *= 2;
                    }
                    if (e + eBias >= 1) {
                        value += rt / c;
                    } else {
                        value += rt * Math.pow(2, 1 - eBias);
                    }
                    if (value * c >= 2) {
                        e++;
                        c /= 2;
                    }
                    if (e + eBias >= eMax) {
                        m = 0;
                        e = eMax;
                    } else if (e + eBias >= 1) {
                        m = (value * c - 1) * Math.pow(2, mLen);
                        e = e + eBias;
                    } else {
                        m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
                        e = 0;
                    }
                }
                for (; mLen >= 8; buffer[offset + i] = m & 255, i += d, m /= 256, mLen -= 8) {
                }
                e = e << mLen | m;
                eLen += mLen;
                for (; eLen > 0; buffer[offset + i] = e & 255, i += d, e /= 256, eLen -= 8) {
                }
                buffer[offset + i - d] |= s * 128;
            };
        },
        {}
    ],
    103: [
        function (_dereq_, module, exports) {
            if (typeof Object.create === 'function') {
                module.exports = function inherits(ctor, superCtor) {
                    ctor.super_ = superCtor;
                    ctor.prototype = Object.create(superCtor.prototype, {
                        constructor: {
                            value: ctor,
                            enumerable: false,
                            writable: true,
                            configurable: true
                        }
                    });
                };
            } else {
                module.exports = function inherits(ctor, superCtor) {
                    ctor.super_ = superCtor;
                    var TempCtor = function () {
                    };
                    TempCtor.prototype = superCtor.prototype;
                    ctor.prototype = new TempCtor();
                    ctor.prototype.constructor = ctor;
                };
            }
        },
        {}
    ],
    104: [
        function (_dereq_, module, exports) {
            module.exports = function (obj) {
                return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer);
            };
            function isBuffer(obj) {
                return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj);
            }
            function isSlowBuffer(obj) {
                return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0));
            }
        },
        {}
    ],
    105: [
        function (_dereq_, module, exports) {
            var toString = {}.toString;
            module.exports = Array.isArray || function (arr) {
                return toString.call(arr) == '[object Array]';
            };
        },
        {}
    ],
    106: [
        function (_dereq_, module, exports) {
            'use strict';
            var inherits = _dereq_('inherits');
            var HashBase = _dereq_('hash-base');
            var Buffer = _dereq_('safe-buffer').Buffer;
            var ARRAY16 = new Array(16);
            function MD5() {
                HashBase.call(this, 64);
                this._a = 1732584193;
                this._b = 4023233417;
                this._c = 2562383102;
                this._d = 271733878;
            }
            inherits(MD5, HashBase);
            MD5.prototype._update = function () {
                var M = ARRAY16;
                for (var i = 0; i < 16; ++i)
                    M[i] = this._block.readInt32LE(i * 4);
                var a = this._a;
                var b = this._b;
                var c = this._c;
                var d = this._d;
                a = fnF(a, b, c, d, M[0], 3614090360, 7);
                d = fnF(d, a, b, c, M[1], 3905402710, 12);
                c = fnF(c, d, a, b, M[2], 606105819, 17);
                b = fnF(b, c, d, a, M[3], 3250441966, 22);
                a = fnF(a, b, c, d, M[4], 4118548399, 7);
                d = fnF(d, a, b, c, M[5], 1200080426, 12);
                c = fnF(c, d, a, b, M[6], 2821735955, 17);
                b = fnF(b, c, d, a, M[7], 4249261313, 22);
                a = fnF(a, b, c, d, M[8], 1770035416, 7);
                d = fnF(d, a, b, c, M[9], 2336552879, 12);
                c = fnF(c, d, a, b, M[10], 4294925233, 17);
                b = fnF(b, c, d, a, M[11], 2304563134, 22);
                a = fnF(a, b, c, d, M[12], 1804603682, 7);
                d = fnF(d, a, b, c, M[13], 4254626195, 12);
                c = fnF(c, d, a, b, M[14], 2792965006, 17);
                b = fnF(b, c, d, a, M[15], 1236535329, 22);
                a = fnG(a, b, c, d, M[1], 4129170786, 5);
                d = fnG(d, a, b, c, M[6], 3225465664, 9);
                c = fnG(c, d, a, b, M[11], 643717713, 14);
                b = fnG(b, c, d, a, M[0], 3921069994, 20);
                a = fnG(a, b, c, d, M[5], 3593408605, 5);
                d = fnG(d, a, b, c, M[10], 38016083, 9);
                c = fnG(c, d, a, b, M[15], 3634488961, 14);
                b = fnG(b, c, d, a, M[4], 3889429448, 20);
                a = fnG(a, b, c, d, M[9], 568446438, 5);
                d = fnG(d, a, b, c, M[14], 3275163606, 9);
                c = fnG(c, d, a, b, M[3], 4107603335, 14);
                b = fnG(b, c, d, a, M[8], 1163531501, 20);
                a = fnG(a, b, c, d, M[13], 2850285829, 5);
                d = fnG(d, a, b, c, M[2], 4243563512, 9);
                c = fnG(c, d, a, b, M[7], 1735328473, 14);
                b = fnG(b, c, d, a, M[12], 2368359562, 20);
                a = fnH(a, b, c, d, M[5], 4294588738, 4);
                d = fnH(d, a, b, c, M[8], 2272392833, 11);
                c = fnH(c, d, a, b, M[11], 1839030562, 16);
                b = fnH(b, c, d, a, M[14], 4259657740, 23);
                a = fnH(a, b, c, d, M[1], 2763975236, 4);
                d = fnH(d, a, b, c, M[4], 1272893353, 11);
                c = fnH(c, d, a, b, M[7], 4139469664, 16);
                b = fnH(b, c, d, a, M[10], 3200236656, 23);
                a = fnH(a, b, c, d, M[13], 681279174, 4);
                d = fnH(d, a, b, c, M[0], 3936430074, 11);
                c = fnH(c, d, a, b, M[3], 3572445317, 16);
                b = fnH(b, c, d, a, M[6], 76029189, 23);
                a = fnH(a, b, c, d, M[9], 3654602809, 4);
                d = fnH(d, a, b, c, M[12], 3873151461, 11);
                c = fnH(c, d, a, b, M[15], 530742520, 16);
                b = fnH(b, c, d, a, M[2], 3299628645, 23);
                a = fnI(a, b, c, d, M[0], 4096336452, 6);
                d = fnI(d, a, b, c, M[7], 1126891415, 10);
                c = fnI(c, d, a, b, M[14], 2878612391, 15);
                b = fnI(b, c, d, a, M[5], 4237533241, 21);
                a = fnI(a, b, c, d, M[12], 1700485571, 6);
                d = fnI(d, a, b, c, M[3], 2399980690, 10);
                c = fnI(c, d, a, b, M[10], 4293915773, 15);
                b = fnI(b, c, d, a, M[1], 2240044497, 21);
                a = fnI(a, b, c, d, M[8], 1873313359, 6);
                d = fnI(d, a, b, c, M[15], 4264355552, 10);
                c = fnI(c, d, a, b, M[6], 2734768916, 15);
                b = fnI(b, c, d, a, M[13], 1309151649, 21);
                a = fnI(a, b, c, d, M[4], 4149444226, 6);
                d = fnI(d, a, b, c, M[11], 3174756917, 10);
                c = fnI(c, d, a, b, M[2], 718787259, 15);
                b = fnI(b, c, d, a, M[9], 3951481745, 21);
                this._a = this._a + a | 0;
                this._b = this._b + b | 0;
                this._c = this._c + c | 0;
                this._d = this._d + d | 0;
            };
            MD5.prototype._digest = function () {
                this._block[this._blockOffset++] = 128;
                if (this._blockOffset > 56) {
                    this._block.fill(0, this._blockOffset, 64);
                    this._update();
                    this._blockOffset = 0;
                }
                this._block.fill(0, this._blockOffset, 56);
                this._block.writeUInt32LE(this._length[0], 56);
                this._block.writeUInt32LE(this._length[1], 60);
                this._update();
                var buffer = Buffer.allocUnsafe(16);
                buffer.writeInt32LE(this._a, 0);
                buffer.writeInt32LE(this._b, 4);
                buffer.writeInt32LE(this._c, 8);
                buffer.writeInt32LE(this._d, 12);
                return buffer;
            };
            function rotl(x, n) {
                return x << n | x >>> 32 - n;
            }
            function fnF(a, b, c, d, m, k, s) {
                return rotl(a + (b & c | ~b & d) + m + k | 0, s) + b | 0;
            }
            function fnG(a, b, c, d, m, k, s) {
                return rotl(a + (b & d | c & ~d) + m + k | 0, s) + b | 0;
            }
            function fnH(a, b, c, d, m, k, s) {
                return rotl(a + (b ^ c ^ d) + m + k | 0, s) + b | 0;
            }
            function fnI(a, b, c, d, m, k, s) {
                return rotl(a + (c ^ (b | ~d)) + m + k | 0, s) + b | 0;
            }
            module.exports = MD5;
        },
        {
            'hash-base': 88,
            'inherits': 103,
            'safe-buffer': 145
        }
    ],
    107: [
        function (_dereq_, module, exports) {
            var bn = _dereq_('bn.js');
            var brorand = _dereq_('brorand');
            function MillerRabin(rand) {
                this.rand = rand || new brorand.Rand();
            }
            module.exports = MillerRabin;
            MillerRabin.create = function create(rand) {
                return new MillerRabin(rand);
            };
            MillerRabin.prototype._randbelow = function _randbelow(n) {
                var len = n.bitLength();
                var min_bytes = Math.ceil(len / 8);
                do
                    var a = new bn(this.rand.generate(min_bytes));
                while (a.cmp(n) >= 0);
                return a;
            };
            MillerRabin.prototype._randrange = function _randrange(start, stop) {
                var size = stop.sub(start);
                return start.add(this._randbelow(size));
            };
            MillerRabin.prototype.test = function test(n, k, cb) {
                var len = n.bitLength();
                var red = bn.mont(n);
                var rone = new bn(1).toRed(red);
                if (!k)
                    k = Math.max(1, len / 48 | 0);
                var n1 = n.subn(1);
                for (var s = 0; !n1.testn(s); s++) {
                }
                var d = n.shrn(s);
                var rn1 = n1.toRed(red);
                var prime = true;
                for (; k > 0; k--) {
                    var a = this._randrange(new bn(2), n1);
                    if (cb)
                        cb(a);
                    var x = a.toRed(red).redPow(d);
                    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
                        continue;
                    for (var i = 1; i < s; i++) {
                        x = x.redSqr();
                        if (x.cmp(rone) === 0)
                            return false;
                        if (x.cmp(rn1) === 0)
                            break;
                    }
                    if (i === s)
                        return false;
                }
                return prime;
            };
            MillerRabin.prototype.getDivisor = function getDivisor(n, k) {
                var len = n.bitLength();
                var red = bn.mont(n);
                var rone = new bn(1).toRed(red);
                if (!k)
                    k = Math.max(1, len / 48 | 0);
                var n1 = n.subn(1);
                for (var s = 0; !n1.testn(s); s++) {
                }
                var d = n.shrn(s);
                var rn1 = n1.toRed(red);
                for (; k > 0; k--) {
                    var a = this._randrange(new bn(2), n1);
                    var g = n.gcd(a);
                    if (g.cmpn(1) !== 0)
                        return g;
                    var x = a.toRed(red).redPow(d);
                    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
                        continue;
                    for (var i = 1; i < s; i++) {
                        x = x.redSqr();
                        if (x.cmp(rone) === 0)
                            return x.fromRed().subn(1).gcd(n);
                        if (x.cmp(rn1) === 0)
                            break;
                    }
                    if (i === s) {
                        x = x.redSqr();
                        return x.fromRed().subn(1).gcd(n);
                    }
                }
                return false;
            };
        },
        {
            'bn.js': 19,
            'brorand': 20
        }
    ],
    108: [
        function (_dereq_, module, exports) {
            module.exports = assert;
            function assert(val, msg) {
                if (!val)
                    throw new Error(msg || 'Assertion failed');
            }
            assert.equal = function assertEqual(l, r, msg) {
                if (l != r)
                    throw new Error(msg || 'Assertion failed: ' + l + ' != ' + r);
            };
        },
        {}
    ],
    109: [
        function (_dereq_, module, exports) {
            'use strict';
            var utils = exports;
            function toArray(msg, enc) {
                if (Array.isArray(msg))
                    return msg.slice();
                if (!msg)
                    return [];
                var res = [];
                if (typeof msg !== 'string') {
                    for (var i = 0; i < msg.length; i++)
                        res[i] = msg[i] | 0;
                    return res;
                }
                if (enc === 'hex') {
                    msg = msg.replace(/[^a-z0-9]+/ig, '');
                    if (msg.length % 2 !== 0)
                        msg = '0' + msg;
                    for (var i = 0; i < msg.length; i += 2)
                        res.push(parseInt(msg[i] + msg[i + 1], 16));
                } else {
                    for (var i = 0; i < msg.length; i++) {
                        var c = msg.charCodeAt(i);
                        var hi = c >> 8;
                        var lo = c & 255;
                        if (hi)
                            res.push(hi, lo);
                        else
                            res.push(lo);
                    }
                }
                return res;
            }
            utils.toArray = toArray;
            function zero2(word) {
                if (word.length === 1)
                    return '0' + word;
                else
                    return word;
            }
            utils.zero2 = zero2;
            function toHex(msg) {
                var res = '';
                for (var i = 0; i < msg.length; i++)
                    res += zero2(msg[i].toString(16));
                return res;
            }
            utils.toHex = toHex;
            utils.encode = function encode(arr, enc) {
                if (enc === 'hex')
                    return toHex(arr);
                else
                    return arr;
            };
        },
        {}
    ],
    110: [
        function (_dereq_, module, exports) {
            module.exports = {
                '2.16.840.1.101.3.4.1.1': 'aes-128-ecb',
                '2.16.840.1.101.3.4.1.2': 'aes-128-cbc',
                '2.16.840.1.101.3.4.1.3': 'aes-128-ofb',
                '2.16.840.1.101.3.4.1.4': 'aes-128-cfb',
                '2.16.840.1.101.3.4.1.21': 'aes-192-ecb',
                '2.16.840.1.101.3.4.1.22': 'aes-192-cbc',
                '2.16.840.1.101.3.4.1.23': 'aes-192-ofb',
                '2.16.840.1.101.3.4.1.24': 'aes-192-cfb',
                '2.16.840.1.101.3.4.1.41': 'aes-256-ecb',
                '2.16.840.1.101.3.4.1.42': 'aes-256-cbc',
                '2.16.840.1.101.3.4.1.43': 'aes-256-ofb',
                '2.16.840.1.101.3.4.1.44': 'aes-256-cfb'
            };
        },
        {}
    ],
    111: [
        function (_dereq_, module, exports) {
            'use strict';
            var asn1 = _dereq_('asn1.js');
            exports.certificate = _dereq_('./certificate');
            var RSAPrivateKey = asn1.define('RSAPrivateKey', function () {
                this.seq().obj(this.key('version').int(), this.key('modulus').int(), this.key('publicExponent').int(), this.key('privateExponent').int(), this.key('prime1').int(), this.key('prime2').int(), this.key('exponent1').int(), this.key('exponent2').int(), this.key('coefficient').int());
            });
            exports.RSAPrivateKey = RSAPrivateKey;
            var RSAPublicKey = asn1.define('RSAPublicKey', function () {
                this.seq().obj(this.key('modulus').int(), this.key('publicExponent').int());
            });
            exports.RSAPublicKey = RSAPublicKey;
            var PublicKey = asn1.define('SubjectPublicKeyInfo', function () {
                this.seq().obj(this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPublicKey').bitstr());
            });
            exports.PublicKey = PublicKey;
            var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {
                this.seq().obj(this.key('algorithm').objid(), this.key('none').null_().optional(), this.key('curve').objid().optional(), this.key('params').seq().obj(this.key('p').int(), this.key('q').int(), this.key('g').int()).optional());
            });
            var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {
                this.seq().obj(this.key('version').int(), this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPrivateKey').octstr());
            });
            exports.PrivateKey = PrivateKeyInfo;
            var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {
                this.seq().obj(this.key('algorithm').seq().obj(this.key('id').objid(), this.key('decrypt').seq().obj(this.key('kde').seq().obj(this.key('id').objid(), this.key('kdeparams').seq().obj(this.key('salt').octstr(), this.key('iters').int())), this.key('cipher').seq().obj(this.key('algo').objid(), this.key('iv').octstr()))), this.key('subjectPrivateKey').octstr());
            });
            exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo;
            var DSAPrivateKey = asn1.define('DSAPrivateKey', function () {
                this.seq().obj(this.key('version').int(), this.key('p').int(), this.key('q').int(), this.key('g').int(), this.key('pub_key').int(), this.key('priv_key').int());
            });
            exports.DSAPrivateKey = DSAPrivateKey;
            exports.DSAparam = asn1.define('DSAparam', function () {
                this.int();
            });
            var ECPrivateKey = asn1.define('ECPrivateKey', function () {
                this.seq().obj(this.key('version').int(), this.key('privateKey').octstr(), this.key('parameters').optional().explicit(0).use(ECParameters), this.key('publicKey').optional().explicit(1).bitstr());
            });
            exports.ECPrivateKey = ECPrivateKey;
            var ECParameters = asn1.define('ECParameters', function () {
                this.choice({ namedCurve: this.objid() });
            });
            exports.signature = asn1.define('signature', function () {
                this.seq().obj(this.key('r').int(), this.key('s').int());
            });
        },
        {
            './certificate': 112,
            'asn1.js': 4
        }
    ],
    112: [
        function (_dereq_, module, exports) {
            'use strict';
            var asn = _dereq_('asn1.js');
            var Time = asn.define('Time', function () {
                this.choice({
                    utcTime: this.utctime(),
                    generalTime: this.gentime()
                });
            });
            var AttributeTypeValue = asn.define('AttributeTypeValue', function () {
                this.seq().obj(this.key('type').objid(), this.key('value').any());
            });
            var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {
                this.seq().obj(this.key('algorithm').objid(), this.key('parameters').optional(), this.key('curve').objid().optional());
            });
            var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {
                this.seq().obj(this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPublicKey').bitstr());
            });
            var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {
                this.setof(AttributeTypeValue);
            });
            var RDNSequence = asn.define('RDNSequence', function () {
                this.seqof(RelativeDistinguishedName);
            });
            var Name = asn.define('Name', function () {
                this.choice({ rdnSequence: this.use(RDNSequence) });
            });
            var Validity = asn.define('Validity', function () {
                this.seq().obj(this.key('notBefore').use(Time), this.key('notAfter').use(Time));
            });
            var Extension = asn.define('Extension', function () {
                this.seq().obj(this.key('extnID').objid(), this.key('critical').bool().def(false), this.key('extnValue').octstr());
            });
            var TBSCertificate = asn.define('TBSCertificate', function () {
                this.seq().obj(this.key('version').explicit(0).int().optional(), this.key('serialNumber').int(), this.key('signature').use(AlgorithmIdentifier), this.key('issuer').use(Name), this.key('validity').use(Validity), this.key('subject').use(Name), this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo), this.key('issuerUniqueID').implicit(1).bitstr().optional(), this.key('subjectUniqueID').implicit(2).bitstr().optional(), this.key('extensions').explicit(3).seqof(Extension).optional());
            });
            var X509Certificate = asn.define('X509Certificate', function () {
                this.seq().obj(this.key('tbsCertificate').use(TBSCertificate), this.key('signatureAlgorithm').use(AlgorithmIdentifier), this.key('signatureValue').bitstr());
            });
            module.exports = X509Certificate;
        },
        { 'asn1.js': 4 }
    ],
    113: [
        function (_dereq_, module, exports) {
            var findProc = /Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r\+\/\=]+)[\n\r]+/m;
            var startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m;
            var fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r\+\/\=]+)-----END \1-----$/m;
            var evp = _dereq_('evp_bytestokey');
            var ciphers = _dereq_('browserify-aes');
            var Buffer = _dereq_('safe-buffer').Buffer;
            module.exports = function (okey, password) {
                var key = okey.toString();
                var match = key.match(findProc);
                var decrypted;
                if (!match) {
                    var match2 = key.match(fullRegex);
                    decrypted = new Buffer(match2[2].replace(/[\r\n]/g, ''), 'base64');
                } else {
                    var suite = 'aes' + match[1];
                    var iv = Buffer.from(match[2], 'hex');
                    var cipherText = Buffer.from(match[3].replace(/[\r\n]/g, ''), 'base64');
                    var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key;
                    var out = [];
                    var cipher = ciphers.createDecipheriv(suite, cipherKey, iv);
                    out.push(cipher.update(cipherText));
                    out.push(cipher.final());
                    decrypted = Buffer.concat(out);
                }
                var tag = key.match(startRegex)[1];
                return {
                    tag: tag,
                    data: decrypted
                };
            };
        },
        {
            'browserify-aes': 24,
            'evp_bytestokey': 86,
            'safe-buffer': 145
        }
    ],
    114: [
        function (_dereq_, module, exports) {
            var asn1 = _dereq_('./asn1');
            var aesid = _dereq_('./aesid.json');
            var fixProc = _dereq_('./fixProc');
            var ciphers = _dereq_('browserify-aes');
            var compat = _dereq_('pbkdf2');
            var Buffer = _dereq_('safe-buffer').Buffer;
            module.exports = parseKeys;
            function parseKeys(buffer) {
                var password;
                if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {
                    password = buffer.passphrase;
                    buffer = buffer.key;
                }
                if (typeof buffer === 'string') {
                    buffer = Buffer.from(buffer);
                }
                var stripped = fixProc(buffer, password);
                var type = stripped.tag;
                var data = stripped.data;
                var subtype, ndata;
                switch (type) {
                case 'CERTIFICATE':
                    ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo;
                case 'PUBLIC KEY':
                    if (!ndata) {
                        ndata = asn1.PublicKey.decode(data, 'der');
                    }
                    subtype = ndata.algorithm.algorithm.join('.');
                    switch (subtype) {
                    case '1.2.840.113549.1.1.1':
                        return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der');
                    case '1.2.840.10045.2.1':
                        ndata.subjectPrivateKey = ndata.subjectPublicKey;
                        return {
                            type: 'ec',
                            data: ndata
                        };
                    case '1.2.840.10040.4.1':
                        ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der');
                        return {
                            type: 'dsa',
                            data: ndata.algorithm.params
                        };
                    default:
                        throw new Error('unknown key id ' + subtype);
                    }
                    throw new Error('unknown key type ' + type);
                case 'ENCRYPTED PRIVATE KEY':
                    data = asn1.EncryptedPrivateKey.decode(data, 'der');
                    data = decrypt(data, password);
                case 'PRIVATE KEY':
                    ndata = asn1.PrivateKey.decode(data, 'der');
                    subtype = ndata.algorithm.algorithm.join('.');
                    switch (subtype) {
                    case '1.2.840.113549.1.1.1':
                        return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der');
                    case '1.2.840.10045.2.1':
                        return {
                            curve: ndata.algorithm.curve,
                            privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey
                        };
                    case '1.2.840.10040.4.1':
                        ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der');
                        return {
                            type: 'dsa',
                            params: ndata.algorithm.params
                        };
                    default:
                        throw new Error('unknown key id ' + subtype);
                    }
                    throw new Error('unknown key type ' + type);
                case 'RSA PUBLIC KEY':
                    return asn1.RSAPublicKey.decode(data, 'der');
                case 'RSA PRIVATE KEY':
                    return asn1.RSAPrivateKey.decode(data, 'der');
                case 'DSA PRIVATE KEY':
                    return {
                        type: 'dsa',
                        params: asn1.DSAPrivateKey.decode(data, 'der')
                    };
                case 'EC PRIVATE KEY':
                    data = asn1.ECPrivateKey.decode(data, 'der');
                    return {
                        curve: data.parameters.value,
                        privateKey: data.privateKey
                    };
                default:
                    throw new Error('unknown key type ' + type);
                }
            }
            parseKeys.signature = asn1.signature;
            function decrypt(data, password) {
                var salt = data.algorithm.decrypt.kde.kdeparams.salt;
                var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10);
                var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')];
                var iv = data.algorithm.decrypt.cipher.iv;
                var cipherText = data.subjectPrivateKey;
                var keylen = parseInt(algo.split('-')[1], 10) / 8;
                var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1');
                var cipher = ciphers.createDecipheriv(algo, key, iv);
                var out = [];
                out.push(cipher.update(cipherText));
                out.push(cipher.final());
                return Buffer.concat(out);
            }
        },
        {
            './aesid.json': 110,
            './asn1': 111,
            './fixProc': 113,
            'browserify-aes': 24,
            'pbkdf2': 115,
            'safe-buffer': 145
        }
    ],
    115: [
        function (_dereq_, module, exports) {
            exports.pbkdf2 = _dereq_('./lib/async');
            exports.pbkdf2Sync = _dereq_('./lib/sync');
        },
        {
            './lib/async': 116,
            './lib/sync': 119
        }
    ],
    116: [
        function (_dereq_, module, exports) {
            (function (process, global) {
                var checkParameters = _dereq_('./precondition');
                var defaultEncoding = _dereq_('./default-encoding');
                var sync = _dereq_('./sync');
                var Buffer = _dereq_('safe-buffer').Buffer;
                var ZERO_BUF;
                var subtle = global.crypto && global.crypto.subtle;
                var toBrowser = {
                    'sha': 'SHA-1',
                    'sha-1': 'SHA-1',
                    'sha1': 'SHA-1',
                    'sha256': 'SHA-256',
                    'sha-256': 'SHA-256',
                    'sha384': 'SHA-384',
                    'sha-384': 'SHA-384',
                    'sha-512': 'SHA-512',
                    'sha512': 'SHA-512'
                };
                var checks = [];
                function checkNative(algo) {
                    if (global.process && !global.process.browser) {
                        return Promise.resolve(false);
                    }
                    if (!subtle || !subtle.importKey || !subtle.deriveBits) {
                        return Promise.resolve(false);
                    }
                    if (checks[algo] !== undefined) {
                        return checks[algo];
                    }
                    ZERO_BUF = ZERO_BUF || Buffer.alloc(8);
                    var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo).then(function () {
                        return true;
                    }).catch(function () {
                        return false;
                    });
                    checks[algo] = prom;
                    return prom;
                }
                function browserPbkdf2(password, salt, iterations, length, algo) {
                    return subtle.importKey('raw', password, { name: 'PBKDF2' }, false, ['deriveBits']).then(function (key) {
                        return subtle.deriveBits({
                            name: 'PBKDF2',
                            salt: salt,
                            iterations: iterations,
                            hash: { name: algo }
                        }, key, length << 3);
                    }).then(function (res) {
                        return Buffer.from(res);
                    });
                }
                function resolvePromise(promise, callback) {
                    promise.then(function (out) {
                        process.nextTick(function () {
                            callback(null, out);
                        });
                    }, function (e) {
                        process.nextTick(function () {
                            callback(e);
                        });
                    });
                }
                module.exports = function (password, salt, iterations, keylen, digest, callback) {
                    if (typeof digest === 'function') {
                        callback = digest;
                        digest = undefined;
                    }
                    digest = digest || 'sha1';
                    var algo = toBrowser[digest.toLowerCase()];
                    if (!algo || typeof global.Promise !== 'function') {
                        return process.nextTick(function () {
                            var out;
                            try {
                                out = sync(password, salt, iterations, keylen, digest);
                            } catch (e) {
                                return callback(e);
                            }
                            callback(null, out);
                        });
                    }
                    checkParameters(password, salt, iterations, keylen);
                    if (typeof callback !== 'function')
                        throw new Error('No callback provided to pbkdf2');
                    if (!Buffer.isBuffer(password))
                        password = Buffer.from(password, defaultEncoding);
                    if (!Buffer.isBuffer(salt))
                        salt = Buffer.from(salt, defaultEncoding);
                    resolvePromise(checkNative(algo).then(function (resp) {
                        if (resp)
                            return browserPbkdf2(password, salt, iterations, keylen, algo);
                        return sync(password, salt, iterations, keylen, digest);
                    }), callback);
                };
            }.call(this, _dereq_('_process'), typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {}));
        },
        {
            './default-encoding': 117,
            './precondition': 118,
            './sync': 119,
            '_process': 121,
            'safe-buffer': 145
        }
    ],
    117: [
        function (_dereq_, module, exports) {
            (function (process) {
                var defaultEncoding;
                if (process.browser) {
                    defaultEncoding = 'utf-8';
                } else {
                    var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10);
                    defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary';
                }
                module.exports = defaultEncoding;
            }.call(this, _dereq_('_process')));
        },
        { '_process': 121 }
    ],
    118: [
        function (_dereq_, module, exports) {
            (function (Buffer) {
                var MAX_ALLOC = Math.pow(2, 30) - 1;
                function checkBuffer(buf, name) {
                    if (typeof buf !== 'string' && !Buffer.isBuffer(buf)) {
                        throw new TypeError(name + ' must be a buffer or string');
                    }
                }
                module.exports = function (password, salt, iterations, keylen) {
                    checkBuffer(password, 'Password');
                    checkBuffer(salt, 'Salt');
                    if (typeof iterations !== 'number') {
                        throw new TypeError('Iterations not a number');
                    }
                    if (iterations < 0) {
                        throw new TypeError('Bad iterations');
                    }
                    if (typeof keylen !== 'number') {
                        throw new TypeError('Key length not a number');
                    }
                    if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) {
                        throw new TypeError('Bad key length');
                    }
                };
            }.call(this, { 'isBuffer': _dereq_('../../is-buffer/index.js') }));
        },
        { '../../is-buffer/index.js': 104 }
    ],
    119: [
        function (_dereq_, module, exports) {
            var md5 = _dereq_('create-hash/md5');
            var RIPEMD160 = _dereq_('ripemd160');
            var sha = _dereq_('sha.js');
            var checkParameters = _dereq_('./precondition');
            var defaultEncoding = _dereq_('./default-encoding');
            var Buffer = _dereq_('safe-buffer').Buffer;
            var ZEROS = Buffer.alloc(128);
            var sizes = {
                md5: 16,
                sha1: 20,
                sha224: 28,
                sha256: 32,
                sha384: 48,
                sha512: 64,
                rmd160: 20,
                ripemd160: 20
            };
            function Hmac(alg, key, saltLen) {
                var hash = getDigest(alg);
                var blocksize = alg === 'sha512' || alg === 'sha384' ? 128 : 64;
                if (key.length > blocksize) {
                    key = hash(key);
                } else if (key.length < blocksize) {
                    key = Buffer.concat([
                        key,
                        ZEROS
                    ], blocksize);
                }
                var ipad = Buffer.allocUnsafe(blocksize + sizes[alg]);
                var opad = Buffer.allocUnsafe(blocksize + sizes[alg]);
                for (var i = 0; i < blocksize; i++) {
                    ipad[i] = key[i] ^ 54;
                    opad[i] = key[i] ^ 92;
                }
                var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4);
                ipad.copy(ipad1, 0, 0, blocksize);
                this.ipad1 = ipad1;
                this.ipad2 = ipad;
                this.opad = opad;
                this.alg = alg;
                this.blocksize = blocksize;
                this.hash = hash;
                this.size = sizes[alg];
            }
            Hmac.prototype.run = function (data, ipad) {
                data.copy(ipad, this.blocksize);
                var h = this.hash(ipad);
                h.copy(this.opad, this.blocksize);
                return this.hash(this.opad);
            };
            function getDigest(alg) {
                function shaFunc(data) {
                    return sha(alg).update(data).digest();
                }
                function rmd160Func(data) {
                    return new RIPEMD160().update(data).digest();
                }
                if (alg === 'rmd160' || alg === 'ripemd160')
                    return rmd160Func;
                if (alg === 'md5')
                    return md5;
                return shaFunc;
            }
            function pbkdf2(password, salt, iterations, keylen, digest) {
                checkParameters(password, salt, iterations, keylen);
                if (!Buffer.isBuffer(password))
                    password = Buffer.from(password, defaultEncoding);
                if (!Buffer.isBuffer(salt))
                    salt = Buffer.from(salt, defaultEncoding);
                digest = digest || 'sha1';
                var hmac = new Hmac(digest, password, salt.length);
                var DK = Buffer.allocUnsafe(keylen);
                var block1 = Buffer.allocUnsafe(salt.length + 4);
                salt.copy(block1, 0, 0, salt.length);
                var destPos = 0;
                var hLen = sizes[digest];
                var l = Math.ceil(keylen / hLen);
                for (var i = 1; i <= l; i++) {
                    block1.writeUInt32BE(i, salt.length);
                    var T = hmac.run(block1, hmac.ipad1);
                    var U = T;
                    for (var j = 1; j < iterations; j++) {
                        U = hmac.run(U, hmac.ipad2);
                        for (var k = 0; k < hLen; k++)
                            T[k] ^= U[k];
                    }
                    T.copy(DK, destPos);
                    destPos += hLen;
                }
                return DK;
            }
            module.exports = pbkdf2;
        },
        {
            './default-encoding': 117,
            './precondition': 118,
            'create-hash/md5': 55,
            'ripemd160': 144,
            'safe-buffer': 145,
            'sha.js': 147
        }
    ],
    120: [
        function (_dereq_, module, exports) {
            (function (process) {
                'use strict';
                if (!process.version || process.version.indexOf('v0.') === 0 || process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
                    module.exports = { nextTick: nextTick };
                } else {
                    module.exports = process;
                }
                function nextTick(fn, arg1, arg2, arg3) {
                    if (typeof fn !== 'function') {
                        throw new TypeError('"callback" argument must be a function');
                    }
                    var len = arguments.length;
                    var args, i;
                    switch (len) {
                    case 0:
                    case 1:
                        return process.nextTick(fn);
                    case 2:
                        return process.nextTick(function afterTickOne() {
                            fn.call(null, arg1);
                        });
                    case 3:
                        return process.nextTick(function afterTickTwo() {
                            fn.call(null, arg1, arg2);
                        });
                    case 4:
                        return process.nextTick(function afterTickThree() {
                            fn.call(null, arg1, arg2, arg3);
                        });
                    default:
                        args = new Array(len - 1);
                        i = 0;
                        while (i < args.length) {
                            args[i++] = arguments[i];
                        }
                        return process.nextTick(function afterTick() {
                            fn.apply(null, args);
                        });
                    }
                }
            }.call(this, _dereq_('_process')));
        },
        { '_process': 121 }
    ],
    121: [
        function (_dereq_, module, exports) {
            var process = module.exports = {};
            var cachedSetTimeout;
            var cachedClearTimeout;
            function defaultSetTimout() {
                throw new Error('setTimeout has not been defined');
            }
            function defaultClearTimeout() {
                throw new Error('clearTimeout has not been defined');
            }
            (function () {
                try {
                    if (typeof setTimeout === 'function') {
                        cachedSetTimeout = setTimeout;
                    } else {
                        cachedSetTimeout = defaultSetTimout;
                    }
                } catch (e) {
                    cachedSetTimeout = defaultSetTimout;
                }
                try {
                    if (typeof clearTimeout === 'function') {
                        cachedClearTimeout = clearTimeout;
                    } else {
                        cachedClearTimeout = defaultClearTimeout;
                    }
                } catch (e) {
                    cachedClearTimeout = defaultClearTimeout;
                }
            }());
            function runTimeout(fun) {
                if (cachedSetTimeout === setTimeout) {
                    return setTimeout(fun, 0);
                }
                if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
                    cachedSetTimeout = setTimeout;
                    return setTimeout(fun, 0);
                }
                try {
                    return cachedSetTimeout(fun, 0);
                } catch (e) {
                    try {
                        return cachedSetTimeout.call(null, fun, 0);
                    } catch (e) {
                        return cachedSetTimeout.call(this, fun, 0);
                    }
                }
            }
            function runClearTimeout(marker) {
                if (cachedClearTimeout === clearTimeout) {
                    return clearTimeout(marker);
                }
                if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
                    cachedClearTimeout = clearTimeout;
                    return clearTimeout(marker);
                }
                try {
                    return cachedClearTimeout(marker);
                } catch (e) {
                    try {
                        return cachedClearTimeout.call(null, marker);
                    } catch (e) {
                        return cachedClearTimeout.call(this, marker);
                    }
                }
            }
            var queue = [];
            var draining = false;
            var currentQueue;
            var queueIndex = -1;
            function cleanUpNextTick() {
                if (!draining || !currentQueue) {
                    return;
                }
                draining = false;
                if (currentQueue.length) {
                    queue = currentQueue.concat(queue);
                } else {
                    queueIndex = -1;
                }
                if (queue.length) {
                    drainQueue();
                }
            }
            function drainQueue() {
                if (draining) {
                    return;
                }
                var timeout = runTimeout(cleanUpNextTick);
                draining = true;
                var len = queue.length;
                while (len) {
                    currentQueue = queue;
                    queue = [];
                    while (++queueIndex < len) {
                        if (currentQueue) {
                            currentQueue[queueIndex].run();
                        }
                    }
                    queueIndex = -1;
                    len = queue.length;
                }
                currentQueue = null;
                draining = false;
                runClearTimeout(timeout);
            }
            process.nextTick = function (fun) {
                var args = new Array(arguments.length - 1);
                if (arguments.length > 1) {
                    for (var i = 1; i < arguments.length; i++) {
                        args[i - 1] = arguments[i];
                    }
                }
                queue.push(new Item(fun, args));
                if (queue.length === 1 && !draining) {
                    runTimeout(drainQueue);
                }
            };
            function Item(fun, array) {
                this.fun = fun;
                this.array = array;
            }
            Item.prototype.run = function () {
                this.fun.apply(null, this.array);
            };
            process.title = 'browser';
            process.browser = true;
            process.env = {};
            process.argv = [];
            process.version = '';
            process.versions = {};
            function noop() {
            }
            process.on = noop;
            process.addListener = noop;
            process.once = noop;
            process.off = noop;
            process.removeListener = noop;
            process.removeAllListeners = noop;
            process.emit = noop;
            process.prependListener = noop;
            process.prependOnceListener = noop;
            process.listeners = function (name) {
                return [];
            };
            process.binding = function (name) {
                throw new Error('process.binding is not supported');
            };
            process.cwd = function () {
                return '/';
            };
            process.chdir = function (dir) {
                throw new Error('process.chdir is not supported');
            };
            process.umask = function () {
                return 0;
            };
        },
        {}
    ],
    122: [
        function (_dereq_, module, exports) {
            exports.publicEncrypt = _dereq_('./publicEncrypt');
            exports.privateDecrypt = _dereq_('./privateDecrypt');
            exports.privateEncrypt = function privateEncrypt(key, buf) {
                return exports.publicEncrypt(key, buf, true);
            };
            exports.publicDecrypt = function publicDecrypt(key, buf) {
                return exports.privateDecrypt(key, buf, true);
            };
        },
        {
            './privateDecrypt': 124,
            './publicEncrypt': 125
        }
    ],
    123: [
        function (_dereq_, module, exports) {
            var createHash = _dereq_('create-hash');
            var Buffer = _dereq_('safe-buffer').Buffer;
            module.exports = function (seed, len) {
                var t = Buffer.alloc(0);
                var i = 0;
                var c;
                while (t.length < len) {
                    c = i2ops(i++);
                    t = Buffer.concat([
                        t,
                        createHash('sha1').update(seed).update(c).digest()
                    ]);
                }
                return t.slice(0, len);
            };
            function i2ops(c) {
                var out = Buffer.allocUnsafe(4);
                out.writeUInt32BE(c, 0);
                return out;
            }
        },
        {
            'create-hash': 54,
            'safe-buffer': 145
        }
    ],
    124: [
        function (_dereq_, module, exports) {
            var parseKeys = _dereq_('parse-asn1');
            var mgf = _dereq_('./mgf');
            var xor = _dereq_('./xor');
            var BN = _dereq_('bn.js');
            var crt = _dereq_('browserify-rsa');
            var createHash = _dereq_('create-hash');
            var withPublic = _dereq_('./withPublic');
            var Buffer = _dereq_('safe-buffer').Buffer;
            module.exports = function privateDecrypt(privateKey, enc, reverse) {
                var padding;
                if (privateKey.padding) {
                    padding = privateKey.padding;
                } else if (reverse) {
                    padding = 1;
                } else {
                    padding = 4;
                }
                var key = parseKeys(privateKey);
                var k = key.modulus.byteLength();
                if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {
                    throw new Error('decryption error');
                }
                var msg;
                if (reverse) {
                    msg = withPublic(new BN(enc), key);
                } else {
                    msg = crt(enc, key);
                }
                var zBuffer = Buffer.alloc(k - msg.length);
                msg = Buffer.concat([
                    zBuffer,
                    msg
                ], k);
                if (padding === 4) {
                    return oaep(key, msg);
                } else if (padding === 1) {
                    return pkcs1(key, msg, reverse);
                } else if (padding === 3) {
                    return msg;
                } else {
                    throw new Error('unknown padding');
                }
            };
            function oaep(key, msg) {
                var k = key.modulus.byteLength();
                var iHash = createHash('sha1').update(Buffer.alloc(0)).digest();
                var hLen = iHash.length;
                if (msg[0] !== 0) {
                    throw new Error('decryption error');
                }
                var maskedSeed = msg.slice(1, hLen + 1);
                var maskedDb = msg.slice(hLen + 1);
                var seed = xor(maskedSeed, mgf(maskedDb, hLen));
                var db = xor(maskedDb, mgf(seed, k - hLen - 1));
                if (compare(iHash, db.slice(0, hLen))) {
                    throw new Error('decryption error');
                }
                var i = hLen;
                while (db[i] === 0) {
                    i++;
                }
                if (db[i++] !== 1) {
                    throw new Error('decryption error');
                }
                return db.slice(i);
            }
            function pkcs1(key, msg, reverse) {
                var p1 = msg.slice(0, 2);
                var i = 2;
                var status = 0;
                while (msg[i++] !== 0) {
                    if (i >= msg.length) {
                        status++;
                        break;
                    }
                }
                var ps = msg.slice(2, i - 1);
                if (p1.toString('hex') !== '0002' && !reverse || p1.toString('hex') !== '0001' && reverse) {
                    status++;
                }
                if (ps.length < 8) {
                    status++;
                }
                if (status) {
                    throw new Error('decryption error');
                }
                return msg.slice(i);
            }
            function compare(a, b) {
                a = Buffer.from(a);
                b = Buffer.from(b);
                var dif = 0;
                var len = a.length;
                if (a.length !== b.length) {
                    dif++;
                    len = Math.min(a.length, b.length);
                }
                var i = -1;
                while (++i < len) {
                    dif += a[i] ^ b[i];
                }
                return dif;
            }
        },
        {
            './mgf': 123,
            './withPublic': 126,
            './xor': 127,
            'bn.js': 19,
            'browserify-rsa': 42,
            'create-hash': 54,
            'parse-asn1': 114,
            'safe-buffer': 145
        }
    ],
    125: [
        function (_dereq_, module, exports) {
            var parseKeys = _dereq_('parse-asn1');
            var randomBytes = _dereq_('randombytes');
            var createHash = _dereq_('create-hash');
            var mgf = _dereq_('./mgf');
            var xor = _dereq_('./xor');
            var BN = _dereq_('bn.js');
            var withPublic = _dereq_('./withPublic');
            var crt = _dereq_('browserify-rsa');
            var Buffer = _dereq_('safe-buffer').Buffer;
            module.exports = function publicEncrypt(publicKey, msg, reverse) {
                var padding;
                if (publicKey.padding) {
                    padding = publicKey.padding;
                } else if (reverse) {
                    padding = 1;
                } else {
                    padding = 4;
                }
                var key = parseKeys(publicKey);
                var paddedMsg;
                if (padding === 4) {
                    paddedMsg = oaep(key, msg);
                } else if (padding === 1) {
                    paddedMsg = pkcs1(key, msg, reverse);
                } else if (padding === 3) {
                    paddedMsg = new BN(msg);
                    if (paddedMsg.cmp(key.modulus) >= 0) {
                        throw new Error('data too long for modulus');
                    }
                } else {
                    throw new Error('unknown padding');
                }
                if (reverse) {
                    return crt(paddedMsg, key);
                } else {
                    return withPublic(paddedMsg, key);
                }
            };
            function oaep(key, msg) {
                var k = key.modulus.byteLength();
                var mLen = msg.length;
                var iHash = createHash('sha1').update(Buffer.alloc(0)).digest();
                var hLen = iHash.length;
                var hLen2 = 2 * hLen;
                if (mLen > k - hLen2 - 2) {
                    throw new Error('message too long');
                }
                var ps = Buffer.alloc(k - mLen - hLen2 - 2);
                var dblen = k - hLen - 1;
                var seed = randomBytes(hLen);
                var maskedDb = xor(Buffer.concat([
                    iHash,
                    ps,
                    Buffer.alloc(1, 1),
                    msg
                ], dblen), mgf(seed, dblen));
                var maskedSeed = xor(seed, mgf(maskedDb, hLen));
                return new BN(Buffer.concat([
                    Buffer.alloc(1),
                    maskedSeed,
                    maskedDb
                ], k));
            }
            function pkcs1(key, msg, reverse) {
                var mLen = msg.length;
                var k = key.modulus.byteLength();
                if (mLen > k - 11) {
                    throw new Error('message too long');
                }
                var ps;
                if (reverse) {
                    ps = Buffer.alloc(k - mLen - 3, 255);
                } else {
                    ps = nonZero(k - mLen - 3);
                }
                return new BN(Buffer.concat([
                    Buffer.from([
                        0,
                        reverse ? 1 : 2
                    ]),
                    ps,
                    Buffer.alloc(1),
                    msg
                ], k));
            }
            function nonZero(len) {
                var out = Buffer.allocUnsafe(len);
                var i = 0;
                var cache = randomBytes(len * 2);
                var cur = 0;
                var num;
                while (i < len) {
                    if (cur === cache.length) {
                        cache = randomBytes(len * 2);
                        cur = 0;
                    }
                    num = cache[cur++];
                    if (num) {
                        out[i++] = num;
                    }
                }
                return out;
            }
        },
        {
            './mgf': 123,
            './withPublic': 126,
            './xor': 127,
            'bn.js': 19,
            'browserify-rsa': 42,
            'create-hash': 54,
            'parse-asn1': 114,
            'randombytes': 128,
            'safe-buffer': 145
        }
    ],
    126: [
        function (_dereq_, module, exports) {
            var BN = _dereq_('bn.js');
            var Buffer = _dereq_('safe-buffer').Buffer;
            function withPublic(paddedMsg, key) {
                return Buffer.from(paddedMsg.toRed(BN.mont(key.modulus)).redPow(new BN(key.publicExponent)).fromRed().toArray());
            }
            module.exports = withPublic;
        },
        {
            'bn.js': 19,
            'safe-buffer': 145
        }
    ],
    127: [
        function (_dereq_, module, exports) {
            module.exports = function xor(a, b) {
                var len = a.length;
                var i = -1;
                while (++i < len) {
                    a[i] ^= b[i];
                }
                return a;
            };
        },
        {}
    ],
    128: [
        function (_dereq_, module, exports) {
            (function (process, global) {
                'use strict';
                var MAX_BYTES = 65536;
                var MAX_UINT32 = 4294967295;
                function oldBrowser() {
                    throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11');
                }
                var Buffer = _dereq_('safe-buffer').Buffer;
                var crypto = global.crypto || global.msCrypto;
                if (crypto && crypto.getRandomValues) {
                    module.exports = randomBytes;
                } else {
                    module.exports = oldBrowser;
                }
                function randomBytes(size, cb) {
                    if (size > MAX_UINT32)
                        throw new RangeError('requested too many random bytes');
                    var bytes = Buffer.allocUnsafe(size);
                    if (size > 0) {
                        if (size > MAX_BYTES) {
                            for (var generated = 0; generated < size; generated += MAX_BYTES) {
                                crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES));
                            }
                        } else {
                            crypto.getRandomValues(bytes);
                        }
                    }
                    if (typeof cb === 'function') {
                        return process.nextTick(function () {
                            cb(null, bytes);
                        });
                    }
                    return bytes;
                }
            }.call(this, _dereq_('_process'), typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {}));
        },
        {
            '_process': 121,
            'safe-buffer': 145
        }
    ],
    129: [
        function (_dereq_, module, exports) {
            (function (process, global) {
                'use strict';
                function oldBrowser() {
                    throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11');
                }
                var safeBuffer = _dereq_('safe-buffer');
                var randombytes = _dereq_('randombytes');
                var Buffer = safeBuffer.Buffer;
                var kBufferMaxLength = safeBuffer.kMaxLength;
                var crypto = global.crypto || global.msCrypto;
                var kMaxUint32 = Math.pow(2, 32) - 1;
                function assertOffset(offset, length) {
                    if (typeof offset !== 'number' || offset !== offset) {
                        throw new TypeError('offset must be a number');
                    }
                    if (offset > kMaxUint32 || offset < 0) {
                        throw new TypeError('offset must be a uint32');
                    }
                    if (offset > kBufferMaxLength || offset > length) {
                        throw new RangeError('offset out of range');
                    }
                }
                function assertSize(size, offset, length) {
                    if (typeof size !== 'number' || size !== size) {
                        throw new TypeError('size must be a number');
                    }
                    if (size > kMaxUint32 || size < 0) {
                        throw new TypeError('size must be a uint32');
                    }
                    if (size + offset > length || size > kBufferMaxLength) {
                        throw new RangeError('buffer too small');
                    }
                }
                if (crypto && crypto.getRandomValues || !process.browser) {
                    exports.randomFill = randomFill;
                    exports.randomFillSync = randomFillSync;
                } else {
                    exports.randomFill = oldBrowser;
                    exports.randomFillSync = oldBrowser;
                }
                function randomFill(buf, offset, size, cb) {
                    if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {
                        throw new TypeError('"buf" argument must be a Buffer or Uint8Array');
                    }
                    if (typeof offset === 'function') {
                        cb = offset;
                        offset = 0;
                        size = buf.length;
                    } else if (typeof size === 'function') {
                        cb = size;
                        size = buf.length - offset;
                    } else if (typeof cb !== 'function') {
                        throw new TypeError('"cb" argument must be a function');
                    }
                    assertOffset(offset, buf.length);
                    assertSize(size, offset, buf.length);
                    return actualFill(buf, offset, size, cb);
                }
                function actualFill(buf, offset, size, cb) {
                    if (process.browser) {
                        var ourBuf = buf.buffer;
                        var uint = new Uint8Array(ourBuf, offset, size);
                        crypto.getRandomValues(uint);
                        if (cb) {
                            process.nextTick(function () {
                                cb(null, buf);
                            });
                            return;
                        }
                        return buf;
                    }
                    if (cb) {
                        randombytes(size, function (err, bytes) {
                            if (err) {
                                return cb(err);
                            }
                            bytes.copy(buf, offset);
                            cb(null, buf);
                        });
                        return;
                    }
                    var bytes = randombytes(size);
                    bytes.copy(buf, offset);
                    return buf;
                }
                function randomFillSync(buf, offset, size) {
                    if (typeof offset === 'undefined') {
                        offset = 0;
                    }
                    if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {
                        throw new TypeError('"buf" argument must be a Buffer or Uint8Array');
                    }
                    assertOffset(offset, buf.length);
                    if (size === undefined)
                        size = buf.length - offset;
                    assertSize(size, offset, buf.length);
                    return actualFill(buf, offset, size);
                }
            }.call(this, _dereq_('_process'), typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {}));
        },
        {
            '_process': 121,
            'randombytes': 128,
            'safe-buffer': 145
        }
    ],
    130: [
        function (_dereq_, module, exports) {
            module.exports = _dereq_('./lib/_stream_duplex.js');
        },
        { './lib/_stream_duplex.js': 131 }
    ],
    131: [
        function (_dereq_, module, exports) {
            'use strict';
            var pna = _dereq_('process-nextick-args');
            var objectKeys = Object.keys || function (obj) {
                var keys = [];
                for (var key in obj) {
                    keys.push(key);
                }
                return keys;
            };
            module.exports = Duplex;
            var util = _dereq_('core-util-is');
            util.inherits = _dereq_('inherits');
            var Readable = _dereq_('./_stream_readable');
            var Writable = _dereq_('./_stream_writable');
            util.inherits(Duplex, Readable);
            {
                var keys = objectKeys(Writable.prototype);
                for (var v = 0; v < keys.length; v++) {
                    var method = keys[v];
                    if (!Duplex.prototype[method])
                        Duplex.prototype[method] = Writable.prototype[method];
                }
            }
            function Duplex(options) {
                if (!(this instanceof Duplex))
                    return new Duplex(options);
                Readable.call(this, options);
                Writable.call(this, options);
                if (options && options.readable === false)
                    this.readable = false;
                if (options && options.writable === false)
                    this.writable = false;
                this.allowHalfOpen = true;
                if (options && options.allowHalfOpen === false)
                    this.allowHalfOpen = false;
                this.once('end', onend);
            }
            Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', {
                enumerable: false,
                get: function () {
                    return this._writableState.highWaterMark;
                }
            });
            function onend() {
                if (this.allowHalfOpen || this._writableState.ended)
                    return;
                pna.nextTick(onEndNT, this);
            }
            function onEndNT(self) {
                self.end();
            }
            Object.defineProperty(Duplex.prototype, 'destroyed', {
                get: function () {
                    if (this._readableState === undefined || this._writableState === undefined) {
                        return false;
                    }
                    return this._readableState.destroyed && this._writableState.destroyed;
                },
                set: function (value) {
                    if (this._readableState === undefined || this._writableState === undefined) {
                        return;
                    }
                    this._readableState.destroyed = value;
                    this._writableState.destroyed = value;
                }
            });
            Duplex.prototype._destroy = function (err, cb) {
                this.push(null);
                this.end();
                pna.nextTick(cb, err);
            };
        },
        {
            './_stream_readable': 133,
            './_stream_writable': 135,
            'core-util-is': 52,
            'inherits': 103,
            'process-nextick-args': 120
        }
    ],
    132: [
        function (_dereq_, module, exports) {
            'use strict';
            module.exports = PassThrough;
            var Transform = _dereq_('./_stream_transform');
            var util = _dereq_('core-util-is');
            util.inherits = _dereq_('inherits');
            util.inherits(PassThrough, Transform);
            function PassThrough(options) {
                if (!(this instanceof PassThrough))
                    return new PassThrough(options);
                Transform.call(this, options);
            }
            PassThrough.prototype._transform = function (chunk, encoding, cb) {
                cb(null, chunk);
            };
        },
        {
            './_stream_transform': 134,
            'core-util-is': 52,
            'inherits': 103
        }
    ],
    133: [
        function (_dereq_, module, exports) {
            (function (process, global) {
                'use strict';
                var pna = _dereq_('process-nextick-args');
                module.exports = Readable;
                var isArray = _dereq_('isarray');
                var Duplex;
                Readable.ReadableState = ReadableState;
                var EE = _dereq_('events').EventEmitter;
                var EElistenerCount = function (emitter, type) {
                    return emitter.listeners(type).length;
                };
                var Stream = _dereq_('./internal/streams/stream');
                var Buffer = _dereq_('safe-buffer').Buffer;
                var OurUint8Array = global.Uint8Array || function () {
                };
                function _uint8ArrayToBuffer(chunk) {
                    return Buffer.from(chunk);
                }
                function _isUint8Array(obj) {
                    return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
                }
                var util = _dereq_('core-util-is');
                util.inherits = _dereq_('inherits');
                var debugUtil = _dereq_('util');
                var debug = void 0;
                if (debugUtil && debugUtil.debuglog) {
                    debug = debugUtil.debuglog('stream');
                } else {
                    debug = function () {
                    };
                }
                var BufferList = _dereq_('./internal/streams/BufferList');
                var destroyImpl = _dereq_('./internal/streams/destroy');
                var StringDecoder;
                util.inherits(Readable, Stream);
                var kProxyEvents = [
                    'error',
                    'close',
                    'destroy',
                    'pause',
                    'resume'
                ];
                function prependListener(emitter, event, fn) {
                    if (typeof emitter.prependListener === 'function')
                        return emitter.prependListener(event, fn);
                    if (!emitter._events || !emitter._events[event])
                        emitter.on(event, fn);
                    else if (isArray(emitter._events[event]))
                        emitter._events[event].unshift(fn);
                    else
                        emitter._events[event] = [
                            fn,
                            emitter._events[event]
                        ];
                }
                function ReadableState(options, stream) {
                    Duplex = Duplex || _dereq_('./_stream_duplex');
                    options = options || {};
                    var isDuplex = stream instanceof Duplex;
                    this.objectMode = !!options.objectMode;
                    if (isDuplex)
                        this.objectMode = this.objectMode || !!options.readableObjectMode;
                    var hwm = options.highWaterMark;
                    var readableHwm = options.readableHighWaterMark;
                    var defaultHwm = this.objectMode ? 16 : 16 * 1024;
                    if (hwm || hwm === 0)
                        this.highWaterMark = hwm;
                    else if (isDuplex && (readableHwm || readableHwm === 0))
                        this.highWaterMark = readableHwm;
                    else
                        this.highWaterMark = defaultHwm;
                    this.highWaterMark = Math.floor(this.highWaterMark);
                    this.buffer = new BufferList();
                    this.length = 0;
                    this.pipes = null;
                    this.pipesCount = 0;
                    this.flowing = null;
                    this.ended = false;
                    this.endEmitted = false;
                    this.reading = false;
                    this.sync = true;
                    this.needReadable = false;
                    this.emittedReadable = false;
                    this.readableListening = false;
                    this.resumeScheduled = false;
                    this.destroyed = false;
                    this.defaultEncoding = options.defaultEncoding || 'utf8';
                    this.awaitDrain = 0;
                    this.readingMore = false;
                    this.decoder = null;
                    this.encoding = null;
                    if (options.encoding) {
                        if (!StringDecoder)
                            StringDecoder = _dereq_('string_decoder/').StringDecoder;
                        this.decoder = new StringDecoder(options.encoding);
                        this.encoding = options.encoding;
                    }
                }
                function Readable(options) {
                    Duplex = Duplex || _dereq_('./_stream_duplex');
                    if (!(this instanceof Readable))
                        return new Readable(options);
                    this._readableState = new ReadableState(options, this);
                    this.readable = true;
                    if (options) {
                        if (typeof options.read === 'function')
                            this._read = options.read;
                        if (typeof options.destroy === 'function')
                            this._destroy = options.destroy;
                    }
                    Stream.call(this);
                }
                Object.defineProperty(Readable.prototype, 'destroyed', {
                    get: function () {
                        if (this._readableState === undefined) {
                            return false;
                        }
                        return this._readableState.destroyed;
                    },
                    set: function (value) {
                        if (!this._readableState) {
                            return;
                        }
                        this._readableState.destroyed = value;
                    }
                });
                Readable.prototype.destroy = destroyImpl.destroy;
                Readable.prototype._undestroy = destroyImpl.undestroy;
                Readable.prototype._destroy = function (err, cb) {
                    this.push(null);
                    cb(err);
                };
                Readable.prototype.push = function (chunk, encoding) {
                    var state = this._readableState;
                    var skipChunkCheck;
                    if (!state.objectMode) {
                        if (typeof chunk === 'string') {
                            encoding = encoding || state.defaultEncoding;
                            if (encoding !== state.encoding) {
                                chunk = Buffer.from(chunk, encoding);
                                encoding = '';
                            }
                            skipChunkCheck = true;
                        }
                    } else {
                        skipChunkCheck = true;
                    }
                    return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
                };
                Readable.prototype.unshift = function (chunk) {
                    return readableAddChunk(this, chunk, null, true, false);
                };
                function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
                    var state = stream._readableState;
                    if (chunk === null) {
                        state.reading = false;
                        onEofChunk(stream, state);
                    } else {
                        var er;
                        if (!skipChunkCheck)
                            er = chunkInvalid(state, chunk);
                        if (er) {
                            stream.emit('error', er);
                        } else if (state.objectMode || chunk && chunk.length > 0) {
                            if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
                                chunk = _uint8ArrayToBuffer(chunk);
                            }
                            if (addToFront) {
                                if (state.endEmitted)
                                    stream.emit('error', new Error('stream.unshift() after end event'));
                                else
                                    addChunk(stream, state, chunk, true);
                            } else if (state.ended) {
                                stream.emit('error', new Error('stream.push() after EOF'));
                            } else {
                                state.reading = false;
                                if (state.decoder && !encoding) {
                                    chunk = state.decoder.write(chunk);
                                    if (state.objectMode || chunk.length !== 0)
                                        addChunk(stream, state, chunk, false);
                                    else
                                        maybeReadMore(stream, state);
                                } else {
                                    addChunk(stream, state, chunk, false);
                                }
                            }
                        } else if (!addToFront) {
                            state.reading = false;
                        }
                    }
                    return needMoreData(state);
                }
                function addChunk(stream, state, chunk, addToFront) {
                    if (state.flowing && state.length === 0 && !state.sync) {
                        stream.emit('data', chunk);
                        stream.read(0);
                    } else {
                        state.length += state.objectMode ? 1 : chunk.length;
                        if (addToFront)
                            state.buffer.unshift(chunk);
                        else
                            state.buffer.push(chunk);
                        if (state.needReadable)
                            emitReadable(stream);
                    }
                    maybeReadMore(stream, state);
                }
                function chunkInvalid(state, chunk) {
                    var er;
                    if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
                        er = new TypeError('Invalid non-string/buffer chunk');
                    }
                    return er;
                }
                function needMoreData(state) {
                    return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
                }
                Readable.prototype.isPaused = function () {
                    return this._readableState.flowing === false;
                };
                Readable.prototype.setEncoding = function (enc) {
                    if (!StringDecoder)
                        StringDecoder = _dereq_('string_decoder/').StringDecoder;
                    this._readableState.decoder = new StringDecoder(enc);
                    this._readableState.encoding = enc;
                    return this;
                };
                var MAX_HWM = 8388608;
                function computeNewHighWaterMark(n) {
                    if (n >= MAX_HWM) {
                        n = MAX_HWM;
                    } else {
                        n--;
                        n |= n >>> 1;
                        n |= n >>> 2;
                        n |= n >>> 4;
                        n |= n >>> 8;
                        n |= n >>> 16;
                        n++;
                    }
                    return n;
                }
                function howMuchToRead(n, state) {
                    if (n <= 0 || state.length === 0 && state.ended)
                        return 0;
                    if (state.objectMode)
                        return 1;
                    if (n !== n) {
                        if (state.flowing && state.length)
                            return state.buffer.head.data.length;
                        else
                            return state.length;
                    }
                    if (n > state.highWaterMark)
                        state.highWaterMark = computeNewHighWaterMark(n);
                    if (n <= state.length)
                        return n;
                    if (!state.ended) {
                        state.needReadable = true;
                        return 0;
                    }
                    return state.length;
                }
                Readable.prototype.read = function (n) {
                    debug('read', n);
                    n = parseInt(n, 10);
                    var state = this._readableState;
                    var nOrig = n;
                    if (n !== 0)
                        state.emittedReadable = false;
                    if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
                        debug('read: emitReadable', state.length, state.ended);
                        if (state.length === 0 && state.ended)
                            endReadable(this);
                        else
                            emitReadable(this);
                        return null;
                    }
                    n = howMuchToRead(n, state);
                    if (n === 0 && state.ended) {
                        if (state.length === 0)
                            endReadable(this);
                        return null;
                    }
                    var doRead = state.needReadable;
                    debug('need readable', doRead);
                    if (state.length === 0 || state.length - n < state.highWaterMark) {
                        doRead = true;
                        debug('length less than watermark', doRead);
                    }
                    if (state.ended || state.reading) {
                        doRead = false;
                        debug('reading or ended', doRead);
                    } else if (doRead) {
                        debug('do read');
                        state.reading = true;
                        state.sync = true;
                        if (state.length === 0)
                            state.needReadable = true;
                        this._read(state.highWaterMark);
                        state.sync = false;
                        if (!state.reading)
                            n = howMuchToRead(nOrig, state);
                    }
                    var ret;
                    if (n > 0)
                        ret = fromList(n, state);
                    else
                        ret = null;
                    if (ret === null) {
                        state.needReadable = true;
                        n = 0;
                    } else {
                        state.length -= n;
                    }
                    if (state.length === 0) {
                        if (!state.ended)
                            state.needReadable = true;
                        if (nOrig !== n && state.ended)
                            endReadable(this);
                    }
                    if (ret !== null)
                        this.emit('data', ret);
                    return ret;
                };
                function onEofChunk(stream, state) {
                    if (state.ended)
                        return;
                    if (state.decoder) {
                        var chunk = state.decoder.end();
                        if (chunk && chunk.length) {
                            state.buffer.push(chunk);
                            state.length += state.objectMode ? 1 : chunk.length;
                        }
                    }
                    state.ended = true;
                    emitReadable(stream);
                }
                function emitReadable(stream) {
                    var state = stream._readableState;
                    state.needReadable = false;
                    if (!state.emittedReadable) {
                        debug('emitReadable', state.flowing);
                        state.emittedReadable = true;
                        if (state.sync)
                            pna.nextTick(emitReadable_, stream);
                        else
                            emitReadable_(stream);
                    }
                }
                function emitReadable_(stream) {
                    debug('emit readable');
                    stream.emit('readable');
                    flow(stream);
                }
                function maybeReadMore(stream, state) {
                    if (!state.readingMore) {
                        state.readingMore = true;
                        pna.nextTick(maybeReadMore_, stream, state);
                    }
                }
                function maybeReadMore_(stream, state) {
                    var len = state.length;
                    while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
                        debug('maybeReadMore read 0');
                        stream.read(0);
                        if (len === state.length)
                            break;
                        else
                            len = state.length;
                    }
                    state.readingMore = false;
                }
                Readable.prototype._read = function (n) {
                    this.emit('error', new Error('_read() is not implemented'));
                };
                Readable.prototype.pipe = function (dest, pipeOpts) {
                    var src = this;
                    var state = this._readableState;
                    switch (state.pipesCount) {
                    case 0:
                        state.pipes = dest;
                        break;
                    case 1:
                        state.pipes = [
                            state.pipes,
                            dest
                        ];
                        break;
                    default:
                        state.pipes.push(dest);
                        break;
                    }
                    state.pipesCount += 1;
                    debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
                    var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
                    var endFn = doEnd ? onend : unpipe;
                    if (state.endEmitted)
                        pna.nextTick(endFn);
                    else
                        src.once('end', endFn);
                    dest.on('unpipe', onunpipe);
                    function onunpipe(readable, unpipeInfo) {
                        debug('onunpipe');
                        if (readable === src) {
                            if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
                                unpipeInfo.hasUnpiped = true;
                                cleanup();
                            }
                        }
                    }
                    function onend() {
                        debug('onend');
                        dest.end();
                    }
                    var ondrain = pipeOnDrain(src);
                    dest.on('drain', ondrain);
                    var cleanedUp = false;
                    function cleanup() {
                        debug('cleanup');
                        dest.removeListener('close', onclose);
                        dest.removeListener('finish', onfinish);
                        dest.removeListener('drain', ondrain);
                        dest.removeListener('error', onerror);
                        dest.removeListener('unpipe', onunpipe);
                        src.removeListener('end', onend);
                        src.removeListener('end', unpipe);
                        src.removeListener('data', ondata);
                        cleanedUp = true;
                        if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain))
                            ondrain();
                    }
                    var increasedAwaitDrain = false;
                    src.on('data', ondata);
                    function ondata(chunk) {
                        debug('ondata');
                        increasedAwaitDrain = false;
                        var ret = dest.write(chunk);
                        if (false === ret && !increasedAwaitDrain) {
                            if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
                                debug('false write response, pause', src._readableState.awaitDrain);
                                src._readableState.awaitDrain++;
                                increasedAwaitDrain = true;
                            }
                            src.pause();
                        }
                    }
                    function onerror(er) {
                        debug('onerror', er);
                        unpipe();
                        dest.removeListener('error', onerror);
                        if (EElistenerCount(dest, 'error') === 0)
                            dest.emit('error', er);
                    }
                    prependListener(dest, 'error', onerror);
                    function onclose() {
                        dest.removeListener('finish', onfinish);
                        unpipe();
                    }
                    dest.once('close', onclose);
                    function onfinish() {
                        debug('onfinish');
                        dest.removeListener('close', onclose);
                        unpipe();
                    }
                    dest.once('finish', onfinish);
                    function unpipe() {
                        debug('unpipe');
                        src.unpipe(dest);
                    }
                    dest.emit('pipe', src);
                    if (!state.flowing) {
                        debug('pipe resume');
                        src.resume();
                    }
                    return dest;
                };
                function pipeOnDrain(src) {
                    return function () {
                        var state = src._readableState;
                        debug('pipeOnDrain', state.awaitDrain);
                        if (state.awaitDrain)
                            state.awaitDrain--;
                        if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
                            state.flowing = true;
                            flow(src);
                        }
                    };
                }
                Readable.prototype.unpipe = function (dest) {
                    var state = this._readableState;
                    var unpipeInfo = { hasUnpiped: false };
                    if (state.pipesCount === 0)
                        return this;
                    if (state.pipesCount === 1) {
                        if (dest && dest !== state.pipes)
                            return this;
                        if (!dest)
                            dest = state.pipes;
                        state.pipes = null;
                        state.pipesCount = 0;
                        state.flowing = false;
                        if (dest)
                            dest.emit('unpipe', this, unpipeInfo);
                        return this;
                    }
                    if (!dest) {
                        var dests = state.pipes;
                        var len = state.pipesCount;
                        state.pipes = null;
                        state.pipesCount = 0;
                        state.flowing = false;
                        for (var i = 0; i < len; i++) {
                            dests[i].emit('unpipe', this, unpipeInfo);
                        }
                        return this;
                    }
                    var index = indexOf(state.pipes, dest);
                    if (index === -1)
                        return this;
                    state.pipes.splice(index, 1);
                    state.pipesCount -= 1;
                    if (state.pipesCount === 1)
                        state.pipes = state.pipes[0];
                    dest.emit('unpipe', this, unpipeInfo);
                    return this;
                };
                Readable.prototype.on = function (ev, fn) {
                    var res = Stream.prototype.on.call(this, ev, fn);
                    if (ev === 'data') {
                        if (this._readableState.flowing !== false)
                            this.resume();
                    } else if (ev === 'readable') {
                        var state = this._readableState;
                        if (!state.endEmitted && !state.readableListening) {
                            state.readableListening = state.needReadable = true;
                            state.emittedReadable = false;
                            if (!state.reading) {
                                pna.nextTick(nReadingNextTick, this);
                            } else if (state.length) {
                                emitReadable(this);
                            }
                        }
                    }
                    return res;
                };
                Readable.prototype.addListener = Readable.prototype.on;
                function nReadingNextTick(self) {
                    debug('readable nexttick read 0');
                    self.read(0);
                }
                Readable.prototype.resume = function () {
                    var state = this._readableState;
                    if (!state.flowing) {
                        debug('resume');
                        state.flowing = true;
                        resume(this, state);
                    }
                    return this;
                };
                function resume(stream, state) {
                    if (!state.resumeScheduled) {
                        state.resumeScheduled = true;
                        pna.nextTick(resume_, stream, state);
                    }
                }
                function resume_(stream, state) {
                    if (!state.reading) {
                        debug('resume read 0');
                        stream.read(0);
                    }
                    state.resumeScheduled = false;
                    state.awaitDrain = 0;
                    stream.emit('resume');
                    flow(stream);
                    if (state.flowing && !state.reading)
                        stream.read(0);
                }
                Readable.prototype.pause = function () {
                    debug('call pause flowing=%j', this._readableState.flowing);
                    if (false !== this._readableState.flowing) {
                        debug('pause');
                        this._readableState.flowing = false;
                        this.emit('pause');
                    }
                    return this;
                };
                function flow(stream) {
                    var state = stream._readableState;
                    debug('flow', state.flowing);
                    while (state.flowing && stream.read() !== null) {
                    }
                }
                Readable.prototype.wrap = function (stream) {
                    var _this = this;
                    var state = this._readableState;
                    var paused = false;
                    stream.on('end', function () {
                        debug('wrapped end');
                        if (state.decoder && !state.ended) {
                            var chunk = state.decoder.end();
                            if (chunk && chunk.length)
                                _this.push(chunk);
                        }
                        _this.push(null);
                    });
                    stream.on('data', function (chunk) {
                        debug('wrapped data');
                        if (state.decoder)
                            chunk = state.decoder.write(chunk);
                        if (state.objectMode && (chunk === null || chunk === undefined))
                            return;
                        else if (!state.objectMode && (!chunk || !chunk.length))
                            return;
                        var ret = _this.push(chunk);
                        if (!ret) {
                            paused = true;
                            stream.pause();
                        }
                    });
                    for (var i in stream) {
                        if (this[i] === undefined && typeof stream[i] === 'function') {
                            this[i] = function (method) {
                                return function () {
                                    return stream[method].apply(stream, arguments);
                                };
                            }(i);
                        }
                    }
                    for (var n = 0; n < kProxyEvents.length; n++) {
                        stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
                    }
                    this._read = function (n) {
                        debug('wrapped _read', n);
                        if (paused) {
                            paused = false;
                            stream.resume();
                        }
                    };
                    return this;
                };
                Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
                    enumerable: false,
                    get: function () {
                        return this._readableState.highWaterMark;
                    }
                });
                Readable._fromList = fromList;
                function fromList(n, state) {
                    if (state.length === 0)
                        return null;
                    var ret;
                    if (state.objectMode)
                        ret = state.buffer.shift();
                    else if (!n || n >= state.length) {
                        if (state.decoder)
                            ret = state.buffer.join('');
                        else if (state.buffer.length === 1)
                            ret = state.buffer.head.data;
                        else
                            ret = state.buffer.concat(state.length);
                        state.buffer.clear();
                    } else {
                        ret = fromListPartial(n, state.buffer, state.decoder);
                    }
                    return ret;
                }
                function fromListPartial(n, list, hasStrings) {
                    var ret;
                    if (n < list.head.data.length) {
                        ret = list.head.data.slice(0, n);
                        list.head.data = list.head.data.slice(n);
                    } else if (n === list.head.data.length) {
                        ret = list.shift();
                    } else {
                        ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
                    }
                    return ret;
                }
                function copyFromBufferString(n, list) {
                    var p = list.head;
                    var c = 1;
                    var ret = p.data;
                    n -= ret.length;
                    while (p = p.next) {
                        var str = p.data;
                        var nb = n > str.length ? str.length : n;
                        if (nb === str.length)
                            ret += str;
                        else
                            ret += str.slice(0, n);
                        n -= nb;
                        if (n === 0) {
                            if (nb === str.length) {
                                ++c;
                                if (p.next)
                                    list.head = p.next;
                                else
                                    list.head = list.tail = null;
                            } else {
                                list.head = p;
                                p.data = str.slice(nb);
                            }
                            break;
                        }
                        ++c;
                    }
                    list.length -= c;
                    return ret;
                }
                function copyFromBuffer(n, list) {
                    var ret = Buffer.allocUnsafe(n);
                    var p = list.head;
                    var c = 1;
                    p.data.copy(ret);
                    n -= p.data.length;
                    while (p = p.next) {
                        var buf = p.data;
                        var nb = n > buf.length ? buf.length : n;
                        buf.copy(ret, ret.length - n, 0, nb);
                        n -= nb;
                        if (n === 0) {
                            if (nb === buf.length) {
                                ++c;
                                if (p.next)
                                    list.head = p.next;
                                else
                                    list.head = list.tail = null;
                            } else {
                                list.head = p;
                                p.data = buf.slice(nb);
                            }
                            break;
                        }
                        ++c;
                    }
                    list.length -= c;
                    return ret;
                }
                function endReadable(stream) {
                    var state = stream._readableState;
                    if (state.length > 0)
                        throw new Error('"endReadable()" called on non-empty stream');
                    if (!state.endEmitted) {
                        state.ended = true;
                        pna.nextTick(endReadableNT, state, stream);
                    }
                }
                function endReadableNT(state, stream) {
                    if (!state.endEmitted && state.length === 0) {
                        state.endEmitted = true;
                        stream.readable = false;
                        stream.emit('end');
                    }
                }
                function indexOf(xs, x) {
                    for (var i = 0, l = xs.length; i < l; i++) {
                        if (xs[i] === x)
                            return i;
                    }
                    return -1;
                }
            }.call(this, _dereq_('_process'), typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {}));
        },
        {
            './_stream_duplex': 131,
            './internal/streams/BufferList': 136,
            './internal/streams/destroy': 137,
            './internal/streams/stream': 138,
            '_process': 121,
            'core-util-is': 52,
            'events': 85,
            'inherits': 103,
            'isarray': 105,
            'process-nextick-args': 120,
            'safe-buffer': 145,
            'string_decoder/': 139,
            'util': 21
        }
    ],
    134: [
        function (_dereq_, module, exports) {
            'use strict';
            module.exports = Transform;
            var Duplex = _dereq_('./_stream_duplex');
            var util = _dereq_('core-util-is');
            util.inherits = _dereq_('inherits');
            util.inherits(Transform, Duplex);
            function afterTransform(er, data) {
                var ts = this._transformState;
                ts.transforming = false;
                var cb = ts.writecb;
                if (!cb) {
                    return this.emit('error', new Error('write callback called multiple times'));
                }
                ts.writechunk = null;
                ts.writecb = null;
                if (data != null)
                    this.push(data);
                cb(er);
                var rs = this._readableState;
                rs.reading = false;
                if (rs.needReadable || rs.length < rs.highWaterMark) {
                    this._read(rs.highWaterMark);
                }
            }
            function Transform(options) {
                if (!(this instanceof Transform))
                    return new Transform(options);
                Duplex.call(this, options);
                this._transformState = {
                    afterTransform: afterTransform.bind(this),
                    needTransform: false,
                    transforming: false,
                    writecb: null,
                    writechunk: null,
                    writeencoding: null
                };
                this._readableState.needReadable = true;
                this._readableState.sync = false;
                if (options) {
                    if (typeof options.transform === 'function')
                        this._transform = options.transform;
                    if (typeof options.flush === 'function')
                        this._flush = options.flush;
                }
                this.on('prefinish', prefinish);
            }
            function prefinish() {
                var _this = this;
                if (typeof this._flush === 'function') {
                    this._flush(function (er, data) {
                        done(_this, er, data);
                    });
                } else {
                    done(this, null, null);
                }
            }
            Transform.prototype.push = function (chunk, encoding) {
                this._transformState.needTransform = false;
                return Duplex.prototype.push.call(this, chunk, encoding);
            };
            Transform.prototype._transform = function (chunk, encoding, cb) {
                throw new Error('_transform() is not implemented');
            };
            Transform.prototype._write = function (chunk, encoding, cb) {
                var ts = this._transformState;
                ts.writecb = cb;
                ts.writechunk = chunk;
                ts.writeencoding = encoding;
                if (!ts.transforming) {
                    var rs = this._readableState;
                    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark)
                        this._read(rs.highWaterMark);
                }
            };
            Transform.prototype._read = function (n) {
                var ts = this._transformState;
                if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
                    ts.transforming = true;
                    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
                } else {
                    ts.needTransform = true;
                }
            };
            Transform.prototype._destroy = function (err, cb) {
                var _this2 = this;
                Duplex.prototype._destroy.call(this, err, function (err2) {
                    cb(err2);
                    _this2.emit('close');
                });
            };
            function done(stream, er, data) {
                if (er)
                    return stream.emit('error', er);
                if (data != null)
                    stream.push(data);
                if (stream._writableState.length)
                    throw new Error('Calling transform done when ws.length != 0');
                if (stream._transformState.transforming)
                    throw new Error('Calling transform done when still transforming');
                return stream.push(null);
            }
        },
        {
            './_stream_duplex': 131,
            'core-util-is': 52,
            'inherits': 103
        }
    ],
    135: [
        function (_dereq_, module, exports) {
            (function (process, global, setImmediate) {
                'use strict';
                var pna = _dereq_('process-nextick-args');
                module.exports = Writable;
                function WriteReq(chunk, encoding, cb) {
                    this.chunk = chunk;
                    this.encoding = encoding;
                    this.callback = cb;
                    this.next = null;
                }
                function CorkedRequest(state) {
                    var _this = this;
                    this.next = null;
                    this.entry = null;
                    this.finish = function () {
                        onCorkedFinish(_this, state);
                    };
                }
                var asyncWrite = !process.browser && [
                    'v0.10',
                    'v0.9.'
                ].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;
                var Duplex;
                Writable.WritableState = WritableState;
                var util = _dereq_('core-util-is');
                util.inherits = _dereq_('inherits');
                var internalUtil = { deprecate: _dereq_('util-deprecate') };
                var Stream = _dereq_('./internal/streams/stream');
                var Buffer = _dereq_('safe-buffer').Buffer;
                var OurUint8Array = global.Uint8Array || function () {
                };
                function _uint8ArrayToBuffer(chunk) {
                    return Buffer.from(chunk);
                }
                function _isUint8Array(obj) {
                    return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
                }
                var destroyImpl = _dereq_('./internal/streams/destroy');
                util.inherits(Writable, Stream);
                function nop() {
                }
                function WritableState(options, stream) {
                    Duplex = Duplex || _dereq_('./_stream_duplex');
                    options = options || {};
                    var isDuplex = stream instanceof Duplex;
                    this.objectMode = !!options.objectMode;
                    if (isDuplex)
                        this.objectMode = this.objectMode || !!options.writableObjectMode;
                    var hwm = options.highWaterMark;
                    var writableHwm = options.writableHighWaterMark;
                    var defaultHwm = this.objectMode ? 16 : 16 * 1024;
                    if (hwm || hwm === 0)
                        this.highWaterMark = hwm;
                    else if (isDuplex && (writableHwm || writableHwm === 0))
                        this.highWaterMark = writableHwm;
                    else
                        this.highWaterMark = defaultHwm;
                    this.highWaterMark = Math.floor(this.highWaterMark);
                    this.finalCalled = false;
                    this.needDrain = false;
                    this.ending = false;
                    this.ended = false;
                    this.finished = false;
                    this.destroyed = false;
                    var noDecode = options.decodeStrings === false;
                    this.decodeStrings = !noDecode;
                    this.defaultEncoding = options.defaultEncoding || 'utf8';
                    this.length = 0;
                    this.writing = false;
                    this.corked = 0;
                    this.sync = true;
                    this.bufferProcessing = false;
                    this.onwrite = function (er) {
                        onwrite(stream, er);
                    };
                    this.writecb = null;
                    this.writelen = 0;
                    this.bufferedRequest = null;
                    this.lastBufferedRequest = null;
                    this.pendingcb = 0;
                    this.prefinished = false;
                    this.errorEmitted = false;
                    this.bufferedRequestCount = 0;
                    this.corkedRequestsFree = new CorkedRequest(this);
                }
                WritableState.prototype.getBuffer = function getBuffer() {
                    var current = this.bufferedRequest;
                    var out = [];
                    while (current) {
                        out.push(current);
                        current = current.next;
                    }
                    return out;
                };
                (function () {
                    try {
                        Object.defineProperty(WritableState.prototype, 'buffer', {
                            get: internalUtil.deprecate(function () {
                                return this.getBuffer();
                            }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
                        });
                    } catch (_) {
                    }
                }());
                var realHasInstance;
                if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
                    realHasInstance = Function.prototype[Symbol.hasInstance];
                    Object.defineProperty(Writable, Symbol.hasInstance, {
                        value: function (object) {
                            if (realHasInstance.call(this, object))
                                return true;
                            if (this !== Writable)
                                return false;
                            return object && object._writableState instanceof WritableState;
                        }
                    });
                } else {
                    realHasInstance = function (object) {
                        return object instanceof this;
                    };
                }
                function Writable(options) {
                    Duplex = Duplex || _dereq_('./_stream_duplex');
                    if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
                        return new Writable(options);
                    }
                    this._writableState = new WritableState(options, this);
                    this.writable = true;
                    if (options) {
                        if (typeof options.write === 'function')
                            this._write = options.write;
                        if (typeof options.writev === 'function')
                            this._writev = options.writev;
                        if (typeof options.destroy === 'function')
                            this._destroy = options.destroy;
                        if (typeof options.final === 'function')
                            this._final = options.final;
                    }
                    Stream.call(this);
                }
                Writable.prototype.pipe = function () {
                    this.emit('error', new Error('Cannot pipe, not readable'));
                };
                function writeAfterEnd(stream, cb) {
                    var er = new Error('write after end');
                    stream.emit('error', er);
                    pna.nextTick(cb, er);
                }
                function validChunk(stream, state, chunk, cb) {
                    var valid = true;
                    var er = false;
                    if (chunk === null) {
                        er = new TypeError('May not write null values to stream');
                    } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
                        er = new TypeError('Invalid non-string/buffer chunk');
                    }
                    if (er) {
                        stream.emit('error', er);
                        pna.nextTick(cb, er);
                        valid = false;
                    }
                    return valid;
                }
                Writable.prototype.write = function (chunk, encoding, cb) {
                    var state = this._writableState;
                    var ret = false;
                    var isBuf = !state.objectMode && _isUint8Array(chunk);
                    if (isBuf && !Buffer.isBuffer(chunk)) {
                        chunk = _uint8ArrayToBuffer(chunk);
                    }
                    if (typeof encoding === 'function') {
                        cb = encoding;
                        encoding = null;
                    }
                    if (isBuf)
                        encoding = 'buffer';
                    else if (!encoding)
                        encoding = state.defaultEncoding;
                    if (typeof cb !== 'function')
                        cb = nop;
                    if (state.ended)
                        writeAfterEnd(this, cb);
                    else if (isBuf || validChunk(this, state, chunk, cb)) {
                        state.pendingcb++;
                        ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
                    }
                    return ret;
                };
                Writable.prototype.cork = function () {
                    var state = this._writableState;
                    state.corked++;
                };
                Writable.prototype.uncork = function () {
                    var state = this._writableState;
                    if (state.corked) {
                        state.corked--;
                        if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest)
                            clearBuffer(this, state);
                    }
                };
                Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
                    if (typeof encoding === 'string')
                        encoding = encoding.toLowerCase();
                    if (!([
                            'hex',
                            'utf8',
                            'utf-8',
                            'ascii',
                            'binary',
                            'base64',
                            'ucs2',
                            'ucs-2',
                            'utf16le',
                            'utf-16le',
                            'raw'
                        ].indexOf((encoding + '').toLowerCase()) > -1))
                        throw new TypeError('Unknown encoding: ' + encoding);
                    this._writableState.defaultEncoding = encoding;
                    return this;
                };
                function decodeChunk(state, chunk, encoding) {
                    if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
                        chunk = Buffer.from(chunk, encoding);
                    }
                    return chunk;
                }
                Object.defineProperty(Writable.prototype, 'writableHighWaterMark', {
                    enumerable: false,
                    get: function () {
                        return this._writableState.highWaterMark;
                    }
                });
                function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
                    if (!isBuf) {
                        var newChunk = decodeChunk(state, chunk, encoding);
                        if (chunk !== newChunk) {
                            isBuf = true;
                            encoding = 'buffer';
                            chunk = newChunk;
                        }
                    }
                    var len = state.objectMode ? 1 : chunk.length;
                    state.length += len;
                    var ret = state.length < state.highWaterMark;
                    if (!ret)
                        state.needDrain = true;
                    if (state.writing || state.corked) {
                        var last = state.lastBufferedRequest;
                        state.lastBufferedRequest = {
                            chunk: chunk,
                            encoding: encoding,
                            isBuf: isBuf,
                            callback: cb,
                            next: null
                        };
                        if (last) {
                            last.next = state.lastBufferedRequest;
                        } else {
                            state.bufferedRequest = state.lastBufferedRequest;
                        }
                        state.bufferedRequestCount += 1;
                    } else {
                        doWrite(stream, state, false, len, chunk, encoding, cb);
                    }
                    return ret;
                }
                function doWrite(stream, state, writev, len, chunk, encoding, cb) {
                    state.writelen = len;
                    state.writecb = cb;
                    state.writing = true;
                    state.sync = true;
                    if (writev)
                        stream._writev(chunk, state.onwrite);
                    else
                        stream._write(chunk, encoding, state.onwrite);
                    state.sync = false;
                }
                function onwriteError(stream, state, sync, er, cb) {
                    --state.pendingcb;
                    if (sync) {
                        pna.nextTick(cb, er);
                        pna.nextTick(finishMaybe, stream, state);
                        stream._writableState.errorEmitted = true;
                        stream.emit('error', er);
                    } else {
                        cb(er);
                        stream._writableState.errorEmitted = true;
                        stream.emit('error', er);
                        finishMaybe(stream, state);
                    }
                }
                function onwriteStateUpdate(state) {
                    state.writing = false;
                    state.writecb = null;
                    state.length -= state.writelen;
                    state.writelen = 0;
                }
                function onwrite(stream, er) {
                    var state = stream._writableState;
                    var sync = state.sync;
                    var cb = state.writecb;
                    onwriteStateUpdate(state);
                    if (er)
                        onwriteError(stream, state, sync, er, cb);
                    else {
                        var finished = needFinish(state);
                        if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
                            clearBuffer(stream, state);
                        }
                        if (sync) {
                            asyncWrite(afterWrite, stream, state, finished, cb);
                        } else {
                            afterWrite(stream, state, finished, cb);
                        }
                    }
                }
                function afterWrite(stream, state, finished, cb) {
                    if (!finished)
                        onwriteDrain(stream, state);
                    state.pendingcb--;
                    cb();
                    finishMaybe(stream, state);
                }
                function onwriteDrain(stream, state) {
                    if (state.length === 0 && state.needDrain) {
                        state.needDrain = false;
                        stream.emit('drain');
                    }
                }
                function clearBuffer(stream, state) {
                    state.bufferProcessing = true;
                    var entry = state.bufferedRequest;
                    if (stream._writev && entry && entry.next) {
                        var l = state.bufferedRequestCount;
                        var buffer = new Array(l);
                        var holder = state.corkedRequestsFree;
                        holder.entry = entry;
                        var count = 0;
                        var allBuffers = true;
                        while (entry) {
                            buffer[count] = entry;
                            if (!entry.isBuf)
                                allBuffers = false;
                            entry = entry.next;
                            count += 1;
                        }
                        buffer.allBuffers = allBuffers;
                        doWrite(stream, state, true, state.length, buffer, '', holder.finish);
                        state.pendingcb++;
                        state.lastBufferedRequest = null;
                        if (holder.next) {
                            state.corkedRequestsFree = holder.next;
                            holder.next = null;
                        } else {
                            state.corkedRequestsFree = new CorkedRequest(state);
                        }
                        state.bufferedRequestCount = 0;
                    } else {
                        while (entry) {
                            var chunk = entry.chunk;
                            var encoding = entry.encoding;
                            var cb = entry.callback;
                            var len = state.objectMode ? 1 : chunk.length;
                            doWrite(stream, state, false, len, chunk, encoding, cb);
                            entry = entry.next;
                            state.bufferedRequestCount--;
                            if (state.writing) {
                                break;
                            }
                        }
                        if (entry === null)
                            state.lastBufferedRequest = null;
                    }
                    state.bufferedRequest = entry;
                    state.bufferProcessing = false;
                }
                Writable.prototype._write = function (chunk, encoding, cb) {
                    cb(new Error('_write() is not implemented'));
                };
                Writable.prototype._writev = null;
                Writable.prototype.end = function (chunk, encoding, cb) {
                    var state = this._writableState;
                    if (typeof chunk === 'function') {
                        cb = chunk;
                        chunk = null;
                        encoding = null;
                    } else if (typeof encoding === 'function') {
                        cb = encoding;
                        encoding = null;
                    }
                    if (chunk !== null && chunk !== undefined)
                        this.write(chunk, encoding);
                    if (state.corked) {
                        state.corked = 1;
                        this.uncork();
                    }
                    if (!state.ending && !state.finished)
                        endWritable(this, state, cb);
                };
                function needFinish(state) {
                    return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
                }
                function callFinal(stream, state) {
                    stream._final(function (err) {
                        state.pendingcb--;
                        if (err) {
                            stream.emit('error', err);
                        }
                        state.prefinished = true;
                        stream.emit('prefinish');
                        finishMaybe(stream, state);
                    });
                }
                function prefinish(stream, state) {
                    if (!state.prefinished && !state.finalCalled) {
                        if (typeof stream._final === 'function') {
                            state.pendingcb++;
                            state.finalCalled = true;
                            pna.nextTick(callFinal, stream, state);
                        } else {
                            state.prefinished = true;
                            stream.emit('prefinish');
                        }
                    }
                }
                function finishMaybe(stream, state) {
                    var need = needFinish(state);
                    if (need) {
                        prefinish(stream, state);
                        if (state.pendingcb === 0) {
                            state.finished = true;
                            stream.emit('finish');
                        }
                    }
                    return need;
                }
                function endWritable(stream, state, cb) {
                    state.ending = true;
                    finishMaybe(stream, state);
                    if (cb) {
                        if (state.finished)
                            pna.nextTick(cb);
                        else
                            stream.once('finish', cb);
                    }
                    state.ended = true;
                    stream.writable = false;
                }
                function onCorkedFinish(corkReq, state, err) {
                    var entry = corkReq.entry;
                    corkReq.entry = null;
                    while (entry) {
                        var cb = entry.callback;
                        state.pendingcb--;
                        cb(err);
                        entry = entry.next;
                    }
                    if (state.corkedRequestsFree) {
                        state.corkedRequestsFree.next = corkReq;
                    } else {
                        state.corkedRequestsFree = corkReq;
                    }
                }
                Object.defineProperty(Writable.prototype, 'destroyed', {
                    get: function () {
                        if (this._writableState === undefined) {
                            return false;
                        }
                        return this._writableState.destroyed;
                    },
                    set: function (value) {
                        if (!this._writableState) {
                            return;
                        }
                        this._writableState.destroyed = value;
                    }
                });
                Writable.prototype.destroy = destroyImpl.destroy;
                Writable.prototype._undestroy = destroyImpl.undestroy;
                Writable.prototype._destroy = function (err, cb) {
                    this.end();
                    cb(err);
                };
            }.call(this, _dereq_('_process'), typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {}, _dereq_('timers').setImmediate));
        },
        {
            './_stream_duplex': 131,
            './internal/streams/destroy': 137,
            './internal/streams/stream': 138,
            '_process': 121,
            'core-util-is': 52,
            'inherits': 103,
            'process-nextick-args': 120,
            'safe-buffer': 145,
            'timers': 238,
            'util-deprecate': 246
        }
    ],
    136: [
        function (_dereq_, module, exports) {
            'use strict';
            function _classCallCheck(instance, Constructor) {
                if (!(instance instanceof Constructor)) {
                    throw new TypeError('Cannot call a class as a function');
                }
            }
            var Buffer = _dereq_('safe-buffer').Buffer;
            var util = _dereq_('util');
            function copyBuffer(src, target, offset) {
                src.copy(target, offset);
            }
            module.exports = function () {
                function BufferList() {
                    _classCallCheck(this, BufferList);
                    this.head = null;
                    this.tail = null;
                    this.length = 0;
                }
                BufferList.prototype.push = function push(v) {
                    var entry = {
                        data: v,
                        next: null
                    };
                    if (this.length > 0)
                        this.tail.next = entry;
                    else
                        this.head = entry;
                    this.tail = entry;
                    ++this.length;
                };
                BufferList.prototype.unshift = function unshift(v) {
                    var entry = {
                        data: v,
                        next: this.head
                    };
                    if (this.length === 0)
                        this.tail = entry;
                    this.head = entry;
                    ++this.length;
                };
                BufferList.prototype.shift = function shift() {
                    if (this.length === 0)
                        return;
                    var ret = this.head.data;
                    if (this.length === 1)
                        this.head = this.tail = null;
                    else
                        this.head = this.head.next;
                    --this.length;
                    return ret;
                };
                BufferList.prototype.clear = function clear() {
                    this.head = this.tail = null;
                    this.length = 0;
                };
                BufferList.prototype.join = function join(s) {
                    if (this.length === 0)
                        return '';
                    var p = this.head;
                    var ret = '' + p.data;
                    while (p = p.next) {
                        ret += s + p.data;
                    }
                    return ret;
                };
                BufferList.prototype.concat = function concat(n) {
                    if (this.length === 0)
                        return Buffer.alloc(0);
                    if (this.length === 1)
                        return this.head.data;
                    var ret = Buffer.allocUnsafe(n >>> 0);
                    var p = this.head;
                    var i = 0;
                    while (p) {
                        copyBuffer(p.data, ret, i);
                        i += p.data.length;
                        p = p.next;
                    }
                    return ret;
                };
                return BufferList;
            }();
            if (util && util.inspect && util.inspect.custom) {
                module.exports.prototype[util.inspect.custom] = function () {
                    var obj = util.inspect({ length: this.length });
                    return this.constructor.name + ' ' + obj;
                };
            }
        },
        {
            'safe-buffer': 145,
            'util': 21
        }
    ],
    137: [
        function (_dereq_, module, exports) {
            'use strict';
            var pna = _dereq_('process-nextick-args');
            function destroy(err, cb) {
                var _this = this;
                var readableDestroyed = this._readableState && this._readableState.destroyed;
                var writableDestroyed = this._writableState && this._writableState.destroyed;
                if (readableDestroyed || writableDestroyed) {
                    if (cb) {
                        cb(err);
                    } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {
                        pna.nextTick(emitErrorNT, this, err);
                    }
                    return this;
                }
                if (this._readableState) {
                    this._readableState.destroyed = true;
                }
                if (this._writableState) {
                    this._writableState.destroyed = true;
                }
                this._destroy(err || null, function (err) {
                    if (!cb && err) {
                        pna.nextTick(emitErrorNT, _this, err);
                        if (_this._writableState) {
                            _this._writableState.errorEmitted = true;
                        }
                    } else if (cb) {
                        cb(err);
                    }
                });
                return this;
            }
            function undestroy() {
                if (this._readableState) {
                    this._readableState.destroyed = false;
                    this._readableState.reading = false;
                    this._readableState.ended = false;
                    this._readableState.endEmitted = false;
                }
                if (this._writableState) {
                    this._writableState.destroyed = false;
                    this._writableState.ended = false;
                    this._writableState.ending = false;
                    this._writableState.finished = false;
                    this._writableState.errorEmitted = false;
                }
            }
            function emitErrorNT(self, err) {
                self.emit('error', err);
            }
            module.exports = {
                destroy: destroy,
                undestroy: undestroy
            };
        },
        { 'process-nextick-args': 120 }
    ],
    138: [
        function (_dereq_, module, exports) {
            module.exports = _dereq_('events').EventEmitter;
        },
        { 'events': 85 }
    ],
    139: [
        function (_dereq_, module, exports) {
            'use strict';
            var Buffer = _dereq_('safe-buffer').Buffer;
            var isEncoding = Buffer.isEncoding || function (encoding) {
                encoding = '' + encoding;
                switch (encoding && encoding.toLowerCase()) {
                case 'hex':
                case 'utf8':
                case 'utf-8':
                case 'ascii':
                case 'binary':
                case 'base64':
                case 'ucs2':
                case 'ucs-2':
                case 'utf16le':
                case 'utf-16le':
                case 'raw':
                    return true;
                default:
                    return false;
                }
            };
            function _normalizeEncoding(enc) {
                if (!enc)
                    return 'utf8';
                var retried;
                while (true) {
                    switch (enc) {
                    case 'utf8':
                    case 'utf-8':
                        return 'utf8';
                    case 'ucs2':
                    case 'ucs-2':
                    case 'utf16le':
                    case 'utf-16le':
                        return 'utf16le';
                    case 'latin1':
                    case 'binary':
                        return 'latin1';
                    case 'base64':
                    case 'ascii':
                    case 'hex':
                        return enc;
                    default:
                        if (retried)
                            return;
                        enc = ('' + enc).toLowerCase();
                        retried = true;
                    }
                }
            }
            ;
            function normalizeEncoding(enc) {
                var nenc = _normalizeEncoding(enc);
                if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc)))
                    throw new Error('Unknown encoding: ' + enc);
                return nenc || enc;
            }
            exports.StringDecoder = StringDecoder;
            function StringDecoder(encoding) {
                this.encoding = normalizeEncoding(encoding);
                var nb;
                switch (this.encoding) {
                case 'utf16le':
                    this.text = utf16Text;
                    this.end = utf16End;
                    nb = 4;
                    break;
                case 'utf8':
                    this.fillLast = utf8FillLast;
                    nb = 4;
                    break;
                case 'base64':
                    this.text = base64Text;
                    this.end = base64End;
                    nb = 3;
                    break;
                default:
                    this.write = simpleWrite;
                    this.end = simpleEnd;
                    return;
                }
                this.lastNeed = 0;
                this.lastTotal = 0;
                this.lastChar = Buffer.allocUnsafe(nb);
            }
            StringDecoder.prototype.write = function (buf) {
                if (buf.length === 0)
                    return '';
                var r;
                var i;
                if (this.lastNeed) {
                    r = this.fillLast(buf);
                    if (r === undefined)
                        return '';
                    i = this.lastNeed;
                    this.lastNeed = 0;
                } else {
                    i = 0;
                }
                if (i < buf.length)
                    return r ? r + this.text(buf, i) : this.text(buf, i);
                return r || '';
            };
            StringDecoder.prototype.end = utf8End;
            StringDecoder.prototype.text = utf8Text;
            StringDecoder.prototype.fillLast = function (buf) {
                if (this.lastNeed <= buf.length) {
                    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
                    return this.lastChar.toString(this.encoding, 0, this.lastTotal);
                }
                buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
                this.lastNeed -= buf.length;
            };
            function utf8CheckByte(byte) {
                if (byte <= 127)
                    return 0;
                else if (byte >> 5 === 6)
                    return 2;
                else if (byte >> 4 === 14)
                    return 3;
                else if (byte >> 3 === 30)
                    return 4;
                return byte >> 6 === 2 ? -1 : -2;
            }
            function utf8CheckIncomplete(self, buf, i) {
                var j = buf.length - 1;
                if (j < i)
                    return 0;
                var nb = utf8CheckByte(buf[j]);
                if (nb >= 0) {
                    if (nb > 0)
                        self.lastNeed = nb - 1;
                    return nb;
                }
                if (--j < i || nb === -2)
                    return 0;
                nb = utf8CheckByte(buf[j]);
                if (nb >= 0) {
                    if (nb > 0)
                        self.lastNeed = nb - 2;
                    return nb;
                }
                if (--j < i || nb === -2)
                    return 0;
                nb = utf8CheckByte(buf[j]);
                if (nb >= 0) {
                    if (nb > 0) {
                        if (nb === 2)
                            nb = 0;
                        else
                            self.lastNeed = nb - 3;
                    }
                    return nb;
                }
                return 0;
            }
            function utf8CheckExtraBytes(self, buf, p) {
                if ((buf[0] & 192) !== 128) {
                    self.lastNeed = 0;
                    return '\uFFFD';
                }
                if (self.lastNeed > 1 && buf.length > 1) {
                    if ((buf[1] & 192) !== 128) {
                        self.lastNeed = 1;
                        return '\uFFFD';
                    }
                    if (self.lastNeed > 2 && buf.length > 2) {
                        if ((buf[2] & 192) !== 128) {
                            self.lastNeed = 2;
                            return '\uFFFD';
                        }
                    }
                }
            }
            function utf8FillLast(buf) {
                var p = this.lastTotal - this.lastNeed;
                var r = utf8CheckExtraBytes(this, buf, p);
                if (r !== undefined)
                    return r;
                if (this.lastNeed <= buf.length) {
                    buf.copy(this.lastChar, p, 0, this.lastNeed);
                    return this.lastChar.toString(this.encoding, 0, this.lastTotal);
                }
                buf.copy(this.lastChar, p, 0, buf.length);
                this.lastNeed -= buf.length;
            }
            function utf8Text(buf, i) {
                var total = utf8CheckIncomplete(this, buf, i);
                if (!this.lastNeed)
                    return buf.toString('utf8', i);
                this.lastTotal = total;
                var end = buf.length - (total - this.lastNeed);
                buf.copy(this.lastChar, 0, end);
                return buf.toString('utf8', i, end);
            }
            function utf8End(buf) {
                var r = buf && buf.length ? this.write(buf) : '';
                if (this.lastNeed)
                    return r + '\uFFFD';
                return r;
            }
            function utf16Text(buf, i) {
                if ((buf.length - i) % 2 === 0) {
                    var r = buf.toString('utf16le', i);
                    if (r) {
                        var c = r.charCodeAt(r.length - 1);
                        if (c >= 55296 && c <= 56319) {
                            this.lastNeed = 2;
                            this.lastTotal = 4;
                            this.lastChar[0] = buf[buf.length - 2];
                            this.lastChar[1] = buf[buf.length - 1];
                            return r.slice(0, -1);
                        }
                    }
                    return r;
                }
                this.lastNeed = 1;
                this.lastTotal = 2;
                this.lastChar[0] = buf[buf.length - 1];
                return buf.toString('utf16le', i, buf.length - 1);
            }
            function utf16End(buf) {
                var r = buf && buf.length ? this.write(buf) : '';
                if (this.lastNeed) {
                    var end = this.lastTotal - this.lastNeed;
                    return r + this.lastChar.toString('utf16le', 0, end);
                }
                return r;
            }
            function base64Text(buf, i) {
                var n = (buf.length - i) % 3;
                if (n === 0)
                    return buf.toString('base64', i);
                this.lastNeed = 3 - n;
                this.lastTotal = 3;
                if (n === 1) {
                    this.lastChar[0] = buf[buf.length - 1];
                } else {
                    this.lastChar[0] = buf[buf.length - 2];
                    this.lastChar[1] = buf[buf.length - 1];
                }
                return buf.toString('base64', i, buf.length - n);
            }
            function base64End(buf) {
                var r = buf && buf.length ? this.write(buf) : '';
                if (this.lastNeed)
                    return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
                return r;
            }
            function simpleWrite(buf) {
                return buf.toString(this.encoding);
            }
            function simpleEnd(buf) {
                return buf && buf.length ? this.write(buf) : '';
            }
        },
        { 'safe-buffer': 145 }
    ],
    140: [
        function (_dereq_, module, exports) {
            module.exports = _dereq_('./readable').PassThrough;
        },
        { './readable': 141 }
    ],
    141: [
        function (_dereq_, module, exports) {
            exports = module.exports = _dereq_('./lib/_stream_readable.js');
            exports.Stream = exports;
            exports.Readable = exports;
            exports.Writable = _dereq_('./lib/_stream_writable.js');
            exports.Duplex = _dereq_('./lib/_stream_duplex.js');
            exports.Transform = _dereq_('./lib/_stream_transform.js');
            exports.PassThrough = _dereq_('./lib/_stream_passthrough.js');
        },
        {
            './lib/_stream_duplex.js': 131,
            './lib/_stream_passthrough.js': 132,
            './lib/_stream_readable.js': 133,
            './lib/_stream_transform.js': 134,
            './lib/_stream_writable.js': 135
        }
    ],
    142: [
        function (_dereq_, module, exports) {
            module.exports = _dereq_('./readable').Transform;
        },
        { './readable': 141 }
    ],
    143: [
        function (_dereq_, module, exports) {
            module.exports = _dereq_('./lib/_stream_writable.js');
        },
        { './lib/_stream_writable.js': 135 }
    ],
    144: [
        function (_dereq_, module, exports) {
            'use strict';
            var Buffer = _dereq_('buffer').Buffer;
            var inherits = _dereq_('inherits');
            var HashBase = _dereq_('hash-base');
            var ARRAY16 = new Array(16);
            var zl = [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                14,
                15,
                7,
                4,
                13,
                1,
                10,
                6,
                15,
                3,
                12,
                0,
                9,
                5,
                2,
                14,
                11,
                8,
                3,
                10,
                14,
                4,
                9,
                15,
                8,
                1,
                2,
                7,
                0,
                6,
                13,
                11,
                5,
                12,
                1,
                9,
                11,
                10,
                0,
                8,
                12,
                4,
                13,
                3,
                7,
                15,
                14,
                5,
                6,
                2,
                4,
                0,
                5,
                9,
                7,
                12,
                2,
                10,
                14,
                1,
                3,
                8,
                11,
                6,
                15,
                13
            ];
            var zr = [
                5,
                14,
                7,
                0,
                9,
                2,
                11,
                4,
                13,
                6,
                15,
                8,
                1,
                10,
                3,
                12,
                6,
                11,
                3,
                7,
                0,
                13,
                5,
                10,
                14,
                15,
                8,
                12,
                4,
                9,
                1,
                2,
                15,
                5,
                1,
                3,
                7,
                14,
                6,
                9,
                11,
                8,
                12,
                2,
                10,
                0,
                4,
                13,
                8,
                6,
                4,
                1,
                3,
                11,
                15,
                0,
                5,
                12,
                2,
                13,
                9,
                7,
                10,
                14,
                12,
                15,
                10,
                4,
                1,
                5,
                8,
                7,
                6,
                2,
                13,
                14,
                0,
                3,
                9,
                11
            ];
            var sl = [
                11,
                14,
                15,
                12,
                5,
                8,
                7,
                9,
                11,
                13,
                14,
                15,
                6,
                7,
                9,
                8,
                7,
                6,
                8,
                13,
                11,
                9,
                7,
                15,
                7,
                12,
                15,
                9,
                11,
                7,
                13,
                12,
                11,
                13,
                6,
                7,
                14,
                9,
                13,
                15,
                14,
                8,
                13,
                6,
                5,
                12,
                7,
                5,
                11,
                12,
                14,
                15,
                14,
                15,
                9,
                8,
                9,
                14,
                5,
                6,
                8,
                6,
                5,
                12,
                9,
                15,
                5,
                11,
                6,
                8,
                13,
                12,
                5,
                12,
                13,
                14,
                11,
                8,
                5,
                6
            ];
            var sr = [
                8,
                9,
                9,
                11,
                13,
                15,
                15,
                5,
                7,
                7,
                8,
                11,
                14,
                14,
                12,
                6,
                9,
                13,
                15,
                7,
                12,
                8,
                9,
                11,
                7,
                7,
                12,
                7,
                6,
                15,
                13,
                11,
                9,
                7,
                15,
                11,
                8,
                6,
                6,
                14,
                12,
                13,
                5,
                14,
                13,
                13,
                7,
                5,
                15,
                5,
                8,
                11,
                14,
                14,
                6,
                14,
                6,
                9,
                12,
                9,
                12,
                5,
                15,
                8,
                8,
                5,
                12,
                9,
                12,
                5,
                14,
                6,
                8,
                13,
                6,
                5,
                15,
                13,
                11,
                11
            ];
            var hl = [
                0,
                1518500249,
                1859775393,
                2400959708,
                2840853838
            ];
            var hr = [
                1352829926,
                1548603684,
                1836072691,
                2053994217,
                0
            ];
            function RIPEMD160() {
                HashBase.call(this, 64);
                this._a = 1732584193;
                this._b = 4023233417;
                this._c = 2562383102;
                this._d = 271733878;
                this._e = 3285377520;
            }
            inherits(RIPEMD160, HashBase);
            RIPEMD160.prototype._update = function () {
                var words = ARRAY16;
                for (var j = 0; j < 16; ++j)
                    words[j] = this._block.readInt32LE(j * 4);
                var al = this._a | 0;
                var bl = this._b | 0;
                var cl = this._c | 0;
                var dl = this._d | 0;
                var el = this._e | 0;
                var ar = this._a | 0;
                var br = this._b | 0;
                var cr = this._c | 0;
                var dr = this._d | 0;
                var er = this._e | 0;
                for (var i = 0; i < 80; i += 1) {
                    var tl;
                    var tr;
                    if (i < 16) {
                        tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i]);
                        tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i]);
                    } else if (i < 32) {
                        tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i]);
                        tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i]);
                    } else if (i < 48) {
                        tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i]);
                        tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i]);
                    } else if (i < 64) {
                        tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i]);
                        tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i]);
                    } else {
                        tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i]);
                        tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i]);
                    }
                    al = el;
                    el = dl;
                    dl = rotl(cl, 10);
                    cl = bl;
                    bl = tl;
                    ar = er;
                    er = dr;
                    dr = rotl(cr, 10);
                    cr = br;
                    br = tr;
                }
                var t = this._b + cl + dr | 0;
                this._b = this._c + dl + er | 0;
                this._c = this._d + el + ar | 0;
                this._d = this._e + al + br | 0;
                this._e = this._a + bl + cr | 0;
                this._a = t;
            };
            RIPEMD160.prototype._digest = function () {
                this._block[this._blockOffset++] = 128;
                if (this._blockOffset > 56) {
                    this._block.fill(0, this._blockOffset, 64);
                    this._update();
                    this._blockOffset = 0;
                }
                this._block.fill(0, this._blockOffset, 56);
                this._block.writeUInt32LE(this._length[0], 56);
                this._block.writeUInt32LE(this._length[1], 60);
                this._update();
                var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20);
                buffer.writeInt32LE(this._a, 0);
                buffer.writeInt32LE(this._b, 4);
                buffer.writeInt32LE(this._c, 8);
                buffer.writeInt32LE(this._d, 12);
                buffer.writeInt32LE(this._e, 16);
                return buffer;
            };
            function rotl(x, n) {
                return x << n | x >>> 32 - n;
            }
            function fn1(a, b, c, d, e, m, k, s) {
                return rotl(a + (b ^ c ^ d) + m + k | 0, s) + e | 0;
            }
            function fn2(a, b, c, d, e, m, k, s) {
                return rotl(a + (b & c | ~b & d) + m + k | 0, s) + e | 0;
            }
            function fn3(a, b, c, d, e, m, k, s) {
                return rotl(a + ((b | ~c) ^ d) + m + k | 0, s) + e | 0;
            }
            function fn4(a, b, c, d, e, m, k, s) {
                return rotl(a + (b & d | c & ~d) + m + k | 0, s) + e | 0;
            }
            function fn5(a, b, c, d, e, m, k, s) {
                return rotl(a + (b ^ (c | ~d)) + m + k | 0, s) + e | 0;
            }
            module.exports = RIPEMD160;
        },
        {
            'buffer': 50,
            'hash-base': 88,
            'inherits': 103
        }
    ],
    145: [
        function (_dereq_, module, exports) {
            var buffer = _dereq_('buffer');
            var Buffer = buffer.Buffer;
            function copyProps(src, dst) {
                for (var key in src) {
                    dst[key] = src[key];
                }
            }
            if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
                module.exports = buffer;
            } else {
                copyProps(buffer, exports);
                exports.Buffer = SafeBuffer;
            }
            function SafeBuffer(arg, encodingOrOffset, length) {
                return Buffer(arg, encodingOrOffset, length);
            }
            copyProps(Buffer, SafeBuffer);
            SafeBuffer.from = function (arg, encodingOrOffset, length) {
                if (typeof arg === 'number') {
                    throw new TypeError('Argument must not be a number');
                }
                return Buffer(arg, encodingOrOffset, length);
            };
            SafeBuffer.alloc = function (size, fill, encoding) {
                if (typeof size !== 'number') {
                    throw new TypeError('Argument must be a number');
                }
                var buf = Buffer(size);
                if (fill !== undefined) {
                    if (typeof encoding === 'string') {
                        buf.fill(fill, encoding);
                    } else {
                        buf.fill(fill);
                    }
                } else {
                    buf.fill(0);
                }
                return buf;
            };
            SafeBuffer.allocUnsafe = function (size) {
                if (typeof size !== 'number') {
                    throw new TypeError('Argument must be a number');
                }
                return Buffer(size);
            };
            SafeBuffer.allocUnsafeSlow = function (size) {
                if (typeof size !== 'number') {
                    throw new TypeError('Argument must be a number');
                }
                return buffer.SlowBuffer(size);
            };
        },
        { 'buffer': 50 }
    ],
    146: [
        function (_dereq_, module, exports) {
            var Buffer = _dereq_('safe-buffer').Buffer;
            function Hash(blockSize, finalSize) {
                this._block = Buffer.alloc(blockSize);
                this._finalSize = finalSize;
                this._blockSize = blockSize;
                this._len = 0;
            }
            Hash.prototype.update = function (data, enc) {
                if (typeof data === 'string') {
                    enc = enc || 'utf8';
                    data = Buffer.from(data, enc);
                }
                var block = this._block;
                var blockSize = this._blockSize;
                var length = data.length;
                var accum = this._len;
                for (var offset = 0; offset < length;) {
                    var assigned = accum % blockSize;
                    var remainder = Math.min(length - offset, blockSize - assigned);
                    for (var i = 0; i < remainder; i++) {
                        block[assigned + i] = data[offset + i];
                    }
                    accum += remainder;
                    offset += remainder;
                    if (accum % blockSize === 0) {
                        this._update(block);
                    }
                }
                this._len += length;
                return this;
            };
            Hash.prototype.digest = function (enc) {
                var rem = this._len % this._blockSize;
                this._block[rem] = 128;
                this._block.fill(0, rem + 1);
                if (rem >= this._finalSize) {
                    this._update(this._block);
                    this._block.fill(0);
                }
                var bits = this._len * 8;
                if (bits <= 4294967295) {
                    this._block.writeUInt32BE(bits, this._blockSize - 4);
                } else {
                    var lowBits = (bits & 4294967295) >>> 0;
                    var highBits = (bits - lowBits) / 4294967296;
                    this._block.writeUInt32BE(highBits, this._blockSize - 8);
                    this._block.writeUInt32BE(lowBits, this._blockSize - 4);
                }
                this._update(this._block);
                var hash = this._hash();
                return enc ? hash.toString(enc) : hash;
            };
            Hash.prototype._update = function () {
                throw new Error('_update must be implemented by subclass');
            };
            module.exports = Hash;
        },
        { 'safe-buffer': 145 }
    ],
    147: [
        function (_dereq_, module, exports) {
            var exports = module.exports = function SHA(algorithm) {
                algorithm = algorithm.toLowerCase();
                var Algorithm = exports[algorithm];
                if (!Algorithm)
                    throw new Error(algorithm + ' is not supported (we accept pull requests)');
                return new Algorithm();
            };
            exports.sha = _dereq_('./sha');
            exports.sha1 = _dereq_('./sha1');
            exports.sha224 = _dereq_('./sha224');
            exports.sha256 = _dereq_('./sha256');
            exports.sha384 = _dereq_('./sha384');
            exports.sha512 = _dereq_('./sha512');
        },
        {
            './sha': 148,
            './sha1': 149,
            './sha224': 150,
            './sha256': 151,
            './sha384': 152,
            './sha512': 153
        }
    ],
    148: [
        function (_dereq_, module, exports) {
            var inherits = _dereq_('inherits');
            var Hash = _dereq_('./hash');
            var Buffer = _dereq_('safe-buffer').Buffer;
            var K = [
                1518500249,
                1859775393,
                2400959708 | 0,
                3395469782 | 0
            ];
            var W = new Array(80);
            function Sha() {
                this.init();
                this._w = W;
                Hash.call(this, 64, 56);
            }
            inherits(Sha, Hash);
            Sha.prototype.init = function () {
                this._a = 1732584193;
                this._b = 4023233417;
                this._c = 2562383102;
                this._d = 271733878;
                this._e = 3285377520;
                return this;
            };
            function rotl5(num) {
                return num << 5 | num >>> 27;
            }
            function rotl30(num) {
                return num << 30 | num >>> 2;
            }
            function ft(s, b, c, d) {
                if (s === 0)
                    return b & c | ~b & d;
                if (s === 2)
                    return b & c | b & d | c & d;
                return b ^ c ^ d;
            }
            Sha.prototype._update = function (M) {
                var W = this._w;
                var a = this._a | 0;
                var b = this._b | 0;
                var c = this._c | 0;
                var d = this._d | 0;
                var e = this._e | 0;
                for (var i = 0; i < 16; ++i)
                    W[i] = M.readInt32BE(i * 4);
                for (; i < 80; ++i)
                    W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];
                for (var j = 0; j < 80; ++j) {
                    var s = ~~(j / 20);
                    var t = rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s] | 0;
                    e = d;
                    d = c;
                    c = rotl30(b);
                    b = a;
                    a = t;
                }
                this._a = a + this._a | 0;
                this._b = b + this._b | 0;
                this._c = c + this._c | 0;
                this._d = d + this._d | 0;
                this._e = e + this._e | 0;
            };
            Sha.prototype._hash = function () {
                var H = Buffer.allocUnsafe(20);
                H.writeInt32BE(this._a | 0, 0);
                H.writeInt32BE(this._b | 0, 4);
                H.writeInt32BE(this._c | 0, 8);
                H.writeInt32BE(this._d | 0, 12);
                H.writeInt32BE(this._e | 0, 16);
                return H;
            };
            module.exports = Sha;
        },
        {
            './hash': 146,
            'inherits': 103,
            'safe-buffer': 145
        }
    ],
    149: [
        function (_dereq_, module, exports) {
            var inherits = _dereq_('inherits');
            var Hash = _dereq_('./hash');
            var Buffer = _dereq_('safe-buffer').Buffer;
            var K = [
                1518500249,
                1859775393,
                2400959708 | 0,
                3395469782 | 0
            ];
            var W = new Array(80);
            function Sha1() {
                this.init();
                this._w = W;
                Hash.call(this, 64, 56);
            }
            inherits(Sha1, Hash);
            Sha1.prototype.init = function () {
                this._a = 1732584193;
                this._b = 4023233417;
                this._c = 2562383102;
                this._d = 271733878;
                this._e = 3285377520;
                return this;
            };
            function rotl1(num) {
                return num << 1 | num >>> 31;
            }
            function rotl5(num) {
                return num << 5 | num >>> 27;
            }
            function rotl30(num) {
                return num << 30 | num >>> 2;
            }
            function ft(s, b, c, d) {
                if (s === 0)
                    return b & c | ~b & d;
                if (s === 2)
                    return b & c | b & d | c & d;
                return b ^ c ^ d;
            }
            Sha1.prototype._update = function (M) {
                var W = this._w;
                var a = this._a | 0;
                var b = this._b | 0;
                var c = this._c | 0;
                var d = this._d | 0;
                var e = this._e | 0;
                for (var i = 0; i < 16; ++i)
                    W[i] = M.readInt32BE(i * 4);
                for (; i < 80; ++i)
                    W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]);
                for (var j = 0; j < 80; ++j) {
                    var s = ~~(j / 20);
                    var t = rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s] | 0;
                    e = d;
                    d = c;
                    c = rotl30(b);
                    b = a;
                    a = t;
                }
                this._a = a + this._a | 0;
                this._b = b + this._b | 0;
                this._c = c + this._c | 0;
                this._d = d + this._d | 0;
                this._e = e + this._e | 0;
            };
            Sha1.prototype._hash = function () {
                var H = Buffer.allocUnsafe(20);
                H.writeInt32BE(this._a | 0, 0);
                H.writeInt32BE(this._b | 0, 4);
                H.writeInt32BE(this._c | 0, 8);
                H.writeInt32BE(this._d | 0, 12);
                H.writeInt32BE(this._e | 0, 16);
                return H;
            };
            module.exports = Sha1;
        },
        {
            './hash': 146,
            'inherits': 103,
            'safe-buffer': 145
        }
    ],
    150: [
        function (_dereq_, module, exports) {
            var inherits = _dereq_('inherits');
            var Sha256 = _dereq_('./sha256');
            var Hash = _dereq_('./hash');
            var Buffer = _dereq_('safe-buffer').Buffer;
            var W = new Array(64);
            function Sha224() {
                this.init();
                this._w = W;
                Hash.call(this, 64, 56);
            }
            inherits(Sha224, Sha256);
            Sha224.prototype.init = function () {
                this._a = 3238371032;
                this._b = 914150663;
                this._c = 812702999;
                this._d = 4144912697;
                this._e = 4290775857;
                this._f = 1750603025;
                this._g = 1694076839;
                this._h = 3204075428;
                return this;
            };
            Sha224.prototype._hash = function () {
                var H = Buffer.allocUnsafe(28);
                H.writeInt32BE(this._a, 0);
                H.writeInt32BE(this._b, 4);
                H.writeInt32BE(this._c, 8);
                H.writeInt32BE(this._d, 12);
                H.writeInt32BE(this._e, 16);
                H.writeInt32BE(this._f, 20);
                H.writeInt32BE(this._g, 24);
                return H;
            };
            module.exports = Sha224;
        },
        {
            './hash': 146,
            './sha256': 151,
            'inherits': 103,
            'safe-buffer': 145
        }
    ],
    151: [
        function (_dereq_, module, exports) {
            var inherits = _dereq_('inherits');
            var Hash = _dereq_('./hash');
            var Buffer = _dereq_('safe-buffer').Buffer;
            var K = [
                1116352408,
                1899447441,
                3049323471,
                3921009573,
                961987163,
                1508970993,
                2453635748,
                2870763221,
                3624381080,
                310598401,
                607225278,
                1426881987,
                1925078388,
                2162078206,
                2614888103,
                3248222580,
                3835390401,
                4022224774,
                264347078,
                604807628,
                770255983,
                1249150122,
                1555081692,
                1996064986,
                2554220882,
                2821834349,
                2952996808,
                3210313671,
                3336571891,
                3584528711,
                113926993,
                338241895,
                666307205,
                773529912,
                1294757372,
                1396182291,
                1695183700,
                1986661051,
                2177026350,
                2456956037,
                2730485921,
                2820302411,
                3259730800,
                3345764771,
                3516065817,
                3600352804,
                4094571909,
                275423344,
                430227734,
                506948616,
                659060556,
                883997877,
                958139571,
                1322822218,
                1537002063,
                1747873779,
                1955562222,
                2024104815,
                2227730452,
                2361852424,
                2428436474,
                2756734187,
                3204031479,
                3329325298
            ];
            var W = new Array(64);
            function Sha256() {
                this.init();
                this._w = W;
                Hash.call(this, 64, 56);
            }
            inherits(Sha256, Hash);
            Sha256.prototype.init = function () {
                this._a = 1779033703;
                this._b = 3144134277;
                this._c = 1013904242;
                this._d = 2773480762;
                this._e = 1359893119;
                this._f = 2600822924;
                this._g = 528734635;
                this._h = 1541459225;
                return this;
            };
            function ch(x, y, z) {
                return z ^ x & (y ^ z);
            }
            function maj(x, y, z) {
                return x & y | z & (x | y);
            }
            function sigma0(x) {
                return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10);
            }
            function sigma1(x) {
                return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7);
            }
            function gamma0(x) {
                return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ x >>> 3;
            }
            function gamma1(x) {
                return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ x >>> 10;
            }
            Sha256.prototype._update = function (M) {
                var W = this._w;
                var a = this._a | 0;
                var b = this._b | 0;
                var c = this._c | 0;
                var d = this._d | 0;
                var e = this._e | 0;
                var f = this._f | 0;
                var g = this._g | 0;
                var h = this._h | 0;
                for (var i = 0; i < 16; ++i)
                    W[i] = M.readInt32BE(i * 4);
                for (; i < 64; ++i)
                    W[i] = gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16] | 0;
                for (var j = 0; j < 64; ++j) {
                    var T1 = h + sigma1(e) + ch(e, f, g) + K[j] + W[j] | 0;
                    var T2 = sigma0(a) + maj(a, b, c) | 0;
                    h = g;
                    g = f;
                    f = e;
                    e = d + T1 | 0;
                    d = c;
                    c = b;
                    b = a;
                    a = T1 + T2 | 0;
                }
                this._a = a + this._a | 0;
                this._b = b + this._b | 0;
                this._c = c + this._c | 0;
                this._d = d + this._d | 0;
                this._e = e + this._e | 0;
                this._f = f + this._f | 0;
                this._g = g + this._g | 0;
                this._h = h + this._h | 0;
            };
            Sha256.prototype._hash = function () {
                var H = Buffer.allocUnsafe(32);
                H.writeInt32BE(this._a, 0);
                H.writeInt32BE(this._b, 4);
                H.writeInt32BE(this._c, 8);
                H.writeInt32BE(this._d, 12);
                H.writeInt32BE(this._e, 16);
                H.writeInt32BE(this._f, 20);
                H.writeInt32BE(this._g, 24);
                H.writeInt32BE(this._h, 28);
                return H;
            };
            module.exports = Sha256;
        },
        {
            './hash': 146,
            'inherits': 103,
            'safe-buffer': 145
        }
    ],
    152: [
        function (_dereq_, module, exports) {
            var inherits = _dereq_('inherits');
            var SHA512 = _dereq_('./sha512');
            var Hash = _dereq_('./hash');
            var Buffer = _dereq_('safe-buffer').Buffer;
            var W = new Array(160);
            function Sha384() {
                this.init();
                this._w = W;
                Hash.call(this, 128, 112);
            }
            inherits(Sha384, SHA512);
            Sha384.prototype.init = function () {
                this._ah = 3418070365;
                this._bh = 1654270250;
                this._ch = 2438529370;
                this._dh = 355462360;
                this._eh = 1731405415;
                this._fh = 2394180231;
                this._gh = 3675008525;
                this._hh = 1203062813;
                this._al = 3238371032;
                this._bl = 914150663;
                this._cl = 812702999;
                this._dl = 4144912697;
                this._el = 4290775857;
                this._fl = 1750603025;
                this._gl = 1694076839;
                this._hl = 3204075428;
                return this;
            };
            Sha384.prototype._hash = function () {
                var H = Buffer.allocUnsafe(48);
                function writeInt64BE(h, l, offset) {
                    H.writeInt32BE(h, offset);
                    H.writeInt32BE(l, offset + 4);
                }
                writeInt64BE(this._ah, this._al, 0);
                writeInt64BE(this._bh, this._bl, 8);
                writeInt64BE(this._ch, this._cl, 16);
                writeInt64BE(this._dh, this._dl, 24);
                writeInt64BE(this._eh, this._el, 32);
                writeInt64BE(this._fh, this._fl, 40);
                return H;
            };
            module.exports = Sha384;
        },
        {
            './hash': 146,
            './sha512': 153,
            'inherits': 103,
            'safe-buffer': 145
        }
    ],
    153: [
        function (_dereq_, module, exports) {
            var inherits = _dereq_('inherits');
            var Hash = _dereq_('./hash');
            var Buffer = _dereq_('safe-buffer').Buffer;
            var K = [
                1116352408,
                3609767458,
                1899447441,
                602891725,
                3049323471,
                3964484399,
                3921009573,
                2173295548,
                961987163,
                4081628472,
                1508970993,
                3053834265,
                2453635748,
                2937671579,
                2870763221,
                3664609560,
                3624381080,
                2734883394,
                310598401,
                1164996542,
                607225278,
                1323610764,
                1426881987,
                3590304994,
                1925078388,
                4068182383,
                2162078206,
                991336113,
                2614888103,
                633803317,
                3248222580,
                3479774868,
                3835390401,
                2666613458,
                4022224774,
                944711139,
                264347078,
                2341262773,
                604807628,
                2007800933,
                770255983,
                1495990901,
                1249150122,
                1856431235,
                1555081692,
                3175218132,
                1996064986,
                2198950837,
                2554220882,
                3999719339,
                2821834349,
                766784016,
                2952996808,
                2566594879,
                3210313671,
                3203337956,
                3336571891,
                1034457026,
                3584528711,
                2466948901,
                113926993,
                3758326383,
                338241895,
                168717936,
                666307205,
                1188179964,
                773529912,
                1546045734,
                1294757372,
                1522805485,
                1396182291,
                2643833823,
                1695183700,
                2343527390,
                1986661051,
                1014477480,
                2177026350,
                1206759142,
                2456956037,
                344077627,
                2730485921,
                1290863460,
                2820302411,
                3158454273,
                3259730800,
                3505952657,
                3345764771,
                106217008,
                3516065817,
                3606008344,
                3600352804,
                1432725776,
                4094571909,
                1467031594,
                275423344,
                851169720,
                430227734,
                3100823752,
                506948616,
                1363258195,
                659060556,
                3750685593,
                883997877,
                3785050280,
                958139571,
                3318307427,
                1322822218,
                3812723403,
                1537002063,
                2003034995,
                1747873779,
                3602036899,
                1955562222,
                1575990012,
                2024104815,
                1125592928,
                2227730452,
                2716904306,
                2361852424,
                442776044,
                2428436474,
                593698344,
                2756734187,
                3733110249,
                3204031479,
                2999351573,
                3329325298,
                3815920427,
                3391569614,
                3928383900,
                3515267271,
                566280711,
                3940187606,
                3454069534,
                4118630271,
                4000239992,
                116418474,
                1914138554,
                174292421,
                2731055270,
                289380356,
                3203993006,
                460393269,
                320620315,
                685471733,
                587496836,
                852142971,
                1086792851,
                1017036298,
                365543100,
                1126000580,
                2618297676,
                1288033470,
                3409855158,
                1501505948,
                4234509866,
                1607167915,
                987167468,
                1816402316,
                1246189591
            ];
            var W = new Array(160);
            function Sha512() {
                this.init();
                this._w = W;
                Hash.call(this, 128, 112);
            }
            inherits(Sha512, Hash);
            Sha512.prototype.init = function () {
                this._ah = 1779033703;
                this._bh = 3144134277;
                this._ch = 1013904242;
                this._dh = 2773480762;
                this._eh = 1359893119;
                this._fh = 2600822924;
                this._gh = 528734635;
                this._hh = 1541459225;
                this._al = 4089235720;
                this._bl = 2227873595;
                this._cl = 4271175723;
                this._dl = 1595750129;
                this._el = 2917565137;
                this._fl = 725511199;
                this._gl = 4215389547;
                this._hl = 327033209;
                return this;
            };
            function Ch(x, y, z) {
                return z ^ x & (y ^ z);
            }
            function maj(x, y, z) {
                return x & y | z & (x | y);
            }
            function sigma0(x, xl) {
                return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25);
            }
            function sigma1(x, xl) {
                return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23);
            }
            function Gamma0(x, xl) {
                return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ x >>> 7;
            }
            function Gamma0l(x, xl) {
                return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25);
            }
            function Gamma1(x, xl) {
                return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ x >>> 6;
            }
            function Gamma1l(x, xl) {
                return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26);
            }
            function getCarry(a, b) {
                return a >>> 0 < b >>> 0 ? 1 : 0;
            }
            Sha512.prototype._update = function (M) {
                var W = this._w;
                var ah = this._ah | 0;
                var bh = this._bh | 0;
                var ch = this._ch | 0;
                var dh = this._dh | 0;
                var eh = this._eh | 0;
                var fh = this._fh | 0;
                var gh = this._gh | 0;
                var hh = this._hh | 0;
                var al = this._al | 0;
                var bl = this._bl | 0;
                var cl = this._cl | 0;
                var dl = this._dl | 0;
                var el = this._el | 0;
                var fl = this._fl | 0;
                var gl = this._gl | 0;
                var hl = this._hl | 0;
                for (var i = 0; i < 32; i += 2) {
                    W[i] = M.readInt32BE(i * 4);
                    W[i + 1] = M.readInt32BE(i * 4 + 4);
                }
                for (; i < 160; i += 2) {
                    var xh = W[i - 15 * 2];
                    var xl = W[i - 15 * 2 + 1];
                    var gamma0 = Gamma0(xh, xl);
                    var gamma0l = Gamma0l(xl, xh);
                    xh = W[i - 2 * 2];
                    xl = W[i - 2 * 2 + 1];
                    var gamma1 = Gamma1(xh, xl);
                    var gamma1l = Gamma1l(xl, xh);
                    var Wi7h = W[i - 7 * 2];
                    var Wi7l = W[i - 7 * 2 + 1];
                    var Wi16h = W[i - 16 * 2];
                    var Wi16l = W[i - 16 * 2 + 1];
                    var Wil = gamma0l + Wi7l | 0;
                    var Wih = gamma0 + Wi7h + getCarry(Wil, gamma0l) | 0;
                    Wil = Wil + gamma1l | 0;
                    Wih = Wih + gamma1 + getCarry(Wil, gamma1l) | 0;
                    Wil = Wil + Wi16l | 0;
                    Wih = Wih + Wi16h + getCarry(Wil, Wi16l) | 0;
                    W[i] = Wih;
                    W[i + 1] = Wil;
                }
                for (var j = 0; j < 160; j += 2) {
                    Wih = W[j];
                    Wil = W[j + 1];
                    var majh = maj(ah, bh, ch);
                    var majl = maj(al, bl, cl);
                    var sigma0h = sigma0(ah, al);
                    var sigma0l = sigma0(al, ah);
                    var sigma1h = sigma1(eh, el);
                    var sigma1l = sigma1(el, eh);
                    var Kih = K[j];
                    var Kil = K[j + 1];
                    var chh = Ch(eh, fh, gh);
                    var chl = Ch(el, fl, gl);
                    var t1l = hl + sigma1l | 0;
                    var t1h = hh + sigma1h + getCarry(t1l, hl) | 0;
                    t1l = t1l + chl | 0;
                    t1h = t1h + chh + getCarry(t1l, chl) | 0;
                    t1l = t1l + Kil | 0;
                    t1h = t1h + Kih + getCarry(t1l, Kil) | 0;
                    t1l = t1l + Wil | 0;
                    t1h = t1h + Wih + getCarry(t1l, Wil) | 0;
                    var t2l = sigma0l + majl | 0;
                    var t2h = sigma0h + majh + getCarry(t2l, sigma0l) | 0;
                    hh = gh;
                    hl = gl;
                    gh = fh;
                    gl = fl;
                    fh = eh;
                    fl = el;
                    el = dl + t1l | 0;
                    eh = dh + t1h + getCarry(el, dl) | 0;
                    dh = ch;
                    dl = cl;
                    ch = bh;
                    cl = bl;
                    bh = ah;
                    bl = al;
                    al = t1l + t2l | 0;
                    ah = t1h + t2h + getCarry(al, t1l) | 0;
                }
                this._al = this._al + al | 0;
                this._bl = this._bl + bl | 0;
                this._cl = this._cl + cl | 0;
                this._dl = this._dl + dl | 0;
                this._el = this._el + el | 0;
                this._fl = this._fl + fl | 0;
                this._gl = this._gl + gl | 0;
                this._hl = this._hl + hl | 0;
                this._ah = this._ah + ah + getCarry(this._al, al) | 0;
                this._bh = this._bh + bh + getCarry(this._bl, bl) | 0;
                this._ch = this._ch + ch + getCarry(this._cl, cl) | 0;
                this._dh = this._dh + dh + getCarry(this._dl, dl) | 0;
                this._eh = this._eh + eh + getCarry(this._el, el) | 0;
                this._fh = this._fh + fh + getCarry(this._fl, fl) | 0;
                this._gh = this._gh + gh + getCarry(this._gl, gl) | 0;
                this._hh = this._hh + hh + getCarry(this._hl, hl) | 0;
            };
            Sha512.prototype._hash = function () {
                var H = Buffer.allocUnsafe(64);
                function writeInt64BE(h, l, offset) {
                    H.writeInt32BE(h, offset);
                    H.writeInt32BE(l, offset + 4);
                }
                writeInt64BE(this._ah, this._al, 0);
                writeInt64BE(this._bh, this._bl, 8);
                writeInt64BE(this._ch, this._cl, 16);
                writeInt64BE(this._dh, this._dl, 24);
                writeInt64BE(this._eh, this._el, 32);
                writeInt64BE(this._fh, this._fl, 40);
                writeInt64BE(this._gh, this._gl, 48);
                writeInt64BE(this._hh, this._hl, 56);
                return H;
            };
            module.exports = Sha512;
        },
        {
            './hash': 146,
            'inherits': 103,
            'safe-buffer': 145
        }
    ],
    154: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const type_1 = _dereq_('./type');
            exports.assign = template((key, target, source) => target[key] = source[key]);
            exports.clone = template((key, target, source) => {
                switch (type_1.type(source[key])) {
                case 'Array':
                    return target[key] = exports.clone([], source[key]);
                case 'Object':
                    return target[key] = type_1.isObject(source[key]) ? exports.clone(source[key] instanceof Object ? {} : Object.create(null), source[key]) : source[key];
                default:
                    return target[key] = source[key];
                }
            });
            exports.extend = template((key, target, source) => {
                switch (type_1.type(source[key])) {
                case 'Array':
                    return target[key] = exports.extend([], source[key]);
                case 'Object':
                    switch (type_1.type(target[key])) {
                    case 'Object':
                        return target[key] = type_1.isObject(source[key]) ? exports.extend(target[key], source[key]) : source[key];
                    default:
                        return target[key] = type_1.isObject(source[key]) ? exports.extend(source[key] instanceof Object ? {} : Object.create(null), source[key]) : source[key];
                    }
                default:
                    return target[key] = source[key];
                }
            });
            function template(strategy) {
                return walk;
                function walk(target, ...sources) {
                    if (target === undefined || target === null) {
                        throw new TypeError(`Spica: assign: Cannot walk on ${ target }.`);
                    }
                    for (const source of sources) {
                        if (source === undefined || source === null) {
                            continue;
                        }
                        for (const key of Object.keys(Object(source))) {
                            const desc = Object.getOwnPropertyDescriptor(Object(source), key);
                            if (desc !== undefined && desc.enumerable) {
                                void strategy(key, Object(target), Object(source));
                            }
                        }
                    }
                    return Object(target);
                }
            }
        },
        { './type': 233 }
    ],
    155: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const assign_1 = _dereq_('./assign');
            const equal_1 = _dereq_('./equal');
            class Cache {
                constructor(size, callback = () => undefined, opts = {}) {
                    this.size = size;
                    this.callback = callback;
                    this.settings = {
                        ignore: {
                            delete: false,
                            clear: false
                        },
                        data: {
                            stats: [
                                [],
                                []
                            ],
                            entries: []
                        }
                    };
                    if (size > 0 === false)
                        throw new Error(`Spica: Cache: Cache size must be greater than 0.`);
                    void assign_1.extend(this.settings, opts);
                    const {stats, entries} = this.settings.data;
                    const LFU = stats[1].slice(0, size);
                    const LRU = stats[0].slice(0, size - LFU.length);
                    this.stats = {
                        LRU,
                        LFU
                    };
                    this.store = new Map(entries);
                    for (const k of [
                            ...stats[1],
                            ...stats[0]
                        ].slice(LFU.length + LRU.length)) {
                        void this.store.delete(k);
                    }
                    if (this.store.size !== LFU.length + LRU.length)
                        throw new Error(`Spica: Cache: Size of stats and entries is not matched.`);
                    if (![
                            ...LFU,
                            ...LRU
                        ].every(k => this.store.has(k)))
                        throw new Error(`Spica: Cache: Keys of stats and entries is not matched.`);
                }
                put(key, value, log = true) {
                    if (!log && this.store.has(key))
                        return void this.store.set(key, value), true;
                    if (this.access(key))
                        return void this.store.set(key, value), true;
                    const {LRU, LFU} = this.stats;
                    if (LRU.length + LFU.length === this.size && LRU.length < LFU.length) {
                        const key = LFU.pop();
                        const val = this.store.get(key);
                        void this.store.delete(key);
                        void this.callback(key, val);
                    }
                    void LRU.unshift(key);
                    void this.store.set(key, value);
                    if (LRU.length + LFU.length > this.size) {
                        const key = LRU.pop();
                        const val = this.store.get(key);
                        void this.store.delete(key);
                        void this.callback(key, val);
                    }
                    return false;
                }
                set(key, value, log) {
                    void this.put(key, value, log);
                    return value;
                }
                get(key, log = true) {
                    if (!log)
                        return this.store.get(key);
                    void this.access(key);
                    return this.store.get(key);
                }
                has(key) {
                    return this.store.has(key);
                }
                delete(key) {
                    if (!this.store.has(key))
                        return false;
                    const {LRU, LFU} = this.stats;
                    for (const stat of [
                            LFU,
                            LRU
                        ]) {
                        const index = equal_1.findIndex(key, stat);
                        if (index === -1)
                            continue;
                        const val = this.store.get(key);
                        void this.store.delete(stat.splice(index, 1)[0]);
                        if (this.settings.ignore.delete)
                            return true;
                        void this.callback(key, val);
                        return true;
                    }
                    return false;
                }
                clear() {
                    const store = this.store;
                    this.store = new Map();
                    this.stats = {
                        LRU: [],
                        LFU: []
                    };
                    if (this.settings.ignore.clear)
                        return;
                    for (const [key, val] of store) {
                        void this.callback(key, val);
                    }
                }
                [Symbol.iterator]() {
                    return this.store[Symbol.iterator]();
                }
                export() {
                    return {
                        stats: [
                            this.stats.LRU.slice(),
                            this.stats.LFU.slice()
                        ],
                        entries: [...this]
                    };
                }
                inspect() {
                    const {LRU, LFU} = this.stats;
                    return [
                        LRU.slice(),
                        LFU.slice()
                    ];
                }
                access(key) {
                    return this.accessLFU(key) || this.accessLRU(key);
                }
                accessLRU(key) {
                    if (!this.store.has(key))
                        return false;
                    const {LRU} = this.stats;
                    const index = equal_1.findIndex(key, LRU);
                    if (index === -1)
                        return false;
                    const {LFU} = this.stats;
                    void LFU.unshift(...LRU.splice(index, 1));
                    return true;
                }
                accessLFU(key) {
                    if (!this.store.has(key))
                        return false;
                    const {LFU} = this.stats;
                    const index = equal_1.findIndex(key, LFU);
                    if (index === -1)
                        return false;
                    void LFU.unshift(...LFU.splice(index, 1));
                    return true;
                }
            }
            exports.Cache = Cache;
        },
        {
            './assign': 154,
            './equal': 163
        }
    ],
    156: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const promise_1 = _dereq_('./promise');
            const future_1 = _dereq_('./future');
            const exception_1 = _dereq_('./exception');
            const maybe_1 = _dereq_('./monad/maybe');
            const either_1 = _dereq_('./monad/either');
            class Cancellation extends promise_1.AtomicPromise {
                constructor(cancelees = []) {
                    super(res => resolve = res);
                    this.alive = true;
                    this.canceled_ = false;
                    this.state = new future_1.AtomicFuture();
                    this.listeners = new Set();
                    this.register = listener => {
                        if (this.canceled_)
                            return void handler(this.reason), () => undefined;
                        if (!this.alive)
                            return () => undefined;
                        void this.listeners.add(handler);
                        return () => this.alive ? void this.listeners.delete(handler) : undefined;
                        function handler(reason) {
                            try {
                                void listener(reason);
                            } catch (reason) {
                                void exception_1.causeAsyncException(reason);
                            }
                        }
                    };
                    this.cancel = reason => {
                        if (!this.alive)
                            return;
                        this.alive = false;
                        this.canceled_ = true;
                        this.reason = reason;
                        this.state.bind(this.reason);
                        void Object.freeze(this.listeners);
                        void Object.freeze(this);
                        for (const listener of this.listeners) {
                            void listener(reason);
                        }
                    };
                    this.close = reason => {
                        if (!this.alive)
                            return;
                        this.alive = false;
                        void this.state.bind(promise_1.AtomicPromise.reject(reason));
                        void Object.freeze(this.listeners);
                        void Object.freeze(this);
                    };
                    this.promise = val => this.canceled_ ? promise_1.AtomicPromise.reject(this.reason) : promise_1.AtomicPromise.resolve(val);
                    this.maybe = val => maybe_1.Just(val).bind(val => this.canceled_ ? maybe_1.Nothing : maybe_1.Just(val));
                    this.either = val => either_1.Right(val).bind(val => this.canceled_ ? either_1.Left(this.reason) : either_1.Right(val));
                    var resolve;
                    void resolve(this.state);
                    for (const cancellee of cancelees) {
                        void cancellee.register(this.cancel);
                    }
                }
                static get [Symbol.species]() {
                    return promise_1.AtomicPromise;
                }
                get canceled() {
                    return this.canceled_;
                }
            }
            exports.Cancellation = Cancellation;
        },
        {
            './exception': 164,
            './future': 166,
            './monad/either': 171,
            './monad/maybe': 175,
            './promise': 227
        }
    ],
    157: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const exception_1 = _dereq_('./exception');
            let queue = [];
            let register = new WeakSet();
            function tick(cb, dedup = false) {
                if (dedup) {
                    if (register.has(cb))
                        return;
                    void register.add(cb);
                }
                void queue.push(cb);
                void schedule();
            }
            exports.tick = tick;
            const scheduler = Promise.resolve();
            function schedule() {
                if (queue.length !== 1)
                    return;
                void scheduler.then(run);
            }
            function run() {
                const cbs = flush();
                while (true) {
                    try {
                        while (cbs.length > 0) {
                            void cbs.shift()();
                        }
                    } catch (reason) {
                        void exception_1.causeAsyncException(reason);
                        continue;
                    }
                    return;
                }
            }
            function flush() {
                const cbs = queue;
                queue = [];
                register = new WeakSet();
                return cbs;
            }
        },
        { './exception': 164 }
    ],
    158: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const promise_1 = _dereq_('./promise');
            var clock_tick_1 = _dereq_('./clock.tick');
            exports.tick = clock_tick_1.tick;
            exports.clock = Promise.resolve();
            function wait(ms) {
                return ms === 0 ? promise_1.AtomicPromise.resolve(exports.clock) : new promise_1.AtomicPromise(resolve => void setTimeout(resolve, ms));
            }
            exports.wait = wait;
        },
        {
            './clock.tick': 157,
            './promise': 227
        }
    ],
    159: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            function compose(target, ...sources) {
                return sources.reduce((b, d) => {
                    void Object.getOwnPropertyNames(d.prototype).filter(p => !(p in b.prototype)).forEach(p => b.prototype[p] = d.prototype[p]);
                    void Object.getOwnPropertyNames(d).filter(p => !(p in b)).forEach(p => b[p] = d[p]);
                    return b;
                }, target);
            }
            exports.compose = compose;
        },
        {}
    ],
    160: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            function concat(target, source) {
                target.push(...source);
                return target;
            }
            exports.concat = concat;
        },
        {}
    ],
    161: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            exports.curry = f => f.length === 0 ? f : apply(f, []);
            function apply(f, xs) {
                return xs.length >= f.length ? f(...xs) : (...ys) => apply(f, [
                    ...xs,
                    ...ys
                ]);
            }
        },
        {}
    ],
    162: [
        function (_dereq_, module, exports) {
            'use strict';
            function __export(m) {
                for (var p in m)
                    if (!exports.hasOwnProperty(p))
                        exports[p] = m[p];
            }
            Object.defineProperty(exports, '__esModule', { value: true });
            __export(_dereq_('./monad/either'));
        },
        { './monad/either': 171 }
    ],
    163: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            function findIndex(a1, as) {
                const isNaN = a1 !== a1;
                for (let i = 0; i < as.length; ++i) {
                    const a2 = as[i];
                    if (isNaN ? a2 !== a2 : a2 === a1)
                        return i;
                }
                return -1;
            }
            exports.findIndex = findIndex;
        },
        {}
    ],
    164: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            function causeAsyncException(reason) {
                void new Promise((_, reject) => void reject(reason));
            }
            exports.causeAsyncException = causeAsyncException;
            function stringify(target) {
                try {
                    return target instanceof Error && typeof target.stack === 'string' ? target.stack : target !== undefined && target !== null && typeof target.toString === 'function' ? target + '' : Object.prototype.toString.call(target);
                } catch (reason) {
                    return stringify(reason);
                }
            }
        },
        {}
    ],
    165: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const curry_1 = _dereq_('./curry');
            function flip(f) {
                return curry_1.curry((b, a) => f.length > 1 ? f(a, b) : f(a)(b));
            }
            exports.flip = flip;
        },
        { './curry': 161 }
    ],
    166: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const promise_1 = _dereq_('./promise');
            class Future extends Promise {
                constructor() {
                    let state = true;
                    let bind;
                    super(resolve => bind = value => {
                        if (!state)
                            throw new Error(`Spica: Future: Cannot rebind a value.`);
                        state = false;
                        void resolve(value);
                        return this;
                    });
                    this.bind = bind;
                }
                static get [Symbol.species]() {
                    return Promise;
                }
            }
            exports.Future = Future;
            class AtomicFuture extends promise_1.AtomicPromise {
                constructor() {
                    let state = true;
                    let bind;
                    super(resolve => bind = value => {
                        if (!state)
                            throw new Error(`Spica: AtomicFuture: Cannot rebind a value.`);
                        state = false;
                        void resolve(value);
                        return this;
                    });
                    this.bind = bind;
                }
                static get [Symbol.species]() {
                    return promise_1.AtomicPromise;
                }
            }
            exports.AtomicFuture = AtomicFuture;
        },
        { './promise': 227 }
    ],
    167: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const concat_1 = _dereq_('./concat');
            class HNil {
                constructor() {
                    void this.NIL;
                }
                push(a) {
                    return new HCons(a, this);
                }
                extend(f) {
                    return this.push(f());
                }
                array() {
                    return [];
                }
            }
            exports.HNil = HNil;
            class HCons {
                constructor(head, tail) {
                    this.head = head;
                    this.tail = tail;
                    void this.CONS;
                }
                push(b) {
                    return new HCons(b, this);
                }
                walk(f) {
                    void f(this.head);
                    return this.tail;
                }
                modify(f) {
                    return this.tail.push(f(this.head));
                }
                extend(f) {
                    return this.push(f(this.head));
                }
                compact(f) {
                    return this.tail.modify(r => f(this.head, r));
                }
                reverse() {
                    return this.array().reduce((l, e) => l.push(e), new HNil());
                }
                tuple() {
                    return this.array();
                }
                array() {
                    return concat_1.concat([this.head], this.tail.array());
                }
            }
        },
        { './concat': 160 }
    ],
    168: [
        function (_dereq_, module, exports) {
            'use strict';
            function __export(m) {
                for (var p in m)
                    if (!exports.hasOwnProperty(p))
                        exports[p] = m[p];
            }
            Object.defineProperty(exports, '__esModule', { value: true });
            __export(_dereq_('./monad/maybe'));
        },
        { './monad/maybe': 175 }
    ],
    169: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const functor_1 = _dereq_('./functor');
            const curry_1 = _dereq_('../curry');
            class Applicative extends functor_1.Functor {
            }
            exports.Applicative = Applicative;
            (function (Applicative) {
                function ap(af, aa) {
                    return aa ? af.bind(f => aa.fmap(curry_1.curry(f))) : aa => ap(af, aa);
                }
                Applicative.ap = ap;
            }(Applicative = exports.Applicative || (exports.Applicative = {})));
        },
        {
            '../curry': 161,
            './functor': 172
        }
    ],
    170: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const monad_1 = _dereq_('./monad');
            const promise_1 = _dereq_('../promise');
            class Either extends monad_1.Monad {
                constructor(thunk) {
                    super(thunk);
                    void this.EITHER;
                }
                fmap(f) {
                    return this.bind(b => new Right(f(b)));
                }
                ap(b) {
                    return Either.ap(this, b);
                }
                bind(f) {
                    return new Either(() => {
                        const m = this.evaluate();
                        if (m instanceof Left) {
                            return m;
                        }
                        if (m instanceof Right) {
                            return f(m.extract());
                        }
                        if (m instanceof Either) {
                            return m.bind(f);
                        }
                        throw new TypeError(`Spica: Either: Invalid monad value.\n\t${ m }`);
                    });
                }
                join() {
                    return this.bind(m => m);
                }
                extract(left, right) {
                    return !right ? this.evaluate().extract(left) : this.fmap(right).extract(left);
                }
                static do(block) {
                    const iter = block();
                    let val;
                    while (true) {
                        const {
                            value: m,
                            done
                        } = iter.next(val);
                        if (done)
                            return m;
                        const r = m.extract(() => undefined, a => [a]);
                        if (!r)
                            return m;
                        val = r[0];
                    }
                }
            }
            exports.Either = Either;
            (function (Either) {
                function pure(b) {
                    return new Right(b);
                }
                Either.pure = pure;
                Either.Return = pure;
                function sequence(fm) {
                    return fm instanceof Either ? fm.extract(b => promise_1.AtomicPromise.resolve(new Left(b)), a => promise_1.AtomicPromise.resolve(a).then(Either.Return)) : fm.reduce((acc, m) => acc.bind(as => m.fmap(a => [
                        ...as,
                        a
                    ])), Either.Return([]));
                }
                Either.sequence = sequence;
            }(Either = exports.Either || (exports.Either = {})));
            class Left extends Either {
                constructor(a) {
                    super(throwCallError);
                    this.a = a;
                    void this.LEFT;
                }
                bind(_) {
                    return this;
                }
                extract(left) {
                    if (!left)
                        throw this.a;
                    return left(this.a);
                }
            }
            exports.Left = Left;
            class Right extends Either {
                constructor(b) {
                    super(throwCallError);
                    this.b = b;
                    void this.RIGHT;
                }
                bind(f) {
                    return new Either(() => f(this.extract()));
                }
                extract(_, right) {
                    return !right ? this.b : right(this.b);
                }
            }
            exports.Right = Right;
            function throwCallError() {
                throw new Error(`Spica: Either: Invalid thunk call.`);
            }
        },
        {
            '../promise': 227,
            './monad': 176
        }
    ],
    171: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const Monad = _dereq_('./either.impl');
            class Either extends Monad.Either {
                constructor() {
                    super(() => undefined);
                }
            }
            exports.Either = Either;
            function Left(a) {
                return new Monad.Left(a);
            }
            exports.Left = Left;
            function Right(b) {
                return new Monad.Right(b);
            }
            exports.Right = Right;
        },
        { './either.impl': 170 }
    ],
    172: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const lazy_1 = _dereq_('./lazy');
            class Functor extends lazy_1.Lazy {
            }
            exports.Functor = Functor;
            (function (Functor) {
                function fmap(m, f) {
                    return f ? m.fmap(f) : f => m.fmap(f);
                }
                Functor.fmap = fmap;
            }(Functor = exports.Functor || (exports.Functor = {})));
        },
        { './lazy': 173 }
    ],
    173: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            class Lazy {
                constructor(thunk) {
                    this.thunk = thunk;
                }
                evaluate() {
                    return this.memory_ = this.memory_ || this.thunk();
                }
            }
            exports.Lazy = Lazy;
        },
        {}
    ],
    174: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const monadplus_1 = _dereq_('./monadplus');
            const promise_1 = _dereq_('../promise');
            class Maybe extends monadplus_1.MonadPlus {
                constructor(thunk) {
                    super(thunk);
                    void this.MAYBE;
                }
                fmap(f) {
                    return this.bind(a => new Just(f(a)));
                }
                ap(a) {
                    return Maybe.ap(this, a);
                }
                bind(f) {
                    return new Maybe(() => {
                        const m = this.evaluate();
                        if (m instanceof Just) {
                            return f(m.extract());
                        }
                        if (m instanceof Nothing) {
                            return m;
                        }
                        if (m instanceof Maybe) {
                            return m.bind(f);
                        }
                        throw new TypeError(`Spica: Maybe: Invalid monad value.\n\t${ m }`);
                    });
                }
                guard(cond) {
                    return cond ? this : Maybe.mzero;
                }
                join() {
                    return this.bind(m => m);
                }
                extract(nothing, just) {
                    return !just ? this.evaluate().extract(nothing) : this.fmap(just).extract(nothing);
                }
                static do(block) {
                    const iter = block();
                    let val;
                    while (true) {
                        const {
                            value: m,
                            done
                        } = iter.next(val);
                        if (done)
                            return m;
                        const r = m.extract(() => undefined, a => [a]);
                        if (!r)
                            return m;
                        val = r[0];
                    }
                }
            }
            exports.Maybe = Maybe;
            (function (Maybe) {
                function pure(a) {
                    return new Just(a);
                }
                Maybe.pure = pure;
                Maybe.Return = pure;
                function sequence(fm) {
                    return fm instanceof Maybe ? fm.extract(() => promise_1.AtomicPromise.resolve(Maybe.mzero), a => promise_1.AtomicPromise.resolve(a).then(Maybe.Return)) : fm.reduce((acc, m) => acc.bind(as => m.fmap(a => [
                        ...as,
                        a
                    ])), Maybe.Return([]));
                }
                Maybe.sequence = sequence;
            }(Maybe = exports.Maybe || (exports.Maybe = {})));
            class Just extends Maybe {
                constructor(a) {
                    super(throwCallError);
                    this.a = a;
                    void this.JUST;
                }
                bind(f) {
                    return new Maybe(() => f(this.extract()));
                }
                extract(_, just) {
                    return !just ? this.a : just(this.a);
                }
            }
            exports.Just = Just;
            class Nothing extends Maybe {
                constructor() {
                    super(throwCallError);
                    void this.NOTHING;
                }
                bind(_) {
                    return this;
                }
                extract(nothing) {
                    if (!nothing)
                        throw undefined;
                    return nothing();
                }
            }
            exports.Nothing = Nothing;
            (function (Maybe) {
                Maybe.mzero = new Nothing();
                function mplus(ml, mr) {
                    return new Maybe(() => ml.fmap(() => ml).extract(() => mr));
                }
                Maybe.mplus = mplus;
            }(Maybe = exports.Maybe || (exports.Maybe = {})));
            function throwCallError() {
                throw new Error(`Spica: Maybe: Invalid thunk call.`);
            }
        },
        {
            '../promise': 227,
            './monadplus': 177
        }
    ],
    175: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const Monad = _dereq_('./maybe.impl');
            class Maybe extends Monad.Maybe {
                constructor() {
                    super(() => undefined);
                }
            }
            exports.Maybe = Maybe;
            function Just(a) {
                return new Monad.Just(a);
            }
            exports.Just = Just;
            exports.Nothing = Monad.Maybe.mzero;
        },
        { './maybe.impl': 174 }
    ],
    176: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const applicative_1 = _dereq_('./applicative');
            class Monad extends applicative_1.Applicative {
            }
            exports.Monad = Monad;
            (function (Monad) {
                function bind(m, f) {
                    return f ? m.bind(f) : f => bind(m, f);
                }
                Monad.bind = bind;
            }(Monad = exports.Monad || (exports.Monad = {})));
        },
        { './applicative': 169 }
    ],
    177: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const monad_1 = _dereq_('./monad');
            class MonadPlus extends monad_1.Monad {
            }
            exports.MonadPlus = MonadPlus;
            (function (MonadPlus) {
            }(MonadPlus = exports.MonadPlus || (exports.MonadPlus = {})));
        },
        { './monad': 176 }
    ],
    178: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('./sequence/core');
            exports.Sequence = core_1.Sequence;
            const resume_1 = _dereq_('./sequence/member/static/resume');
            const from_1 = _dereq_('./sequence/member/static/from');
            const cycle_1 = _dereq_('./sequence/member/static/cycle');
            const random_1 = _dereq_('./sequence/member/static/random');
            const concat_1 = _dereq_('./sequence/member/static/concat');
            const zip_1 = _dereq_('./sequence/member/static/zip');
            const difference_1 = _dereq_('./sequence/member/static/difference');
            const union_1 = _dereq_('./sequence/member/static/union');
            const intersect_1 = _dereq_('./sequence/member/static/intersect');
            const pure_1 = _dereq_('./sequence/member/static/pure');
            const return_1 = _dereq_('./sequence/member/static/return');
            const sequence_1 = _dereq_('./sequence/member/static/sequence');
            const mempty_1 = _dereq_('./sequence/member/static/mempty');
            const mconcat_1 = _dereq_('./sequence/member/static/mconcat');
            const mappend_1 = _dereq_('./sequence/member/static/mappend');
            const mzero_1 = _dereq_('./sequence/member/static/mzero');
            const mplus_1 = _dereq_('./sequence/member/static/mplus');
            const extract_1 = _dereq_('./sequence/member/instance/extract');
            const iterate_1 = _dereq_('./sequence/member/instance/iterate');
            const memoize_1 = _dereq_('./sequence/member/instance/memoize');
            const reduce_1 = _dereq_('./sequence/member/instance/reduce');
            const take_1 = _dereq_('./sequence/member/instance/take');
            const drop_1 = _dereq_('./sequence/member/instance/drop');
            const takeWhile_1 = _dereq_('./sequence/member/instance/takeWhile');
            const dropWhile_1 = _dereq_('./sequence/member/instance/dropWhile');
            const takeUntil_1 = _dereq_('./sequence/member/instance/takeUntil');
            const dropUntil_1 = _dereq_('./sequence/member/instance/dropUntil');
            const sort_1 = _dereq_('./sequence/member/instance/sort');
            const unique_1 = _dereq_('./sequence/member/instance/unique');
            const fmap_1 = _dereq_('./sequence/member/instance/fmap');
            const ap_1 = _dereq_('./sequence/member/instance/ap');
            const bind_1 = _dereq_('./sequence/member/instance/bind');
            const join_1 = _dereq_('./sequence/member/instance/join');
            const mapM_1 = _dereq_('./sequence/member/instance/mapM');
            const filterM_1 = _dereq_('./sequence/member/instance/filterM');
            const map_1 = _dereq_('./sequence/member/instance/map');
            const filter_1 = _dereq_('./sequence/member/instance/filter');
            const scanl_1 = _dereq_('./sequence/member/instance/scanl');
            const foldr_1 = _dereq_('./sequence/member/instance/foldr');
            const group_1 = _dereq_('./sequence/member/instance/group');
            const inits_1 = _dereq_('./sequence/member/instance/inits');
            const tails_1 = _dereq_('./sequence/member/instance/tails');
            const segs_1 = _dereq_('./sequence/member/instance/segs');
            const subsequences_1 = _dereq_('./sequence/member/instance/subsequences');
            const permutations_1 = _dereq_('./sequence/member/instance/permutations');
            const compose_1 = _dereq_('../compose');
            void compose_1.compose(core_1.Sequence, resume_1.default, from_1.default, cycle_1.default, random_1.default, concat_1.default, zip_1.default, difference_1.default, union_1.default, intersect_1.default, pure_1.default, return_1.default, sequence_1.default, mempty_1.default, mconcat_1.default, mappend_1.default, mzero_1.default, mplus_1.default, extract_1.default, iterate_1.default, memoize_1.default, reduce_1.default, take_1.default, drop_1.default, takeWhile_1.default, dropWhile_1.default, takeUntil_1.default, dropUntil_1.default, sort_1.default, unique_1.default, fmap_1.default, ap_1.default, bind_1.default, join_1.default, mapM_1.default, filterM_1.default, map_1.default, filter_1.default, scanl_1.default, foldr_1.default, group_1.default, inits_1.default, tails_1.default, segs_1.default, subsequences_1.default, permutations_1.default);
        },
        {
            '../compose': 159,
            './sequence/core': 179,
            './sequence/member/instance/ap': 180,
            './sequence/member/instance/bind': 181,
            './sequence/member/instance/drop': 182,
            './sequence/member/instance/dropUntil': 183,
            './sequence/member/instance/dropWhile': 184,
            './sequence/member/instance/extract': 185,
            './sequence/member/instance/filter': 186,
            './sequence/member/instance/filterM': 187,
            './sequence/member/instance/fmap': 188,
            './sequence/member/instance/foldr': 189,
            './sequence/member/instance/group': 190,
            './sequence/member/instance/inits': 191,
            './sequence/member/instance/iterate': 192,
            './sequence/member/instance/join': 193,
            './sequence/member/instance/map': 194,
            './sequence/member/instance/mapM': 195,
            './sequence/member/instance/memoize': 196,
            './sequence/member/instance/permutations': 197,
            './sequence/member/instance/reduce': 198,
            './sequence/member/instance/scanl': 199,
            './sequence/member/instance/segs': 200,
            './sequence/member/instance/sort': 201,
            './sequence/member/instance/subsequences': 202,
            './sequence/member/instance/tails': 203,
            './sequence/member/instance/take': 204,
            './sequence/member/instance/takeUntil': 205,
            './sequence/member/instance/takeWhile': 206,
            './sequence/member/instance/unique': 207,
            './sequence/member/static/concat': 208,
            './sequence/member/static/cycle': 209,
            './sequence/member/static/difference': 210,
            './sequence/member/static/from': 211,
            './sequence/member/static/intersect': 212,
            './sequence/member/static/mappend': 213,
            './sequence/member/static/mconcat': 214,
            './sequence/member/static/mempty': 215,
            './sequence/member/static/mplus': 216,
            './sequence/member/static/mzero': 217,
            './sequence/member/static/pure': 218,
            './sequence/member/static/random': 219,
            './sequence/member/static/resume': 220,
            './sequence/member/static/return': 221,
            './sequence/member/static/sequence': 222,
            './sequence/member/static/union': 223,
            './sequence/member/static/zip': 224
        }
    ],
    179: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const monadplus_1 = _dereq_('../monadplus');
            class Sequence extends monadplus_1.MonadPlus {
                constructor(cons) {
                    super(throwCallError);
                    this.cons = cons;
                }
                [Symbol.iterator]() {
                    let iter = () => this.iterate();
                    return {
                        next() {
                            const thunk = iter();
                            iter = Sequence.Thunk.iterator(thunk);
                            return {
                                done: !Sequence.isIterable(thunk),
                                value: Sequence.Thunk.value(thunk)
                            };
                        }
                    };
                }
            }
            exports.Sequence = Sequence;
            (function (Sequence) {
            }(Sequence = exports.Sequence || (exports.Sequence = {})));
            (function (Sequence) {
                let Data;
                (function (Data) {
                    function cons(a, z) {
                        switch (arguments.length) {
                        case 0:
                            return [];
                        case 1:
                            return [a];
                        case 2:
                            return [
                                a,
                                z
                            ];
                        default:
                            throw Sequence.Exception.invalidConsError(arguments);
                        }
                    }
                    Data.cons = cons;
                }(Data = Sequence.Data || (Sequence.Data = {})));
                let Thunk;
                (function (Thunk) {
                    function value(thunk) {
                        return thunk[0];
                    }
                    Thunk.value = value;
                    function iterator(thunk) {
                        return thunk[1];
                    }
                    Thunk.iterator = iterator;
                    function index(thunk) {
                        return thunk[2];
                    }
                    Thunk.index = index;
                }(Thunk = Sequence.Thunk || (Sequence.Thunk = {})));
                let Iterator;
                (function (Iterator) {
                    Iterator.done = () => [
                        undefined,
                        Iterator.done,
                        -1
                    ];
                    function when(thunk, caseDone, caseIterable) {
                        return Sequence.isIterable(thunk) ? caseIterable(thunk, () => when(Thunk.iterator(thunk)(), caseDone, caseIterable)) : caseDone(thunk);
                    }
                    Iterator.when = when;
                }(Iterator = Sequence.Iterator || (Sequence.Iterator = {})));
                function isIterable(thunk) {
                    return Thunk.iterator(thunk) !== Iterator.done;
                }
                Sequence.isIterable = isIterable;
                let Exception;
                (function (Exception) {
                    function invalidConsError(args) {
                        console.error(args, args.length, args[0], args[1]);
                        return new TypeError(`Spica: Sequence: Invalid parameters of cons.`);
                    }
                    Exception.invalidConsError = invalidConsError;
                    function invalidDataError(data) {
                        console.error(data);
                        return new TypeError(`Spica: Sequence: Invalid data.`);
                    }
                    Exception.invalidDataError = invalidDataError;
                    function invalidThunkError(thunk) {
                        console.error(thunk);
                        return new TypeError(`Spica: Sequence: Invalid thunk.`);
                    }
                    Exception.invalidThunkError = invalidThunkError;
                }(Exception = Sequence.Exception || (Sequence.Exception = {})));
            }(Sequence = exports.Sequence || (exports.Sequence = {})));
            function throwCallError() {
                throw new Error(`Spica: Sequence: Invalid thunk call.`);
            }
        },
        { '../monadplus': 177 }
    ],
    180: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                ap(a) {
                    return core_1.Sequence.ap(this, a);
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    181: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                bind(f) {
                    return core_1.Sequence.concat(this.fmap(f));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    182: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                drop(n) {
                    return new core_1.Sequence((iter = () => this.iterate(), cons) => core_1.Sequence.Iterator.when(iter(), () => cons(), (thunk, recur) => core_1.Sequence.Thunk.index(thunk) < n ? recur() : cons(core_1.Sequence.Thunk.value(thunk), core_1.Sequence.Thunk.iterator(thunk))));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    183: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                dropUntil(f) {
                    return new core_1.Sequence((iter = () => this.iterate(), cons) => core_1.Sequence.Iterator.when(iter(), () => cons(), (thunk, recur) => f(core_1.Sequence.Thunk.value(thunk)) ? recur() : cons(core_1.Sequence.Thunk.value(thunk), core_1.Sequence.Thunk.iterator(thunk))));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    184: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                dropWhile(f) {
                    return new core_1.Sequence((iter = () => this.iterate(), cons) => core_1.Sequence.Iterator.when(iter(), () => cons(), (thunk, recur) => f(core_1.Sequence.Thunk.value(thunk)) ? recur() : cons(core_1.Sequence.Thunk.value(thunk), core_1.Sequence.Thunk.iterator(thunk))));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    185: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            const concat_1 = _dereq_('../../../../concat');
            class default_1 extends core_1.Sequence {
                extract() {
                    const acc = [];
                    let iter = () => this.iterate();
                    while (true) {
                        const thunk = iter();
                        if (!core_1.Sequence.isIterable(thunk))
                            return acc;
                        void concat_1.concat(acc, [core_1.Sequence.Thunk.value(thunk)]);
                        iter = core_1.Sequence.Thunk.iterator(thunk);
                    }
                }
            }
            exports.default = default_1;
        },
        {
            '../../../../concat': 160,
            '../../core': 179
        }
    ],
    186: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                filter(f) {
                    return new core_1.Sequence((iter = () => this.iterate(), cons) => core_1.Sequence.Iterator.when(iter(), () => cons(), (thunk, recur) => f(core_1.Sequence.Thunk.value(thunk), core_1.Sequence.Thunk.index(thunk)) ? cons(core_1.Sequence.Thunk.value(thunk), core_1.Sequence.Thunk.iterator(thunk)) : recur()));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    187: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            const concat_1 = _dereq_('../../../../concat');
            class default_1 extends core_1.Sequence {
                filterM(f) {
                    return core_1.Sequence.from([0]).bind(() => {
                        const xs = this.extract();
                        switch (xs.length) {
                        case 0:
                            return core_1.Sequence.from([[]]);
                        default: {
                                const x = xs.shift();
                                return f(x).bind(b => b ? xs.length === 0 ? core_1.Sequence.from([[x]]) : core_1.Sequence.from(xs).filterM(f).fmap(ys => concat_1.concat([x], ys)) : xs.length === 0 ? core_1.Sequence.from([[]]) : core_1.Sequence.from(xs).filterM(f));
                            }
                        }
                    });
                }
            }
            exports.default = default_1;
        },
        {
            '../../../../concat': 160,
            '../../core': 179
        }
    ],
    188: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                fmap(f) {
                    return new core_1.Sequence((iter = () => this.iterate()) => core_1.Sequence.Iterator.when(iter(), () => core_1.Sequence.Data.cons(), thunk => core_1.Sequence.Data.cons(f(core_1.Sequence.Thunk.value(thunk)), core_1.Sequence.Thunk.iterator(thunk))));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    189: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                foldr(f, z) {
                    return new core_1.Sequence((iter = () => this.reduce().iterate()) => core_1.Sequence.Iterator.when(iter(), () => core_1.Sequence.Data.cons(z), thunk => core_1.Sequence.Data.cons(f(core_1.Sequence.Thunk.value(thunk), core_1.Sequence.resume(core_1.Sequence.Thunk.iterator(thunk)).foldr(f, z))))).bind(s => s);
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    190: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            const concat_1 = _dereq_('../../../../concat');
            class default_1 extends core_1.Sequence {
                group(f) {
                    return new core_1.Sequence(([iter, acc] = [
                        () => this.iterate(),
                        []
                    ], cons) => core_1.Sequence.Iterator.when(iter(), () => acc.length === 0 ? cons() : cons(acc), (thunk, recur) => acc.length === 0 || f(acc[0], core_1.Sequence.Thunk.value(thunk)) ? (concat_1.concat(acc, [core_1.Sequence.Thunk.value(thunk)]), recur()) : cons(acc, [
                        core_1.Sequence.Thunk.iterator(thunk),
                        concat_1.concat([], [core_1.Sequence.Thunk.value(thunk)])
                    ])));
                }
            }
            exports.default = default_1;
        },
        {
            '../../../../concat': 160,
            '../../core': 179
        }
    ],
    191: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                inits() {
                    return core_1.Sequence.mappend(core_1.Sequence.from([[]]), this.scanl((b, a) => [
                        ...b,
                        a
                    ], []).dropWhile(as => as.length === 0));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    192: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                iterate() {
                    return this.iterate_();
                }
                iterate_(z, i = 0) {
                    const data = this.cons(z, core_1.Sequence.Data.cons);
                    switch (data.length) {
                    case 0:
                        return [
                            undefined,
                            core_1.Sequence.Iterator.done,
                            -1
                        ];
                    case 1:
                        return [
                            data[0],
                            () => core_1.Sequence.Iterator.done(),
                            i
                        ];
                    case 2:
                        return [
                            data[0],
                            () => this.iterate_(data[1], i + 1),
                            i
                        ];
                    default:
                        throw core_1.Sequence.Exception.invalidDataError(data);
                    }
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    193: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                join() {
                    return core_1.Sequence.concat(this);
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    194: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                map(f) {
                    return new core_1.Sequence((iter = () => this.iterate()) => core_1.Sequence.Iterator.when(iter(), () => core_1.Sequence.Data.cons(), thunk => core_1.Sequence.Data.cons(f(core_1.Sequence.Thunk.value(thunk), core_1.Sequence.Thunk.index(thunk)), core_1.Sequence.Thunk.iterator(thunk))));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    195: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            const concat_1 = _dereq_('../../../../concat');
            class default_1 extends core_1.Sequence {
                mapM(f) {
                    return core_1.Sequence.from([0]).bind(() => {
                        const xs = this.extract();
                        switch (xs.length) {
                        case 0:
                            return core_1.Sequence.mempty;
                        default: {
                                const x = xs.shift();
                                return f(x).bind(y => xs.length === 0 ? core_1.Sequence.from([[y]]) : core_1.Sequence.from(xs).mapM(f).fmap(ys => concat_1.concat([y], ys)));
                            }
                        }
                    });
                }
            }
            exports.default = default_1;
        },
        {
            '../../../../concat': 160,
            '../../core': 179
        }
    ],
    196: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            const memories = new WeakMap();
            class default_1 extends core_1.Sequence {
                memoize() {
                    return new core_1.Sequence(([i, memo] = [
                        0,
                        memories.get(this) || memories.set(this, new Map()).get(this)
                    ], cons) => core_1.Sequence.Iterator.when(memo.get(i) || memo.set(i, i > 0 && memo.has(i - 1) ? core_1.Sequence.Thunk.iterator(memo.get(i - 1))() : this.iterate()).get(i), () => cons(), thunk => cons(core_1.Sequence.Thunk.value(thunk), [
                        i + 1,
                        memo
                    ])));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    197: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                permutations() {
                    return core_1.Sequence.from([0]).bind(() => {
                        const xs = this.extract();
                        return xs.length === 0 ? core_1.Sequence.mempty : core_1.Sequence.from([xs]);
                    }).bind(xs => core_1.Sequence.mappend(core_1.Sequence.from([xs]), perms(core_1.Sequence.from(xs), core_1.Sequence.mempty)));
                }
            }
            exports.default = default_1;
            function perms(ts, is) {
                return core_1.Sequence.Iterator.when(ts.iterate(), () => core_1.Sequence.mempty, tt => new core_1.Sequence((_, cons) => core_1.Sequence.Iterator.when(tt, () => cons(), tt => {
                    const t = core_1.Sequence.Thunk.value(tt);
                    const ts = core_1.Sequence.resume(core_1.Sequence.Thunk.iterator(tt)).memoize();
                    return cons(is.permutations().foldr((ys, r) => interleave(core_1.Sequence.from(ys), r), perms(ts, core_1.Sequence.mappend(core_1.Sequence.from([t]), is))));
                    function interleave(xs, r) {
                        return interleave_(as => as, xs, r)[1];
                    }
                    function interleave_(f, ys, r) {
                        return core_1.Sequence.Iterator.when(ys.iterate(), () => [
                            ts,
                            r
                        ], yt => {
                            const y = core_1.Sequence.Thunk.value(yt);
                            const [us, zs] = interleave_(as => f(core_1.Sequence.mappend(core_1.Sequence.from([y]), as)), core_1.Sequence.resume(core_1.Sequence.Thunk.iterator(yt)), r);
                            return [
                                core_1.Sequence.mappend(core_1.Sequence.from([y]), us),
                                core_1.Sequence.mappend(core_1.Sequence.from([f(core_1.Sequence.mappend(core_1.Sequence.from([t]), core_1.Sequence.mappend(core_1.Sequence.from([y]), us))).extract()]), zs)
                            ];
                        });
                    }
                })).bind(xs => xs));
            }
        },
        { '../../core': 179 }
    ],
    198: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                reduce() {
                    return new core_1.Sequence(([i, memo] = [
                        0,
                        new Map()
                    ], cons) => core_1.Sequence.Iterator.when(memo.get(i) || memo.set(i, i > 0 && memo.has(i - 1) ? core_1.Sequence.Thunk.iterator(memo.get(i - 1))() : this.iterate()).get(i), () => cons(), thunk => cons(core_1.Sequence.Thunk.value(thunk), [
                        i + 1,
                        memo
                    ])));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    199: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                scanl(f, z) {
                    return new core_1.Sequence(([prev, iter, i] = [
                        z,
                        () => this.iterate(),
                        0
                    ]) => core_1.Sequence.Iterator.when(iter(), () => i === 0 ? core_1.Sequence.Data.cons(z) : core_1.Sequence.Data.cons(), thunk => core_1.Sequence.Data.cons(prev = f(prev, core_1.Sequence.Thunk.value(thunk)), [
                        prev,
                        core_1.Sequence.Thunk.iterator(thunk),
                        core_1.Sequence.Thunk.index(thunk) + 1
                    ])));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    200: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            const concat_1 = _dereq_('../../../../concat');
            class default_1 extends core_1.Sequence {
                segs() {
                    return core_1.Sequence.mappend(this.foldr((a, bs) => bs.take(1).bind(b => core_1.Sequence.mappend(core_1.Sequence.from([core_1.Sequence.mappend(core_1.Sequence.from([[a]]), core_1.Sequence.from(b).map(c => concat_1.concat([a], c)))]), bs)), core_1.Sequence.from([core_1.Sequence.from([])])).bind(a => a), core_1.Sequence.from([[]]));
                }
            }
            exports.default = default_1;
        },
        {
            '../../../../concat': 160,
            '../../core': 179
        }
    ],
    201: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                sort(cmp) {
                    return core_1.Sequence.from(this.extract().sort(cmp));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    202: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            const concat_1 = _dereq_('../../../../concat');
            class default_1 extends core_1.Sequence {
                subsequences() {
                    return core_1.Sequence.mappend(core_1.Sequence.from([[]]), core_1.Sequence.from([0]).bind(() => nonEmptySubsequences(this)));
                }
            }
            exports.default = default_1;
            function nonEmptySubsequences(xs) {
                return core_1.Sequence.Iterator.when(xs.iterate(), () => core_1.Sequence.mempty, xt => core_1.Sequence.mappend(core_1.Sequence.from([[core_1.Sequence.Thunk.value(xt)]]), new core_1.Sequence((_, cons) => core_1.Sequence.Iterator.when(xt, () => cons(), xt => cons(nonEmptySubsequences(core_1.Sequence.resume(core_1.Sequence.Thunk.iterator(xt))).foldr((ys, r) => core_1.Sequence.mappend(core_1.Sequence.mappend(core_1.Sequence.from([ys]), core_1.Sequence.from([concat_1.concat([core_1.Sequence.Thunk.value(xt)], ys)])), r), core_1.Sequence.mempty)))).bind(xs => xs)));
            }
        },
        {
            '../../../../concat': 160,
            '../../core': 179
        }
    ],
    203: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                tails() {
                    return core_1.Sequence.mappend(core_1.Sequence.from(this.extract().map((_, i, as) => as.slice(i))), core_1.Sequence.from([[]]));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    204: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                take(n) {
                    return new core_1.Sequence((iter = () => this.iterate(), cons) => core_1.Sequence.Iterator.when(n > 0 ? iter() : core_1.Sequence.Iterator.done(), () => cons(), thunk => core_1.Sequence.Thunk.index(thunk) + 1 < n ? cons(core_1.Sequence.Thunk.value(thunk), core_1.Sequence.Thunk.iterator(thunk)) : cons(core_1.Sequence.Thunk.value(thunk))));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    205: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                takeUntil(f) {
                    return new core_1.Sequence((iter = () => this.iterate(), cons) => core_1.Sequence.Iterator.when(iter(), () => cons(), thunk => f(core_1.Sequence.Thunk.value(thunk)) ? cons(core_1.Sequence.Thunk.value(thunk)) : cons(core_1.Sequence.Thunk.value(thunk), core_1.Sequence.Thunk.iterator(thunk))));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    206: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                takeWhile(f) {
                    return new core_1.Sequence((iter = () => this.iterate(), cons) => core_1.Sequence.Iterator.when(iter(), () => cons(), thunk => f(core_1.Sequence.Thunk.value(thunk)) ? cons(core_1.Sequence.Thunk.value(thunk), core_1.Sequence.Thunk.iterator(thunk)) : cons()));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    207: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                unique() {
                    const memory = new Set();
                    return this.filter(a => !memory.has(a) && !!memory.add(a));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    208: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                static concat(as) {
                    return new core_1.Sequence(([ai, bi] = [
                        () => as.iterate(),
                        core_1.Sequence.Iterator.done
                    ], cons) => core_1.Sequence.Iterator.when(ai(), () => cons(), (at, ar) => (bi = bi === core_1.Sequence.Iterator.done ? () => core_1.Sequence.Thunk.value(at).iterate() : bi, core_1.Sequence.Iterator.when(bi(), () => (bi = core_1.Sequence.Iterator.done, ar()), bt => cons(core_1.Sequence.Thunk.value(bt), [
                        () => at,
                        core_1.Sequence.Thunk.iterator(bt)
                    ])))));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    209: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                static cycle(as) {
                    return new core_1.Sequence(function cycle([iter, i] = [
                        as[Symbol.iterator](),
                        0
                    ], cons) {
                        const result = iter.next();
                        return result.done ? cycle([
                            as[Symbol.iterator](),
                            i + 1
                        ], cons) : cons(result.value, [
                            iter,
                            i + 1
                        ]);
                    }).reduce();
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    210: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                static difference(a, b, cmp) {
                    return new core_1.Sequence(([ai, bi] = [
                        () => a.iterate(),
                        () => b.iterate()
                    ], cons) => core_1.Sequence.Iterator.when(ai(), () => core_1.Sequence.Iterator.when(bi(), () => cons(), bt => cons(core_1.Sequence.Thunk.value(bt), [
                        core_1.Sequence.Iterator.done,
                        core_1.Sequence.Thunk.iterator(bt)
                    ])), (at, ar) => core_1.Sequence.Iterator.when(bi(), () => cons(core_1.Sequence.Thunk.value(at), [
                        core_1.Sequence.Thunk.iterator(at),
                        core_1.Sequence.Iterator.done
                    ]), bt => {
                        const ord = cmp(core_1.Sequence.Thunk.value(at), core_1.Sequence.Thunk.value(bt));
                        if (ord < 0)
                            return cons(core_1.Sequence.Thunk.value(at), [
                                core_1.Sequence.Thunk.iterator(at),
                                () => bt
                            ]);
                        if (ord > 0)
                            return cons(core_1.Sequence.Thunk.value(bt), [
                                () => at,
                                core_1.Sequence.Thunk.iterator(bt)
                            ]);
                        return bi = () => core_1.Sequence.Thunk.iterator(bt)(), ar();
                    })));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    211: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                static from(as) {
                    return new core_1.Sequence(([iter, i] = [
                        as[Symbol.iterator](),
                        0
                    ], cons) => {
                        const result = iter.next();
                        return result.done ? cons() : cons(result.value, [
                            iter,
                            i + 1
                        ]);
                    }).reduce();
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    212: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                static intersect(a, b, cmp) {
                    return new core_1.Sequence(([ai, bi] = [
                        () => a.iterate(),
                        () => b.iterate()
                    ], cons) => core_1.Sequence.Iterator.when(ai(), () => cons(), (at, ar) => core_1.Sequence.Iterator.when(bi(), () => cons(), (bt, br) => {
                        const ord = cmp(core_1.Sequence.Thunk.value(at), core_1.Sequence.Thunk.value(bt));
                        if (ord < 0)
                            return bi = () => bt, ar();
                        if (ord > 0)
                            return br();
                        return cons(core_1.Sequence.Thunk.value(at), [
                            core_1.Sequence.Thunk.iterator(at),
                            core_1.Sequence.Thunk.iterator(bt)
                        ]);
                    })));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    213: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                static mappend(l, r) {
                    return core_1.Sequence.mconcat([
                        l,
                        r
                    ]);
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    214: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                static mconcat(as) {
                    return [...as].reduce((a, b) => mconcat(a, b), core_1.Sequence.mempty);
                }
            }
            exports.default = default_1;
            function mconcat(a, b) {
                return new core_1.Sequence(([ai, bi] = [
                    () => a.iterate(),
                    () => b.iterate()
                ], cons) => core_1.Sequence.Iterator.when(ai(), () => core_1.Sequence.Iterator.when(bi(), () => cons(), bt => cons(core_1.Sequence.Thunk.value(bt), [
                    core_1.Sequence.Iterator.done,
                    core_1.Sequence.Thunk.iterator(bt)
                ])), at => cons(core_1.Sequence.Thunk.value(at), [
                    core_1.Sequence.Thunk.iterator(at),
                    bi
                ])));
            }
        },
        { '../../core': 179 }
    ],
    215: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
            }
            default_1.mempty = new core_1.Sequence((_, cons) => cons());
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    216: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
            }
            default_1.mplus = core_1.Sequence.mappend;
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    217: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
            }
            default_1.mzero = core_1.Sequence.mempty;
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    218: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                static pure(a) {
                    return new core_1.Sequence((_, cons) => cons(a));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    219: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                static random(p = () => Math.random()) {
                    return typeof p === 'function' ? core_1.Sequence.from(new core_1.Sequence((_, cons) => cons(p(), _))) : this.random().map(r => p[r * p.length | 0]);
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    220: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                static resume(iterator) {
                    return new core_1.Sequence((iter = iterator, cons) => core_1.Sequence.Iterator.when(iter(), () => cons(), thunk => cons(core_1.Sequence.Thunk.value(thunk), core_1.Sequence.Thunk.iterator(thunk))));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    221: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                static Return(a) {
                    return new core_1.Sequence((_, cons) => cons(a));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    222: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                static sequence(ms) {
                    return ms.reduce((acc, m) => acc.fmap(bs => core_1.Sequence.mappend(bs, m)), core_1.Sequence.Return(core_1.Sequence.from([])));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    223: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                static union(a, b, cmp) {
                    return new core_1.Sequence(([ai, bi] = [
                        () => a.iterate(),
                        () => b.iterate()
                    ], cons) => core_1.Sequence.Iterator.when(ai(), () => core_1.Sequence.Iterator.when(bi(), () => cons(), bt => cons(core_1.Sequence.Thunk.value(bt), [
                        core_1.Sequence.Iterator.done,
                        core_1.Sequence.Thunk.iterator(bt)
                    ])), at => core_1.Sequence.Iterator.when(bi(), () => cons(core_1.Sequence.Thunk.value(at), [
                        core_1.Sequence.Thunk.iterator(at),
                        core_1.Sequence.Iterator.done
                    ]), bt => {
                        const ord = cmp(core_1.Sequence.Thunk.value(at), core_1.Sequence.Thunk.value(bt));
                        if (ord < 0)
                            return cons(core_1.Sequence.Thunk.value(at), [
                                core_1.Sequence.Thunk.iterator(at),
                                () => bt
                            ]);
                        if (ord > 0)
                            return cons(core_1.Sequence.Thunk.value(bt), [
                                () => at,
                                core_1.Sequence.Thunk.iterator(bt)
                            ]);
                        return cons(core_1.Sequence.Thunk.value(at), [
                            core_1.Sequence.Thunk.iterator(at),
                            core_1.Sequence.Thunk.iterator(bt)
                        ]);
                    })));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    224: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const core_1 = _dereq_('../../core');
            class default_1 extends core_1.Sequence {
                static zip(a, b) {
                    return new core_1.Sequence(([ai, bi] = [
                        () => a.iterate(),
                        () => b.iterate()
                    ], cons) => core_1.Sequence.Iterator.when(ai(), () => cons(), at => core_1.Sequence.Iterator.when(bi(), () => cons(), bt => cons([
                        core_1.Sequence.Thunk.value(at),
                        core_1.Sequence.Thunk.value(bt)
                    ], [
                        core_1.Sequence.Thunk.iterator(at),
                        core_1.Sequence.Thunk.iterator(bt)
                    ]))));
                }
            }
            exports.default = default_1;
        },
        { '../../core': 179 }
    ],
    225: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            function noop() {
            }
            exports.noop = noop;
        },
        {}
    ],
    226: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const assign_1 = _dereq_('./assign');
            const concat_1 = _dereq_('./concat');
            const equal_1 = _dereq_('./equal');
            const exception_1 = _dereq_('./exception');
            var RegisterItemType;
            (function (RegisterItemType) {
                RegisterItemType.monitor = 'monitor';
                RegisterItemType.subscriber = 'subscriber';
            }(RegisterItemType = exports.RegisterItemType || (exports.RegisterItemType = {})));
            class Observation {
                constructor(opts = {}) {
                    this.settings = { limit: 10 };
                    this.relaySources = new WeakSet();
                    this.node_ = {
                        parent: undefined,
                        children: new Map(),
                        childrenNames: [],
                        items: []
                    };
                    void assign_1.extend(this.settings, opts);
                }
                monitor(namespace, listener, {
                    once = false
                } = {}) {
                    if (typeof listener !== 'function')
                        throw new Error(`Spica: Observation: Invalid listener: ${ listener }`);
                    const off = () => this.off(namespace, listener, RegisterItemType.monitor);
                    const {items} = this.seekNode_(namespace);
                    if (isRegistered(items, RegisterItemType.monitor, namespace, listener))
                        return off;
                    if (items.length === this.settings.limit)
                        throw new Error(`Spica: Observation: Exceeded max listener limit.`);
                    void items.push({
                        type: RegisterItemType.monitor,
                        namespace,
                        listener,
                        options: { once }
                    });
                    return off;
                }
                on(namespace, listener, {
                    once = false
                } = {}) {
                    if (typeof listener !== 'function')
                        throw new Error(`Spica: Observation: Invalid listener: ${ listener }`);
                    const off = () => this.off(namespace, listener);
                    const {items} = this.seekNode_(namespace);
                    if (isRegistered(items, RegisterItemType.subscriber, namespace, listener))
                        return off;
                    if (items.length === this.settings.limit)
                        throw new Error(`Spica: Observation: Exceeded max listener limit.`);
                    void items.push({
                        type: RegisterItemType.subscriber,
                        namespace,
                        listener,
                        options: { once }
                    });
                    return off;
                }
                once(namespace, listener) {
                    return this.on(namespace, listener, { once: true });
                }
                off(namespace, listener, type = RegisterItemType.subscriber) {
                    switch (typeof listener) {
                    case 'function':
                        return void this.seekNode_(namespace).items.some(({
                            type: type_,
                            listener: listener_
                        }, i, items) => {
                            if (listener_ !== listener)
                                return false;
                            if (type_ !== type)
                                return false;
                            switch (i) {
                            case 0:
                                return !void items.shift();
                            case items.length - 1:
                                return !void items.pop();
                            default:
                                return !void items.splice(i, 1);
                            }
                        });
                    case 'undefined': {
                            const node = this.seekNode_(namespace);
                            for (const name of node.childrenNames.slice()) {
                                void this.off([
                                    ...namespace,
                                    name
                                ]);
                                const child = node.children.get(name);
                                if (!child)
                                    continue;
                                if (child.items.length + child.childrenNames.length > 0)
                                    continue;
                                void node.children.delete(name);
                                void node.childrenNames.splice(equal_1.findIndex(name, node.childrenNames), 1);
                            }
                            node.items = node.items.filter(({type}) => type === RegisterItemType.monitor);
                            return;
                        }
                    default:
                        throw new Error(`Spica: Observation: Unreachable.`);
                    }
                }
                emit(namespace, data, tracker) {
                    void this.drain_(namespace, data, tracker);
                }
                reflect(namespace, data) {
                    let results = [];
                    void this.emit(namespace, data, (_, r) => results = r);
                    return results;
                }
                relay(source) {
                    if (this.relaySources.has(source))
                        return () => undefined;
                    void this.relaySources.add(source);
                    const unbind = source.monitor([], (data, namespace) => void this.emit(namespace, data));
                    return () => (void this.relaySources.delete(source), unbind());
                }
                drain_(namespace, data, tracker) {
                    const results = [];
                    for (const {
                                type,
                                listener,
                                options: {once}
                            } of this.refsBelow_(this.seekNode_(namespace))) {
                        if (type !== RegisterItemType.subscriber)
                            continue;
                        if (once) {
                            void this.off(namespace, listener);
                        }
                        try {
                            const result = listener(data, namespace);
                            if (tracker) {
                                results[results.length] = result;
                            }
                        } catch (reason) {
                            void exception_1.causeAsyncException(reason);
                        }
                    }
                    for (const {
                                type,
                                listener,
                                options: {once}
                            } of this.refsAbove_(this.seekNode_(namespace))) {
                        if (type !== RegisterItemType.monitor)
                            continue;
                        if (once) {
                            void this.off(namespace, listener, RegisterItemType.monitor);
                        }
                        try {
                            void listener(data, namespace);
                        } catch (reason) {
                            void exception_1.causeAsyncException(reason);
                        }
                    }
                    if (tracker) {
                        try {
                            void tracker(data, results);
                        } catch (reason) {
                            void exception_1.causeAsyncException(reason);
                        }
                    }
                }
                refs(namespace) {
                    return this.refsBelow_(this.seekNode_(namespace));
                }
                refsAbove_({parent, items}) {
                    items = concat_1.concat([], items);
                    while (parent) {
                        items = concat_1.concat(items, parent.items);
                        parent = parent.parent;
                    }
                    return items;
                }
                refsBelow_({childrenNames, children, items}) {
                    items = concat_1.concat([], items);
                    for (let i = 0; i < childrenNames.length; ++i) {
                        const name = childrenNames[i];
                        const below = this.refsBelow_(children.get(name));
                        items = concat_1.concat(items, below);
                        if (below.length === 0) {
                            void children.delete(name);
                            void childrenNames.splice(equal_1.findIndex(name, childrenNames), 1);
                            void --i;
                        }
                    }
                    return items;
                }
                seekNode_(namespace) {
                    let node = this.node_;
                    for (const name of namespace) {
                        const {children} = node;
                        if (!children.has(name)) {
                            void node.childrenNames.push(name);
                            children.set(name, {
                                parent: node,
                                children: new Map(),
                                childrenNames: [],
                                items: []
                            });
                        }
                        node = children.get(name);
                    }
                    return node;
                }
            }
            exports.Observation = Observation;
            function isRegistered(items, type, namespace, listener) {
                return items.some(item => item.type === type && item.namespace.length === namespace.length && item.namespace.every((ns, i) => ns === namespace[i]) && item.listener === listener);
            }
        },
        {
            './assign': 154,
            './concat': 160,
            './equal': 163,
            './exception': 164
        }
    ],
    227: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            var _a, _b;
            'use strict';
            const concat_1 = _dereq_('./concat');
            var State;
            (function (State) {
                State[State['resolved'] = 0] = 'resolved';
                State[State['rejected'] = 1] = 'rejected';
            }(State || (State = {})));
            const status = Symbol();
            const queue = Symbol();
            const resume = Symbol();
            class AtomicPromise {
                constructor(executor) {
                    this[Symbol.toStringTag] = 'Promise';
                    this[_a] = [];
                    this[_b] = [];
                    try {
                        void executor(value => {
                            this[status][0] = this[status][0] || [
                                0,
                                value
                            ];
                            void this[resume]();
                        }, reason => {
                            this[status][0] = this[status][0] || [
                                1,
                                reason
                            ];
                            void this[resume]();
                        });
                    } catch (reason) {
                        this[status][0] = [
                            1,
                            reason
                        ];
                        void this[resume]();
                    }
                }
                static get [Symbol.species]() {
                    return AtomicPromise;
                }
                static all(values) {
                    return values.reduce((acc, value) => acc.then(vs => AtomicPromise.resolve(value).then(value => concat_1.concat(vs, [value]))), AtomicPromise.resolve([]));
                }
                static race(values) {
                    return new AtomicPromise((resolve, reject) => {
                        for (const value of values) {
                            void AtomicPromise.resolve(value).then(resolve, reject);
                        }
                    });
                }
                static resolve(value) {
                    return new AtomicPromise(resolve => void resolve(value));
                }
                static reject(reason) {
                    return new AtomicPromise((_, reject) => void reject(reason));
                }
                [resume]() {
                    if (!this[status][0])
                        return;
                    const [state, value] = this[status][0];
                    while (this[queue].length > 0) {
                        const [resolve, reject] = this[queue].shift();
                        switch (state) {
                        case 0:
                            isPromiseLike(value) ? void value.then(resolve, reject) : void resolve(value);
                            continue;
                        case 1:
                            void reject(value);
                            continue;
                        }
                    }
                }
                then(onfulfilled, onrejected) {
                    return new AtomicPromise((resolve, reject) => {
                        void this[queue].push([
                            value => {
                                if (!onfulfilled)
                                    return void resolve(value);
                                try {
                                    void resolve(onfulfilled(value));
                                } catch (reason) {
                                    void reject(reason);
                                }
                            },
                            reason => {
                                if (!onrejected)
                                    return void reject(reason);
                                try {
                                    void resolve(onrejected(reason));
                                } catch (reason) {
                                    void reject(reason);
                                }
                            }
                        ]);
                        void this[resume]();
                    });
                }
                catch(onrejected) {
                    return this.then(undefined, onrejected);
                }
                finally(onfinally) {
                    return this.then(onfinally, onfinally).then(() => this);
                }
            }
            _a = status, _b = queue;
            exports.AtomicPromise = AtomicPromise;
            function isPromiseLike(value) {
                return !!value && typeof value === 'object' && 'then' in value && typeof value.then === 'function';
            }
        },
        { './concat': 160 }
    ],
    228: [
        function (_dereq_, module, exports) {
            'use strict';
            function __export(m) {
                for (var p in m)
                    if (!exports.hasOwnProperty(p))
                        exports[p] = m[p];
            }
            Object.defineProperty(exports, '__esModule', { value: true });
            __export(_dereq_('./monad/sequence'));
        },
        { './monad/sequence': 178 }
    ],
    229: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const zeros = '0'.repeat(15);
            let cnt = 0;
            function sqid(id) {
                if (arguments.length > 0) {
                    if (typeof id !== 'number')
                        throw new TypeError(`Spica: sqid: A parameter value must be a number: ${ id }`);
                    if (id >= 0 === false)
                        throw new TypeError(`Spica: sqid: A parameter value must be a positive number: ${ id }`);
                    if (id % 1 !== 0)
                        throw new TypeError(`Spica: sqid: A parameter value must be an integer: ${ id }`);
                }
                return id === undefined ? (zeros + ++cnt).slice(-15) : (zeros + id).slice(-15);
            }
            exports.sqid = sqid;
        },
        {}
    ],
    230: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const promise_1 = _dereq_('./promise');
            const future_1 = _dereq_('./future');
            const observation_1 = _dereq_('./observation');
            const assign_1 = _dereq_('./assign');
            const clock_1 = _dereq_('./clock');
            const sqid_1 = _dereq_('./sqid');
            const noop_1 = _dereq_('./noop');
            const exception_1 = _dereq_('./exception');
            class Supervisor extends promise_1.AtomicPromise {
                constructor(opts = {}) {
                    super((resolve, reject) => (cb = [
                        resolve,
                        reject
                    ], state = new future_1.AtomicFuture(), {
                        next: () => new promise_1.AtomicPromise(r => r({
                            value: state,
                            done: true
                        }))
                    }));
                    this.state = new future_1.AtomicFuture();
                    this.id = sqid_1.sqid();
                    this.settings = {
                        name: '',
                        size: Infinity,
                        timeout: Infinity,
                        destructor: _ => undefined,
                        scheduler: clock_1.tick,
                        resource: 10
                    };
                    this.events_ = {
                        init: new observation_1.Observation(),
                        loss: new observation_1.Observation(),
                        exit: new observation_1.Observation()
                    };
                    this.events = this.events_;
                    this.workers = new Map();
                    this.alive = true;
                    this.available = true;
                    this.scheduler = () => void (void 0, this.settings.scheduler)(this.deliver);
                    this.messages = [];
                    this.deliver = () => {
                        const since = Date.now();
                        for (let i = 0, len = this.messages.length; this.available && i < len; ++i) {
                            if (this.settings.resource - (Date.now() - since) <= 0)
                                return void this.schedule();
                            const [name, param, callback, expiry] = this.messages[i];
                            const names = typeof name === 'string' ? [name] : [...name];
                            const result = names.reduce((result, name) => result ? result : this.workers.has(name) ? this.workers.get(name).call([
                                param,
                                expiry
                            ]) : undefined, undefined);
                            if (result === undefined && Date.now() < expiry)
                                continue;
                            i === 0 ? void this.messages.shift() : void this.messages.splice(i, 1);
                            void --i;
                            void --len;
                            if (result === undefined) {
                                void this.events_.loss.emit([names[0]], [
                                    names[0],
                                    param
                                ]);
                                try {
                                    void callback(undefined, new Error(`Spica: Supervisor: A process has failed.`));
                                } catch (reason) {
                                    void exception_1.causeAsyncException(reason);
                                }
                            } else {
                                void result.then(reply => void callback(reply), () => void callback(undefined, new Error(`Spica: Supervisor: A process has failed.`)));
                            }
                        }
                    };
                    var cb;
                    var state;
                    void this.state.then(...cb);
                    void state.bind(this.state);
                    void assign_1.extend(this.settings, opts);
                    this.name = this.settings.name;
                    if (this.constructor === Supervisor)
                        throw new Error(`Spica: Supervisor: <${ this.id }/${ this.name }>: Cannot instantiate abstract classes.`);
                    void this.constructor.instances.add(this);
                }
                static get instances() {
                    return this.hasOwnProperty('instances_') ? this.instances_ : this.instances_ = new Set();
                }
                static get count() {
                    return this.instances.size;
                }
                static get procs() {
                    return [...this.instances].reduce((acc, sv) => acc + sv.workers.size, 0);
                }
                destructor(reason) {
                    this.available = false;
                    for (const [, worker] of this.workers) {
                        void worker.terminate(reason);
                    }
                    void Object.freeze(this.workers);
                    while (this.messages.length > 0) {
                        const [name, param] = this.messages.shift();
                        const names = typeof name === 'string' ? [name] : [...name];
                        void this.events_.loss.emit([names[0]], [
                            names[0],
                            param
                        ]);
                    }
                    void Object.freeze(this.messages);
                    this.alive = false;
                    void this.constructor.instances.delete(this);
                    void Object.freeze(this);
                    void this.settings.destructor(reason);
                    void this.state.bind(reason === undefined ? undefined : promise_1.AtomicPromise.reject(reason));
                }
                throwErrorIfNotAvailable() {
                    if (!this.available)
                        throw new Error(`Spica: Supervisor: <${ this.id }/${ this.name }>: A supervisor is already terminated.`);
                }
                register(name, process, state, reason) {
                    void this.throwErrorIfNotAvailable();
                    if (arguments.length > 3) {
                        void this.kill(name, reason);
                        return this.register(name, process, state);
                    }
                    if (typeof process === 'function')
                        return this.register(name, {
                            init: state => state,
                            main: process,
                            exit: _ => undefined
                        }, state);
                    if (this.workers.has(name))
                        throw new Error(`Spica: Supervisor: <${ this.id }/${ this.name }/${ name }>: Cannot register a process multiply with the same name.`);
                    void this.schedule();
                    return this.workers.set(name, new Worker(this, name, process, state, Supervisor.standalone.has(process), this.events_, () => void this.workers.delete(name))).get(name).terminate;
                }
                call(name, param, callback = this.settings.timeout, timeout = this.settings.timeout) {
                    return this.call_(name === undefined ? new NamePool(this.workers) : name, param, callback, timeout);
                }
                call_(name, param, callback, timeout) {
                    void this.throwErrorIfNotAvailable();
                    if (typeof callback === 'number')
                        return new promise_1.AtomicPromise((resolve, reject) => void this.call_(name, param, (result, err) => err ? reject(err) : resolve(result), timeout));
                    void this.messages.push([
                        name,
                        param,
                        callback,
                        Date.now() + timeout
                    ]);
                    while (this.messages.length > this.settings.size) {
                        const [name, param, callback] = this.messages.shift();
                        const names = typeof name === 'string' ? [name] : [...name];
                        void this.events_.loss.emit([names[0]], [
                            names[0],
                            param
                        ]);
                        try {
                            void callback(undefined, new Error(`Spica: Supervisor: <${ this.id }/${ this.name }>: A message overflowed.`));
                        } catch (reason) {
                            void exception_1.causeAsyncException(reason);
                        }
                    }
                    void this.schedule();
                    if (timeout <= 0)
                        return;
                    if (timeout === Infinity)
                        return;
                    void setTimeout(() => void this.schedule(), timeout + 3);
                }
                cast(name, param, timeout = this.settings.timeout) {
                    const result = this.cast_(name === undefined ? new NamePool(this.workers) : name, param, timeout);
                    if (result === undefined)
                        return false;
                    void result.catch(noop_1.noop);
                    return true;
                }
                cast_(name, param, timeout) {
                    void this.throwErrorIfNotAvailable();
                    const names = typeof name === 'string' ? [name] : [...name];
                    const result = names.reduce((result, name) => result ? result : this.workers.has(name) ? this.workers.get(name).call([
                        param,
                        Date.now() + timeout
                    ]) : undefined, undefined);
                    if (result === undefined) {
                        void this.events_.loss.emit([names[0]], [
                            names[0],
                            param
                        ]);
                    }
                    return result;
                }
                refs(name) {
                    void this.throwErrorIfNotAvailable();
                    return name === undefined ? [...this.workers.values()].map(convert) : this.workers.has(name) ? [convert(this.workers.get(name))] : [];
                    function convert(worker) {
                        return [
                            worker.name,
                            worker.process,
                            worker.state,
                            worker.terminate
                        ];
                    }
                }
                kill(name, reason) {
                    if (!this.available)
                        return false;
                    return this.workers.has(name) ? this.workers.get(name).terminate(reason) : false;
                }
                terminate(reason) {
                    if (!this.available)
                        return false;
                    void this.destructor(reason);
                    return true;
                }
                schedule() {
                    if (this.messages.length === 0)
                        return;
                    void clock_1.tick(this.scheduler, true);
                }
            }
            Supervisor.standalone = new WeakSet();
            exports.Supervisor = Supervisor;
            class NamePool {
                constructor(workers) {
                    this.workers = workers;
                }
                [Symbol.iterator]() {
                    return this.workers.size === 0 ? [''][Symbol.iterator]() : this.workers.keys();
                }
            }
            class Worker {
                constructor(sv, name, process, state, initiated, events, destructor_) {
                    this.sv = sv;
                    this.name = name;
                    this.process = process;
                    this.state = state;
                    this.events = events;
                    this.destructor_ = destructor_;
                    this.alive = true;
                    this.available = true;
                    this.initiated = false;
                    this.terminate = reason => {
                        if (!this.alive)
                            return false;
                        void this.destructor(reason);
                        return true;
                    };
                    initiated && void this.init();
                }
                destructor(reason) {
                    this.alive = false;
                    this.available = false;
                    void Object.freeze(this);
                    try {
                        void this.destructor_();
                    } catch (reason) {
                        void exception_1.causeAsyncException(reason);
                    }
                    if (this.initiated) {
                        void this.exit(reason);
                    }
                }
                init() {
                    this.initiated = true;
                    void this.events.init.emit([this.name], [
                        this.name,
                        this.process,
                        this.state
                    ]);
                    this.state = this.process.init(this.state);
                }
                exit(reason) {
                    try {
                        void this.process.exit(reason, this.state);
                        void this.events.exit.emit([this.name], [
                            this.name,
                            this.process,
                            this.state,
                            reason
                        ]);
                    } catch (reason_) {
                        void this.events.exit.emit([this.name], [
                            this.name,
                            this.process,
                            this.state,
                            reason
                        ]);
                        void this.sv.terminate(reason_);
                    }
                }
                call([param, expiry]) {
                    const now = Date.now();
                    if (!this.available || now > expiry)
                        return;
                    return new promise_1.AtomicPromise((resolve, reject) => {
                        isFinite(expiry) && void setTimeout(() => void reject(new Error()), expiry - now);
                        this.available = false;
                        if (!this.initiated) {
                            void this.init();
                        }
                        void promise_1.AtomicPromise.resolve(this.process.main(param, this.state, this.terminate)).then(resolve, reject);
                    }).then(result => {
                        const [reply, state] = Array.isArray(result) ? result : [
                            result.reply,
                            result.state
                        ];
                        if (!this.alive)
                            return reply;
                        void this.sv.schedule();
                        this.state = state;
                        this.available = true;
                        return reply;
                    }).catch(reason => {
                        void this.sv.schedule();
                        void this.terminate(reason);
                        throw reason;
                    });
                }
            }
        },
        {
            './assign': 154,
            './clock': 158,
            './exception': 164,
            './future': 166,
            './noop': 225,
            './observation': 226,
            './promise': 227,
            './sqid': 229
        }
    ],
    231: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            function throttle(interval, callback) {
                let timer = 0;
                let buffer = [];
                return arg => {
                    void buffer.push(arg);
                    if (timer > 0)
                        return;
                    timer = setTimeout(() => {
                        timer = 0;
                        void callback(buffer[buffer.length - 1], flush());
                    }, interval);
                };
                function flush() {
                    const buf = buffer;
                    buffer = [];
                    return buf;
                }
            }
            exports.throttle = throttle;
            function debounce(delay, callback) {
                let timer = 0;
                let buffer = [];
                return arg => {
                    void buffer.push(arg);
                    if (timer > 0)
                        return;
                    timer = setTimeout(() => {
                        timer = 0;
                        void setTimeout(() => {
                            if (timer > 0)
                                return;
                            void callback(buffer[buffer.length - 1], flush());
                        }, delay);
                    }, delay);
                };
                function flush() {
                    const buf = buffer;
                    buffer = [];
                    return buf;
                }
            }
            exports.debounce = debounce;
        },
        {}
    ],
    232: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            function tuple(as) {
                return as;
            }
            exports.tuple = tuple;
        },
        {}
    ],
    233: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            function type(target) {
                const type = Object.prototype.toString.call(target).split(' ').pop().slice(0, -1);
                if (target === null || typeof target !== 'object' && target instanceof Object === false)
                    return type.toLowerCase();
                return type;
            }
            exports.type = type;
            function isObject(target) {
                return target !== null && (typeof target === 'object' || target instanceof Object);
            }
            exports.isObject = isObject;
        },
        {}
    ],
    234: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            exports.uncurry = f => xs => f(...xs);
        },
        {}
    ],
    235: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const FORMAT_V4 = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';
            function uuid() {
                let acc = '';
                for (let i = 0; i < FORMAT_V4.length; ++i) {
                    const c = FORMAT_V4[i];
                    if (c === 'x' || c === 'y') {
                        const r = Math.random() * 16 | 0;
                        const v = c == 'x' ? r : r & 3 | 8;
                        acc += v.toString(16);
                    } else {
                        acc += c;
                    }
                }
                return acc;
            }
            exports.uuid = uuid;
        },
        {}
    ],
    236: [
        function (_dereq_, module, exports) {
            module.exports = Stream;
            var EE = _dereq_('events').EventEmitter;
            var inherits = _dereq_('inherits');
            inherits(Stream, EE);
            Stream.Readable = _dereq_('readable-stream/readable.js');
            Stream.Writable = _dereq_('readable-stream/writable.js');
            Stream.Duplex = _dereq_('readable-stream/duplex.js');
            Stream.Transform = _dereq_('readable-stream/transform.js');
            Stream.PassThrough = _dereq_('readable-stream/passthrough.js');
            Stream.Stream = Stream;
            function Stream() {
                EE.call(this);
            }
            Stream.prototype.pipe = function (dest, options) {
                var source = this;
                function ondata(chunk) {
                    if (dest.writable) {
                        if (false === dest.write(chunk) && source.pause) {
                            source.pause();
                        }
                    }
                }
                source.on('data', ondata);
                function ondrain() {
                    if (source.readable && source.resume) {
                        source.resume();
                    }
                }
                dest.on('drain', ondrain);
                if (!dest._isStdio && (!options || options.end !== false)) {
                    source.on('end', onend);
                    source.on('close', onclose);
                }
                var didOnEnd = false;
                function onend() {
                    if (didOnEnd)
                        return;
                    didOnEnd = true;
                    dest.end();
                }
                function onclose() {
                    if (didOnEnd)
                        return;
                    didOnEnd = true;
                    if (typeof dest.destroy === 'function')
                        dest.destroy();
                }
                function onerror(er) {
                    cleanup();
                    if (EE.listenerCount(this, 'error') === 0) {
                        throw er;
                    }
                }
                source.on('error', onerror);
                dest.on('error', onerror);
                function cleanup() {
                    source.removeListener('data', ondata);
                    dest.removeListener('drain', ondrain);
                    source.removeListener('end', onend);
                    source.removeListener('close', onclose);
                    source.removeListener('error', onerror);
                    dest.removeListener('error', onerror);
                    source.removeListener('end', cleanup);
                    source.removeListener('close', cleanup);
                    dest.removeListener('close', cleanup);
                }
                source.on('end', cleanup);
                source.on('close', cleanup);
                dest.on('close', cleanup);
                dest.emit('pipe', source);
                return dest;
            };
        },
        {
            'events': 85,
            'inherits': 103,
            'readable-stream/duplex.js': 130,
            'readable-stream/passthrough.js': 140,
            'readable-stream/readable.js': 141,
            'readable-stream/transform.js': 142,
            'readable-stream/writable.js': 143
        }
    ],
    237: [
        function (_dereq_, module, exports) {
            arguments[4][139][0].apply(exports, arguments);
        },
        {
            'dup': 139,
            'safe-buffer': 145
        }
    ],
    238: [
        function (_dereq_, module, exports) {
            (function (setImmediate, clearImmediate) {
                var nextTick = _dereq_('process/browser.js').nextTick;
                var apply = Function.prototype.apply;
                var slice = Array.prototype.slice;
                var immediateIds = {};
                var nextImmediateId = 0;
                exports.setTimeout = function () {
                    return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);
                };
                exports.setInterval = function () {
                    return new Timeout(apply.call(setInterval, window, arguments), clearInterval);
                };
                exports.clearTimeout = exports.clearInterval = function (timeout) {
                    timeout.close();
                };
                function Timeout(id, clearFn) {
                    this._id = id;
                    this._clearFn = clearFn;
                }
                Timeout.prototype.unref = Timeout.prototype.ref = function () {
                };
                Timeout.prototype.close = function () {
                    this._clearFn.call(window, this._id);
                };
                exports.enroll = function (item, msecs) {
                    clearTimeout(item._idleTimeoutId);
                    item._idleTimeout = msecs;
                };
                exports.unenroll = function (item) {
                    clearTimeout(item._idleTimeoutId);
                    item._idleTimeout = -1;
                };
                exports._unrefActive = exports.active = function (item) {
                    clearTimeout(item._idleTimeoutId);
                    var msecs = item._idleTimeout;
                    if (msecs >= 0) {
                        item._idleTimeoutId = setTimeout(function onTimeout() {
                            if (item._onTimeout)
                                item._onTimeout();
                        }, msecs);
                    }
                };
                exports.setImmediate = typeof setImmediate === 'function' ? setImmediate : function (fn) {
                    var id = nextImmediateId++;
                    var args = arguments.length < 2 ? false : slice.call(arguments, 1);
                    immediateIds[id] = true;
                    nextTick(function onNextTick() {
                        if (immediateIds[id]) {
                            if (args) {
                                fn.apply(null, args);
                            } else {
                                fn.call(null);
                            }
                            exports.clearImmediate(id);
                        }
                    });
                    return id;
                };
                exports.clearImmediate = typeof clearImmediate === 'function' ? clearImmediate : function (id) {
                    delete immediateIds[id];
                };
            }.call(this, _dereq_('timers').setImmediate, _dereq_('timers').clearImmediate));
        },
        {
            'process/browser.js': 121,
            'timers': 238
        }
    ],
    239: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            var builder_1 = _dereq_('./src/dom/builder');
            exports.Shadow = builder_1.Shadow;
            exports.HTML = builder_1.HTML;
            exports.SVG = builder_1.SVG;
            exports.API = builder_1.API;
            var proxy_1 = _dereq_('./src/dom/proxy');
            exports.proxy = proxy_1.proxy;
            var dom_1 = _dereq_('./src/util/dom');
            exports.frag = dom_1.frag;
            exports.shadow = dom_1.shadow;
            exports.html = dom_1.html;
            exports.svg = dom_1.svg;
            exports.text = dom_1.text;
            exports.define = dom_1.define;
            var listener_1 = _dereq_('./src/util/listener');
            exports.listen = listener_1.listen;
            exports.once = listener_1.once;
            exports.delegate = listener_1.delegate;
            exports.bind = listener_1.bind;
            exports.currentTargets = listener_1.currentTargets;
        },
        {
            './src/dom/builder': 240,
            './src/dom/proxy': 242,
            './src/util/dom': 243,
            './src/util/listener': 244
        }
    ],
    240: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const proxy_1 = _dereq_('./proxy');
            const dom_1 = _dereq_('../util/dom');
            function API(baseFactory, formatter = el => el) {
                return new Proxy(() => undefined, handle(baseFactory, formatter));
            }
            exports.API = API;
            exports.Shadow = API(dom_1.html, dom_1.shadow);
            exports.HTML = API(dom_1.html);
            exports.SVG = API(dom_1.svg);
            function handle(baseFactory, formatter) {
                return {
                    apply(obj, _, [prop, ...args]) {
                        return this.get(obj, prop, undefined)(...args);
                    },
                    get: (obj, prop) => obj[prop] || prop in obj || typeof prop !== 'string' ? obj[prop] : obj[prop] = builder(prop, baseFactory)
                };
                function builder(tag, baseFactory) {
                    return function build(attrs, children, factory) {
                        if (typeof attrs === 'function')
                            return build(undefined, undefined, attrs);
                        if (typeof children === 'function')
                            return build(attrs, undefined, children);
                        if (attrs !== undefined && isChildren(attrs))
                            return build(undefined, attrs, factory);
                        const node = formatter(elem(factory || defaultFactory, attrs || {}, children));
                        return node instanceof Element ? new proxy_1.Elem(node, children) : new proxy_1.Elem(node.host, children, node);
                    };
                    function isChildren(children) {
                        return typeof children !== 'object' || Object.values(children).slice(-1).every(val => typeof val === 'object');
                    }
                    function elem(factory, attrs, children) {
                        const el = factory(baseFactory, tag, attrs, children);
                        if (tag !== el.tagName.toLowerCase())
                            throw new Error(`TypedDOM: Tag name must be "${ tag }", but got "${ el.tagName.toLowerCase() }".`);
                        if (factory !== defaultFactory) {
                            for (const [k, v] of Object.entries(attrs)) {
                                if (typeof v !== 'function')
                                    continue;
                                void el.removeEventListener(k, v);
                            }
                            void dom_1.define(el, attrs);
                        }
                        return el;
                    }
                    function defaultFactory(factory, tag, attrs) {
                        return factory(tag, attrs);
                    }
                }
            }
        },
        {
            '../util/dom': 243,
            './proxy': 242
        }
    ],
    241: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const uuid_1 = _dereq_('spica/uuid');
            const sqid_1 = _dereq_('spica/sqid');
            const id = uuid_1.uuid().slice(-7);
            function uid() {
                return `id-${ id }-${ +sqid_1.sqid() }`;
            }
            exports.uid = uid;
        },
        {
            'spica/sqid': 229,
            'spica/uuid': 235
        }
    ],
    242: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const identity_1 = _dereq_('./identity');
            const dom_1 = _dereq_('../util/dom');
            var ElChildrenType;
            (function (ElChildrenType) {
                ElChildrenType.Void = 'void';
                ElChildrenType.Text = 'text';
                ElChildrenType.Collection = 'collection';
                ElChildrenType.Record = 'record';
            }(ElChildrenType || (ElChildrenType = {})));
            const memory = new WeakMap();
            function proxy(el) {
                if (!memory.has(el))
                    throw new Error(`TypedDOM: This element has no proxy.`);
                return memory.get(el);
            }
            exports.proxy = proxy;
            const tag = Symbol();
            class Elem {
                constructor(element, children_, container = element) {
                    this.element = element;
                    this.children_ = children_;
                    this.container = container;
                    this.id_ = this.element.id.trim();
                    this.type = this.children_ === undefined ? ElChildrenType.Void : typeof this.children_ === 'string' ? ElChildrenType.Text : Array.isArray(this.children_) ? ElChildrenType.Collection : ElChildrenType.Record;
                    void throwErrorIfNotUsable(this);
                    void memory.set(this.element, this);
                    switch (this.type) {
                    case ElChildrenType.Void:
                        this.initialChildren = new WeakSet();
                        return;
                    case ElChildrenType.Text:
                        this.initialChildren = new WeakSet();
                        void dom_1.define(this.container, []);
                        this.children_ = this.container.appendChild(dom_1.text(''));
                        this.children = children_;
                        return;
                    case ElChildrenType.Collection:
                        this.initialChildren = new WeakSet(children_);
                        void dom_1.define(this.container, []);
                        this.children_ = [];
                        this.children = children_;
                        return;
                    case ElChildrenType.Record:
                        this.initialChildren = new WeakSet(Object.values(children_));
                        void dom_1.define(this.container, []);
                        this.children_ = observe(this.container, Object.assign({}, children_));
                        this.children = children_;
                        return;
                    default:
                        throw new Error(`TypedDOM: Undefined type children.`);
                    }
                    function observe(node, children) {
                        return Object.defineProperties(children, Object.entries(children).reduce((descs, [name, child]) => {
                            void throwErrorIfNotUsable(child);
                            void node.appendChild(child.element);
                            descs[name] = {
                                configurable: true,
                                enumerable: true,
                                get: () => {
                                    return child;
                                },
                                set: newChild => {
                                    const oldChild = child;
                                    if (newChild === oldChild)
                                        return;
                                    if (newChild.element.parentElement !== node) {
                                        void throwErrorIfNotUsable(newChild);
                                    }
                                    void node.replaceChild(newChild.element, oldChild.element);
                                    child = newChild;
                                }
                            };
                            return descs;
                        }, {}));
                    }
                }
                get id() {
                    if (this.id_)
                        return this.id_;
                    this.id_ = identity_1.uid();
                    void this.element.classList.add(this.id_);
                    return this.id_;
                }
                get query() {
                    switch (true) {
                    case this.element !== this.container:
                        return ':host';
                    case this.id === this.element.id.trim():
                        return `#${ this.id }`;
                    default:
                        return `.${ this.id }`;
                    }
                }
                scope(child) {
                    if (!(child.element instanceof HTMLStyleElement))
                        return;
                    return void parse(child.element, this.query);
                    function parse(style, query) {
                        const syntax = /^(\s*)\$scope(?!\w)/gm;
                        if (style.innerHTML.search(syntax) === -1)
                            return;
                        style.innerHTML = style.innerHTML.replace(syntax, (_, indent) => `${ indent }${ query }`);
                        const id = query.slice(1);
                        switch (query[0]) {
                        case '.':
                            if (!(style.getAttribute('class') || '').split(' ').includes(id))
                                break;
                            void style.setAttribute('class', `${ style.getAttribute('class') } ${ id }`.trim());
                            break;
                        }
                        if (style.children.length === 0)
                            return;
                        void [...style.querySelectorAll('*')].forEach(el => void el.remove());
                    }
                }
                get children() {
                    switch (this.type) {
                    case ElChildrenType.Text:
                        this.children_ = this.children_.parentNode === this.container ? this.children_ : [...this.container.childNodes].find(node => node instanceof Text) || this.children_.cloneNode();
                        return this.children_.textContent;
                    default:
                        return this.children_;
                    }
                }
                set children(children) {
                    const removedChildren = new Set();
                    const addedChildren = new Set();
                    switch (this.type) {
                    case ElChildrenType.Void:
                        return;
                    case ElChildrenType.Text: {
                            if (children === this.children && !this.initialChildren.has(this.children_))
                                return;
                            const targetChildren = this.children_;
                            const oldText = targetChildren.textContent;
                            const newText = children;
                            targetChildren.textContent = newText;
                            if (newText === oldText)
                                return;
                            void this.element.dispatchEvent(new Event('change', {
                                bubbles: false,
                                cancelable: true
                            }));
                            return;
                        }
                    case ElChildrenType.Collection: {
                            const sourceChildren = children;
                            const targetChildren = [];
                            this.children_ = targetChildren;
                            for (let i = 0; i < sourceChildren.length; ++i) {
                                const newChild = sourceChildren[i];
                                if (newChild.element.parentNode !== this.container) {
                                    void throwErrorIfNotUsable(newChild);
                                }
                                if (newChild.element === this.container.children[i]) {
                                    void targetChildren.push(newChild);
                                } else {
                                    if (newChild.element.parentNode !== this.container) {
                                        void this.scope(newChild);
                                        void addedChildren.add(newChild);
                                    }
                                    void this.container.insertBefore(newChild.element, this.container.children[i]);
                                    void targetChildren.push(newChild);
                                }
                            }
                            void Object.freeze(targetChildren);
                            for (let i = this.container.children.length; i >= sourceChildren.length; --i) {
                                if (!memory.has(this.container.children[i]))
                                    continue;
                                void removedChildren.add(proxy(this.container.removeChild(this.container.children[i])));
                            }
                            break;
                        }
                    case ElChildrenType.Record: {
                            const sourceChildren = children;
                            const targetChildren = this.children_;
                            const log = new WeakSet();
                            for (const name in targetChildren) {
                                const oldChild = targetChildren[name];
                                const newChild = sourceChildren[name];
                                if (!newChild)
                                    continue;
                                if (newChild.element.parentNode !== this.container) {
                                    void throwErrorIfNotUsable(newChild);
                                }
                                if (log.has(newChild))
                                    throw new Error(`TypedDOM: Cannot use an element again used in the same record.`);
                                void log.add(newChild);
                                if (oldChild.element !== newChild.element || this.initialChildren.has(oldChild)) {
                                    void this.scope(newChild);
                                    void addedChildren.add(newChild);
                                    void removedChildren.add(oldChild);
                                }
                                targetChildren[name] = sourceChildren[name];
                            }
                            break;
                        }
                    }
                    for (const child of removedChildren) {
                        if (this.initialChildren.has(child))
                            continue;
                        void child.element.dispatchEvent(new Event('disconnect', {
                            bubbles: false,
                            cancelable: true
                        }));
                    }
                    for (const child of addedChildren) {
                        void child.element.dispatchEvent(new Event('connect', {
                            bubbles: false,
                            cancelable: true
                        }));
                    }
                    removedChildren.size + addedChildren.size > 0 && void this.element.dispatchEvent(new Event('change', {
                        bubbles: false,
                        cancelable: true
                    }));
                }
            }
            exports.Elem = Elem;
            function throwErrorIfNotUsable({element}) {
                if (!element.parentElement || !memory.has(element.parentElement))
                    return;
                throw new Error(`TypedDOM: Cannot add an element used in another typed dom.`);
            }
        },
        {
            '../util/dom': 243,
            './identity': 241
        }
    ],
    243: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const shadows = new WeakMap();
            var cache;
            (function (cache) {
                cache.elem = new Map();
                cache.text = document.createTextNode('');
                cache.frag = document.createDocumentFragment();
            }(cache || (cache = {})));
            function frag(children = []) {
                children = typeof children === 'string' ? [text(children)] : children;
                const frag = cache.frag.cloneNode();
                void frag.append(...children);
                return frag;
            }
            exports.frag = frag;
            function shadow(el, children, opts) {
                if (children && !isChildren(children))
                    return shadow(el, undefined, children);
                if (el.shadowRoot || shadows.has(el)) {
                    return define(opts ? opts.mode === 'open' ? el.shadowRoot || el.attachShadow(opts) : shadows.get(el) || shadows.set(el, el.attachShadow(opts)).get(el) : el.shadowRoot || shadows.get(el), children);
                } else {
                    return define(!opts || opts.mode === 'open' ? el.attachShadow({ mode: 'open' }) : shadows.set(el, el.attachShadow(opts)).get(el), children === undefined ? el.childNodes : children);
                }
            }
            exports.shadow = shadow;
            function html(tag, attrs = {}, children = []) {
                return element(0, tag, attrs, children);
            }
            exports.html = html;
            function svg(tag, attrs = {}, children = []) {
                return element(1, tag, attrs, children);
            }
            exports.svg = svg;
            function text(source) {
                const text = cache.text.cloneNode();
                text.data = source;
                return text;
            }
            exports.text = text;
            var NS;
            (function (NS) {
                NS[NS['HTML'] = 0] = 'HTML';
                NS[NS['SVG'] = 1] = 'SVG';
            }(NS || (NS = {})));
            function element(ns, tag, attrs = {}, children = []) {
                const key = `${ ns }:${ tag }`;
                const el = tag.includes('-') ? elem(ns, tag) : cache.elem.has(key) ? cache.elem.get(key).cloneNode(true) : cache.elem.set(key, elem(ns, tag)).get(key).cloneNode(true);
                void define(el, attrs, children);
                return el;
            }
            function elem(ns, tag) {
                switch (ns) {
                case 0:
                    return document.createElement(tag);
                case 1:
                    return document.createElementNS('http://www.w3.org/2000/svg', tag);
                }
            }
            function define(el, attrs = {}, children) {
                if (isChildren(attrs))
                    return define(el, undefined, attrs);
                if (typeof children === 'string')
                    return define(el, attrs, [text(children)]);
                void Object.entries(attrs).forEach(([name, value]) => {
                    switch (typeof value) {
                    case 'string':
                        return void el.setAttribute(name, value);
                    case 'function':
                        return void el.addEventListener(name.slice(2), value, {
                            passive: [
                                'wheel',
                                'mousewheel',
                                'touchstart',
                                'touchmove'
                            ].includes(name.slice(2))
                        });
                    case 'object':
                        return void el.removeAttribute(name);
                    default:
                        return;
                    }
                });
                if (children) {
                    el.innerHTML = '';
                    while (el.firstChild) {
                        void el.removeChild(el.firstChild);
                    }
                    void el.append(...children);
                }
                return el;
            }
            exports.define = define;
            function isChildren(o) {
                return !!o[Symbol.iterator];
            }
        },
        {}
    ],
    244: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const noop_1 = _dereq_('./noop');
            exports.currentTargets = new WeakMap();
            function listen(target, a, b, c = false, d = {}) {
                return typeof b === 'string' ? delegate(target, a, b, c, d) : bind(target, a, b, c);
            }
            exports.listen = listen;
            function once(target, a, b, c = false, d = {}) {
                return typeof b === 'string' ? delegate(target, a, b, c, Object.assign({}, typeof d === 'boolean' ? { capture: d } : d, { once: true })) : bind(target, a, b, Object.assign({}, typeof c === 'boolean' ? { capture: c } : c, { once: true }));
            }
            exports.once = once;
            function delegate(target, selector, type, listener, option = {}) {
                return bind(target instanceof Document ? target.documentElement : target, type, ev => {
                    const cx = (ev.target.shadowRoot && ev.composedPath()[0] || ev.target).closest(selector);
                    if (cx instanceof HTMLElement) {
                        void once(cx, type, listener, option);
                    }
                    return ev.returnValue;
                }, Object.assign({}, option, { capture: true }));
            }
            exports.delegate = delegate;
            function bind(target, type, listener, option = false) {
                void target.addEventListener(type, handler, option);
                let unbind = () => (unbind = noop_1.noop, void target.removeEventListener(type, handler, option));
                return () => void unbind();
                function handler(ev) {
                    void exports.currentTargets.set(ev, ev.currentTarget);
                    return listener(ev);
                }
            }
            exports.bind = bind;
        },
        { './noop': 245 }
    ],
    245: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            function noop() {
                return;
            }
            exports.noop = noop;
        },
        {}
    ],
    246: [
        function (_dereq_, module, exports) {
            (function (global) {
                module.exports = deprecate;
                function deprecate(fn, msg) {
                    if (config('noDeprecation')) {
                        return fn;
                    }
                    var warned = false;
                    function deprecated() {
                        if (!warned) {
                            if (config('throwDeprecation')) {
                                throw new Error(msg);
                            } else if (config('traceDeprecation')) {
                                console.trace(msg);
                            } else {
                                console.warn(msg);
                            }
                            warned = true;
                        }
                        return fn.apply(this, arguments);
                    }
                    return deprecated;
                }
                function config(name) {
                    try {
                        if (!global.localStorage)
                            return false;
                    } catch (_) {
                        return false;
                    }
                    var val = global.localStorage[name];
                    if (null == val)
                        return false;
                    return String(val).toLowerCase() === 'true';
                }
            }.call(this, typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {}));
        },
        {}
    ],
    247: [
        function (_dereq_, module, exports) {
            module.exports = function isBuffer(arg) {
                return arg && typeof arg === 'object' && typeof arg.copy === 'function' && typeof arg.fill === 'function' && typeof arg.readUInt8 === 'function';
            };
        },
        {}
    ],
    248: [
        function (_dereq_, module, exports) {
            (function (process, global) {
                var formatRegExp = /%[sdj%]/g;
                exports.format = function (f) {
                    if (!isString(f)) {
                        var objects = [];
                        for (var i = 0; i < arguments.length; i++) {
                            objects.push(inspect(arguments[i]));
                        }
                        return objects.join(' ');
                    }
                    var i = 1;
                    var args = arguments;
                    var len = args.length;
                    var str = String(f).replace(formatRegExp, function (x) {
                        if (x === '%%')
                            return '%';
                        if (i >= len)
                            return x;
                        switch (x) {
                        case '%s':
                            return String(args[i++]);
                        case '%d':
                            return Number(args[i++]);
                        case '%j':
                            try {
                                return JSON.stringify(args[i++]);
                            } catch (_) {
                                return '[Circular]';
                            }
                        default:
                            return x;
                        }
                    });
                    for (var x = args[i]; i < len; x = args[++i]) {
                        if (isNull(x) || !isObject(x)) {
                            str += ' ' + x;
                        } else {
                            str += ' ' + inspect(x);
                        }
                    }
                    return str;
                };
                exports.deprecate = function (fn, msg) {
                    if (isUndefined(global.process)) {
                        return function () {
                            return exports.deprecate(fn, msg).apply(this, arguments);
                        };
                    }
                    if (process.noDeprecation === true) {
                        return fn;
                    }
                    var warned = false;
                    function deprecated() {
                        if (!warned) {
                            if (process.throwDeprecation) {
                                throw new Error(msg);
                            } else if (process.traceDeprecation) {
                                console.trace(msg);
                            } else {
                                console.error(msg);
                            }
                            warned = true;
                        }
                        return fn.apply(this, arguments);
                    }
                    return deprecated;
                };
                var debugs = {};
                var debugEnviron;
                exports.debuglog = function (set) {
                    if (isUndefined(debugEnviron))
                        debugEnviron = process.env.NODE_DEBUG || '';
                    set = set.toUpperCase();
                    if (!debugs[set]) {
                        if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
                            var pid = process.pid;
                            debugs[set] = function () {
                                var msg = exports.format.apply(exports, arguments);
                                console.error('%s %d: %s', set, pid, msg);
                            };
                        } else {
                            debugs[set] = function () {
                            };
                        }
                    }
                    return debugs[set];
                };
                function inspect(obj, opts) {
                    var ctx = {
                        seen: [],
                        stylize: stylizeNoColor
                    };
                    if (arguments.length >= 3)
                        ctx.depth = arguments[2];
                    if (arguments.length >= 4)
                        ctx.colors = arguments[3];
                    if (isBoolean(opts)) {
                        ctx.showHidden = opts;
                    } else if (opts) {
                        exports._extend(ctx, opts);
                    }
                    if (isUndefined(ctx.showHidden))
                        ctx.showHidden = false;
                    if (isUndefined(ctx.depth))
                        ctx.depth = 2;
                    if (isUndefined(ctx.colors))
                        ctx.colors = false;
                    if (isUndefined(ctx.customInspect))
                        ctx.customInspect = true;
                    if (ctx.colors)
                        ctx.stylize = stylizeWithColor;
                    return formatValue(ctx, obj, ctx.depth);
                }
                exports.inspect = inspect;
                inspect.colors = {
                    'bold': [
                        1,
                        22
                    ],
                    'italic': [
                        3,
                        23
                    ],
                    'underline': [
                        4,
                        24
                    ],
                    'inverse': [
                        7,
                        27
                    ],
                    'white': [
                        37,
                        39
                    ],
                    'grey': [
                        90,
                        39
                    ],
                    'black': [
                        30,
                        39
                    ],
                    'blue': [
                        34,
                        39
                    ],
                    'cyan': [
                        36,
                        39
                    ],
                    'green': [
                        32,
                        39
                    ],
                    'magenta': [
                        35,
                        39
                    ],
                    'red': [
                        31,
                        39
                    ],
                    'yellow': [
                        33,
                        39
                    ]
                };
                inspect.styles = {
                    'special': 'cyan',
                    'number': 'yellow',
                    'boolean': 'yellow',
                    'undefined': 'grey',
                    'null': 'bold',
                    'string': 'green',
                    'date': 'magenta',
                    'regexp': 'red'
                };
                function stylizeWithColor(str, styleType) {
                    var style = inspect.styles[styleType];
                    if (style) {
                        return '\x1B[' + inspect.colors[style][0] + 'm' + str + '\x1B[' + inspect.colors[style][1] + 'm';
                    } else {
                        return str;
                    }
                }
                function stylizeNoColor(str, styleType) {
                    return str;
                }
                function arrayToHash(array) {
                    var hash = {};
                    array.forEach(function (val, idx) {
                        hash[val] = true;
                    });
                    return hash;
                }
                function formatValue(ctx, value, recurseTimes) {
                    if (ctx.customInspect && value && isFunction(value.inspect) && value.inspect !== exports.inspect && !(value.constructor && value.constructor.prototype === value)) {
                        var ret = value.inspect(recurseTimes, ctx);
                        if (!isString(ret)) {
                            ret = formatValue(ctx, ret, recurseTimes);
                        }
                        return ret;
                    }
                    var primitive = formatPrimitive(ctx, value);
                    if (primitive) {
                        return primitive;
                    }
                    var keys = Object.keys(value);
                    var visibleKeys = arrayToHash(keys);
                    if (ctx.showHidden) {
                        keys = Object.getOwnPropertyNames(value);
                    }
                    if (isError(value) && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
                        return formatError(value);
                    }
                    if (keys.length === 0) {
                        if (isFunction(value)) {
                            var name = value.name ? ': ' + value.name : '';
                            return ctx.stylize('[Function' + name + ']', 'special');
                        }
                        if (isRegExp(value)) {
                            return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
                        }
                        if (isDate(value)) {
                            return ctx.stylize(Date.prototype.toString.call(value), 'date');
                        }
                        if (isError(value)) {
                            return formatError(value);
                        }
                    }
                    var base = '', array = false, braces = [
                            '{',
                            '}'
                        ];
                    if (isArray(value)) {
                        array = true;
                        braces = [
                            '[',
                            ']'
                        ];
                    }
                    if (isFunction(value)) {
                        var n = value.name ? ': ' + value.name : '';
                        base = ' [Function' + n + ']';
                    }
                    if (isRegExp(value)) {
                        base = ' ' + RegExp.prototype.toString.call(value);
                    }
                    if (isDate(value)) {
                        base = ' ' + Date.prototype.toUTCString.call(value);
                    }
                    if (isError(value)) {
                        base = ' ' + formatError(value);
                    }
                    if (keys.length === 0 && (!array || value.length == 0)) {
                        return braces[0] + base + braces[1];
                    }
                    if (recurseTimes < 0) {
                        if (isRegExp(value)) {
                            return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
                        } else {
                            return ctx.stylize('[Object]', 'special');
                        }
                    }
                    ctx.seen.push(value);
                    var output;
                    if (array) {
                        output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
                    } else {
                        output = keys.map(function (key) {
                            return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
                        });
                    }
                    ctx.seen.pop();
                    return reduceToSingleString(output, base, braces);
                }
                function formatPrimitive(ctx, value) {
                    if (isUndefined(value))
                        return ctx.stylize('undefined', 'undefined');
                    if (isString(value)) {
                        var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '').replace(/'/g, '\\\'').replace(/\\"/g, '"') + '\'';
                        return ctx.stylize(simple, 'string');
                    }
                    if (isNumber(value))
                        return ctx.stylize('' + value, 'number');
                    if (isBoolean(value))
                        return ctx.stylize('' + value, 'boolean');
                    if (isNull(value))
                        return ctx.stylize('null', 'null');
                }
                function formatError(value) {
                    return '[' + Error.prototype.toString.call(value) + ']';
                }
                function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
                    var output = [];
                    for (var i = 0, l = value.length; i < l; ++i) {
                        if (hasOwnProperty(value, String(i))) {
                            output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, String(i), true));
                        } else {
                            output.push('');
                        }
                    }
                    keys.forEach(function (key) {
                        if (!key.match(/^\d+$/)) {
                            output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, key, true));
                        }
                    });
                    return output;
                }
                function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
                    var name, str, desc;
                    desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
                    if (desc.get) {
                        if (desc.set) {
                            str = ctx.stylize('[Getter/Setter]', 'special');
                        } else {
                            str = ctx.stylize('[Getter]', 'special');
                        }
                    } else {
                        if (desc.set) {
                            str = ctx.stylize('[Setter]', 'special');
                        }
                    }
                    if (!hasOwnProperty(visibleKeys, key)) {
                        name = '[' + key + ']';
                    }
                    if (!str) {
                        if (ctx.seen.indexOf(desc.value) < 0) {
                            if (isNull(recurseTimes)) {
                                str = formatValue(ctx, desc.value, null);
                            } else {
                                str = formatValue(ctx, desc.value, recurseTimes - 1);
                            }
                            if (str.indexOf('\n') > -1) {
                                if (array) {
                                    str = str.split('\n').map(function (line) {
                                        return '  ' + line;
                                    }).join('\n').substr(2);
                                } else {
                                    str = '\n' + str.split('\n').map(function (line) {
                                        return '   ' + line;
                                    }).join('\n');
                                }
                            }
                        } else {
                            str = ctx.stylize('[Circular]', 'special');
                        }
                    }
                    if (isUndefined(name)) {
                        if (array && key.match(/^\d+$/)) {
                            return str;
                        }
                        name = JSON.stringify('' + key);
                        if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
                            name = name.substr(1, name.length - 2);
                            name = ctx.stylize(name, 'name');
                        } else {
                            name = name.replace(/'/g, '\\\'').replace(/\\"/g, '"').replace(/(^"|"$)/g, '\'');
                            name = ctx.stylize(name, 'string');
                        }
                    }
                    return name + ': ' + str;
                }
                function reduceToSingleString(output, base, braces) {
                    var numLinesEst = 0;
                    var length = output.reduce(function (prev, cur) {
                        numLinesEst++;
                        if (cur.indexOf('\n') >= 0)
                            numLinesEst++;
                        return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
                    }, 0);
                    if (length > 60) {
                        return braces[0] + (base === '' ? '' : base + '\n ') + ' ' + output.join(',\n  ') + ' ' + braces[1];
                    }
                    return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
                }
                function isArray(ar) {
                    return Array.isArray(ar);
                }
                exports.isArray = isArray;
                function isBoolean(arg) {
                    return typeof arg === 'boolean';
                }
                exports.isBoolean = isBoolean;
                function isNull(arg) {
                    return arg === null;
                }
                exports.isNull = isNull;
                function isNullOrUndefined(arg) {
                    return arg == null;
                }
                exports.isNullOrUndefined = isNullOrUndefined;
                function isNumber(arg) {
                    return typeof arg === 'number';
                }
                exports.isNumber = isNumber;
                function isString(arg) {
                    return typeof arg === 'string';
                }
                exports.isString = isString;
                function isSymbol(arg) {
                    return typeof arg === 'symbol';
                }
                exports.isSymbol = isSymbol;
                function isUndefined(arg) {
                    return arg === void 0;
                }
                exports.isUndefined = isUndefined;
                function isRegExp(re) {
                    return isObject(re) && objectToString(re) === '[object RegExp]';
                }
                exports.isRegExp = isRegExp;
                function isObject(arg) {
                    return typeof arg === 'object' && arg !== null;
                }
                exports.isObject = isObject;
                function isDate(d) {
                    return isObject(d) && objectToString(d) === '[object Date]';
                }
                exports.isDate = isDate;
                function isError(e) {
                    return isObject(e) && (objectToString(e) === '[object Error]' || e instanceof Error);
                }
                exports.isError = isError;
                function isFunction(arg) {
                    return typeof arg === 'function';
                }
                exports.isFunction = isFunction;
                function isPrimitive(arg) {
                    return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || typeof arg === 'symbol' || typeof arg === 'undefined';
                }
                exports.isPrimitive = isPrimitive;
                exports.isBuffer = _dereq_('./support/isBuffer');
                function objectToString(o) {
                    return Object.prototype.toString.call(o);
                }
                function pad(n) {
                    return n < 10 ? '0' + n.toString(10) : n.toString(10);
                }
                var months = [
                    'Jan',
                    'Feb',
                    'Mar',
                    'Apr',
                    'May',
                    'Jun',
                    'Jul',
                    'Aug',
                    'Sep',
                    'Oct',
                    'Nov',
                    'Dec'
                ];
                function timestamp() {
                    var d = new Date();
                    var time = [
                        pad(d.getHours()),
                        pad(d.getMinutes()),
                        pad(d.getSeconds())
                    ].join(':');
                    return [
                        d.getDate(),
                        months[d.getMonth()],
                        time
                    ].join(' ');
                }
                exports.log = function () {
                    console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
                };
                exports.inherits = _dereq_('inherits');
                exports._extend = function (origin, add) {
                    if (!add || !isObject(add))
                        return origin;
                    var keys = Object.keys(add);
                    var i = keys.length;
                    while (i--) {
                        origin[keys[i]] = add[keys[i]];
                    }
                    return origin;
                };
                function hasOwnProperty(obj, prop) {
                    return Object.prototype.hasOwnProperty.call(obj, prop);
                }
            }.call(this, _dereq_('_process'), typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {}));
        },
        {
            './support/isBuffer': 247,
            '_process': 121,
            'inherits': 103
        }
    ],
    249: [
        function (_dereq_, module, exports) {
            var indexOf = function (xs, item) {
                if (xs.indexOf)
                    return xs.indexOf(item);
                else
                    for (var i = 0; i < xs.length; i++) {
                        if (xs[i] === item)
                            return i;
                    }
                return -1;
            };
            var Object_keys = function (obj) {
                if (Object.keys)
                    return Object.keys(obj);
                else {
                    var res = [];
                    for (var key in obj)
                        res.push(key);
                    return res;
                }
            };
            var forEach = function (xs, fn) {
                if (xs.forEach)
                    return xs.forEach(fn);
                else
                    for (var i = 0; i < xs.length; i++) {
                        fn(xs[i], i, xs);
                    }
            };
            var defineProp = function () {
                try {
                    Object.defineProperty({}, '_', {});
                    return function (obj, name, value) {
                        Object.defineProperty(obj, name, {
                            writable: true,
                            enumerable: false,
                            configurable: true,
                            value: value
                        });
                    };
                } catch (e) {
                    return function (obj, name, value) {
                        obj[name] = value;
                    };
                }
            }();
            var globals = [
                'Array',
                'Boolean',
                'Date',
                'Error',
                'EvalError',
                'Function',
                'Infinity',
                'JSON',
                'Math',
                'NaN',
                'Number',
                'Object',
                'RangeError',
                'ReferenceError',
                'RegExp',
                'String',
                'SyntaxError',
                'TypeError',
                'URIError',
                'decodeURI',
                'decodeURIComponent',
                'encodeURI',
                'encodeURIComponent',
                'escape',
                'eval',
                'isFinite',
                'isNaN',
                'parseFloat',
                'parseInt',
                'undefined',
                'unescape'
            ];
            function Context() {
            }
            Context.prototype = {};
            var Script = exports.Script = function NodeScript(code) {
                if (!(this instanceof Script))
                    return new Script(code);
                this.code = code;
            };
            Script.prototype.runInContext = function (context) {
                if (!(context instanceof Context)) {
                    throw new TypeError('needs a \'context\' argument.');
                }
                var iframe = document.createElement('iframe');
                if (!iframe.style)
                    iframe.style = {};
                iframe.style.display = 'none';
                document.body.appendChild(iframe);
                var win = iframe.contentWindow;
                var wEval = win.eval, wExecScript = win.execScript;
                if (!wEval && wExecScript) {
                    wExecScript.call(win, 'null');
                    wEval = win.eval;
                }
                forEach(Object_keys(context), function (key) {
                    win[key] = context[key];
                });
                forEach(globals, function (key) {
                    if (context[key]) {
                        win[key] = context[key];
                    }
                });
                var winKeys = Object_keys(win);
                var res = wEval.call(win, this.code);
                forEach(Object_keys(win), function (key) {
                    if (key in context || indexOf(winKeys, key) === -1) {
                        context[key] = win[key];
                    }
                });
                forEach(globals, function (key) {
                    if (!(key in context)) {
                        defineProp(context, key, win[key]);
                    }
                });
                document.body.removeChild(iframe);
                return res;
            };
            Script.prototype.runInThisContext = function () {
                return eval(this.code);
            };
            Script.prototype.runInNewContext = function (context) {
                var ctx = Script.createContext(context);
                var res = this.runInContext(ctx);
                if (context) {
                    forEach(Object_keys(ctx), function (key) {
                        context[key] = ctx[key];
                    });
                }
                return res;
            };
            forEach(Object_keys(Script.prototype), function (name) {
                exports[name] = Script[name] = function (code) {
                    var s = Script(code);
                    return s[name].apply(s, [].slice.call(arguments, 1));
                };
            });
            exports.isContext = function (context) {
                return context instanceof Context;
            };
            exports.createScript = function (code) {
                return exports.Script(code);
            };
            exports.createContext = Script.createContext = function (context) {
                var copy = new Context();
                if (typeof context === 'object') {
                    forEach(Object_keys(context), function (key) {
                        copy[key] = context[key];
                    });
                }
                return copy;
            };
        },
        {}
    ],
    250: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            var gui_1 = _dereq_('./layer/interface/service/gui');
            exports.default = gui_1.GUI;
            var gui_2 = _dereq_('./layer/interface/service/gui');
            exports.Pjax = gui_2.GUI;
            var router_1 = _dereq_('./lib/router');
            exports.router = router_1.router;
        },
        {
            './layer/interface/service/gui': 282,
            './lib/router': 293
        }
    ],
    251: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const api_1 = _dereq_('../domain/router/api');
            var router_1 = _dereq_('../domain/event/router');
            exports.RouterEvent = router_1.RouterEvent;
            exports.RouterEventType = router_1.RouterEventType;
            exports.RouterEventSource = router_1.RouterEventSource;
            var config_1 = _dereq_('../domain/data/config');
            exports.Config = config_1.Config;
            exports.scope = config_1.scope;
            function route(config, event, state, io) {
                return api_1.route(new api_1.RouterEntity(config, event, new api_1.RouterEntityState(state.process, state.scripts)), io);
            }
            exports.route = route;
        },
        {
            '../domain/data/config': 255,
            '../domain/event/router': 258,
            '../domain/router/api': 259
        }
    ],
    252: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            var path_1 = _dereq_('../domain/store/path');
            exports.loadTitle = path_1.loadTitle;
            exports.savePosition = path_1.savePosition;
        },
        { '../domain/store/path': 275 }
    ],
    253: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            var Identifier;
            (function (Identifier) {
            }(Identifier || (Identifier = {})));
            function standardizeUrl(url) {
                return encode(normalize(url));
            }
            exports.standardizeUrl = standardizeUrl;
            function encode(url) {
                return url.trim().replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]?|[\uDC00-\uDFFF]/g, str => str.length === 2 ? str : '').replace(/%(?![0-9A-F]{2})|[^%\[\]]+/ig, encodeURI).replace(/\?[^#]+/, query => '?' + query.slice(1).replace(/%[0-9A-F]{2}|[^=&]/ig, str => str.length < 3 ? encodeURIComponent(str) : str)).replace(/%[0-9A-F]{2}/ig, str => str.toUpperCase()).replace(/#.+/, url.slice(url.indexOf('#')));
            }
            exports._encode = encode;
            const parser = document.createElement('a');
            function normalize(url) {
                parser.href = url || location.href;
                return parser.href.replace(/^([^:/?#]+:\/\/[^/?#]*?):(?:80)?(?=$|[/?#])/, '$1').replace(/^([^:/?#]+:\/\/[^/?#]*)\/?/, '$1/').replace(/%[0-9A-F]{2}/ig, str => str.toUpperCase()).replace(/#.+/, url.slice(url.indexOf('#')));
            }
        },
        {}
    ],
    254: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const assign_1 = _dereq_('spica/assign');
            void saveTitle();
            void savePosition();
            function loadTitle() {
                return window.history.state && window.history.state.title || document.title;
            }
            exports.loadTitle = loadTitle;
            function saveTitle() {
                void window.history.replaceState(assign_1.extend(window.history.state || {}, { title: document.title }), document.title);
            }
            exports.saveTitle = saveTitle;
            function loadPosition() {
                return window.history.state && window.history.state.position || {
                    top: window.pageYOffset,
                    left: window.pageXOffset
                };
            }
            exports.loadPosition = loadPosition;
            function savePosition() {
                void window.history.replaceState(assign_1.extend(window.history.state || {}, {
                    position: {
                        top: window.pageYOffset,
                        left: window.pageXOffset
                    }
                }), document.title);
            }
            exports.savePosition = savePosition;
        },
        { 'spica/assign': 154 }
    ],
    255: [
        function (_dereq_, module, exports) {
            'use strict';
            var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
                return new (P || (P = Promise))(function (resolve, reject) {
                    function fulfilled(value) {
                        try {
                            step(generator.next(value));
                        } catch (e) {
                            reject(e);
                        }
                    }
                    function rejected(value) {
                        try {
                            step(generator['throw'](value));
                        } catch (e) {
                            reject(e);
                        }
                    }
                    function step(result) {
                        result.done ? resolve(result.value) : new P(function (resolve) {
                            resolve(result.value);
                        }).then(fulfilled, rejected);
                    }
                    step((generator = generator.apply(thisArg, _arguments || [])).next());
                });
            };
            Object.defineProperty(exports, '__esModule', { value: true });
            const assign_1 = _dereq_('spica/assign');
            var scope_1 = _dereq_('./config/scope');
            exports.scope = scope_1.scope;
            class Config {
                constructor(option) {
                    this.areas = ['body'];
                    this.link = 'a';
                    this.form = 'form:not([method])';
                    this.replace = '';
                    this.fetch = {
                        headers: new Headers(),
                        timeout: 3000,
                        wait: 0
                    };
                    this.update = {
                        head: 'base, meta, link',
                        css: true,
                        script: true,
                        ignore: '',
                        ignores: {
                            extension: '[href^="chrome-extension://"]',
                            security: '[src*=".scr.kaspersky-labs.com/"]'
                        },
                        reload: '',
                        logger: ''
                    };
                    this.sequence = new Sequence();
                    this.progressbar = 'display:none;position:absolute;bottom:0;left:0;width:0;height:2px;background:rgb(40, 105, 255);';
                    this.scope = {};
                    void Object.defineProperties(this.update, {
                        ignore: {
                            enumerable: false,
                            set(value) {
                                this.ignores['_'] = value;
                            },
                            get() {
                                return Object.keys(this.ignores).map(i => this.ignores[i]).filter(s => s.trim().length > 0).join(',');
                            }
                        }
                    });
                    void assign_1.extend(this, option);
                    void Object.freeze(this);
                    void this.fetch.headers.set('X-Requested-With', 'XMLHttpRequest');
                    void this.fetch.headers.set('X-Pjax', '1');
                }
                filter(el) {
                    return el.matches(':not([target])');
                }
                redirect(path) {
                    return path;
                }
                rewrite(_doc, _area) {
                }
                fallback(target, reason) {
                    if (target instanceof HTMLAnchorElement) {
                        return void window.location.assign(target.href);
                    }
                    if (target instanceof HTMLFormElement) {
                        return void window.location.assign(target.action);
                    }
                    if (target instanceof Window) {
                        return void window.location.reload(true);
                    }
                    throw reason;
                }
            }
            exports.Config = Config;
            class Sequence {
                fetch() {
                    return __awaiter(this, void 0, void 0, function* () {
                        return 'fetch';
                    });
                }
                unload() {
                    return __awaiter(this, void 0, void 0, function* () {
                        return 'unload';
                    });
                }
                content() {
                    return __awaiter(this, void 0, void 0, function* () {
                        return 'content';
                    });
                }
                ready() {
                    return __awaiter(this, void 0, void 0, function* () {
                        return 'ready';
                    });
                }
                load() {
                    return __awaiter(this, void 0, void 0, function* () {
                    });
                }
            }
        },
        {
            './config/scope': 256,
            'spica/assign': 154
        }
    ],
    256: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const router_1 = _dereq_('../../../../lib/router');
            const config_1 = _dereq_('../../../domain/data/config');
            const sequence_1 = _dereq_('spica/sequence');
            const maybe_1 = _dereq_('spica/maybe');
            const assign_1 = _dereq_('spica/assign');
            function scope(config, path) {
                const scope = Object.assign({ '/': {} }, config.scope);
                return sequence_1.Sequence.from(Object.keys(scope).sort().reverse()).dropWhile(pattern => !!!router_1.compare(pattern, path.orig) && !router_1.compare(pattern, path.dest)).take(1).filter(pattern => !!router_1.compare(pattern, path.orig) && router_1.compare(pattern, path.dest)).map(pattern => scope[pattern]).map(option => option ? maybe_1.Just(new config_1.Config(assign_1.extend({}, config, option))) : maybe_1.Nothing).extract().reduce((_, m) => m, maybe_1.Nothing);
            }
            exports.scope = scope;
        },
        {
            '../../../../lib/router': 293,
            '../../../domain/data/config': 255,
            'spica/assign': 154,
            'spica/maybe': 168,
            'spica/sequence': 228
        }
    ],
    257: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const error_1 = _dereq_('../../../lib/error');
            class DomainError extends error_1.PjaxError {
                constructor(msg) {
                    super(`Domain: ${ msg }`);
                }
            }
            exports.DomainError = DomainError;
        },
        { '../../../lib/error': 290 }
    ],
    258: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const url_1 = _dereq_('../../../lib/url');
            const url_2 = _dereq_('../../data/model/domain/url');
            const dom_1 = _dereq_('../../../lib/dom');
            const typed_dom_1 = _dereq_('typed-dom');
            class RouterEvent {
                constructor(original) {
                    this.original = original;
                    this.type = this.original.type.toLowerCase();
                    this.source = typed_dom_1.currentTargets.get(this.original);
                    this.request = new RouterEventRequest(this.source);
                    this.location = new RouterEventLocation(this.request.url);
                    void Object.freeze(this);
                }
            }
            exports.RouterEvent = RouterEvent;
            var RouterEventSource;
            (function (RouterEventSource) {
                RouterEventSource.Anchor = HTMLAnchorElement;
                RouterEventSource.Form = HTMLFormElement;
                RouterEventSource.Window = window.Window;
            }(RouterEventSource = exports.RouterEventSource || (exports.RouterEventSource = {})));
            var RouterEventType;
            (function (RouterEventType) {
                RouterEventType.click = 'click';
                RouterEventType.submit = 'submit';
                RouterEventType.popstate = 'popstate';
            }(RouterEventType = exports.RouterEventType || (exports.RouterEventType = {})));
            var RouterEventMethod;
            (function (RouterEventMethod) {
                RouterEventMethod.GET = 'GET';
                RouterEventMethod.POST = 'POST';
            }(RouterEventMethod = exports.RouterEventMethod || (exports.RouterEventMethod = {})));
            class RouterEventRequest {
                constructor(source) {
                    this.source = source;
                    this.method = (() => {
                        if (this.source instanceof RouterEventSource.Anchor) {
                            return RouterEventMethod.GET;
                        }
                        if (this.source instanceof RouterEventSource.Form) {
                            return this.source.method.toUpperCase() === RouterEventMethod.POST ? RouterEventMethod.POST : RouterEventMethod.GET;
                        }
                        if (this.source instanceof RouterEventSource.Window) {
                            return RouterEventMethod.GET;
                        }
                        throw new TypeError();
                    })();
                    this.url = (() => {
                        if (this.source instanceof RouterEventSource.Anchor) {
                            return url_2.standardizeUrl(this.source.href);
                        }
                        if (this.source instanceof RouterEventSource.Form) {
                            return this.source.method.toUpperCase() === RouterEventMethod.GET ? url_2.standardizeUrl(this.source.action.split(/[?#]/)[0] + `?${ dom_1.serialize(this.source) }`) : url_2.standardizeUrl(this.source.action.split(/[?#]/)[0]);
                        }
                        if (this.source instanceof RouterEventSource.Window) {
                            return url_2.standardizeUrl(window.location.href);
                        }
                        throw new TypeError();
                    })();
                    this.body = (() => this.source instanceof RouterEventSource.Form && this.method === RouterEventMethod.POST ? new FormData(this.source) : null)();
                    void Object.freeze(this);
                }
            }
            exports.RouterEventRequest = RouterEventRequest;
            class RouterEventLocation {
                constructor(target) {
                    this.target = target;
                    this.orig = new url_1.URL(url_2.standardizeUrl(window.location.href));
                    this.dest = new url_1.URL(this.target);
                    void Object.freeze(this);
                }
            }
            exports.RouterEventLocation = RouterEventLocation;
        },
        {
            '../../../lib/dom': 289,
            '../../../lib/url': 294,
            '../../data/model/domain/url': 253,
            'typed-dom': 239
        }
    ],
    259: [
        function (_dereq_, module, exports) {
            'use strict';
            var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
                return new (P || (P = Promise))(function (resolve, reject) {
                    function fulfilled(value) {
                        try {
                            step(generator.next(value));
                        } catch (e) {
                            reject(e);
                        }
                    }
                    function rejected(value) {
                        try {
                            step(generator['throw'](value));
                        } catch (e) {
                            reject(e);
                        }
                    }
                    function step(result) {
                        result.done ? resolve(result.value) : new P(function (resolve) {
                            resolve(result.value);
                        }).then(fulfilled, rejected);
                    }
                    step((generator = generator.apply(thisArg, _arguments || [])).next());
                });
            };
            Object.defineProperty(exports, '__esModule', { value: true });
            const either_1 = _dereq_('spica/either');
            const fetch_1 = _dereq_('./module/fetch');
            const update_1 = _dereq_('./module/update');
            const content_1 = _dereq_('./module/update/content');
            const path_1 = _dereq_('../store/path');
            const error_1 = _dereq_('../data/error');
            var entity_1 = _dereq_('./model/eav/entity');
            exports.RouterEntity = entity_1.RouterEntity;
            exports.RouterEntityState = entity_1.RouterEntityState;
            function route(entity, io) {
                return __awaiter(this, void 0, void 0, function* () {
                    return either_1.Right(undefined).bind(entity.state.process.either).bind(() => match(io.document, entity.config.areas) ? either_1.Right(undefined) : either_1.Left(new error_1.DomainError(`Failed to match areas.`))).fmap(() => fetch_1.fetch(entity.event.request, entity.config, entity.state.process)).fmap(p => __awaiter(this, void 0, void 0, function* () {
                        return (yield p).fmap(([res, seq]) => update_1.update(entity, res, seq, {
                            document: io.document,
                            position: path_1.loadPosition
                        })).extract(either_1.Left);
                    })).extract(either_1.Left);
                    function match(document, areas) {
                        return content_1.separate({
                            src: document,
                            dst: document
                        }, areas).extract(() => false, () => true);
                    }
                });
            }
            exports.route = route;
        },
        {
            '../data/error': 257,
            '../store/path': 275,
            './model/eav/entity': 260,
            './module/fetch': 262,
            './module/update': 264,
            './module/update/content': 266,
            'spica/either': 162
        }
    ],
    260: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            class RouterEntity {
                constructor(config, event, state) {
                    this.config = config;
                    this.event = event;
                    this.state = state;
                    void Object.freeze(this);
                }
            }
            exports.RouterEntity = RouterEntity;
            class RouterEntityState {
                constructor(process, scripts) {
                    this.process = process;
                    this.scripts = scripts;
                    void Object.freeze(this);
                }
            }
            exports.RouterEntityState = RouterEntityState;
        },
        {}
    ],
    261: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const html_1 = _dereq_('../../../../../../lib/html');
            class FetchResponse {
                constructor(url, xhr) {
                    this.url = url;
                    this.xhr = xhr;
                    this.header = name => this.xhr.getResponseHeader(name);
                    this.document = this.xhr.response;
                    void html_1.fix(this.document);
                    void Object.freeze(this);
                }
            }
            exports.FetchResponse = FetchResponse;
        },
        { '../../../../../../lib/html': 291 }
    ],
    262: [
        function (_dereq_, module, exports) {
            'use strict';
            var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
                return new (P || (P = Promise))(function (resolve, reject) {
                    function fulfilled(value) {
                        try {
                            step(generator.next(value));
                        } catch (e) {
                            reject(e);
                        }
                    }
                    function rejected(value) {
                        try {
                            step(generator['throw'](value));
                        } catch (e) {
                            reject(e);
                        }
                    }
                    function step(result) {
                        result.done ? resolve(result.value) : new P(function (resolve) {
                            resolve(result.value);
                        }).then(fulfilled, rejected);
                    }
                    step((generator = generator.apply(thisArg, _arguments || [])).next());
                });
            };
            Object.defineProperty(exports, '__esModule', { value: true });
            const either_1 = _dereq_('spica/either');
            const xhr_1 = _dereq_('../module/fetch/xhr');
            const error_1 = _dereq_('../../data/error');
            const url_1 = _dereq_('../../../../lib/url');
            function fetch({method, url, body}, {
                redirect,
                fetch: {headers, timeout, wait},
                sequence
            }, process) {
                return __awaiter(this, void 0, void 0, function* () {
                    const req = xhr_1.xhr(method, url, headers, body, timeout, redirect, process);
                    void window.dispatchEvent(new Event('pjax:fetch'));
                    const [res, seq] = yield Promise.all([
                        req,
                        sequence.fetch(undefined, {
                            path: new url_1.URL(url).path,
                            method,
                            headers,
                            body
                        }),
                        new Promise(resolve => void setTimeout(resolve, wait))
                    ]);
                    return res.bind(process.either).bind(res => new url_1.URL(res.url).origin === new url_1.URL(url).origin ? either_1.Right([
                        res,
                        seq
                    ]) : either_1.Left(new error_1.DomainError(`Request is redirected to the different domain url ${ new url_1.URL(res.url).href }`)));
                });
            }
            exports.fetch = fetch;
        },
        {
            '../../../../lib/url': 294,
            '../../data/error': 257,
            '../module/fetch/xhr': 263,
            'spica/either': 162
        }
    ],
    263: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const promise_1 = _dereq_('spica/promise');
            const sequence_1 = _dereq_('spica/sequence');
            const either_1 = _dereq_('spica/either');
            const fetch_1 = _dereq_('../../model/eav/value/fetch');
            const url_1 = _dereq_('../../../../data/model/domain/url');
            const error_1 = _dereq_('../../../data/error');
            const url_2 = _dereq_('../../../../../lib/url');
            function xhr(method, url, headers, body, timeout, redirect, cancellation) {
                const url_ = url_1.standardizeUrl(redirect(new url_2.URL(url).path));
                const xhr = new XMLHttpRequest();
                return new promise_1.AtomicPromise(resolve => (void xhr.open(method, new url_2.URL(url_).path, true), void [...headers.entries()].forEach(([name, value]) => void xhr.setRequestHeader(name, value)), xhr.responseType = 'document', xhr.timeout = timeout, void xhr.send(body), void xhr.addEventListener('abort', () => void resolve(either_1.Left(new error_1.DomainError(`Failed to request a page by abort.`)))), void xhr.addEventListener('error', () => void resolve(either_1.Left(new error_1.DomainError(`Failed to request a page by error.`)))), void xhr.addEventListener('timeout', () => void resolve(either_1.Left(new error_1.DomainError(`Failed to request a page by timeout.`)))), void xhr.addEventListener('load', () => void verify(xhr).fmap(xhr => new fetch_1.FetchResponse(xhr.responseURL && url === url_ ? url_1.standardizeUrl(xhr.responseURL) : url, xhr)).extract(err => void resolve(either_1.Left(err)), res => void resolve(either_1.Right(res)))), void cancellation.register(() => void xhr.abort())));
            }
            exports.xhr = xhr;
            function verify(xhr) {
                return either_1.Right(xhr).bind(xhr => /2..|304/.test(`${ xhr.status }`) ? either_1.Right(xhr) : either_1.Left(new error_1.DomainError(`Faild to validate the status of response.`))).bind(xhr => match(xhr.getResponseHeader('Content-Type'), 'text/html') ? either_1.Right(xhr) : either_1.Left(new error_1.DomainError(`Faild to validate the content type of response.`)));
            }
            function match(actualContentType, expectedContentType) {
                return sequence_1.Sequence.intersect(sequence_1.Sequence.from(parse(actualContentType || '').sort()), sequence_1.Sequence.from(parse(expectedContentType).sort()), (a, b) => a.localeCompare(b)).take(1).extract().length > 0;
                function parse(headerValue) {
                    return headerValue.split(';').map(type => type.trim()).filter(type => type.length > 0);
                }
            }
            exports.match_ = match;
        },
        {
            '../../../../../lib/url': 294,
            '../../../../data/model/domain/url': 253,
            '../../../data/error': 257,
            '../../model/eav/value/fetch': 261,
            'spica/either': 162,
            'spica/promise': 227,
            'spica/sequence': 228
        }
    ],
    264: [
        function (_dereq_, module, exports) {
            'use strict';
            var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
                return new (P || (P = Promise))(function (resolve, reject) {
                    function fulfilled(value) {
                        try {
                            step(generator.next(value));
                        } catch (e) {
                            reject(e);
                        }
                    }
                    function rejected(value) {
                        try {
                            step(generator['throw'](value));
                        } catch (e) {
                            reject(e);
                        }
                    }
                    function step(result) {
                        result.done ? resolve(result.value) : new P(function (resolve) {
                            resolve(result.value);
                        }).then(fulfilled, rejected);
                    }
                    step((generator = generator.apply(thisArg, _arguments || [])).next());
                });
            };
            Object.defineProperty(exports, '__esModule', { value: true });
            const promise_1 = _dereq_('spica/promise');
            const either_1 = _dereq_('spica/either');
            const hlist_1 = _dereq_('spica/hlist');
            const router_1 = _dereq_('../../event/router');
            const blur_1 = _dereq_('../module/update/blur');
            const url_1 = _dereq_('../module/update/url');
            const title_1 = _dereq_('../module/update/title');
            const head_1 = _dereq_('../module/update/head');
            const content_1 = _dereq_('../module/update/content');
            const css_1 = _dereq_('../module/update/css');
            const script_1 = _dereq_('../module/update/script');
            const focus_1 = _dereq_('../module/update/focus');
            const scroll_1 = _dereq_('../module/update/scroll');
            const path_1 = _dereq_('../../store/path');
            const error_1 = _dereq_('../../data/error');
            function update({event, config, state}, response, seq, io) {
                const {process} = state;
                const documents = {
                    src: response.document,
                    dst: io.document
                };
                return promise_1.AtomicPromise.resolve(seq).then(process.either).then(m => m.bind(() => content_1.separate(documents, config.areas).extract(() => either_1.Left(new error_1.DomainError(`Failed to separate the areas.`)), () => m)).fmap(seqA => (void window.dispatchEvent(new Event('pjax:unload')), config.sequence.unload(seqA, response)))).then(m => either_1.Either.sequence(m)).then(process.promise).then(m => m.bind(seqB => content_1.separate(documents, config.areas).fmap(([area]) => [
                    seqB,
                    area
                ]).extract(() => either_1.Left(new error_1.DomainError(`Failed to separate the areas.`)), process.either)).bind(([seqB, area]) => (void config.rewrite(documents.src, area), content_1.separate(documents, config.areas).fmap(([, areas]) => [
                    seqB,
                    areas
                ]).extract(() => either_1.Left(new error_1.DomainError(`Failed to separate the areas.`)), process.either)))).then(process.promise).then(m => m.fmap(([seqB, areas]) => new hlist_1.HNil().extend(() => (void blur_1.blur(documents.dst), void url_1.url(new router_1.RouterEventLocation(response.url), documents.src.title, event.type, event.source, config.replace), void title_1.title(documents), void path_1.saveTitle(), void head_1.head(documents, config.update.head, config.update.ignore), process.either(content_1.content(documents, areas)).fmap(([as, ps]) => [
                    as,
                    promise_1.AtomicPromise.all(ps)
                ]))).extend(p => __awaiter(this, void 0, void 0, function* () {
                    return (yield p).fmap(([areas]) => __awaiter(this, void 0, void 0, function* () {
                        config.update.css ? void css_1.css(documents, config.update.ignore) : undefined;
                        void io.document.dispatchEvent(new Event('pjax:content'));
                        const seqC = yield config.sequence.content(seqB, areas);
                        const ssm = config.update.script ? yield script_1.script(documents, state.scripts, config.update, Math.max(config.fetch.timeout, 1000) * 10, process) : yield process.either([
                            [],
                            promise_1.AtomicPromise.resolve(process.either([]))
                        ]);
                        void focus_1.focus(event.type, documents.dst);
                        void scroll_1.scroll(event.type, documents.dst, {
                            hash: event.location.dest.fragment,
                            position: io.position
                        });
                        void path_1.savePosition();
                        void io.document.dispatchEvent(new Event('pjax:ready'));
                        return [
                            ssm.fmap(([ss, ap]) => [
                                ss,
                                ap.then(m => m.extract())
                            ]),
                            yield config.sequence.ready(seqC)
                        ];
                    })).fmap(p => p.then(([m, seqD]) => m.fmap(sst => [
                        sst,
                        seqD
                    ]))).extract(e => promise_1.AtomicPromise.resolve(either_1.Left(e)));
                })).reverse().tuple())).then(process.promise).then(m => m.fmap(([p1, p2]) => (void promise_1.AtomicPromise.all([
                    p1,
                    p2
                ]).then(([m1, m2]) => m1.bind(([, cp]) => m2.fmap(([[, sp], seqD]) => void promise_1.AtomicPromise.all([
                    cp,
                    sp
                ]).then(process.either).then(m => m.fmap(([events]) => (void window.dispatchEvent(new Event('pjax:load')), void config.sequence.load(seqD, events))).extract(() => undefined)))).extract(() => undefined)), p2))).then(m => either_1.Either.sequence(m).then(m => m.join())).then(m => m.fmap(([sst]) => sst));
            }
            exports.update = update;
        },
        {
            '../../data/error': 257,
            '../../event/router': 258,
            '../../store/path': 275,
            '../module/update/blur': 265,
            '../module/update/content': 266,
            '../module/update/css': 267,
            '../module/update/focus': 268,
            '../module/update/head': 269,
            '../module/update/script': 270,
            '../module/update/scroll': 271,
            '../module/update/title': 273,
            '../module/update/url': 274,
            'spica/either': 162,
            'spica/hlist': 167,
            'spica/promise': 227
        }
    ],
    265: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            function blur(document) {
                if (document !== window.document || document.activeElement === document.body)
                    return;
                void document.activeElement.blur();
                void document.body.focus();
            }
            exports.blur = blur;
        },
        {}
    ],
    266: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const promise_1 = _dereq_('spica/promise');
            const maybe_1 = _dereq_('spica/maybe');
            const concat_1 = _dereq_('spica/concat');
            const typed_dom_1 = _dereq_('typed-dom');
            const dom_1 = _dereq_('../../../../../lib/dom');
            const script_1 = _dereq_('./script');
            function content(documents, areas, io = { replace: (src, dst) => void dst.parentNode.replaceChild(src, dst) }) {
                return [
                    areas.map(r => r.dst).reduce(concat_1.concat, []),
                    areas.map(load).reduce(concat_1.concat, [])
                ];
                function load(area) {
                    return area.src.map((_, i) => ({
                        src: documents.dst.importNode(area.src[i].cloneNode(true), true),
                        dst: area.dst[i]
                    })).map(area => (void replace(area), dom_1.find(area.src, 'img, iframe, frame').map(wait))).reduce(concat_1.concat, []);
                    function replace(area) {
                        const unescape = dom_1.find(area.src, 'script').map(script_1.escape).reduce((f, g) => () => (void f(), void g()), () => undefined);
                        void io.replace(area.src, area.dst);
                        void unescape();
                    }
                }
            }
            exports.content = content;
            function separate(documents, areas) {
                return areas.reduce((m, area) => maybe_1.Maybe.mplus(m, sep(documents, area).fmap(as => [
                    area,
                    as
                ])), maybe_1.Nothing);
                function sep(documents, area) {
                    return split(area).map(area => ({
                        src: dom_1.find(documents.src, area),
                        dst: dom_1.find(documents.dst, area)
                    })).reduce((acc, area) => acc.bind(as => pair(area).fmap(a => concat_1.concat(as, [a]))), maybe_1.Just([]));
                    function pair(area) {
                        return maybe_1.Just(area).guard(validate(area));
                        function validate(area) {
                            return area.src.length > 0 && area.src.length === area.dst.length;
                        }
                    }
                }
            }
            exports.separate = separate;
            function split(area) {
                return (area.match(/(?:[^,\(\[]+|\(.*?\)|\[.*?\])+/g) || []).map(a => a.trim());
            }
            exports._split = split;
            function wait(el) {
                return promise_1.AtomicPromise.race([
                    new promise_1.AtomicPromise(resolve => void typed_dom_1.once(el, 'load', resolve)),
                    new promise_1.AtomicPromise(resolve => void typed_dom_1.once(el, 'abort', resolve)),
                    new promise_1.AtomicPromise(resolve => void typed_dom_1.once(el, 'error', resolve))
                ]);
            }
            exports._wait = wait;
        },
        {
            '../../../../../lib/dom': 289,
            './script': 270,
            'spica/concat': 160,
            'spica/maybe': 168,
            'spica/promise': 227,
            'typed-dom': 239
        }
    ],
    267: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const dom_1 = _dereq_('../../../../../lib/dom');
            const sync_1 = _dereq_('./sync');
            function css(documents, ignore) {
                const selector = 'link[rel~="stylesheet"], style';
                return void [
                    'head',
                    'body'
                ].map(query => [
                    documents.src.querySelector(query),
                    documents.dst.querySelector(query)
                ]).forEach(([src, dst]) => void sync_1.sync(sync_1.pair(list(src), list(dst), (a, b) => a.outerHTML === b.outerHTML), dst));
                function list(source) {
                    return dom_1.find(source, selector).filter(el => !el.matches(ignore.trim() || '_'));
                }
            }
            exports.css = css;
        },
        {
            '../../../../../lib/dom': 289,
            './sync': 272
        }
    ],
    268: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const router_1 = _dereq_('../../../event/router');
            const dom_1 = _dereq_('../../../../../lib/dom');
            function focus(type, document) {
                switch (type) {
                case router_1.RouterEventType.click:
                case router_1.RouterEventType.submit:
                    return void dom_1.find(document, '[autofocus]').slice(-1).filter(el => el.closest('html') === window.document.documentElement && el !== document.activeElement).forEach(el => void el.focus());
                case router_1.RouterEventType.popstate:
                    return;
                default:
                    throw new TypeError(type);
                }
            }
            exports.focus = focus;
        },
        {
            '../../../../../lib/dom': 289,
            '../../../event/router': 258
        }
    ],
    269: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const sync_1 = _dereq_('./sync');
            const dom_1 = _dereq_('../../../../../lib/dom');
            function head(documents, selector, ignore) {
                ignore += selector.includes('link') ? ', link[rel~="stylesheet"]' : '';
                return void sync_1.sync(sync_1.pair(list(documents.src.head), list(documents.dst.head), (a, b) => a.outerHTML === b.outerHTML), documents.dst.head);
                function list(source) {
                    return dom_1.find(source, selector).filter(el => !el.matches(ignore.trim() || '_'));
                }
            }
            exports.head = head;
        },
        {
            '../../../../../lib/dom': 289,
            './sync': 272
        }
    ],
    270: [
        function (_dereq_, module, exports) {
            'use strict';
            var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
                return new (P || (P = Promise))(function (resolve, reject) {
                    function fulfilled(value) {
                        try {
                            step(generator.next(value));
                        } catch (e) {
                            reject(e);
                        }
                    }
                    function rejected(value) {
                        try {
                            step(generator['throw'](value));
                        } catch (e) {
                            reject(e);
                        }
                    }
                    function step(result) {
                        result.done ? resolve(result.value) : new P(function (resolve) {
                            resolve(result.value);
                        }).then(fulfilled, rejected);
                    }
                    step((generator = generator.apply(thisArg, _arguments || [])).next());
                });
            };
            Object.defineProperty(exports, '__esModule', { value: true });
            const promise_1 = _dereq_('spica/promise');
            const either_1 = _dereq_('spica/either');
            const tuple_1 = _dereq_('spica/tuple');
            const concat_1 = _dereq_('spica/concat');
            const dom_1 = _dereq_('../../../../../lib/dom');
            const error_1 = _dereq_('../../../../../lib/error');
            const url_1 = _dereq_('../../../../../lib/url');
            const integrity_1 = _dereq_('../../../../../lib/integrity');
            const url_2 = _dereq_('../../../../data/model/domain/url');
            const typed_dom_1 = _dereq_('typed-dom');
            function script(documents, skip, selector, timeout, cancellation, io = {
                fetch,
                evaluate
            }) {
                const scripts = dom_1.find(documents.src, 'script').filter(el => !el.type || /(?:application|text)\/(?:java|ecma)script|module/i.test(el.type)).filter(el => !el.matches(selector.ignore.trim() || '_')).filter(el => el.hasAttribute('src') ? !skip.has(new url_1.URL(url_2.standardizeUrl(el.src)).href) || el.matches(selector.reload.trim() || '_') : true);
                const {ss, as} = scripts.reduce((o, script) => {
                    switch (true) {
                    case script.matches('[src][async], [src][defer]'):
                        void o.as.push(script);
                        break;
                    default:
                        void o.ss.push(script);
                    }
                    return o;
                }, {
                    ss: [],
                    as: []
                });
                return promise_1.AtomicPromise.all([
                    promise_1.AtomicPromise.all(request(ss)).then(run),
                    promise_1.AtomicPromise.all(request(as)).then(run)
                ]).then(([sm, am]) => __awaiter(this, void 0, void 0, function* () {
                    return sm.fmap(p => __awaiter(this, void 0, void 0, function* () {
                        return (yield p).fmap(([ss1, ap1]) => [
                            ss1,
                            ap1.then(as1 => __awaiter(this, void 0, void 0, function* () {
                                return am.fmap(p => __awaiter(this, void 0, void 0, function* () {
                                    return (yield p).fmap(([ss2, ap2]) => promise_1.AtomicPromise.all([
                                        as1,
                                        either_1.Right(ss2),
                                        ap2
                                    ]).then(sst => sst.reduce((m1, m2) => m1.bind(s1 => m2.fmap(s2 => concat_1.concat(s1, s2)))))).extract(either_1.Left);
                                })).extract(either_1.Left);
                            }))
                        ]);
                    })).extract(either_1.Left);
                }));
                function request(scripts) {
                    return scripts.map(script => io.fetch(script, timeout));
                }
                function run(responses) {
                    return responses.reduce((results, m) => m.bind(() => results), responses.reduce((results, m) => results.bind(cancellation.either).bind(([sp, ap]) => m.fmap(([script, code]) => io.evaluate(script, code, selector.logger, skip, promise_1.AtomicPromise.all(sp), cancellation)).bind(m => m.extract(p => either_1.Right(tuple_1.tuple([
                        concat_1.concat(sp, [p]),
                        ap
                    ])), p => either_1.Right(tuple_1.tuple([
                        sp,
                        concat_1.concat(ap, [p])
                    ]))))), either_1.Right([
                        [],
                        []
                    ]))).fmap(([sp, ap]) => promise_1.AtomicPromise.all(sp).then(m => either_1.Either.sequence(m)).then(sm => sm.fmap(ss => tuple_1.tuple([
                        ss,
                        Promise.all(ap).then(m => either_1.Either.sequence(m))
                    ]))));
                }
            }
            exports.script = script;
            function fetch(script, timeout) {
                return __awaiter(this, void 0, void 0, function* () {
                    if (!script.hasAttribute('src'))
                        return either_1.Right([
                            script,
                            script.text
                        ]);
                    if (script.type.toLowerCase() === 'module')
                        return either_1.Right([
                            script,
                            ''
                        ]);
                    const xhr = new XMLHttpRequest();
                    void xhr.open('GET', script.src, true);
                    xhr.timeout = timeout;
                    void xhr.send();
                    return new promise_1.AtomicPromise(resolve => [
                        'load',
                        'abort',
                        'error',
                        'timeout'
                    ].forEach(type => {
                        switch (type) {
                        case 'load':
                            return void xhr.addEventListener(type, () => !script.integrity || integrity_1.checkData(xhr.response, script.integrity) ? void resolve(either_1.Right([
                                script,
                                xhr.response
                            ])) : void resolve(either_1.Left(new Error(`${ script.src }: Invalid integrity.`))));
                        case 'error':
                            return void xhr.addEventListener(type, () => script.matches('[src][async]') ? void resolve(retry(script).then(() => either_1.Right([
                                script,
                                ''
                            ]), () => either_1.Left(new Error(`${ script.src }: ${ xhr.statusText }`)))) : void resolve(either_1.Left(new Error(`${ script.src }: ${ xhr.statusText }`))));
                        default:
                            return void xhr.addEventListener(type, () => void resolve(either_1.Left(new Error(`${ script.src }: ${ xhr.statusText }`))));
                        }
                    }));
                });
            }
            exports._fetch = fetch;
            function evaluate(script, code, logger, skip, wait, cancellation) {
                script = script.ownerDocument === document ? script : document.importNode(script.cloneNode(true), true);
                const logging = !!script.parentElement && script.parentElement.matches(logger.trim() || '_');
                const container = document.querySelector(logging ? script.parentElement.id ? `#${ script.parentElement.id }` : script.parentElement.tagName : '_') || document.body;
                const unescape = escape(script);
                void container.appendChild(script);
                void unescape();
                !logging && void script.remove();
                const result = promise_1.AtomicPromise.resolve(wait).then(cancellation.promise).then(evaluate);
                return script.matches('[src][async]') ? either_1.Right(result) : either_1.Left(result);
                function evaluate() {
                    if (script.matches('[type="module"][src]')) {
                        return promise_1.AtomicPromise.resolve(Promise.resolve().then(() => _dereq_(script.src))).catch(reason => reason.message.startsWith('Failed to load ') && script.matches('[src][async]') ? retry(script).catch(() => promise_1.AtomicPromise.reject(reason)) : promise_1.AtomicPromise.reject(reason)).then(() => (void script.dispatchEvent(new Event('load')), either_1.Right(script)), reason => (void script.dispatchEvent(new Event('error')), either_1.Left(new error_1.FatalError(reason instanceof Error ? reason.message : reason + ''))));
                    } else {
                        try {
                            if (new url_1.URL(url_2.standardizeUrl(window.location.href)).path !== new url_1.URL(url_2.standardizeUrl(window.location.href)).path)
                                throw new error_1.FatalError('Expired.');
                            if (skip.has(new url_1.URL(url_2.standardizeUrl(window.location.href)).href))
                                throw new error_1.FatalError('Expired.');
                            void (0, eval)(code);
                            script.hasAttribute('src') && void script.dispatchEvent(new Event('load'));
                            return promise_1.AtomicPromise.resolve(either_1.Right(script));
                        } catch (reason) {
                            script.hasAttribute('src') && void script.dispatchEvent(new Event('error'));
                            return promise_1.AtomicPromise.resolve(either_1.Left(new error_1.FatalError(reason instanceof Error ? reason.message : reason + '')));
                        }
                    }
                }
            }
            exports._evaluate = evaluate;
            function escape(script) {
                const src = script.hasAttribute('src') ? script.getAttribute('src') : null;
                const code = script.text;
                void script.removeAttribute('src');
                script.text = '';
                return () => (script.text = ' ', script.text = code, typeof src === 'string' ? void script.setAttribute('src', src) : undefined);
            }
            exports.escape = escape;
            function retry(script) {
                if (new url_1.URL(url_2.standardizeUrl(script.src)).origin === new url_1.URL(url_2.standardizeUrl(window.location.href)).origin)
                    return promise_1.AtomicPromise.reject(new Error());
                script = typed_dom_1.html('script', Object.values(script.attributes).reduce((o, {name, value}) => (o[name] = value, o), {}), [...script.childNodes]);
                return new promise_1.AtomicPromise((resolve, reject) => (void script.addEventListener('load', () => void resolve()), void script.addEventListener('error', reject), void document.body.appendChild(script), void script.remove()));
            }
        },
        {
            '../../../../../lib/dom': 289,
            '../../../../../lib/error': 290,
            '../../../../../lib/integrity': 292,
            '../../../../../lib/url': 294,
            '../../../../data/model/domain/url': 253,
            'spica/concat': 160,
            'spica/either': 162,
            'spica/promise': 227,
            'spica/tuple': 232,
            'typed-dom': 239
        }
    ],
    271: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const router_1 = _dereq_('../../../event/router');
            function scroll(type, document, env, io = {
                scrollToElement: el => void el.scrollIntoView(),
                scrollToPosition: ({top, left}) => void window.scrollTo(left, top),
                hash
            }) {
                switch (type) {
                case router_1.RouterEventType.click:
                    if (io.hash(document, env.hash, io))
                        return;
                    return void io.scrollToPosition({
                        top: 0,
                        left: 0
                    });
                case router_1.RouterEventType.submit:
                    return void io.scrollToPosition({
                        top: 0,
                        left: 0
                    });
                case router_1.RouterEventType.popstate:
                    return void io.scrollToPosition(env.position());
                default:
                    throw new TypeError(type);
                }
            }
            exports.scroll = scroll;
            function hash(document, hash, io = { scrollToElement: el => void el.scrollIntoView() }) {
                const index = hash.slice(1);
                if (index.length === 0)
                    return false;
                const el = document.getElementById(index) || document.getElementsByName(index)[0];
                if (!el)
                    return false;
                void io.scrollToElement(el);
                return true;
            }
            exports._hash = hash;
        },
        { '../../../event/router': 258 }
    ],
    272: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const either_1 = _dereq_('spica/either');
            const concat_1 = _dereq_('spica/concat');
            function sync(pairs, fallback, io = {
                before,
                remove
            }) {
                return void pairs.forEach(([srcs, dst]) => (void io.before(parent(dst), srcs.slice(-1).some(src => !!dst && src.outerHTML === dst.outerHTML) ? srcs.slice(0, -1) : srcs, dst), dst && srcs.length === 0 ? void io.remove(dst) : undefined));
                function parent(dst) {
                    return dst ? dst.parentElement : fallback;
                }
            }
            exports.sync = sync;
            function pair(srcs, dsts, compare) {
                const link = bind(srcs, dsts, compare);
                void dsts.filter(dst => !link.has(dst)).forEach(dst => void link.set(dst, []));
                return [...link].map(([dst, srcs]) => [
                    srcs,
                    dst
                ]);
                function bind(srcs, dsts, compare) {
                    return srcs.reduce((link, src) => dsts.length === 0 ? link.set(null, concat_1.concat(link.get(null) || [], [src])) : dsts.reduce((m, dst) => m.bind(link => !link.has(dst) && compare(src, dst) ? (void link.set(dst, concat_1.concat(link.get(null) || [], [src])), void link.delete(null), either_1.Left(link)) : either_1.Right(link)), either_1.Right(link)).fmap(link => link.set(null, concat_1.concat(link.get(null) || [], [src]))).extract(link => link), new Map());
                }
            }
            exports.pair = pair;
            function before(parent, children, ref) {
                return void children.map(child => parent.ownerDocument.importNode(child.cloneNode(true), true)).forEach(child => void parent.insertBefore(child, ref));
            }
            function remove(el) {
                return void el.remove();
            }
        },
        {
            'spica/concat': 160,
            'spica/either': 162
        }
    ],
    273: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            function title(documents) {
                documents.dst.title = documents.src.title;
            }
            exports.title = title;
        },
        {}
    ],
    274: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const router_1 = _dereq_('../../../event/router');
            const typed_dom_1 = _dereq_('typed-dom');
            void typed_dom_1.bind(document, 'pjax:ready', () => void window.history.replaceState(window.history.state, window.document.title));
            function url(location, title, type, source, replaceable) {
                switch (true) {
                case isReplaceable(type, source, replaceable):
                    return void window.history.replaceState({}, title, location.dest.href);
                case isRegisterable(type, location):
                    return void window.history.pushState({}, title, location.dest.href);
                default:
                    return;
                }
            }
            exports.url = url;
            function isRegisterable(type, location) {
                if (location.dest.href === location.orig.href)
                    return false;
                switch (type) {
                case router_1.RouterEventType.click:
                case router_1.RouterEventType.submit:
                    return true;
                case router_1.RouterEventType.popstate:
                    return false;
                default:
                    throw new TypeError(type);
                }
            }
            exports._isRegisterable = isRegisterable;
            function isReplaceable(type, source, selector) {
                switch (type) {
                case router_1.RouterEventType.click:
                case router_1.RouterEventType.submit:
                    return source.matches(selector.trim() || '_');
                case router_1.RouterEventType.popstate:
                    return false;
                default:
                    throw new TypeError(type);
                }
            }
            exports._isReplaceable = isReplaceable;
        },
        {
            '../../../event/router': 258,
            'typed-dom': 239
        }
    ],
    275: [
        function (_dereq_, module, exports) {
            'use strict';
            function __export(m) {
                for (var p in m)
                    if (!exports.hasOwnProperty(p))
                        exports[p] = m[p];
            }
            Object.defineProperty(exports, '__esModule', { value: true });
            __export(_dereq_('../../data/store/state'));
        },
        { '../../data/store/state': 254 }
    ],
    276: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const error_1 = _dereq_('../../../lib/error');
            class InterfaceError extends error_1.PjaxError {
                constructor(msg) {
                    super(`Interface: ${ msg }`);
                }
            }
            exports.InterfaceError = InterfaceError;
        },
        { '../../../lib/error': 290 }
    ],
    277: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const supervisor_legacy_1 = _dereq_('spica/supervisor.legacy');
            const promise_1 = _dereq_('spica/promise');
            const typed_dom_1 = _dereq_('typed-dom');
            class ClickView {
                constructor(document, selector, listener) {
                    this.sv = new class extends supervisor_legacy_1.Supervisor {
                    }();
                    this.close = () => void this.sv.terminate();
                    void this.sv.register('', () => new promise_1.AtomicPromise(() => void this.sv.events.exit.monitor([], typed_dom_1.delegate(document, selector, 'click', ev => {
                        if (!(ev.currentTarget instanceof HTMLAnchorElement))
                            return;
                        if (typeof ev.currentTarget.href !== 'string')
                            return;
                        void listener(ev);
                    }))), undefined);
                    void this.sv.cast('', undefined);
                }
            }
            exports.ClickView = ClickView;
        },
        {
            'spica/promise': 227,
            'spica/supervisor.legacy': 230,
            'typed-dom': 239
        }
    ],
    278: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const supervisor_legacy_1 = _dereq_('spica/supervisor.legacy');
            const promise_1 = _dereq_('spica/promise');
            const typed_dom_1 = _dereq_('typed-dom');
            const url_1 = _dereq_('../../../data/model/domain/url');
            const url_2 = _dereq_('../../service/state/url');
            class NavigationView {
                constructor(window, listener) {
                    this.sv = new class extends supervisor_legacy_1.Supervisor {
                    }();
                    this.close = () => void this.sv.terminate();
                    void this.sv.register('', () => new promise_1.AtomicPromise(() => void this.sv.events.exit.monitor([], typed_dom_1.bind(window, 'popstate', ev => {
                        if (url_1.standardizeUrl(window.location.href) === url_2.docurl.href)
                            return;
                        void listener(ev);
                    }))), undefined);
                    void this.sv.cast('', undefined);
                }
            }
            exports.NavigationView = NavigationView;
        },
        {
            '../../../data/model/domain/url': 253,
            '../../service/state/url': 288,
            'spica/promise': 227,
            'spica/supervisor.legacy': 230,
            'typed-dom': 239
        }
    ],
    279: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const supervisor_legacy_1 = _dereq_('spica/supervisor.legacy');
            const promise_1 = _dereq_('spica/promise');
            const typed_dom_1 = _dereq_('typed-dom');
            const throttle_1 = _dereq_('spica/throttle');
            class ScrollView {
                constructor(window, listener) {
                    this.sv = new class extends supervisor_legacy_1.Supervisor {
                    }();
                    this.close = () => void this.sv.terminate();
                    void this.sv.register('', () => new promise_1.AtomicPromise(() => void this.sv.events.exit.monitor([], typed_dom_1.bind(window, 'scroll', throttle_1.debounce(100, ev => {
                        void listener(ev);
                    }), { passive: true }))), undefined);
                    void this.sv.cast('', undefined);
                }
            }
            exports.ScrollView = ScrollView;
        },
        {
            'spica/promise': 227,
            'spica/supervisor.legacy': 230,
            'spica/throttle': 231,
            'typed-dom': 239
        }
    ],
    280: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const supervisor_legacy_1 = _dereq_('spica/supervisor.legacy');
            const promise_1 = _dereq_('spica/promise');
            const typed_dom_1 = _dereq_('typed-dom');
            class SubmitView {
                constructor(document, selector, listener) {
                    this.sv = new class extends supervisor_legacy_1.Supervisor {
                    }();
                    this.close = () => void this.sv.terminate();
                    void this.sv.register('', () => new promise_1.AtomicPromise(() => void this.sv.events.exit.monitor([], typed_dom_1.delegate(document, selector, 'submit', ev => {
                        if (!(ev.currentTarget instanceof HTMLFormElement))
                            return;
                        void listener(ev);
                    }))), undefined);
                    void this.sv.cast('', undefined);
                }
            }
            exports.SubmitView = SubmitView;
        },
        {
            'spica/promise': 227,
            'spica/supervisor.legacy': 230,
            'typed-dom': 239
        }
    ],
    281: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const router_1 = _dereq_('./router');
            const process_1 = _dereq_('./state/process');
            const html_1 = _dereq_('../../../lib/html');
            const assign_1 = _dereq_('spica/assign');
            const typed_dom_1 = _dereq_('typed-dom');
            class API {
                static assign(url, option, io = {
                    document: window.document,
                    router: router_1.route
                }) {
                    return void click(url, event => void io.router(new router_1.Config(option), new router_1.RouterEvent(event), process_1.process, io));
                }
                static replace(url, option, io = {
                    document: window.document,
                    router: router_1.route
                }) {
                    return void click(url, event => void io.router(new router_1.Config(assign_1.extend({}, option, { replace: '*' })), new router_1.RouterEvent(event), process_1.process, io));
                }
            }
            exports.API = API;
            function click(url, callback) {
                const el = document.createElement('a');
                el.href = url;
                void html_1.parse('').extract().body.appendChild(el);
                void typed_dom_1.once(el, 'click', callback);
                void el.click();
            }
        },
        {
            '../../../lib/html': 291,
            './router': 283,
            './state/process': 285,
            'spica/assign': 154,
            'typed-dom': 239
        }
    ],
    282: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const api_1 = _dereq_('./api');
            const supervisor_legacy_1 = _dereq_('spica/supervisor.legacy');
            const cancellation_1 = _dereq_('spica/cancellation');
            const promise_1 = _dereq_('spica/promise');
            const url_1 = _dereq_('../../../lib/url');
            const url_2 = _dereq_('../../data/model/domain/url');
            const click_1 = _dereq_('../module/view/click');
            const submit_1 = _dereq_('../module/view/submit');
            const navigation_1 = _dereq_('../module/view/navigation');
            const scroll_1 = _dereq_('../module/view/scroll');
            const router_1 = _dereq_('./router');
            const url_3 = _dereq_('./state/url');
            _dereq_('./state/scroll-restoration');
            const process_1 = _dereq_('./state/process');
            const store_1 = _dereq_('../../application/store');
            const view = new class extends supervisor_legacy_1.Supervisor {
            }();
            class GUI extends api_1.API {
                constructor(option, io = {
                    document: window.document,
                    router: router_1.route
                }) {
                    super();
                    this.option = option;
                    this.io = io;
                    const config = new router_1.Config(this.option);
                    void view.register('', {
                        init: s => s,
                        main: (_, s) => new promise_1.AtomicPromise(() => {
                            void s.register(new click_1.ClickView(this.io.document, config.link, event => void io.router(config, new router_1.RouterEvent(event), process_1.process, io)).close);
                            void s.register(new submit_1.SubmitView(this.io.document, config.form, event => void io.router(config, new router_1.RouterEvent(event), process_1.process, io)).close);
                            void s.register(new navigation_1.NavigationView(window, event => void io.router(config, new router_1.RouterEvent(event), process_1.process, io)).close);
                            void s.register(new scroll_1.ScrollView(window, () => {
                                if (s.canceled)
                                    return;
                                if (new url_1.URL(url_2.standardizeUrl(window.location.href)).href !== url_3.docurl.href)
                                    return;
                                void store_1.savePosition();
                            }).close);
                        }),
                        exit: (_, s) => void s.cancel()
                    }, new cancellation_1.Cancellation(), new Error('Kill'));
                    void view.cast('', undefined);
                }
                assign(url) {
                    return void api_1.API.assign(url, this.option, this.io);
                }
                replace(url) {
                    return void api_1.API.replace(url, this.option, this.io);
                }
            }
            exports.GUI = GUI;
        },
        {
            '../../../lib/url': 294,
            '../../application/store': 252,
            '../../data/model/domain/url': 253,
            '../module/view/click': 277,
            '../module/view/navigation': 278,
            '../module/view/scroll': 279,
            '../module/view/submit': 280,
            './api': 281,
            './router': 283,
            './state/process': 285,
            './state/scroll-restoration': 287,
            './state/url': 288,
            'spica/cancellation': 156,
            'spica/promise': 227,
            'spica/supervisor.legacy': 230
        }
    ],
    283: [
        function (_dereq_, module, exports) {
            'use strict';
            var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
                return new (P || (P = Promise))(function (resolve, reject) {
                    function fulfilled(value) {
                        try {
                            step(generator.next(value));
                        } catch (e) {
                            reject(e);
                        }
                    }
                    function rejected(value) {
                        try {
                            step(generator['throw'](value));
                        } catch (e) {
                            reject(e);
                        }
                    }
                    function step(result) {
                        result.done ? resolve(result.value) : new P(function (resolve) {
                            resolve(result.value);
                        }).then(fulfilled, rejected);
                    }
                    step((generator = generator.apply(thisArg, _arguments || [])).next());
                });
            };
            Object.defineProperty(exports, '__esModule', { value: true });
            const cancellation_1 = _dereq_('spica/cancellation');
            const typed_dom_1 = _dereq_('typed-dom');
            const router_1 = _dereq_('../../application/router');
            exports.Config = router_1.Config;
            exports.RouterEvent = router_1.RouterEvent;
            exports.RouterEventSource = router_1.RouterEventSource;
            const url_1 = _dereq_('./state/url');
            const env_1 = _dereq_('../service/state/env');
            const error_1 = _dereq_('../data/error');
            const url_2 = _dereq_('../../../lib/url');
            const url_3 = _dereq_('../../data/model/domain/url');
            const store_1 = _dereq_('../../application/store');
            const maybe_1 = _dereq_('spica/maybe');
            void typed_dom_1.bind(window, 'pjax:unload', () => window.history.scrollRestoration = 'auto', true);
            function route(config, event, process, io) {
                switch (event.type) {
                case router_1.RouterEventType.click:
                case router_1.RouterEventType.submit:
                    void store_1.savePosition();
                    break;
                case router_1.RouterEventType.popstate:
                    io.document.title = store_1.loadTitle();
                    break;
                }
                return void maybe_1.Just(0).guard(validate(new url_2.URL(event.request.url), config, event)).bind(() => router_1.scope(config, (({orig, dest}) => ({
                    orig: orig.pathname,
                    dest: dest.pathname
                }))(event.location))).fmap(config => __awaiter(this, void 0, void 0, function* () {
                    void event.original.preventDefault();
                    void process.cast('', new error_1.InterfaceError(`Aborted.`));
                    const cancellation = new cancellation_1.Cancellation();
                    const kill = process.register('', e => {
                        void kill();
                        void cancellation.cancel(e);
                        return new Promise(() => undefined);
                    }, undefined);
                    const [scripts] = yield env_1.env;
                    window.history.scrollRestoration = 'manual';
                    return router_1.route(config, event, {
                        process: cancellation,
                        scripts
                    }, io).then(m => m.fmap(([ss, p]) => __awaiter(this, void 0, void 0, function* () {
                        return void kill(), void url_1.docurl.sync(), void ss.filter(s => s.hasAttribute('src')).forEach(s => void scripts.add(new url_2.URL(url_3.standardizeUrl(s.src)).href)), void (yield p).filter(s => s.hasAttribute('src')).forEach(s => void scripts.add(new url_2.URL(url_3.standardizeUrl(s.src)).href));
                    })).extract()).catch(reason => (void kill(), void url_1.docurl.sync(), window.history.scrollRestoration = 'auto', !cancellation.canceled || reason instanceof Error && reason.name === 'FatalError' ? void config.fallback(typed_dom_1.currentTargets.get(event.original), reason) : undefined));
                })).extract(() => __awaiter(this, void 0, void 0, function* () {
                    switch (event.type) {
                    case router_1.RouterEventType.click:
                    case router_1.RouterEventType.submit:
                        break;
                    case router_1.RouterEventType.popstate:
                        if (!isHashChange(event.location.dest)) {
                            void config.fallback(event.source, new Error(`Disabled.`));
                        }
                        break;
                    }
                    void url_1.docurl.sync();
                }));
            }
            exports.route = route;
            function validate(url, config, event) {
                switch (event.type) {
                case router_1.RouterEventType.click:
                    return isAccessible(url) && !isHashClick(url) && !isHashChange(url) && !isDownload(event.source) && !hasModifierKey(event.original) && config.filter(event.source);
                case router_1.RouterEventType.submit:
                    return isAccessible(url);
                case router_1.RouterEventType.popstate:
                    return isAccessible(url) && !isHashChange(url);
                default:
                    return false;
                }
                function isAccessible(dest) {
                    const orig = new url_2.URL(url_1.docurl.href);
                    return orig.origin === dest.origin;
                }
                function isHashClick(dest) {
                    const orig = new url_2.URL(url_1.docurl.href);
                    return orig.origin === dest.origin && orig.path === dest.path && dest.fragment !== '';
                }
                function isDownload(el) {
                    return el.hasAttribute('download');
                }
                function hasModifierKey(event) {
                    return event.which > 1 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey;
                }
            }
            exports._validate = validate;
            function isHashChange(dest) {
                const orig = new url_2.URL(url_1.docurl.href);
                return orig.origin === dest.origin && orig.path === dest.path && orig.fragment !== dest.fragment;
            }
        },
        {
            '../../../lib/url': 294,
            '../../application/router': 251,
            '../../application/store': 252,
            '../../data/model/domain/url': 253,
            '../data/error': 276,
            '../service/state/env': 284,
            './state/url': 288,
            'spica/cancellation': 156,
            'spica/maybe': 168,
            'typed-dom': 239
        }
    ],
    284: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const script_1 = _dereq_('./script');
            exports.env = Promise.all([
                script_1.scripts,
                new Promise(r => void setTimeout(r))
            ]);
        },
        { './script': 286 }
    ],
    285: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const supervisor_legacy_1 = _dereq_('spica/supervisor.legacy');
            exports.process = new class extends supervisor_legacy_1.Supervisor {
            }();
        },
        { 'spica/supervisor.legacy': 230 }
    ],
    286: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const url_1 = _dereq_('../../../data/model/domain/url');
            const url_2 = _dereq_('../../../../lib/url');
            const dom_1 = _dereq_('../../../../lib/dom');
            const typed_dom_1 = _dereq_('typed-dom');
            exports.scripts = new Set();
            void typed_dom_1.bind(window, 'pjax:unload', () => void dom_1.find(document, 'script[src]').forEach(script => void exports.scripts.add(new url_2.URL(url_1.standardizeUrl(script.src)).href)));
        },
        {
            '../../../../lib/dom': 289,
            '../../../../lib/url': 294,
            '../../../data/model/domain/url': 253,
            'typed-dom': 239
        }
    ],
    287: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const typed_dom_1 = _dereq_('typed-dom');
            void typed_dom_1.bind(window, 'unload', () => window.history.scrollRestoration = 'auto', false);
        },
        { 'typed-dom': 239 }
    ],
    288: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const url_1 = _dereq_('../../../data/model/domain/url');
            const typed_dom_1 = _dereq_('typed-dom');
            void typed_dom_1.bind(window, 'hashchange', () => void exports.docurl.sync());
            exports.docurl = new class {
                constructor() {
                    this.url = url_1.standardizeUrl(location.href);
                }
                get href() {
                    return this.url;
                }
                sync() {
                    this.url = url_1.standardizeUrl(location.href);
                }
            }();
        },
        {
            '../../../data/model/domain/url': 253,
            'typed-dom': 239
        }
    ],
    289: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            function find(target, selector) {
                return [...target.querySelectorAll(selector || '_')];
            }
            exports.find = find;
            function serialize(form) {
                return Array.from(form.elements).filter(el => {
                    if (el.disabled)
                        return false;
                    switch (el.nodeName.toLowerCase()) {
                    case 'input':
                        switch (el.type.toLowerCase()) {
                        case 'checkbox':
                        case 'radio':
                            return el.checked;
                        case 'submit':
                        case 'button':
                        case 'image':
                        case 'reset':
                        case 'file':
                            return false;
                        default:
                            return true;
                        }
                    case 'select':
                    case 'textarea':
                        return true;
                    default:
                        return false;
                    }
                }).filter(el => typeof el.name === 'string' && typeof el.value === 'string').map(el => [
                    encodeURIComponent(removeInvalidSurrogatePairs(el.name)),
                    encodeURIComponent(removeInvalidSurrogatePairs(el.value))
                ].join('=')).join('&');
                function removeInvalidSurrogatePairs(str) {
                    return str.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]?|[\uDC00-\uDFFF]/g, str => str.length === 2 ? str : '');
                }
            }
            exports.serialize = serialize;
        },
        {}
    ],
    290: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            class PjaxError extends Error {
                constructor(msg) {
                    super(`Pjax: ${ msg }`);
                }
            }
            exports.PjaxError = PjaxError;
            class FatalError extends PjaxError {
                constructor(msg) {
                    super(`Pjax: Fatal: ${ msg }`);
                    this.name = 'FatalError';
                }
            }
            exports.FatalError = FatalError;
        },
        {}
    ],
    291: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const maybe_1 = _dereq_('spica/maybe');
            const either_1 = _dereq_('spica/either');
            const dom_1 = _dereq_('./dom');
            exports.parse = [
                parseByDOM,
                parseByDoc
            ].reduce((m, f) => m.bind(() => test(f) ? either_1.Left(f) : m), either_1.Right(() => maybe_1.Nothing)).extract(f => html => maybe_1.Just(f(html)));
            function parseByDOM(html) {
                const document = new DOMParser().parseFromString(html, 'text/html');
                void fix(document);
                return document;
            }
            function parseByDoc(html) {
                const document = window.document.implementation.createHTMLDocument('');
                void document.open();
                void document.write(html);
                void document.close();
                void fix(document);
                return document;
            }
            function fix(doc) {
                void fixNoscript(doc).forEach(([src, fixed]) => src.textContent = fixed.textContent);
            }
            exports.fix = fix;
            function fixNoscript(doc) {
                return dom_1.find(doc, 'noscript').filter(el => el.children.length > 0).map(el => {
                    const clone = el.cloneNode(true);
                    clone.textContent = el.innerHTML;
                    return [
                        el,
                        clone
                    ];
                });
            }
            exports._fixNoscript = fixNoscript;
            function test(parser) {
                try {
                    const html = `
<html lang="en" class="html">
  <head>
    <link href="/">
    <title>&amp;</title>
    <noscript><style>/**/</style></noscript>
  </head>
  <body>
    <noscript>noscript</noscript>
    <a href="/"></a>
    <script>document.head.remove();</script>
    <img src="abc">
  </body>
</html>
`;
                    const doc = parser(html);
                    switch (false) {
                    case doc.URL && doc.URL.startsWith(`${ window.location.protocol }//${ window.location.host }`):
                    case doc.title === '&':
                    case !!doc.querySelector('html.html[lang="en"]'):
                    case !!doc.querySelector('head > link').href:
                    case !!doc.querySelector('body > a').href:
                    case !doc.querySelector('head > noscript > *'):
                    case doc.querySelector('script').innerHTML === 'document.head.remove();':
                    case doc.querySelector('img').src.endsWith('abc'):
                    case doc.querySelector('head > noscript').textContent === '<style>/**/</style>':
                    case doc.querySelector('body > noscript').textContent === 'noscript':
                        throw undefined;
                    }
                    return true;
                } catch (_a) {
                    return false;
                }
            }
        },
        {
            './dom': 289,
            'spica/either': 162,
            'spica/maybe': 168
        }
    ],
    292: [
        function (_dereq_, module, exports) {
            (function (Buffer) {
                const crypto = _dereq_('crypto');
                const figgyPudding = _dereq_('figgy-pudding');
                const SPEC_ALGORITHMS = [
                    'sha256',
                    'sha384',
                    'sha512'
                ];
                const BASE64_REGEX = /^[a-z0-9+/]+(?:=?=?)$/i;
                const SRI_REGEX = /^([^-]+)-([^?]+)([?\S*]*)$/;
                const STRICT_SRI_REGEX = /^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)*$/;
                const VCHAR_REGEX = /^[\x21-\x7E]+$/;
                const SsriOpts = figgyPudding({
                    algorithms: { default: ['sha512'] },
                    error: { default: false },
                    integrity: {},
                    options: { default: [] },
                    pickAlgorithm: { default: () => getPrioritizedHash },
                    Promise: { default: () => Promise },
                    sep: { default: ' ' },
                    single: { default: false },
                    size: {},
                    strict: { default: false }
                });
                class Hash {
                    get isHash() {
                        return true;
                    }
                    constructor(hash, opts) {
                        opts = SsriOpts(opts);
                        const strict = !!opts.strict;
                        this.source = hash.trim();
                        const match = this.source.match(strict ? STRICT_SRI_REGEX : SRI_REGEX);
                        if (!match) {
                            return;
                        }
                        if (strict && !SPEC_ALGORITHMS.some(a => a === match[1])) {
                            return;
                        }
                        this.algorithm = match[1];
                        this.digest = match[2];
                        const rawOpts = match[3];
                        this.options = rawOpts ? rawOpts.slice(1).split('?') : [];
                    }
                    hexDigest() {
                        return this.digest && Buffer.from(this.digest, 'base64').toString('hex');
                    }
                    toJSON() {
                        return this.toString();
                    }
                    toString(opts) {
                        opts = SsriOpts(opts);
                        if (opts.strict) {
                            if (!(SPEC_ALGORITHMS.some(x => x === this.algorithm) && this.digest.match(BASE64_REGEX) && (this.options || []).every(opt => opt.match(VCHAR_REGEX)))) {
                                return '';
                            }
                        }
                        const options = this.options && this.options.length ? `?${ this.options.join('?') }` : '';
                        return `${ this.algorithm }-${ this.digest }${ options }`;
                    }
                }
                class Integrity {
                    get isIntegrity() {
                        return true;
                    }
                    toJSON() {
                        return this.toString();
                    }
                    toString(opts) {
                        opts = SsriOpts(opts);
                        let sep = opts.sep || ' ';
                        if (opts.strict) {
                            sep = sep.replace(/\S+/g, ' ');
                        }
                        return Object.keys(this).map(k => {
                            return this[k].map(hash => {
                                return Hash.prototype.toString.call(hash, opts);
                            }).filter(x => x.length).join(sep);
                        }).filter(x => x.length).join(sep);
                    }
                    concat(integrity, opts) {
                        opts = SsriOpts(opts);
                        const other = typeof integrity === 'string' ? integrity : stringify(integrity, opts);
                        return parse(`${ this.toString(opts) } ${ other }`, opts);
                    }
                    hexDigest() {
                        return parse(this, { single: true }).hexDigest();
                    }
                    match(integrity, opts) {
                        opts = SsriOpts(opts);
                        const other = parse(integrity, opts);
                        const algo = other.pickAlgorithm(opts);
                        return this[algo] && other[algo] && this[algo].find(hash => other[algo].find(otherhash => hash.digest === otherhash.digest)) || false;
                    }
                    pickAlgorithm(opts) {
                        opts = SsriOpts(opts);
                        const pickAlgorithm = opts.pickAlgorithm;
                        const keys = Object.keys(this);
                        if (!keys.length) {
                            throw new Error(`No algorithms available for ${ JSON.stringify(this.toString()) }`);
                        }
                        return keys.reduce((acc, algo) => {
                            return pickAlgorithm(acc, algo) || acc;
                        });
                    }
                }
                function parse(sri, opts) {
                    opts = SsriOpts(opts);
                    if (typeof sri === 'string') {
                        return _parse(sri, opts);
                    } else if (sri.algorithm && sri.digest) {
                        const fullSri = new Integrity();
                        fullSri[sri.algorithm] = [sri];
                        return _parse(stringify(fullSri, opts), opts);
                    } else {
                        return _parse(stringify(sri, opts), opts);
                    }
                }
                function _parse(integrity, opts) {
                    if (opts.single) {
                        return new Hash(integrity, opts);
                    }
                    return integrity.trim().split(/\s+/).reduce((acc, string) => {
                        const hash = new Hash(string, opts);
                        if (hash.algorithm && hash.digest) {
                            const algo = hash.algorithm;
                            if (!acc[algo]) {
                                acc[algo] = [];
                            }
                            acc[algo].push(hash);
                        }
                        return acc;
                    }, new Integrity());
                }
                function stringify(obj, opts) {
                    opts = SsriOpts(opts);
                    if (obj.algorithm && obj.digest) {
                        return Hash.prototype.toString.call(obj, opts);
                    } else if (typeof obj === 'string') {
                        return stringify(parse(obj, opts), opts);
                    } else {
                        return Integrity.prototype.toString.call(obj, opts);
                    }
                }
                module.exports.checkData = checkData;
                function checkData(data, sri, opts) {
                    opts = SsriOpts(opts);
                    sri = parse(sri, opts);
                    if (!Object.keys(sri).length) {
                        if (opts.error) {
                            throw Object.assign(new Error('No valid integrity hashes to check against'), { code: 'EINTEGRITY' });
                        } else {
                            return false;
                        }
                    }
                    const algorithm = sri.pickAlgorithm(opts);
                    const digest = crypto.createHash(algorithm).update(data).digest('base64');
                    const newSri = parse({
                        algorithm,
                        digest
                    });
                    const match = newSri.match(sri, opts);
                    if (match || !opts.error) {
                        return match;
                    } else if (typeof opts.size === 'number' && data.length !== opts.size) {
                        const err = new Error(`data size mismatch when checking ${ sri }.\n  Wanted: ${ opts.size }\n  Found: ${ data.length }`);
                        err.code = 'EBADSIZE';
                        err.found = data.length;
                        err.expected = opts.size;
                        err.sri = sri;
                        throw err;
                    } else {
                        const err = new Error(`Integrity checksum failed when using ${ algorithm }: Wanted ${ sri }, but got ${ newSri }. (${ data.length } bytes)`);
                        err.code = 'EINTEGRITY';
                        err.found = newSri;
                        err.expected = sri;
                        err.algorithm = algorithm;
                        err.sri = sri;
                        throw err;
                    }
                }
                const NODE_HASHES = new Set(crypto.getHashes());
                const DEFAULT_PRIORITY = [
                    'md5',
                    'whirlpool',
                    'sha1',
                    'sha224',
                    'sha256',
                    'sha384',
                    'sha512',
                    'sha3',
                    'sha3-256',
                    'sha3-384',
                    'sha3-512',
                    'sha3_256',
                    'sha3_384',
                    'sha3_512'
                ].filter(algo => NODE_HASHES.has(algo));
                function getPrioritizedHash(algo1, algo2) {
                    return DEFAULT_PRIORITY.indexOf(algo1.toLowerCase()) >= DEFAULT_PRIORITY.indexOf(algo2.toLowerCase()) ? algo1 : algo2;
                }
            }.call(this, _dereq_('buffer').Buffer));
        },
        {
            'buffer': 50,
            'crypto': 58,
            'figgy-pudding': 87
        }
    ],
    293: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const url_1 = _dereq_('../layer/data/model/domain/url');
            const url_2 = _dereq_('./url');
            const sequence_1 = _dereq_('spica/sequence');
            const uncurry_1 = _dereq_('spica/uncurry');
            const flip_1 = _dereq_('spica/flip');
            const cache_1 = _dereq_('spica/cache');
            function router(config) {
                return url => {
                    const {path, pathname} = new url_2.URL(url_1.standardizeUrl(url));
                    return sequence_1.Sequence.from(Object.keys(config).filter(([c]) => c === '/').sort().reverse()).filter(flip_1.flip(compare)(pathname)).map(pattern => config[pattern]).take(1).extract().pop().call(config, path);
                };
            }
            exports.router = router;
            function compare(pattern, path) {
                const regSegment = /\/|[^/]+\/?/g;
                const regTrailingSlash = /\/$/;
                return sequence_1.Sequence.zip(sequence_1.Sequence.from(expand(pattern)), sequence_1.Sequence.cycle([path])).map(([pattern, path]) => [
                    pattern.match(regSegment) || [],
                    pattern.match(regTrailingSlash) ? path.match(regSegment) || [] : path.replace(regTrailingSlash, '').match(regSegment) || []
                ]).filter(([ps, ss]) => ps.length <= ss.length && sequence_1.Sequence.zip(sequence_1.Sequence.from(ps), sequence_1.Sequence.from(ss)).dropWhile(uncurry_1.uncurry(match)).take(1).extract().length === 0).take(1).extract().length > 0;
            }
            exports.compare = compare;
            function expand(pattern) {
                if (pattern.match(/\*\*|[\[\]]/))
                    throw new Error(`Invalid pattern: ${ pattern }`);
                return pattern === '' ? [pattern] : sequence_1.Sequence.from(pattern.match(/{[^{}]*}|.[^{]*/g)).map(p => p.match(/^{[^{}]*}$/) ? p.slice(1, -1).split(',') : [p]).mapM(sequence_1.Sequence.from).map(ps => ps.join('')).bind(p => p === pattern ? sequence_1.Sequence.from([p]) : sequence_1.Sequence.from(expand(p))).unique().extract();
            }
            exports._expand = expand;
            const cache = new cache_1.Cache(100);
            function match(pattern, segment) {
                if (segment[0] === '.' && [...'?*'].includes(pattern[0]))
                    return false;
                const id = `${ pattern }:${ segment }`;
                return cache.has(id) ? cache.get(id) : cache.set(id, match(optimize(pattern), segment));
                function match(pattern, segment) {
                    const [p = '', ...ps] = [...pattern];
                    const [s = '', ...ss] = [...segment];
                    switch (p) {
                    case '':
                        return s === '';
                    case '?':
                        return s !== '' && s !== '/' && match(ps.join(''), ss.join(''));
                    case '*':
                        return s === '/' ? match(ps.join(''), segment) : sequence_1.Sequence.zip(sequence_1.Sequence.cycle([ps.join('')]), sequence_1.Sequence.from(segment).tails().map(ss => ss.join(''))).filter(uncurry_1.uncurry(match)).take(1).extract().length > 0;
                    default:
                        return s === p && match(ps.join(''), ss.join(''));
                    }
                }
                function optimize(pattern) {
                    const pat = pattern.replace(/\*(\?+)\*?/g, '$1*');
                    return pat === pattern ? pat : optimize(pat);
                }
            }
            exports._match = match;
        },
        {
            '../layer/data/model/domain/url': 253,
            './url': 294,
            'spica/cache': 155,
            'spica/flip': 165,
            'spica/sequence': 228,
            'spica/uncurry': 234
        }
    ],
    294: [
        function (_dereq_, module, exports) {
            'use strict';
            Object.defineProperty(exports, '__esModule', { value: true });
            const IDENTITY = Symbol();
            class URL {
                constructor(url) {
                    this.parser = document.createElement('a');
                    this[IDENTITY];
                    this.parser.href = url || location.href;
                    Object.freeze(this);
                }
                get href() {
                    return this.parser.href;
                }
                get origin() {
                    return `${ this.protocol }//${ this.host }`;
                }
                get domain() {
                    return `${ this.protocol }//${ this.hostname }`;
                }
                get scheme() {
                    return this.parser.protocol.slice(0, -1);
                }
                get protocol() {
                    return this.parser.protocol;
                }
                get userinfo() {
                    return this.parser.href.match(/[^:/?#]+:\/\/([^/?#]*)@|$/).pop() || '';
                }
                get host() {
                    return this.parser.host;
                }
                get hostname() {
                    return this.parser.hostname;
                }
                get port() {
                    return this.parser.port;
                }
                get path() {
                    return `${ this.pathname }${ this.query }`;
                }
                get pathname() {
                    return this.parser.pathname;
                }
                get query() {
                    return this.parser.search;
                }
                get fragment() {
                    return this.parser.href.replace(/^[^#]+/, '');
                }
            }
            exports.URL = URL;
        },
        {}
    ],
    'pjax-api': [
        function (_dereq_, module, exports) {
            'use strict';
            function __export(m) {
                for (var p in m)
                    if (!exports.hasOwnProperty(p))
                        exports[p] = m[p];
            }
            Object.defineProperty(exports, '__esModule', { value: true });
            __export(_dereq_('./src/export'));
            var export_1 = _dereq_('./src/export');
            exports.default = export_1.default;
        },
        { './src/export': 250 }
    ]
}, {}, [
    1,
    2,
    3,
    'pjax-api'
]);
(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        define([], factory);
    } else if (typeof module === 'object' && module.exports) {
        module.exports = factory();
    } else {
    }
}(typeof self !== 'undefined' ? self : this, function () {
    return require('pjax-api');
}));