diff --git a/build/app-bundle.js b/build/app-bundle.js index 6ab5396..b92caa9 100644 --- a/build/app-bundle.js +++ b/build/app-bundle.js @@ -362,7 +362,7 @@ setInterval(function(){ },1000); -},{"./common/AppSettingsMixin.js":2,"./common/SafeStateChangeMixin.js":15,"./common/SetIntervalMixin.js":16,"./home/Home.js":18,"./other/Accounts.js":20,"./other/Conversation.js":21,"./other/Featured.js":22,"./other/Hashtag.js":24,"./other/Settings.js":26,"./profile/Followings.js":29,"./profile/Mentions.js":30,"./profile/Profile.js":31,"./profile/Timeline.js":32,"react":501,"react-bootstrap":108,"react-dom":280,"react-router":308}],2:[function(require,module,exports){ +},{"./common/AppSettingsMixin.js":2,"./common/SafeStateChangeMixin.js":15,"./common/SetIntervalMixin.js":16,"./home/Home.js":18,"./other/Accounts.js":20,"./other/Conversation.js":21,"./other/Featured.js":23,"./other/Hashtag.js":25,"./other/Settings.js":27,"./profile/Followings.js":30,"./profile/Mentions.js":31,"./profile/Profile.js":32,"./profile/Timeline.js":33,"react":502,"react-bootstrap":109,"react-dom":281,"react-router":309}],2:[function(require,module,exports){ module.exports = AppSettingsMixin = { getInitialState: function() { @@ -498,7 +498,7 @@ module.exports = FollowButton = React.createClass({displayName: "FollowButton", ); } }); -},{"../common/SafeStateChangeMixin.js":15,"react":501,"react-bootstrap":108}],5:[function(require,module,exports){ +},{"../common/SafeStateChangeMixin.js":15,"react":502,"react-bootstrap":109}],5:[function(require,module,exports){ var ReactBootstrap = require('react-bootstrap') , Grid = ReactBootstrap.Grid @@ -541,7 +541,7 @@ module.exports = MiniProfile = React.createClass({displayName: "MiniProfile", ); } }); -},{"../common/ProfileMixin.js":12,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"react":501,"react-bootstrap":108}],6:[function(require,module,exports){ +},{"../common/ProfileMixin.js":12,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"react":502,"react-bootstrap":109}],6:[function(require,module,exports){ var ReactBootstrap = require('react-bootstrap') , Grid = ReactBootstrap.Grid @@ -782,7 +782,7 @@ module.exports = Post = React.createClass({displayName: "Post",
*/ -},{"../common/EventListenerMixin.js":3,"../common/PostContent.js":8,"../common/ReplyModalButton.js":13,"../common/RetwistModalButton.js":14,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"react":501,"react-bootstrap":108}],7:[function(require,module,exports){ +},{"../common/EventListenerMixin.js":3,"../common/PostContent.js":8,"../common/ReplyModalButton.js":13,"../common/RetwistModalButton.js":14,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"react":502,"react-bootstrap":109}],7:[function(require,module,exports){ var React = require('react'); var ContentEditable = require('react-wysiwyg'); var PostContentHelper = require('../common/PostContentHelper.js'); @@ -980,7 +980,7 @@ module.exports = PostComposer = React.createClass({displayName: "PostComposer", } }); -},{"../common/PostContentHelper.js":9,"../common/SafeStateChangeMixin.js":15,"react":501,"react-bootstrap":108,"react-wysiwyg":339}],8:[function(require,module,exports){ +},{"../common/PostContentHelper.js":9,"../common/SafeStateChangeMixin.js":15,"react":502,"react-bootstrap":109,"react-wysiwyg":340}],8:[function(require,module,exports){ var React = require('react'); var PostContentHelper = require('../common/PostContentHelper.js'); @@ -1045,7 +1045,7 @@ module.exports = Post = React.createClass({displayName: "Post",
*/ -},{"../common/PostContentHelper.js":9,"react":501}],9:[function(require,module,exports){ +},{"../common/PostContentHelper.js":9,"react":502}],9:[function(require,module,exports){ module.exports = { extractUsername: function(s) { var username = ""; @@ -1245,7 +1245,7 @@ module.exports = Postboard = React.createClass({displayName: "Postboard", ); } }); -},{"../common/Post.js":6,"react":501,"react-addons-css-transition-group":36,"react-bootstrap":108}],11:[function(require,module,exports){ +},{"../common/Post.js":6,"react":502,"react-addons-css-transition-group":37,"react-bootstrap":109}],11:[function(require,module,exports){ var ReactBootstrap = require('react-bootstrap') , NavItem = ReactBootstrap.NavItem @@ -1292,7 +1292,7 @@ module.exports = ProfileBoard = React.createClass({displayName: "ProfileBoard", ); } }); -},{"../common/Post.js":6,"react":501,"react-addons-css-transition-group":36,"react-bootstrap":108}],12:[function(require,module,exports){ +},{"../common/Post.js":6,"react":502,"react-addons-css-transition-group":37,"react-bootstrap":109}],12:[function(require,module,exports){ var AppSettingsMixin = require('../common/AppSettingsMixin.js'); var EventListenerMixin = require('../common/EventListenerMixin.js'); @@ -1463,7 +1463,7 @@ module.exports = ReplyModalButton = React.createClass({displayName: "ReplyModalB ); } }); -},{"../common/PostContent.js":8,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"react":501,"react-bootstrap":108}],14:[function(require,module,exports){ +},{"../common/PostContent.js":8,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"react":502,"react-bootstrap":109}],14:[function(require,module,exports){ var ReactBootstrap = require('react-bootstrap') , Button = ReactBootstrap.Button @@ -1529,7 +1529,7 @@ module.exports = RetwistModalButton = React.createClass({displayName: "RetwistMo ); } }); -},{"../common/PostContent.js":8,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"react":501,"react-bootstrap":108}],15:[function(require,module,exports){ +},{"../common/PostContent.js":8,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"react":502,"react-bootstrap":109}],15:[function(require,module,exports){ function isValidLifeCycleForReplaceState(instance) { // See function validateLifeCycleOnReplaceState(instance) in // ReactCompositeComponent.js @@ -1838,7 +1838,7 @@ module.exports = Home = React.createClass({displayName: "Home", ); } }); -},{"../common/AppSettingsMixin.js":2,"../common/EventListenerMixin.js":3,"../common/Postboard.js":10,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"../common/StreamMixin.js":17,"../home/NewPostModalButton.js":19,"react":501,"react-bootstrap":108}],19:[function(require,module,exports){ +},{"../common/AppSettingsMixin.js":2,"../common/EventListenerMixin.js":3,"../common/Postboard.js":10,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"../common/StreamMixin.js":17,"../home/NewPostModalButton.js":19,"react":502,"react-bootstrap":109}],19:[function(require,module,exports){ var ReactBootstrap = require('react-bootstrap') , Button = ReactBootstrap.Button @@ -1903,7 +1903,7 @@ module.exports = NewPostModalButton = React.createClass({displayName: "NewPostMo ); } }); -},{"../common/PostComposer.js":7,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"react":501,"react-bootstrap":108}],20:[function(require,module,exports){ +},{"../common/PostComposer.js":7,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"react":502,"react-bootstrap":109}],20:[function(require,module,exports){ var React = require('react'); var SetIntervalMixin = require("../common/SetIntervalMixin.js"); var SafeStateChangeMixin = require('../common/SafeStateChangeMixin.js'); @@ -1911,6 +1911,7 @@ var EventListenerMixin = require('../common/EventListenerMixin.js'); var AppSettingsMixin = require('../common/AppSettingsMixin.js'); var ImportAccountModalButton = require('../other/ImportAccountModalButton.js'); +var ExportAccountModalButton = require('../other/ExportAccountModalButton.js'); var GenerateAccountModalButton = require('../other/GenerateAccountModalButton.js'); var ReactBootstrap = require('react-bootstrap') @@ -1946,7 +1947,10 @@ module.exports = Accounts = React.createClass({displayName: "Accounts", return ( React.createElement("div", {key: "miniprofile:"+acc.name}, React.createElement(MiniProfile, {username: acc.name, pollIntervalProfile: thisComponent.props.pollIntervalProfile}), - React.createElement("p", null, acc.status) + React.createElement("p", null, + acc.status, + React.createElement(ExportAccountModalButton, {username: acc.name}) + ) ) ); }) @@ -1955,7 +1959,7 @@ module.exports = Accounts = React.createClass({displayName: "Accounts", ); } }); -},{"../common/AppSettingsMixin.js":2,"../common/EventListenerMixin.js":3,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"../other/GenerateAccountModalButton.js":23,"../other/ImportAccountModalButton.js":25,"react":501,"react-bootstrap":108}],21:[function(require,module,exports){ +},{"../common/AppSettingsMixin.js":2,"../common/EventListenerMixin.js":3,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"../other/ExportAccountModalButton.js":22,"../other/GenerateAccountModalButton.js":24,"../other/ImportAccountModalButton.js":26,"react":502,"react-bootstrap":109}],21:[function(require,module,exports){ var React = require('react'); var Postboard = require("../common/Postboard.js"); var SetIntervalMixin = require("../common/SetIntervalMixin.js"); @@ -1982,13 +1986,10 @@ module.exports = Conversation = React.createClass({displayName: "Conversation", SafeStateChangeMixin, EventListenerMixin('newpostbyuser') ], - contextTypes: { - router: React.PropTypes.func - }, getInitialState: function() { return { - username: this.context.router.getCurrentParams().username, - postid: parseInt(this.context.router.getCurrentParams().postid), + username: this.props.params.username, + postid: parseInt(this.props.params.postid), data: [], postIdentifiers: {}, loading: true @@ -2068,7 +2069,179 @@ module.exports = Conversation = React.createClass({displayName: "Conversation", ); } }); -},{"../common/AppSettingsMixin.js":2,"../common/EventListenerMixin.js":3,"../common/Postboard.js":10,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"../common/StreamMixin.js":17,"react":501,"react-bootstrap":108}],22:[function(require,module,exports){ +},{"../common/AppSettingsMixin.js":2,"../common/EventListenerMixin.js":3,"../common/Postboard.js":10,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"../common/StreamMixin.js":17,"react":502,"react-bootstrap":109}],22:[function(require,module,exports){ + +var ReactBootstrap = require('react-bootstrap') + , Button = ReactBootstrap.Button + , ButtonGroup = ReactBootstrap.ButtonGroup + , Glyphicon = ReactBootstrap.Glyphicon + , Modal = ReactBootstrap.Modal + , Input = ReactBootstrap.Input + +var React = require('react'); + +var SafeStateChangeMixin = require('../common/SafeStateChangeMixin.js'); +var SetIntervalMixin = require("../common/SetIntervalMixin.js"); + +module.exports = ExportAccountModalButton = React.createClass({displayName: "ExportAccountModalButton", + mixins: [ + SafeStateChangeMixin + ], + getInitialState: function () { + return { + isModalOpen: false, + useEncryption: true, + passphrase1: "", + passphrase2: "", + setupComplete: false, + encryptionInProgess: false, + encryptionComplete: false, + encryptedKey: "", + }; + }, + handleUseEncryptionChange: function(e) { + this.setState({ + useEncryption: e.target.checked, + encryptionInProgess: false, + encryptionComplete: false, + }); + }, + handlePassphrase1Change: function(e) { + this.setState({ + passphrase1: e.target.value, + encryptionInProgess: false, + encryptionComplete: false, + }); + }, + handlePassphrase2Change: function(e) { + this.setState({ + passphrase2: e.target.value, + encryptionInProgess: false, + encryptionComplete: false, + }); + }, + handleToggle: function () { + this.setState({ + isModalOpen: !this.state.isModalOpen + }); + }, + handleEncryption: function (e) { + + e.preventDefault(); + + var thisComponent = this; + + if(this.state.useEncryption){ + + var passphrase = this.state.passphrase1; + + thisComponent.setStateSafe({encryptionInProgess: true}); + + Twister.getAccount(this.props.username).encryptPrivateKey(passphrase, + function(encryptedKey){ + + thisComponent.setStateSafe({encryptedKey: encryptedKey, encryptionComplete: true, encryptionInProgess: false}); + + }); + + }else{ + + var wif = Twister.getAccount(this.props.username).getPrivateKey(); + + thisComponent.setStateSafe({encryptedKey: wif, encryptionComplete: true, encryptionInProgess: false}); + + } + + + return; + }, + render: function() { + + var belowForm = ( + React.createElement("p", null) + ); + + if(this.state.encryptionInProgess){ + belowForm = ( + React.createElement("p", null, "Encryption in progress. Sorry for the lag.") + ) + } + + if(this.state.encryptionComplete){ + if(this.state.useEncryption){ + + var formattedBody = "Your encrypted key for Twister: " + +this.state.encryptedKey + +"\n\nAdvice: Print this email and note down your username and passphrase on the same piece of paper."; + + var subject = "Encrypted Twister Private Key"; + + var mailToLink = "mailto:?body=" + encodeURIComponent(formattedBody) + "&subject=" + encodeURIComponent(subject); + + belowForm = ( + React.createElement("p", null, + "Your encrypted key: "+this.state.encryptedKey, + React.createElement(Button, {href: mailToLink}, "Send via Email") + ) + ) + }else{ + belowForm = ( + React.createElement("p", null, + "Your private key: "+this.state.encryptedKey + ) + ) + } + } + + var submitButton = ( + React.createElement(Input, {type: "submit", value: "Encrypt Private Key", disabled: this.state.passphrase1!=this.state.passphrase2}) + ) + if(!this.state.useEncryption){ + submitButton = ( + React.createElement(Input, {type: "submit", value: "Reveal Private Key"}) + ); + } + + return ( + React.createElement(Button, {onClick: this.handleToggle}, + "Export Account", + React.createElement(Modal, {show: this.state.isModalOpen, bsStyle: "primary", onHide: this.handleToggle}, + React.createElement(Modal.Header, null, + React.createElement(Glyphicon, {glyph: "export"}) + ), + React.createElement(Modal.Body, null, + React.createElement("form", {onSubmit: this.handleEncryption}, + React.createElement(Input, { + type: "checkbox", + label: "Use Encrpytion (highly recommended)", + checked: this.state.useEncryption, + onChange: this.handleUseEncryptionChange} + ), + React.createElement(Input, { + type: "password", + label: "Passphrase", + value: this.state.passphrase1, + onChange: this.handlePassphrase1Change, + disabled: !this.state.useEncryption} + ), + React.createElement(Input, { + type: "password", + label: "Repeat Passphrase", + value: this.state.passphrase2, + onChange: this.handlePassphrase2Change, + disabled: !this.state.useEncryption} + ), + submitButton + ), + belowForm + + ) + ) + ) + ); + } +}); +},{"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"react":502,"react-bootstrap":109}],23:[function(require,module,exports){ var React = require('react'); @@ -2112,7 +2285,7 @@ module.exports = Featured = React.createClass({ displayName: "Featured", } }); -},{"../common/AppSettingsMixin.js":2,"../common/EventListenerMixin.js":3,"../common/MiniProfile.js":5,"../common/ProfileBoard.js":11,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"../common/StreamMixin.js":17,"react":501,"react-addons-css-transition-group":36,"react-bootstrap":108}],23:[function(require,module,exports){ +},{"../common/AppSettingsMixin.js":2,"../common/EventListenerMixin.js":3,"../common/MiniProfile.js":5,"../common/ProfileBoard.js":11,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"../common/StreamMixin.js":17,"react":502,"react-addons-css-transition-group":37,"react-bootstrap":109}],24:[function(require,module,exports){ var ReactBootstrap = require('react-bootstrap') , Button = ReactBootstrap.Button @@ -2233,7 +2406,7 @@ module.exports = GenerateAccountModalButton = React.createClass({displayName: "G ); } }); -},{"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"react":501,"react-bootstrap":108}],24:[function(require,module,exports){ +},{"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"react":502,"react-bootstrap":109}],25:[function(require,module,exports){ var React = require('react'); var Postboard = require("../common/Postboard.js"); var SetIntervalMixin = require("../common/SetIntervalMixin.js"); @@ -2314,7 +2487,7 @@ module.exports = Hashtag = React.createClass({displayName: "Hashtag", ); } }); -},{"../common/AppSettingsMixin.js":2,"../common/EventListenerMixin.js":3,"../common/Postboard.js":10,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"../common/StreamMixin.js":17,"react":501,"react-bootstrap":108}],25:[function(require,module,exports){ +},{"../common/AppSettingsMixin.js":2,"../common/EventListenerMixin.js":3,"../common/Postboard.js":10,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"../common/StreamMixin.js":17,"react":502,"react-bootstrap":109}],26:[function(require,module,exports){ var ReactBootstrap = require('react-bootstrap') , Button = ReactBootstrap.Button @@ -2399,7 +2572,7 @@ module.exports = ImportAccountModalButton = React.createClass({displayName: "Imp ); } }); -},{"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"react":501,"react-bootstrap":108}],26:[function(require,module,exports){ +},{"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"react":502,"react-bootstrap":109}],27:[function(require,module,exports){ var React = require('react'); var SetIntervalMixin = require("../common/SetIntervalMixin.js"); var SafeStateChangeMixin = require('../common/SafeStateChangeMixin.js'); @@ -2470,7 +2643,7 @@ module.exports = Settings = React.createClass({displayName: "Settings", ); } }); -},{"../common/AppSettingsMixin.js":2,"../common/EventListenerMixin.js":3,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"../other/ImportAccountModalButton.js":25,"react":501,"react-bootstrap":108}],27:[function(require,module,exports){ +},{"../common/AppSettingsMixin.js":2,"../common/EventListenerMixin.js":3,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"../other/ImportAccountModalButton.js":26,"react":502,"react-bootstrap":109}],28:[function(require,module,exports){ @@ -2607,7 +2780,7 @@ module.exports = EditAvatarModalButton = React.createClass({displayName: "EditAv ); } }); -},{"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"react":501,"react-bootstrap":108}],28:[function(require,module,exports){ +},{"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"react":502,"react-bootstrap":109}],29:[function(require,module,exports){ var ReactBootstrap = require('react-bootstrap') , Button = ReactBootstrap.Button @@ -2723,7 +2896,7 @@ module.exports = EditProfileModalButton = React.createClass({displayName: "EditP ); } }); -},{"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"react":501,"react-bootstrap":108}],29:[function(require,module,exports){ +},{"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"react":502,"react-bootstrap":109}],30:[function(require,module,exports){ var React = require('react'); @@ -2805,7 +2978,7 @@ module.exports = Followings = React.createClass({displayName: "Followings", } }); -},{"../common/AppSettingsMixin.js":2,"../common/EventListenerMixin.js":3,"../common/MiniProfile.js":5,"../common/ProfileBoard.js":11,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"../common/StreamMixin.js":17,"react":501,"react-addons-css-transition-group":36,"react-bootstrap":108}],30:[function(require,module,exports){ +},{"../common/AppSettingsMixin.js":2,"../common/EventListenerMixin.js":3,"../common/MiniProfile.js":5,"../common/ProfileBoard.js":11,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"../common/StreamMixin.js":17,"react":502,"react-addons-css-transition-group":37,"react-bootstrap":109}],31:[function(require,module,exports){ var React = require('react'); var MiniProfile = require("../common/MiniProfile.js"); var Postboard = require("../common/Postboard.js"); @@ -2858,7 +3031,7 @@ module.exports = Mentions = React.createClass({displayName: "Mentions", ); } }); -},{"../common/AppSettingsMixin.js":2,"../common/EventListenerMixin.js":3,"../common/MiniProfile.js":5,"../common/Postboard.js":10,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"../common/StreamMixin.js":17,"react":501}],31:[function(require,module,exports){ +},{"../common/AppSettingsMixin.js":2,"../common/EventListenerMixin.js":3,"../common/MiniProfile.js":5,"../common/Postboard.js":10,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"../common/StreamMixin.js":17,"react":502}],32:[function(require,module,exports){ var ReactBootstrap = require('react-bootstrap') , Grid = ReactBootstrap.Grid @@ -2947,7 +3120,7 @@ module.exports = Profile = React.createClass({displayName: "Profile", ); } }); -},{"../common/FollowButton.js":4,"../common/ProfileMixin.js":12,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"../profile/EditAvatarModalButton.js":27,"../profile/EditProfileModalButton.js":28,"react":501,"react-bootstrap":108,"react-router":308}],32:[function(require,module,exports){ +},{"../common/FollowButton.js":4,"../common/ProfileMixin.js":12,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"../profile/EditAvatarModalButton.js":28,"../profile/EditProfileModalButton.js":29,"react":502,"react-bootstrap":109,"react-router":309}],33:[function(require,module,exports){ var React = require('react'); var Postboard = require("../common/Postboard.js"); var SetIntervalMixin = require("../common/SetIntervalMixin.js"); @@ -3046,7 +3219,7 @@ module.exports = Timeline = React.createClass({displayName: "Timeline", ); } }); -},{"../common/AppSettingsMixin.js":2,"../common/EventListenerMixin.js":3,"../common/Postboard.js":10,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"../common/StreamMixin.js":17,"react":501,"react-bootstrap":108}],33:[function(require,module,exports){ +},{"../common/AppSettingsMixin.js":2,"../common/EventListenerMixin.js":3,"../common/Postboard.js":10,"../common/SafeStateChangeMixin.js":15,"../common/SetIntervalMixin.js":16,"../common/StreamMixin.js":17,"react":502,"react-bootstrap":109}],34:[function(require,module,exports){ // shim for using process in browser var process = module.exports = {}; @@ -3139,7 +3312,7 @@ process.chdir = function (dir) { }; process.umask = function() { return 0; }; -},{}],34:[function(require,module,exports){ +},{}],35:[function(require,module,exports){ /*! Copyright (c) 2016 Jed Watson. Licensed under the MIT License (MIT), see @@ -3189,7 +3362,7 @@ process.umask = function() { return 0; }; } }()); -},{}],35:[function(require,module,exports){ +},{}],36:[function(require,module,exports){ /*! * escape-html * Copyright(c) 2012-2013 TJ Holowaychuk @@ -3269,9 +3442,9 @@ function escapeHtml(string) { : html; } -},{}],36:[function(require,module,exports){ +},{}],37:[function(require,module,exports){ module.exports = require('react/lib/ReactCSSTransitionGroup'); -},{"react/lib/ReactCSSTransitionGroup":366}],37:[function(require,module,exports){ +},{"react/lib/ReactCSSTransitionGroup":367}],38:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -3302,7 +3475,7 @@ var Accordion = _react2['default'].createClass({ exports['default'] = Accordion; module.exports = exports['default']; -},{"./PanelGroup":93,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"react":501}],38:[function(require,module,exports){ +},{"./PanelGroup":94,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"react":502}],39:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -3396,7 +3569,7 @@ var Alert = _react2['default'].createClass({ exports['default'] = _utilsBootstrapUtils.bsStyles(_styleMaps.State.values(), _styleMaps.State.INFO, _utilsBootstrapUtils.bsClass('alert', Alert)); module.exports = exports['default']; -},{"./styleMaps":109,"./utils/bootstrapUtils":113,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],39:[function(require,module,exports){ +},{"./styleMaps":110,"./utils/bootstrapUtils":114,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],40:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -3456,7 +3629,7 @@ var Badge = _react2['default'].createClass({ exports['default'] = Badge; module.exports = exports['default']; -},{"./utils/ValidComponentChildren":112,"./utils/bootstrapUtils":113,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],40:[function(require,module,exports){ +},{"./utils/ValidComponentChildren":113,"./utils/bootstrapUtils":114,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],41:[function(require,module,exports){ 'use strict'; var _objectWithoutProperties = require('babel-runtime/helpers/object-without-properties')['default']; @@ -3519,7 +3692,7 @@ var Breadcrumb = _react2['default'].createClass({ exports['default'] = Breadcrumb; module.exports = exports['default']; -},{"./utils/ValidComponentChildren":112,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"classnames":34,"react":501}],41:[function(require,module,exports){ +},{"./utils/ValidComponentChildren":113,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"classnames":35,"react":502}],42:[function(require,module,exports){ 'use strict'; var _objectWithoutProperties = require('babel-runtime/helpers/object-without-properties')['default']; @@ -3616,7 +3789,7 @@ var BreadcrumbItem = _react2['default'].createClass({ exports['default'] = BreadcrumbItem; module.exports = exports['default']; -},{"./SafeAnchor":98,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"classnames":34,"react":501}],42:[function(require,module,exports){ +},{"./SafeAnchor":99,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"classnames":35,"react":502}],43:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -3745,7 +3918,7 @@ Button.types = types; exports['default'] = _utilsBootstrapUtils.bsStyles(ButtonStyles, _styleMaps.DEFAULT, _utilsBootstrapUtils.bsSizes([_styleMaps.Sizes.LARGE, _styleMaps.Sizes.SMALL, _styleMaps.Sizes.XSMALL], _utilsBootstrapUtils.bsClass('btn', Button))); module.exports = exports['default']; -},{"./styleMaps":109,"./utils/bootstrapUtils":113,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501,"react-prop-types/lib/elementType":273}],43:[function(require,module,exports){ +},{"./styleMaps":110,"./utils/bootstrapUtils":114,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502,"react-prop-types/lib/elementType":274}],44:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -3820,7 +3993,7 @@ var ButtonGroup = _react2['default'].createClass({ exports['default'] = _utilsBootstrapUtils.bsClass('btn-group', ButtonGroup); module.exports = exports['default']; -},{"./Button":42,"./utils/bootstrapUtils":113,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501,"react-prop-types/lib/all":270}],44:[function(require,module,exports){ +},{"./Button":43,"./utils/bootstrapUtils":114,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502,"react-prop-types/lib/all":271}],45:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -3910,7 +4083,7 @@ ButtonInput.propTypes = { exports['default'] = ButtonInput; module.exports = exports['default']; -},{"./Button":42,"./FormGroup":58,"./InputBase":63,"./utils/childrenValueInputValidation":115,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"react":501}],45:[function(require,module,exports){ +},{"./Button":43,"./FormGroup":59,"./InputBase":64,"./utils/childrenValueInputValidation":116,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"react":502}],46:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -3963,7 +4136,7 @@ var ButtonToolbar = _react2['default'].createClass({ exports['default'] = ButtonToolbar; module.exports = exports['default']; -},{"./Button":42,"./utils/bootstrapUtils":113,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],46:[function(require,module,exports){ +},{"./Button":43,"./utils/bootstrapUtils":114,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],47:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -4274,7 +4447,7 @@ var Carousel = _react2['default'].createClass({ exports['default'] = Carousel; module.exports = exports['default']; -},{"./Glyphicon":59,"./utils/ValidComponentChildren":112,"./utils/bootstrapUtils":113,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],47:[function(require,module,exports){ +},{"./Glyphicon":60,"./utils/ValidComponentChildren":113,"./utils/bootstrapUtils":114,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],48:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -4398,7 +4571,7 @@ var CarouselItem = _react2['default'].createClass({ exports['default'] = CarouselItem; module.exports = exports['default']; -},{"./utils/TransitionEvents":111,"./utils/bootstrapUtils":113,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501,"react-dom":280}],48:[function(require,module,exports){ +},{"./utils/TransitionEvents":112,"./utils/bootstrapUtils":114,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502,"react-dom":281}],49:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -4647,7 +4820,7 @@ var Col = _react2['default'].createClass({ exports['default'] = Col; module.exports = exports['default']; -},{"./styleMaps":109,"babel-runtime/core-js/object/keys":121,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501,"react-prop-types/lib/elementType":273}],49:[function(require,module,exports){ +},{"./styleMaps":110,"babel-runtime/core-js/object/keys":122,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502,"react-prop-types/lib/elementType":274}],50:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -4894,7 +5067,7 @@ Collapse.defaultProps = { exports['default'] = Collapse; module.exports = exports['default']; -},{"./utils/createChainedFunction":116,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"dom-helpers/style":171,"react":501,"react-overlays/lib/Transition":258,"react-prop-types/lib/deprecated":272}],50:[function(require,module,exports){ +},{"./utils/createChainedFunction":117,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"dom-helpers/style":172,"react":502,"react-overlays/lib/Transition":259,"react-prop-types/lib/deprecated":273}],51:[function(require,module,exports){ 'use strict'; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; @@ -5012,7 +5185,7 @@ var CollapsibleNav = _react2['default'].createClass({ exports['default'] = _utilsDeprecationWarning2['default'].wrapper(CollapsibleNav, 'CollapsibleNav', 'Navbar.Collapse', 'http://react-bootstrap.github.io/components.html#navbars'); module.exports = exports['default']; -},{"./Collapse":49,"./utils/ValidComponentChildren":112,"./utils/createChainedFunction":116,"./utils/deprecationWarning":118,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],51:[function(require,module,exports){ +},{"./Collapse":50,"./utils/ValidComponentChildren":113,"./utils/createChainedFunction":117,"./utils/deprecationWarning":119,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],52:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -5414,7 +5587,7 @@ Dropdown.Menu = _DropdownMenu2['default']; exports['default'] = Dropdown; module.exports = exports['default']; -},{"./ButtonGroup":43,"./DropdownMenu":53,"./DropdownToggle":54,"./utils/CustomPropTypes":110,"./utils/ValidComponentChildren":112,"./utils/bootstrapUtils":113,"./utils/createChainedFunction":116,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"dom-helpers/activeElement":152,"dom-helpers/query/contains":162,"keycode":182,"lodash-compat/collection/find":184,"lodash-compat/object/omit":246,"react":501,"react-dom":280,"react-prop-types/lib/all":270,"react-prop-types/lib/elementType":273,"react-prop-types/lib/isRequiredForA11y":274,"uncontrollable":277}],52:[function(require,module,exports){ +},{"./ButtonGroup":44,"./DropdownMenu":54,"./DropdownToggle":55,"./utils/CustomPropTypes":111,"./utils/ValidComponentChildren":113,"./utils/bootstrapUtils":114,"./utils/createChainedFunction":117,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"dom-helpers/activeElement":153,"dom-helpers/query/contains":163,"keycode":183,"lodash-compat/collection/find":185,"lodash-compat/object/omit":247,"react":502,"react-dom":281,"react-prop-types/lib/all":271,"react-prop-types/lib/elementType":274,"react-prop-types/lib/isRequiredForA11y":275,"uncontrollable":278}],53:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -5521,7 +5694,7 @@ DropdownButton.defaultProps = { exports['default'] = DropdownButton; module.exports = exports['default']; -},{"./Button":42,"./Dropdown":51,"babel-runtime/core-js/object/keys":121,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"lodash-compat/object/omit":246,"lodash-compat/object/pick":248,"react":501}],53:[function(require,module,exports){ +},{"./Button":43,"./Dropdown":52,"babel-runtime/core-js/object/keys":122,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"lodash-compat/object/omit":247,"lodash-compat/object/pick":249,"react":502}],54:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -5718,7 +5891,7 @@ DropdownMenu.propTypes = { exports['default'] = DropdownMenu; module.exports = exports['default']; -},{"./utils/ValidComponentChildren":112,"./utils/bootstrapUtils":113,"./utils/createChainedFunction":116,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"classnames":34,"keycode":182,"react":501,"react-dom":280,"react-overlays/lib/RootCloseWrapper":257}],54:[function(require,module,exports){ +},{"./utils/ValidComponentChildren":113,"./utils/bootstrapUtils":114,"./utils/createChainedFunction":117,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"classnames":35,"keycode":183,"react":502,"react-dom":281,"react-overlays/lib/RootCloseWrapper":258}],55:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -5807,7 +5980,7 @@ DropdownToggle.isToggle = true; DropdownToggle.titleProp = 'title'; DropdownToggle.onClickProp = 'onClick'; module.exports = exports['default']; -},{"./Button":42,"./SafeAnchor":98,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],55:[function(require,module,exports){ +},{"./Button":43,"./SafeAnchor":99,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],56:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -5931,7 +6104,7 @@ Fade.defaultProps = { exports['default'] = Fade; module.exports = exports['default']; -},{"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501,"react-overlays/lib/Transition":258,"react-prop-types/lib/deprecated":272}],56:[function(require,module,exports){ +},{"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502,"react-overlays/lib/Transition":259,"react-prop-types/lib/deprecated":273}],57:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -5995,7 +6168,7 @@ Static.propTypes = { exports['default'] = Static; module.exports = exports['default']; -},{"../InputBase":63,"../utils/childrenValueInputValidation":115,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],57:[function(require,module,exports){ +},{"../InputBase":64,"../utils/childrenValueInputValidation":116,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],58:[function(require,module,exports){ 'use strict'; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; @@ -6007,7 +6180,7 @@ var _Static2 = require('./Static'); var _Static3 = _interopRequireDefault(_Static2); exports.Static = _Static3['default']; -},{"./Static":56,"babel-runtime/helpers/interop-require-default":126}],58:[function(require,module,exports){ +},{"./Static":57,"babel-runtime/helpers/interop-require-default":127}],59:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -6077,7 +6250,7 @@ FormGroup.propTypes = { exports['default'] = FormGroup; module.exports = exports['default']; -},{"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],59:[function(require,module,exports){ +},{"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],60:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -6136,7 +6309,7 @@ var Glyphicon = _react2['default'].createClass({ exports['default'] = Glyphicon; module.exports = exports['default']; -},{"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],60:[function(require,module,exports){ +},{"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],61:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -6195,7 +6368,7 @@ var Grid = _react2['default'].createClass({ exports['default'] = Grid; module.exports = exports['default']; -},{"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501,"react-prop-types/lib/elementType":273}],61:[function(require,module,exports){ +},{"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502,"react-prop-types/lib/elementType":274}],62:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -6261,7 +6434,7 @@ var Image = _react2['default'].createClass({ exports['default'] = Image; module.exports = exports['default']; -},{"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],62:[function(require,module,exports){ +},{"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],63:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -6317,7 +6490,7 @@ Input.propTypes = { exports['default'] = Input; module.exports = exports['default']; -},{"./FormControls":57,"./InputBase":63,"./utils/deprecationWarning":118,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/interop-require-wildcard":127,"react":501}],63:[function(require,module,exports){ +},{"./FormControls":58,"./InputBase":64,"./utils/deprecationWarning":119,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/interop-require-wildcard":128,"react":502}],64:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -6580,7 +6753,7 @@ InputBase.defaultProps = { exports['default'] = InputBase; module.exports = exports['default']; -},{"./FormGroup":58,"./Glyphicon":59,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],64:[function(require,module,exports){ +},{"./FormGroup":59,"./Glyphicon":60,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],65:[function(require,module,exports){ // https://www.npmjs.org/package/react-interpolate-component // TODO: Drop this in favor of es6 string interpolation @@ -6678,7 +6851,7 @@ var Interpolate = _react2['default'].createClass({ exports['default'] = Interpolate; module.exports = exports['default']; -},{"./utils/ValidComponentChildren":112,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"react":501}],65:[function(require,module,exports){ +},{"./utils/ValidComponentChildren":113,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"react":502}],66:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -6726,7 +6899,7 @@ var Jumbotron = _react2['default'].createClass({ exports['default'] = Jumbotron; module.exports = exports['default']; -},{"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501,"react-prop-types/lib/elementType":273}],66:[function(require,module,exports){ +},{"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502,"react-prop-types/lib/elementType":274}],67:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -6780,7 +6953,7 @@ var Label = (function (_React$Component) { exports['default'] = Label; module.exports = exports['default']; -},{"./styleMaps":109,"./utils/bootstrapUtils":113,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],67:[function(require,module,exports){ +},{"./styleMaps":110,"./utils/bootstrapUtils":114,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],68:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -6908,7 +7081,7 @@ ListGroup.propTypes = { exports['default'] = ListGroup; module.exports = exports['default']; -},{"./ListGroupItem":68,"./utils/ValidComponentChildren":112,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],68:[function(require,module,exports){ +},{"./ListGroupItem":69,"./utils/ValidComponentChildren":113,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],69:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -7045,7 +7218,7 @@ ListGroupItem.defaultTypes = { exports['default'] = _utilsBootstrapUtils.bsStyles(_styleMaps.State.values(), _utilsBootstrapUtils.bsClass('list-group-item', ListGroupItem)); module.exports = exports['default']; -},{"./styleMaps":109,"./utils/bootstrapUtils":113,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],69:[function(require,module,exports){ +},{"./styleMaps":110,"./utils/bootstrapUtils":114,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],70:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -7180,7 +7353,7 @@ MenuItem.defaultProps = { exports['default'] = _utilsBootstrapUtils.bsClass('dropdown', MenuItem); module.exports = exports['default']; -},{"./SafeAnchor":98,"./utils/bootstrapUtils":113,"./utils/createChainedFunction":116,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"classnames":34,"react":501,"react-prop-types/lib/all":270}],70:[function(require,module,exports){ +},{"./SafeAnchor":99,"./utils/bootstrapUtils":114,"./utils/createChainedFunction":117,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"classnames":35,"react":502,"react-prop-types/lib/all":271}],71:[function(require,module,exports){ /* eslint-disable react/prop-types */ 'use strict'; @@ -7476,7 +7649,7 @@ Modal.BACKDROP_TRANSITION_DURATION = 150; exports['default'] = _utilsBootstrapUtils.bsSizes([_styleMaps.Sizes.LARGE, _styleMaps.Sizes.SMALL], _utilsBootstrapUtils.bsClass('modal', Modal)); module.exports = exports['default']; -},{"./Fade":55,"./ModalBody":71,"./ModalDialog":72,"./ModalFooter":73,"./ModalHeader":74,"./ModalTitle":75,"./styleMaps":109,"./utils/bootstrapUtils":113,"babel-runtime/core-js/object/keys":121,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"classnames":34,"dom-helpers/events":158,"dom-helpers/ownerDocument":161,"dom-helpers/util/inDOM":179,"dom-helpers/util/scrollbarSize":180,"lodash-compat/object/pick":248,"react":501,"react-dom":280,"react-overlays/lib/Modal":252,"react-overlays/lib/utils/isOverflowing":263,"react-prop-types/lib/elementType":273}],71:[function(require,module,exports){ +},{"./Fade":56,"./ModalBody":72,"./ModalDialog":73,"./ModalFooter":74,"./ModalHeader":75,"./ModalTitle":76,"./styleMaps":110,"./utils/bootstrapUtils":114,"babel-runtime/core-js/object/keys":122,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"classnames":35,"dom-helpers/events":159,"dom-helpers/ownerDocument":162,"dom-helpers/util/inDOM":180,"dom-helpers/util/scrollbarSize":181,"lodash-compat/object/pick":249,"react":502,"react-dom":281,"react-overlays/lib/Modal":253,"react-overlays/lib/utils/isOverflowing":264,"react-prop-types/lib/elementType":274}],72:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -7524,7 +7697,7 @@ var ModalBody = (function (_React$Component) { exports['default'] = _utilsBootstrapUtils.bsClass('modal', ModalBody); module.exports = exports['default']; -},{"./utils/bootstrapUtils":113,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],72:[function(require,module,exports){ +},{"./utils/bootstrapUtils":114,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],73:[function(require,module,exports){ /* eslint-disable react/prop-types */ 'use strict'; @@ -7592,7 +7765,7 @@ var ModalDialog = _react2['default'].createClass({ exports['default'] = _utilsBootstrapUtils.bsSizes([_styleMaps.Sizes.LARGE, _styleMaps.Sizes.SMALL], _utilsBootstrapUtils.bsClass('modal', ModalDialog)); module.exports = exports['default']; -},{"./styleMaps":109,"./utils/bootstrapUtils":113,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],73:[function(require,module,exports){ +},{"./styleMaps":110,"./utils/bootstrapUtils":114,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],74:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -7651,7 +7824,7 @@ ModalFooter.defaultProps = { exports['default'] = _utilsBootstrapUtils.bsClass('modal', ModalFooter); module.exports = exports['default']; -},{"./utils/bootstrapUtils":113,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],74:[function(require,module,exports){ +},{"./utils/bootstrapUtils":114,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],75:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -7756,7 +7929,7 @@ ModalHeader.defaultProps = { exports['default'] = _utilsBootstrapUtils.bsClass('modal', ModalHeader); module.exports = exports['default']; -},{"./utils/bootstrapUtils":113,"./utils/createChainedFunction":116,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"classnames":34,"react":501}],75:[function(require,module,exports){ +},{"./utils/bootstrapUtils":114,"./utils/createChainedFunction":117,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"classnames":35,"react":502}],76:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -7804,7 +7977,7 @@ var ModalTitle = (function (_React$Component) { exports['default'] = _utilsBootstrapUtils.bsClass('modal', ModalTitle); module.exports = exports['default']; -},{"./utils/bootstrapUtils":113,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],76:[function(require,module,exports){ +},{"./utils/bootstrapUtils":114,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],77:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -8018,7 +8191,7 @@ Nav.defaultProps = { exports['default'] = _utilsBootstrapUtils.bsClass('nav', _utilsBootstrapUtils.bsStyles(['tabs', 'pills'], Nav)); module.exports = exports['default']; -},{"./Collapse":49,"./utils/ValidComponentChildren":112,"./utils/bootstrapUtils":113,"./utils/createChainedFunction":116,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501,"react-prop-types/lib/all":270,"react-prop-types/lib/deprecated":272}],77:[function(require,module,exports){ +},{"./Collapse":50,"./utils/ValidComponentChildren":113,"./utils/bootstrapUtils":114,"./utils/createChainedFunction":117,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502,"react-prop-types/lib/all":271,"react-prop-types/lib/deprecated":273}],78:[function(require,module,exports){ 'use strict'; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; @@ -8037,7 +8210,7 @@ exports['default'] = _utilsDeprecationWarning2['default'].wrapper(_NavbarBrand2[ message: 'The `NavBrand` component has been renamed to: `NavbarBrand`. ' + 'Please use that component instead; this alias will be removed in an upcoming release' }); module.exports = exports['default']; -},{"./NavbarBrand":81,"./utils/deprecationWarning":118,"babel-runtime/helpers/interop-require-default":126}],78:[function(require,module,exports){ +},{"./NavbarBrand":82,"./utils/deprecationWarning":119,"babel-runtime/helpers/interop-require-default":127}],79:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -8107,7 +8280,7 @@ NavDropdown.propTypes = _extends({ exports['default'] = NavDropdown; module.exports = exports['default']; -},{"./Dropdown":51,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"react":501}],79:[function(require,module,exports){ +},{"./Dropdown":52,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"react":502}],80:[function(require,module,exports){ 'use strict'; var _objectWithoutProperties = require('babel-runtime/helpers/object-without-properties')['default']; @@ -8219,7 +8392,7 @@ var NavItem = _react2['default'].createClass({ exports['default'] = NavItem; module.exports = exports['default']; //eslint-disable-line -},{"./SafeAnchor":98,"./utils/createChainedFunction":116,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"classnames":34,"react":501}],80:[function(require,module,exports){ +},{"./SafeAnchor":99,"./utils/createChainedFunction":117,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"classnames":35,"react":502}],81:[function(require,module,exports){ /* eslint react/no-multi-comp: 0 */ 'use strict'; @@ -8488,7 +8661,7 @@ Navbar.Link = createSimpleWrapper('a', 'link', 'NavbarLink'); exports['default'] = Navbar; module.exports = exports['default']; -},{"./Grid":60,"./NavbarBrand":81,"./NavbarCollapse":82,"./NavbarHeader":83,"./NavbarToggle":84,"./deprecated/Navbar":107,"./styleMaps":109,"./utils/ValidComponentChildren":112,"./utils/bootstrapUtils":113,"./utils/deprecationWarning":118,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"classnames":34,"react":501,"react-prop-types/lib/deprecated":272,"react-prop-types/lib/elementType":273,"uncontrollable":277}],81:[function(require,module,exports){ +},{"./Grid":61,"./NavbarBrand":82,"./NavbarCollapse":83,"./NavbarHeader":84,"./NavbarToggle":85,"./deprecated/Navbar":108,"./styleMaps":110,"./utils/ValidComponentChildren":113,"./utils/bootstrapUtils":114,"./utils/deprecationWarning":119,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"classnames":35,"react":502,"react-prop-types/lib/deprecated":273,"react-prop-types/lib/elementType":274,"uncontrollable":278}],82:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -8558,7 +8731,7 @@ NavbarBrand.contextTypes = { exports['default'] = NavbarBrand; module.exports = exports['default']; -},{"./utils/bootstrapUtils":113,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"classnames":34,"react":501}],82:[function(require,module,exports){ +},{"./utils/bootstrapUtils":114,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"classnames":35,"react":502}],83:[function(require,module,exports){ 'use strict'; var _objectWithoutProperties = require('babel-runtime/helpers/object-without-properties')['default']; @@ -8614,7 +8787,7 @@ var NavbarCollapse = _react2['default'].createClass({ exports['default'] = NavbarCollapse; module.exports = exports['default']; -},{"./Collapse":49,"./utils/bootstrapUtils":113,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"react":501}],83:[function(require,module,exports){ +},{"./Collapse":50,"./utils/bootstrapUtils":114,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"react":502}],84:[function(require,module,exports){ 'use strict'; var _objectWithoutProperties = require('babel-runtime/helpers/object-without-properties')['default']; @@ -8657,7 +8830,7 @@ var NavbarHeader = _react2['default'].createClass({ exports['default'] = NavbarHeader; module.exports = exports['default']; -},{"./utils/bootstrapUtils":113,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"react":501}],84:[function(require,module,exports){ +},{"./utils/bootstrapUtils":114,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"react":502}],85:[function(require,module,exports){ 'use strict'; var _objectWithoutProperties = require('babel-runtime/helpers/object-without-properties')['default']; @@ -8717,7 +8890,7 @@ var NavbarToggle = _react2['default'].createClass({ exports['default'] = NavbarToggle; module.exports = exports['default']; -},{"./utils/bootstrapUtils":113,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"react":501}],85:[function(require,module,exports){ +},{"./utils/bootstrapUtils":114,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"react":502}],86:[function(require,module,exports){ /* eslint react/prop-types: [2, {ignore: ["container", "containerPadding", "target", "placement", "children"] }] */ /* These properties are validated in 'Portal' and 'Position' components */ @@ -8857,7 +9030,7 @@ Overlay.defaultProps = { exports['default'] = Overlay; module.exports = exports['default']; -},{"./Fade":55,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"classnames":34,"react":501,"react-overlays/lib/Overlay":254,"react-prop-types/lib/elementType":273}],86:[function(require,module,exports){ +},{"./Fade":56,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"classnames":35,"react":502,"react-overlays/lib/Overlay":255,"react-prop-types/lib/elementType":274}],87:[function(require,module,exports){ (function (process){ /* eslint-disable react/prop-types */ @@ -9174,7 +9347,7 @@ var OverlayTrigger = _react2['default'].createClass({ exports['default'] = OverlayTrigger; module.exports = exports['default']; }).call(this,require('_process')) -},{"./Overlay":85,"./utils/createChainedFunction":116,"_process":33,"babel-runtime/core-js/object/keys":121,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"dom-helpers/query/contains":162,"lodash-compat/object/pick":248,"react":501,"react-dom":280,"warning":279}],87:[function(require,module,exports){ +},{"./Overlay":86,"./utils/createChainedFunction":117,"_process":34,"babel-runtime/core-js/object/keys":122,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"dom-helpers/query/contains":163,"lodash-compat/object/pick":249,"react":502,"react-dom":281,"warning":280}],88:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -9209,7 +9382,7 @@ var PageHeader = _react2['default'].createClass({ exports['default'] = PageHeader; module.exports = exports['default']; -},{"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],88:[function(require,module,exports){ +},{"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],89:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -9288,7 +9461,7 @@ var PageItem = _react2['default'].createClass({ exports['default'] = PageItem; module.exports = exports['default']; -},{"./SafeAnchor":98,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],89:[function(require,module,exports){ +},{"./SafeAnchor":99,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],90:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -9339,7 +9512,7 @@ var Pager = _react2['default'].createClass({ exports['default'] = Pager; module.exports = exports['default']; -},{"./utils/ValidComponentChildren":112,"./utils/createChainedFunction":116,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],90:[function(require,module,exports){ +},{"./utils/ValidComponentChildren":113,"./utils/createChainedFunction":117,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],91:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -9589,7 +9762,7 @@ var Pagination = _react2['default'].createClass({ exports['default'] = _utilsBootstrapUtils.bsClass('pagination', Pagination); module.exports = exports['default']; -},{"./PaginationButton":91,"./SafeAnchor":98,"./utils/bootstrapUtils":113,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501,"react-prop-types/lib/elementType":273}],91:[function(require,module,exports){ +},{"./PaginationButton":92,"./SafeAnchor":99,"./utils/bootstrapUtils":114,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502,"react-prop-types/lib/elementType":274}],92:[function(require,module,exports){ 'use strict'; var _objectWithoutProperties = require('babel-runtime/helpers/object-without-properties')['default']; @@ -9673,7 +9846,7 @@ var PaginationButton = _react2['default'].createClass({ exports['default'] = PaginationButton; module.exports = exports['default']; -},{"./utils/createSelectedEvent":117,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"classnames":34,"react":501,"react-prop-types/lib/elementType":273}],92:[function(require,module,exports){ +},{"./utils/createSelectedEvent":118,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"classnames":35,"react":502,"react-prop-types/lib/elementType":274}],93:[function(require,module,exports){ 'use strict'; var _objectWithoutProperties = require('babel-runtime/helpers/object-without-properties')['default']; @@ -9923,7 +10096,7 @@ var PANEL_STATES = _styleMaps.State.values().concat(_styleMaps.DEFAULT, _styleMa exports['default'] = _utilsBootstrapUtils.bsStyles(PANEL_STATES, _styleMaps.DEFAULT, _utilsBootstrapUtils.bsClass('panel', Panel)); module.exports = exports['default']; -},{"./Collapse":49,"./styleMaps":109,"./utils/bootstrapUtils":113,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"classnames":34,"react":501}],93:[function(require,module,exports){ +},{"./Collapse":50,"./styleMaps":110,"./utils/bootstrapUtils":114,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"classnames":35,"react":502}],94:[function(require,module,exports){ 'use strict'; var _objectWithoutProperties = require('babel-runtime/helpers/object-without-properties')['default']; @@ -10039,7 +10212,7 @@ var PanelGroup = _react2['default'].createClass({ exports['default'] = _utilsBootstrapUtils.bsClass('panel-group', PanelGroup); module.exports = exports['default']; -},{"./utils/ValidComponentChildren":112,"./utils/bootstrapUtils":113,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"classnames":34,"react":501}],94:[function(require,module,exports){ +},{"./utils/ValidComponentChildren":113,"./utils/bootstrapUtils":114,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"classnames":35,"react":502}],95:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -10152,7 +10325,7 @@ var Popover = _react2['default'].createClass({ exports['default'] = Popover; module.exports = exports['default']; // we don't want to expose the `style` property -},{"./utils/bootstrapUtils":113,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501,"react-prop-types/lib/isRequiredForA11y":274}],95:[function(require,module,exports){ +},{"./utils/bootstrapUtils":114,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502,"react-prop-types/lib/isRequiredForA11y":275}],96:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -10351,7 +10524,7 @@ ProgressBar.defaultProps = _extends({}, ProgressBar.defaultProps, { exports['default'] = _utilsBootstrapUtils.bsStyles(_styleMaps.State.values(), _utilsBootstrapUtils.bsClass('progress-bar', ProgressBar)); module.exports = exports['default']; -},{"./Interpolate":64,"./styleMaps":109,"./utils/ValidComponentChildren":112,"./utils/bootstrapUtils":113,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"classnames":34,"react":501}],96:[function(require,module,exports){ +},{"./Interpolate":65,"./styleMaps":110,"./utils/ValidComponentChildren":113,"./utils/bootstrapUtils":114,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"classnames":35,"react":502}],97:[function(require,module,exports){ (function (process){ 'use strict'; @@ -10447,7 +10620,7 @@ ResponsiveEmbed.propTypes = { exports['default'] = ResponsiveEmbed; module.exports = exports['default']; }).call(this,require('_process')) -},{"_process":33,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"classnames":34,"react":501,"warning":279}],97:[function(require,module,exports){ +},{"_process":34,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"classnames":35,"react":502,"warning":280}],98:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -10497,7 +10670,7 @@ var Row = _react2['default'].createClass({ exports['default'] = Row; module.exports = exports['default']; -},{"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501,"react-prop-types/lib/elementType":273}],98:[function(require,module,exports){ +},{"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502,"react-prop-types/lib/elementType":274}],99:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -10558,7 +10731,7 @@ SafeAnchor.propTypes = { onClick: _react2['default'].PropTypes.func }; module.exports = exports['default']; -},{"./utils/createChainedFunction":116,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"react":501}],99:[function(require,module,exports){ +},{"./utils/createChainedFunction":117,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"react":502}],100:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -10682,7 +10855,7 @@ SplitButton.Toggle = _SplitToggle2['default']; exports['default'] = SplitButton; module.exports = exports['default']; -},{"./Button":42,"./Dropdown":51,"./SplitToggle":100,"babel-runtime/core-js/object/keys":121,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"lodash-compat/object/omit":246,"lodash-compat/object/pick":248,"react":501}],100:[function(require,module,exports){ +},{"./Button":43,"./Dropdown":52,"./SplitToggle":101,"babel-runtime/core-js/object/keys":122,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"lodash-compat/object/omit":247,"lodash-compat/object/pick":249,"react":502}],101:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -10726,7 +10899,7 @@ exports['default'] = SplitToggle; SplitToggle.defaultProps = _DropdownToggle2['default'].defaultProps; module.exports = exports['default']; -},{"./DropdownToggle":54,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"react":501}],101:[function(require,module,exports){ +},{"./DropdownToggle":55,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"react":502}],102:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -10854,7 +11027,7 @@ var Tab = _react2['default'].createClass({ exports['default'] = Tab; module.exports = exports['default']; -},{"./utils/TransitionEvents":111,"./utils/bootstrapUtils":113,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501,"react-dom":280}],102:[function(require,module,exports){ +},{"./utils/TransitionEvents":112,"./utils/bootstrapUtils":114,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502,"react-dom":281}],103:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -10916,7 +11089,7 @@ var Table = _react2['default'].createClass({ exports['default'] = Table; module.exports = exports['default']; -},{"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],103:[function(require,module,exports){ +},{"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],104:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -11360,7 +11533,7 @@ var Tabs = _react2['default'].createClass({ exports['default'] = Tabs; module.exports = exports['default']; -},{"./Col":48,"./Nav":76,"./NavItem":79,"./styleMaps":109,"./utils/ValidComponentChildren":112,"./utils/bootstrapUtils":113,"./utils/createChainedFunction":116,"babel-runtime/core-js/object/keys":121,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"classnames":34,"keycode":182,"react":501,"react-dom":280}],104:[function(require,module,exports){ +},{"./Col":49,"./Nav":77,"./NavItem":80,"./styleMaps":110,"./utils/ValidComponentChildren":113,"./utils/bootstrapUtils":114,"./utils/createChainedFunction":117,"babel-runtime/core-js/object/keys":122,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"classnames":35,"keycode":183,"react":502,"react-dom":281}],105:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -11428,7 +11601,7 @@ var Thumbnail = _react2['default'].createClass({ exports['default'] = _utilsBootstrapUtils.bsClass('thumbnail', Thumbnail); module.exports = exports['default']; -},{"./SafeAnchor":98,"./utils/bootstrapUtils":113,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],105:[function(require,module,exports){ +},{"./SafeAnchor":99,"./utils/bootstrapUtils":114,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],106:[function(require,module,exports){ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; @@ -11528,7 +11701,7 @@ var Tooltip = _react2['default'].createClass({ exports['default'] = Tooltip; module.exports = exports['default']; -},{"./utils/bootstrapUtils":113,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501,"react-prop-types/lib/isRequiredForA11y":274}],106:[function(require,module,exports){ +},{"./utils/bootstrapUtils":114,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502,"react-prop-types/lib/isRequiredForA11y":275}],107:[function(require,module,exports){ 'use strict'; var _inherits = require('babel-runtime/helpers/inherits')['default']; @@ -11582,7 +11755,7 @@ var Well = (function (_React$Component) { exports['default'] = Well; module.exports = exports['default']; -},{"./styleMaps":109,"./utils/bootstrapUtils":113,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"classnames":34,"react":501}],107:[function(require,module,exports){ +},{"./styleMaps":110,"./utils/bootstrapUtils":114,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"classnames":35,"react":502}],108:[function(require,module,exports){ 'use strict'; var _objectWithoutProperties = require('babel-runtime/helpers/object-without-properties')['default']; @@ -11842,7 +12015,7 @@ var NAVBAR_STATES = [_styleMaps.DEFAULT, _styleMaps.INVERSE]; exports['default'] = _utilsBootstrapUtils.bsStyles(NAVBAR_STATES, _styleMaps.DEFAULT, _utilsBootstrapUtils.bsClass('navbar', Navbar)); module.exports = exports['default']; -},{"../Grid":60,"../NavBrand":77,"../styleMaps":109,"../utils/ValidComponentChildren":112,"../utils/bootstrapUtils":113,"../utils/createChainedFunction":116,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/object-without-properties":128,"classnames":34,"react":501,"react-prop-types/lib/deprecated":272,"react-prop-types/lib/elementType":273}],108:[function(require,module,exports){ +},{"../Grid":61,"../NavBrand":78,"../styleMaps":110,"../utils/ValidComponentChildren":113,"../utils/bootstrapUtils":114,"../utils/createChainedFunction":117,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/object-without-properties":129,"classnames":35,"react":502,"react-prop-types/lib/deprecated":273,"react-prop-types/lib/elementType":274}],109:[function(require,module,exports){ 'use strict'; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; @@ -12231,7 +12404,7 @@ var utils = { ValidComponentChildren: _utilsValidComponentChildren2['default'] }; exports.utils = utils; -},{"./Accordion":37,"./Alert":38,"./Badge":39,"./Breadcrumb":40,"./BreadcrumbItem":41,"./Button":42,"./ButtonGroup":43,"./ButtonInput":44,"./ButtonToolbar":45,"./Carousel":46,"./CarouselItem":47,"./Col":48,"./Collapse":49,"./CollapsibleNav":50,"./Dropdown":51,"./DropdownButton":52,"./Fade":55,"./FormControls":57,"./Glyphicon":59,"./Grid":60,"./Image":61,"./Input":62,"./Interpolate":64,"./Jumbotron":65,"./Label":66,"./ListGroup":67,"./ListGroupItem":68,"./MenuItem":69,"./Modal":70,"./ModalBody":71,"./ModalFooter":73,"./ModalHeader":74,"./ModalTitle":75,"./Nav":76,"./NavBrand":77,"./NavDropdown":78,"./NavItem":79,"./Navbar":80,"./NavbarBrand":81,"./Overlay":85,"./OverlayTrigger":86,"./PageHeader":87,"./PageItem":88,"./Pager":89,"./Pagination":90,"./Panel":92,"./PanelGroup":93,"./Popover":94,"./ProgressBar":95,"./ResponsiveEmbed":96,"./Row":97,"./SafeAnchor":98,"./SplitButton":99,"./Tab":101,"./Table":102,"./Tabs":103,"./Thumbnail":104,"./Tooltip":105,"./Well":106,"./utils/ValidComponentChildren":112,"./utils/bootstrapUtils":113,"./utils/childrenValueInputValidation":115,"./utils/createChainedFunction":116,"babel-runtime/helpers/interop-require-default":126,"babel-runtime/helpers/interop-require-wildcard":127}],109:[function(require,module,exports){ +},{"./Accordion":38,"./Alert":39,"./Badge":40,"./Breadcrumb":41,"./BreadcrumbItem":42,"./Button":43,"./ButtonGroup":44,"./ButtonInput":45,"./ButtonToolbar":46,"./Carousel":47,"./CarouselItem":48,"./Col":49,"./Collapse":50,"./CollapsibleNav":51,"./Dropdown":52,"./DropdownButton":53,"./Fade":56,"./FormControls":58,"./Glyphicon":60,"./Grid":61,"./Image":62,"./Input":63,"./Interpolate":65,"./Jumbotron":66,"./Label":67,"./ListGroup":68,"./ListGroupItem":69,"./MenuItem":70,"./Modal":71,"./ModalBody":72,"./ModalFooter":74,"./ModalHeader":75,"./ModalTitle":76,"./Nav":77,"./NavBrand":78,"./NavDropdown":79,"./NavItem":80,"./Navbar":81,"./NavbarBrand":82,"./Overlay":86,"./OverlayTrigger":87,"./PageHeader":88,"./PageItem":89,"./Pager":90,"./Pagination":91,"./Panel":93,"./PanelGroup":94,"./Popover":95,"./ProgressBar":96,"./ResponsiveEmbed":97,"./Row":98,"./SafeAnchor":99,"./SplitButton":100,"./Tab":102,"./Table":103,"./Tabs":104,"./Thumbnail":105,"./Tooltip":106,"./Well":107,"./utils/ValidComponentChildren":113,"./utils/bootstrapUtils":114,"./utils/childrenValueInputValidation":116,"./utils/createChainedFunction":117,"babel-runtime/helpers/interop-require-default":127,"babel-runtime/helpers/interop-require-wildcard":128}],110:[function(require,module,exports){ 'use strict'; var _Object$assign = require('babel-runtime/core-js/object/assign')['default']; @@ -12295,7 +12468,7 @@ var INVERSE = 'inverse'; exports.INVERSE = INVERSE; exports['default'] = styleMaps; -},{"babel-runtime/core-js/object/assign":119,"babel-runtime/core-js/object/create":120,"babel-runtime/core-js/object/keys":121}],110:[function(require,module,exports){ +},{"babel-runtime/core-js/object/assign":120,"babel-runtime/core-js/object/create":121,"babel-runtime/core-js/object/keys":122}],111:[function(require,module,exports){ 'use strict'; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; @@ -12367,7 +12540,7 @@ exports['default'] = { } }; module.exports = exports['default']; -},{"./childrenToArray":114,"babel-runtime/helpers/interop-require-default":126,"react-prop-types/lib/common":271}],111:[function(require,module,exports){ +},{"./childrenToArray":115,"babel-runtime/helpers/interop-require-default":127,"react-prop-types/lib/common":272}],112:[function(require,module,exports){ /** * Copyright 2013-2014, Facebook, Inc. * All rights reserved. @@ -12482,7 +12655,7 @@ var ReactTransitionEvents = { exports['default'] = ReactTransitionEvents; module.exports = exports['default']; -},{}],112:[function(require,module,exports){ +},{}],113:[function(require,module,exports){ 'use strict'; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; @@ -12626,7 +12799,7 @@ exports['default'] = { hasValidComponent: hasValidComponent }; module.exports = exports['default']; -},{"babel-runtime/helpers/interop-require-default":126,"react":501}],113:[function(require,module,exports){ +},{"babel-runtime/helpers/interop-require-default":127,"react":502}],114:[function(require,module,exports){ (function (process){ 'use strict'; @@ -12805,7 +12978,7 @@ exports['default'] = { var _curry = curry; exports._curry = _curry; }).call(this,require('_process')) -},{"../styleMaps":109,"_process":33,"babel-runtime/helpers/extends":124,"babel-runtime/helpers/interop-require-default":126,"invariant":181,"react":501,"warning":279}],114:[function(require,module,exports){ +},{"../styleMaps":110,"_process":34,"babel-runtime/helpers/extends":125,"babel-runtime/helpers/interop-require-default":127,"invariant":182,"react":502,"warning":280}],115:[function(require,module,exports){ 'use strict'; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; @@ -12832,7 +13005,7 @@ function childrenAsArray(children) { } module.exports = exports['default']; -},{"./ValidComponentChildren":112,"babel-runtime/helpers/interop-require-default":126}],115:[function(require,module,exports){ +},{"./ValidComponentChildren":113,"babel-runtime/helpers/interop-require-default":127}],116:[function(require,module,exports){ 'use strict'; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; @@ -12859,7 +13032,7 @@ function valueValidation(props, propName, componentName) { } module.exports = exports['default']; -},{"babel-runtime/helpers/interop-require-default":126,"react":501,"react-prop-types/lib/singlePropFrom":275}],116:[function(require,module,exports){ +},{"babel-runtime/helpers/interop-require-default":127,"react":502,"react-prop-types/lib/singlePropFrom":276}],117:[function(require,module,exports){ /** * Safe chained function * @@ -12901,7 +13074,7 @@ function createChainedFunction() { exports['default'] = createChainedFunction; module.exports = exports['default']; -},{}],117:[function(require,module,exports){ +},{}],118:[function(require,module,exports){ "use strict"; exports.__esModule = true; @@ -12924,7 +13097,7 @@ function createSelectedEvent(eventKey) { } module.exports = exports["default"]; -},{}],118:[function(require,module,exports){ +},{}],119:[function(require,module,exports){ (function (process){ 'use strict'; @@ -12998,15 +13171,15 @@ deprecationWarning.wrapper = function (Component) { exports['default'] = deprecationWarning; module.exports = exports['default']; }).call(this,require('_process')) -},{"_process":33,"babel-runtime/helpers/class-call-check":123,"babel-runtime/helpers/inherits":125,"babel-runtime/helpers/interop-require-default":126,"warning":279}],119:[function(require,module,exports){ +},{"_process":34,"babel-runtime/helpers/class-call-check":124,"babel-runtime/helpers/inherits":126,"babel-runtime/helpers/interop-require-default":127,"warning":280}],120:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/assign"), __esModule: true }; -},{"core-js/library/fn/object/assign":129}],120:[function(require,module,exports){ +},{"core-js/library/fn/object/assign":130}],121:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/create"), __esModule: true }; -},{"core-js/library/fn/object/create":130}],121:[function(require,module,exports){ +},{"core-js/library/fn/object/create":131}],122:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/keys"), __esModule: true }; -},{"core-js/library/fn/object/keys":131}],122:[function(require,module,exports){ +},{"core-js/library/fn/object/keys":132}],123:[function(require,module,exports){ module.exports = { "default": require("core-js/library/fn/object/set-prototype-of"), __esModule: true }; -},{"core-js/library/fn/object/set-prototype-of":132}],123:[function(require,module,exports){ +},{"core-js/library/fn/object/set-prototype-of":133}],124:[function(require,module,exports){ "use strict"; exports["default"] = function (instance, Constructor) { @@ -13016,7 +13189,7 @@ exports["default"] = function (instance, Constructor) { }; exports.__esModule = true; -},{}],124:[function(require,module,exports){ +},{}],125:[function(require,module,exports){ "use strict"; var _Object$assign = require("babel-runtime/core-js/object/assign")["default"]; @@ -13036,7 +13209,7 @@ exports["default"] = _Object$assign || function (target) { }; exports.__esModule = true; -},{"babel-runtime/core-js/object/assign":119}],125:[function(require,module,exports){ +},{"babel-runtime/core-js/object/assign":120}],126:[function(require,module,exports){ "use strict"; var _Object$create = require("babel-runtime/core-js/object/create")["default"]; @@ -13060,7 +13233,7 @@ exports["default"] = function (subClass, superClass) { }; exports.__esModule = true; -},{"babel-runtime/core-js/object/create":120,"babel-runtime/core-js/object/set-prototype-of":122}],126:[function(require,module,exports){ +},{"babel-runtime/core-js/object/create":121,"babel-runtime/core-js/object/set-prototype-of":123}],127:[function(require,module,exports){ "use strict"; exports["default"] = function (obj) { @@ -13070,7 +13243,7 @@ exports["default"] = function (obj) { }; exports.__esModule = true; -},{}],127:[function(require,module,exports){ +},{}],128:[function(require,module,exports){ "use strict"; exports["default"] = function (obj) { @@ -13091,7 +13264,7 @@ exports["default"] = function (obj) { }; exports.__esModule = true; -},{}],128:[function(require,module,exports){ +},{}],129:[function(require,module,exports){ "use strict"; exports["default"] = function (obj, keys) { @@ -13107,41 +13280,41 @@ exports["default"] = function (obj, keys) { }; exports.__esModule = true; -},{}],129:[function(require,module,exports){ +},{}],130:[function(require,module,exports){ require('../../modules/es6.object.assign'); module.exports = require('../../modules/$.core').Object.assign; -},{"../../modules/$.core":136,"../../modules/es6.object.assign":149}],130:[function(require,module,exports){ +},{"../../modules/$.core":137,"../../modules/es6.object.assign":150}],131:[function(require,module,exports){ var $ = require('../../modules/$'); module.exports = function create(P, D){ return $.create(P, D); }; -},{"../../modules/$":144}],131:[function(require,module,exports){ +},{"../../modules/$":145}],132:[function(require,module,exports){ require('../../modules/es6.object.keys'); module.exports = require('../../modules/$.core').Object.keys; -},{"../../modules/$.core":136,"../../modules/es6.object.keys":150}],132:[function(require,module,exports){ +},{"../../modules/$.core":137,"../../modules/es6.object.keys":151}],133:[function(require,module,exports){ require('../../modules/es6.object.set-prototype-of'); module.exports = require('../../modules/$.core').Object.setPrototypeOf; -},{"../../modules/$.core":136,"../../modules/es6.object.set-prototype-of":151}],133:[function(require,module,exports){ +},{"../../modules/$.core":137,"../../modules/es6.object.set-prototype-of":152}],134:[function(require,module,exports){ module.exports = function(it){ if(typeof it != 'function')throw TypeError(it + ' is not a function!'); return it; }; -},{}],134:[function(require,module,exports){ +},{}],135:[function(require,module,exports){ var isObject = require('./$.is-object'); module.exports = function(it){ if(!isObject(it))throw TypeError(it + ' is not an object!'); return it; }; -},{"./$.is-object":143}],135:[function(require,module,exports){ +},{"./$.is-object":144}],136:[function(require,module,exports){ var toString = {}.toString; module.exports = function(it){ return toString.call(it).slice(8, -1); }; -},{}],136:[function(require,module,exports){ +},{}],137:[function(require,module,exports){ var core = module.exports = {version: '1.2.6'}; if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef -},{}],137:[function(require,module,exports){ +},{}],138:[function(require,module,exports){ // optional / simple context binding var aFunction = require('./$.a-function'); module.exports = function(fn, that, length){ @@ -13162,13 +13335,13 @@ module.exports = function(fn, that, length){ return fn.apply(that, arguments); }; }; -},{"./$.a-function":133}],138:[function(require,module,exports){ +},{"./$.a-function":134}],139:[function(require,module,exports){ // 7.2.1 RequireObjectCoercible(argument) module.exports = function(it){ if(it == undefined)throw TypeError("Can't call method on " + it); return it; }; -},{}],139:[function(require,module,exports){ +},{}],140:[function(require,module,exports){ var global = require('./$.global') , core = require('./$.core') , ctx = require('./$.ctx') @@ -13215,7 +13388,7 @@ $export.P = 8; // proto $export.B = 16; // bind $export.W = 32; // wrap module.exports = $export; -},{"./$.core":136,"./$.ctx":137,"./$.global":141}],140:[function(require,module,exports){ +},{"./$.core":137,"./$.ctx":138,"./$.global":142}],141:[function(require,module,exports){ module.exports = function(exec){ try { return !!exec(); @@ -13223,22 +13396,22 @@ module.exports = function(exec){ return true; } }; -},{}],141:[function(require,module,exports){ +},{}],142:[function(require,module,exports){ // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 var global = module.exports = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef -},{}],142:[function(require,module,exports){ +},{}],143:[function(require,module,exports){ // fallback for non-array-like ES3 and non-enumerable old V8 strings var cof = require('./$.cof'); module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){ return cof(it) == 'String' ? it.split('') : Object(it); }; -},{"./$.cof":135}],143:[function(require,module,exports){ +},{"./$.cof":136}],144:[function(require,module,exports){ module.exports = function(it){ return typeof it === 'object' ? it !== null : typeof it === 'function'; }; -},{}],144:[function(require,module,exports){ +},{}],145:[function(require,module,exports){ var $Object = Object; module.exports = { create: $Object.create, @@ -13252,7 +13425,7 @@ module.exports = { getSymbols: $Object.getOwnPropertySymbols, each: [].forEach }; -},{}],145:[function(require,module,exports){ +},{}],146:[function(require,module,exports){ // 19.1.2.1 Object.assign(target, source, ...) var $ = require('./$') , toObject = require('./$.to-object') @@ -13286,7 +13459,7 @@ module.exports = require('./$.fails')(function(){ } return T; } : Object.assign; -},{"./$":144,"./$.fails":140,"./$.iobject":142,"./$.to-object":148}],146:[function(require,module,exports){ +},{"./$":145,"./$.fails":141,"./$.iobject":143,"./$.to-object":149}],147:[function(require,module,exports){ // most Object methods by ES6 should accept primitives var $export = require('./$.export') , core = require('./$.core') @@ -13297,7 +13470,7 @@ module.exports = function(KEY, exec){ exp[KEY] = exec(fn); $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp); }; -},{"./$.core":136,"./$.export":139,"./$.fails":140}],147:[function(require,module,exports){ +},{"./$.core":137,"./$.export":140,"./$.fails":141}],148:[function(require,module,exports){ // Works with __proto__ only. Old v8 can't work with null proto objects. /* eslint-disable no-proto */ var getDesc = require('./$').getDesc @@ -13324,18 +13497,18 @@ module.exports = { }({}, false) : undefined), check: check }; -},{"./$":144,"./$.an-object":134,"./$.ctx":137,"./$.is-object":143}],148:[function(require,module,exports){ +},{"./$":145,"./$.an-object":135,"./$.ctx":138,"./$.is-object":144}],149:[function(require,module,exports){ // 7.1.13 ToObject(argument) var defined = require('./$.defined'); module.exports = function(it){ return Object(defined(it)); }; -},{"./$.defined":138}],149:[function(require,module,exports){ +},{"./$.defined":139}],150:[function(require,module,exports){ // 19.1.3.1 Object.assign(target, source) var $export = require('./$.export'); $export($export.S + $export.F, 'Object', {assign: require('./$.object-assign')}); -},{"./$.export":139,"./$.object-assign":145}],150:[function(require,module,exports){ +},{"./$.export":140,"./$.object-assign":146}],151:[function(require,module,exports){ // 19.1.2.14 Object.keys(O) var toObject = require('./$.to-object'); @@ -13344,11 +13517,11 @@ require('./$.object-sap')('keys', function($keys){ return $keys(toObject(it)); }; }); -},{"./$.object-sap":146,"./$.to-object":148}],151:[function(require,module,exports){ +},{"./$.object-sap":147,"./$.to-object":149}],152:[function(require,module,exports){ // 19.1.3.19 Object.setPrototypeOf(O, proto) var $export = require('./$.export'); $export($export.S, 'Object', {setPrototypeOf: require('./$.set-proto').set}); -},{"./$.export":139,"./$.set-proto":147}],152:[function(require,module,exports){ +},{"./$.export":140,"./$.set-proto":148}],153:[function(require,module,exports){ 'use strict'; var babelHelpers = require('./util/babelHelpers.js'); @@ -13373,19 +13546,19 @@ function activeElement() { } module.exports = exports['default']; -},{"./ownerDocument":161,"./util/babelHelpers.js":174}],153:[function(require,module,exports){ +},{"./ownerDocument":162,"./util/babelHelpers.js":175}],154:[function(require,module,exports){ 'use strict'; var hasClass = require('./hasClass'); module.exports = function addClass(element, className) { if (element.classList) element.classList.add(className);else if (!hasClass(element)) element.className = element.className + ' ' + className; }; -},{"./hasClass":154}],154:[function(require,module,exports){ +},{"./hasClass":155}],155:[function(require,module,exports){ 'use strict'; module.exports = function hasClass(element, className) { if (element.classList) return !!className && element.classList.contains(className);else return (' ' + element.className + ' ').indexOf(' ' + className + ' ') !== -1; }; -},{}],155:[function(require,module,exports){ +},{}],156:[function(require,module,exports){ 'use strict'; module.exports = { @@ -13393,13 +13566,13 @@ module.exports = { removeClass: require('./removeClass'), hasClass: require('./hasClass') }; -},{"./addClass":153,"./hasClass":154,"./removeClass":156}],156:[function(require,module,exports){ +},{"./addClass":154,"./hasClass":155,"./removeClass":157}],157:[function(require,module,exports){ 'use strict'; module.exports = function removeClass(element, className) { if (element.classList) element.classList.remove(className);else element.className = element.className.replace(new RegExp('(^|\\s)' + className + '(?:\\s|$)', 'g'), '$1').replace(/\s+/g, ' ').replace(/^\s*|\s*$/g, ''); }; -},{}],157:[function(require,module,exports){ +},{}],158:[function(require,module,exports){ 'use strict'; var contains = require('../query/contains'), @@ -13416,14 +13589,14 @@ module.exports = function (selector, handler) { })) handler.call(this, e); }; }; -},{"../query/contains":162,"../query/querySelectorAll":167}],158:[function(require,module,exports){ +},{"../query/contains":163,"../query/querySelectorAll":168}],159:[function(require,module,exports){ 'use strict'; var on = require('./on'), off = require('./off'), filter = require('./filter'); module.exports = { on: on, off: off, filter: filter }; -},{"./filter":157,"./off":159,"./on":160}],159:[function(require,module,exports){ +},{"./filter":158,"./off":160,"./on":161}],160:[function(require,module,exports){ 'use strict'; var canUseDOM = require('../util/inDOM'); var off = function off() {}; @@ -13441,7 +13614,7 @@ if (canUseDOM) { } module.exports = off; -},{"../util/inDOM":179}],160:[function(require,module,exports){ +},{"../util/inDOM":180}],161:[function(require,module,exports){ 'use strict'; var canUseDOM = require('../util/inDOM'); var on = function on() {}; @@ -13458,7 +13631,7 @@ if (canUseDOM) { } module.exports = on; -},{"../util/inDOM":179}],161:[function(require,module,exports){ +},{"../util/inDOM":180}],162:[function(require,module,exports){ "use strict"; exports.__esModule = true; @@ -13469,7 +13642,7 @@ function ownerDocument(node) { } module.exports = exports["default"]; -},{}],162:[function(require,module,exports){ +},{}],163:[function(require,module,exports){ 'use strict'; var canUseDOM = require('../util/inDOM'); @@ -13490,13 +13663,13 @@ var contains = (function () { })(); module.exports = contains; -},{"../util/inDOM":179}],163:[function(require,module,exports){ +},{"../util/inDOM":180}],164:[function(require,module,exports){ 'use strict'; module.exports = function getWindow(node) { return node === node.window ? node : node.nodeType === 9 ? node.defaultView || node.parentWindow : false; }; -},{}],164:[function(require,module,exports){ +},{}],165:[function(require,module,exports){ 'use strict'; var contains = require('./contains'), getWindow = require('./isWindow'), @@ -13527,7 +13700,7 @@ module.exports = function offset(node) { return box; }; -},{"../ownerDocument":161,"./contains":162,"./isWindow":163}],165:[function(require,module,exports){ +},{"../ownerDocument":162,"./contains":163,"./isWindow":164}],166:[function(require,module,exports){ 'use strict'; var babelHelpers = require('../util/babelHelpers.js'); @@ -13559,7 +13732,7 @@ function offsetParent(node) { } module.exports = exports['default']; -},{"../ownerDocument":161,"../style":171,"../util/babelHelpers.js":174}],166:[function(require,module,exports){ +},{"../ownerDocument":162,"../style":172,"../util/babelHelpers.js":175}],167:[function(require,module,exports){ 'use strict'; var babelHelpers = require('../util/babelHelpers.js'); @@ -13617,7 +13790,7 @@ function position(node, offsetParent) { } module.exports = exports['default']; -},{"../style":171,"../util/babelHelpers.js":174,"./offset":164,"./offsetParent":165,"./scrollLeft":168,"./scrollTop":169}],167:[function(require,module,exports){ +},{"../style":172,"../util/babelHelpers.js":175,"./offset":165,"./offsetParent":166,"./scrollLeft":169,"./scrollTop":170}],168:[function(require,module,exports){ 'use strict'; // Zepto.js // (c) 2010-2015 Thomas Fuchs @@ -13645,7 +13818,7 @@ module.exports = function qsa(element, selector) { return toArray(element.querySelectorAll(selector)); }; -},{}],168:[function(require,module,exports){ +},{}],169:[function(require,module,exports){ 'use strict'; var getWindow = require('./isWindow'); @@ -13656,7 +13829,7 @@ module.exports = function scrollTop(node, val) { if (win) win.scrollTo(val, 'pageYOffset' in win ? win.pageYOffset : win.document.documentElement.scrollTop);else node.scrollLeft = val; }; -},{"./isWindow":163}],169:[function(require,module,exports){ +},{"./isWindow":164}],170:[function(require,module,exports){ 'use strict'; var getWindow = require('./isWindow'); @@ -13667,7 +13840,7 @@ module.exports = function scrollTop(node, val) { if (win) win.scrollTo('pageXOffset' in win ? win.pageXOffset : win.document.documentElement.scrollLeft, val);else node.scrollTop = val; }; -},{"./isWindow":163}],170:[function(require,module,exports){ +},{"./isWindow":164}],171:[function(require,module,exports){ 'use strict'; var babelHelpers = require('../util/babelHelpers.js'); @@ -13716,7 +13889,7 @@ module.exports = function _getComputedStyle(node) { } }; }; -},{"../util/babelHelpers.js":174,"../util/camelizeStyle":176}],171:[function(require,module,exports){ +},{"../util/babelHelpers.js":175,"../util/camelizeStyle":177}],172:[function(require,module,exports){ 'use strict'; var camelize = require('../util/camelizeStyle'), @@ -13741,13 +13914,13 @@ module.exports = function style(node, property, value) { node.style.cssText += ';' + css; }; -},{"../util/camelizeStyle":176,"../util/hyphenateStyle":178,"./getComputedStyle":170,"./removeStyle":172}],172:[function(require,module,exports){ +},{"../util/camelizeStyle":177,"../util/hyphenateStyle":179,"./getComputedStyle":171,"./removeStyle":173}],173:[function(require,module,exports){ 'use strict'; module.exports = function removeStyle(node, key) { return 'removeProperty' in node.style ? node.style.removeProperty(key) : node.style.removeAttribute(key); }; -},{}],173:[function(require,module,exports){ +},{}],174:[function(require,module,exports){ 'use strict'; var canUseDOM = require('../util/inDOM'); @@ -13803,7 +13976,7 @@ function getTransitionProperties() { return { end: endEvent, prefix: prefix }; } -},{"../util/inDOM":179}],174:[function(require,module,exports){ +},{"../util/inDOM":180}],175:[function(require,module,exports){ (function (root, factory) { if (typeof define === "function" && define.amd) { define(["exports"], factory); @@ -13835,7 +14008,7 @@ function getTransitionProperties() { return target; }; }) -},{}],175:[function(require,module,exports){ +},{}],176:[function(require,module,exports){ "use strict"; var rHyphen = /-(.)/g; @@ -13845,7 +14018,7 @@ module.exports = function camelize(string) { return chr.toUpperCase(); }); }; -},{}],176:[function(require,module,exports){ +},{}],177:[function(require,module,exports){ /** * Copyright 2014-2015, Facebook, Inc. * All rights reserved. @@ -13859,7 +14032,7 @@ var msPattern = /^-ms-/; module.exports = function camelizeStyleName(string) { return camelize(string.replace(msPattern, 'ms-')); }; -},{"./camelize":175}],177:[function(require,module,exports){ +},{"./camelize":176}],178:[function(require,module,exports){ 'use strict'; var rUpper = /([A-Z])/g; @@ -13867,7 +14040,7 @@ var rUpper = /([A-Z])/g; module.exports = function hyphenate(string) { return string.replace(rUpper, '-$1').toLowerCase(); }; -},{}],178:[function(require,module,exports){ +},{}],179:[function(require,module,exports){ /** * Copyright 2013-2014, Facebook, Inc. * All rights reserved. @@ -13882,10 +14055,10 @@ var msPattern = /^ms-/; module.exports = function hyphenateStyleName(string) { return hyphenate(string).replace(msPattern, "-ms-"); }; -},{"./hyphenate":177}],179:[function(require,module,exports){ +},{"./hyphenate":178}],180:[function(require,module,exports){ 'use strict'; module.exports = !!(typeof window !== 'undefined' && window.document && window.document.createElement); -},{}],180:[function(require,module,exports){ +},{}],181:[function(require,module,exports){ 'use strict'; var canUseDOM = require('./inDOM'); @@ -13911,7 +14084,7 @@ module.exports = function (recalc) { return size; }; -},{"./inDOM":179}],181:[function(require,module,exports){ +},{"./inDOM":180}],182:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -13966,7 +14139,7 @@ var invariant = function(condition, format, a, b, c, d, e, f) { module.exports = invariant; }).call(this,require('_process')) -},{"_process":33}],182:[function(require,module,exports){ +},{"_process":34}],183:[function(require,module,exports){ // Source: http://jsfiddle.net/vWx8V/ // http://stackoverflow.com/questions/5603195/full-list-of-javascript-keycodes @@ -14115,7 +14288,7 @@ for (var alias in aliases) { codes[alias] = aliases[alias] } -},{}],183:[function(require,module,exports){ +},{}],184:[function(require,module,exports){ /** * Gets the last element of `array`. * @@ -14136,7 +14309,7 @@ function last(array) { module.exports = last; -},{}],184:[function(require,module,exports){ +},{}],185:[function(require,module,exports){ var baseEach = require('../internal/baseEach'), createFind = require('../internal/createFind'); @@ -14194,7 +14367,7 @@ var find = createFind(baseEach); module.exports = find; -},{"../internal/baseEach":193,"../internal/createFind":217}],185:[function(require,module,exports){ +},{"../internal/baseEach":194,"../internal/createFind":218}],186:[function(require,module,exports){ /** Used as the `TypeError` message for "Functions" methods. */ var FUNC_ERROR_TEXT = 'Expected a function'; @@ -14254,7 +14427,7 @@ function restParam(func, start) { module.exports = restParam; -},{}],186:[function(require,module,exports){ +},{}],187:[function(require,module,exports){ (function (global){ var cachePush = require('./cachePush'), getNative = require('./getNative'); @@ -14287,7 +14460,7 @@ SetCache.prototype.push = cachePush; module.exports = SetCache; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./cachePush":213,"./getNative":223}],187:[function(require,module,exports){ +},{"./cachePush":214,"./getNative":224}],188:[function(require,module,exports){ /** * A specialized version of `_.forEach` for arrays without support for callback * shorthands and `this` binding. @@ -14311,7 +14484,7 @@ function arrayEach(array, iteratee) { module.exports = arrayEach; -},{}],188:[function(require,module,exports){ +},{}],189:[function(require,module,exports){ /** * A specialized version of `_.map` for arrays without support for callback * shorthands and `this` binding. @@ -14334,7 +14507,7 @@ function arrayMap(array, iteratee) { module.exports = arrayMap; -},{}],189:[function(require,module,exports){ +},{}],190:[function(require,module,exports){ /** * Appends the elements of `values` to `array`. * @@ -14356,7 +14529,7 @@ function arrayPush(array, values) { module.exports = arrayPush; -},{}],190:[function(require,module,exports){ +},{}],191:[function(require,module,exports){ /** * A specialized version of `_.some` for arrays without support for callback * shorthands and `this` binding. @@ -14381,7 +14554,7 @@ function arraySome(array, predicate) { module.exports = arraySome; -},{}],191:[function(require,module,exports){ +},{}],192:[function(require,module,exports){ var baseMatches = require('./baseMatches'), baseMatchesProperty = require('./baseMatchesProperty'), bindCallback = require('./bindCallback'), @@ -14418,7 +14591,7 @@ function baseCallback(func, thisArg, argCount) { module.exports = baseCallback; -},{"../utility/identity":250,"../utility/property":251,"./baseMatches":205,"./baseMatchesProperty":206,"./bindCallback":211}],192:[function(require,module,exports){ +},{"../utility/identity":251,"../utility/property":252,"./baseMatches":206,"./baseMatchesProperty":207,"./bindCallback":212}],193:[function(require,module,exports){ var baseIndexOf = require('./baseIndexOf'), cacheIndexOf = require('./cacheIndexOf'), createCache = require('./createCache'); @@ -14475,7 +14648,7 @@ function baseDifference(array, values) { module.exports = baseDifference; -},{"./baseIndexOf":201,"./cacheIndexOf":212,"./createCache":216}],193:[function(require,module,exports){ +},{"./baseIndexOf":202,"./cacheIndexOf":213,"./createCache":217}],194:[function(require,module,exports){ var baseForOwn = require('./baseForOwn'), createBaseEach = require('./createBaseEach'); @@ -14492,7 +14665,7 @@ var baseEach = createBaseEach(baseForOwn); module.exports = baseEach; -},{"./baseForOwn":199,"./createBaseEach":214}],194:[function(require,module,exports){ +},{"./baseForOwn":200,"./createBaseEach":215}],195:[function(require,module,exports){ /** * The base implementation of `_.find`, `_.findLast`, `_.findKey`, and `_.findLastKey`, * without support for callback shorthands and `this` binding, which iterates @@ -14519,7 +14692,7 @@ function baseFind(collection, predicate, eachFunc, retKey) { module.exports = baseFind; -},{}],195:[function(require,module,exports){ +},{}],196:[function(require,module,exports){ /** * The base implementation of `_.findIndex` and `_.findLastIndex` without * support for callback shorthands and `this` binding. @@ -14544,7 +14717,7 @@ function baseFindIndex(array, predicate, fromRight) { module.exports = baseFindIndex; -},{}],196:[function(require,module,exports){ +},{}],197:[function(require,module,exports){ var arrayPush = require('./arrayPush'), isArguments = require('../lang/isArguments'), isArray = require('../lang/isArray'), @@ -14587,7 +14760,7 @@ function baseFlatten(array, isDeep, isStrict, result) { module.exports = baseFlatten; -},{"../lang/isArguments":237,"../lang/isArray":238,"./arrayPush":189,"./isArrayLike":225,"./isObjectLike":230}],197:[function(require,module,exports){ +},{"../lang/isArguments":238,"../lang/isArray":239,"./arrayPush":190,"./isArrayLike":226,"./isObjectLike":231}],198:[function(require,module,exports){ var createBaseFor = require('./createBaseFor'); /** @@ -14606,7 +14779,7 @@ var baseFor = createBaseFor(); module.exports = baseFor; -},{"./createBaseFor":215}],198:[function(require,module,exports){ +},{"./createBaseFor":216}],199:[function(require,module,exports){ var baseFor = require('./baseFor'), keysIn = require('../object/keysIn'); @@ -14625,7 +14798,7 @@ function baseForIn(object, iteratee) { module.exports = baseForIn; -},{"../object/keysIn":245,"./baseFor":197}],199:[function(require,module,exports){ +},{"../object/keysIn":246,"./baseFor":198}],200:[function(require,module,exports){ var baseFor = require('./baseFor'), keys = require('../object/keys'); @@ -14644,7 +14817,7 @@ function baseForOwn(object, iteratee) { module.exports = baseForOwn; -},{"../object/keys":244,"./baseFor":197}],200:[function(require,module,exports){ +},{"../object/keys":245,"./baseFor":198}],201:[function(require,module,exports){ var toObject = require('./toObject'); /** @@ -14676,7 +14849,7 @@ function baseGet(object, path, pathKey) { module.exports = baseGet; -},{"./toObject":235}],201:[function(require,module,exports){ +},{"./toObject":236}],202:[function(require,module,exports){ var indexOfNaN = require('./indexOfNaN'); /** @@ -14705,7 +14878,7 @@ function baseIndexOf(array, value, fromIndex) { module.exports = baseIndexOf; -},{"./indexOfNaN":224}],202:[function(require,module,exports){ +},{"./indexOfNaN":225}],203:[function(require,module,exports){ var baseIsEqualDeep = require('./baseIsEqualDeep'), isObject = require('../lang/isObject'), isObjectLike = require('./isObjectLike'); @@ -14735,7 +14908,7 @@ function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) { module.exports = baseIsEqual; -},{"../lang/isObject":241,"./baseIsEqualDeep":203,"./isObjectLike":230}],203:[function(require,module,exports){ +},{"../lang/isObject":242,"./baseIsEqualDeep":204,"./isObjectLike":231}],204:[function(require,module,exports){ var equalArrays = require('./equalArrays'), equalByTag = require('./equalByTag'), equalObjects = require('./equalObjects'), @@ -14840,7 +15013,7 @@ function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, module.exports = baseIsEqualDeep; -},{"../lang/isArray":238,"../lang/isTypedArray":243,"./equalArrays":218,"./equalByTag":219,"./equalObjects":220,"./isHostObject":226}],204:[function(require,module,exports){ +},{"../lang/isArray":239,"../lang/isTypedArray":244,"./equalArrays":219,"./equalByTag":220,"./equalObjects":221,"./isHostObject":227}],205:[function(require,module,exports){ var baseIsEqual = require('./baseIsEqual'), toObject = require('./toObject'); @@ -14894,7 +15067,7 @@ function baseIsMatch(object, matchData, customizer) { module.exports = baseIsMatch; -},{"./baseIsEqual":202,"./toObject":235}],205:[function(require,module,exports){ +},{"./baseIsEqual":203,"./toObject":236}],206:[function(require,module,exports){ var baseIsMatch = require('./baseIsMatch'), getMatchData = require('./getMatchData'), toObject = require('./toObject'); @@ -14927,7 +15100,7 @@ function baseMatches(source) { module.exports = baseMatches; -},{"./baseIsMatch":204,"./getMatchData":222,"./toObject":235}],206:[function(require,module,exports){ +},{"./baseIsMatch":205,"./getMatchData":223,"./toObject":236}],207:[function(require,module,exports){ var baseGet = require('./baseGet'), baseIsEqual = require('./baseIsEqual'), baseSlice = require('./baseSlice'), @@ -14974,7 +15147,7 @@ function baseMatchesProperty(path, srcValue) { module.exports = baseMatchesProperty; -},{"../array/last":183,"../lang/isArray":238,"./baseGet":200,"./baseIsEqual":202,"./baseSlice":209,"./isKey":228,"./isStrictComparable":231,"./toObject":235,"./toPath":236}],207:[function(require,module,exports){ +},{"../array/last":184,"../lang/isArray":239,"./baseGet":201,"./baseIsEqual":203,"./baseSlice":210,"./isKey":229,"./isStrictComparable":232,"./toObject":236,"./toPath":237}],208:[function(require,module,exports){ var toObject = require('./toObject'); /** @@ -14992,7 +15165,7 @@ function baseProperty(key) { module.exports = baseProperty; -},{"./toObject":235}],208:[function(require,module,exports){ +},{"./toObject":236}],209:[function(require,module,exports){ var baseGet = require('./baseGet'), toPath = require('./toPath'); @@ -15013,7 +15186,7 @@ function basePropertyDeep(path) { module.exports = basePropertyDeep; -},{"./baseGet":200,"./toPath":236}],209:[function(require,module,exports){ +},{"./baseGet":201,"./toPath":237}],210:[function(require,module,exports){ /** * The base implementation of `_.slice` without an iteratee call guard. * @@ -15047,7 +15220,7 @@ function baseSlice(array, start, end) { module.exports = baseSlice; -},{}],210:[function(require,module,exports){ +},{}],211:[function(require,module,exports){ /** * Converts `value` to a string if it's not one. An empty string is returned * for `null` or `undefined` values. @@ -15062,7 +15235,7 @@ function baseToString(value) { module.exports = baseToString; -},{}],211:[function(require,module,exports){ +},{}],212:[function(require,module,exports){ var identity = require('../utility/identity'); /** @@ -15103,7 +15276,7 @@ function bindCallback(func, thisArg, argCount) { module.exports = bindCallback; -},{"../utility/identity":250}],212:[function(require,module,exports){ +},{"../utility/identity":251}],213:[function(require,module,exports){ var isObject = require('../lang/isObject'); /** @@ -15124,7 +15297,7 @@ function cacheIndexOf(cache, value) { module.exports = cacheIndexOf; -},{"../lang/isObject":241}],213:[function(require,module,exports){ +},{"../lang/isObject":242}],214:[function(require,module,exports){ var isObject = require('../lang/isObject'); /** @@ -15146,7 +15319,7 @@ function cachePush(value) { module.exports = cachePush; -},{"../lang/isObject":241}],214:[function(require,module,exports){ +},{"../lang/isObject":242}],215:[function(require,module,exports){ var getLength = require('./getLength'), isLength = require('./isLength'), toObject = require('./toObject'); @@ -15179,7 +15352,7 @@ function createBaseEach(eachFunc, fromRight) { module.exports = createBaseEach; -},{"./getLength":221,"./isLength":229,"./toObject":235}],215:[function(require,module,exports){ +},{"./getLength":222,"./isLength":230,"./toObject":236}],216:[function(require,module,exports){ var toObject = require('./toObject'); /** @@ -15208,7 +15381,7 @@ function createBaseFor(fromRight) { module.exports = createBaseFor; -},{"./toObject":235}],216:[function(require,module,exports){ +},{"./toObject":236}],217:[function(require,module,exports){ (function (global){ var SetCache = require('./SetCache'), getNative = require('./getNative'); @@ -15233,7 +15406,7 @@ function createCache(values) { module.exports = createCache; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./SetCache":186,"./getNative":223}],217:[function(require,module,exports){ +},{"./SetCache":187,"./getNative":224}],218:[function(require,module,exports){ var baseCallback = require('./baseCallback'), baseFind = require('./baseFind'), baseFindIndex = require('./baseFindIndex'), @@ -15260,7 +15433,7 @@ function createFind(eachFunc, fromRight) { module.exports = createFind; -},{"../lang/isArray":238,"./baseCallback":191,"./baseFind":194,"./baseFindIndex":195}],218:[function(require,module,exports){ +},{"../lang/isArray":239,"./baseCallback":192,"./baseFind":195,"./baseFindIndex":196}],219:[function(require,module,exports){ var arraySome = require('./arraySome'); /** @@ -15313,7 +15486,7 @@ function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stack module.exports = equalArrays; -},{"./arraySome":190}],219:[function(require,module,exports){ +},{"./arraySome":191}],220:[function(require,module,exports){ /** `Object#toString` result references. */ var boolTag = '[object Boolean]', dateTag = '[object Date]', @@ -15363,7 +15536,7 @@ function equalByTag(object, other, tag) { module.exports = equalByTag; -},{}],220:[function(require,module,exports){ +},{}],221:[function(require,module,exports){ var keys = require('../object/keys'); /** Used for native method references. */ @@ -15432,7 +15605,7 @@ function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, sta module.exports = equalObjects; -},{"../object/keys":244}],221:[function(require,module,exports){ +},{"../object/keys":245}],222:[function(require,module,exports){ var baseProperty = require('./baseProperty'); /** @@ -15449,7 +15622,7 @@ var getLength = baseProperty('length'); module.exports = getLength; -},{"./baseProperty":207}],222:[function(require,module,exports){ +},{"./baseProperty":208}],223:[function(require,module,exports){ var isStrictComparable = require('./isStrictComparable'), pairs = require('../object/pairs'); @@ -15472,7 +15645,7 @@ function getMatchData(object) { module.exports = getMatchData; -},{"../object/pairs":247,"./isStrictComparable":231}],223:[function(require,module,exports){ +},{"../object/pairs":248,"./isStrictComparable":232}],224:[function(require,module,exports){ var isNative = require('../lang/isNative'); /** @@ -15490,7 +15663,7 @@ function getNative(object, key) { module.exports = getNative; -},{"../lang/isNative":240}],224:[function(require,module,exports){ +},{"../lang/isNative":241}],225:[function(require,module,exports){ /** * Gets the index at which the first occurrence of `NaN` is found in `array`. * @@ -15515,7 +15688,7 @@ function indexOfNaN(array, fromIndex, fromRight) { module.exports = indexOfNaN; -},{}],225:[function(require,module,exports){ +},{}],226:[function(require,module,exports){ var getLength = require('./getLength'), isLength = require('./isLength'); @@ -15532,7 +15705,7 @@ function isArrayLike(value) { module.exports = isArrayLike; -},{"./getLength":221,"./isLength":229}],226:[function(require,module,exports){ +},{"./getLength":222,"./isLength":230}],227:[function(require,module,exports){ /** * Checks if `value` is a host object in IE < 9. * @@ -15555,7 +15728,7 @@ var isHostObject = (function() { module.exports = isHostObject; -},{}],227:[function(require,module,exports){ +},{}],228:[function(require,module,exports){ /** Used to detect unsigned integer values. */ var reIsUint = /^\d+$/; @@ -15581,7 +15754,7 @@ function isIndex(value, length) { module.exports = isIndex; -},{}],228:[function(require,module,exports){ +},{}],229:[function(require,module,exports){ var isArray = require('../lang/isArray'), toObject = require('./toObject'); @@ -15611,7 +15784,7 @@ function isKey(value, object) { module.exports = isKey; -},{"../lang/isArray":238,"./toObject":235}],229:[function(require,module,exports){ +},{"../lang/isArray":239,"./toObject":236}],230:[function(require,module,exports){ /** * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) * of an array-like value. @@ -15633,7 +15806,7 @@ function isLength(value) { module.exports = isLength; -},{}],230:[function(require,module,exports){ +},{}],231:[function(require,module,exports){ /** * Checks if `value` is object-like. * @@ -15647,7 +15820,7 @@ function isObjectLike(value) { module.exports = isObjectLike; -},{}],231:[function(require,module,exports){ +},{}],232:[function(require,module,exports){ var isObject = require('../lang/isObject'); /** @@ -15664,7 +15837,7 @@ function isStrictComparable(value) { module.exports = isStrictComparable; -},{"../lang/isObject":241}],232:[function(require,module,exports){ +},{"../lang/isObject":242}],233:[function(require,module,exports){ var toObject = require('./toObject'); /** @@ -15694,7 +15867,7 @@ function pickByArray(object, props) { module.exports = pickByArray; -},{"./toObject":235}],233:[function(require,module,exports){ +},{"./toObject":236}],234:[function(require,module,exports){ var baseForIn = require('./baseForIn'); /** @@ -15718,7 +15891,7 @@ function pickByCallback(object, predicate) { module.exports = pickByCallback; -},{"./baseForIn":198}],234:[function(require,module,exports){ +},{"./baseForIn":199}],235:[function(require,module,exports){ var isArguments = require('../lang/isArguments'), isArray = require('../lang/isArray'), isIndex = require('./isIndex'), @@ -15762,7 +15935,7 @@ function shimKeys(object) { module.exports = shimKeys; -},{"../lang/isArguments":237,"../lang/isArray":238,"../lang/isString":242,"../object/keysIn":245,"./isIndex":227,"./isLength":229}],235:[function(require,module,exports){ +},{"../lang/isArguments":238,"../lang/isArray":239,"../lang/isString":243,"../object/keysIn":246,"./isIndex":228,"./isLength":230}],236:[function(require,module,exports){ var isObject = require('../lang/isObject'), isString = require('../lang/isString'), support = require('../support'); @@ -15790,7 +15963,7 @@ function toObject(value) { module.exports = toObject; -},{"../lang/isObject":241,"../lang/isString":242,"../support":249}],236:[function(require,module,exports){ +},{"../lang/isObject":242,"../lang/isString":243,"../support":250}],237:[function(require,module,exports){ var baseToString = require('./baseToString'), isArray = require('../lang/isArray'); @@ -15820,7 +15993,7 @@ function toPath(value) { module.exports = toPath; -},{"../lang/isArray":238,"./baseToString":210}],237:[function(require,module,exports){ +},{"../lang/isArray":239,"./baseToString":211}],238:[function(require,module,exports){ var isArrayLike = require('../internal/isArrayLike'), isObjectLike = require('../internal/isObjectLike'); @@ -15856,7 +16029,7 @@ function isArguments(value) { module.exports = isArguments; -},{"../internal/isArrayLike":225,"../internal/isObjectLike":230}],238:[function(require,module,exports){ +},{"../internal/isArrayLike":226,"../internal/isObjectLike":231}],239:[function(require,module,exports){ var getNative = require('../internal/getNative'), isLength = require('../internal/isLength'), isObjectLike = require('../internal/isObjectLike'); @@ -15898,7 +16071,7 @@ var isArray = nativeIsArray || function(value) { module.exports = isArray; -},{"../internal/getNative":223,"../internal/isLength":229,"../internal/isObjectLike":230}],239:[function(require,module,exports){ +},{"../internal/getNative":224,"../internal/isLength":230,"../internal/isObjectLike":231}],240:[function(require,module,exports){ var isObject = require('./isObject'); /** `Object#toString` result references. */ @@ -15938,7 +16111,7 @@ function isFunction(value) { module.exports = isFunction; -},{"./isObject":241}],240:[function(require,module,exports){ +},{"./isObject":242}],241:[function(require,module,exports){ var isFunction = require('./isFunction'), isHostObject = require('../internal/isHostObject'), isObjectLike = require('../internal/isObjectLike'); @@ -15989,7 +16162,7 @@ function isNative(value) { module.exports = isNative; -},{"../internal/isHostObject":226,"../internal/isObjectLike":230,"./isFunction":239}],241:[function(require,module,exports){ +},{"../internal/isHostObject":227,"../internal/isObjectLike":231,"./isFunction":240}],242:[function(require,module,exports){ /** * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) @@ -16019,7 +16192,7 @@ function isObject(value) { module.exports = isObject; -},{}],242:[function(require,module,exports){ +},{}],243:[function(require,module,exports){ var isObjectLike = require('../internal/isObjectLike'); /** `Object#toString` result references. */ @@ -16056,7 +16229,7 @@ function isString(value) { module.exports = isString; -},{"../internal/isObjectLike":230}],243:[function(require,module,exports){ +},{"../internal/isObjectLike":231}],244:[function(require,module,exports){ var isLength = require('../internal/isLength'), isObjectLike = require('../internal/isObjectLike'); @@ -16132,7 +16305,7 @@ function isTypedArray(value) { module.exports = isTypedArray; -},{"../internal/isLength":229,"../internal/isObjectLike":230}],244:[function(require,module,exports){ +},{"../internal/isLength":230,"../internal/isObjectLike":231}],245:[function(require,module,exports){ var getNative = require('../internal/getNative'), isArrayLike = require('../internal/isArrayLike'), isObject = require('../lang/isObject'), @@ -16180,7 +16353,7 @@ var keys = !nativeKeys ? shimKeys : function(object) { module.exports = keys; -},{"../internal/getNative":223,"../internal/isArrayLike":225,"../internal/shimKeys":234,"../lang/isObject":241,"../support":249}],245:[function(require,module,exports){ +},{"../internal/getNative":224,"../internal/isArrayLike":226,"../internal/shimKeys":235,"../lang/isObject":242,"../support":250}],246:[function(require,module,exports){ var arrayEach = require('../internal/arrayEach'), isArguments = require('../lang/isArguments'), isArray = require('../lang/isArray'), @@ -16318,7 +16491,7 @@ function keysIn(object) { module.exports = keysIn; -},{"../internal/arrayEach":187,"../internal/isIndex":227,"../internal/isLength":229,"../lang/isArguments":237,"../lang/isArray":238,"../lang/isFunction":239,"../lang/isObject":241,"../lang/isString":242,"../support":249}],246:[function(require,module,exports){ +},{"../internal/arrayEach":188,"../internal/isIndex":228,"../internal/isLength":230,"../lang/isArguments":238,"../lang/isArray":239,"../lang/isFunction":240,"../lang/isObject":242,"../lang/isString":243,"../support":250}],247:[function(require,module,exports){ var arrayMap = require('../internal/arrayMap'), baseDifference = require('../internal/baseDifference'), baseFlatten = require('../internal/baseFlatten'), @@ -16367,7 +16540,7 @@ var omit = restParam(function(object, props) { module.exports = omit; -},{"../function/restParam":185,"../internal/arrayMap":188,"../internal/baseDifference":192,"../internal/baseFlatten":196,"../internal/bindCallback":211,"../internal/pickByArray":232,"../internal/pickByCallback":233,"./keysIn":245}],247:[function(require,module,exports){ +},{"../function/restParam":186,"../internal/arrayMap":189,"../internal/baseDifference":193,"../internal/baseFlatten":197,"../internal/bindCallback":212,"../internal/pickByArray":233,"../internal/pickByCallback":234,"./keysIn":246}],248:[function(require,module,exports){ var keys = require('./keys'), toObject = require('../internal/toObject'); @@ -16402,7 +16575,7 @@ function pairs(object) { module.exports = pairs; -},{"../internal/toObject":235,"./keys":244}],248:[function(require,module,exports){ +},{"../internal/toObject":236,"./keys":245}],249:[function(require,module,exports){ var baseFlatten = require('../internal/baseFlatten'), bindCallback = require('../internal/bindCallback'), pickByArray = require('../internal/pickByArray'), @@ -16446,7 +16619,7 @@ var pick = restParam(function(object, props) { module.exports = pick; -},{"../function/restParam":185,"../internal/baseFlatten":196,"../internal/bindCallback":211,"../internal/pickByArray":232,"../internal/pickByCallback":233}],249:[function(require,module,exports){ +},{"../function/restParam":186,"../internal/baseFlatten":197,"../internal/bindCallback":212,"../internal/pickByArray":233,"../internal/pickByCallback":234}],250:[function(require,module,exports){ /** Used for native method references. */ var arrayProto = Array.prototype, errorProto = Error.prototype, @@ -16544,7 +16717,7 @@ var support = {}; module.exports = support; -},{}],250:[function(require,module,exports){ +},{}],251:[function(require,module,exports){ /** * This method returns the first argument provided to it. * @@ -16566,7 +16739,7 @@ function identity(value) { module.exports = identity; -},{}],251:[function(require,module,exports){ +},{}],252:[function(require,module,exports){ var baseProperty = require('../internal/baseProperty'), basePropertyDeep = require('../internal/basePropertyDeep'), isKey = require('../internal/isKey'); @@ -16599,7 +16772,7 @@ function property(path) { module.exports = property; -},{"../internal/baseProperty":207,"../internal/basePropertyDeep":208,"../internal/isKey":228}],252:[function(require,module,exports){ +},{"../internal/baseProperty":208,"../internal/basePropertyDeep":209,"../internal/isKey":229}],253:[function(require,module,exports){ /*eslint-disable react/prop-types */ 'use strict'; @@ -17057,7 +17230,7 @@ Modal.manager = modalManager; exports['default'] = Modal; module.exports = exports['default']; -},{"./ModalManager":253,"./Portal":255,"./utils/addEventListener":259,"./utils/addFocusListener":260,"./utils/getContainer":262,"./utils/ownerDocument":266,"dom-helpers/activeElement":152,"dom-helpers/query/contains":162,"dom-helpers/util/inDOM":179,"react":501,"react-prop-types/lib/elementType":268,"react-prop-types/lib/mountable":269,"warning":279}],253:[function(require,module,exports){ +},{"./ModalManager":254,"./Portal":256,"./utils/addEventListener":260,"./utils/addFocusListener":261,"./utils/getContainer":263,"./utils/ownerDocument":267,"dom-helpers/activeElement":153,"dom-helpers/query/contains":163,"dom-helpers/util/inDOM":180,"react":502,"react-prop-types/lib/elementType":269,"react-prop-types/lib/mountable":270,"warning":280}],254:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -17213,7 +17386,7 @@ var ModalManager = (function () { exports['default'] = ModalManager; module.exports = exports['default']; -},{"./utils/isOverflowing":263,"./utils/manageAriaHidden":264,"dom-helpers/class":155,"dom-helpers/style":171,"dom-helpers/util/scrollbarSize":180}],254:[function(require,module,exports){ +},{"./utils/isOverflowing":264,"./utils/manageAriaHidden":265,"dom-helpers/class":156,"dom-helpers/style":172,"dom-helpers/util/scrollbarSize":181}],255:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -17408,7 +17581,7 @@ Overlay.propTypes = _extends({}, _Portal2['default'].propTypes, _Position2['defa exports['default'] = Overlay; module.exports = exports['default']; -},{"./Portal":255,"./Position":256,"./RootCloseWrapper":257,"react":501,"react-prop-types/lib/elementType":268}],255:[function(require,module,exports){ +},{"./Portal":256,"./Position":257,"./RootCloseWrapper":258,"react":502,"react-prop-types/lib/elementType":269}],256:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -17532,7 +17705,7 @@ var Portal = _react2['default'].createClass({ exports['default'] = Portal; module.exports = exports['default']; -},{"./utils/getContainer":262,"./utils/ownerDocument":266,"react":501,"react-dom":280,"react-prop-types/lib/mountable":269}],256:[function(require,module,exports){ +},{"./utils/getContainer":263,"./utils/ownerDocument":267,"react":502,"react-dom":281,"react-prop-types/lib/mountable":270}],257:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -17719,7 +17892,7 @@ Position.defaultProps = { exports['default'] = Position; module.exports = exports['default']; -},{"./utils/getContainer":262,"./utils/overlayPositionUtils":265,"./utils/ownerDocument":266,"classnames":34,"react":501,"react-dom":280,"react-prop-types/lib/mountable":269}],257:[function(require,module,exports){ +},{"./utils/getContainer":263,"./utils/overlayPositionUtils":266,"./utils/ownerDocument":267,"classnames":35,"react":502,"react-dom":281,"react-prop-types/lib/mountable":270}],258:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -17879,7 +18052,7 @@ RootCloseWrapper.propTypes = { noWrap: _react2['default'].PropTypes.bool }; module.exports = exports['default']; -},{"./utils/addEventListener":259,"./utils/createChainedFunction":261,"./utils/ownerDocument":266,"react":501,"react-dom":280}],258:[function(require,module,exports){ +},{"./utils/addEventListener":260,"./utils/createChainedFunction":262,"./utils/ownerDocument":267,"react":502,"react-dom":281}],259:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -18217,7 +18390,7 @@ Transition.defaultProps = { }; exports['default'] = Transition; -},{"classnames":34,"dom-helpers/events/on":160,"dom-helpers/transition/properties":173,"react":501,"react-dom":280}],259:[function(require,module,exports){ +},{"classnames":35,"dom-helpers/events/on":161,"dom-helpers/transition/properties":174,"react":502,"react-dom":281}],260:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -18242,7 +18415,7 @@ exports['default'] = function (node, event, handler) { }; module.exports = exports['default']; -},{"dom-helpers/events/off":159,"dom-helpers/events/on":160}],260:[function(require,module,exports){ +},{"dom-helpers/events/off":160,"dom-helpers/events/on":161}],261:[function(require,module,exports){ /** * Firefox doesn't have a focusin event so using capture is easiest way to get bubbling * IE8 can't do addEventListener, but does have onfocusin, so we use that in ie8 @@ -18274,7 +18447,7 @@ function addFocusListener(handler) { } module.exports = exports['default']; -},{}],261:[function(require,module,exports){ +},{}],262:[function(require,module,exports){ /** * Safe chained function * @@ -18316,7 +18489,7 @@ function createChainedFunction() { exports['default'] = createChainedFunction; module.exports = exports['default']; -},{}],262:[function(require,module,exports){ +},{}],263:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -18334,7 +18507,7 @@ function getContainer(container, defaultContainer) { } module.exports = exports['default']; -},{"react-dom":280}],263:[function(require,module,exports){ +},{"react-dom":281}],264:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -18375,7 +18548,7 @@ function isOverflowing(container) { } module.exports = exports['default']; -},{"dom-helpers/ownerDocument":161,"dom-helpers/query/isWindow":163}],264:[function(require,module,exports){ +},{"dom-helpers/ownerDocument":162,"dom-helpers/query/isWindow":164}],265:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -18423,7 +18596,7 @@ function showSiblings(container, mountNode) { return ariaHidden(false, node); }); } -},{}],265:[function(require,module,exports){ +},{}],266:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -18558,7 +18731,7 @@ function getLeftDelta(left, overlayWidth, container, padding) { } exports['default'] = utils; module.exports = exports['default']; -},{"./ownerDocument":266,"dom-helpers/query/offset":164,"dom-helpers/query/position":166,"dom-helpers/query/scrollTop":169}],266:[function(require,module,exports){ +},{"./ownerDocument":267,"dom-helpers/query/offset":165,"dom-helpers/query/position":167,"dom-helpers/query/scrollTop":170}],267:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -18578,7 +18751,7 @@ exports['default'] = function (componentOrElement) { }; module.exports = exports['default']; -},{"dom-helpers/ownerDocument":161,"react-dom":280}],267:[function(require,module,exports){ +},{"dom-helpers/ownerDocument":162,"react-dom":281}],268:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -18613,7 +18786,7 @@ function createChainableTypeChecker(validate) { return chainedCheckType; } -},{}],268:[function(require,module,exports){ +},{}],269:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -18655,7 +18828,7 @@ function validate(props, propName, componentName) { exports['default'] = _common.createChainableTypeChecker(validate); module.exports = exports['default']; -},{"./common":267,"react":501}],269:[function(require,module,exports){ +},{"./common":268,"react":502}],270:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -18683,7 +18856,7 @@ function validate(props, propName, componentName) { exports['default'] = _common.createChainableTypeChecker(validate); module.exports = exports['default']; -},{"./common":267}],270:[function(require,module,exports){ +},{"./common":268}],271:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -18720,9 +18893,9 @@ function all() { } module.exports = exports['default']; -},{}],271:[function(require,module,exports){ -arguments[4][267][0].apply(exports,arguments) -},{"dup":267}],272:[function(require,module,exports){ +},{}],272:[function(require,module,exports){ +arguments[4][268][0].apply(exports,arguments) +},{"dup":268}],273:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -18745,9 +18918,9 @@ function deprecated(propType, explanation) { } module.exports = exports['default']; -},{"warning":279}],273:[function(require,module,exports){ -arguments[4][268][0].apply(exports,arguments) -},{"./common":271,"dup":268,"react":501}],274:[function(require,module,exports){ +},{"warning":280}],274:[function(require,module,exports){ +arguments[4][269][0].apply(exports,arguments) +},{"./common":272,"dup":269,"react":502}],275:[function(require,module,exports){ "use strict"; exports.__esModule = true; @@ -18764,7 +18937,7 @@ function isRequiredForA11y(propType) { } module.exports = exports["default"]; -},{}],275:[function(require,module,exports){ +},{}],276:[function(require,module,exports){ /** * Checks if only one of the listed properties is in use. An error is given * if multiple have a value @@ -18803,7 +18976,7 @@ function createSinglePropFromChecker() { } module.exports = exports['default']; -},{}],276:[function(require,module,exports){ +},{}],277:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -18949,7 +19122,7 @@ function createUncontrollable(mixins, set) { } module.exports = exports['default']; -},{"./utils":278,"react":501}],277:[function(require,module,exports){ +},{"./utils":279,"react":502}],278:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -18981,7 +19154,7 @@ function set(component, propName, handler, value, args) { exports['default'] = _createUncontrollable2['default']([mixin], set); module.exports = exports['default']; -},{"./createUncontrollable":276}],278:[function(require,module,exports){ +},{"./createUncontrollable":277}],279:[function(require,module,exports){ (function (process){ 'use strict'; @@ -19095,7 +19268,7 @@ function has(o, k) { return o ? Object.prototype.hasOwnProperty.call(o, k) : false; } }).call(this,require('_process')) -},{"_process":33,"invariant":181,"react":501}],279:[function(require,module,exports){ +},{"_process":34,"invariant":182,"react":502}],280:[function(require,module,exports){ (function (process){ /** * Copyright 2014-2015, Facebook, Inc. @@ -19159,12 +19332,12 @@ if (process.env.NODE_ENV !== 'production') { module.exports = warning; }).call(this,require('_process')) -},{"_process":33}],280:[function(require,module,exports){ +},{"_process":34}],281:[function(require,module,exports){ 'use strict'; module.exports = require('react/lib/ReactDOM'); -},{"react/lib/ReactDOM":376}],281:[function(require,module,exports){ +},{"react/lib/ReactDOM":377}],282:[function(require,module,exports){ "use strict"; exports.__esModule = true; @@ -19223,7 +19396,7 @@ function mapAsync(array, work, callback) { }); }); } -},{}],282:[function(require,module,exports){ +},{}],283:[function(require,module,exports){ (function (process){ 'use strict'; @@ -19256,7 +19429,7 @@ var History = { exports['default'] = History; module.exports = exports['default']; }).call(this,require('_process')) -},{"./PropTypes":289,"./warning":314,"_process":33}],283:[function(require,module,exports){ +},{"./PropTypes":290,"./warning":315,"_process":34}],284:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -19287,7 +19460,7 @@ var IndexLink = _react2['default'].createClass({ exports['default'] = IndexLink; module.exports = exports['default']; -},{"./Link":287,"react":501}],284:[function(require,module,exports){ +},{"./Link":288,"react":502}],285:[function(require,module,exports){ (function (process){ 'use strict'; @@ -19354,7 +19527,7 @@ var IndexRedirect = _react2['default'].createClass({ exports['default'] = IndexRedirect; module.exports = exports['default']; }).call(this,require('_process')) -},{"./PropTypes":289,"./Redirect":290,"./warning":314,"_process":33,"invariant":337,"react":501}],285:[function(require,module,exports){ +},{"./PropTypes":290,"./Redirect":291,"./warning":315,"_process":34,"invariant":338,"react":502}],286:[function(require,module,exports){ (function (process){ 'use strict'; @@ -19418,7 +19591,7 @@ var IndexRoute = _react2['default'].createClass({ exports['default'] = IndexRoute; module.exports = exports['default']; }).call(this,require('_process')) -},{"./PropTypes":289,"./RouteUtils":293,"./warning":314,"_process":33,"invariant":337,"react":501}],286:[function(require,module,exports){ +},{"./PropTypes":290,"./RouteUtils":294,"./warning":315,"_process":34,"invariant":338,"react":502}],287:[function(require,module,exports){ (function (process){ 'use strict'; @@ -19490,7 +19663,7 @@ var Lifecycle = { exports['default'] = Lifecycle; module.exports = exports['default']; }).call(this,require('_process')) -},{"./warning":314,"_process":33,"invariant":337,"react":501}],287:[function(require,module,exports){ +},{"./warning":315,"_process":34,"invariant":338,"react":502}],288:[function(require,module,exports){ (function (process){ 'use strict'; @@ -19659,7 +19832,7 @@ var Link = _react2['default'].createClass({ exports['default'] = Link; module.exports = exports['default']; }).call(this,require('_process')) -},{"./warning":314,"_process":33,"react":501}],288:[function(require,module,exports){ +},{"./warning":315,"_process":34,"react":502}],289:[function(require,module,exports){ (function (process){ 'use strict'; @@ -19889,7 +20062,7 @@ function formatPattern(pattern, params) { return pathname.replace(/\/+/g, '/'); } }).call(this,require('_process')) -},{"_process":33,"invariant":337}],289:[function(require,module,exports){ +},{"_process":34,"invariant":338}],290:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -19943,7 +20116,7 @@ exports['default'] = { components: components, route: route }; -},{"react":501}],290:[function(require,module,exports){ +},{"react":502}],291:[function(require,module,exports){ (function (process){ 'use strict'; @@ -20049,7 +20222,7 @@ var Redirect = _react2['default'].createClass({ exports['default'] = Redirect; module.exports = exports['default']; }).call(this,require('_process')) -},{"./PatternUtils":288,"./PropTypes":289,"./RouteUtils":293,"_process":33,"invariant":337,"react":501}],291:[function(require,module,exports){ +},{"./PatternUtils":289,"./PropTypes":290,"./RouteUtils":294,"_process":34,"invariant":338,"react":502}],292:[function(require,module,exports){ (function (process){ 'use strict'; @@ -20108,7 +20281,7 @@ var Route = _react2['default'].createClass({ exports['default'] = Route; module.exports = exports['default']; }).call(this,require('_process')) -},{"./PropTypes":289,"./RouteUtils":293,"_process":33,"invariant":337,"react":501}],292:[function(require,module,exports){ +},{"./PropTypes":290,"./RouteUtils":294,"_process":34,"invariant":338,"react":502}],293:[function(require,module,exports){ (function (process){ 'use strict'; @@ -20157,7 +20330,7 @@ var RouteContext = { exports['default'] = RouteContext; module.exports = exports['default']; }).call(this,require('_process')) -},{"./warning":314,"_process":33,"react":501}],293:[function(require,module,exports){ +},{"./warning":315,"_process":34,"react":502}],294:[function(require,module,exports){ (function (process){ 'use strict'; @@ -20274,7 +20447,7 @@ function createRoutes(routes) { return routes; } }).call(this,require('_process')) -},{"./warning":314,"_process":33,"react":501}],294:[function(require,module,exports){ +},{"./warning":315,"_process":34,"react":502}],295:[function(require,module,exports){ (function (process){ 'use strict'; @@ -20467,7 +20640,7 @@ var Router = _react2['default'].createClass({ exports['default'] = Router; module.exports = exports['default']; }).call(this,require('_process')) -},{"./PropTypes":289,"./RouteUtils":293,"./RouterContext":295,"./RouterUtils":296,"./createTransitionManager":303,"./warning":314,"_process":33,"history/lib/createHashHistory":322,"history/lib/useQueries":331,"react":501}],295:[function(require,module,exports){ +},{"./PropTypes":290,"./RouteUtils":294,"./RouterContext":296,"./RouterUtils":297,"./createTransitionManager":304,"./warning":315,"_process":34,"history/lib/createHashHistory":323,"history/lib/useQueries":332,"react":502}],296:[function(require,module,exports){ (function (process){ 'use strict'; @@ -20624,7 +20797,7 @@ var RouterContext = _react2['default'].createClass({ exports['default'] = RouterContext; module.exports = exports['default']; }).call(this,require('_process')) -},{"./RouteUtils":293,"./deprecateObjectProperties":304,"./getRouteParams":306,"./warning":314,"_process":33,"invariant":337,"react":501}],296:[function(require,module,exports){ +},{"./RouteUtils":294,"./deprecateObjectProperties":305,"./getRouteParams":307,"./warning":315,"_process":34,"invariant":338,"react":502}],297:[function(require,module,exports){ (function (process){ 'use strict'; @@ -20660,7 +20833,7 @@ function createRoutingHistory(history, transitionManager) { return history; } }).call(this,require('_process')) -},{"./deprecateObjectProperties":304,"_process":33}],297:[function(require,module,exports){ +},{"./deprecateObjectProperties":305,"_process":34}],298:[function(require,module,exports){ (function (process){ 'use strict'; @@ -20695,7 +20868,7 @@ var RoutingContext = _react2['default'].createClass({ exports['default'] = RoutingContext; module.exports = exports['default']; }).call(this,require('_process')) -},{"./RouterContext":295,"./warning":314,"_process":33,"react":501}],298:[function(require,module,exports){ +},{"./RouterContext":296,"./warning":315,"_process":34,"react":502}],299:[function(require,module,exports){ (function (process){ 'use strict'; @@ -20787,7 +20960,7 @@ function runLeaveHooks(routes) { } } }).call(this,require('_process')) -},{"./AsyncUtils":281,"./warning":314,"_process":33}],299:[function(require,module,exports){ +},{"./AsyncUtils":282,"./warning":315,"_process":34}],300:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -20804,7 +20977,7 @@ var _createRouterHistory2 = _interopRequireDefault(_createRouterHistory); exports['default'] = _createRouterHistory2['default'](_historyLibCreateBrowserHistory2['default']); module.exports = exports['default']; -},{"./createRouterHistory":302,"history/lib/createBrowserHistory":320}],300:[function(require,module,exports){ +},{"./createRouterHistory":303,"history/lib/createBrowserHistory":321}],301:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -20861,7 +21034,7 @@ function computeChangedRoutes(prevState, nextState) { exports['default'] = computeChangedRoutes; module.exports = exports['default']; -},{"./PatternUtils":288}],301:[function(require,module,exports){ +},{"./PatternUtils":289}],302:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -20891,7 +21064,7 @@ function createMemoryHistory(options) { } module.exports = exports['default']; -},{"history/lib/createMemoryHistory":325,"history/lib/useQueries":331}],302:[function(require,module,exports){ +},{"history/lib/createMemoryHistory":326,"history/lib/useQueries":332}],303:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -20911,7 +21084,7 @@ exports['default'] = function (createHistory) { }; module.exports = exports['default']; -},{"./useRouterHistory":312}],303:[function(require,module,exports){ +},{"./useRouterHistory":313}],304:[function(require,module,exports){ (function (process){ 'use strict'; @@ -21212,7 +21385,7 @@ function createTransitionManager(history, routes) { //export default useRoutes module.exports = exports['default']; }).call(this,require('_process')) -},{"./TransitionUtils":298,"./computeChangedRoutes":300,"./getComponents":305,"./isActive":309,"./matchRoutes":311,"./warning":314,"_process":33,"history/lib/Actions":315}],304:[function(require,module,exports){ +},{"./TransitionUtils":299,"./computeChangedRoutes":301,"./getComponents":306,"./isActive":310,"./matchRoutes":312,"./warning":315,"_process":34,"history/lib/Actions":316}],305:[function(require,module,exports){ (function (process){ /*eslint no-empty: 0*/ 'use strict'; @@ -21272,7 +21445,7 @@ function deprecateObjectProperties(object, message) { module.exports = exports['default']; }).call(this,require('_process')) -},{"./warning":314,"_process":33}],305:[function(require,module,exports){ +},{"./warning":315,"_process":34}],306:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -21306,7 +21479,7 @@ function getComponents(nextState, callback) { exports['default'] = getComponents; module.exports = exports['default']; -},{"./AsyncUtils":281}],306:[function(require,module,exports){ +},{"./AsyncUtils":282}],307:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -21331,7 +21504,7 @@ function getRouteParams(route, params) { exports['default'] = getRouteParams; module.exports = exports['default']; -},{"./PatternUtils":288}],307:[function(require,module,exports){ +},{"./PatternUtils":289}],308:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -21348,7 +21521,7 @@ var _createRouterHistory2 = _interopRequireDefault(_createRouterHistory); exports['default'] = _createRouterHistory2['default'](_historyLibCreateHashHistory2['default']); module.exports = exports['default']; -},{"./createRouterHistory":302,"history/lib/createHashHistory":322}],308:[function(require,module,exports){ +},{"./createRouterHistory":303,"history/lib/createHashHistory":323}],309:[function(require,module,exports){ /* components */ 'use strict'; @@ -21489,7 +21662,7 @@ exports.createMemoryHistory = _createMemoryHistory3['default']; var _Router4 = _interopRequireDefault(_Router2); exports['default'] = _Router4['default']; -},{"./History":282,"./IndexLink":283,"./IndexRedirect":284,"./IndexRoute":285,"./Lifecycle":286,"./Link":287,"./PatternUtils":288,"./PropTypes":289,"./Redirect":290,"./Route":291,"./RouteContext":292,"./RouteUtils":293,"./Router":294,"./RouterContext":295,"./RoutingContext":297,"./browserHistory":299,"./createMemoryHistory":301,"./hashHistory":307,"./match":310,"./useRouterHistory":312,"./useRoutes":313}],309:[function(require,module,exports){ +},{"./History":283,"./IndexLink":284,"./IndexRedirect":285,"./IndexRoute":286,"./Lifecycle":287,"./Link":288,"./PatternUtils":289,"./PropTypes":290,"./Redirect":291,"./Route":292,"./RouteContext":293,"./RouteUtils":294,"./Router":295,"./RouterContext":296,"./RoutingContext":298,"./browserHistory":300,"./createMemoryHistory":302,"./hashHistory":308,"./match":311,"./useRouterHistory":313,"./useRoutes":314}],310:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -21617,7 +21790,7 @@ function isActive(_ref, indexOnly, currentLocation, routes, params) { } module.exports = exports['default']; -},{"./PatternUtils":288}],310:[function(require,module,exports){ +},{"./PatternUtils":289}],311:[function(require,module,exports){ (function (process){ 'use strict'; @@ -21680,7 +21853,7 @@ function match(_ref, callback) { exports['default'] = match; module.exports = exports['default']; }).call(this,require('_process')) -},{"./RouteUtils":293,"./RouterUtils":296,"./createMemoryHistory":301,"./createTransitionManager":303,"_process":33,"invariant":337}],311:[function(require,module,exports){ +},{"./RouteUtils":294,"./RouterUtils":297,"./createMemoryHistory":302,"./createTransitionManager":304,"_process":34,"invariant":338}],312:[function(require,module,exports){ (function (process){ 'use strict'; @@ -21871,7 +22044,7 @@ function matchRoutes(routes, location, callback) { exports['default'] = matchRoutes; module.exports = exports['default']; }).call(this,require('_process')) -},{"./AsyncUtils":281,"./PatternUtils":288,"./RouteUtils":293,"./warning":314,"_process":33}],312:[function(require,module,exports){ +},{"./AsyncUtils":282,"./PatternUtils":289,"./RouteUtils":294,"./warning":315,"_process":34}],313:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -21896,7 +22069,7 @@ function useRouterHistory(createHistory) { } module.exports = exports['default']; -},{"history/lib/useBasename":330,"history/lib/useQueries":331}],313:[function(require,module,exports){ +},{"history/lib/useBasename":331,"history/lib/useQueries":332}],314:[function(require,module,exports){ (function (process){ 'use strict'; @@ -21950,7 +22123,7 @@ function useRoutes(createHistory) { exports['default'] = useRoutes; module.exports = exports['default']; }).call(this,require('_process')) -},{"./createTransitionManager":303,"./warning":314,"_process":33,"history/lib/useQueries":331}],314:[function(require,module,exports){ +},{"./createTransitionManager":304,"./warning":315,"_process":34,"history/lib/useQueries":332}],315:[function(require,module,exports){ (function (process){ 'use strict'; @@ -21975,7 +22148,7 @@ function routerWarning(falseToWarn, message) { module.exports = exports['default']; }).call(this,require('_process')) -},{"_process":33,"warning":338}],315:[function(require,module,exports){ +},{"_process":34,"warning":339}],316:[function(require,module,exports){ /** * Indicates that navigation was caused by a call to history.push. */ @@ -22007,7 +22180,7 @@ exports['default'] = { REPLACE: REPLACE, POP: POP }; -},{}],316:[function(require,module,exports){ +},{}],317:[function(require,module,exports){ "use strict"; exports.__esModule = true; @@ -22034,7 +22207,7 @@ function loopAsync(turns, work, callback) { next(); } -},{}],317:[function(require,module,exports){ +},{}],318:[function(require,module,exports){ (function (process){ /*eslint-disable no-empty */ 'use strict'; @@ -22109,7 +22282,7 @@ function readState(key) { return null; } }).call(this,require('_process')) -},{"_process":33,"warning":338}],318:[function(require,module,exports){ +},{"_process":34,"warning":339}],319:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -22190,13 +22363,13 @@ function supportsGoWithoutReloadUsingHash() { var ua = navigator.userAgent; return ua.indexOf('Firefox') === -1; } -},{}],319:[function(require,module,exports){ +},{}],320:[function(require,module,exports){ 'use strict'; exports.__esModule = true; var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); exports.canUseDOM = canUseDOM; -},{}],320:[function(require,module,exports){ +},{}],321:[function(require,module,exports){ (function (process){ 'use strict'; @@ -22377,7 +22550,7 @@ function createBrowserHistory() { exports['default'] = createBrowserHistory; module.exports = exports['default']; }).call(this,require('_process')) -},{"./Actions":315,"./DOMStateStorage":317,"./DOMUtils":318,"./ExecutionEnvironment":319,"./createDOMHistory":321,"./parsePath":328,"_process":33,"invariant":337}],321:[function(require,module,exports){ +},{"./Actions":316,"./DOMStateStorage":318,"./DOMUtils":319,"./ExecutionEnvironment":320,"./createDOMHistory":322,"./parsePath":329,"_process":34,"invariant":338}],322:[function(require,module,exports){ (function (process){ 'use strict'; @@ -22420,7 +22593,7 @@ function createDOMHistory(options) { exports['default'] = createDOMHistory; module.exports = exports['default']; }).call(this,require('_process')) -},{"./DOMUtils":318,"./ExecutionEnvironment":319,"./createHistory":323,"_process":33,"invariant":337}],322:[function(require,module,exports){ +},{"./DOMUtils":319,"./ExecutionEnvironment":320,"./createHistory":324,"_process":34,"invariant":338}],323:[function(require,module,exports){ (function (process){ 'use strict'; @@ -22671,7 +22844,7 @@ function createHashHistory() { exports['default'] = createHashHistory; module.exports = exports['default']; }).call(this,require('_process')) -},{"./Actions":315,"./DOMStateStorage":317,"./DOMUtils":318,"./ExecutionEnvironment":319,"./createDOMHistory":321,"./parsePath":328,"_process":33,"invariant":337,"warning":338}],323:[function(require,module,exports){ +},{"./Actions":316,"./DOMStateStorage":318,"./DOMUtils":319,"./ExecutionEnvironment":320,"./createDOMHistory":322,"./parsePath":329,"_process":34,"invariant":338,"warning":339}],324:[function(require,module,exports){ (function (process){ 'use strict'; @@ -22964,7 +23137,7 @@ function createHistory() { exports['default'] = createHistory; module.exports = exports['default']; }).call(this,require('_process')) -},{"./Actions":315,"./AsyncUtils":316,"./createLocation":324,"./deprecate":326,"./parsePath":328,"./runTransitionHook":329,"_process":33,"deep-equal":332,"warning":338}],324:[function(require,module,exports){ +},{"./Actions":316,"./AsyncUtils":317,"./createLocation":325,"./deprecate":327,"./parsePath":329,"./runTransitionHook":330,"_process":34,"deep-equal":333,"warning":339}],325:[function(require,module,exports){ (function (process){ 'use strict'; @@ -23020,7 +23193,7 @@ function createLocation() { exports['default'] = createLocation; module.exports = exports['default']; }).call(this,require('_process')) -},{"./Actions":315,"./parsePath":328,"_process":33,"warning":338}],325:[function(require,module,exports){ +},{"./Actions":316,"./parsePath":329,"_process":34,"warning":339}],326:[function(require,module,exports){ (function (process){ 'use strict'; @@ -23178,7 +23351,7 @@ function createMemoryHistory() { exports['default'] = createMemoryHistory; module.exports = exports['default']; }).call(this,require('_process')) -},{"./Actions":315,"./createHistory":323,"./parsePath":328,"_process":33,"invariant":337,"warning":338}],326:[function(require,module,exports){ +},{"./Actions":316,"./createHistory":324,"./parsePath":329,"_process":34,"invariant":338,"warning":339}],327:[function(require,module,exports){ (function (process){ 'use strict'; @@ -23200,7 +23373,7 @@ function deprecate(fn, message) { exports['default'] = deprecate; module.exports = exports['default']; }).call(this,require('_process')) -},{"_process":33,"warning":338}],327:[function(require,module,exports){ +},{"_process":34,"warning":339}],328:[function(require,module,exports){ "use strict"; exports.__esModule = true; @@ -23214,7 +23387,7 @@ function extractPath(string) { exports["default"] = extractPath; module.exports = exports["default"]; -},{}],328:[function(require,module,exports){ +},{}],329:[function(require,module,exports){ (function (process){ 'use strict'; @@ -23261,7 +23434,7 @@ function parsePath(path) { exports['default'] = parsePath; module.exports = exports['default']; }).call(this,require('_process')) -},{"./extractPath":327,"_process":33,"warning":338}],329:[function(require,module,exports){ +},{"./extractPath":328,"_process":34,"warning":339}],330:[function(require,module,exports){ (function (process){ 'use strict'; @@ -23288,7 +23461,7 @@ function runTransitionHook(hook, location, callback) { exports['default'] = runTransitionHook; module.exports = exports['default']; }).call(this,require('_process')) -},{"_process":33,"warning":338}],330:[function(require,module,exports){ +},{"_process":34,"warning":339}],331:[function(require,module,exports){ 'use strict'; exports.__esModule = true; @@ -23429,7 +23602,7 @@ function useBasename(createHistory) { exports['default'] = useBasename; module.exports = exports['default']; -},{"./ExecutionEnvironment":319,"./deprecate":326,"./extractPath":327,"./parsePath":328,"./runTransitionHook":329}],331:[function(require,module,exports){ +},{"./ExecutionEnvironment":320,"./deprecate":327,"./extractPath":328,"./parsePath":329,"./runTransitionHook":330}],332:[function(require,module,exports){ (function (process){ 'use strict'; @@ -23600,7 +23773,7 @@ function useQueries(createHistory) { exports['default'] = useQueries; module.exports = exports['default']; }).call(this,require('_process')) -},{"./deprecate":326,"./parsePath":328,"./runTransitionHook":329,"_process":33,"query-string":335,"warning":338}],332:[function(require,module,exports){ +},{"./deprecate":327,"./parsePath":329,"./runTransitionHook":330,"_process":34,"query-string":336,"warning":339}],333:[function(require,module,exports){ var pSlice = Array.prototype.slice; var objectKeys = require('./lib/keys.js'); var isArguments = require('./lib/is_arguments.js'); @@ -23696,7 +23869,7 @@ function objEquiv(a, b, opts) { return typeof a === typeof b; } -},{"./lib/is_arguments.js":333,"./lib/keys.js":334}],333:[function(require,module,exports){ +},{"./lib/is_arguments.js":334,"./lib/keys.js":335}],334:[function(require,module,exports){ var supportsArgumentsClass = (function(){ return Object.prototype.toString.call(arguments) })() == '[object Arguments]'; @@ -23718,7 +23891,7 @@ function unsupported(object){ false; }; -},{}],334:[function(require,module,exports){ +},{}],335:[function(require,module,exports){ exports = module.exports = typeof Object.keys === 'function' ? Object.keys : shim; @@ -23729,7 +23902,7 @@ function shim (obj) { return keys; } -},{}],335:[function(require,module,exports){ +},{}],336:[function(require,module,exports){ 'use strict'; var strictUriEncode = require('strict-uri-encode'); @@ -23797,7 +23970,7 @@ exports.stringify = function (obj) { }).join('&') : ''; }; -},{"strict-uri-encode":336}],336:[function(require,module,exports){ +},{"strict-uri-encode":337}],337:[function(require,module,exports){ 'use strict'; module.exports = function (str) { return encodeURIComponent(str).replace(/[!'()*]/g, function (c) { @@ -23805,11 +23978,11 @@ module.exports = function (str) { }); }; -},{}],337:[function(require,module,exports){ -arguments[4][181][0].apply(exports,arguments) -},{"_process":33,"dup":181}],338:[function(require,module,exports){ -arguments[4][279][0].apply(exports,arguments) -},{"_process":33,"dup":279}],339:[function(require,module,exports){ +},{}],338:[function(require,module,exports){ +arguments[4][182][0].apply(exports,arguments) +},{"_process":34,"dup":182}],339:[function(require,module,exports){ +arguments[4][280][0].apply(exports,arguments) +},{"_process":34,"dup":280}],340:[function(require,module,exports){ /** * Module dependencies */ @@ -24160,7 +24333,7 @@ var ContentEditable = React.createClass({ module.exports = ContentEditable; -},{"classnames":34,"escape-html":35,"react":501,"react-dom":280,"selection-range":502}],340:[function(require,module,exports){ +},{"classnames":35,"escape-html":36,"react":502,"react-dom":281,"selection-range":503}],341:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -24197,7 +24370,7 @@ var AutoFocusUtils = { }; module.exports = AutoFocusUtils; -},{"./ReactMount":406,"./findDOMNode":452,"fbjs/lib/focusNode":483}],341:[function(require,module,exports){ +},{"./ReactMount":407,"./findDOMNode":453,"fbjs/lib/focusNode":484}],342:[function(require,module,exports){ /** * Copyright 2013-2015 Facebook, Inc. * All rights reserved. @@ -24603,7 +24776,7 @@ var BeforeInputEventPlugin = { }; module.exports = BeforeInputEventPlugin; -},{"./EventConstants":353,"./EventPropagators":357,"./FallbackCompositionState":358,"./SyntheticCompositionEvent":434,"./SyntheticInputEvent":438,"fbjs/lib/ExecutionEnvironment":475,"fbjs/lib/keyOf":493}],342:[function(require,module,exports){ +},{"./EventConstants":354,"./EventPropagators":358,"./FallbackCompositionState":359,"./SyntheticCompositionEvent":435,"./SyntheticInputEvent":439,"fbjs/lib/ExecutionEnvironment":476,"fbjs/lib/keyOf":494}],343:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -24743,7 +24916,7 @@ var CSSProperty = { }; module.exports = CSSProperty; -},{}],343:[function(require,module,exports){ +},{}],344:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -24921,7 +25094,7 @@ ReactPerf.measureMethods(CSSPropertyOperations, 'CSSPropertyOperations', { module.exports = CSSPropertyOperations; }).call(this,require('_process')) -},{"./CSSProperty":342,"./ReactPerf":412,"./dangerousStyleValue":449,"_process":33,"fbjs/lib/ExecutionEnvironment":475,"fbjs/lib/camelizeStyleName":477,"fbjs/lib/hyphenateStyleName":488,"fbjs/lib/memoizeStringOnly":495,"fbjs/lib/warning":500}],344:[function(require,module,exports){ +},{"./CSSProperty":343,"./ReactPerf":413,"./dangerousStyleValue":450,"_process":34,"fbjs/lib/ExecutionEnvironment":476,"fbjs/lib/camelizeStyleName":478,"fbjs/lib/hyphenateStyleName":489,"fbjs/lib/memoizeStringOnly":496,"fbjs/lib/warning":501}],345:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -25017,7 +25190,7 @@ PooledClass.addPoolingTo(CallbackQueue); module.exports = CallbackQueue; }).call(this,require('_process')) -},{"./Object.assign":361,"./PooledClass":362,"_process":33,"fbjs/lib/invariant":489}],345:[function(require,module,exports){ +},{"./Object.assign":362,"./PooledClass":363,"_process":34,"fbjs/lib/invariant":490}],346:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -25339,7 +25512,7 @@ var ChangeEventPlugin = { }; module.exports = ChangeEventPlugin; -},{"./EventConstants":353,"./EventPluginHub":354,"./EventPropagators":357,"./ReactUpdates":427,"./SyntheticEvent":436,"./getEventTarget":458,"./isEventSupported":463,"./isTextInputElement":464,"fbjs/lib/ExecutionEnvironment":475,"fbjs/lib/keyOf":493}],346:[function(require,module,exports){ +},{"./EventConstants":354,"./EventPluginHub":355,"./EventPropagators":358,"./ReactUpdates":428,"./SyntheticEvent":437,"./getEventTarget":459,"./isEventSupported":464,"./isTextInputElement":465,"fbjs/lib/ExecutionEnvironment":476,"fbjs/lib/keyOf":494}],347:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -25363,7 +25536,7 @@ var ClientReactRootIndex = { }; module.exports = ClientReactRootIndex; -},{}],347:[function(require,module,exports){ +},{}],348:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -25495,7 +25668,7 @@ ReactPerf.measureMethods(DOMChildrenOperations, 'DOMChildrenOperations', { module.exports = DOMChildrenOperations; }).call(this,require('_process')) -},{"./Danger":350,"./ReactMultiChildUpdateTypes":408,"./ReactPerf":412,"./setInnerHTML":468,"./setTextContent":469,"_process":33,"fbjs/lib/invariant":489}],348:[function(require,module,exports){ +},{"./Danger":351,"./ReactMultiChildUpdateTypes":409,"./ReactPerf":413,"./setInnerHTML":469,"./setTextContent":470,"_process":34,"fbjs/lib/invariant":490}],349:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -25732,7 +25905,7 @@ var DOMProperty = { module.exports = DOMProperty; }).call(this,require('_process')) -},{"_process":33,"fbjs/lib/invariant":489}],349:[function(require,module,exports){ +},{"_process":34,"fbjs/lib/invariant":490}],350:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -25960,7 +26133,7 @@ ReactPerf.measureMethods(DOMPropertyOperations, 'DOMPropertyOperations', { module.exports = DOMPropertyOperations; }).call(this,require('_process')) -},{"./DOMProperty":348,"./ReactPerf":412,"./quoteAttributeValueForBrowser":466,"_process":33,"fbjs/lib/warning":500}],350:[function(require,module,exports){ +},{"./DOMProperty":349,"./ReactPerf":413,"./quoteAttributeValueForBrowser":467,"_process":34,"fbjs/lib/warning":501}],351:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -26108,7 +26281,7 @@ var Danger = { module.exports = Danger; }).call(this,require('_process')) -},{"_process":33,"fbjs/lib/ExecutionEnvironment":475,"fbjs/lib/createNodesFromMarkup":480,"fbjs/lib/emptyFunction":481,"fbjs/lib/getMarkupWrap":485,"fbjs/lib/invariant":489}],351:[function(require,module,exports){ +},{"_process":34,"fbjs/lib/ExecutionEnvironment":476,"fbjs/lib/createNodesFromMarkup":481,"fbjs/lib/emptyFunction":482,"fbjs/lib/getMarkupWrap":486,"fbjs/lib/invariant":490}],352:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -26136,7 +26309,7 @@ var keyOf = require('fbjs/lib/keyOf'); var DefaultEventPluginOrder = [keyOf({ ResponderEventPlugin: null }), keyOf({ SimpleEventPlugin: null }), keyOf({ TapEventPlugin: null }), keyOf({ EnterLeaveEventPlugin: null }), keyOf({ ChangeEventPlugin: null }), keyOf({ SelectEventPlugin: null }), keyOf({ BeforeInputEventPlugin: null })]; module.exports = DefaultEventPluginOrder; -},{"fbjs/lib/keyOf":493}],352:[function(require,module,exports){ +},{"fbjs/lib/keyOf":494}],353:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -26261,7 +26434,7 @@ var EnterLeaveEventPlugin = { }; module.exports = EnterLeaveEventPlugin; -},{"./EventConstants":353,"./EventPropagators":357,"./ReactMount":406,"./SyntheticMouseEvent":440,"fbjs/lib/keyOf":493}],353:[function(require,module,exports){ +},{"./EventConstants":354,"./EventPropagators":358,"./ReactMount":407,"./SyntheticMouseEvent":441,"fbjs/lib/keyOf":494}],354:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -26354,7 +26527,7 @@ var EventConstants = { }; module.exports = EventConstants; -},{"fbjs/lib/keyMirror":492}],354:[function(require,module,exports){ +},{"fbjs/lib/keyMirror":493}],355:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -26636,7 +26809,7 @@ var EventPluginHub = { module.exports = EventPluginHub; }).call(this,require('_process')) -},{"./EventPluginRegistry":355,"./EventPluginUtils":356,"./ReactErrorUtils":397,"./accumulateInto":446,"./forEachAccumulated":454,"_process":33,"fbjs/lib/invariant":489,"fbjs/lib/warning":500}],355:[function(require,module,exports){ +},{"./EventPluginRegistry":356,"./EventPluginUtils":357,"./ReactErrorUtils":398,"./accumulateInto":447,"./forEachAccumulated":455,"_process":34,"fbjs/lib/invariant":490,"fbjs/lib/warning":501}],356:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -26859,7 +27032,7 @@ var EventPluginRegistry = { module.exports = EventPluginRegistry; }).call(this,require('_process')) -},{"_process":33,"fbjs/lib/invariant":489}],356:[function(require,module,exports){ +},{"_process":34,"fbjs/lib/invariant":490}],357:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -27064,7 +27237,7 @@ var EventPluginUtils = { module.exports = EventPluginUtils; }).call(this,require('_process')) -},{"./EventConstants":353,"./ReactErrorUtils":397,"_process":33,"fbjs/lib/invariant":489,"fbjs/lib/warning":500}],357:[function(require,module,exports){ +},{"./EventConstants":354,"./ReactErrorUtils":398,"_process":34,"fbjs/lib/invariant":490,"fbjs/lib/warning":501}],358:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -27202,7 +27375,7 @@ var EventPropagators = { module.exports = EventPropagators; }).call(this,require('_process')) -},{"./EventConstants":353,"./EventPluginHub":354,"./accumulateInto":446,"./forEachAccumulated":454,"_process":33,"fbjs/lib/warning":500}],358:[function(require,module,exports){ +},{"./EventConstants":354,"./EventPluginHub":355,"./accumulateInto":447,"./forEachAccumulated":455,"_process":34,"fbjs/lib/warning":501}],359:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -27298,7 +27471,7 @@ assign(FallbackCompositionState.prototype, { PooledClass.addPoolingTo(FallbackCompositionState); module.exports = FallbackCompositionState; -},{"./Object.assign":361,"./PooledClass":362,"./getTextContentAccessor":461}],359:[function(require,module,exports){ +},{"./Object.assign":362,"./PooledClass":363,"./getTextContentAccessor":462}],360:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -27529,7 +27702,7 @@ var HTMLDOMPropertyConfig = { }; module.exports = HTMLDOMPropertyConfig; -},{"./DOMProperty":348,"fbjs/lib/ExecutionEnvironment":475}],360:[function(require,module,exports){ +},{"./DOMProperty":349,"fbjs/lib/ExecutionEnvironment":476}],361:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -27666,7 +27839,7 @@ var LinkedValueUtils = { module.exports = LinkedValueUtils; }).call(this,require('_process')) -},{"./ReactPropTypeLocations":414,"./ReactPropTypes":415,"_process":33,"fbjs/lib/invariant":489,"fbjs/lib/warning":500}],361:[function(require,module,exports){ +},{"./ReactPropTypeLocations":415,"./ReactPropTypes":416,"_process":34,"fbjs/lib/invariant":490,"fbjs/lib/warning":501}],362:[function(require,module,exports){ /** * Copyright 2014-2015, Facebook, Inc. * All rights reserved. @@ -27714,7 +27887,7 @@ function assign(target, sources) { } module.exports = assign; -},{}],362:[function(require,module,exports){ +},{}],363:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -27836,7 +28009,7 @@ var PooledClass = { module.exports = PooledClass; }).call(this,require('_process')) -},{"_process":33,"fbjs/lib/invariant":489}],363:[function(require,module,exports){ +},{"_process":34,"fbjs/lib/invariant":490}],364:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -27877,7 +28050,7 @@ React.__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOM; React.__SECRET_DOM_SERVER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOMServer; module.exports = React; -},{"./Object.assign":361,"./ReactDOM":376,"./ReactDOMServer":386,"./ReactIsomorphic":404,"./deprecated":450}],364:[function(require,module,exports){ +},{"./Object.assign":362,"./ReactDOM":377,"./ReactDOMServer":387,"./ReactIsomorphic":405,"./deprecated":451}],365:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -27916,7 +28089,7 @@ var ReactBrowserComponentMixin = { module.exports = ReactBrowserComponentMixin; }).call(this,require('_process')) -},{"./ReactInstanceMap":403,"./findDOMNode":452,"_process":33,"fbjs/lib/warning":500}],365:[function(require,module,exports){ +},{"./ReactInstanceMap":404,"./findDOMNode":453,"_process":34,"fbjs/lib/warning":501}],366:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -28241,7 +28414,7 @@ ReactPerf.measureMethods(ReactBrowserEventEmitter, 'ReactBrowserEventEmitter', { }); module.exports = ReactBrowserEventEmitter; -},{"./EventConstants":353,"./EventPluginHub":354,"./EventPluginRegistry":355,"./Object.assign":361,"./ReactEventEmitterMixin":398,"./ReactPerf":412,"./ViewportMetrics":445,"./isEventSupported":463}],366:[function(require,module,exports){ +},{"./EventConstants":354,"./EventPluginHub":355,"./EventPluginRegistry":356,"./Object.assign":362,"./ReactEventEmitterMixin":399,"./ReactPerf":413,"./ViewportMetrics":446,"./isEventSupported":464}],367:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -28325,7 +28498,7 @@ var ReactCSSTransitionGroup = React.createClass({ }); module.exports = ReactCSSTransitionGroup; -},{"./Object.assign":361,"./React":363,"./ReactCSSTransitionGroupChild":367,"./ReactTransitionGroup":425}],367:[function(require,module,exports){ +},{"./Object.assign":362,"./React":364,"./ReactCSSTransitionGroupChild":368,"./ReactTransitionGroup":426}],368:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -28491,7 +28664,7 @@ var ReactCSSTransitionGroupChild = React.createClass({ }); module.exports = ReactCSSTransitionGroupChild; -},{"./React":363,"./ReactDOM":376,"./ReactTransitionEvents":424,"./onlyChild":465,"fbjs/lib/CSSCore":473}],368:[function(require,module,exports){ +},{"./React":364,"./ReactDOM":377,"./ReactTransitionEvents":425,"./onlyChild":466,"fbjs/lib/CSSCore":474}],369:[function(require,module,exports){ (function (process){ /** * Copyright 2014-2015, Facebook, Inc. @@ -28616,7 +28789,7 @@ var ReactChildReconciler = { module.exports = ReactChildReconciler; }).call(this,require('_process')) -},{"./ReactReconciler":417,"./instantiateReactComponent":462,"./shouldUpdateReactComponent":470,"./traverseAllChildren":471,"_process":33,"fbjs/lib/warning":500}],369:[function(require,module,exports){ +},{"./ReactReconciler":418,"./instantiateReactComponent":463,"./shouldUpdateReactComponent":471,"./traverseAllChildren":472,"_process":34,"fbjs/lib/warning":501}],370:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -28799,7 +28972,7 @@ var ReactChildren = { }; module.exports = ReactChildren; -},{"./PooledClass":362,"./ReactElement":393,"./traverseAllChildren":471,"fbjs/lib/emptyFunction":481}],370:[function(require,module,exports){ +},{"./PooledClass":363,"./ReactElement":394,"./traverseAllChildren":472,"fbjs/lib/emptyFunction":482}],371:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -29573,7 +29746,7 @@ var ReactClass = { module.exports = ReactClass; }).call(this,require('_process')) -},{"./Object.assign":361,"./ReactComponent":371,"./ReactElement":393,"./ReactNoopUpdateQueue":410,"./ReactPropTypeLocationNames":413,"./ReactPropTypeLocations":414,"_process":33,"fbjs/lib/emptyObject":482,"fbjs/lib/invariant":489,"fbjs/lib/keyMirror":492,"fbjs/lib/keyOf":493,"fbjs/lib/warning":500}],371:[function(require,module,exports){ +},{"./Object.assign":362,"./ReactComponent":372,"./ReactElement":394,"./ReactNoopUpdateQueue":411,"./ReactPropTypeLocationNames":414,"./ReactPropTypeLocations":415,"_process":34,"fbjs/lib/emptyObject":483,"fbjs/lib/invariant":490,"fbjs/lib/keyMirror":493,"fbjs/lib/keyOf":494,"fbjs/lib/warning":501}],372:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -29698,7 +29871,7 @@ if (process.env.NODE_ENV !== 'production') { module.exports = ReactComponent; }).call(this,require('_process')) -},{"./ReactNoopUpdateQueue":410,"./canDefineProperty":448,"_process":33,"fbjs/lib/emptyObject":482,"fbjs/lib/invariant":489,"fbjs/lib/warning":500}],372:[function(require,module,exports){ +},{"./ReactNoopUpdateQueue":411,"./canDefineProperty":449,"_process":34,"fbjs/lib/emptyObject":483,"fbjs/lib/invariant":490,"fbjs/lib/warning":501}],373:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -29740,7 +29913,7 @@ var ReactComponentBrowserEnvironment = { }; module.exports = ReactComponentBrowserEnvironment; -},{"./ReactDOMIDOperations":381,"./ReactMount":406}],373:[function(require,module,exports){ +},{"./ReactDOMIDOperations":382,"./ReactMount":407}],374:[function(require,module,exports){ (function (process){ /** * Copyright 2014-2015, Facebook, Inc. @@ -29794,7 +29967,7 @@ var ReactComponentEnvironment = { module.exports = ReactComponentEnvironment; }).call(this,require('_process')) -},{"_process":33,"fbjs/lib/invariant":489}],374:[function(require,module,exports){ +},{"_process":34,"fbjs/lib/invariant":490}],375:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -30491,7 +30664,7 @@ var ReactCompositeComponent = { module.exports = ReactCompositeComponent; }).call(this,require('_process')) -},{"./Object.assign":361,"./ReactComponentEnvironment":373,"./ReactCurrentOwner":375,"./ReactElement":393,"./ReactInstanceMap":403,"./ReactPerf":412,"./ReactPropTypeLocationNames":413,"./ReactPropTypeLocations":414,"./ReactReconciler":417,"./ReactUpdateQueue":426,"./shouldUpdateReactComponent":470,"_process":33,"fbjs/lib/emptyObject":482,"fbjs/lib/invariant":489,"fbjs/lib/warning":500}],375:[function(require,module,exports){ +},{"./Object.assign":362,"./ReactComponentEnvironment":374,"./ReactCurrentOwner":376,"./ReactElement":394,"./ReactInstanceMap":404,"./ReactPerf":413,"./ReactPropTypeLocationNames":414,"./ReactPropTypeLocations":415,"./ReactReconciler":418,"./ReactUpdateQueue":427,"./shouldUpdateReactComponent":471,"_process":34,"fbjs/lib/emptyObject":483,"fbjs/lib/invariant":490,"fbjs/lib/warning":501}],376:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -30522,7 +30695,7 @@ var ReactCurrentOwner = { }; module.exports = ReactCurrentOwner; -},{}],376:[function(require,module,exports){ +},{}],377:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -30617,7 +30790,7 @@ if (process.env.NODE_ENV !== 'production') { module.exports = React; }).call(this,require('_process')) -},{"./ReactCurrentOwner":375,"./ReactDOMTextComponent":387,"./ReactDefaultInjection":390,"./ReactInstanceHandles":402,"./ReactMount":406,"./ReactPerf":412,"./ReactReconciler":417,"./ReactUpdates":427,"./ReactVersion":428,"./findDOMNode":452,"./renderSubtreeIntoContainer":467,"_process":33,"fbjs/lib/ExecutionEnvironment":475,"fbjs/lib/warning":500}],377:[function(require,module,exports){ +},{"./ReactCurrentOwner":376,"./ReactDOMTextComponent":388,"./ReactDefaultInjection":391,"./ReactInstanceHandles":403,"./ReactMount":407,"./ReactPerf":413,"./ReactReconciler":418,"./ReactUpdates":428,"./ReactVersion":429,"./findDOMNode":453,"./renderSubtreeIntoContainer":468,"_process":34,"fbjs/lib/ExecutionEnvironment":476,"fbjs/lib/warning":501}],378:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -30668,7 +30841,7 @@ var ReactDOMButton = { }; module.exports = ReactDOMButton; -},{}],378:[function(require,module,exports){ +},{}],379:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -31633,7 +31806,7 @@ assign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mix module.exports = ReactDOMComponent; }).call(this,require('_process')) -},{"./AutoFocusUtils":340,"./CSSPropertyOperations":343,"./DOMProperty":348,"./DOMPropertyOperations":349,"./EventConstants":353,"./Object.assign":361,"./ReactBrowserEventEmitter":365,"./ReactComponentBrowserEnvironment":372,"./ReactDOMButton":377,"./ReactDOMInput":382,"./ReactDOMOption":383,"./ReactDOMSelect":384,"./ReactDOMTextarea":388,"./ReactMount":406,"./ReactMultiChild":407,"./ReactPerf":412,"./ReactUpdateQueue":426,"./canDefineProperty":448,"./escapeTextContentForBrowser":451,"./isEventSupported":463,"./setInnerHTML":468,"./setTextContent":469,"./validateDOMNesting":472,"_process":33,"fbjs/lib/invariant":489,"fbjs/lib/keyOf":493,"fbjs/lib/shallowEqual":498,"fbjs/lib/warning":500}],379:[function(require,module,exports){ +},{"./AutoFocusUtils":341,"./CSSPropertyOperations":344,"./DOMProperty":349,"./DOMPropertyOperations":350,"./EventConstants":354,"./Object.assign":362,"./ReactBrowserEventEmitter":366,"./ReactComponentBrowserEnvironment":373,"./ReactDOMButton":378,"./ReactDOMInput":383,"./ReactDOMOption":384,"./ReactDOMSelect":385,"./ReactDOMTextarea":389,"./ReactMount":407,"./ReactMultiChild":408,"./ReactPerf":413,"./ReactUpdateQueue":427,"./canDefineProperty":449,"./escapeTextContentForBrowser":452,"./isEventSupported":464,"./setInnerHTML":469,"./setTextContent":470,"./validateDOMNesting":473,"_process":34,"fbjs/lib/invariant":490,"fbjs/lib/keyOf":494,"fbjs/lib/shallowEqual":499,"fbjs/lib/warning":501}],380:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -31813,7 +31986,7 @@ var ReactDOMFactories = mapObject({ module.exports = ReactDOMFactories; }).call(this,require('_process')) -},{"./ReactElement":393,"./ReactElementValidator":394,"_process":33,"fbjs/lib/mapObject":494}],380:[function(require,module,exports){ +},{"./ReactElement":394,"./ReactElementValidator":395,"_process":34,"fbjs/lib/mapObject":495}],381:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -31832,7 +32005,7 @@ var ReactDOMFeatureFlags = { }; module.exports = ReactDOMFeatureFlags; -},{}],381:[function(require,module,exports){ +},{}],382:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -31929,7 +32102,7 @@ ReactPerf.measureMethods(ReactDOMIDOperations, 'ReactDOMIDOperations', { module.exports = ReactDOMIDOperations; }).call(this,require('_process')) -},{"./DOMChildrenOperations":347,"./DOMPropertyOperations":349,"./ReactMount":406,"./ReactPerf":412,"_process":33,"fbjs/lib/invariant":489}],382:[function(require,module,exports){ +},{"./DOMChildrenOperations":348,"./DOMPropertyOperations":350,"./ReactMount":407,"./ReactPerf":413,"_process":34,"fbjs/lib/invariant":490}],383:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -32085,7 +32258,7 @@ function _handleChange(event) { module.exports = ReactDOMInput; }).call(this,require('_process')) -},{"./LinkedValueUtils":360,"./Object.assign":361,"./ReactDOMIDOperations":381,"./ReactMount":406,"./ReactUpdates":427,"_process":33,"fbjs/lib/invariant":489}],383:[function(require,module,exports){ +},{"./LinkedValueUtils":361,"./Object.assign":362,"./ReactDOMIDOperations":382,"./ReactMount":407,"./ReactUpdates":428,"_process":34,"fbjs/lib/invariant":490}],384:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -32174,7 +32347,7 @@ var ReactDOMOption = { module.exports = ReactDOMOption; }).call(this,require('_process')) -},{"./Object.assign":361,"./ReactChildren":369,"./ReactDOMSelect":384,"_process":33,"fbjs/lib/warning":500}],384:[function(require,module,exports){ +},{"./Object.assign":362,"./ReactChildren":370,"./ReactDOMSelect":385,"_process":34,"fbjs/lib/warning":501}],385:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -32365,7 +32538,7 @@ function _handleChange(event) { module.exports = ReactDOMSelect; }).call(this,require('_process')) -},{"./LinkedValueUtils":360,"./Object.assign":361,"./ReactMount":406,"./ReactUpdates":427,"_process":33,"fbjs/lib/warning":500}],385:[function(require,module,exports){ +},{"./LinkedValueUtils":361,"./Object.assign":362,"./ReactMount":407,"./ReactUpdates":428,"_process":34,"fbjs/lib/warning":501}],386:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -32578,7 +32751,7 @@ var ReactDOMSelection = { }; module.exports = ReactDOMSelection; -},{"./getNodeForCharacterOffset":460,"./getTextContentAccessor":461,"fbjs/lib/ExecutionEnvironment":475}],386:[function(require,module,exports){ +},{"./getNodeForCharacterOffset":461,"./getTextContentAccessor":462,"fbjs/lib/ExecutionEnvironment":476}],387:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -32605,7 +32778,7 @@ var ReactDOMServer = { }; module.exports = ReactDOMServer; -},{"./ReactDefaultInjection":390,"./ReactServerRendering":421,"./ReactVersion":428}],387:[function(require,module,exports){ +},{"./ReactDefaultInjection":391,"./ReactServerRendering":422,"./ReactVersion":429}],388:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -32735,7 +32908,7 @@ assign(ReactDOMTextComponent.prototype, { module.exports = ReactDOMTextComponent; }).call(this,require('_process')) -},{"./DOMChildrenOperations":347,"./DOMPropertyOperations":349,"./Object.assign":361,"./ReactComponentBrowserEnvironment":372,"./ReactMount":406,"./escapeTextContentForBrowser":451,"./setTextContent":469,"./validateDOMNesting":472,"_process":33}],388:[function(require,module,exports){ +},{"./DOMChildrenOperations":348,"./DOMPropertyOperations":350,"./Object.assign":362,"./ReactComponentBrowserEnvironment":373,"./ReactMount":407,"./escapeTextContentForBrowser":452,"./setTextContent":470,"./validateDOMNesting":473,"_process":34}],389:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -32851,7 +33024,7 @@ function _handleChange(event) { module.exports = ReactDOMTextarea; }).call(this,require('_process')) -},{"./LinkedValueUtils":360,"./Object.assign":361,"./ReactDOMIDOperations":381,"./ReactUpdates":427,"_process":33,"fbjs/lib/invariant":489,"fbjs/lib/warning":500}],389:[function(require,module,exports){ +},{"./LinkedValueUtils":361,"./Object.assign":362,"./ReactDOMIDOperations":382,"./ReactUpdates":428,"_process":34,"fbjs/lib/invariant":490,"fbjs/lib/warning":501}],390:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -32919,7 +33092,7 @@ var ReactDefaultBatchingStrategy = { }; module.exports = ReactDefaultBatchingStrategy; -},{"./Object.assign":361,"./ReactUpdates":427,"./Transaction":444,"fbjs/lib/emptyFunction":481}],390:[function(require,module,exports){ +},{"./Object.assign":362,"./ReactUpdates":428,"./Transaction":445,"fbjs/lib/emptyFunction":482}],391:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -33019,7 +33192,7 @@ module.exports = { inject: inject }; }).call(this,require('_process')) -},{"./BeforeInputEventPlugin":341,"./ChangeEventPlugin":345,"./ClientReactRootIndex":346,"./DefaultEventPluginOrder":351,"./EnterLeaveEventPlugin":352,"./HTMLDOMPropertyConfig":359,"./ReactBrowserComponentMixin":364,"./ReactComponentBrowserEnvironment":372,"./ReactDOMComponent":378,"./ReactDOMTextComponent":387,"./ReactDefaultBatchingStrategy":389,"./ReactDefaultPerf":391,"./ReactEventListener":399,"./ReactInjection":400,"./ReactInstanceHandles":402,"./ReactMount":406,"./ReactReconcileTransaction":416,"./SVGDOMPropertyConfig":429,"./SelectEventPlugin":430,"./ServerReactRootIndex":431,"./SimpleEventPlugin":432,"_process":33,"fbjs/lib/ExecutionEnvironment":475}],391:[function(require,module,exports){ +},{"./BeforeInputEventPlugin":342,"./ChangeEventPlugin":346,"./ClientReactRootIndex":347,"./DefaultEventPluginOrder":352,"./EnterLeaveEventPlugin":353,"./HTMLDOMPropertyConfig":360,"./ReactBrowserComponentMixin":365,"./ReactComponentBrowserEnvironment":373,"./ReactDOMComponent":379,"./ReactDOMTextComponent":388,"./ReactDefaultBatchingStrategy":390,"./ReactDefaultPerf":392,"./ReactEventListener":400,"./ReactInjection":401,"./ReactInstanceHandles":403,"./ReactMount":407,"./ReactReconcileTransaction":417,"./SVGDOMPropertyConfig":430,"./SelectEventPlugin":431,"./ServerReactRootIndex":432,"./SimpleEventPlugin":433,"_process":34,"fbjs/lib/ExecutionEnvironment":476}],392:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -33257,7 +33430,7 @@ var ReactDefaultPerf = { }; module.exports = ReactDefaultPerf; -},{"./DOMProperty":348,"./ReactDefaultPerfAnalysis":392,"./ReactMount":406,"./ReactPerf":412,"fbjs/lib/performanceNow":497}],392:[function(require,module,exports){ +},{"./DOMProperty":349,"./ReactDefaultPerfAnalysis":393,"./ReactMount":407,"./ReactPerf":413,"fbjs/lib/performanceNow":498}],393:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -33459,7 +33632,7 @@ var ReactDefaultPerfAnalysis = { }; module.exports = ReactDefaultPerfAnalysis; -},{"./Object.assign":361}],393:[function(require,module,exports){ +},{"./Object.assign":362}],394:[function(require,module,exports){ (function (process){ /** * Copyright 2014-2015, Facebook, Inc. @@ -33709,7 +33882,7 @@ ReactElement.isValidElement = function (object) { module.exports = ReactElement; }).call(this,require('_process')) -},{"./Object.assign":361,"./ReactCurrentOwner":375,"./canDefineProperty":448,"_process":33}],394:[function(require,module,exports){ +},{"./Object.assign":362,"./ReactCurrentOwner":376,"./canDefineProperty":449,"_process":34}],395:[function(require,module,exports){ (function (process){ /** * Copyright 2014-2015, Facebook, Inc. @@ -33993,7 +34166,7 @@ var ReactElementValidator = { module.exports = ReactElementValidator; }).call(this,require('_process')) -},{"./ReactCurrentOwner":375,"./ReactElement":393,"./ReactPropTypeLocationNames":413,"./ReactPropTypeLocations":414,"./canDefineProperty":448,"./getIteratorFn":459,"_process":33,"fbjs/lib/invariant":489,"fbjs/lib/warning":500}],395:[function(require,module,exports){ +},{"./ReactCurrentOwner":376,"./ReactElement":394,"./ReactPropTypeLocationNames":414,"./ReactPropTypeLocations":415,"./canDefineProperty":449,"./getIteratorFn":460,"_process":34,"fbjs/lib/invariant":490,"fbjs/lib/warning":501}],396:[function(require,module,exports){ /** * Copyright 2014-2015, Facebook, Inc. * All rights reserved. @@ -34045,7 +34218,7 @@ assign(ReactEmptyComponent.prototype, { ReactEmptyComponent.injection = ReactEmptyComponentInjection; module.exports = ReactEmptyComponent; -},{"./Object.assign":361,"./ReactElement":393,"./ReactEmptyComponentRegistry":396,"./ReactReconciler":417}],396:[function(require,module,exports){ +},{"./Object.assign":362,"./ReactElement":394,"./ReactEmptyComponentRegistry":397,"./ReactReconciler":418}],397:[function(require,module,exports){ /** * Copyright 2014-2015, Facebook, Inc. * All rights reserved. @@ -34094,7 +34267,7 @@ var ReactEmptyComponentRegistry = { }; module.exports = ReactEmptyComponentRegistry; -},{}],397:[function(require,module,exports){ +},{}],398:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -34174,7 +34347,7 @@ if (process.env.NODE_ENV !== 'production') { module.exports = ReactErrorUtils; }).call(this,require('_process')) -},{"_process":33}],398:[function(require,module,exports){ +},{"_process":34}],399:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -34213,7 +34386,7 @@ var ReactEventEmitterMixin = { }; module.exports = ReactEventEmitterMixin; -},{"./EventPluginHub":354}],399:[function(require,module,exports){ +},{"./EventPluginHub":355}],400:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -34425,7 +34598,7 @@ var ReactEventListener = { }; module.exports = ReactEventListener; -},{"./Object.assign":361,"./PooledClass":362,"./ReactInstanceHandles":402,"./ReactMount":406,"./ReactUpdates":427,"./getEventTarget":458,"fbjs/lib/EventListener":474,"fbjs/lib/ExecutionEnvironment":475,"fbjs/lib/getUnboundedScrollPosition":486}],400:[function(require,module,exports){ +},{"./Object.assign":362,"./PooledClass":363,"./ReactInstanceHandles":403,"./ReactMount":407,"./ReactUpdates":428,"./getEventTarget":459,"fbjs/lib/EventListener":475,"fbjs/lib/ExecutionEnvironment":476,"fbjs/lib/getUnboundedScrollPosition":487}],401:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -34464,7 +34637,7 @@ var ReactInjection = { }; module.exports = ReactInjection; -},{"./DOMProperty":348,"./EventPluginHub":354,"./ReactBrowserEventEmitter":365,"./ReactClass":370,"./ReactComponentEnvironment":373,"./ReactEmptyComponent":395,"./ReactNativeComponent":409,"./ReactPerf":412,"./ReactRootIndex":419,"./ReactUpdates":427}],401:[function(require,module,exports){ +},{"./DOMProperty":349,"./EventPluginHub":355,"./ReactBrowserEventEmitter":366,"./ReactClass":371,"./ReactComponentEnvironment":374,"./ReactEmptyComponent":396,"./ReactNativeComponent":410,"./ReactPerf":413,"./ReactRootIndex":420,"./ReactUpdates":428}],402:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -34589,7 +34762,7 @@ var ReactInputSelection = { }; module.exports = ReactInputSelection; -},{"./ReactDOMSelection":385,"fbjs/lib/containsNode":478,"fbjs/lib/focusNode":483,"fbjs/lib/getActiveElement":484}],402:[function(require,module,exports){ +},{"./ReactDOMSelection":386,"fbjs/lib/containsNode":479,"fbjs/lib/focusNode":484,"fbjs/lib/getActiveElement":485}],403:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -34894,7 +35067,7 @@ var ReactInstanceHandles = { module.exports = ReactInstanceHandles; }).call(this,require('_process')) -},{"./ReactRootIndex":419,"_process":33,"fbjs/lib/invariant":489}],403:[function(require,module,exports){ +},{"./ReactRootIndex":420,"_process":34,"fbjs/lib/invariant":490}],404:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -34942,7 +35115,7 @@ var ReactInstanceMap = { }; module.exports = ReactInstanceMap; -},{}],404:[function(require,module,exports){ +},{}],405:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -35019,7 +35192,7 @@ var React = { module.exports = React; }).call(this,require('_process')) -},{"./Object.assign":361,"./ReactChildren":369,"./ReactClass":370,"./ReactComponent":371,"./ReactDOMFactories":379,"./ReactElement":393,"./ReactElementValidator":394,"./ReactPropTypes":415,"./ReactVersion":428,"./onlyChild":465,"_process":33}],405:[function(require,module,exports){ +},{"./Object.assign":362,"./ReactChildren":370,"./ReactClass":371,"./ReactComponent":372,"./ReactDOMFactories":380,"./ReactElement":394,"./ReactElementValidator":395,"./ReactPropTypes":416,"./ReactVersion":429,"./onlyChild":466,"_process":34}],406:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -35065,7 +35238,7 @@ var ReactMarkupChecksum = { }; module.exports = ReactMarkupChecksum; -},{"./adler32":447}],406:[function(require,module,exports){ +},{"./adler32":448}],407:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -35918,7 +36091,7 @@ ReactPerf.measureMethods(ReactMount, 'ReactMount', { module.exports = ReactMount; }).call(this,require('_process')) -},{"./DOMProperty":348,"./Object.assign":361,"./ReactBrowserEventEmitter":365,"./ReactCurrentOwner":375,"./ReactDOMFeatureFlags":380,"./ReactElement":393,"./ReactEmptyComponentRegistry":396,"./ReactInstanceHandles":402,"./ReactInstanceMap":403,"./ReactMarkupChecksum":405,"./ReactPerf":412,"./ReactReconciler":417,"./ReactUpdateQueue":426,"./ReactUpdates":427,"./instantiateReactComponent":462,"./setInnerHTML":468,"./shouldUpdateReactComponent":470,"./validateDOMNesting":472,"_process":33,"fbjs/lib/containsNode":478,"fbjs/lib/emptyObject":482,"fbjs/lib/invariant":489,"fbjs/lib/warning":500}],407:[function(require,module,exports){ +},{"./DOMProperty":349,"./Object.assign":362,"./ReactBrowserEventEmitter":366,"./ReactCurrentOwner":376,"./ReactDOMFeatureFlags":381,"./ReactElement":394,"./ReactEmptyComponentRegistry":397,"./ReactInstanceHandles":403,"./ReactInstanceMap":404,"./ReactMarkupChecksum":406,"./ReactPerf":413,"./ReactReconciler":418,"./ReactUpdateQueue":427,"./ReactUpdates":428,"./instantiateReactComponent":463,"./setInnerHTML":469,"./shouldUpdateReactComponent":471,"./validateDOMNesting":473,"_process":34,"fbjs/lib/containsNode":479,"fbjs/lib/emptyObject":483,"fbjs/lib/invariant":490,"fbjs/lib/warning":501}],408:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -36417,7 +36590,7 @@ var ReactMultiChild = { module.exports = ReactMultiChild; }).call(this,require('_process')) -},{"./ReactChildReconciler":368,"./ReactComponentEnvironment":373,"./ReactCurrentOwner":375,"./ReactMultiChildUpdateTypes":408,"./ReactReconciler":417,"./flattenChildren":453,"_process":33}],408:[function(require,module,exports){ +},{"./ReactChildReconciler":369,"./ReactComponentEnvironment":374,"./ReactCurrentOwner":376,"./ReactMultiChildUpdateTypes":409,"./ReactReconciler":418,"./flattenChildren":454,"_process":34}],409:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -36450,7 +36623,7 @@ var ReactMultiChildUpdateTypes = keyMirror({ }); module.exports = ReactMultiChildUpdateTypes; -},{"fbjs/lib/keyMirror":492}],409:[function(require,module,exports){ +},{"fbjs/lib/keyMirror":493}],410:[function(require,module,exports){ (function (process){ /** * Copyright 2014-2015, Facebook, Inc. @@ -36547,7 +36720,7 @@ var ReactNativeComponent = { module.exports = ReactNativeComponent; }).call(this,require('_process')) -},{"./Object.assign":361,"_process":33,"fbjs/lib/invariant":489}],410:[function(require,module,exports){ +},{"./Object.assign":362,"_process":34,"fbjs/lib/invariant":490}],411:[function(require,module,exports){ (function (process){ /** * Copyright 2015, Facebook, Inc. @@ -36668,7 +36841,7 @@ var ReactNoopUpdateQueue = { module.exports = ReactNoopUpdateQueue; }).call(this,require('_process')) -},{"_process":33,"fbjs/lib/warning":500}],411:[function(require,module,exports){ +},{"_process":34,"fbjs/lib/warning":501}],412:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -36762,7 +36935,7 @@ var ReactOwner = { module.exports = ReactOwner; }).call(this,require('_process')) -},{"_process":33,"fbjs/lib/invariant":489}],412:[function(require,module,exports){ +},{"_process":34,"fbjs/lib/invariant":490}],413:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -36861,7 +37034,7 @@ function _noMeasure(objName, fnName, func) { module.exports = ReactPerf; }).call(this,require('_process')) -},{"_process":33}],413:[function(require,module,exports){ +},{"_process":34}],414:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -36888,7 +37061,7 @@ if (process.env.NODE_ENV !== 'production') { module.exports = ReactPropTypeLocationNames; }).call(this,require('_process')) -},{"_process":33}],414:[function(require,module,exports){ +},{"_process":34}],415:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -36911,7 +37084,7 @@ var ReactPropTypeLocations = keyMirror({ }); module.exports = ReactPropTypeLocations; -},{"fbjs/lib/keyMirror":492}],415:[function(require,module,exports){ +},{"fbjs/lib/keyMirror":493}],416:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -37268,7 +37441,7 @@ function getClassName(propValue) { } module.exports = ReactPropTypes; -},{"./ReactElement":393,"./ReactPropTypeLocationNames":413,"./getIteratorFn":459,"fbjs/lib/emptyFunction":481}],416:[function(require,module,exports){ +},{"./ReactElement":394,"./ReactPropTypeLocationNames":414,"./getIteratorFn":460,"fbjs/lib/emptyFunction":482}],417:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -37420,7 +37593,7 @@ assign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin); PooledClass.addPoolingTo(ReactReconcileTransaction); module.exports = ReactReconcileTransaction; -},{"./CallbackQueue":344,"./Object.assign":361,"./PooledClass":362,"./ReactBrowserEventEmitter":365,"./ReactDOMFeatureFlags":380,"./ReactInputSelection":401,"./Transaction":444}],417:[function(require,module,exports){ +},{"./CallbackQueue":345,"./Object.assign":362,"./PooledClass":363,"./ReactBrowserEventEmitter":366,"./ReactDOMFeatureFlags":381,"./ReactInputSelection":402,"./Transaction":445}],418:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -37528,7 +37701,7 @@ var ReactReconciler = { }; module.exports = ReactReconciler; -},{"./ReactRef":418}],418:[function(require,module,exports){ +},{"./ReactRef":419}],419:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -37607,7 +37780,7 @@ ReactRef.detachRefs = function (instance, element) { }; module.exports = ReactRef; -},{"./ReactOwner":411}],419:[function(require,module,exports){ +},{"./ReactOwner":412}],420:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -37637,7 +37810,7 @@ var ReactRootIndex = { }; module.exports = ReactRootIndex; -},{}],420:[function(require,module,exports){ +},{}],421:[function(require,module,exports){ /** * Copyright 2014-2015, Facebook, Inc. * All rights reserved. @@ -37661,7 +37834,7 @@ var ReactServerBatchingStrategy = { }; module.exports = ReactServerBatchingStrategy; -},{}],421:[function(require,module,exports){ +},{}],422:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -37747,7 +37920,7 @@ module.exports = { renderToStaticMarkup: renderToStaticMarkup }; }).call(this,require('_process')) -},{"./ReactDefaultBatchingStrategy":389,"./ReactElement":393,"./ReactInstanceHandles":402,"./ReactMarkupChecksum":405,"./ReactServerBatchingStrategy":420,"./ReactServerRenderingTransaction":422,"./ReactUpdates":427,"./instantiateReactComponent":462,"_process":33,"fbjs/lib/emptyObject":482,"fbjs/lib/invariant":489}],422:[function(require,module,exports){ +},{"./ReactDefaultBatchingStrategy":390,"./ReactElement":394,"./ReactInstanceHandles":403,"./ReactMarkupChecksum":406,"./ReactServerBatchingStrategy":421,"./ReactServerRenderingTransaction":423,"./ReactUpdates":428,"./instantiateReactComponent":463,"_process":34,"fbjs/lib/emptyObject":483,"fbjs/lib/invariant":490}],423:[function(require,module,exports){ /** * Copyright 2014-2015, Facebook, Inc. * All rights reserved. @@ -37835,7 +38008,7 @@ assign(ReactServerRenderingTransaction.prototype, Transaction.Mixin, Mixin); PooledClass.addPoolingTo(ReactServerRenderingTransaction); module.exports = ReactServerRenderingTransaction; -},{"./CallbackQueue":344,"./Object.assign":361,"./PooledClass":362,"./Transaction":444,"fbjs/lib/emptyFunction":481}],423:[function(require,module,exports){ +},{"./CallbackQueue":345,"./Object.assign":362,"./PooledClass":363,"./Transaction":445,"fbjs/lib/emptyFunction":482}],424:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -37934,7 +38107,7 @@ var ReactTransitionChildMapping = { }; module.exports = ReactTransitionChildMapping; -},{"./flattenChildren":453}],424:[function(require,module,exports){ +},{"./flattenChildren":454}],425:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -38044,7 +38217,7 @@ var ReactTransitionEvents = { }; module.exports = ReactTransitionEvents; -},{"fbjs/lib/ExecutionEnvironment":475}],425:[function(require,module,exports){ +},{"fbjs/lib/ExecutionEnvironment":476}],426:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -38250,7 +38423,7 @@ var ReactTransitionGroup = React.createClass({ }); module.exports = ReactTransitionGroup; -},{"./Object.assign":361,"./React":363,"./ReactTransitionChildMapping":423,"fbjs/lib/emptyFunction":481}],426:[function(require,module,exports){ +},{"./Object.assign":362,"./React":364,"./ReactTransitionChildMapping":424,"fbjs/lib/emptyFunction":482}],427:[function(require,module,exports){ (function (process){ /** * Copyright 2015, Facebook, Inc. @@ -38510,7 +38683,7 @@ var ReactUpdateQueue = { module.exports = ReactUpdateQueue; }).call(this,require('_process')) -},{"./Object.assign":361,"./ReactCurrentOwner":375,"./ReactElement":393,"./ReactInstanceMap":403,"./ReactUpdates":427,"_process":33,"fbjs/lib/invariant":489,"fbjs/lib/warning":500}],427:[function(require,module,exports){ +},{"./Object.assign":362,"./ReactCurrentOwner":376,"./ReactElement":394,"./ReactInstanceMap":404,"./ReactUpdates":428,"_process":34,"fbjs/lib/invariant":490,"fbjs/lib/warning":501}],428:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -38736,7 +38909,7 @@ var ReactUpdates = { module.exports = ReactUpdates; }).call(this,require('_process')) -},{"./CallbackQueue":344,"./Object.assign":361,"./PooledClass":362,"./ReactPerf":412,"./ReactReconciler":417,"./Transaction":444,"_process":33,"fbjs/lib/invariant":489}],428:[function(require,module,exports){ +},{"./CallbackQueue":345,"./Object.assign":362,"./PooledClass":363,"./ReactPerf":413,"./ReactReconciler":418,"./Transaction":445,"_process":34,"fbjs/lib/invariant":490}],429:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -38751,7 +38924,7 @@ module.exports = ReactUpdates; 'use strict'; module.exports = '0.14.6'; -},{}],429:[function(require,module,exports){ +},{}],430:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -38879,7 +39052,7 @@ var SVGDOMPropertyConfig = { }; module.exports = SVGDOMPropertyConfig; -},{"./DOMProperty":348}],430:[function(require,module,exports){ +},{"./DOMProperty":349}],431:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -39081,7 +39254,7 @@ var SelectEventPlugin = { }; module.exports = SelectEventPlugin; -},{"./EventConstants":353,"./EventPropagators":357,"./ReactInputSelection":401,"./SyntheticEvent":436,"./isTextInputElement":464,"fbjs/lib/ExecutionEnvironment":475,"fbjs/lib/getActiveElement":484,"fbjs/lib/keyOf":493,"fbjs/lib/shallowEqual":498}],431:[function(require,module,exports){ +},{"./EventConstants":354,"./EventPropagators":358,"./ReactInputSelection":402,"./SyntheticEvent":437,"./isTextInputElement":465,"fbjs/lib/ExecutionEnvironment":476,"fbjs/lib/getActiveElement":485,"fbjs/lib/keyOf":494,"fbjs/lib/shallowEqual":499}],432:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -39111,7 +39284,7 @@ var ServerReactRootIndex = { }; module.exports = ServerReactRootIndex; -},{}],432:[function(require,module,exports){ +},{}],433:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -39701,7 +39874,7 @@ var SimpleEventPlugin = { module.exports = SimpleEventPlugin; }).call(this,require('_process')) -},{"./EventConstants":353,"./EventPropagators":357,"./ReactMount":406,"./SyntheticClipboardEvent":433,"./SyntheticDragEvent":435,"./SyntheticEvent":436,"./SyntheticFocusEvent":437,"./SyntheticKeyboardEvent":439,"./SyntheticMouseEvent":440,"./SyntheticTouchEvent":441,"./SyntheticUIEvent":442,"./SyntheticWheelEvent":443,"./getEventCharCode":455,"_process":33,"fbjs/lib/EventListener":474,"fbjs/lib/emptyFunction":481,"fbjs/lib/invariant":489,"fbjs/lib/keyOf":493}],433:[function(require,module,exports){ +},{"./EventConstants":354,"./EventPropagators":358,"./ReactMount":407,"./SyntheticClipboardEvent":434,"./SyntheticDragEvent":436,"./SyntheticEvent":437,"./SyntheticFocusEvent":438,"./SyntheticKeyboardEvent":440,"./SyntheticMouseEvent":441,"./SyntheticTouchEvent":442,"./SyntheticUIEvent":443,"./SyntheticWheelEvent":444,"./getEventCharCode":456,"_process":34,"fbjs/lib/EventListener":475,"fbjs/lib/emptyFunction":482,"fbjs/lib/invariant":490,"fbjs/lib/keyOf":494}],434:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -39741,7 +39914,7 @@ function SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent, na SyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface); module.exports = SyntheticClipboardEvent; -},{"./SyntheticEvent":436}],434:[function(require,module,exports){ +},{"./SyntheticEvent":437}],435:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -39779,7 +39952,7 @@ function SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent, SyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface); module.exports = SyntheticCompositionEvent; -},{"./SyntheticEvent":436}],435:[function(require,module,exports){ +},{"./SyntheticEvent":437}],436:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -39817,7 +39990,7 @@ function SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeE SyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface); module.exports = SyntheticDragEvent; -},{"./SyntheticMouseEvent":440}],436:[function(require,module,exports){ +},{"./SyntheticMouseEvent":441}],437:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -39997,7 +40170,7 @@ PooledClass.addPoolingTo(SyntheticEvent, PooledClass.fourArgumentPooler); module.exports = SyntheticEvent; }).call(this,require('_process')) -},{"./Object.assign":361,"./PooledClass":362,"_process":33,"fbjs/lib/emptyFunction":481,"fbjs/lib/warning":500}],437:[function(require,module,exports){ +},{"./Object.assign":362,"./PooledClass":363,"_process":34,"fbjs/lib/emptyFunction":482,"fbjs/lib/warning":501}],438:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -40035,7 +40208,7 @@ function SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent, native SyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface); module.exports = SyntheticFocusEvent; -},{"./SyntheticUIEvent":442}],438:[function(require,module,exports){ +},{"./SyntheticUIEvent":443}],439:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -40074,7 +40247,7 @@ function SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent, native SyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface); module.exports = SyntheticInputEvent; -},{"./SyntheticEvent":436}],439:[function(require,module,exports){ +},{"./SyntheticEvent":437}],440:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -40160,7 +40333,7 @@ function SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nat SyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface); module.exports = SyntheticKeyboardEvent; -},{"./SyntheticUIEvent":442,"./getEventCharCode":455,"./getEventKey":456,"./getEventModifierState":457}],440:[function(require,module,exports){ +},{"./SyntheticUIEvent":443,"./getEventCharCode":456,"./getEventKey":457,"./getEventModifierState":458}],441:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -40234,7 +40407,7 @@ function SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, native SyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface); module.exports = SyntheticMouseEvent; -},{"./SyntheticUIEvent":442,"./ViewportMetrics":445,"./getEventModifierState":457}],441:[function(require,module,exports){ +},{"./SyntheticUIEvent":443,"./ViewportMetrics":446,"./getEventModifierState":458}],442:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -40281,7 +40454,7 @@ function SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent, native SyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface); module.exports = SyntheticTouchEvent; -},{"./SyntheticUIEvent":442,"./getEventModifierState":457}],442:[function(require,module,exports){ +},{"./SyntheticUIEvent":443,"./getEventModifierState":458}],443:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -40342,7 +40515,7 @@ function SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEve SyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface); module.exports = SyntheticUIEvent; -},{"./SyntheticEvent":436,"./getEventTarget":458}],443:[function(require,module,exports){ +},{"./SyntheticEvent":437,"./getEventTarget":459}],444:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -40398,7 +40571,7 @@ function SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent, native SyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface); module.exports = SyntheticWheelEvent; -},{"./SyntheticMouseEvent":440}],444:[function(require,module,exports){ +},{"./SyntheticMouseEvent":441}],445:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -40632,7 +40805,7 @@ var Transaction = { module.exports = Transaction; }).call(this,require('_process')) -},{"_process":33,"fbjs/lib/invariant":489}],445:[function(require,module,exports){ +},{"_process":34,"fbjs/lib/invariant":490}],446:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -40660,7 +40833,7 @@ var ViewportMetrics = { }; module.exports = ViewportMetrics; -},{}],446:[function(require,module,exports){ +},{}],447:[function(require,module,exports){ (function (process){ /** * Copyright 2014-2015, Facebook, Inc. @@ -40722,7 +40895,7 @@ function accumulateInto(current, next) { module.exports = accumulateInto; }).call(this,require('_process')) -},{"_process":33,"fbjs/lib/invariant":489}],447:[function(require,module,exports){ +},{"_process":34,"fbjs/lib/invariant":490}],448:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -40765,7 +40938,7 @@ function adler32(data) { } module.exports = adler32; -},{}],448:[function(require,module,exports){ +},{}],449:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -40792,7 +40965,7 @@ if (process.env.NODE_ENV !== 'production') { module.exports = canDefineProperty; }).call(this,require('_process')) -},{"_process":33}],449:[function(require,module,exports){ +},{"_process":34}],450:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -40848,7 +41021,7 @@ function dangerousStyleValue(name, value) { } module.exports = dangerousStyleValue; -},{"./CSSProperty":342}],450:[function(require,module,exports){ +},{"./CSSProperty":343}],451:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -40899,7 +41072,7 @@ function deprecated(fnName, newModule, newPackage, ctx, fn) { module.exports = deprecated; }).call(this,require('_process')) -},{"./Object.assign":361,"_process":33,"fbjs/lib/warning":500}],451:[function(require,module,exports){ +},{"./Object.assign":362,"_process":34,"fbjs/lib/warning":501}],452:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -40938,7 +41111,7 @@ function escapeTextContentForBrowser(text) { } module.exports = escapeTextContentForBrowser; -},{}],452:[function(require,module,exports){ +},{}],453:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -40990,7 +41163,7 @@ function findDOMNode(componentOrElement) { module.exports = findDOMNode; }).call(this,require('_process')) -},{"./ReactCurrentOwner":375,"./ReactInstanceMap":403,"./ReactMount":406,"_process":33,"fbjs/lib/invariant":489,"fbjs/lib/warning":500}],453:[function(require,module,exports){ +},{"./ReactCurrentOwner":376,"./ReactInstanceMap":404,"./ReactMount":407,"_process":34,"fbjs/lib/invariant":490,"fbjs/lib/warning":501}],454:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -41041,7 +41214,7 @@ function flattenChildren(children) { module.exports = flattenChildren; }).call(this,require('_process')) -},{"./traverseAllChildren":471,"_process":33,"fbjs/lib/warning":500}],454:[function(require,module,exports){ +},{"./traverseAllChildren":472,"_process":34,"fbjs/lib/warning":501}],455:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -41071,7 +41244,7 @@ var forEachAccumulated = function (arr, cb, scope) { }; module.exports = forEachAccumulated; -},{}],455:[function(require,module,exports){ +},{}],456:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -41122,7 +41295,7 @@ function getEventCharCode(nativeEvent) { } module.exports = getEventCharCode; -},{}],456:[function(require,module,exports){ +},{}],457:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -41226,7 +41399,7 @@ function getEventKey(nativeEvent) { } module.exports = getEventKey; -},{"./getEventCharCode":455}],457:[function(require,module,exports){ +},{"./getEventCharCode":456}],458:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -41271,7 +41444,7 @@ function getEventModifierState(nativeEvent) { } module.exports = getEventModifierState; -},{}],458:[function(require,module,exports){ +},{}],459:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -41301,7 +41474,7 @@ function getEventTarget(nativeEvent) { } module.exports = getEventTarget; -},{}],459:[function(require,module,exports){ +},{}],460:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -41342,7 +41515,7 @@ function getIteratorFn(maybeIterable) { } module.exports = getIteratorFn; -},{}],460:[function(require,module,exports){ +},{}],461:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -41416,7 +41589,7 @@ function getNodeForCharacterOffset(root, offset) { } module.exports = getNodeForCharacterOffset; -},{}],461:[function(require,module,exports){ +},{}],462:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -41450,7 +41623,7 @@ function getTextContentAccessor() { } module.exports = getTextContentAccessor; -},{"fbjs/lib/ExecutionEnvironment":475}],462:[function(require,module,exports){ +},{"fbjs/lib/ExecutionEnvironment":476}],463:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -41565,7 +41738,7 @@ function instantiateReactComponent(node) { module.exports = instantiateReactComponent; }).call(this,require('_process')) -},{"./Object.assign":361,"./ReactCompositeComponent":374,"./ReactEmptyComponent":395,"./ReactNativeComponent":409,"_process":33,"fbjs/lib/invariant":489,"fbjs/lib/warning":500}],463:[function(require,module,exports){ +},{"./Object.assign":362,"./ReactCompositeComponent":375,"./ReactEmptyComponent":396,"./ReactNativeComponent":410,"_process":34,"fbjs/lib/invariant":490,"fbjs/lib/warning":501}],464:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -41626,7 +41799,7 @@ function isEventSupported(eventNameSuffix, capture) { } module.exports = isEventSupported; -},{"fbjs/lib/ExecutionEnvironment":475}],464:[function(require,module,exports){ +},{"fbjs/lib/ExecutionEnvironment":476}],465:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -41667,7 +41840,7 @@ function isTextInputElement(elem) { } module.exports = isTextInputElement; -},{}],465:[function(require,module,exports){ +},{}],466:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -41703,7 +41876,7 @@ function onlyChild(children) { module.exports = onlyChild; }).call(this,require('_process')) -},{"./ReactElement":393,"_process":33,"fbjs/lib/invariant":489}],466:[function(require,module,exports){ +},{"./ReactElement":394,"_process":34,"fbjs/lib/invariant":490}],467:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -41730,7 +41903,7 @@ function quoteAttributeValueForBrowser(value) { } module.exports = quoteAttributeValueForBrowser; -},{"./escapeTextContentForBrowser":451}],467:[function(require,module,exports){ +},{"./escapeTextContentForBrowser":452}],468:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -41747,7 +41920,7 @@ module.exports = quoteAttributeValueForBrowser; var ReactMount = require('./ReactMount'); module.exports = ReactMount.renderSubtreeIntoContainer; -},{"./ReactMount":406}],468:[function(require,module,exports){ +},{"./ReactMount":407}],469:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -41838,7 +42011,7 @@ if (ExecutionEnvironment.canUseDOM) { } module.exports = setInnerHTML; -},{"fbjs/lib/ExecutionEnvironment":475}],469:[function(require,module,exports){ +},{"fbjs/lib/ExecutionEnvironment":476}],470:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -41879,7 +42052,7 @@ if (ExecutionEnvironment.canUseDOM) { } module.exports = setTextContent; -},{"./escapeTextContentForBrowser":451,"./setInnerHTML":468,"fbjs/lib/ExecutionEnvironment":475}],470:[function(require,module,exports){ +},{"./escapeTextContentForBrowser":452,"./setInnerHTML":469,"fbjs/lib/ExecutionEnvironment":476}],471:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -41923,7 +42096,7 @@ function shouldUpdateReactComponent(prevElement, nextElement) { } module.exports = shouldUpdateReactComponent; -},{}],471:[function(require,module,exports){ +},{}],472:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -42115,7 +42288,7 @@ function traverseAllChildren(children, callback, traverseContext) { module.exports = traverseAllChildren; }).call(this,require('_process')) -},{"./ReactCurrentOwner":375,"./ReactElement":393,"./ReactInstanceHandles":402,"./getIteratorFn":459,"_process":33,"fbjs/lib/invariant":489,"fbjs/lib/warning":500}],472:[function(require,module,exports){ +},{"./ReactCurrentOwner":376,"./ReactElement":394,"./ReactInstanceHandles":403,"./getIteratorFn":460,"_process":34,"fbjs/lib/invariant":490,"fbjs/lib/warning":501}],473:[function(require,module,exports){ (function (process){ /** * Copyright 2015, Facebook, Inc. @@ -42481,7 +42654,7 @@ if (process.env.NODE_ENV !== 'production') { module.exports = validateDOMNesting; }).call(this,require('_process')) -},{"./Object.assign":361,"_process":33,"fbjs/lib/emptyFunction":481,"fbjs/lib/warning":500}],473:[function(require,module,exports){ +},{"./Object.assign":362,"_process":34,"fbjs/lib/emptyFunction":482,"fbjs/lib/warning":501}],474:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -42581,7 +42754,7 @@ var CSSCore = { module.exports = CSSCore; }).call(this,require('_process')) -},{"./invariant":489,"_process":33}],474:[function(require,module,exports){ +},{"./invariant":490,"_process":34}],475:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -42668,7 +42841,7 @@ var EventListener = { module.exports = EventListener; }).call(this,require('_process')) -},{"./emptyFunction":481,"_process":33}],475:[function(require,module,exports){ +},{"./emptyFunction":482,"_process":34}],476:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -42705,7 +42878,7 @@ var ExecutionEnvironment = { }; module.exports = ExecutionEnvironment; -},{}],476:[function(require,module,exports){ +},{}],477:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -42738,7 +42911,7 @@ function camelize(string) { } module.exports = camelize; -},{}],477:[function(require,module,exports){ +},{}],478:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -42779,7 +42952,7 @@ function camelizeStyleName(string) { } module.exports = camelizeStyleName; -},{"./camelize":476}],478:[function(require,module,exports){ +},{"./camelize":477}],479:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -42835,7 +43008,7 @@ function containsNode(_x, _x2) { } module.exports = containsNode; -},{"./isTextNode":491}],479:[function(require,module,exports){ +},{"./isTextNode":492}],480:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -42921,7 +43094,7 @@ function createArrayFromMixed(obj) { } module.exports = createArrayFromMixed; -},{"./toArray":499}],480:[function(require,module,exports){ +},{"./toArray":500}],481:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -43008,7 +43181,7 @@ function createNodesFromMarkup(markup, handleScript) { module.exports = createNodesFromMarkup; }).call(this,require('_process')) -},{"./ExecutionEnvironment":475,"./createArrayFromMixed":479,"./getMarkupWrap":485,"./invariant":489,"_process":33}],481:[function(require,module,exports){ +},{"./ExecutionEnvironment":476,"./createArrayFromMixed":480,"./getMarkupWrap":486,"./invariant":490,"_process":34}],482:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -43047,7 +43220,7 @@ emptyFunction.thatReturnsArgument = function (arg) { }; module.exports = emptyFunction; -},{}],482:[function(require,module,exports){ +},{}],483:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -43070,7 +43243,7 @@ if (process.env.NODE_ENV !== 'production') { module.exports = emptyObject; }).call(this,require('_process')) -},{"_process":33}],483:[function(require,module,exports){ +},{"_process":34}],484:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -43097,7 +43270,7 @@ function focusNode(node) { } module.exports = focusNode; -},{}],484:[function(require,module,exports){ +},{}],485:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -43133,7 +43306,7 @@ function getActiveElement() /*?DOMElement*/{ } module.exports = getActiveElement; -},{}],485:[function(require,module,exports){ +},{}],486:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -43231,7 +43404,7 @@ function getMarkupWrap(nodeName) { module.exports = getMarkupWrap; }).call(this,require('_process')) -},{"./ExecutionEnvironment":475,"./invariant":489,"_process":33}],486:[function(require,module,exports){ +},{"./ExecutionEnvironment":476,"./invariant":490,"_process":34}],487:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -43270,7 +43443,7 @@ function getUnboundedScrollPosition(scrollable) { } module.exports = getUnboundedScrollPosition; -},{}],487:[function(require,module,exports){ +},{}],488:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -43304,7 +43477,7 @@ function hyphenate(string) { } module.exports = hyphenate; -},{}],488:[function(require,module,exports){ +},{}],489:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -43344,7 +43517,7 @@ function hyphenateStyleName(string) { } module.exports = hyphenateStyleName; -},{"./hyphenate":487}],489:[function(require,module,exports){ +},{"./hyphenate":488}],490:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -43397,7 +43570,7 @@ function invariant(condition, format, a, b, c, d, e, f) { module.exports = invariant; }).call(this,require('_process')) -},{"_process":33}],490:[function(require,module,exports){ +},{"_process":34}],491:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -43421,7 +43594,7 @@ function isNode(object) { } module.exports = isNode; -},{}],491:[function(require,module,exports){ +},{}],492:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -43447,7 +43620,7 @@ function isTextNode(object) { } module.exports = isTextNode; -},{"./isNode":490}],492:[function(require,module,exports){ +},{"./isNode":491}],493:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -43498,7 +43671,7 @@ var keyMirror = function (obj) { module.exports = keyMirror; }).call(this,require('_process')) -},{"./invariant":489,"_process":33}],493:[function(require,module,exports){ +},{"./invariant":490,"_process":34}],494:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -43534,7 +43707,7 @@ var keyOf = function (oneKeyObj) { }; module.exports = keyOf; -},{}],494:[function(require,module,exports){ +},{}],495:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -43586,7 +43759,7 @@ function mapObject(object, callback, context) { } module.exports = mapObject; -},{}],495:[function(require,module,exports){ +},{}],496:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -43618,7 +43791,7 @@ function memoizeStringOnly(callback) { } module.exports = memoizeStringOnly; -},{}],496:[function(require,module,exports){ +},{}],497:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -43642,7 +43815,7 @@ if (ExecutionEnvironment.canUseDOM) { } module.exports = performance || {}; -},{"./ExecutionEnvironment":475}],497:[function(require,module,exports){ +},{"./ExecutionEnvironment":476}],498:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -43677,7 +43850,7 @@ if (performance.now) { } module.exports = performanceNow; -},{"./performance":496}],498:[function(require,module,exports){ +},{"./performance":497}],499:[function(require,module,exports){ /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. @@ -43728,7 +43901,7 @@ function shallowEqual(objA, objB) { } module.exports = shallowEqual; -},{}],499:[function(require,module,exports){ +},{}],500:[function(require,module,exports){ (function (process){ /** * Copyright 2013-2015, Facebook, Inc. @@ -43788,7 +43961,7 @@ function toArray(obj) { module.exports = toArray; }).call(this,require('_process')) -},{"./invariant":489,"_process":33}],500:[function(require,module,exports){ +},{"./invariant":490,"_process":34}],501:[function(require,module,exports){ (function (process){ /** * Copyright 2014-2015, Facebook, Inc. @@ -43848,12 +44021,12 @@ if (process.env.NODE_ENV !== 'production') { module.exports = warning; }).call(this,require('_process')) -},{"./emptyFunction":481,"_process":33}],501:[function(require,module,exports){ +},{"./emptyFunction":482,"_process":34}],502:[function(require,module,exports){ 'use strict'; module.exports = require('./lib/React'); -},{"./lib/React":363}],502:[function(require,module,exports){ +},{"./lib/React":364}],503:[function(require,module,exports){ /** * Module Dependencies */ @@ -43948,7 +44121,7 @@ function makeSelection(el, range){ selection.addRange(range); } -},{"dom-iterator":503}],503:[function(require,module,exports){ +},{"dom-iterator":504}],504:[function(require,module,exports){ /** * Module Dependencies */ @@ -44268,7 +44441,7 @@ Iterator.prototype.use = function(fn) { return this; }; -},{"component-props":504,"component-xor":505,"props":504,"xor":505}],504:[function(require,module,exports){ +},{"component-props":505,"component-xor":506,"props":505,"xor":506}],505:[function(require,module,exports){ /** * Global Names */ @@ -44355,7 +44528,7 @@ function prefixed(str) { }; } -},{}],505:[function(require,module,exports){ +},{}],506:[function(require,module,exports){ /** * Expose `xor` */ diff --git a/build/twister-lib.js b/build/twister-lib.js index efb0533..b6a3581 100755 --- a/build/twister-lib.js +++ b/build/twister-lib.js @@ -124,7 +124,7 @@ decode.bytes = function() { module.exports = decode }).call(this,require("buffer").Buffer) -},{"./dict":3,"buffer":177}],3:[function(require,module,exports){ +},{"./dict":3,"buffer":223}],3:[function(require,module,exports){ var Dict = module.exports = function Dict() { Object.defineProperty(this, "_keys", { enumerable: false, @@ -247,7 +247,252 @@ encode.list = function( buffers, data ) { module.exports = encode }).call(this,require("buffer").Buffer) -},{"buffer":177}],5:[function(require,module,exports){ +},{"buffer":223}],5:[function(require,module,exports){ +(function (Buffer){ +var aes = require('browserify-aes') +var assert = require('assert') +var createHash = require('create-hash') +var cs = require('coinstring') +var scrypt = require('scryptsy') +var xor = require('buffer-xor') + +var ecurve = require('ecurve') +var curve = ecurve.getCurveByName('secp256k1') + +var BigInteger = require('bigi') + +// SHA256(SHA256(buffer)) +function sha256x2 (buffer) { + buffer = createHash('sha256').update(buffer).digest() + return createHash('sha256').update(buffer).digest() +} + +function Bip38 (versions) { + if (!(this instanceof Bip38)) return new Bip38() + + // default to Bitcoin WIF versions + this.versions = versions || { private: 0x80 } + + // BIP38 recommended + this.scryptParams = { + N: 16384, + r: 8, + p: 8 + } +} + +Bip38.prototype.encryptRaw = function (buffer, compressed, passphrase, saltAddress, progressCallback) { + assert.equal(buffer.length, 32, 'Invalid private key length') + + var secret = new Buffer(passphrase, 'utf8') + var salt = sha256x2(saltAddress).slice(0, 4) + + var N = this.scryptParams.N + var r = this.scryptParams.r + var p = this.scryptParams.p + + var scryptBuf = scrypt(secret, salt, N, r, p, 64, progressCallback) + var derivedHalf1 = scryptBuf.slice(0, 32) + var derivedHalf2 = scryptBuf.slice(32, 64) + + var xorBuf = xor(buffer, derivedHalf1) + var cipher = aes.createCipheriv('aes-256-ecb', derivedHalf2, new Buffer(0)) + cipher.setAutoPadding(false) + cipher.end(xorBuf) + + var cipherText = cipher.read() + + // 0x01 + 0x42 + flagByte + salt + cipherText + var flagByte = compressed ? 0xe0 : 0xc0 + var prefix = new Buffer(3) + prefix.writeUInt8(0x01, 0) + prefix.writeUInt8(0x42, 1) + prefix.writeUInt8(flagByte, 2) + + return Buffer.concat([prefix, salt, cipherText]) +} + +Bip38.prototype.encrypt = function (wif, passphrase, saltAddress, progressCallback) { + var d = cs.decode(wif).slice(1) + var compressed = (d.length === 33) && (d[32] === 0x01) + + // truncate the compression flag + if (compressed) { + d = d.slice(0, -1) + } + + return cs.encode(this.encryptRaw(d, compressed, passphrase, saltAddress, progressCallback)) +} + +// some of the techniques borrowed from: https://github.com/pointbiz/bitaddress.org +// todo: (optimization) init buffer in advance, and use copy instead of concat +Bip38.prototype.decryptRaw = function (encData, passphrase, progressCallback) { + // 39 bytes: 2 bytes prefix, 37 bytes payload + assert.equal(encData.length, 39, 'Invalid BIP38 data length') + + // first byte is always 0x01 + assert.equal(encData.readUInt8(0), 0x01, 'Invalid BIP38 prefix') + + // check if BIP38 EC multiply + var type = encData.readUInt8(1) + if (type === 0x43) { + return this.decryptECMult(encData, passphrase, progressCallback) + } + + passphrase = new Buffer(passphrase, 'utf8') + + assert.equal(type, 0x42, 'Invalid BIP38 type') + var flagByte = encData.readUInt8(2) + var compressed = flagByte === 0xe0 + + if (!compressed) { + assert.equal(flagByte, 0xc0, 'Invalid BIP38 compression flag') + } + + var N = this.scryptParams.N + var r = this.scryptParams.r + var p = this.scryptParams.p + + var addresshash = encData.slice(3, 7) + var scryptBuf = scrypt(passphrase, addresshash, N, r, p, 64, progressCallback) + var derivedHalf1 = scryptBuf.slice(0, 32) + var derivedHalf2 = scryptBuf.slice(32, 64) + + var privKeyBuf = encData.slice(7, 7 + 32) + var decipher = aes.createDecipheriv('aes-256-ecb', derivedHalf2, new Buffer(0)) + decipher.setAutoPadding(false) + decipher.end(privKeyBuf) + + var plainText = decipher.read() + var privateKey = xor(plainText, derivedHalf1) + + return { + privateKey: privateKey, + compressed: compressed + } +} + +Bip38.prototype.decrypt = function (encryptedBase58, passphrase, progressCallback) { + var encBuffer = cs.decode(encryptedBase58) + var decrypt = this.decryptRaw(encBuffer, passphrase, progressCallback) + + // Convert to WIF + var bufferLen = decrypt.compressed ? 34 : 33 + var buffer = new Buffer(bufferLen) + + buffer.writeUInt8(this.versions.private, 0) + decrypt.privateKey.copy(buffer, 1) + + if (decrypt.compressed) { + buffer.writeUInt8(0x01, 33) + } + + return cs.encode(buffer) +} + +Bip38.prototype.decryptECMult = function (encData, passphrase, progressCallback) { + passphrase = new Buffer(passphrase, 'utf8') + encData = encData.slice(1) // FIXME: we can avoid this + + var compressed = (encData[1] & 0x20) !== 0 + var hasLotSeq = (encData[1] & 0x04) !== 0 + + assert.equal((encData[1] & 0x24), encData[1], 'Invalid private key.') + + var addresshash = encData.slice(2, 6) + var ownerEntropy = encData.slice(6, 14) + var ownerSalt + + // 4 bytes ownerSalt if 4 bytes lot/sequence + if (hasLotSeq) { + ownerSalt = ownerEntropy.slice(0, 4) + + // else, 8 bytes ownerSalt + } else { + ownerSalt = ownerEntropy + } + + var encryptedPart1 = encData.slice(14, 22) // First 8 bytes + var encryptedPart2 = encData.slice(22, 38) // 16 bytes + + var N = this.scryptParams.N + var r = this.scryptParams.r + var p = this.scryptParams.p + var preFactor = scrypt(passphrase, ownerSalt, N, r, p, 32, progressCallback) + + var passFactor + if (hasLotSeq) { + var hashTarget = Buffer.concat([preFactor, ownerEntropy]) + passFactor = sha256x2(hashTarget) + } else { + passFactor = preFactor + } + + var passInt = BigInteger.fromBuffer(passFactor) + var passPoint = curve.G.multiply(passInt).getEncoded(true) + + var seedBPass = scrypt(passPoint, Buffer.concat([addresshash, ownerEntropy]), 1024, 1, 1, 64) + var derivedHalf1 = seedBPass.slice(0, 32) + var derivedHalf2 = seedBPass.slice(32, 64) + + var decipher = aes.createDecipheriv('aes-256-ecb', derivedHalf2, new Buffer(0)) + decipher.setAutoPadding(false) + decipher.end(encryptedPart2) + + var decryptedPart2 = decipher.read() + var tmp = xor(decryptedPart2, derivedHalf1.slice(16, 32)) + var seedBPart2 = tmp.slice(8, 16) + + var decipher2 = aes.createDecipheriv('aes-256-ecb', derivedHalf2, new Buffer(0)) + decipher2.setAutoPadding(false) + decipher2.write(encryptedPart1) // first 8 bytes + decipher2.end(tmp.slice(0, 8)) // last 8 bytes + + var seedBPart1 = xor(decipher2.read(), derivedHalf1.slice(0, 16)) + var seedB = Buffer.concat([seedBPart1, seedBPart2], 24) + var factorB = sha256x2(seedB) + + // d = passFactor * factorB (mod n) + var d = passInt.multiply(BigInteger.fromBuffer(factorB)).mod(curve.n) + + return { + privateKey: d.toBuffer(32), + compressed: compressed + } +} + +Bip38.prototype.verify = function (encryptedBase58) { + var decoded + try { + decoded = cs.decode(encryptedBase58) + } catch (e) { + return false + } + + if (decoded.length !== 39) return false + if (decoded.readUInt8(0) !== 0x01) return false + + var type = decoded.readUInt8(1) + var flag = decoded.readUInt8(2) + + // encrypted WIF + if (type === 0x42) { + if (flag !== 0xc0 && flag !== 0xe0) return false + + // EC mult + } else if (type === 0x43) { + if ((flag & ~0x24)) return false + } else { + return false + } + + return true +} + +module.exports = Bip38 + +}).call(this,require("buffer").Buffer) +},{"assert":208,"bigi":8,"browserify-aes":12,"buffer":223,"buffer-xor":27,"coinstring":28,"create-hash":30,"ecurve":45,"scryptsy":48}],6:[function(require,module,exports){ // (public) Constructor function BigInteger(a, b, c) { if (!(this instanceof BigInteger)) @@ -1760,7 +2005,7 @@ BigInteger.valueOf = nbv module.exports = BigInteger -},{"../package.json":8}],6:[function(require,module,exports){ +},{"../package.json":9}],7:[function(require,module,exports){ (function (Buffer){ // FIXME: Kind of a weird way to throw exceptions, consider removing var assert = require('assert') @@ -1855,14 +2100,14 @@ BigInteger.prototype.toHex = function(size) { } }).call(this,require("buffer").Buffer) -},{"./bigi":5,"assert":162,"buffer":177}],7:[function(require,module,exports){ +},{"./bigi":6,"assert":208,"buffer":223}],8:[function(require,module,exports){ var BigInteger = require('./bigi') //addons require('./convert') module.exports = BigInteger -},{"./bigi":5,"./convert":6}],8:[function(require,module,exports){ +},{"./bigi":6,"./convert":7}],9:[function(require,module,exports){ module.exports={ "name": "bigi", "version": "1.4.1", @@ -1924,7 +2169,7 @@ module.exports={ "homepage": "https://github.com/cryptocoinjs/bigi#readme", "_id": "bigi@1.4.1", "_shasum": "726e8ab08d1fe1dfb8aa6bb6309bffecf93a21b7", - "_from": "bigi@^1.4.0", + "_from": "bigi@^1.2.0", "_npmVersion": "2.10.1", "_nodeVersion": "2.1.0", "_npmUser": { @@ -1958,8271 +2203,8436 @@ module.exports={ "readme": "ERROR: No README data found!" } -},{}],9:[function(require,module,exports){ +},{}],10:[function(require,module,exports){ (function (Buffer){ -// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki -// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S] -// NOTE: SIGHASH byte ignored AND restricted, truncate before use - -function check (buffer) { - if (buffer.length < 8) return false - if (buffer.length > 72) return false - if (buffer[0] !== 0x30) return false - if (buffer[1] !== buffer.length - 2) return false - if (buffer[2] !== 0x02) return false +// based on the aes implimentation in triple sec +// https://github.com/keybase/triplesec - var lenR = buffer[3] - if (lenR === 0) return false - if (5 + lenR >= buffer.length) return false - if (buffer[4 + lenR] !== 0x02) return false +// which is in turn based on the one from crypto-js +// https://code.google.com/p/crypto-js/ - var lenS = buffer[5 + lenR] - if (lenS === 0) return false - if ((6 + lenR + lenS) !== buffer.length) return false +var uint_max = Math.pow(2, 32) +function fixup_uint32 (x) { + var ret, x_pos + ret = x > uint_max || x < 0 ? (x_pos = Math.abs(x) % uint_max, x < 0 ? uint_max - x_pos : x_pos) : x + return ret +} +function scrub_vec (v) { + for (var i = 0; i < v.length; v++) { + v[i] = 0 + } + return false +} - if (buffer[4] & 0x80) return false - if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false +function Global () { + this.SBOX = [] + this.INV_SBOX = [] + this.SUB_MIX = [[], [], [], []] + this.INV_SUB_MIX = [[], [], [], []] + this.init() + this.RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36] +} - if (buffer[lenR + 6] & 0x80) return false - if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false +Global.prototype.init = function () { + var d, i, sx, t, x, x2, x4, x8, xi, _i + d = (function () { + var _i, _results + _results = [] + for (i = _i = 0; _i < 256; i = ++_i) { + if (i < 128) { + _results.push(i << 1) + } else { + _results.push((i << 1) ^ 0x11b) + } + } + return _results + })() + x = 0 + xi = 0 + for (i = _i = 0; _i < 256; i = ++_i) { + sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4) + sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63 + this.SBOX[x] = sx + this.INV_SBOX[sx] = x + x2 = d[x] + x4 = d[x2] + x8 = d[x4] + t = (d[sx] * 0x101) ^ (sx * 0x1010100) + this.SUB_MIX[0][x] = (t << 24) | (t >>> 8) + this.SUB_MIX[1][x] = (t << 16) | (t >>> 16) + this.SUB_MIX[2][x] = (t << 8) | (t >>> 24) + this.SUB_MIX[3][x] = t + t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100) + this.INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8) + this.INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16) + this.INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24) + this.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 true } -function decode (buffer) { - if (buffer.length < 8) throw new Error('DER sequence length is too short') - if (buffer.length > 72) throw new Error('DER sequence length is too long') - if (buffer[0] !== 0x30) throw new Error('Expected DER sequence') - if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid') - if (buffer[2] !== 0x02) throw new Error('Expected DER integer') +var G = new Global() - var lenR = buffer[3] - if (lenR === 0) throw new Error('R length is zero') - if (5 + lenR >= buffer.length) throw new Error('R length is too long') - if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)') +AES.blockSize = 4 * 4 - var lenS = buffer[5 + lenR] - if (lenS === 0) throw new Error('S length is zero') - if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid') +AES.prototype.blockSize = AES.blockSize - if (buffer[4] & 0x80) throw new Error('R value is negative') - if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded') +AES.keySize = 256 / 8 - if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative') - if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded') +AES.prototype.keySize = AES.keySize - // non-BIP66 - extract R, S values - return { - r: buffer.slice(4, 4 + lenR), - s: buffer.slice(6 + lenR) +function bufferToArray (buf) { + var len = buf.length / 4 + var out = new Array(len) + var i = -1 + while (++i < len) { + out[i] = buf.readUInt32BE(i * 4) } + return out } - -/* - * Expects r and s to be positive DER integers. - * - * The DER format uses the most significant bit as a sign bit (& 0x80). - * If the significant bit is set AND the integer is positive, a 0x00 is prepended. - * - * Examples: - * - * 0 => 0x00 - * 1 => 0x01 - * -1 => 0xff - * 127 => 0x7f - * -127 => 0x81 - * 128 => 0x0080 - * -128 => 0x80 - * 255 => 0x00ff - * -255 => 0xff01 - * 16300 => 0x3fac - * -16300 => 0xc054 - * 62300 => 0x00f35c - * -62300 => 0xff0ca4 -*/ -function encode (r, s) { - var lenR = r.length - var lenS = s.length - if (lenR === 0) throw new Error('R length is zero') - if (lenS === 0) throw new Error('S length is zero') - if (lenR > 33) throw new Error('R length is too long') - if (lenS > 33) throw new Error('S length is too long') - if (r[0] & 0x80) throw new Error('R value is negative') - if (s[0] & 0x80) throw new Error('S value is negative') - if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded') - if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded') - - var signature = new Buffer(6 + lenR + lenS) - - // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S] - signature[0] = 0x30 - signature[1] = signature.length - 2 - signature[2] = 0x02 - signature[3] = r.length - r.copy(signature, 4) - signature[4 + lenR] = 0x02 - signature[5 + lenR] = s.length - s.copy(signature, 6 + lenR) - - return signature +function AES (key) { + this._key = bufferToArray(key) + this._doReset() } -module.exports = { - check: check, - decode: decode, - encode: encode +AES.prototype._doReset = function () { + var invKsRow, keySize, keyWords, ksRow, ksRows, t + keyWords = this._key + keySize = keyWords.length + this._nRounds = keySize + 6 + ksRows = (this._nRounds + 1) * 4 + this._keySchedule = [] + for (ksRow = 0; ksRow < ksRows; ksRow++) { + this._keySchedule[ksRow] = ksRow < keySize ? keyWords[ksRow] : (t = this._keySchedule[ksRow - 1], (ksRow % keySize) === 0 ? (t = (t << 8) | (t >>> 24), t = (G.SBOX[t >>> 24] << 24) | (G.SBOX[(t >>> 16) & 0xff] << 16) | (G.SBOX[(t >>> 8) & 0xff] << 8) | G.SBOX[t & 0xff], t ^= G.RCON[(ksRow / keySize) | 0] << 24) : keySize > 6 && ksRow % keySize === 4 ? t = (G.SBOX[t >>> 24] << 24) | (G.SBOX[(t >>> 16) & 0xff] << 16) | (G.SBOX[(t >>> 8) & 0xff] << 8) | G.SBOX[t & 0xff] : void 0, this._keySchedule[ksRow - keySize] ^ t) + } + this._invKeySchedule = [] + for (invKsRow = 0; invKsRow < ksRows; invKsRow++) { + ksRow = ksRows - invKsRow + t = this._keySchedule[ksRow - (invKsRow % 4 ? 0 : 4)] + this._invKeySchedule[invKsRow] = invKsRow < 4 || ksRow <= 4 ? t : G.INV_SUB_MIX[0][G.SBOX[t >>> 24]] ^ G.INV_SUB_MIX[1][G.SBOX[(t >>> 16) & 0xff]] ^ G.INV_SUB_MIX[2][G.SBOX[(t >>> 8) & 0xff]] ^ G.INV_SUB_MIX[3][G.SBOX[t & 0xff]] + } + return true } -}).call(this,require("buffer").Buffer) -},{"buffer":177}],10:[function(require,module,exports){ -(function (Buffer){ -'use strict' - -var base58 = require('bs58') -var createHash = require('create-hash') - -// SHA256(SHA256(buffer)) -function sha256x2 (buffer) { - buffer = createHash('sha256').update(buffer).digest() - return createHash('sha256').update(buffer).digest() +AES.prototype.encryptBlock = function (M) { + M = bufferToArray(new Buffer(M)) + var out = this._doCryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX) + var buf = new Buffer(16) + buf.writeUInt32BE(out[0], 0) + buf.writeUInt32BE(out[1], 4) + buf.writeUInt32BE(out[2], 8) + buf.writeUInt32BE(out[3], 12) + return buf } -// Encode a buffer as a base58-check encoded string -function encode (payload) { - var checksum = sha256x2(payload).slice(0, 4) - - return base58.encode(Buffer.concat([ - payload, - checksum - ])) +AES.prototype.decryptBlock = function (M) { + M = bufferToArray(new Buffer(M)) + var temp = [M[3], M[1]] + M[1] = temp[0] + M[3] = temp[1] + var out = this._doCryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX) + var buf = new Buffer(16) + buf.writeUInt32BE(out[0], 0) + buf.writeUInt32BE(out[3], 4) + buf.writeUInt32BE(out[2], 8) + buf.writeUInt32BE(out[1], 12) + return buf } -// Decode a base58-check encoded string to a buffer -function decode (string) { - var buffer = new Buffer(base58.decode(string)) - - var payload = buffer.slice(0, -4) - var checksum = buffer.slice(-4) - var newChecksum = sha256x2(payload).slice(0, 4) +AES.prototype.scrub = function () { + scrub_vec(this._keySchedule) + scrub_vec(this._invKeySchedule) + scrub_vec(this._key) +} - for (var i = 0; i < newChecksum.length; ++i) { - if (newChecksum[i] === checksum[i]) continue +AES.prototype._doCryptBlock = function (M, keySchedule, SUB_MIX, SBOX) { + var ksRow, s0, s1, s2, s3, t0, t1, t2, t3 - throw new Error('Invalid checksum') + s0 = M[0] ^ keySchedule[0] + s1 = M[1] ^ keySchedule[1] + s2 = M[2] ^ keySchedule[2] + s3 = M[3] ^ keySchedule[3] + ksRow = 4 + for (var round = 1; round < this._nRounds; round++) { + t0 = SUB_MIX[0][s0 >>> 24] ^ SUB_MIX[1][(s1 >>> 16) & 0xff] ^ SUB_MIX[2][(s2 >>> 8) & 0xff] ^ SUB_MIX[3][s3 & 0xff] ^ keySchedule[ksRow++] + t1 = SUB_MIX[0][s1 >>> 24] ^ SUB_MIX[1][(s2 >>> 16) & 0xff] ^ SUB_MIX[2][(s3 >>> 8) & 0xff] ^ SUB_MIX[3][s0 & 0xff] ^ keySchedule[ksRow++] + t2 = SUB_MIX[0][s2 >>> 24] ^ SUB_MIX[1][(s3 >>> 16) & 0xff] ^ SUB_MIX[2][(s0 >>> 8) & 0xff] ^ SUB_MIX[3][s1 & 0xff] ^ keySchedule[ksRow++] + t3 = SUB_MIX[0][s3 >>> 24] ^ SUB_MIX[1][(s0 >>> 16) & 0xff] ^ SUB_MIX[2][(s1 >>> 8) & 0xff] ^ SUB_MIX[3][s2 & 0xff] ^ keySchedule[ksRow++] + s0 = t0 + s1 = t1 + s2 = t2 + s3 = t3 } - - return payload + t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++] + t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++] + t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++] + t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++] + return [ + fixup_uint32(t0), + fixup_uint32(t1), + fixup_uint32(t2), + fixup_uint32(t3) + ] } -module.exports = { - encode: encode, - decode: decode -} +exports.AES = AES }).call(this,require("buffer").Buffer) -},{"bs58":11,"buffer":177,"create-hash":14}],11:[function(require,module,exports){ -// Base58 encoding/decoding -// Originally written by Mike Hearn for BitcoinJ -// Copyright (c) 2011 Google Inc -// Ported to JavaScript by Stefan Thomas -// Merged Buffer refactorings from base58-native by Stephen Pair -// Copyright (c) 2013 BitPay Inc +},{"buffer":223}],11:[function(require,module,exports){ +(function (Buffer){ +var aes = require('./aes') +var Transform = require('cipher-base') +var inherits = require('inherits') +var GHASH = require('./ghash') +var xor = require('buffer-xor') +inherits(StreamCipher, Transform) +module.exports = StreamCipher -var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' -var ALPHABET_MAP = {} -for(var i = 0; i < ALPHABET.length; i++) { - ALPHABET_MAP[ALPHABET.charAt(i)] = i +function StreamCipher (mode, key, iv, decrypt) { + if (!(this instanceof StreamCipher)) { + return new StreamCipher(mode, key, iv) + } + Transform.call(this) + this._finID = Buffer.concat([iv, new Buffer([0, 0, 0, 1])]) + iv = Buffer.concat([iv, new Buffer([0, 0, 0, 2])]) + this._cipher = new aes.AES(key) + this._prev = new Buffer(iv.length) + this._cache = new Buffer('') + this._secCache = new Buffer('') + this._decrypt = decrypt + this._alen = 0 + this._len = 0 + iv.copy(this._prev) + this._mode = mode + var h = new Buffer(4) + h.fill(0) + this._ghash = new GHASH(this._cipher.encryptBlock(h)) + this._authTag = null + this._called = false } -var BASE = 58 - -function encode(buffer) { - if (buffer.length === 0) return '' - - var i, j, digits = [0] - for (i = 0; i < buffer.length; i++) { - for (j = 0; j < digits.length; j++) digits[j] <<= 8 - - digits[0] += buffer[i] - - var carry = 0 - for (j = 0; j < digits.length; ++j) { - digits[j] += carry - - carry = (digits[j] / BASE) | 0 - digits[j] %= BASE - } - - while (carry) { - digits.push(carry % BASE) - - carry = (carry / BASE) | 0 +StreamCipher.prototype._update = function (chunk) { + if (!this._called && this._alen) { + var rump = 16 - (this._alen % 16) + if (rump < 16) { + rump = new Buffer(rump) + rump.fill(0) + this._ghash.update(rump) } } - - // deal with leading zeros - for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0) - - // convert digits to a string - var stringOutput = "" - for (var i = digits.length - 1; i >= 0; i--) { - stringOutput = stringOutput + ALPHABET[digits[i]] + this._called = true + var out = this._mode.encrypt(this, chunk) + if (this._decrypt) { + this._ghash.update(chunk) + } else { + this._ghash.update(out) } - return stringOutput + this._len += chunk.length + return out } - -function decode(string) { - if (string.length === 0) return [] - - var i, j, bytes = [0] - for (i = 0; i < string.length; i++) { - var c = string[i] - if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character') - - for (j = 0; j < bytes.length; j++) bytes[j] *= BASE - bytes[0] += ALPHABET_MAP[c] - - var carry = 0 - for (j = 0; j < bytes.length; ++j) { - bytes[j] += carry - - carry = bytes[j] >> 8 - bytes[j] &= 0xff - } - - while (carry) { - bytes.push(carry & 0xff) - - carry >>= 8 +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) { + if (xorTest(tag, this._authTag)) { + throw new Error('Unsupported state or unable to authenticate data') } + } else { + this._authTag = tag } - - // deal with leading zeros - for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0) - - return bytes.reverse() -} - -module.exports = { - encode: encode, - decode: decode + this._cipher.scrub() } - -},{}],12:[function(require,module,exports){ -(function (Buffer){ -'use strict'; -module.exports = function (a, b) { - if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { - throw new TypeError('Arguments must be Buffers'); - } - - if (a === b) { - return true; - } - - if (typeof a.equals === 'function') { - return a.equals(b); - } - - if (a.length !== b.length) { - return false; - } - - for (var i = 0; i < a.length; i++) { - if (a[i] !== b[i]) { - return false; - } - } - - return true; -}; - -}).call(this,{"isBuffer":require("../../../../../twister-react/node_modules/browserify/node_modules/insert-module-globals/node_modules/is-buffer/index.js")}) -},{"../../../../../twister-react/node_modules/browserify/node_modules/insert-module-globals/node_modules/is-buffer/index.js":378}],13:[function(require,module,exports){ -(function (Buffer){ -module.exports = function reverse (a) { - var length = a.length - var buffer = new Buffer(length) - - for (var i = 0, j = length - 1; i < length; ++i, --j) { - buffer[i] = a[j] +StreamCipher.prototype.getAuthTag = function getAuthTag () { + if (!this._decrypt && Buffer.isBuffer(this._authTag)) { + return this._authTag + } else { + throw new Error('Attempting to get auth tag in unsupported state') } - - return buffer -} - -}).call(this,require("buffer").Buffer) -},{"buffer":177}],14:[function(require,module,exports){ -(function (Buffer){ -'use strict'; -var inherits = require('inherits') -var md5 = require('./md5') -var rmd160 = require('ripemd160') -var sha = require('sha.js') - -var Base = require('cipher-base') - -function HashNoConstructor(hash) { - Base.call(this, 'digest') - - this._hash = hash - this.buffers = [] -} - -inherits(HashNoConstructor, Base) - -HashNoConstructor.prototype._update = function (data) { - this.buffers.push(data) -} - -HashNoConstructor.prototype._final = function () { - var buf = Buffer.concat(this.buffers) - var r = this._hash(buf) - this.buffers = null - - return r } - -function Hash(hash) { - Base.call(this, 'digest') - - this._hash = hash +StreamCipher.prototype.setAuthTag = function setAuthTag (tag) { + if (this._decrypt) { + this._authTag = tag + } else { + throw new Error('Attempting to set auth tag in unsupported state') + } } - -inherits(Hash, Base) - -Hash.prototype._update = function (data) { - this._hash.update(data) +StreamCipher.prototype.setAAD = function setAAD (buf) { + if (!this._called) { + this._ghash.update(buf) + this._alen += buf.length + } else { + throw new Error('Attempting to set AAD in unsupported state') + } } - -Hash.prototype._final = function () { - return this._hash.digest() +function xorTest (a, b) { + var out = 0 + if (a.length !== b.length) { + out++ + } + var len = Math.min(a.length, b.length) + var i = -1 + while (++i < len) { + out += (a[i] ^ b[i]) + } + return out } -module.exports = function createHash (alg) { - alg = alg.toLowerCase() - if ('md5' === alg) return new HashNoConstructor(md5) - if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160) - - return new Hash(sha(alg)) +}).call(this,require("buffer").Buffer) +},{"./aes":10,"./ghash":15,"buffer":223,"buffer-xor":27,"cipher-base":24,"inherits":98}],12:[function(require,module,exports){ +var ciphers = require('./encrypter') +exports.createCipher = exports.Cipher = ciphers.createCipher +exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv +var deciphers = require('./decrypter') +exports.createDecipher = exports.Decipher = deciphers.createDecipher +exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv +var modes = require('./modes') +function getCiphers () { + return Object.keys(modes) } +exports.listCiphers = exports.getCiphers = getCiphers -}).call(this,require("buffer").Buffer) -},{"./md5":16,"buffer":177,"cipher-base":17,"inherits":52,"ripemd160":18,"sha.js":20}],15:[function(require,module,exports){ +},{"./decrypter":13,"./encrypter":14,"./modes":16}],13:[function(require,module,exports){ (function (Buffer){ -'use strict'; -var intSize = 4; -var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0); -var chrsz = 8; +var aes = require('./aes') +var Transform = require('cipher-base') +var inherits = require('inherits') +var modes = require('./modes') +var StreamCipher = require('./streamCipher') +var AuthCipher = require('./authCipher') +var ebtk = require('evp_bytestokey') -function toArray(buf, bigEndian) { - if ((buf.length % intSize) !== 0) { - var len = buf.length + (intSize - (buf.length % intSize)); - buf = Buffer.concat([buf, zeroBuffer], len); +inherits(Decipher, Transform) +function Decipher (mode, key, iv) { + if (!(this instanceof Decipher)) { + return new Decipher(mode, key, iv) } - - var arr = []; - var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE; - for (var i = 0; i < buf.length; i += intSize) { - arr.push(fn.call(buf, i)); + Transform.call(this) + this._cache = new Splitter() + this._last = void 0 + this._cipher = new aes.AES(key) + this._prev = new Buffer(iv.length) + iv.copy(this._prev) + this._mode = mode + this._autopadding = true +} +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 arr; + return Buffer.concat(out) } - -function toBuffer(arr, size, bigEndian) { - var buf = new Buffer(size); - var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE; - for (var i = 0; i < arr.length; i++) { - fn.call(buf, arr[i], i * 4, true); +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') } - return buf; } - -function hash(buf, fn, hashSize, bigEndian) { - if (!Buffer.isBuffer(buf)) buf = new Buffer(buf); - var arr = fn(toArray(buf, bigEndian), buf.length * chrsz); - return toBuffer(arr, hashSize, bigEndian); +Decipher.prototype.setAutoPadding = function (setTo) { + this._autopadding = !!setTo + return this } -exports.hash = hash; -}).call(this,require("buffer").Buffer) -},{"buffer":177}],16:[function(require,module,exports){ -'use strict'; -/* - * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message - * Digest Algorithm, as defined in RFC 1321. - * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * Distributed under the BSD License - * See http://pajhome.org.uk/crypt/md5 for more info. - */ - -var helpers = require('./helpers'); - -/* - * Calculate the MD5 of an array of little-endian words, and a bit length - */ -function core_md5(x, len) -{ - /* append padding */ - x[len >> 5] |= 0x80 << ((len) % 32); - x[(((len + 64) >>> 9) << 4) + 14] = len; - - var a = 1732584193; - var b = -271733879; - var c = -1732584194; - var d = 271733878; - - for(var i = 0; i < x.length; i += 16) - { - var olda = a; - var oldb = b; - var oldc = c; - var oldd = d; - - a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); - d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); - c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); - b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); - a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); - d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); - c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); - b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); - a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); - d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); - c = md5_ff(c, d, a, b, x[i+10], 17, -42063); - b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); - a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); - d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); - c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); - b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); - - a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); - d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); - c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); - b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); - a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); - d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); - c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); - b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); - a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); - d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); - c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); - b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); - a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); - d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); - c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); - b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); - - a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); - d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); - c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); - b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); - a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); - d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); - c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); - b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); - a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); - d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); - c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); - b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); - a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); - d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); - c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); - b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); - - a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); - d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); - c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); - b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); - a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); - d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); - c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); - b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); - a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); - d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); - c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); - b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); - a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); - d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); - c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); - b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); - - a = safe_add(a, olda); - b = safe_add(b, oldb); - c = safe_add(c, oldc); - d = safe_add(d, oldd); +function Splitter () { + if (!(this instanceof Splitter)) { + return new Splitter() } - return Array(a, b, c, d); - + this.cache = new Buffer('') } - -/* - * These functions implement the four basic operations the algorithm uses. - */ -function md5_cmn(q, a, b, x, s, t) -{ - return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); +Splitter.prototype.add = function (data) { + this.cache = Buffer.concat([this.cache, data]) } -function md5_ff(a, b, c, d, x, s, t) -{ - return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); + +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 } -function md5_gg(a, b, c, d, x, s, t) -{ - return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); +Splitter.prototype.flush = function () { + if (this.cache.length) { + return this.cache + } } -function md5_hh(a, b, c, d, x, s, t) -{ - return md5_cmn(b ^ c ^ d, a, b, x, s, t); +function unpad (last) { + var padded = last[15] + 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 md5_ii(a, b, c, d, x, s, t) -{ - return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); + +var modelist = { + ECB: require('./modes/ecb'), + CBC: require('./modes/cbc'), + CFB: require('./modes/cfb'), + CFB8: require('./modes/cfb8'), + CFB1: require('./modes/cfb1'), + OFB: require('./modes/ofb'), + CTR: require('./modes/ctr'), + GCM: require('./modes/ctr') } -/* - * Add integers, wrapping at 2^32. This uses 16-bit operations internally - * to work around bugs in some JS interpreters. - */ -function safe_add(x, y) -{ - var lsw = (x & 0xFFFF) + (y & 0xFFFF); - var msw = (x >> 16) + (y >> 16) + (lsw >> 16); - return (msw << 16) | (lsw & 0xFFFF); +function createDecipheriv (suite, password, iv) { + var config = modes[suite.toLowerCase()] + if (!config) { + throw new TypeError('invalid suite type') + } + if (typeof iv === 'string') { + iv = new Buffer(iv) + } + if (typeof password === 'string') { + password = new Buffer(password) + } + if (password.length !== config.key / 8) { + throw new TypeError('invalid key length ' + password.length) + } + if (iv.length !== config.iv) { + throw new TypeError('invalid iv length ' + iv.length) + } + if (config.type === 'stream') { + return new StreamCipher(modelist[config.mode], password, iv, true) + } else if (config.type === 'auth') { + return new AuthCipher(modelist[config.mode], password, iv, true) + } + return new Decipher(modelist[config.mode], password, iv) } -/* - * Bitwise rotate a 32-bit number to the left. - */ -function bit_rol(num, cnt) -{ - return (num << cnt) | (num >>> (32 - cnt)); +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 -module.exports = function md5(buf) { - return helpers.hash(buf, core_md5, 16); -}; -},{"./helpers":15}],17:[function(require,module,exports){ +}).call(this,require("buffer").Buffer) +},{"./aes":10,"./authCipher":11,"./modes":16,"./modes/cbc":17,"./modes/cfb":18,"./modes/cfb1":19,"./modes/cfb8":20,"./modes/ctr":21,"./modes/ecb":22,"./modes/ofb":23,"./streamCipher":26,"buffer":223,"cipher-base":24,"evp_bytestokey":25,"inherits":98}],14:[function(require,module,exports){ (function (Buffer){ -var Transform = require('stream').Transform +var aes = require('./aes') +var Transform = require('cipher-base') var inherits = require('inherits') -var StringDecoder = require('string_decoder').StringDecoder -module.exports = CipherBase -inherits(CipherBase, Transform) -function CipherBase (hashMode) { - Transform.call(this) - this.hashMode = typeof hashMode === 'string' - if (this.hashMode) { - this[hashMode] = this._finalOrDigest - } else { - this.final = this._finalOrDigest +var modes = require('./modes') +var ebtk = require('evp_bytestokey') +var StreamCipher = require('./streamCipher') +var AuthCipher = require('./authCipher') +inherits(Cipher, Transform) +function Cipher (mode, key, iv) { + if (!(this instanceof Cipher)) { + return new Cipher(mode, key, iv) } - this._decoder = null - this._encoding = null + Transform.call(this) + this._cache = new Splitter() + this._cipher = new aes.AES(key) + this._prev = new Buffer(iv.length) + iv.copy(this._prev) + this._mode = mode + this._autopadding = true } -CipherBase.prototype.update = function (data, inputEnc, outputEnc) { - if (typeof data === 'string') { - data = new Buffer(data, inputEnc) - } - var outData = this._update(data) - if (this.hashMode) { - return this +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) } - if (outputEnc) { - outData = this._toString(outData, outputEnc) + return Buffer.concat(out) +} +Cipher.prototype._final = function () { + var chunk = this._cache.flush() + if (this._autopadding) { + chunk = this._mode.encrypt(this, chunk) + this._cipher.scrub() + return chunk + } else if (chunk.toString('hex') !== '10101010101010101010101010101010') { + this._cipher.scrub() + throw new Error('data not multiple of block length') } - return outData } - -CipherBase.prototype.setAutoPadding = function () {} - -CipherBase.prototype.getAuthTag = function () { - throw new Error('trying to get auth tag in unsupported state') +Cipher.prototype.setAutoPadding = function (setTo) { + this._autopadding = !!setTo + return this } -CipherBase.prototype.setAuthTag = function () { - throw new Error('trying to set auth tag in unsupported state') +function Splitter () { + if (!(this instanceof Splitter)) { + return new Splitter() + } + this.cache = new Buffer('') +} +Splitter.prototype.add = function (data) { + this.cache = Buffer.concat([this.cache, data]) } -CipherBase.prototype.setAAD = function () { - throw new Error('trying to set aad in unsupported state') +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 = new Buffer(len) -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 - } finally { - done(err) + var i = -1 + while (++i < len) { + padBuff.writeUInt8(len, i) } + var out = Buffer.concat([this.cache, padBuff]) + return out } -CipherBase.prototype._finalOrDigest = function (outputEnc) { - var outData = this._final() || new Buffer('') - if (outputEnc) { - outData = this._toString(outData, outputEnc, true) - } - return outData +var modelist = { + ECB: require('./modes/ecb'), + CBC: require('./modes/cbc'), + CFB: require('./modes/cfb'), + CFB8: require('./modes/cfb8'), + CFB1: require('./modes/cfb1'), + OFB: require('./modes/ofb'), + CTR: require('./modes/ctr'), + GCM: require('./modes/ctr') } -CipherBase.prototype._toString = function (value, enc, final) { - if (!this._decoder) { - this._decoder = new StringDecoder(enc) - this._encoding = enc +function createCipheriv (suite, password, iv) { + var config = modes[suite.toLowerCase()] + if (!config) { + throw new TypeError('invalid suite type') } - if (this._encoding !== enc) { - throw new Error('can\'t switch encodings') + if (typeof iv === 'string') { + iv = new Buffer(iv) } - var out = this._decoder.write(value) - if (final) { - out += this._decoder.end() + if (typeof password === 'string') { + password = new Buffer(password) } - return out -} - -}).call(this,require("buffer").Buffer) -},{"buffer":177,"inherits":52,"stream":399,"string_decoder":406}],18:[function(require,module,exports){ -(function (Buffer){ -/* -CryptoJS v3.1.2 -code.google.com/p/crypto-js -(c) 2009-2013 by Jeff Mott. All rights reserved. -code.google.com/p/crypto-js/wiki/License -*/ -/** @preserve -(c) 2012 by Cédric Mesnil. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -// constants table -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 = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E] -var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000] - -function bytesToWords (bytes) { - var words = [] - for (var i = 0, b = 0; i < bytes.length; i++, b += 8) { - words[b >>> 5] |= bytes[i] << (24 - b % 32) + if (password.length !== config.key / 8) { + throw new TypeError('invalid key length ' + password.length) } - return words + if (iv.length !== config.iv) { + throw new TypeError('invalid iv length ' + iv.length) + } + if (config.type === 'stream') { + return new StreamCipher(modelist[config.mode], password, iv) + } else if (config.type === 'auth') { + return new AuthCipher(modelist[config.mode], password, iv) + } + return new Cipher(modelist[config.mode], password, iv) } - -function wordsToBytes (words) { - var bytes = [] - for (var b = 0; b < words.length * 32; b += 8) { - bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF) +function createCipher (suite, password) { + var config = modes[suite.toLowerCase()] + if (!config) { + throw new TypeError('invalid suite type') } - return bytes + var keys = ebtk(password, false, config.key, config.iv) + return createCipheriv(suite, keys.key, keys.iv) } -function processBlock (H, M, offset) { - // swap endian - for (var i = 0; i < 16; i++) { - var offset_i = offset + i - var M_offset_i = M[offset_i] +exports.createCipheriv = createCipheriv +exports.createCipher = createCipher - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ) +}).call(this,require("buffer").Buffer) +},{"./aes":10,"./authCipher":11,"./modes":16,"./modes/cbc":17,"./modes/cfb":18,"./modes/cfb1":19,"./modes/cfb8":20,"./modes/ctr":21,"./modes/ecb":22,"./modes/ofb":23,"./streamCipher":26,"buffer":223,"cipher-base":24,"evp_bytestokey":25,"inherits":98}],15:[function(require,module,exports){ +(function (Buffer){ +var zeros = new Buffer(16) +zeros.fill(0) +module.exports = GHASH +function GHASH (key) { + this.h = key + this.state = new Buffer(16) + this.state.fill(0) + this.cache = new Buffer('') +} +// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html +// by Juho Vähä-Herttua +GHASH.prototype.ghash = function (block) { + var i = -1 + while (++i < block.length) { + this.state[i] ^= block[i] } + this._multiply() +} - // Working variables - var al, bl, cl, dl, el - var ar, br, cr, dr, er +GHASH.prototype._multiply = function () { + var Vi = toArray(this.h) + var Zi = [0, 0, 0, 0] + var j, xi, lsb_Vi + var i = -1 + while (++i < 128) { + xi = (this.state[~~(i / 8)] & (1 << (7 - i % 8))) !== 0 + if (xi) { + // Z_i+1 = Z_i ^ V_i + Zi = xor(Zi, Vi) + } - ar = al = H[0] - br = bl = H[1] - cr = cl = H[2] - dr = dl = H[3] - er = el = H[4] + // Store the value of LSB(V_i) + lsb_Vi = (Vi[3] & 1) !== 0 - // computation - var t - for (i = 0; i < 80; i += 1) { - t = (al + M[offset + zl[i]]) | 0 - if (i < 16) { - t += f1(bl, cl, dl) + hl[0] - } else if (i < 32) { - t += f2(bl, cl, dl) + hl[1] - } else if (i < 48) { - t += f3(bl, cl, dl) + hl[2] - } else if (i < 64) { - t += f4(bl, cl, dl) + hl[3] - } else {// if (i<80) { - t += f5(bl, cl, dl) + hl[4] + // V_i+1 = V_i >> 1 + for (j = 3; j > 0; j--) { + Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31) } - t = t | 0 - t = rotl(t, sl[i]) - t = (t + el) | 0 - al = el - el = dl - dl = rotl(cl, 10) - cl = bl - bl = t + Vi[0] = Vi[0] >>> 1 - t = (ar + M[offset + zr[i]]) | 0 - if (i < 16) { - t += f5(br, cr, dr) + hr[0] - } else if (i < 32) { - t += f4(br, cr, dr) + hr[1] - } else if (i < 48) { - t += f3(br, cr, dr) + hr[2] - } else if (i < 64) { - t += f2(br, cr, dr) + hr[3] - } else {// if (i<80) { - t += f1(br, cr, dr) + hr[4] + // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R + if (lsb_Vi) { + Vi[0] = Vi[0] ^ (0xe1 << 24) } - - t = t | 0 - t = rotl(t, sr[i]) - t = (t + er) | 0 - ar = er - er = dr - dr = rotl(cr, 10) - cr = br - br = t } - - // intermediate hash value - t = (H[1] + cl + dr) | 0 - H[1] = (H[2] + dl + er) | 0 - H[2] = (H[3] + el + ar) | 0 - H[3] = (H[4] + al + br) | 0 - H[4] = (H[0] + bl + cr) | 0 - H[0] = t -} - -function f1 (x, y, z) { - return ((x) ^ (y) ^ (z)) + this.state = fromArray(Zi) } - -function f2 (x, y, z) { - return (((x) & (y)) | ((~x) & (z))) +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) + } } - -function f3 (x, y, z) { - return (((x) | (~(y))) ^ (z)) +GHASH.prototype.final = function (abl, bl) { + if (this.cache.length) { + this.ghash(Buffer.concat([this.cache, zeros], 16)) + } + this.ghash(fromArray([ + 0, abl, + 0, bl + ])) + return this.state } -function f4 (x, y, z) { - return (((x) & (z)) | ((y) & (~(z)))) +function toArray (buf) { + return [ + buf.readUInt32BE(0), + buf.readUInt32BE(4), + buf.readUInt32BE(8), + buf.readUInt32BE(12) + ] } - -function f5 (x, y, z) { - return ((x) ^ ((y) | (~(z)))) +function fromArray (out) { + out = out.map(fixup_uint32) + var buf = new Buffer(16) + buf.writeUInt32BE(out[0], 0) + buf.writeUInt32BE(out[1], 4) + buf.writeUInt32BE(out[2], 8) + buf.writeUInt32BE(out[3], 12) + return buf } - -function rotl (x, n) { - return (x << n) | (x >>> (32 - n)) +var uint_max = Math.pow(2, 32) +function fixup_uint32 (x) { + var ret, x_pos + ret = x > uint_max || x < 0 ? (x_pos = Math.abs(x) % uint_max, x < 0 ? uint_max - x_pos : x_pos) : x + return ret } - -function ripemd160 (message) { - var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0] - - if (typeof message === 'string') { - message = new Buffer(message, 'utf8') - } - - var m = bytesToWords(message) - - var nBitsLeft = message.length * 8 - var nBitsTotal = message.length * 8 - - // Add padding - m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32) - m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ) - - for (var i = 0; i < m.length; i += 16) { - processBlock(H, m, i) - } - - // swap endian - for (i = 0; i < 5; i++) { - // shortcut - var H_i = H[i] - - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00) - } - - var digestbytes = wordsToBytes(H) - return new Buffer(digestbytes) +function xor (a, b) { + return [ + a[0] ^ b[0], + a[1] ^ b[1], + a[2] ^ b[2], + a[3] ^ b[3] + ] } -module.exports = ripemd160 - }).call(this,require("buffer").Buffer) -},{"buffer":177}],19:[function(require,module,exports){ -(function (Buffer){ -// prototype class for hash functions -function Hash (blockSize, finalSize) { - this._block = new Buffer(blockSize) - this._finalSize = finalSize - this._blockSize = blockSize - this._len = 0 - this._s = 0 +},{"buffer":223}],16:[function(require,module,exports){ +exports['aes-128-ecb'] = { + cipher: 'AES', + key: 128, + iv: 0, + mode: 'ECB', + type: 'block' } - -Hash.prototype.update = function (data, enc) { - if (typeof data === 'string') { - enc = enc || 'utf8' - data = new Buffer(data, enc) - } - - var l = this._len += data.length - var s = this._s || 0 - var f = 0 - var buffer = this._block - - while (s < l) { - var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize)) - var ch = (t - f) - - for (var i = 0; i < ch; i++) { - buffer[(s % this._blockSize) + i] = data[i + f] - } - - s += ch - f += ch - - if ((s % this._blockSize) === 0) { - this._update(buffer) - } - } - this._s = s - - return this +exports['aes-192-ecb'] = { + cipher: 'AES', + key: 192, + iv: 0, + mode: 'ECB', + type: 'block' } - -Hash.prototype.digest = function (enc) { - // Suppose the length of the message M, in bits, is l - var l = this._len * 8 - - // Append the bit 1 to the end of the message - this._block[this._len % this._blockSize] = 0x80 - - // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize - this._block.fill(0, this._len % this._blockSize + 1) - - if (l % (this._blockSize * 8) >= this._finalSize * 8) { - this._update(this._block) - this._block.fill(0) - } - - // to this append the block which is equal to the number l written in binary - // TODO: handle case where l is > Math.pow(2, 29) - this._block.writeInt32BE(l, this._blockSize - 4) - - var hash = this._update(this._block) || this._hash() - - return enc ? hash.toString(enc) : hash +exports['aes-256-ecb'] = { + cipher: 'AES', + key: 256, + iv: 0, + mode: 'ECB', + type: 'block' } - -Hash.prototype._update = function () { - throw new Error('_update must be implemented by subclass') +exports['aes-128-cbc'] = { + cipher: 'AES', + key: 128, + iv: 16, + mode: 'CBC', + type: 'block' } - -module.exports = Hash - -}).call(this,require("buffer").Buffer) -},{"buffer":177}],20:[function(require,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['aes-192-cbc'] = { + cipher: 'AES', + key: 192, + iv: 16, + mode: 'CBC', + type: 'block' } - -exports.sha = require('./sha') -exports.sha1 = require('./sha1') -exports.sha224 = require('./sha224') -exports.sha256 = require('./sha256') -exports.sha384 = require('./sha384') -exports.sha512 = require('./sha512') - -},{"./sha":21,"./sha1":22,"./sha224":23,"./sha256":24,"./sha384":25,"./sha512":26}],21:[function(require,module,exports){ -(function (Buffer){ -/* - * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined - * in FIPS PUB 180-1 - * This source code is derived from sha1.js of the same repository. - * The difference between SHA-0 and SHA-1 is just a bitwise rotate left - * operation was added. - */ - -var inherits = require('inherits') -var Hash = require('./hash') - -var W = new Array(80) - -function Sha () { - this.init() - this._w = W - - Hash.call(this, 64, 56) +exports['aes-256-cbc'] = { + cipher: 'AES', + key: 256, + iv: 16, + mode: 'CBC', + type: 'block' } - -inherits(Sha, Hash) - -Sha.prototype.init = function () { - this._a = 0x67452301 | 0 - this._b = 0xefcdab89 | 0 - this._c = 0x98badcfe | 0 - this._d = 0x10325476 | 0 - this._e = 0xc3d2e1f0 | 0 - - return this +exports['aes128'] = exports['aes-128-cbc'] +exports['aes192'] = exports['aes-192-cbc'] +exports['aes256'] = exports['aes-256-cbc'] +exports['aes-128-cfb'] = { + cipher: 'AES', + key: 128, + iv: 16, + mode: 'CFB', + type: 'stream' } - -/* - * Bitwise rotate a 32-bit number to the left. - */ -function rol (num, cnt) { - return (num << cnt) | (num >>> (32 - cnt)) +exports['aes-192-cfb'] = { + cipher: 'AES', + key: 192, + iv: 16, + mode: 'CFB', + type: 'stream' +} +exports['aes-256-cfb'] = { + cipher: 'AES', + key: 256, + iv: 16, + mode: 'CFB', + type: 'stream' +} +exports['aes-128-cfb8'] = { + cipher: 'AES', + key: 128, + iv: 16, + mode: 'CFB8', + type: 'stream' +} +exports['aes-192-cfb8'] = { + cipher: 'AES', + key: 192, + iv: 16, + mode: 'CFB8', + type: 'stream' +} +exports['aes-256-cfb8'] = { + cipher: 'AES', + key: 256, + iv: 16, + mode: 'CFB8', + type: 'stream' +} +exports['aes-128-cfb1'] = { + cipher: 'AES', + key: 128, + iv: 16, + mode: 'CFB1', + type: 'stream' +} +exports['aes-192-cfb1'] = { + cipher: 'AES', + key: 192, + iv: 16, + mode: 'CFB1', + type: 'stream' +} +exports['aes-256-cfb1'] = { + cipher: 'AES', + key: 256, + iv: 16, + mode: 'CFB1', + type: 'stream' +} +exports['aes-128-ofb'] = { + cipher: 'AES', + key: 128, + iv: 16, + mode: 'OFB', + type: 'stream' +} +exports['aes-192-ofb'] = { + cipher: 'AES', + key: 192, + iv: 16, + mode: 'OFB', + type: 'stream' +} +exports['aes-256-ofb'] = { + cipher: 'AES', + key: 256, + iv: 16, + mode: 'OFB', + type: 'stream' +} +exports['aes-128-ctr'] = { + cipher: 'AES', + key: 128, + iv: 16, + mode: 'CTR', + type: 'stream' +} +exports['aes-192-ctr'] = { + cipher: 'AES', + key: 192, + iv: 16, + mode: 'CTR', + type: 'stream' +} +exports['aes-256-ctr'] = { + cipher: 'AES', + key: 256, + iv: 16, + mode: 'CTR', + type: 'stream' +} +exports['aes-128-gcm'] = { + cipher: 'AES', + key: 128, + iv: 12, + mode: 'GCM', + type: 'auth' +} +exports['aes-192-gcm'] = { + cipher: 'AES', + key: 192, + iv: 12, + mode: 'GCM', + type: 'auth' +} +exports['aes-256-gcm'] = { + cipher: 'AES', + key: 256, + iv: 12, + mode: 'GCM', + type: 'auth' } -Sha.prototype._update = function (M) { - var W = this._w - - var a = this._a - var b = this._b - var c = this._c - var d = this._d - var e = this._e - - var j = 0 - var k - - /* - * SHA-1 has a bitwise rotate left operation. But, SHA is not - * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) } - */ - function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] } - function loop (w, f) { - W[j] = w - - var t = rol(a, 5) + f + e + w + k - - e = d - d = c - c = rol(b, 30) - b = a - a = t - j++ - } +},{}],17:[function(require,module,exports){ +var xor = require('buffer-xor') - k = 1518500249 - while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d)) - while (j < 20) loop(calcW(), (b & c) | ((~b) & d)) - k = 1859775393 - while (j < 40) loop(calcW(), b ^ c ^ d) - k = -1894007588 - while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d)) - k = -899497514 - while (j < 80) loop(calcW(), b ^ c ^ d) +exports.encrypt = function (self, block) { + var data = xor(block, self._prev) - 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 + self._prev = self._cipher.encryptBlock(data) + return self._prev } -Sha.prototype._hash = function () { - var H = new Buffer(20) +exports.decrypt = function (self, block) { + var pad = self._prev - 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) + self._prev = block + var out = self._cipher.decryptBlock(block) - return H + return xor(out, pad) } -module.exports = Sha - - -}).call(this,require("buffer").Buffer) -},{"./hash":19,"buffer":177,"inherits":52}],22:[function(require,module,exports){ +},{"buffer-xor":27}],18:[function(require,module,exports){ (function (Buffer){ -/* - * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined - * in FIPS PUB 180-1 - * Version 2.1a Copyright Paul Johnston 2000 - 2002. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * Distributed under the BSD License - * See http://pajhome.org.uk/crypt/md5 for details. - */ +var xor = require('buffer-xor') -var inherits = require('inherits') -var Hash = require('./hash') +exports.encrypt = function (self, data, decrypt) { + var out = new Buffer('') + var len -var W = new Array(80) + while (data.length) { + if (self._cache.length === 0) { + self._cache = self._cipher.encryptBlock(self._prev) + self._prev = new Buffer('') + } -function Sha1 () { - this.init() - this._w = W + 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 + } + } - Hash.call(this, 64, 56) + return out } - -inherits(Sha1, Hash) - -Sha1.prototype.init = function () { - this._a = 0x67452301 | 0 - this._b = 0xefcdab89 | 0 - this._c = 0x98badcfe | 0 - this._d = 0x10325476 | 0 - this._e = 0xc3d2e1f0 | 0 - - return this +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 } -/* - * Bitwise rotate a 32-bit number to the left. - */ -function rol (num, cnt) { - return (num << cnt) | (num >>> (32 - cnt)) +}).call(this,require("buffer").Buffer) +},{"buffer":223,"buffer-xor":27}],19:[function(require,module,exports){ +(function (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))) ? 0x80 : 0 + value = pad[0] ^ bit + out += ((value & 0x80) >> (i % 8)) + self._prev = shiftIn(self._prev, decrypt ? bit : value) + } + return out } - -Sha1.prototype._update = function (M) { - var W = this._w - - var a = this._a - var b = this._b - var c = this._c - var d = this._d - var e = this._e - - var j = 0 - var k - - function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) } - function loop (w, f) { - W[j] = w - - var t = rol(a, 5) + f + e + w + k - - e = d - d = c - c = rol(b, 30) - b = a - a = t - j++ +exports.encrypt = function (self, chunk, decrypt) { + var len = chunk.length + var out = new Buffer(len) + var i = -1 + while (++i < len) { + out[i] = encryptByte(self, chunk[i], decrypt) } - - k = 1518500249 - while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d)) - while (j < 20) loop(calcW(), (b & c) | ((~b) & d)) - k = 1859775393 - while (j < 40) loop(calcW(), b ^ c ^ d) - k = -1894007588 - while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d)) - k = -899497514 - while (j < 80) loop(calcW(), b ^ c ^ d) - - 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 + return out } - -Sha1.prototype._hash = function () { - var H = new Buffer(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 +function shiftIn (buffer, value) { + var len = buffer.length + var i = -1 + var out = new Buffer(buffer.length) + buffer = Buffer.concat([buffer, new Buffer([value])]) + while (++i < len) { + out[i] = buffer[i] << 1 | buffer[i + 1] >> (7) + } + return out } -module.exports = Sha1 - }).call(this,require("buffer").Buffer) -},{"./hash":19,"buffer":177,"inherits":52}],23:[function(require,module,exports){ +},{"buffer":223}],20:[function(require,module,exports){ (function (Buffer){ -/** - * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined - * in FIPS 180-2 - * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * - */ - -var inherits = require('inherits') -var Sha256 = require('./sha256') -var Hash = require('./hash') +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), new Buffer([decrypt ? byteParam : out])]) + return out +} +exports.encrypt = function (self, chunk, decrypt) { + var len = chunk.length + var out = new Buffer(len) + var i = -1 + while (++i < len) { + out[i] = encryptByte(self, chunk[i], decrypt) + } + return out +} -var W = new Array(64) +}).call(this,require("buffer").Buffer) +},{"buffer":223}],21:[function(require,module,exports){ +(function (Buffer){ +var xor = require('buffer-xor') -function Sha224 () { - this.init() +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 + } + } +} - this._w = W // new Array(64) +function getBlock (self) { + var out = self._cipher.encryptBlock(self._prev) + incr32(self._prev) + return out +} - Hash.call(this, 64, 56) +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) } -inherits(Sha224, Sha256) +}).call(this,require("buffer").Buffer) +},{"buffer":223,"buffer-xor":27}],22:[function(require,module,exports){ +exports.encrypt = function (self, block) { + return self._cipher.encryptBlock(block) +} +exports.decrypt = function (self, block) { + return self._cipher.decryptBlock(block) +} -Sha224.prototype.init = function () { - this._a = 0xc1059ed8 | 0 - this._b = 0x367cd507 | 0 - this._c = 0x3070dd17 | 0 - this._d = 0xf70e5939 | 0 - this._e = 0xffc00b31 | 0 - this._f = 0x68581511 | 0 - this._g = 0x64f98fa7 | 0 - this._h = 0xbefa4fa4 | 0 +},{}],23:[function(require,module,exports){ +(function (Buffer){ +var xor = require('buffer-xor') - return this +function getBlock (self) { + self._prev = self._cipher.encryptBlock(self._prev) + return self._prev } -Sha224.prototype._hash = function () { - var H = new Buffer(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) +exports.encrypt = function (self, chunk) { + while (self._cache.length < chunk.length) { + self._cache = Buffer.concat([self._cache, getBlock(self)]) + } - return H + var pad = self._cache.slice(0, chunk.length) + self._cache = self._cache.slice(chunk.length) + return xor(chunk, pad) } -module.exports = Sha224 - }).call(this,require("buffer").Buffer) -},{"./hash":19,"./sha256":24,"buffer":177,"inherits":52}],24:[function(require,module,exports){ +},{"buffer":223,"buffer-xor":27}],24:[function(require,module,exports){ (function (Buffer){ -/** - * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined - * in FIPS 180-2 - * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * - */ - +var Transform = require('stream').Transform var inherits = require('inherits') -var Hash = require('./hash') - -var K = [ - 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, - 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, - 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, - 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, - 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, - 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, - 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, - 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, - 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, - 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, - 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, - 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, - 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, - 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, - 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, - 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 -] - -var W = new Array(64) +var StringDecoder = require('string_decoder').StringDecoder +module.exports = CipherBase +inherits(CipherBase, Transform) +function CipherBase (hashMode) { + Transform.call(this) + this.hashMode = typeof hashMode === 'string' + if (this.hashMode) { + this[hashMode] = this._finalOrDigest + } else { + this.final = this._finalOrDigest + } + this._decoder = null + this._encoding = null +} +CipherBase.prototype.update = function (data, inputEnc, outputEnc) { + if (typeof data === 'string') { + data = new Buffer(data, inputEnc) + } + var outData = this._update(data) + if (this.hashMode) { + return this + } + if (outputEnc) { + outData = this._toString(outData, outputEnc) + } + return outData +} -function Sha256 () { - this.init() +CipherBase.prototype.setAutoPadding = function () {} - this._w = W // new Array(64) +CipherBase.prototype.getAuthTag = function () { + throw new Error('trying to get auth tag in unsupported state') +} - Hash.call(this, 64, 56) +CipherBase.prototype.setAuthTag = function () { + throw new Error('trying to set auth tag in unsupported state') } -inherits(Sha256, Hash) +CipherBase.prototype.setAAD = function () { + throw new Error('trying to set aad in unsupported state') +} -Sha256.prototype.init = function () { - this._a = 0x6a09e667 | 0 - this._b = 0xbb67ae85 | 0 - this._c = 0x3c6ef372 | 0 - this._d = 0xa54ff53a | 0 - this._e = 0x510e527f | 0 - this._f = 0x9b05688c | 0 - this._g = 0x1f83d9ab | 0 - this._h = 0x5be0cd19 | 0 - - return this +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) + } } - -function Ch (x, y, z) { - return z ^ (x & (y ^ z)) +CipherBase.prototype._flush = function (done) { + var err + try { + this.push(this._final()) + } catch (e) { + err = e + } finally { + done(err) + } +} +CipherBase.prototype._finalOrDigest = function (outputEnc) { + var outData = this._final() || new Buffer('') + if (outputEnc) { + outData = this._toString(outData, outputEnc, true) + } + return outData } -function Maj (x, y, z) { - return (x & y) | (z & (x | y)) +CipherBase.prototype._toString = function (value, enc, final) { + 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 (final) { + out += this._decoder.end() + } + return out } -function Sigma0 (x) { - return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10) +}).call(this,require("buffer").Buffer) +},{"buffer":223,"inherits":98,"stream":445,"string_decoder":452}],25:[function(require,module,exports){ +(function (Buffer){ +var md5 = require('create-hash/md5') +module.exports = EVP_BytesToKey +function EVP_BytesToKey (password, salt, keyLen, ivLen) { + if (!Buffer.isBuffer(password)) { + password = new Buffer(password, 'binary') + } + if (salt && !Buffer.isBuffer(salt)) { + salt = new Buffer(salt, 'binary') + } + keyLen = keyLen / 8 + ivLen = ivLen || 0 + var ki = 0 + var ii = 0 + var key = new Buffer(keyLen) + var iv = new Buffer(ivLen) + var addmd = 0 + var md_buf + var i + var bufs = [] + while (true) { + if (addmd++ > 0) { + bufs.push(md_buf) + } + bufs.push(password) + if (salt) { + bufs.push(salt) + } + md_buf = md5(Buffer.concat(bufs)) + bufs = [] + i = 0 + if (keyLen > 0) { + while (true) { + if (keyLen === 0) { + break + } + if (i === md_buf.length) { + break + } + key[ki++] = md_buf[i] + keyLen-- + i++ + } + } + if (ivLen > 0 && i !== md_buf.length) { + while (true) { + if (ivLen === 0) { + break + } + if (i === md_buf.length) { + break + } + iv[ii++] = md_buf[i] + ivLen-- + i++ + } + } + if (keyLen === 0 && ivLen === 0) { + break + } + } + for (i = 0; i < md_buf.length; i++) { + md_buf[i] = 0 + } + return { + key: key, + iv: iv + } } -function Sigma1 (x) { - return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7) +}).call(this,require("buffer").Buffer) +},{"buffer":223,"create-hash/md5":32}],26:[function(require,module,exports){ +(function (Buffer){ +var aes = require('./aes') +var Transform = require('cipher-base') +var inherits = require('inherits') + +inherits(StreamCipher, Transform) +module.exports = StreamCipher +function StreamCipher (mode, key, iv, decrypt) { + if (!(this instanceof StreamCipher)) { + return new StreamCipher(mode, key, iv) + } + Transform.call(this) + this._cipher = new aes.AES(key) + this._prev = new Buffer(iv.length) + this._cache = new Buffer('') + this._secCache = new Buffer('') + this._decrypt = decrypt + iv.copy(this._prev) + this._mode = mode +} +StreamCipher.prototype._update = function (chunk) { + return this._mode.encrypt(this, chunk, this._decrypt) +} +StreamCipher.prototype._final = function () { + this._cipher.scrub() } -function Gamma0 (x) { - return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3) +}).call(this,require("buffer").Buffer) +},{"./aes":10,"buffer":223,"cipher-base":24,"inherits":98}],27:[function(require,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 } -function Gamma1 (x) { - return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10) +}).call(this,require("buffer").Buffer) +},{"buffer":223}],28:[function(require,module,exports){ +(function (Buffer){ +var base58 = require('bs58') +var createHash = require('create-hash') + +function encode (payload, version) { + if (Array.isArray(payload) || payload instanceof Uint8Array) { + payload = new Buffer(payload) + } + + var buf + if (version != null) { + if (typeof version === 'number') { + version = new Buffer([version]) + } + buf = Buffer.concat([version, payload]) + } else { + buf = payload + } + + var checksum = sha256x2(buf).slice(0, 4) + var result = Buffer.concat([buf, checksum]) + return base58.encode(result) } -Sha256.prototype._update = function (M) { - var W = this._w +function decode (base58str, version) { + var arr = base58.decode(base58str) + var buf = new Buffer(arr) + var versionLength - 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 + if (version == null) { + versionLength = 0 + } else { + if (typeof version === 'number') version = new Buffer([version]) - var j = 0 + versionLength = version.length + var versionCompare = buf.slice(0, versionLength) + if (versionCompare.toString('hex') !== version.toString('hex')) { + throw new Error('Invalid version') + } + } - function calcW () { return Gamma1(W[j - 2]) + W[j - 7] + Gamma0(W[j - 15]) + W[j - 16] } - function loop (w) { - W[j] = w + var checksum = buf.slice(-4) + var endPos = buf.length - 4 + var bytes = buf.slice(0, endPos) - var T1 = h + Sigma1(e) + Ch(e, f, g) + K[j] + w - var T2 = Sigma0(a) + Maj(a, b, c) + var newChecksum = sha256x2(bytes).slice(0, 4) + if (checksum.toString('hex') !== newChecksum.toString('hex')) { + throw new Error('Invalid checksum') + } - h = g - g = f - f = e - e = d + T1 - d = c - c = b - b = a - a = T1 + T2 + return bytes.slice(versionLength) +} - j++ +function isValid (base58str, version) { + try { + decode(base58str, version) + } catch (e) { + return false } - while (j < 16) loop(M.readInt32BE(j * 4)) - while (j < 64) loop(calcW()) + return true +} - 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 +function createEncoder (version) { + return function (payload) { + return encode(payload, version) + } } -Sha256.prototype._hash = function () { - var H = new Buffer(32) +function createDecoder (version) { + return function (base58str) { + return decode(base58str, version) + } +} - 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) +function createValidator (version) { + return function (base58str) { + return isValid(base58str, version) + } +} - return H +function sha256x2 (buffer) { + var sha = createHash('sha256').update(buffer).digest() + return createHash('sha256').update(sha).digest() } -module.exports = Sha256 +module.exports = { + encode: encode, + decode: decode, + isValid: isValid, + createEncoder: createEncoder, + createDecoder: createDecoder, + createValidator: createValidator +} }).call(this,require("buffer").Buffer) -},{"./hash":19,"buffer":177,"inherits":52}],25:[function(require,module,exports){ -(function (Buffer){ -var inherits = require('inherits') -var SHA512 = require('./sha512') -var Hash = require('./hash') +},{"bs58":29,"buffer":223,"create-hash":30}],29:[function(require,module,exports){ +// Base58 encoding/decoding +// Originally written by Mike Hearn for BitcoinJ +// Copyright (c) 2011 Google Inc +// Ported to JavaScript by Stefan Thomas +// Merged Buffer refactorings from base58-native by Stephen Pair +// Copyright (c) 2013 BitPay Inc -var W = new Array(160) +var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' +var ALPHABET_MAP = {} +for(var i = 0; i < ALPHABET.length; i++) { + ALPHABET_MAP[ALPHABET.charAt(i)] = i +} +var BASE = 58 -function Sha384 () { - this.init() - this._w = W +function encode(buffer) { + if (buffer.length === 0) return '' - Hash.call(this, 128, 112) -} + var i, j, digits = [0] + for (i = 0; i < buffer.length; i++) { + for (j = 0; j < digits.length; j++) digits[j] <<= 8 -inherits(Sha384, SHA512) + digits[0] += buffer[i] -Sha384.prototype.init = function () { - this._a = 0xcbbb9d5d | 0 - this._b = 0x629a292a | 0 - this._c = 0x9159015a | 0 - this._d = 0x152fecd8 | 0 - this._e = 0x67332667 | 0 - this._f = 0x8eb44a87 | 0 - this._g = 0xdb0c2e0d | 0 - this._h = 0x47b5481d | 0 + var carry = 0 + for (j = 0; j < digits.length; ++j) { + digits[j] += carry - this._al = 0xc1059ed8 | 0 - this._bl = 0x367cd507 | 0 - this._cl = 0x3070dd17 | 0 - this._dl = 0xf70e5939 | 0 - this._el = 0xffc00b31 | 0 - this._fl = 0x68581511 | 0 - this._gl = 0x64f98fa7 | 0 - this._hl = 0xbefa4fa4 | 0 + carry = (digits[j] / BASE) | 0 + digits[j] %= BASE + } - return this + while (carry) { + digits.push(carry % BASE) + + carry = (carry / BASE) | 0 + } + } + + // deal with leading zeros + for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0) + + // convert digits to a string + var stringOutput = "" + for (var i = digits.length - 1; i >= 0; i--) { + stringOutput = stringOutput + ALPHABET[digits[i]] + } + return stringOutput } -Sha384.prototype._hash = function () { - var H = new Buffer(48) +function decode(string) { + if (string.length === 0) return [] - function writeInt64BE (h, l, offset) { - H.writeInt32BE(h, offset) - H.writeInt32BE(l, offset + 4) + var i, j, bytes = [0] + for (i = 0; i < string.length; i++) { + var c = string[i] + if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character') + + for (j = 0; j < bytes.length; j++) bytes[j] *= BASE + bytes[0] += ALPHABET_MAP[c] + + var carry = 0 + for (j = 0; j < bytes.length; ++j) { + bytes[j] += carry + + carry = bytes[j] >> 8 + bytes[j] &= 0xff + } + + while (carry) { + bytes.push(carry & 0xff) + + carry >>= 8 + } } - writeInt64BE(this._a, this._al, 0) - writeInt64BE(this._b, this._bl, 8) - writeInt64BE(this._c, this._cl, 16) - writeInt64BE(this._d, this._dl, 24) - writeInt64BE(this._e, this._el, 32) - writeInt64BE(this._f, this._fl, 40) + // deal with leading zeros + for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0) - return H + return bytes.reverse() } -module.exports = Sha384 +module.exports = { + encode: encode, + decode: decode +} -}).call(this,require("buffer").Buffer) -},{"./hash":19,"./sha512":26,"buffer":177,"inherits":52}],26:[function(require,module,exports){ +},{}],30:[function(require,module,exports){ (function (Buffer){ +'use strict'; var inherits = require('inherits') -var Hash = require('./hash') - -var K = [ - 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, - 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, - 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, - 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, - 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, - 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, - 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, - 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, - 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, - 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, - 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, - 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, - 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, - 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, - 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, - 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, - 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, - 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, - 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, - 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, - 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, - 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, - 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, - 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, - 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, - 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, - 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, - 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, - 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, - 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, - 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, - 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, - 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, - 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, - 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, - 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, - 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, - 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, - 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, - 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 -] +var md5 = require('./md5') +var rmd160 = require('ripemd160') +var sha = require('sha.js') -var W = new Array(160) +var Base = require('cipher-base') -function Sha512 () { - this.init() - this._w = W +function HashNoConstructor(hash) { + Base.call(this, 'digest') - Hash.call(this, 128, 112) + this._hash = hash + this.buffers = [] } -inherits(Sha512, Hash) +inherits(HashNoConstructor, Base) -Sha512.prototype.init = function () { - this._a = 0x6a09e667 | 0 - this._b = 0xbb67ae85 | 0 - this._c = 0x3c6ef372 | 0 - this._d = 0xa54ff53a | 0 - this._e = 0x510e527f | 0 - this._f = 0x9b05688c | 0 - this._g = 0x1f83d9ab | 0 - this._h = 0x5be0cd19 | 0 +HashNoConstructor.prototype._update = function (data) { + this.buffers.push(data) +} - this._al = 0xf3bcc908 | 0 - this._bl = 0x84caa73b | 0 - this._cl = 0xfe94f82b | 0 - this._dl = 0x5f1d36f1 | 0 - this._el = 0xade682d1 | 0 - this._fl = 0x2b3e6c1f | 0 - this._gl = 0xfb41bd6b | 0 - this._hl = 0x137e2179 | 0 +HashNoConstructor.prototype._final = function () { + var buf = Buffer.concat(this.buffers) + var r = this._hash(buf) + this.buffers = null - return this + return r } -function Ch (x, y, z) { - return z ^ (x & (y ^ z)) -} +function Hash(hash) { + Base.call(this, 'digest') -function Maj (x, y, z) { - return (x & y) | (z & (x | y)) + this._hash = hash } -function Sigma0 (x, xl) { - return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25) -} +inherits(Hash, Base) -function Sigma1 (x, xl) { - return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23) +Hash.prototype._update = function (data) { + this._hash.update(data) } -function Gamma0 (x, xl) { - return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7) +Hash.prototype._final = function () { + return this._hash.digest() } -function Gamma0l (x, xl) { - return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25) -} +module.exports = function createHash (alg) { + alg = alg.toLowerCase() + if ('md5' === alg) return new HashNoConstructor(md5) + if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160) -function Gamma1 (x, xl) { - return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6) + return new Hash(sha(alg)) } -function Gamma1l (x, xl) { - return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26) -} +}).call(this,require("buffer").Buffer) +},{"./md5":32,"buffer":223,"cipher-base":33,"inherits":98,"ripemd160":34,"sha.js":36}],31:[function(require,module,exports){ +(function (Buffer){ +'use strict'; +var intSize = 4; +var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0); +var chrsz = 8; -Sha512.prototype._update = function (M) { - var W = this._w +function toArray(buf, bigEndian) { + if ((buf.length % intSize) !== 0) { + var len = buf.length + (intSize - (buf.length % intSize)); + buf = Buffer.concat([buf, zeroBuffer], len); + } - 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 + var arr = []; + var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE; + for (var i = 0; i < buf.length; i += intSize) { + arr.push(fn.call(buf, i)); + } + return arr; +} - 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 - - var i = 0 - var j = 0 - var Wi, Wil - function calcW () { - var x = W[j - 15 * 2] - var xl = W[j - 15 * 2 + 1] - var gamma0 = Gamma0(x, xl) - var gamma0l = Gamma0l(xl, x) - - x = W[j - 2 * 2] - xl = W[j - 2 * 2 + 1] - var gamma1 = Gamma1(x, xl) - var gamma1l = Gamma1l(xl, x) - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7 = W[j - 7 * 2] - var Wi7l = W[j - 7 * 2 + 1] - - var Wi16 = W[j - 16 * 2] - var Wi16l = W[j - 16 * 2 + 1] - - Wil = gamma0l + Wi7l - Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0) - Wil = Wil + gamma1l - Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0) - Wil = Wil + Wi16l - Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0) +function toBuffer(arr, size, bigEndian) { + var buf = new Buffer(size); + var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE; + for (var i = 0; i < arr.length; i++) { + fn.call(buf, arr[i], i * 4, true); } + return buf; +} - function loop () { - W[j] = Wi - W[j + 1] = Wil - - var maj = Maj(a, b, c) - var majl = Maj(al, bl, cl) - - var sigma0h = Sigma0(a, al) - var sigma0l = Sigma0(al, a) - var sigma1h = Sigma1(e, el) - var sigma1l = Sigma1(el, e) +function hash(buf, fn, hashSize, bigEndian) { + if (!Buffer.isBuffer(buf)) buf = new Buffer(buf); + var arr = fn(toArray(buf, bigEndian), buf.length * chrsz); + return toBuffer(arr, hashSize, bigEndian); +} +exports.hash = hash; +}).call(this,require("buffer").Buffer) +},{"buffer":223}],32:[function(require,module,exports){ +'use strict'; +/* + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ - // t1 = h + sigma1 + ch + K[i] + W[i] - var Ki = K[j] - var Kil = K[j + 1] +var helpers = require('./helpers'); - var ch = Ch(e, f, g) - var chl = Ch(el, fl, gl) +/* + * Calculate the MD5 of an array of little-endian words, and a bit length + */ +function core_md5(x, len) +{ + /* append padding */ + x[len >> 5] |= 0x80 << ((len) % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; - var t1l = hl + sigma1l - var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0) - t1l = t1l + chl - t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0) - t1l = t1l + Kil - t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0) - t1l = t1l + Wil - t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0) + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + var d = 271733878; - // t2 = sigma0 + maj - var t2l = sigma0l + majl - var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0) + for(var i = 0; i < x.length; i += 16) + { + var olda = a; + var oldb = b; + var oldc = c; + var oldd = d; - h = g - hl = gl - g = f - gl = fl - f = e - fl = el - el = (dl + t1l) | 0 - e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0 - d = c - dl = cl - c = b - cl = bl - b = a - bl = al - al = (t1l + t2l) | 0 - a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0 + a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); + d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); + c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); + b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); + a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); + d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); + c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); + b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); + a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); + d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); + c = md5_ff(c, d, a, b, x[i+10], 17, -42063); + b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); + a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); + d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); + c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); + b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); - i++ - j += 2 - } + a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); + d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); + c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); + b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); + a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); + d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); + c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); + b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); + a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); + d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); + c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); + b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); + a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); + d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); + c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); + b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); - while (i < 16) { - Wi = M.readInt32BE(j * 4) - Wil = M.readInt32BE(j * 4 + 4) + a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); + d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); + c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); + b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); + a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); + d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); + c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); + b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); + a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); + d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); + c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); + b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); + a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); + d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); + c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); + b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); - loop() - } + a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); + d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); + c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); + b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); + a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); + d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); + c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); + b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); + a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); + d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); + c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); + b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); + a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); + d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); + c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); + b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); - while (i < 80) { - calcW() - loop() + a = safe_add(a, olda); + b = safe_add(b, oldb); + c = safe_add(c, oldc); + d = safe_add(d, oldd); } + return Array(a, b, c, d); - 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._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0 - this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0 - this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0 - this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0 - this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0 - this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0 - this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0 - this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0 +/* + * These functions implement the four basic operations the algorithm uses. + */ +function md5_cmn(q, a, b, x, s, t) +{ + return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); +} +function md5_ff(a, b, c, d, x, s, t) +{ + return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); +} +function md5_gg(a, b, c, d, x, s, t) +{ + return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); +} +function md5_hh(a, b, c, d, x, s, t) +{ + return md5_cmn(b ^ c ^ d, a, b, x, s, t); +} +function md5_ii(a, b, c, d, x, s, t) +{ + return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); } -Sha512.prototype._hash = function () { - var H = new Buffer(64) +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ +function safe_add(x, y) +{ + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); +} - function writeInt64BE (h, l, offset) { - H.writeInt32BE(h, offset) - H.writeInt32BE(l, offset + 4) - } +/* + * Bitwise rotate a 32-bit number to the left. + */ +function bit_rol(num, cnt) +{ + return (num << cnt) | (num >>> (32 - cnt)); +} - writeInt64BE(this._a, this._al, 0) - writeInt64BE(this._b, this._bl, 8) - writeInt64BE(this._c, this._cl, 16) - writeInt64BE(this._d, this._dl, 24) - writeInt64BE(this._e, this._el, 32) - writeInt64BE(this._f, this._fl, 40) - writeInt64BE(this._g, this._gl, 48) - writeInt64BE(this._h, this._hl, 56) +module.exports = function md5(buf) { + return helpers.hash(buf, core_md5, 16); +}; +},{"./helpers":31}],33:[function(require,module,exports){ +arguments[4][24][0].apply(exports,arguments) +},{"buffer":223,"dup":24,"inherits":98,"stream":445,"string_decoder":452}],34:[function(require,module,exports){ +(function (Buffer){ +/* +CryptoJS v3.1.2 +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +/** @preserve +(c) 2012 by Cédric Mesnil. All rights reserved. - return H -} +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: -module.exports = Sha512 + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -}).call(this,require("buffer").Buffer) -},{"./hash":19,"buffer":177,"inherits":52}],27:[function(require,module,exports){ -(function (Buffer){ -'use strict'; -var createHash = require('create-hash/browser'); -var inherits = require('inherits') +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ -var Transform = require('stream').Transform +// constants table +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 ZEROS = new Buffer(128) -ZEROS.fill(0) +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 +] -function Hmac(alg, key) { - Transform.call(this) - alg = alg.toLowerCase() - if (typeof key === 'string') { - key = new Buffer(key) - } +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 blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64 +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 +] - this._alg = alg - this._key = key +var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E] +var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000] - if (key.length > blocksize) { - key = createHash(alg).update(key).digest() +function bytesToWords (bytes) { + var words = [] + for (var i = 0, b = 0; i < bytes.length; i++, b += 8) { + words[b >>> 5] |= bytes[i] << (24 - b % 32) + } + return words +} - } else if (key.length < blocksize) { - key = Buffer.concat([key, ZEROS], blocksize) +function wordsToBytes (words) { + var bytes = [] + for (var b = 0; b < words.length * 32; b += 8) { + bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF) } + return bytes +} - var ipad = this._ipad = new Buffer(blocksize) - var opad = this._opad = new Buffer(blocksize) +function processBlock (H, M, offset) { + // swap endian + for (var i = 0; i < 16; i++) { + var offset_i = offset + i + var M_offset_i = M[offset_i] - for (var i = 0; i < blocksize; i++) { - ipad[i] = key[i] ^ 0x36 - opad[i] = key[i] ^ 0x5C + // Swap + M[offset_i] = ( + (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | + (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) + ) } - this._hash = createHash(alg).update(ipad) -} + // Working variables + var al, bl, cl, dl, el + var ar, br, cr, dr, er -inherits(Hmac, Transform) + ar = al = H[0] + br = bl = H[1] + cr = cl = H[2] + dr = dl = H[3] + er = el = H[4] -Hmac.prototype.update = function (data, enc) { - this._hash.update(data, enc) + // computation + var t + for (i = 0; i < 80; i += 1) { + t = (al + M[offset + zl[i]]) | 0 + if (i < 16) { + t += f1(bl, cl, dl) + hl[0] + } else if (i < 32) { + t += f2(bl, cl, dl) + hl[1] + } else if (i < 48) { + t += f3(bl, cl, dl) + hl[2] + } else if (i < 64) { + t += f4(bl, cl, dl) + hl[3] + } else {// if (i<80) { + t += f5(bl, cl, dl) + hl[4] + } + t = t | 0 + t = rotl(t, sl[i]) + t = (t + el) | 0 + al = el + el = dl + dl = rotl(cl, 10) + cl = bl + bl = t - return this -} + t = (ar + M[offset + zr[i]]) | 0 + if (i < 16) { + t += f5(br, cr, dr) + hr[0] + } else if (i < 32) { + t += f4(br, cr, dr) + hr[1] + } else if (i < 48) { + t += f3(br, cr, dr) + hr[2] + } else if (i < 64) { + t += f2(br, cr, dr) + hr[3] + } else {// if (i<80) { + t += f1(br, cr, dr) + hr[4] + } -Hmac.prototype._transform = function (data, _, next) { - this._hash.update(data) + t = t | 0 + t = rotl(t, sr[i]) + t = (t + er) | 0 + ar = er + er = dr + dr = rotl(cr, 10) + cr = br + br = t + } - next() + // intermediate hash value + t = (H[1] + cl + dr) | 0 + H[1] = (H[2] + dl + er) | 0 + H[2] = (H[3] + el + ar) | 0 + H[3] = (H[4] + al + br) | 0 + H[4] = (H[0] + bl + cr) | 0 + H[0] = t } -Hmac.prototype._flush = function (next) { - this.push(this.digest()) +function f1 (x, y, z) { + return ((x) ^ (y) ^ (z)) +} - next() +function f2 (x, y, z) { + return (((x) & (y)) | ((~x) & (z))) } -Hmac.prototype.digest = function (enc) { - var h = this._hash.digest() +function f3 (x, y, z) { + return (((x) | (~(y))) ^ (z)) +} - return createHash(this._alg).update(this._opad).update(h).digest(enc) +function f4 (x, y, z) { + return (((x) & (z)) | ((y) & (~(z)))) } -module.exports = function createHmac(alg, key) { - return new Hmac(alg, key) +function f5 (x, y, z) { + return ((x) ^ ((y) | (~(z)))) } -}).call(this,require("buffer").Buffer) -},{"buffer":177,"create-hash/browser":14,"inherits":52,"stream":399}],28:[function(require,module,exports){ -var assert = require('assert') -var BigInteger = require('bigi') +function rotl (x, n) { + return (x << n) | (x >>> (32 - n)) +} -var Point = require('./point') +function ripemd160 (message) { + var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0] -function Curve(p, a, b, Gx, Gy, n, h) { - this.p = p - this.a = a - this.b = b - this.G = Point.fromAffine(this, Gx, Gy) - this.n = n - this.h = h + if (typeof message === 'string') { + message = new Buffer(message, 'utf8') + } - this.infinity = new Point(this, null, null, BigInteger.ZERO) + var m = bytesToWords(message) - // result caching - this.pOverFour = p.add(BigInteger.ONE).shiftRight(2) -} + var nBitsLeft = message.length * 8 + var nBitsTotal = message.length * 8 -Curve.prototype.pointFromX = function(isOdd, x) { - var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p) - var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves + // Add padding + m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32) + m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( + (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | + (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) + ) - var y = beta - if (beta.isEven() ^ !isOdd) { - y = this.p.subtract(y) // -y % p + for (var i = 0; i < m.length; i += 16) { + processBlock(H, m, i) } - return Point.fromAffine(this, x, y) -} + // swap endian + for (i = 0; i < 5; i++) { + // shortcut + var H_i = H[i] -Curve.prototype.isInfinity = function(Q) { - if (Q === this.infinity) return true + // Swap + H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | + (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00) + } - return Q.z.signum() === 0 && Q.y.signum() !== 0 + var digestbytes = wordsToBytes(H) + return new Buffer(digestbytes) } -Curve.prototype.isOnCurve = function(Q) { - if (this.isInfinity(Q)) return true +module.exports = ripemd160 - var x = Q.affineX - var y = Q.affineY - var a = this.a - var b = this.b - var p = this.p - - // Check that xQ and yQ are integers in the interval [0, p - 1] - if (x.signum() < 0 || x.compareTo(p) >= 0) return false - if (y.signum() < 0 || y.compareTo(p) >= 0) return false - - // and check that y^2 = x^3 + ax + b (mod p) - var lhs = y.square().mod(p) - var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p) - return lhs.equals(rhs) +}).call(this,require("buffer").Buffer) +},{"buffer":223}],35:[function(require,module,exports){ +(function (Buffer){ +// prototype class for hash functions +function Hash (blockSize, finalSize) { + this._block = new Buffer(blockSize) + this._finalSize = finalSize + this._blockSize = blockSize + this._len = 0 + this._s = 0 } -/** - * Validate an elliptic curve point. - * - * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive - */ -Curve.prototype.validate = function(Q) { - // Check Q != O - assert(!this.isInfinity(Q), 'Point is at infinity') - assert(this.isOnCurve(Q), 'Point is not on the curve') +Hash.prototype.update = function (data, enc) { + if (typeof data === 'string') { + enc = enc || 'utf8' + data = new Buffer(data, enc) + } - // Check nQ = O (where Q is a scalar multiple of G) - var nQ = Q.multiply(this.n) - assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G') + var l = this._len += data.length + var s = this._s || 0 + var f = 0 + var buffer = this._block - return true -} + while (s < l) { + var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize)) + var ch = (t - f) -module.exports = Curve + for (var i = 0; i < ch; i++) { + buffer[(s % this._blockSize) + i] = data[i + f] + } -},{"./point":32,"assert":162,"bigi":7}],29:[function(require,module,exports){ -module.exports={ - "secp128r1": { - "p": "fffffffdffffffffffffffffffffffff", - "a": "fffffffdfffffffffffffffffffffffc", - "b": "e87579c11079f43dd824993c2cee5ed3", - "n": "fffffffe0000000075a30d1b9038a115", - "h": "01", - "Gx": "161ff7528b899b2d0c28607ca52c5b86", - "Gy": "cf5ac8395bafeb13c02da292dded7a83" - }, - "secp160k1": { - "p": "fffffffffffffffffffffffffffffffeffffac73", - "a": "00", - "b": "07", - "n": "0100000000000000000001b8fa16dfab9aca16b6b3", - "h": "01", - "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb", - "Gy": "938cf935318fdced6bc28286531733c3f03c4fee" - }, - "secp160r1": { - "p": "ffffffffffffffffffffffffffffffff7fffffff", - "a": "ffffffffffffffffffffffffffffffff7ffffffc", - "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45", - "n": "0100000000000000000001f4c8f927aed3ca752257", - "h": "01", - "Gx": "4a96b5688ef573284664698968c38bb913cbfc82", - "Gy": "23a628553168947d59dcc912042351377ac5fb32" - }, - "secp192k1": { - "p": "fffffffffffffffffffffffffffffffffffffffeffffee37", - "a": "00", - "b": "03", - "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d", - "h": "01", - "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d", - "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d" - }, - "secp192r1": { - "p": "fffffffffffffffffffffffffffffffeffffffffffffffff", - "a": "fffffffffffffffffffffffffffffffefffffffffffffffc", - "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1", - "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831", - "h": "01", - "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012", - "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811" - }, - "secp256k1": { - "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", - "a": "00", - "b": "07", - "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", - "h": "01", - "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", - "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8" - }, - "secp256r1": { - "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", - "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", - "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", - "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", - "h": "01", - "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", - "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5" + s += ch + f += ch + + if ((s % this._blockSize) === 0) { + this._update(buffer) + } } -} + this._s = s -},{}],30:[function(require,module,exports){ -var Point = require('./point') -var Curve = require('./curve') + return this +} -var getCurveByName = require('./names') +Hash.prototype.digest = function (enc) { + // Suppose the length of the message M, in bits, is l + var l = this._len * 8 -module.exports = { - Curve: Curve, - Point: Point, - getCurveByName: getCurveByName -} + // Append the bit 1 to the end of the message + this._block[this._len % this._blockSize] = 0x80 -},{"./curve":28,"./names":31,"./point":32}],31:[function(require,module,exports){ -var BigInteger = require('bigi') + // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize + this._block.fill(0, this._len % this._blockSize + 1) -var curves = require('./curves') -var Curve = require('./curve') + if (l % (this._blockSize * 8) >= this._finalSize * 8) { + this._update(this._block) + this._block.fill(0) + } -function getCurveByName(name) { - var curve = curves[name] - if (!curve) return null + // to this append the block which is equal to the number l written in binary + // TODO: handle case where l is > Math.pow(2, 29) + this._block.writeInt32BE(l, this._blockSize - 4) - var p = new BigInteger(curve.p, 16) - var a = new BigInteger(curve.a, 16) - var b = new BigInteger(curve.b, 16) - var n = new BigInteger(curve.n, 16) - var h = new BigInteger(curve.h, 16) - var Gx = new BigInteger(curve.Gx, 16) - var Gy = new BigInteger(curve.Gy, 16) + var hash = this._update(this._block) || this._hash() - return new Curve(p, a, b, Gx, Gy, n, h) + return enc ? hash.toString(enc) : hash } -module.exports = getCurveByName - -},{"./curve":28,"./curves":29,"bigi":7}],32:[function(require,module,exports){ -(function (Buffer){ -var assert = require('assert') -var BigInteger = require('bigi') +Hash.prototype._update = function () { + throw new Error('_update must be implemented by subclass') +} -var THREE = BigInteger.valueOf(3) +module.exports = Hash -function Point(curve, x, y, z) { - assert.notStrictEqual(z, undefined, 'Missing Z coordinate') +}).call(this,require("buffer").Buffer) +},{"buffer":223}],36:[function(require,module,exports){ +var exports = module.exports = function SHA (algorithm) { + algorithm = algorithm.toLowerCase() - this.curve = curve - this.x = x - this.y = y - this.z = z - this._zInv = null + var Algorithm = exports[algorithm] + if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)') - this.compressed = true + return new Algorithm() } -Object.defineProperty(Point.prototype, 'zInv', { - get: function() { - if (this._zInv === null) { - this._zInv = this.z.modInverse(this.curve.p) - } - - return this._zInv - } -}) +exports.sha = require('./sha') +exports.sha1 = require('./sha1') +exports.sha224 = require('./sha224') +exports.sha256 = require('./sha256') +exports.sha384 = require('./sha384') +exports.sha512 = require('./sha512') -Object.defineProperty(Point.prototype, 'affineX', { - get: function() { - return this.x.multiply(this.zInv).mod(this.curve.p) - } -}) +},{"./sha":37,"./sha1":38,"./sha224":39,"./sha256":40,"./sha384":41,"./sha512":42}],37:[function(require,module,exports){ +(function (Buffer){ +/* + * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined + * in FIPS PUB 180-1 + * This source code is derived from sha1.js of the same repository. + * The difference between SHA-0 and SHA-1 is just a bitwise rotate left + * operation was added. + */ -Object.defineProperty(Point.prototype, 'affineY', { - get: function() { - return this.y.multiply(this.zInv).mod(this.curve.p) - } -}) +var inherits = require('inherits') +var Hash = require('./hash') -Point.fromAffine = function(curve, x, y) { - return new Point(curve, x, y, BigInteger.ONE) -} +var W = new Array(80) -Point.prototype.equals = function(other) { - if (other === this) return true - if (this.curve.isInfinity(this)) return this.curve.isInfinity(other) - if (this.curve.isInfinity(other)) return this.curve.isInfinity(this) +function Sha () { + this.init() + this._w = W - // u = Y2 * Z1 - Y1 * Z2 - var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p) + Hash.call(this, 64, 56) +} - if (u.signum() !== 0) return false +inherits(Sha, Hash) - // v = X2 * Z1 - X1 * Z2 - var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p) +Sha.prototype.init = function () { + this._a = 0x67452301 | 0 + this._b = 0xefcdab89 | 0 + this._c = 0x98badcfe | 0 + this._d = 0x10325476 | 0 + this._e = 0xc3d2e1f0 | 0 - return v.signum() === 0 + return this } -Point.prototype.negate = function() { - var y = this.curve.p.subtract(this.y) - - return new Point(this.curve, this.x, y, this.z) +/* + * Bitwise rotate a 32-bit number to the left. + */ +function rol (num, cnt) { + return (num << cnt) | (num >>> (32 - cnt)) } -Point.prototype.add = function(b) { - if (this.curve.isInfinity(this)) return b - if (this.curve.isInfinity(b)) return this +Sha.prototype._update = function (M) { + var W = this._w - var x1 = this.x - var y1 = this.y - var x2 = b.x - var y2 = b.y + var a = this._a + var b = this._b + var c = this._c + var d = this._d + var e = this._e - // u = Y2 * Z1 - Y1 * Z2 - var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p) - // v = X2 * Z1 - X1 * Z2 - var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p) + var j = 0 + var k - if (v.signum() === 0) { - if (u.signum() === 0) { - return this.twice() // this == b, so double - } + /* + * SHA-1 has a bitwise rotate left operation. But, SHA is not + * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) } + */ + function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] } + function loop (w, f) { + W[j] = w - return this.curve.infinity // this = -b, so infinity - } + var t = rol(a, 5) + f + e + w + k - var v2 = v.square() - var v3 = v2.multiply(v) - var x1v2 = x1.multiply(v2) - var zu2 = u.square().multiply(this.z) + e = d + d = c + c = rol(b, 30) + b = a + a = t + j++ + } - // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3) - var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p) - // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3 - var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.p) - // z3 = v^3 * z1 * z2 - var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p) + k = 1518500249 + while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d)) + while (j < 20) loop(calcW(), (b & c) | ((~b) & d)) + k = 1859775393 + while (j < 40) loop(calcW(), b ^ c ^ d) + k = -1894007588 + while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d)) + k = -899497514 + while (j < 80) loop(calcW(), b ^ c ^ d) - return new Point(this.curve, x3, y3, z3) + 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 } -Point.prototype.twice = function() { - if (this.curve.isInfinity(this)) return this - if (this.y.signum() === 0) return this.curve.infinity +Sha.prototype._hash = function () { + var H = new Buffer(20) - var x1 = this.x - var y1 = this.y + 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) - var y1z1 = y1.multiply(this.z) - var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p) - var a = this.curve.a + return H +} - // w = 3 * x1^2 + a * z1^2 - var w = x1.square().multiply(THREE) +module.exports = Sha - if (a.signum() !== 0) { - w = w.add(this.z.square().multiply(a)) - } - w = w.mod(this.curve.p) - // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1) - var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p) - // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3 - var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p) - // z3 = 8 * (y1 * z1)^3 - var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p) +}).call(this,require("buffer").Buffer) +},{"./hash":35,"buffer":223,"inherits":98}],38:[function(require,module,exports){ +(function (Buffer){ +/* + * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined + * in FIPS PUB 180-1 + * Version 2.1a Copyright Paul Johnston 2000 - 2002. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for details. + */ - return new Point(this.curve, x3, y3, z3) -} +var inherits = require('inherits') +var Hash = require('./hash') -// Simple NAF (Non-Adjacent Form) multiplication algorithm -// TODO: modularize the multiplication algorithm -Point.prototype.multiply = function(k) { - if (this.curve.isInfinity(this)) return this - if (k.signum() === 0) return this.curve.infinity +var W = new Array(80) - var e = k - var h = e.multiply(THREE) +function Sha1 () { + this.init() + this._w = W - var neg = this.negate() - var R = this + Hash.call(this, 64, 56) +} - for (var i = h.bitLength() - 2; i > 0; --i) { - var hBit = h.testBit(i) - var eBit = e.testBit(i) +inherits(Sha1, Hash) - R = R.twice() +Sha1.prototype.init = function () { + this._a = 0x67452301 | 0 + this._b = 0xefcdab89 | 0 + this._c = 0x98badcfe | 0 + this._d = 0x10325476 | 0 + this._e = 0xc3d2e1f0 | 0 - if (hBit !== eBit) { - R = R.add(hBit ? this : neg) - } - } + return this +} - return R +/* + * Bitwise rotate a 32-bit number to the left. + */ +function rol (num, cnt) { + return (num << cnt) | (num >>> (32 - cnt)) } -// Compute this*j + x*k (simultaneous multiplication) -Point.prototype.multiplyTwo = function(j, x, k) { - var i = Math.max(j.bitLength(), k.bitLength()) - 1 - var R = this.curve.infinity - var both = this.add(x) +Sha1.prototype._update = function (M) { + var W = this._w - while (i >= 0) { - var jBit = j.testBit(i) - var kBit = k.testBit(i) + var a = this._a + var b = this._b + var c = this._c + var d = this._d + var e = this._e - R = R.twice() + var j = 0 + var k - if (jBit) { - if (kBit) { - R = R.add(both) + function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) } + function loop (w, f) { + W[j] = w - } else { - R = R.add(this) - } + var t = rol(a, 5) + f + e + w + k - } else if (kBit) { - R = R.add(x) - } - --i + e = d + d = c + c = rol(b, 30) + b = a + a = t + j++ } - return R + k = 1518500249 + while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d)) + while (j < 20) loop(calcW(), (b & c) | ((~b) & d)) + k = 1859775393 + while (j < 40) loop(calcW(), b ^ c ^ d) + k = -1894007588 + while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d)) + k = -899497514 + while (j < 80) loop(calcW(), b ^ c ^ d) + + 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 } -Point.prototype.getEncoded = function(compressed) { - if (compressed == undefined) compressed = this.compressed - if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00' +Sha1.prototype._hash = function () { + var H = new Buffer(20) - var x = this.affineX - var y = this.affineY + 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) - var buffer + return H +} - // Determine size of q in bytes - var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8) +module.exports = Sha1 - // 0x02/0x03 | X - if (compressed) { - buffer = new Buffer(1 + byteLength) - buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0) +}).call(this,require("buffer").Buffer) +},{"./hash":35,"buffer":223,"inherits":98}],39:[function(require,module,exports){ +(function (Buffer){ +/** + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined + * in FIPS 180-2 + * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * + */ - // 0x04 | X | Y - } else { - buffer = new Buffer(1 + byteLength + byteLength) - buffer.writeUInt8(0x04, 0) +var inherits = require('inherits') +var Sha256 = require('./sha256') +var Hash = require('./hash') - y.toBuffer(byteLength).copy(buffer, 1 + byteLength) - } +var W = new Array(64) - x.toBuffer(byteLength).copy(buffer, 1) +function Sha224 () { + this.init() - return buffer + this._w = W // new Array(64) + + Hash.call(this, 64, 56) } -Point.decodeFrom = function(curve, buffer) { - var type = buffer.readUInt8(0) - var compressed = (type !== 4) - - var byteLength = Math.floor((curve.p.bitLength() + 7) / 8) - var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength)) - - var Q - if (compressed) { - assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length') - assert(type === 0x02 || type === 0x03, 'Invalid sequence tag') - - var isOdd = (type === 0x03) - Q = curve.pointFromX(isOdd, x) - - } else { - assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length') +inherits(Sha224, Sha256) - var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength)) - Q = Point.fromAffine(curve, x, y) - } +Sha224.prototype.init = function () { + this._a = 0xc1059ed8 | 0 + this._b = 0x367cd507 | 0 + this._c = 0x3070dd17 | 0 + this._d = 0xf70e5939 | 0 + this._e = 0xffc00b31 | 0 + this._f = 0x68581511 | 0 + this._g = 0x64f98fa7 | 0 + this._h = 0xbefa4fa4 | 0 - Q.compressed = compressed - return Q + return this } -Point.prototype.toString = function () { - if (this.curve.isInfinity(this)) return '(INFINITY)' +Sha224.prototype._hash = function () { + var H = new Buffer(28) - return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')' + 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 = Point +module.exports = Sha224 }).call(this,require("buffer").Buffer) -},{"assert":162,"bigi":7,"buffer":177}],33:[function(require,module,exports){ -(function (process,global,Buffer){ -'use strict'; +},{"./hash":35,"./sha256":40,"buffer":223,"inherits":98}],40:[function(require,module,exports){ +(function (Buffer){ +/** + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined + * in FIPS 180-2 + * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * + */ -var crypto = global.crypto || global.msCrypto -if(crypto && crypto.getRandomValues) { - module.exports = randomBytes; -} else { - module.exports = oldBrowser; -} -function randomBytes(size, cb) { - var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array - /* This will not work in older browsers. - * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues - */ +var inherits = require('inherits') +var Hash = require('./hash') - crypto.getRandomValues(bytes); - if (typeof cb === 'function') { - return process.nextTick(function () { - cb(null, bytes); - }); - } - return bytes; -} -function oldBrowser() { - throw new Error( - 'secure random number generation not supported by this browser\n'+ - 'use chrome, FireFox or Internet Explorer 11' - ) -} +var K = [ + 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, + 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, + 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, + 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, + 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, + 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, + 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, + 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, + 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, + 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, + 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, + 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, + 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, + 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, + 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, + 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 +] -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer) -},{"_process":381,"buffer":177}],34:[function(require,module,exports){ -(function (Buffer){ -var inherits = require('inherits') +var W = new Array(64) -function TfTypeError (type, value) { - this.tfError = Error.call(this) - this.tfType = type - this.tfValue = value +function Sha256 () { + this.init() - var message - Object.defineProperty(this, 'message', { - get: function () { - if (message) return message - message = tfErrorString(type, value) + this._w = W // new Array(64) - return message - } - }) + Hash.call(this, 64, 56) } -inherits(TfTypeError, Error) -Object.defineProperty(TfTypeError, 'stack', { get: function () { return this.tfError.stack } }) +inherits(Sha256, Hash) -function TfPropertyTypeError (type, property, value, error) { - this.tfError = error || Error.call(this) - this.tfProperty = property - this.tfType = type - this.tfValue = value +Sha256.prototype.init = function () { + this._a = 0x6a09e667 | 0 + this._b = 0xbb67ae85 | 0 + this._c = 0x3c6ef372 | 0 + this._d = 0xa54ff53a | 0 + this._e = 0x510e527f | 0 + this._f = 0x9b05688c | 0 + this._g = 0x1f83d9ab | 0 + this._h = 0x5be0cd19 | 0 - var message - Object.defineProperty(this, 'message', { - get: function () { - if (message) return message - if (type) { - message = tfPropertyErrorString(type, property, value) - } else { - message = 'Unexpected property "' + property + '"' - } + return this +} - return message - } - }) +function Ch (x, y, z) { + return z ^ (x & (y ^ z)) } -inherits(TfPropertyTypeError, Error) -Object.defineProperty(TfPropertyTypeError, 'stack', { get: function () { return this.tfError.stack } }) +function Maj (x, y, z) { + return (x & y) | (z & (x | y)) +} -TfPropertyTypeError.prototype.asChildOf = function (property) { - return new TfPropertyTypeError(this.tfType, property + '.' + this.tfProperty, this.tfValue, this.tfError) +function Sigma0 (x) { + return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10) } -function getFunctionName (fn) { - return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1] +function Sigma1 (x) { + return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7) } -function getValueTypeName (value) { - if (nativeTypes.Null(value)) return '' +function Gamma0 (x) { + return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3) +} - return getFunctionName(value.constructor) +function Gamma1 (x) { + return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10) } -function getValue (value) { - if (nativeTypes.Function(value)) return '' - if (nativeTypes.String(value)) return JSON.stringify(value) - if (value && nativeTypes.Object(value)) return '' +Sha256.prototype._update = function (M) { + var W = this._w - return value -} + 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 -function tfJSON (type) { - if (nativeTypes.Function(type)) return type.toJSON ? type.toJSON() : getFunctionName(type) - if (nativeTypes.Array(type)) return 'Array' - if (type && nativeTypes.Object(type)) return 'Object' + var j = 0 - return type || '' -} + function calcW () { return Gamma1(W[j - 2]) + W[j - 7] + Gamma0(W[j - 15]) + W[j - 16] } + function loop (w) { + W[j] = w -function stfJSON (type) { - type = tfJSON(type) + var T1 = h + Sigma1(e) + Ch(e, f, g) + K[j] + w + var T2 = Sigma0(a) + Maj(a, b, c) - return nativeTypes.Object(type) ? JSON.stringify(type) : type -} + h = g + g = f + f = e + e = d + T1 + d = c + c = b + b = a + a = T1 + T2 -function tfErrorString (type, value) { - var valueTypeName = getValueTypeName(value) - var valueValue = getValue(value) + j++ + } - return 'Expected ' + stfJSON(type) + ', got' + (valueTypeName !== '' ? ' ' + valueTypeName : '') + (valueValue !== '' ? ' ' + valueValue : '') -} + while (j < 16) loop(M.readInt32BE(j * 4)) + while (j < 64) loop(calcW()) -function tfPropertyErrorString (type, name, value) { - return tfErrorString('property \"' + stfJSON(name) + '\" of type ' + stfJSON(type), value) + 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 } -var nativeTypes = { - Array: function (value) { return value !== null && value !== undefined && value.constructor === Array }, - Boolean: function (value) { return typeof value === 'boolean' }, - Buffer: function (value) { return Buffer.isBuffer(value) }, - Function: function (value) { return typeof value === 'function' }, - Null: function (value) { return value === undefined || value === null }, - Number: function (value) { return typeof value === 'number' }, - Object: function (value) { return typeof value === 'object' }, - String: function (value) { return typeof value === 'string' }, - '': function () { return true } +Sha256.prototype._hash = function () { + var H = new Buffer(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 } -var otherTypes = { - arrayOf: function arrayOf (type) { - function arrayOf (value, strict) { - if (!nativeTypes.Array(value)) return false +module.exports = Sha256 - return value.every(function (x) { - return typeforce(type, x, strict, arrayOf) - }) - } - arrayOf.toJSON = function () { return [tfJSON(type)] } +}).call(this,require("buffer").Buffer) +},{"./hash":35,"buffer":223,"inherits":98}],41:[function(require,module,exports){ +(function (Buffer){ +var inherits = require('inherits') +var SHA512 = require('./sha512') +var Hash = require('./hash') - return arrayOf - }, +var W = new Array(160) - maybe: function maybe (type) { - function maybe (value, strict) { - return nativeTypes.Null(value) || typeforce(type, value, strict, maybe) - } - maybe.toJSON = function () { return '?' + stfJSON(type) } +function Sha384 () { + this.init() + this._w = W - return maybe - }, + Hash.call(this, 128, 112) +} - object: function object (type) { - function object (value, strict) { - if (!nativeTypes.Object(value)) return false - if (nativeTypes.Null(value)) return false +inherits(Sha384, SHA512) - var propertyName +Sha384.prototype.init = function () { + this._a = 0xcbbb9d5d | 0 + this._b = 0x629a292a | 0 + this._c = 0x9159015a | 0 + this._d = 0x152fecd8 | 0 + this._e = 0x67332667 | 0 + this._f = 0x8eb44a87 | 0 + this._g = 0xdb0c2e0d | 0 + this._h = 0x47b5481d | 0 - try { - for (propertyName in type) { - var propertyType = type[propertyName] - var propertyValue = value[propertyName] + this._al = 0xc1059ed8 | 0 + this._bl = 0x367cd507 | 0 + this._cl = 0x3070dd17 | 0 + this._dl = 0xf70e5939 | 0 + this._el = 0xffc00b31 | 0 + this._fl = 0x68581511 | 0 + this._gl = 0x64f98fa7 | 0 + this._hl = 0xbefa4fa4 | 0 - typeforce(propertyType, propertyValue, strict) - } - } catch (e) { - if (e instanceof TfPropertyTypeError) { - throw e.asChildOf(propertyName) - } else if (e instanceof TfTypeError) { - throw new TfPropertyTypeError(e.tfType, propertyName, e.tfValue, e.tfError) - } + return this +} - throw e - } +Sha384.prototype._hash = function () { + var H = new Buffer(48) - if (strict) { - for (propertyName in value) { - if (type[propertyName]) continue + function writeInt64BE (h, l, offset) { + H.writeInt32BE(h, offset) + H.writeInt32BE(l, offset + 4) + } - throw new TfPropertyTypeError(undefined, propertyName) - } - } + writeInt64BE(this._a, this._al, 0) + writeInt64BE(this._b, this._bl, 8) + writeInt64BE(this._c, this._cl, 16) + writeInt64BE(this._d, this._dl, 24) + writeInt64BE(this._e, this._el, 32) + writeInt64BE(this._f, this._fl, 40) - return true - } - object.toJSON = function () { return tfJSON(type) } + return H +} - return object - }, +module.exports = Sha384 - map: function map (propertyType, propertyKeyType) { - function map (value, strict) { - typeforce(nativeTypes.Object, value, strict) - if (nativeTypes.Null(value)) return false +}).call(this,require("buffer").Buffer) +},{"./hash":35,"./sha512":42,"buffer":223,"inherits":98}],42:[function(require,module,exports){ +(function (Buffer){ +var inherits = require('inherits') +var Hash = require('./hash') - var propertyName +var K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +] - try { - for (propertyName in value) { - if (propertyKeyType) { - typeforce(propertyKeyType, propertyName, strict) - } +var W = new Array(160) - var propertyValue = value[propertyName] - typeforce(propertyType, propertyValue, strict) - } - } catch (e) { - if (e instanceof TfPropertyTypeError) { - throw e.asChildOf(propertyName) - } else if (e instanceof TfTypeError) { - throw new TfPropertyTypeError(e.tfType, propertyKeyType || propertyName, e.tfValue) - } +function Sha512 () { + this.init() + this._w = W - throw e - } + Hash.call(this, 128, 112) +} - return true - } +inherits(Sha512, Hash) - if (propertyKeyType) { - map.toJSON = function () { return '{' + stfJSON(propertyKeyType) + ': ' + stfJSON(propertyType) + '}' } - } else { - map.toJSON = function () { return '{' + stfJSON(propertyType) + '}' } - } +Sha512.prototype.init = function () { + this._a = 0x6a09e667 | 0 + this._b = 0xbb67ae85 | 0 + this._c = 0x3c6ef372 | 0 + this._d = 0xa54ff53a | 0 + this._e = 0x510e527f | 0 + this._f = 0x9b05688c | 0 + this._g = 0x1f83d9ab | 0 + this._h = 0x5be0cd19 | 0 - return map - }, + this._al = 0xf3bcc908 | 0 + this._bl = 0x84caa73b | 0 + this._cl = 0xfe94f82b | 0 + this._dl = 0x5f1d36f1 | 0 + this._el = 0xade682d1 | 0 + this._fl = 0x2b3e6c1f | 0 + this._gl = 0xfb41bd6b | 0 + this._hl = 0x137e2179 | 0 - oneOf: function oneOf () { - var types = [].slice.call(arguments) + return this +} - function oneOf (value, strict) { - return types.some(function (type) { - try { - return typeforce(type, value, strict) - } catch (e) { - if (e instanceof TfTypeError || e instanceof TfPropertyTypeError) return false +function Ch (x, y, z) { + return z ^ (x & (y ^ z)) +} - throw e - } - }) - } - oneOf.toJSON = function () { return types.map(stfJSON).join('|') } +function Maj (x, y, z) { + return (x & y) | (z & (x | y)) +} - return oneOf - }, +function Sigma0 (x, xl) { + return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25) +} - quacksLike: function quacksLike (type) { - function quacksLike (value, strict) { - return type === getValueTypeName(value) - } - quacksLike.toJSON = function () { return type } +function Sigma1 (x, xl) { + return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23) +} - return quacksLike - }, +function Gamma0 (x, xl) { + return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7) +} - tuple: function tuple () { - var types = [].slice.call(arguments) +function Gamma0l (x, xl) { + return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25) +} - function tuple (value, strict) { - return types.every(function (type, i) { - return typeforce(type, value[i], strict) - }) - } - tuple.toJSON = function () { return '(' + types.map(stfJSON).join(', ') + ')' } +function Gamma1 (x, xl) { + return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6) +} - return tuple - }, +function Gamma1l (x, xl) { + return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26) +} - value: function value (expected) { - function value (actual) { - return actual === expected - } - value.toJSON = function () { return expected } - - return value - } -} - -function compile (type) { - if (nativeTypes.String(type)) { - if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1))) +Sha512.prototype._update = function (M) { + var W = this._w - return nativeTypes[type] || otherTypes.quacksLike(type) - } else if (type && nativeTypes.Object(type)) { - if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0])) + 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 - var compiled = {} + 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 propertyName in type) { - compiled[propertyName] = compile(type[propertyName]) - } + var i = 0 + var j = 0 + var Wi, Wil + function calcW () { + var x = W[j - 15 * 2] + var xl = W[j - 15 * 2 + 1] + var gamma0 = Gamma0(x, xl) + var gamma0l = Gamma0l(xl, x) - return otherTypes.object(compiled) - } else if (nativeTypes.Function(type)) { - return type - } + x = W[j - 2 * 2] + xl = W[j - 2 * 2 + 1] + var gamma1 = Gamma1(x, xl) + var gamma1l = Gamma1l(xl, x) - return otherTypes.value(type) -} + // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] + var Wi7 = W[j - 7 * 2] + var Wi7l = W[j - 7 * 2 + 1] -function typeforce (type, value, strict, surrogate) { - if (nativeTypes.Function(type)) { - if (type(value, strict)) return true + var Wi16 = W[j - 16 * 2] + var Wi16l = W[j - 16 * 2 + 1] - throw new TfTypeError(surrogate || type, value) + Wil = gamma0l + Wi7l + Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0) + Wil = Wil + gamma1l + Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0) + Wil = Wil + Wi16l + Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0) } - // JIT - return typeforce(compile(type), value, strict) -} - -// assign all types to typeforce function -var typeName -Object.keys(nativeTypes).forEach(function (typeName) { - var nativeType = nativeTypes[typeName] - nativeType.toJSON = function () { return typeName } + function loop () { + W[j] = Wi + W[j + 1] = Wil - typeforce[typeName] = nativeType -}) + var maj = Maj(a, b, c) + var majl = Maj(al, bl, cl) -for (typeName in otherTypes) { - typeforce[typeName] = otherTypes[typeName] -} + var sigma0h = Sigma0(a, al) + var sigma0l = Sigma0(al, a) + var sigma1h = Sigma1(e, el) + var sigma1l = Sigma1(el, e) -module.exports = typeforce -module.exports.compile = compile + // t1 = h + sigma1 + ch + K[i] + W[i] + var Ki = K[j] + var Kil = K[j + 1] -// export Error objects -module.exports.TfTypeError = TfTypeError -module.exports.TfPropertyTypeError = TfPropertyTypeError + var ch = Ch(e, f, g) + var chl = Ch(el, fl, gl) -}).call(this,{"isBuffer":require("../../../../../twister-react/node_modules/browserify/node_modules/insert-module-globals/node_modules/is-buffer/index.js")}) -},{"../../../../../twister-react/node_modules/browserify/node_modules/insert-module-globals/node_modules/is-buffer/index.js":378,"inherits":52}],35:[function(require,module,exports){ -(function (Buffer){ -var bs58check = require('bs58check') + var t1l = hl + sigma1l + var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0) + t1l = t1l + chl + t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0) + t1l = t1l + Kil + t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0) + t1l = t1l + Wil + t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0) -function decodeRaw (version, buffer) { - if (buffer[0] !== version) throw new Error('Invalid network version') + // t2 = sigma0 + maj + var t2l = sigma0l + majl + var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0) - // compression flag? - if (buffer.length === 34) { - if (buffer[33] !== 0x01) throw new Error('Invalid compression flag') + h = g + hl = gl + g = f + gl = fl + f = e + fl = el + el = (dl + t1l) | 0 + e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0 + d = c + dl = cl + c = b + cl = bl + b = a + bl = al + al = (t1l + t2l) | 0 + a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0 - // truncate the version byte/compression flag - return { - version: buffer[0], - d: buffer.slice(1, -1), - compressed: true - } + i++ + j += 2 } - // no compression flag - if (buffer.length !== 33) throw new Error('Invalid WIF length') + while (i < 16) { + Wi = M.readInt32BE(j * 4) + Wil = M.readInt32BE(j * 4 + 4) - return { - version: buffer[0], - d: buffer.slice(1), - compressed: false + loop() } -} -function decode (version, string) { - return decodeRaw(version, bs58check.decode(string)) -} + while (i < 80) { + calcW() + loop() + } -function encodeRaw (version, d, compressed) { - var buffer = new Buffer(compressed ? 34 : 33) + 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 - buffer.writeUInt8(version, 0) - d.copy(buffer, 1) + this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0 + this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0 + this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0 + this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0 + this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0 + this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0 + this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0 + this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0 +} - if (compressed) { - buffer[33] = 0x01 +Sha512.prototype._hash = function () { + var H = new Buffer(64) + + function writeInt64BE (h, l, offset) { + H.writeInt32BE(h, offset) + H.writeInt32BE(l, offset + 4) } - return buffer -} + writeInt64BE(this._a, this._al, 0) + writeInt64BE(this._b, this._bl, 8) + writeInt64BE(this._c, this._cl, 16) + writeInt64BE(this._d, this._dl, 24) + writeInt64BE(this._e, this._el, 32) + writeInt64BE(this._f, this._fl, 40) + writeInt64BE(this._g, this._gl, 48) + writeInt64BE(this._h, this._hl, 56) -function encode (version, d, compressed) { - return bs58check.encode(encodeRaw(version, d, compressed)) + return H } -module.exports = { - decode: decode, - decodeRaw: decodeRaw, - encode: encode, - encodeRaw: encodeRaw -} +module.exports = Sha512 }).call(this,require("buffer").Buffer) -},{"bs58check":10,"buffer":177}],36:[function(require,module,exports){ -(function (Buffer){ -var bs58check = require('bs58check') -var bscript = require('./script') -var networks = require('./networks') -var typeforce = require('typeforce') -var types = require('./types') +},{"./hash":35,"buffer":223,"inherits":98}],43:[function(require,module,exports){ +var assert = require('assert') +var BigInteger = require('bigi') -function fromBase58Check (address) { - var payload = bs58check.decode(address) - if (payload.length < 21) throw new TypeError(address + ' is too short') - if (payload.length > 21) throw new TypeError(address + ' is too long') +var Point = require('./point') - var version = payload[0] - var hash = payload.slice(1) +function Curve(p, a, b, Gx, Gy, n, h) { + this.p = p + this.a = a + this.b = b + this.G = Point.fromAffine(this, Gx, Gy) + this.n = n + this.h = h - return { hash: hash, version: version } + this.infinity = new Point(this, null, null, BigInteger.ZERO) + + // result caching + this.pOverFour = p.add(BigInteger.ONE).shiftRight(2) } -function fromOutputScript (scriptPubKey, network) { - network = network || networks.bitcoin +Curve.prototype.pointFromX = function(isOdd, x) { + var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p) + var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves - if (bscript.isPubKeyHashOutput(scriptPubKey)) return toBase58Check(scriptPubKey.slice(3, 23), network.pubKeyHash) - if (bscript.isScriptHashOutput(scriptPubKey)) return toBase58Check(scriptPubKey.slice(2, 22), network.scriptHash) + var y = beta + if (beta.isEven() ^ !isOdd) { + y = this.p.subtract(y) // -y % p + } - throw new Error(bscript.toASM(scriptPubKey) + ' has no matching Address') + return Point.fromAffine(this, x, y) } -function toBase58Check (hash, version) { - typeforce(types.tuple(types.Hash160bit, types.UInt8), arguments) - - var payload = new Buffer(21) - payload.writeUInt8(version, 0) - hash.copy(payload, 1) +Curve.prototype.isInfinity = function(Q) { + if (Q === this.infinity) return true - return bs58check.encode(payload) + return Q.z.signum() === 0 && Q.y.signum() !== 0 } -function toOutputScript (address, network) { - network = network || networks.bitcoin +Curve.prototype.isOnCurve = function(Q) { + if (this.isInfinity(Q)) return true - var decode = fromBase58Check(address) - if (decode.version === network.pubKeyHash) return bscript.pubKeyHashOutput(decode.hash) - if (decode.version === network.scriptHash) return bscript.scriptHashOutput(decode.hash) + var x = Q.affineX + var y = Q.affineY + var a = this.a + var b = this.b + var p = this.p - throw new Error(address + ' has no matching Script') -} + // Check that xQ and yQ are integers in the interval [0, p - 1] + if (x.signum() < 0 || x.compareTo(p) >= 0) return false + if (y.signum() < 0 || y.compareTo(p) >= 0) return false -module.exports = { - fromBase58Check: fromBase58Check, - fromOutputScript: fromOutputScript, - toBase58Check: toBase58Check, - toOutputScript: toOutputScript + // and check that y^2 = x^3 + ax + b (mod p) + var lhs = y.square().mod(p) + var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p) + return lhs.equals(rhs) } -}).call(this,require("buffer").Buffer) -},{"./networks":46,"./script":48,"./types":51,"bs58check":10,"buffer":177,"typeforce":34}],37:[function(require,module,exports){ -(function (Buffer){ -var bufferutils = require('./bufferutils') -var bcrypto = require('./crypto') +/** + * Validate an elliptic curve point. + * + * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive + */ +Curve.prototype.validate = function(Q) { + // Check Q != O + assert(!this.isInfinity(Q), 'Point is at infinity') + assert(this.isOnCurve(Q), 'Point is not on the curve') -var Transaction = require('./transaction') + // Check nQ = O (where Q is a scalar multiple of G) + var nQ = Q.multiply(this.n) + assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G') -function Block () { - this.version = 1 - this.prevHash = null - this.merkleRoot = null - this.timestamp = 0 - this.bits = 0 - this.nonce = 0 + return true } -Block.fromBuffer = function (buffer) { - if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)') - - var offset = 0 - function readSlice (n) { - offset += n - return buffer.slice(offset - n, offset) - } +module.exports = Curve - function readUInt32 () { - var i = buffer.readUInt32LE(offset) - offset += 4 - return i +},{"./point":47,"assert":208,"bigi":8}],44:[function(require,module,exports){ +module.exports={ + "secp128r1": { + "p": "fffffffdffffffffffffffffffffffff", + "a": "fffffffdfffffffffffffffffffffffc", + "b": "e87579c11079f43dd824993c2cee5ed3", + "n": "fffffffe0000000075a30d1b9038a115", + "h": "01", + "Gx": "161ff7528b899b2d0c28607ca52c5b86", + "Gy": "cf5ac8395bafeb13c02da292dded7a83" + }, + "secp160k1": { + "p": "fffffffffffffffffffffffffffffffeffffac73", + "a": "00", + "b": "07", + "n": "0100000000000000000001b8fa16dfab9aca16b6b3", + "h": "01", + "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb", + "Gy": "938cf935318fdced6bc28286531733c3f03c4fee" + }, + "secp160r1": { + "p": "ffffffffffffffffffffffffffffffff7fffffff", + "a": "ffffffffffffffffffffffffffffffff7ffffffc", + "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45", + "n": "0100000000000000000001f4c8f927aed3ca752257", + "h": "01", + "Gx": "4a96b5688ef573284664698968c38bb913cbfc82", + "Gy": "23a628553168947d59dcc912042351377ac5fb32" + }, + "secp192k1": { + "p": "fffffffffffffffffffffffffffffffffffffffeffffee37", + "a": "00", + "b": "03", + "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d", + "h": "01", + "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d", + "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d" + }, + "secp192r1": { + "p": "fffffffffffffffffffffffffffffffeffffffffffffffff", + "a": "fffffffffffffffffffffffffffffffefffffffffffffffc", + "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1", + "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831", + "h": "01", + "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012", + "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811" + }, + "secp256k1": { + "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "a": "00", + "b": "07", + "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", + "h": "01", + "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8" + }, + "secp256r1": { + "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", + "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", + "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "h": "01", + "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", + "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5" } +} - var block = new Block() - block.version = readUInt32() - block.prevHash = readSlice(32) - block.merkleRoot = readSlice(32) - block.timestamp = readUInt32() - block.bits = readUInt32() - block.nonce = readUInt32() +},{}],45:[function(require,module,exports){ +var Point = require('./point') +var Curve = require('./curve') - if (buffer.length === 80) return block +var getCurveByName = require('./names') - function readVarInt () { - var vi = bufferutils.readVarInt(buffer, offset) - offset += vi.size - return vi.number - } +module.exports = { + Curve: Curve, + Point: Point, + getCurveByName: getCurveByName +} - function readTransaction () { - var tx = Transaction.fromBuffer(buffer.slice(offset), true) +},{"./curve":43,"./names":46,"./point":47}],46:[function(require,module,exports){ +var BigInteger = require('bigi') - offset += tx.byteLength() - return tx - } +var curves = require('./curves') +var Curve = require('./curve') - var nTransactions = readVarInt() - block.transactions = [] +function getCurveByName(name) { + var curve = curves[name] + if (!curve) return null - for (var i = 0; i < nTransactions; ++i) { - var tx = readTransaction() - block.transactions.push(tx) - } + var p = new BigInteger(curve.p, 16) + var a = new BigInteger(curve.a, 16) + var b = new BigInteger(curve.b, 16) + var n = new BigInteger(curve.n, 16) + var h = new BigInteger(curve.h, 16) + var Gx = new BigInteger(curve.Gx, 16) + var Gy = new BigInteger(curve.Gy, 16) - return block + return new Curve(p, a, b, Gx, Gy, n, h) } -Block.fromHex = function (hex) { - return Block.fromBuffer(new Buffer(hex, 'hex')) -} +module.exports = getCurveByName -Block.prototype.getHash = function () { - return bcrypto.hash256(this.toBuffer(true)) -} +},{"./curve":43,"./curves":44,"bigi":8}],47:[function(require,module,exports){ +(function (Buffer){ +var assert = require('assert') +var BigInteger = require('bigi') -Block.prototype.getId = function () { - return [].reverse.call(this.getHash()).toString('hex') -} +var THREE = BigInteger.valueOf(3) -Block.prototype.getUTCDate = function () { - var date = new Date(0) // epoch - date.setUTCSeconds(this.timestamp) +function Point(curve, x, y, z) { + assert.notStrictEqual(z, undefined, 'Missing Z coordinate') - return date + this.curve = curve + this.x = x + this.y = y + this.z = z + this._zInv = null + + this.compressed = true } -Block.prototype.toBuffer = function (headersOnly) { - var buffer = new Buffer(80) +Object.defineProperty(Point.prototype, 'zInv', { + get: function() { + if (this._zInv === null) { + this._zInv = this.z.modInverse(this.curve.p) + } - var offset = 0 - function writeSlice (slice) { - slice.copy(buffer, offset) - offset += slice.length + return this._zInv } +}) - function writeUInt32 (i) { - buffer.writeUInt32LE(i, offset) - offset += 4 +Object.defineProperty(Point.prototype, 'affineX', { + get: function() { + return this.x.multiply(this.zInv).mod(this.curve.p) } +}) - writeUInt32(this.version) - writeSlice(this.prevHash) - writeSlice(this.merkleRoot) - writeUInt32(this.timestamp) - writeUInt32(this.bits) - writeUInt32(this.nonce) +Object.defineProperty(Point.prototype, 'affineY', { + get: function() { + return this.y.multiply(this.zInv).mod(this.curve.p) + } +}) - if (headersOnly || !this.transactions) return buffer +Point.fromAffine = function(curve, x, y) { + return new Point(curve, x, y, BigInteger.ONE) +} - var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length) - var txBuffers = this.transactions.map(function (tx) { - return tx.toBuffer() - }) +Point.prototype.equals = function(other) { + if (other === this) return true + if (this.curve.isInfinity(this)) return this.curve.isInfinity(other) + if (this.curve.isInfinity(other)) return this.curve.isInfinity(this) - return Buffer.concat([buffer, txLenBuffer].concat(txBuffers)) -} + // u = Y2 * Z1 - Y1 * Z2 + var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p) -Block.prototype.toHex = function (headersOnly) { - return this.toBuffer(headersOnly).toString('hex') -} - -module.exports = Block + if (u.signum() !== 0) return false -}).call(this,require("buffer").Buffer) -},{"./bufferutils":38,"./crypto":39,"./transaction":49,"buffer":177}],38:[function(require,module,exports){ -(function (Buffer){ -var opcodes = require('./opcodes') + // v = X2 * Z1 - X1 * Z2 + var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p) -// https://github.com/feross/buffer/blob/master/index.js#L1127 -function verifuint (value, max) { - if (typeof value !== 'number') throw new Error('cannot write a non-number as a number') - if (value < 0) throw new Error('specified a negative value for writing an unsigned value') - if (value > max) throw new Error('value is larger than maximum value for type') - if (Math.floor(value) !== value) throw new Error('value has a fractional component') + return v.signum() === 0 } -function pushDataSize (i) { - return i < opcodes.OP_PUSHDATA1 ? 1 - : i < 0xff ? 2 - : i < 0xffff ? 3 - : 5 -} +Point.prototype.negate = function() { + var y = this.curve.p.subtract(this.y) -function readPushDataInt (buffer, offset) { - var opcode = buffer.readUInt8(offset) - var number, size + return new Point(this.curve, this.x, y, this.z) +} - // ~6 bit - if (opcode < opcodes.OP_PUSHDATA1) { - number = opcode - size = 1 +Point.prototype.add = function(b) { + if (this.curve.isInfinity(this)) return b + if (this.curve.isInfinity(b)) return this - // 8 bit - } else if (opcode === opcodes.OP_PUSHDATA1) { - if (offset + 2 > buffer.length) return null - number = buffer.readUInt8(offset + 1) - size = 2 + var x1 = this.x + var y1 = this.y + var x2 = b.x + var y2 = b.y - // 16 bit - } else if (opcode === opcodes.OP_PUSHDATA2) { - if (offset + 3 > buffer.length) return null - number = buffer.readUInt16LE(offset + 1) - size = 3 + // u = Y2 * Z1 - Y1 * Z2 + var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p) + // v = X2 * Z1 - X1 * Z2 + var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p) - // 32 bit - } else { - if (offset + 5 > buffer.length) return null - if (opcode !== opcodes.OP_PUSHDATA4) throw new Error('Unexpected opcode') + if (v.signum() === 0) { + if (u.signum() === 0) { + return this.twice() // this == b, so double + } - number = buffer.readUInt32LE(offset + 1) - size = 5 + return this.curve.infinity // this = -b, so infinity } - return { - opcode: opcode, - number: number, - size: size - } + var v2 = v.square() + var v3 = v2.multiply(v) + var x1v2 = x1.multiply(v2) + var zu2 = u.square().multiply(this.z) + + // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3) + var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p) + // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3 + var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.p) + // z3 = v^3 * z1 * z2 + var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p) + + return new Point(this.curve, x3, y3, z3) } -function readUInt64LE (buffer, offset) { - var a = buffer.readUInt32LE(offset) - var b = buffer.readUInt32LE(offset + 4) - b *= 0x100000000 +Point.prototype.twice = function() { + if (this.curve.isInfinity(this)) return this + if (this.y.signum() === 0) return this.curve.infinity - verifuint(b + a, 0x001fffffffffffff) + var x1 = this.x + var y1 = this.y - return b + a + var y1z1 = y1.multiply(this.z) + var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p) + var a = this.curve.a + + // w = 3 * x1^2 + a * z1^2 + var w = x1.square().multiply(THREE) + + if (a.signum() !== 0) { + w = w.add(this.z.square().multiply(a)) + } + + w = w.mod(this.curve.p) + // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1) + var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p) + // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3 + var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p) + // z3 = 8 * (y1 * z1)^3 + var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p) + + return new Point(this.curve, x3, y3, z3) } -function readVarInt (buffer, offset) { - var t = buffer.readUInt8(offset) - var number, size +// Simple NAF (Non-Adjacent Form) multiplication algorithm +// TODO: modularize the multiplication algorithm +Point.prototype.multiply = function(k) { + if (this.curve.isInfinity(this)) return this + if (k.signum() === 0) return this.curve.infinity - // 8 bit - if (t < 253) { - number = t - size = 1 + var e = k + var h = e.multiply(THREE) - // 16 bit - } else if (t < 254) { - number = buffer.readUInt16LE(offset + 1) - size = 3 + var neg = this.negate() + var R = this - // 32 bit - } else if (t < 255) { - number = buffer.readUInt32LE(offset + 1) - size = 5 + for (var i = h.bitLength() - 2; i > 0; --i) { + var hBit = h.testBit(i) + var eBit = e.testBit(i) - // 64 bit - } else { - number = readUInt64LE(buffer, offset + 1) - size = 9 - } + R = R.twice() - return { - number: number, - size: size + if (hBit !== eBit) { + R = R.add(hBit ? this : neg) + } } + + return R } -function writePushDataInt (buffer, number, offset) { - var size = pushDataSize(number) +// Compute this*j + x*k (simultaneous multiplication) +Point.prototype.multiplyTwo = function(j, x, k) { + var i = Math.max(j.bitLength(), k.bitLength()) - 1 + var R = this.curve.infinity + var both = this.add(x) - // ~6 bit - if (size === 1) { - buffer.writeUInt8(number, offset) + while (i >= 0) { + var jBit = j.testBit(i) + var kBit = k.testBit(i) - // 8 bit - } else if (size === 2) { - buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset) - buffer.writeUInt8(number, offset + 1) + R = R.twice() - // 16 bit - } else if (size === 3) { - buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset) - buffer.writeUInt16LE(number, offset + 1) + if (jBit) { + if (kBit) { + R = R.add(both) - // 32 bit - } else { - buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset) - buffer.writeUInt32LE(number, offset + 1) + } else { + R = R.add(this) + } + + } else if (kBit) { + R = R.add(x) + } + --i } - return size + return R } -function writeUInt64LE (buffer, value, offset) { - verifuint(value, 0x001fffffffffffff) +Point.prototype.getEncoded = function(compressed) { + if (compressed == undefined) compressed = this.compressed + if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00' - buffer.writeInt32LE(value & -1, offset) - buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4) -} + var x = this.affineX + var y = this.affineY -function varIntSize (i) { - return i < 253 ? 1 - : i < 0x10000 ? 3 - : i < 0x100000000 ? 5 - : 9 + var buffer + + // Determine size of q in bytes + var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8) + + // 0x02/0x03 | X + if (compressed) { + buffer = new Buffer(1 + byteLength) + buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0) + + // 0x04 | X | Y + } else { + buffer = new Buffer(1 + byteLength + byteLength) + buffer.writeUInt8(0x04, 0) + + y.toBuffer(byteLength).copy(buffer, 1 + byteLength) + } + + x.toBuffer(byteLength).copy(buffer, 1) + + return buffer } -function writeVarInt (buffer, number, offset) { - var size = varIntSize(number) +Point.decodeFrom = function(curve, buffer) { + var type = buffer.readUInt8(0) + var compressed = (type !== 4) - // 8 bit - if (size === 1) { - buffer.writeUInt8(number, offset) + var byteLength = Math.floor((curve.p.bitLength() + 7) / 8) + var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength)) - // 16 bit - } else if (size === 3) { - buffer.writeUInt8(253, offset) - buffer.writeUInt16LE(number, offset + 1) + var Q + if (compressed) { + assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length') + assert(type === 0x02 || type === 0x03, 'Invalid sequence tag') - // 32 bit - } else if (size === 5) { - buffer.writeUInt8(254, offset) - buffer.writeUInt32LE(number, offset + 1) + var isOdd = (type === 0x03) + Q = curve.pointFromX(isOdd, x) - // 64 bit } else { - buffer.writeUInt8(255, offset) - writeUInt64LE(buffer, number, offset + 1) + assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length') + + var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength)) + Q = Point.fromAffine(curve, x, y) } - return size + Q.compressed = compressed + return Q } -function varIntBuffer (i) { - var size = varIntSize(i) - var buffer = new Buffer(size) - writeVarInt(buffer, i, 0) +Point.prototype.toString = function () { + if (this.curve.isInfinity(this)) return '(INFINITY)' - return buffer + return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')' } -module.exports = { - equal: require('buffer-equals'), - pushDataSize: pushDataSize, - readPushDataInt: readPushDataInt, - readUInt64LE: readUInt64LE, - readVarInt: readVarInt, - reverse: require('buffer-reverse'), - varIntBuffer: varIntBuffer, - varIntSize: varIntSize, - writePushDataInt: writePushDataInt, - writeUInt64LE: writeUInt64LE, - writeVarInt: writeVarInt -} +module.exports = Point }).call(this,require("buffer").Buffer) -},{"./opcodes":47,"buffer":177,"buffer-equals":12,"buffer-reverse":13}],39:[function(require,module,exports){ -var createHash = require('create-hash') +},{"assert":208,"bigi":8,"buffer":223}],48:[function(require,module,exports){ +(function (Buffer){ +var pbkdf2Sync = require('pbkdf2').pbkdf2Sync -function hash160 (buffer) { - return ripemd160(sha256(buffer)) -} +var MAX_VALUE = 0x7fffffff -function hash256 (buffer) { - return sha256(sha256(buffer)) -} +// N = Cpu cost, r = Memory cost, p = parallelization cost +function scrypt (key, salt, N, r, p, dkLen, progressCallback) { + if (N === 0 || (N & (N - 1)) !== 0) throw Error('N must be > 0 and a power of 2') -function ripemd160 (buffer) { - return createHash('rmd160').update(buffer).digest() -} + if (N > MAX_VALUE / 128 / r) throw Error('Parameter N is too large') + if (r > MAX_VALUE / 128 / p) throw Error('Parameter r is too large') -function sha1 (buffer) { - return createHash('sha1').update(buffer).digest() -} + var XY = new Buffer(256 * r) + var V = new Buffer(128 * r * N) -function sha256 (buffer) { - return createHash('sha256').update(buffer).digest() -} + // pseudo global + var B32 = new Int32Array(16) // salsa20_8 + var x = new Int32Array(16) // salsa20_8 + var _X = new Buffer(64) // blockmix_salsa8 -module.exports = { - hash160: hash160, - hash256: hash256, - ripemd160: ripemd160, - sha1: sha1, - sha256: sha256 -} + // pseudo global + var B = pbkdf2Sync(key, salt, 1, p * 128 * r, 'sha256') -},{"create-hash":14}],40:[function(require,module,exports){ -(function (Buffer){ -var createHmac = require('create-hmac') -var typeforce = require('typeforce') -var types = require('./types') + var tickCallback + if (progressCallback) { + var totalOps = p * N * 2 + var currentOp = 0 -var BigInteger = require('bigi') -var ECSignature = require('./ecsignature') + tickCallback = function () { + ++currentOp -var ZERO = new Buffer([0]) -var ONE = new Buffer([1]) + // send progress notifications once every 1,000 ops + if (currentOp % 1000 === 0) { + progressCallback({ + current: currentOp, + total: totalOps, + percent: (currentOp / totalOps) * 100.0 + }) + } + } + } -var ecurve = require('ecurve') -var secp256k1 = ecurve.getCurveByName('secp256k1') + for (var i = 0; i < p; i++) { + smix(B, i * 128 * r, r, N, V, XY) + } -// https://tools.ietf.org/html/rfc6979#section-3.2 -function deterministicGenerateK (hash, x, checkSig) { - typeforce(types.tuple( - types.Hash256bit, - types.Buffer256bit, - types.Function - ), arguments) + return pbkdf2Sync(key, B, 1, dkLen, 'sha256') - var k = new Buffer(32) - var v = new Buffer(32) + // all of these functions are actually moved to the top + // due to function hoisting - // Step A, ignored as hash already provided - // Step B - v.fill(1) + function smix (B, Bi, r, N, V, XY) { + var Xi = 0 + var Yi = 128 * r + var i - // Step C - k.fill(0) + B.copy(XY, Xi, Bi, Bi + Yi) - // Step D - k = createHmac('sha256', k) - .update(v) - .update(ZERO) - .update(x) - .update(hash) - .digest() + for (i = 0; i < N; i++) { + XY.copy(V, i * Yi, Xi, Xi + Yi) + blockmix_salsa8(XY, Xi, Yi, r) - // Step E - v = createHmac('sha256', k).update(v).digest() + if (tickCallback) tickCallback() + } - // Step F - k = createHmac('sha256', k) - .update(v) - .update(ONE) - .update(x) - .update(hash) - .digest() + for (i = 0; i < N; i++) { + var offset = Xi + (2 * r - 1) * 64 + var j = XY.readUInt32LE(offset) & (N - 1) + blockxor(V, j * Yi, XY, Xi, Yi) + blockmix_salsa8(XY, Xi, Yi, r) - // Step G - v = createHmac('sha256', k).update(v).digest() + if (tickCallback) tickCallback() + } - // Step H1/H2a, ignored as tlen === qlen (256 bit) - // Step H2b - v = createHmac('sha256', k).update(v).digest() + XY.copy(B, Bi, Xi, Xi + Yi) + } - var T = BigInteger.fromBuffer(v) + function blockmix_salsa8 (BY, Bi, Yi, r) { + var i - // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA - while (T.signum() <= 0 || T.compareTo(secp256k1.n) >= 0 || !checkSig(T)) { - k = createHmac('sha256', k) - .update(v) - .update(ZERO) - .digest() + arraycopy(BY, Bi + (2 * r - 1) * 64, _X, 0, 64) - v = createHmac('sha256', k).update(v).digest() + for (i = 0; i < 2 * r; i++) { + blockxor(BY, i * 64, _X, 0, 64) + salsa20_8(_X) + arraycopy(_X, 0, BY, Yi + (i * 64), 64) + } - // Step H1/H2a, again, ignored as tlen === qlen (256 bit) - // Step H2b again - v = createHmac('sha256', k).update(v).digest() - T = BigInteger.fromBuffer(v) + for (i = 0; i < r; i++) { + arraycopy(BY, Yi + (i * 2) * 64, BY, Bi + (i * 64), 64) + } + + for (i = 0; i < r; i++) { + arraycopy(BY, Yi + (i * 2 + 1) * 64, BY, Bi + (i + r) * 64, 64) + } } - return T -} + function R (a, b) { + return (a << b) | (a >>> (32 - b)) + } -var N_OVER_TWO = secp256k1.n.shiftRight(1) + function salsa20_8 (B) { + var i -function sign (hash, d) { - typeforce(types.tuple(types.Hash256bit, types.BigInt), arguments) + for (i = 0; i < 16; i++) { + B32[i] = (B[i * 4 + 0] & 0xff) << 0 + B32[i] |= (B[i * 4 + 1] & 0xff) << 8 + B32[i] |= (B[i * 4 + 2] & 0xff) << 16 + B32[i] |= (B[i * 4 + 3] & 0xff) << 24 + // B32[i] = B.readUInt32LE(i*4) <--- this is signficantly slower even in Node.js + } + + arraycopy(B32, 0, x, 0, 16) + + for (i = 8; i > 0; i -= 2) { + x[ 4] ^= R(x[ 0] + x[12], 7) + x[ 8] ^= R(x[ 4] + x[ 0], 9) + x[12] ^= R(x[ 8] + x[ 4], 13) + x[ 0] ^= R(x[12] + x[ 8], 18) + x[ 9] ^= R(x[ 5] + x[ 1], 7) + x[13] ^= R(x[ 9] + x[ 5], 9) + x[ 1] ^= R(x[13] + x[ 9], 13) + x[ 5] ^= R(x[ 1] + x[13], 18) + x[14] ^= R(x[10] + x[ 6], 7) + x[ 2] ^= R(x[14] + x[10], 9) + x[ 6] ^= R(x[ 2] + x[14], 13) + x[10] ^= R(x[ 6] + x[ 2], 18) + x[ 3] ^= R(x[15] + x[11], 7) + x[ 7] ^= R(x[ 3] + x[15], 9) + x[11] ^= R(x[ 7] + x[ 3], 13) + x[15] ^= R(x[11] + x[ 7], 18) + x[ 1] ^= R(x[ 0] + x[ 3], 7) + x[ 2] ^= R(x[ 1] + x[ 0], 9) + x[ 3] ^= R(x[ 2] + x[ 1], 13) + x[ 0] ^= R(x[ 3] + x[ 2], 18) + x[ 6] ^= R(x[ 5] + x[ 4], 7) + x[ 7] ^= R(x[ 6] + x[ 5], 9) + x[ 4] ^= R(x[ 7] + x[ 6], 13) + x[ 5] ^= R(x[ 4] + x[ 7], 18) + x[11] ^= R(x[10] + x[ 9], 7) + x[ 8] ^= R(x[11] + x[10], 9) + x[ 9] ^= R(x[ 8] + x[11], 13) + x[10] ^= R(x[ 9] + x[ 8], 18) + x[12] ^= R(x[15] + x[14], 7) + x[13] ^= R(x[12] + x[15], 9) + x[14] ^= R(x[13] + x[12], 13) + x[15] ^= R(x[14] + x[13], 18) + } + + for (i = 0; i < 16; ++i) B32[i] = x[i] + B32[i] + + for (i = 0; i < 16; i++) { + var bi = i * 4 + B[bi + 0] = (B32[i] >> 0 & 0xff) + B[bi + 1] = (B32[i] >> 8 & 0xff) + B[bi + 2] = (B32[i] >> 16 & 0xff) + B[bi + 3] = (B32[i] >> 24 & 0xff) + // B.writeInt32LE(B32[i], i*4) //<--- this is signficantly slower even in Node.js + } + } + + // naive approach... going back to loop unrolling may yield additional performance + function blockxor (S, Si, D, Di, len) { + for (var i = 0; i < len; i++) { + D[Di + i] ^= S[Si + i] + } + } +} - var x = d.toBuffer(32) - var e = BigInteger.fromBuffer(hash) - var n = secp256k1.n - var G = secp256k1.G +function arraycopy (src, srcPos, dest, destPos, length) { + if (Buffer.isBuffer(src) && Buffer.isBuffer(dest)) { + src.copy(dest, destPos, srcPos, srcPos + length) + } else { + while (length--) { + dest[destPos++] = src[srcPos++] + } + } +} - var r, s - deterministicGenerateK(hash, x, function (k) { - var Q = G.multiply(k) +module.exports = scrypt - if (secp256k1.isInfinity(Q)) return false +}).call(this,require("buffer").Buffer) +},{"buffer":223,"pbkdf2":49}],49:[function(require,module,exports){ +(function (Buffer){ +var createHmac = require('create-hmac') +var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs - r = Q.affineX.mod(n) - if (r.signum() === 0) return false +exports.pbkdf2 = pbkdf2 +function pbkdf2 (password, salt, iterations, keylen, digest, callback) { + if (typeof digest === 'function') { + callback = digest + digest = undefined + } - s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n) - if (s.signum() === 0) return false + if (typeof callback !== 'function') { + throw new Error('No callback provided to pbkdf2') + } - return true + var result = pbkdf2Sync(password, salt, iterations, keylen, digest) + setTimeout(function () { + callback(undefined, result) }) +} - // enforce low S values, see bip62: 'low s values in signatures' - if (s.compareTo(N_OVER_TWO) > 0) { - s = n.subtract(s) +exports.pbkdf2Sync = pbkdf2Sync +function pbkdf2Sync (password, salt, iterations, keylen, digest) { + if (typeof iterations !== 'number') { + throw new TypeError('Iterations not a number') } - return new ECSignature(r, s) -} + if (iterations < 0) { + throw new TypeError('Bad iterations') + } -function verify (hash, signature, Q) { - typeforce(types.tuple( - types.Hash256bit, - types.ECSignature, - types.ECPoint - ), arguments) + if (typeof keylen !== 'number') { + throw new TypeError('Key length not a number') + } - var n = secp256k1.n - var G = secp256k1.G + if (keylen < 0 || keylen > MAX_ALLOC) { + throw new TypeError('Bad key length') + } - var r = signature.r - var s = signature.s + digest = digest || 'sha1' - // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1] - if (r.signum() <= 0 || r.compareTo(n) >= 0) return false - if (s.signum() <= 0 || s.compareTo(n) >= 0) return false + if (!Buffer.isBuffer(password)) password = new Buffer(password, 'binary') + if (!Buffer.isBuffer(salt)) salt = new Buffer(salt, 'binary') - // 1.4.2 H = Hash(M), already done by the user - // 1.4.3 e = H - var e = BigInteger.fromBuffer(hash) + var hLen + var l = 1 + var DK = new Buffer(keylen) + var block1 = new Buffer(salt.length + 4) + salt.copy(block1, 0, 0, salt.length) - // Compute s^-1 - var sInv = s.modInverse(n) + var r + var T - // 1.4.4 Compute u1 = es^−1 mod n - // u2 = rs^−1 mod n - var u1 = e.multiply(sInv).mod(n) - var u2 = r.multiply(sInv).mod(n) + for (var i = 1; i <= l; i++) { + block1.writeUInt32BE(i, salt.length) + var U = createHmac(digest, password).update(block1).digest() - // 1.4.5 Compute R = (xR, yR) - // R = u1G + u2Q - var R = G.multiplyTwo(u1, Q, u2) + if (!hLen) { + hLen = U.length + T = new Buffer(hLen) + l = Math.ceil(keylen / hLen) + r = keylen - (l - 1) * hLen + } - // 1.4.5 (cont.) Enforce R is not at infinity - if (secp256k1.isInfinity(R)) return false + U.copy(T, 0, 0, hLen) - // 1.4.6 Convert the field element R.x to an integer - var xR = R.affineX + for (var j = 1; j < iterations; j++) { + U = createHmac(digest, password).update(U).digest() - // 1.4.7 Set v = xR mod n - var v = xR.mod(n) + for (var k = 0; k < hLen; k++) { + T[k] ^= U[k] + } + } - // 1.4.8 If v = r, output "valid", and if v != r, output "invalid" - return v.equals(r) + var destPos = (i - 1) * hLen + var len = (i === l ? r : hLen) + T.copy(DK, destPos, 0, len) + } + + return DK } -/** - * Recover a public key from a signature. - * - * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public - * Key Recovery Operation". - * - * http://www.secg.org/download/aid-780/sec1-v2.pdf - */ -function recoverPubKey (e, signature, i) { - typeforce(types.tuple( - types.BigInt, - types.ECSignature, - types.UInt2 - ), arguments) - - var n = secp256k1.n - var G = secp256k1.G - var r = signature.r - var s = signature.s +}).call(this,require("buffer").Buffer) +},{"buffer":223,"create-hmac":50}],50:[function(require,module,exports){ +(function (Buffer){ +'use strict'; +var createHash = require('create-hash/browser'); +var inherits = require('inherits') - if (r.signum() <= 0 || r.compareTo(n) >= 0) throw new Error('Invalid r value') - if (s.signum() <= 0 || s.compareTo(n) >= 0) throw new Error('Invalid s value') +var Transform = require('stream').Transform - // A set LSB signifies that the y-coordinate is odd - var isYOdd = i & 1 +var ZEROS = new Buffer(128) +ZEROS.fill(0) - // The more significant bit specifies whether we should use the - // first or second candidate key. - var isSecondKey = i >> 1 +function Hmac(alg, key) { + Transform.call(this) + alg = alg.toLowerCase() + if (typeof key === 'string') { + key = new Buffer(key) + } - // 1.1 Let x = r + jn - var x = isSecondKey ? r.add(n) : r - var R = secp256k1.pointFromX(isYOdd, x) + var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64 - // 1.4 Check that nR is at infinity - var nR = R.multiply(n) - if (!secp256k1.isInfinity(nR)) throw new Error('nR is not a valid curve point') + this._alg = alg + this._key = key - // Compute r^-1 - var rInv = r.modInverse(n) + if (key.length > blocksize) { + key = createHash(alg).update(key).digest() - // Compute -e from e - var eNeg = e.negate().mod(n) + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize) + } - // 1.6.1 Compute Q = r^-1 (sR - eG) - // Q = r^-1 (sR + -eG) - var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv) + var ipad = this._ipad = new Buffer(blocksize) + var opad = this._opad = new Buffer(blocksize) - secp256k1.validate(Q) + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36 + opad[i] = key[i] ^ 0x5C + } - return Q + this._hash = createHash(alg).update(ipad) } -/** - * Calculate pubkey extraction parameter. - * - * When extracting a pubkey from a signature, we have to - * distinguish four different cases. Rather than putting this - * burden on the verifier, Bitcoin includes a 2-bit value with the - * signature. - * - * This function simply tries all four cases and returns the value - * that resulted in a successful pubkey recovery. - */ -function calcPubKeyRecoveryParam (e, signature, Q) { - typeforce(types.tuple( - types.BigInt, - types.ECSignature, - types.ECPoint - ), arguments) - - for (var i = 0; i < 4; i++) { - var Qprime = recoverPubKey(e, signature, i) +inherits(Hmac, Transform) - // 1.6.2 Verify Q - if (Qprime.equals(Q)) { - return i - } - } +Hmac.prototype.update = function (data, enc) { + this._hash.update(data, enc) - throw new Error('Unable to find valid recovery factor') + return this } -module.exports = { - calcPubKeyRecoveryParam: calcPubKeyRecoveryParam, - deterministicGenerateK: deterministicGenerateK, - recoverPubKey: recoverPubKey, - sign: sign, - verify: verify, +Hmac.prototype._transform = function (data, _, next) { + this._hash.update(data) - // TODO: remove - __curve: secp256k1 + next() } -}).call(this,require("buffer").Buffer) -},{"./ecsignature":42,"./types":51,"bigi":7,"buffer":177,"create-hmac":27,"ecurve":30,"typeforce":34}],41:[function(require,module,exports){ -(function (Buffer){ -var bcrypto = require('./crypto') -var bs58check = require('bs58check') -var ecdsa = require('./ecdsa') -var randomBytes = require('randombytes') -var typeforce = require('typeforce') -var types = require('./types') -var wif = require('wif') - -var NETWORKS = require('./networks') -var BigInteger = require('bigi') +Hmac.prototype._flush = function (next) { + this.push(this.digest()) -var ecurve = require('ecurve') -var secp256k1 = ecdsa.__curve + next() +} -function ECPair (d, Q, options) { - if (options) { - typeforce({ - compressed: types.maybe(types.Boolean), - network: types.maybe(types.Network) - }, options) - } +Hmac.prototype.digest = function (enc) { + var h = this._hash.digest() - options = options || {} + return createHash(this._alg).update(this._opad).update(h).digest(enc) +} - if (d) { - if (d.signum() <= 0) throw new Error('Private key must be greater than 0') - if (d.compareTo(secp256k1.n) >= 0) throw new Error('Private key must be less than the curve order') - if (Q) throw new TypeError('Unexpected publicKey parameter') +module.exports = function createHmac(alg, key) { + return new Hmac(alg, key) +} - this.d = d - } else { - typeforce(types.ECPoint, Q) +}).call(this,require("buffer").Buffer) +},{"buffer":223,"create-hash/browser":30,"inherits":98,"stream":445}],51:[function(require,module,exports){ +arguments[4][6][0].apply(exports,arguments) +},{"../package.json":54,"dup":6}],52:[function(require,module,exports){ +arguments[4][7][0].apply(exports,arguments) +},{"./bigi":51,"assert":208,"buffer":223,"dup":7}],53:[function(require,module,exports){ +arguments[4][8][0].apply(exports,arguments) +},{"./bigi":51,"./convert":52,"dup":8}],54:[function(require,module,exports){ +module.exports={ + "name": "bigi", + "version": "1.4.1", + "description": "Big integers.", + "keywords": [ + "cryptography", + "math", + "bitcoin", + "arbitrary", + "precision", + "arithmetic", + "big", + "integer", + "int", + "number", + "biginteger", + "bigint", + "bignumber", + "decimal", + "float" + ], + "devDependencies": { + "coveralls": "^2.11.2", + "istanbul": "^0.3.5", + "jshint": "^2.5.1", + "mocha": "^2.1.0", + "mochify": "^2.1.0" + }, + "repository": { + "url": "git+https://github.com/cryptocoinjs/bigi.git", + "type": "git" + }, + "main": "./lib/index.js", + "scripts": { + "browser-test": "mochify --wd -R spec", + "test": "_mocha -- test/*.js", + "jshint": "jshint --config jshint.json lib/*.js ; true", + "unit": "mocha", + "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js", + "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info" + }, + "dependencies": {}, + "testling": { + "files": "test/*.js", + "harness": "mocha", + "browsers": [ + "ie/9..latest", + "firefox/latest", + "chrome/latest", + "safari/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + }, + "gitHead": "7d034a1b38ca90f68daa9de472dda2fb813836f1", + "bugs": { + "url": "https://github.com/cryptocoinjs/bigi/issues" + }, + "homepage": "https://github.com/cryptocoinjs/bigi#readme", + "_id": "bigi@1.4.1", + "_shasum": "726e8ab08d1fe1dfb8aa6bb6309bffecf93a21b7", + "_from": "bigi@^1.4.0", + "_npmVersion": "2.10.1", + "_nodeVersion": "2.1.0", + "_npmUser": { + "name": "jprichardson", + "email": "jprichardson@gmail.com" + }, + "maintainers": [ + { + "name": "midnightlightning", + "email": "boydb@midnightdesign.ws" + }, + { + "name": "sidazhang", + "email": "sidazhang89@gmail.com" + }, + { + "name": "nadav", + "email": "npm@shesek.info" + }, + { + "name": "jprichardson", + "email": "jprichardson@gmail.com" + } + ], + "dist": { + "shasum": "726e8ab08d1fe1dfb8aa6bb6309bffecf93a21b7", + "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.1.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.1.tgz", + "readme": "ERROR: No README data found!" +} - this.__Q = Q - } +},{}],55:[function(require,module,exports){ +(function (Buffer){ +// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki +// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S] +// NOTE: SIGHASH byte ignored AND restricted, truncate before use - this.compressed = options.compressed === undefined ? true : options.compressed - this.network = options.network || NETWORKS.bitcoin -} +function check (buffer) { + if (buffer.length < 8) return false + if (buffer.length > 72) return false + if (buffer[0] !== 0x30) return false + if (buffer[1] !== buffer.length - 2) return false + if (buffer[2] !== 0x02) return false -Object.defineProperty(ECPair.prototype, 'Q', { - get: function () { - if (!this.__Q && this.d) { - this.__Q = secp256k1.G.multiply(this.d) - } + var lenR = buffer[3] + if (lenR === 0) return false + if (5 + lenR >= buffer.length) return false + if (buffer[4 + lenR] !== 0x02) return false - return this.__Q - } -}) + var lenS = buffer[5 + lenR] + if (lenS === 0) return false + if ((6 + lenR + lenS) !== buffer.length) return false -ECPair.fromPublicKeyBuffer = function (buffer, network) { - var Q = ecurve.Point.decodeFrom(secp256k1, buffer) + if (buffer[4] & 0x80) return false + if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false - return new ECPair(null, Q, { - compressed: Q.compressed, - network: network - }) + if (buffer[lenR + 6] & 0x80) return false + if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false + return true } -ECPair.fromWIF = function (string, network) { - network = network || NETWORKS.bitcoin - var buffer = bs58check.decode(string) +function decode (buffer) { + if (buffer.length < 8) throw new Error('DER sequence length is too short') + if (buffer.length > 72) throw new Error('DER sequence length is too long') + if (buffer[0] !== 0x30) throw new Error('Expected DER sequence') + if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid') + if (buffer[2] !== 0x02) throw new Error('Expected DER integer') - if (types.Array(network)) { - var version = buffer[0] + var lenR = buffer[3] + if (lenR === 0) throw new Error('R length is zero') + if (5 + lenR >= buffer.length) throw new Error('R length is too long') + if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)') - network = network.filter(function (network) { - return version === network.wif - }).pop() || {} - } + var lenS = buffer[5 + lenR] + if (lenS === 0) throw new Error('S length is zero') + if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid') - var decoded = wif.decodeRaw(network.wif, buffer) - var d = BigInteger.fromBuffer(decoded.d) + if (buffer[4] & 0x80) throw new Error('R value is negative') + if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded') - return new ECPair(d, null, { - compressed: decoded.compressed, - network: network - }) + if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative') + if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded') + + // non-BIP66 - extract R, S values + return { + r: buffer.slice(4, 4 + lenR), + s: buffer.slice(6 + lenR) + } } -ECPair.makeRandom = function (options) { - options = options || {} +/* + * Expects r and s to be positive DER integers. + * + * The DER format uses the most significant bit as a sign bit (& 0x80). + * If the significant bit is set AND the integer is positive, a 0x00 is prepended. + * + * Examples: + * + * 0 => 0x00 + * 1 => 0x01 + * -1 => 0xff + * 127 => 0x7f + * -127 => 0x81 + * 128 => 0x0080 + * -128 => 0x80 + * 255 => 0x00ff + * -255 => 0xff01 + * 16300 => 0x3fac + * -16300 => 0xc054 + * 62300 => 0x00f35c + * -62300 => 0xff0ca4 +*/ +function encode (r, s) { + var lenR = r.length + var lenS = s.length + if (lenR === 0) throw new Error('R length is zero') + if (lenS === 0) throw new Error('S length is zero') + if (lenR > 33) throw new Error('R length is too long') + if (lenS > 33) throw new Error('S length is too long') + if (r[0] & 0x80) throw new Error('R value is negative') + if (s[0] & 0x80) throw new Error('S value is negative') + if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded') + if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded') - var rng = options.rng || randomBytes + var signature = new Buffer(6 + lenR + lenS) - var d - do { - var buffer = rng(32) - typeforce(types.Buffer256bit, buffer) + // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S] + signature[0] = 0x30 + signature[1] = signature.length - 2 + signature[2] = 0x02 + signature[3] = r.length + r.copy(signature, 4) + signature[4 + lenR] = 0x02 + signature[5 + lenR] = s.length + s.copy(signature, 6 + lenR) - d = BigInteger.fromBuffer(buffer) - } while (d.signum() <= 0 || d.compareTo(secp256k1.n) >= 0) + return signature +} - return new ECPair(d, null, options) +module.exports = { + check: check, + decode: decode, + encode: encode } -ECPair.prototype.getAddress = function () { - var pubKey = this.getPublicKeyBuffer() - var pubKeyHash = bcrypto.hash160(pubKey) +}).call(this,require("buffer").Buffer) +},{"buffer":223}],56:[function(require,module,exports){ +(function (Buffer){ +'use strict' - var payload = new Buffer(21) - payload.writeUInt8(this.network.pubKeyHash, 0) - pubKeyHash.copy(payload, 1) +var base58 = require('bs58') +var createHash = require('create-hash') - return bs58check.encode(payload) +// SHA256(SHA256(buffer)) +function sha256x2 (buffer) { + buffer = createHash('sha256').update(buffer).digest() + return createHash('sha256').update(buffer).digest() } -ECPair.prototype.getNetwork = function () { - return this.network -} +// Encode a buffer as a base58-check encoded string +function encode (payload) { + var checksum = sha256x2(payload).slice(0, 4) -ECPair.prototype.getPublicKeyBuffer = function () { - return this.Q.getEncoded(this.compressed) + return base58.encode(Buffer.concat([ + payload, + checksum + ])) } -ECPair.prototype.sign = function (hash) { - if (!this.d) throw new Error('Missing private key') +// Decode a base58-check encoded string to a buffer +function decode (string) { + var buffer = new Buffer(base58.decode(string)) - return ecdsa.sign(hash, this.d) -} + var payload = buffer.slice(0, -4) + var checksum = buffer.slice(-4) + var newChecksum = sha256x2(payload).slice(0, 4) -ECPair.prototype.toWIF = function () { - if (!this.d) throw new Error('Missing private key') + for (var i = 0; i < newChecksum.length; ++i) { + if (newChecksum[i] === checksum[i]) continue - return wif.encode(this.network.wif, this.d.toBuffer(32), this.compressed) -} + throw new Error('Invalid checksum') + } -ECPair.prototype.verify = function (hash, signature) { - return ecdsa.verify(hash, signature, this.Q) + return payload } -module.exports = ECPair +module.exports = { + encode: encode, + decode: decode +} }).call(this,require("buffer").Buffer) -},{"./crypto":39,"./ecdsa":40,"./networks":46,"./types":51,"bigi":7,"bs58check":10,"buffer":177,"ecurve":30,"randombytes":33,"typeforce":34,"wif":35}],42:[function(require,module,exports){ +},{"bs58":57,"buffer":223,"create-hash":60}],57:[function(require,module,exports){ +arguments[4][29][0].apply(exports,arguments) +},{"dup":29}],58:[function(require,module,exports){ (function (Buffer){ -var bip66 = require('bip66') -var typeforce = require('typeforce') -var types = require('./types') - -var BigInteger = require('bigi') +'use strict'; +module.exports = function (a, b) { + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError('Arguments must be Buffers'); + } -function ECSignature (r, s) { - typeforce(types.tuple(types.BigInt, types.BigInt), arguments) + if (a === b) { + return true; + } - this.r = r - this.s = s -} + if (typeof a.equals === 'function') { + return a.equals(b); + } -ECSignature.parseCompact = function (buffer) { - if (buffer.length !== 65) throw new Error('Invalid signature length') + if (a.length !== b.length) { + return false; + } - var flagByte = buffer.readUInt8(0) - 27 - if (flagByte !== (flagByte & 7)) throw new Error('Invalid signature parameter') + for (var i = 0; i < a.length; i++) { + if (a[i] !== b[i]) { + return false; + } + } - var compressed = !!(flagByte & 4) - var recoveryParam = flagByte & 3 + return true; +}; - var r = BigInteger.fromBuffer(buffer.slice(1, 33)) - var s = BigInteger.fromBuffer(buffer.slice(33)) +}).call(this,{"isBuffer":require("../../../../../twister-react/node_modules/browserify/node_modules/insert-module-globals/node_modules/is-buffer/index.js")}) +},{"../../../../../twister-react/node_modules/browserify/node_modules/insert-module-globals/node_modules/is-buffer/index.js":424}],59:[function(require,module,exports){ +(function (Buffer){ +module.exports = function reverse (a) { + var length = a.length + var buffer = new Buffer(length) - return { - compressed: compressed, - i: recoveryParam, - signature: new ECSignature(r, s) + for (var i = 0, j = length - 1; i < length; ++i, --j) { + buffer[i] = a[j] } + + return buffer } -ECSignature.fromDER = function (buffer) { - var decode = bip66.decode(buffer) - var r = BigInteger.fromDERInteger(decode.r) - var s = BigInteger.fromDERInteger(decode.s) +}).call(this,require("buffer").Buffer) +},{"buffer":223}],60:[function(require,module,exports){ +arguments[4][30][0].apply(exports,arguments) +},{"./md5":62,"buffer":223,"cipher-base":63,"dup":30,"inherits":98,"ripemd160":64,"sha.js":66}],61:[function(require,module,exports){ +arguments[4][31][0].apply(exports,arguments) +},{"buffer":223,"dup":31}],62:[function(require,module,exports){ +arguments[4][32][0].apply(exports,arguments) +},{"./helpers":61,"dup":32}],63:[function(require,module,exports){ +arguments[4][24][0].apply(exports,arguments) +},{"buffer":223,"dup":24,"inherits":98,"stream":445,"string_decoder":452}],64:[function(require,module,exports){ +arguments[4][34][0].apply(exports,arguments) +},{"buffer":223,"dup":34}],65:[function(require,module,exports){ +arguments[4][35][0].apply(exports,arguments) +},{"buffer":223,"dup":35}],66:[function(require,module,exports){ +arguments[4][36][0].apply(exports,arguments) +},{"./sha":67,"./sha1":68,"./sha224":69,"./sha256":70,"./sha384":71,"./sha512":72,"dup":36}],67:[function(require,module,exports){ +arguments[4][37][0].apply(exports,arguments) +},{"./hash":65,"buffer":223,"dup":37,"inherits":98}],68:[function(require,module,exports){ +arguments[4][38][0].apply(exports,arguments) +},{"./hash":65,"buffer":223,"dup":38,"inherits":98}],69:[function(require,module,exports){ +arguments[4][39][0].apply(exports,arguments) +},{"./hash":65,"./sha256":70,"buffer":223,"dup":39,"inherits":98}],70:[function(require,module,exports){ +arguments[4][40][0].apply(exports,arguments) +},{"./hash":65,"buffer":223,"dup":40,"inherits":98}],71:[function(require,module,exports){ +arguments[4][41][0].apply(exports,arguments) +},{"./hash":65,"./sha512":72,"buffer":223,"dup":41,"inherits":98}],72:[function(require,module,exports){ +arguments[4][42][0].apply(exports,arguments) +},{"./hash":65,"buffer":223,"dup":42,"inherits":98}],73:[function(require,module,exports){ +arguments[4][50][0].apply(exports,arguments) +},{"buffer":223,"create-hash/browser":60,"dup":50,"inherits":98,"stream":445}],74:[function(require,module,exports){ +arguments[4][43][0].apply(exports,arguments) +},{"./point":78,"assert":208,"bigi":53,"dup":43}],75:[function(require,module,exports){ +arguments[4][44][0].apply(exports,arguments) +},{"dup":44}],76:[function(require,module,exports){ +arguments[4][45][0].apply(exports,arguments) +},{"./curve":74,"./names":77,"./point":78,"dup":45}],77:[function(require,module,exports){ +arguments[4][46][0].apply(exports,arguments) +},{"./curve":74,"./curves":75,"bigi":53,"dup":46}],78:[function(require,module,exports){ +arguments[4][47][0].apply(exports,arguments) +},{"assert":208,"bigi":53,"buffer":223,"dup":47}],79:[function(require,module,exports){ +(function (process,global,Buffer){ +'use strict'; - return new ECSignature(r, s) +var crypto = global.crypto || global.msCrypto +if(crypto && crypto.getRandomValues) { + module.exports = randomBytes; +} else { + module.exports = oldBrowser; } +function randomBytes(size, cb) { + var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array + /* This will not work in older browsers. + * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues + */ -// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed) -ECSignature.parseScriptSignature = function (buffer) { - var hashType = buffer.readUInt8(buffer.length - 1) - var hashTypeMod = hashType & ~0x80 - - if (hashTypeMod <= 0x00 || hashTypeMod >= 0x04) throw new Error('Invalid hashType ' + hashType) - - return { - signature: ECSignature.fromDER(buffer.slice(0, -1)), - hashType: hashType + crypto.getRandomValues(bytes); + if (typeof cb === 'function') { + return process.nextTick(function () { + cb(null, bytes); + }); } + return bytes; +} +function oldBrowser() { + throw new Error( + 'secure random number generation not supported by this browser\n'+ + 'use chrome, FireFox or Internet Explorer 11' + ) } -ECSignature.prototype.toCompact = function (i, compressed) { - if (compressed) { - i += 4 - } - - i += 27 +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer) +},{"_process":427,"buffer":223}],80:[function(require,module,exports){ +(function (Buffer){ +var inherits = require('inherits') - var buffer = new Buffer(65) - buffer.writeUInt8(i, 0) +function TfTypeError (type, value) { + this.tfError = Error.call(this) + this.tfType = type + this.tfValue = value - this.r.toBuffer(32).copy(buffer, 1) - this.s.toBuffer(32).copy(buffer, 33) + var message + Object.defineProperty(this, 'message', { + get: function () { + if (message) return message + message = tfErrorString(type, value) - return buffer + return message + } + }) } -ECSignature.prototype.toDER = function () { - var r = new Buffer(this.r.toDERInteger()) - var s = new Buffer(this.s.toDERInteger()) - - return bip66.encode(r, s) -} +inherits(TfTypeError, Error) +Object.defineProperty(TfTypeError, 'stack', { get: function () { return this.tfError.stack } }) -ECSignature.prototype.toScriptSignature = function (hashType) { - var hashTypeMod = hashType & ~0x80 - if (hashTypeMod <= 0 || hashTypeMod >= 4) throw new Error('Invalid hashType ' + hashType) +function TfPropertyTypeError (type, property, value, error) { + this.tfError = error || Error.call(this) + this.tfProperty = property + this.tfType = type + this.tfValue = value - var hashTypeBuffer = new Buffer(1) - hashTypeBuffer.writeUInt8(hashType, 0) + var message + Object.defineProperty(this, 'message', { + get: function () { + if (message) return message + if (type) { + message = tfPropertyErrorString(type, property, value) + } else { + message = 'Unexpected property "' + property + '"' + } - return Buffer.concat([this.toDER(), hashTypeBuffer]) + return message + } + }) } -module.exports = ECSignature +inherits(TfPropertyTypeError, Error) +Object.defineProperty(TfPropertyTypeError, 'stack', { get: function () { return this.tfError.stack } }) -}).call(this,require("buffer").Buffer) -},{"./types":51,"bigi":7,"bip66":9,"buffer":177,"typeforce":34}],43:[function(require,module,exports){ -(function (Buffer){ -var base58check = require('bs58check') -var bcrypto = require('./crypto') -var createHmac = require('create-hmac') -var typeforce = require('typeforce') -var types = require('./types') -var NETWORKS = require('./networks') +TfPropertyTypeError.prototype.asChildOf = function (property) { + return new TfPropertyTypeError(this.tfType, property + '.' + this.tfProperty, this.tfValue, this.tfError) +} -var BigInteger = require('bigi') -var ECPair = require('./ecpair') +function getFunctionName (fn) { + return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1] +} -var ecurve = require('ecurve') -var curve = ecurve.getCurveByName('secp256k1') +function getValueTypeName (value) { + if (nativeTypes.Null(value)) return '' -function HDNode (keyPair, chainCode) { - typeforce(types.tuple('ECPair', types.Buffer256bit), arguments) + return getFunctionName(value.constructor) +} - if (!keyPair.compressed) throw new TypeError('BIP32 only allows compressed keyPairs') +function getValue (value) { + if (nativeTypes.Function(value)) return '' + if (nativeTypes.String(value)) return JSON.stringify(value) + if (value && nativeTypes.Object(value)) return '' - this.keyPair = keyPair - this.chainCode = chainCode - this.depth = 0 - this.index = 0 - this.parentFingerprint = 0x00000000 + return value } -HDNode.HIGHEST_BIT = 0x80000000 -HDNode.LENGTH = 78 -HDNode.MASTER_SECRET = new Buffer('Bitcoin seed') +function tfJSON (type) { + if (nativeTypes.Function(type)) return type.toJSON ? type.toJSON() : getFunctionName(type) + if (nativeTypes.Array(type)) return 'Array' + if (type && nativeTypes.Object(type)) return 'Object' -HDNode.fromSeedBuffer = function (seed, network) { - typeforce(types.tuple(types.Buffer, types.maybe(types.Network)), arguments) + return type || '' +} - if (seed.length < 16) throw new TypeError('Seed should be at least 128 bits') - if (seed.length > 64) throw new TypeError('Seed should be at most 512 bits') +function stfJSON (type) { + type = tfJSON(type) - var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest() - var IL = I.slice(0, 32) - var IR = I.slice(32) + return nativeTypes.Object(type) ? JSON.stringify(type) : type +} - // In case IL is 0 or >= n, the master key is invalid - // This is handled by the ECPair constructor - var pIL = BigInteger.fromBuffer(IL) - var keyPair = new ECPair(pIL, null, { - network: network - }) +function tfErrorString (type, value) { + var valueTypeName = getValueTypeName(value) + var valueValue = getValue(value) - return new HDNode(keyPair, IR) + return 'Expected ' + stfJSON(type) + ', got' + (valueTypeName !== '' ? ' ' + valueTypeName : '') + (valueValue !== '' ? ' ' + valueValue : '') } -HDNode.fromSeedHex = function (hex, network) { - return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network) +function tfPropertyErrorString (type, name, value) { + return tfErrorString('property \"' + stfJSON(name) + '\" of type ' + stfJSON(type), value) } -HDNode.fromBase58 = function (string, networks) { - var buffer = base58check.decode(string) - if (buffer.length !== 78) throw new Error('Invalid buffer length') +var nativeTypes = { + Array: function (value) { return value !== null && value !== undefined && value.constructor === Array }, + Boolean: function (value) { return typeof value === 'boolean' }, + Buffer: function (value) { return Buffer.isBuffer(value) }, + Function: function (value) { return typeof value === 'function' }, + Null: function (value) { return value === undefined || value === null }, + Number: function (value) { return typeof value === 'number' }, + Object: function (value) { return typeof value === 'object' }, + String: function (value) { return typeof value === 'string' }, + '': function () { return true } +} - // 4 bytes: version bytes - var version = buffer.readUInt32BE(0) - var network +var otherTypes = { + arrayOf: function arrayOf (type) { + function arrayOf (value, strict) { + if (!nativeTypes.Array(value)) return false - // list of networks? - if (Array.isArray(networks)) { - network = networks.filter(function (network) { - return version === network.bip32.private || - version === network.bip32.public - }).pop() || {} + return value.every(function (x) { + return typeforce(type, x, strict, arrayOf) + }) + } + arrayOf.toJSON = function () { return [tfJSON(type)] } - // otherwise, assume a network object (or default to bitcoin) - } else { - network = networks || NETWORKS.bitcoin - } + return arrayOf + }, - if (version !== network.bip32.private && - version !== network.bip32.public) throw new Error('Invalid network') + maybe: function maybe (type) { + function maybe (value, strict) { + return nativeTypes.Null(value) || typeforce(type, value, strict, maybe) + } + maybe.toJSON = function () { return '?' + stfJSON(type) } - // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ... - var depth = buffer[4] + return maybe + }, - // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key) - var parentFingerprint = buffer.readUInt32BE(5) - if (depth === 0) { - if (parentFingerprint !== 0x00000000) throw new Error('Invalid parent fingerprint') - } + object: function object (type) { + function object (value, strict) { + if (!nativeTypes.Object(value)) return false + if (nativeTypes.Null(value)) return false - // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized. - // This is encoded in MSB order. (0x00000000 if master key) - var index = buffer.readUInt32BE(9) - if (depth === 0 && index !== 0) throw new Error('Invalid index') + var propertyName - // 32 bytes: the chain code - var chainCode = buffer.slice(13, 45) - var keyPair + try { + for (propertyName in type) { + var propertyType = type[propertyName] + var propertyValue = value[propertyName] - // 33 bytes: private key data (0x00 + k) - if (version === network.bip32.private) { - if (buffer.readUInt8(45) !== 0x00) throw new Error('Invalid private key') + typeforce(propertyType, propertyValue, strict) + } + } catch (e) { + if (e instanceof TfPropertyTypeError) { + throw e.asChildOf(propertyName) + } else if (e instanceof TfTypeError) { + throw new TfPropertyTypeError(e.tfType, propertyName, e.tfValue, e.tfError) + } - var d = BigInteger.fromBuffer(buffer.slice(46, 78)) + throw e + } - keyPair = new ECPair(d, null, { - network: network - }) + if (strict) { + for (propertyName in value) { + if (type[propertyName]) continue - // 33 bytes: public key data (0x02 + X or 0x03 + X) - } else { - var Q = ecurve.Point.decodeFrom(curve, buffer.slice(45, 78)) - if (!Q.compressed) throw new Error('Invalid public key') + throw new TfPropertyTypeError(undefined, propertyName) + } + } - // Verify that the X coordinate in the public point corresponds to a point on the curve. - // If not, the extended public key is invalid. - curve.validate(Q) + return true + } + object.toJSON = function () { return tfJSON(type) } - keyPair = new ECPair(null, Q, { - network: network - }) - } + return object + }, - var hd = new HDNode(keyPair, chainCode) - hd.depth = depth - hd.index = index - hd.parentFingerprint = parentFingerprint + map: function map (propertyType, propertyKeyType) { + function map (value, strict) { + typeforce(nativeTypes.Object, value, strict) + if (nativeTypes.Null(value)) return false - return hd -} + var propertyName -HDNode.prototype.getAddress = function () { - return this.keyPair.getAddress() -} + try { + for (propertyName in value) { + if (propertyKeyType) { + typeforce(propertyKeyType, propertyName, strict) + } -HDNode.prototype.getIdentifier = function () { - return bcrypto.hash160(this.keyPair.getPublicKeyBuffer()) -} + var propertyValue = value[propertyName] + typeforce(propertyType, propertyValue, strict) + } + } catch (e) { + if (e instanceof TfPropertyTypeError) { + throw e.asChildOf(propertyName) + } else if (e instanceof TfTypeError) { + throw new TfPropertyTypeError(e.tfType, propertyKeyType || propertyName, e.tfValue) + } -HDNode.prototype.getFingerprint = function () { - return this.getIdentifier().slice(0, 4) -} + throw e + } -HDNode.prototype.getNetwork = function () { - return this.keyPair.getNetwork() -} + return true + } -HDNode.prototype.getPublicKeyBuffer = function () { - return this.keyPair.getPublicKeyBuffer() -} + if (propertyKeyType) { + map.toJSON = function () { return '{' + stfJSON(propertyKeyType) + ': ' + stfJSON(propertyType) + '}' } + } else { + map.toJSON = function () { return '{' + stfJSON(propertyType) + '}' } + } -HDNode.prototype.neutered = function () { - var neuteredKeyPair = new ECPair(null, this.keyPair.Q, { - network: this.keyPair.network - }) + return map + }, - var neutered = new HDNode(neuteredKeyPair, this.chainCode) - neutered.depth = this.depth - neutered.index = this.index - neutered.parentFingerprint = this.parentFingerprint + oneOf: function oneOf () { + var types = [].slice.call(arguments) - return neutered -} + function oneOf (value, strict) { + return types.some(function (type) { + try { + return typeforce(type, value, strict) + } catch (e) { + if (e instanceof TfTypeError || e instanceof TfPropertyTypeError) return false -HDNode.prototype.sign = function (hash) { - return this.keyPair.sign(hash) -} + throw e + } + }) + } + oneOf.toJSON = function () { return types.map(stfJSON).join('|') } -HDNode.prototype.verify = function (hash, signature) { - return this.keyPair.verify(hash, signature) -} + return oneOf + }, -HDNode.prototype.toBase58 = function (__isPrivate) { - if (__isPrivate !== undefined) throw new TypeError('Unsupported argument in 2.0.0') + quacksLike: function quacksLike (type) { + function quacksLike (value, strict) { + return type === getValueTypeName(value) + } + quacksLike.toJSON = function () { return type } - // Version - var network = this.keyPair.network - var version = this.keyPair.d ? network.bip32.private : network.bip32.public - var buffer = new Buffer(78) + return quacksLike + }, - // 4 bytes: version bytes - buffer.writeUInt32BE(version, 0) + tuple: function tuple () { + var types = [].slice.call(arguments) - // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, .... - buffer.writeUInt8(this.depth, 4) + function tuple (value, strict) { + return types.every(function (type, i) { + return typeforce(type, value[i], strict) + }) + } + tuple.toJSON = function () { return '(' + types.map(stfJSON).join(', ') + ')' } - // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key) - buffer.writeUInt32BE(this.parentFingerprint, 5) + return tuple + }, - // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized. - // This is encoded in big endian. (0x00000000 if master key) - buffer.writeUInt32BE(this.index, 9) + value: function value (expected) { + function value (actual) { + return actual === expected + } + value.toJSON = function () { return expected } - // 32 bytes: the chain code - this.chainCode.copy(buffer, 13) + return value + } +} - // 33 bytes: the public key or private key data - if (this.keyPair.d) { - // 0x00 + k for private keys - buffer.writeUInt8(0, 45) - this.keyPair.d.toBuffer(32).copy(buffer, 46) +function compile (type) { + if (nativeTypes.String(type)) { + if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1))) - // 33 bytes: the public key - } else { - // X9.62 encoding for public keys - this.keyPair.getPublicKeyBuffer().copy(buffer, 45) + return nativeTypes[type] || otherTypes.quacksLike(type) + } else if (type && nativeTypes.Object(type)) { + if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0])) + + var compiled = {} + + for (var propertyName in type) { + compiled[propertyName] = compile(type[propertyName]) + } + + return otherTypes.object(compiled) + } else if (nativeTypes.Function(type)) { + return type } - return base58check.encode(buffer) + return otherTypes.value(type) } -// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions -HDNode.prototype.derive = function (index) { - var isHardened = index >= HDNode.HIGHEST_BIT - var data = new Buffer(37) +function typeforce (type, value, strict, surrogate) { + if (nativeTypes.Function(type)) { + if (type(value, strict)) return true - // Hardened child - if (isHardened) { - if (!this.keyPair.d) throw new TypeError('Could not derive hardened child key') + throw new TfTypeError(surrogate || type, value) + } - // data = 0x00 || ser256(kpar) || ser32(index) - data[0] = 0x00 - this.keyPair.d.toBuffer(32).copy(data, 1) - data.writeUInt32BE(index, 33) + // JIT + return typeforce(compile(type), value, strict) +} - // Normal child - } else { - // data = serP(point(kpar)) || ser32(index) - // = serP(Kpar) || ser32(index) - this.keyPair.getPublicKeyBuffer().copy(data, 0) - data.writeUInt32BE(index, 33) - } +// assign all types to typeforce function +var typeName +Object.keys(nativeTypes).forEach(function (typeName) { + var nativeType = nativeTypes[typeName] + nativeType.toJSON = function () { return typeName } - var I = createHmac('sha512', this.chainCode).update(data).digest() - var IL = I.slice(0, 32) - var IR = I.slice(32) + typeforce[typeName] = nativeType +}) - var pIL = BigInteger.fromBuffer(IL) +for (typeName in otherTypes) { + typeforce[typeName] = otherTypes[typeName] +} - // In case parse256(IL) >= n, proceed with the next value for i - if (pIL.compareTo(curve.n) >= 0) { - return this.derive(index + 1) - } +module.exports = typeforce +module.exports.compile = compile - // Private parent key -> private child key - var derivedKeyPair - if (this.keyPair.d) { - // ki = parse256(IL) + kpar (mod n) - var ki = pIL.add(this.keyPair.d).mod(curve.n) +// export Error objects +module.exports.TfTypeError = TfTypeError +module.exports.TfPropertyTypeError = TfPropertyTypeError - // In case ki == 0, proceed with the next value for i - if (ki.signum() === 0) { - return this.derive(index + 1) - } +}).call(this,{"isBuffer":require("../../../../../twister-react/node_modules/browserify/node_modules/insert-module-globals/node_modules/is-buffer/index.js")}) +},{"../../../../../twister-react/node_modules/browserify/node_modules/insert-module-globals/node_modules/is-buffer/index.js":424,"inherits":98}],81:[function(require,module,exports){ +(function (Buffer){ +var bs58check = require('bs58check') - derivedKeyPair = new ECPair(ki, null, { - network: this.keyPair.network - }) +function decodeRaw (version, buffer) { + if (buffer[0] !== version) throw new Error('Invalid network version') - // Public parent key -> public child key - } else { - // Ki = point(parse256(IL)) + Kpar - // = G*IL + Kpar - var Ki = curve.G.multiply(pIL).add(this.keyPair.Q) + // compression flag? + if (buffer.length === 34) { + if (buffer[33] !== 0x01) throw new Error('Invalid compression flag') - // In case Ki is the point at infinity, proceed with the next value for i - if (curve.isInfinity(Ki)) { - return this.derive(index + 1) + // truncate the version byte/compression flag + return { + version: buffer[0], + d: buffer.slice(1, -1), + compressed: true } - - derivedKeyPair = new ECPair(null, Ki, { - network: this.keyPair.network - }) } - var hd = new HDNode(derivedKeyPair, IR) - hd.depth = this.depth + 1 - hd.index = index - hd.parentFingerprint = this.getFingerprint().readUInt32BE(0) + // no compression flag + if (buffer.length !== 33) throw new Error('Invalid WIF length') - return hd + return { + version: buffer[0], + d: buffer.slice(1), + compressed: false + } } -HDNode.prototype.deriveHardened = function (index) { - // Only derives hardened private keys by default - return this.derive(index + HDNode.HIGHEST_BIT) +function decode (version, string) { + return decodeRaw(version, bs58check.decode(string)) } -HDNode.prototype.toString = HDNode.prototype.toBase58 +function encodeRaw (version, d, compressed) { + var buffer = new Buffer(compressed ? 34 : 33) -module.exports = HDNode + buffer.writeUInt8(version, 0) + d.copy(buffer, 1) -}).call(this,require("buffer").Buffer) -},{"./crypto":39,"./ecpair":41,"./networks":46,"./types":51,"bigi":7,"bs58check":10,"buffer":177,"create-hmac":27,"ecurve":30,"typeforce":34}],44:[function(require,module,exports){ -module.exports = { - Block: require('./block'), - ECPair: require('./ecpair'), - ECSignature: require('./ecsignature'), - HDNode: require('./hdnode'), - Transaction: require('./transaction'), - TransactionBuilder: require('./transaction_builder'), + if (compressed) { + buffer[33] = 0x01 + } - address: require('./address'), - bufferutils: require('./bufferutils'), - crypto: require('./crypto'), - message: require('./message'), - networks: require('./networks'), - opcodes: require('./opcodes'), - script: require('./script') + return buffer +} + +function encode (version, d, compressed) { + return bs58check.encode(encodeRaw(version, d, compressed)) +} + +module.exports = { + decode: decode, + decodeRaw: decodeRaw, + encode: encode, + encodeRaw: encodeRaw } -},{"./address":36,"./block":37,"./bufferutils":38,"./crypto":39,"./ecpair":41,"./ecsignature":42,"./hdnode":43,"./message":45,"./networks":46,"./opcodes":47,"./script":48,"./transaction":49,"./transaction_builder":50}],45:[function(require,module,exports){ +}).call(this,require("buffer").Buffer) +},{"bs58check":56,"buffer":223}],82:[function(require,module,exports){ (function (Buffer){ -var bufferutils = require('./bufferutils') -var bcrypto = require('./crypto') -var ecdsa = require('./ecdsa') +var bs58check = require('bs58check') +var bscript = require('./script') var networks = require('./networks') +var typeforce = require('typeforce') +var types = require('./types') -var BigInteger = require('bigi') -var ECPair = require('./ecpair') -var ECSignature = require('./ecsignature') +function fromBase58Check (address) { + var payload = bs58check.decode(address) + if (payload.length < 21) throw new TypeError(address + ' is too short') + if (payload.length > 21) throw new TypeError(address + ' is too long') -function magicHash (message, network) { - var messagePrefix = new Buffer(network.messagePrefix) - var messageBuffer = new Buffer(message) - var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length) + var version = payload[0] + var hash = payload.slice(1) - var buffer = Buffer.concat([messagePrefix, lengthBuffer, messageBuffer]) - return bcrypto.hash256(buffer) + return { hash: hash, version: version } } -function sign (keyPair, message, network) { +function fromOutputScript (scriptPubKey, network) { network = network || networks.bitcoin - var hash = magicHash(message, network) - var signature = keyPair.sign(hash) - var e = BigInteger.fromBuffer(hash) - var i = ecdsa.calcPubKeyRecoveryParam(e, signature, keyPair.Q) + if (bscript.isPubKeyHashOutput(scriptPubKey)) return toBase58Check(scriptPubKey.slice(3, 23), network.pubKeyHash) + if (bscript.isScriptHashOutput(scriptPubKey)) return toBase58Check(scriptPubKey.slice(2, 22), network.scriptHash) - return signature.toCompact(i, keyPair.compressed) + throw new Error(bscript.toASM(scriptPubKey) + ' has no matching Address') } -function verify (address, signature, message, network) { - if (!Buffer.isBuffer(signature)) { - signature = new Buffer(signature, 'base64') - } +function toBase58Check (hash, version) { + typeforce(types.tuple(types.Hash160bit, types.UInt8), arguments) - network = network || networks.bitcoin + var payload = new Buffer(21) + payload.writeUInt8(version, 0) + hash.copy(payload, 1) - var hash = magicHash(message, network) - var parsed = ECSignature.parseCompact(signature) - var e = BigInteger.fromBuffer(hash) - var Q = ecdsa.recoverPubKey(e, parsed.signature, parsed.i) + return bs58check.encode(payload) +} - var keyPair = new ECPair(null, Q, { - compressed: parsed.compressed, - network: network - }) +function toOutputScript (address, network) { + network = network || networks.bitcoin - return keyPair.getAddress() === address -} + var decode = fromBase58Check(address) + if (decode.version === network.pubKeyHash) return bscript.pubKeyHashOutput(decode.hash) + if (decode.version === network.scriptHash) return bscript.scriptHashOutput(decode.hash) -module.exports = { - magicHash: magicHash, - sign: sign, - verify: verify + throw new Error(address + ' has no matching Script') } -}).call(this,require("buffer").Buffer) -},{"./bufferutils":38,"./crypto":39,"./ecdsa":40,"./ecpair":41,"./ecsignature":42,"./networks":46,"bigi":7,"buffer":177}],46:[function(require,module,exports){ -// https://en.bitcoin.it/wiki/List_of_address_prefixes -// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731 - module.exports = { - bitcoin: { - messagePrefix: '\x18Bitcoin Signed Message:\n', - bip32: { - public: 0x0488b21e, - private: 0x0488ade4 - }, - pubKeyHash: 0x00, - scriptHash: 0x05, - wif: 0x80, - dustThreshold: 546 // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162 - }, - testnet: { - messagePrefix: '\x18Bitcoin Signed Message:\n', - bip32: { - public: 0x043587cf, - private: 0x04358394 - }, - pubKeyHash: 0x6f, - scriptHash: 0xc4, - wif: 0xef, - dustThreshold: 546 - }, - litecoin: { - messagePrefix: '\x19Litecoin Signed Message:\n', - bip32: { - public: 0x019da462, - private: 0x019d9cfe - }, - pubKeyHash: 0x30, - scriptHash: 0x05, - wif: 0xb0, - dustThreshold: 0 // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365 - }, - dogecoin: { - messagePrefix: '\x19Dogecoin Signed Message:\n', - bip32: { - public: 0x02facafd, - private: 0x02fac398 - }, - pubKeyHash: 0x1e, - scriptHash: 0x16, - wif: 0x9e, - dustThreshold: 0 // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160 - } + fromBase58Check: fromBase58Check, + fromOutputScript: fromOutputScript, + toBase58Check: toBase58Check, + toOutputScript: toOutputScript } -},{}],47:[function(require,module,exports){ -module.exports={ - "OP_FALSE": 0, - "OP_0": 0, - "OP_PUSHDATA1": 76, - "OP_PUSHDATA2": 77, - "OP_PUSHDATA4": 78, - "OP_1NEGATE": 79, - "OP_RESERVED": 80, - "OP_1": 81, - "OP_TRUE": 81, - "OP_2": 82, - "OP_3": 83, - "OP_4": 84, - "OP_5": 85, - "OP_6": 86, - "OP_7": 87, - "OP_8": 88, - "OP_9": 89, - "OP_10": 90, - "OP_11": 91, - "OP_12": 92, - "OP_13": 93, - "OP_14": 94, - "OP_15": 95, - "OP_16": 96, - - "OP_NOP": 97, - "OP_VER": 98, - "OP_IF": 99, - "OP_NOTIF": 100, - "OP_VERIF": 101, - "OP_VERNOTIF": 102, - "OP_ELSE": 103, - "OP_ENDIF": 104, - "OP_VERIFY": 105, - "OP_RETURN": 106, - - "OP_TOALTSTACK": 107, - "OP_FROMALTSTACK": 108, - "OP_2DROP": 109, - "OP_2DUP": 110, - "OP_3DUP": 111, - "OP_2OVER": 112, - "OP_2ROT": 113, - "OP_2SWAP": 114, - "OP_IFDUP": 115, - "OP_DEPTH": 116, - "OP_DROP": 117, - "OP_DUP": 118, - "OP_NIP": 119, - "OP_OVER": 120, - "OP_PICK": 121, - "OP_ROLL": 122, - "OP_ROT": 123, - "OP_SWAP": 124, - "OP_TUCK": 125, +}).call(this,require("buffer").Buffer) +},{"./networks":92,"./script":94,"./types":97,"bs58check":56,"buffer":223,"typeforce":80}],83:[function(require,module,exports){ +(function (Buffer){ +var bufferutils = require('./bufferutils') +var bcrypto = require('./crypto') - "OP_CAT": 126, - "OP_SUBSTR": 127, - "OP_LEFT": 128, - "OP_RIGHT": 129, - "OP_SIZE": 130, +var Transaction = require('./transaction') - "OP_INVERT": 131, - "OP_AND": 132, - "OP_OR": 133, - "OP_XOR": 134, - "OP_EQUAL": 135, - "OP_EQUALVERIFY": 136, - "OP_RESERVED1": 137, - "OP_RESERVED2": 138, +function Block () { + this.version = 1 + this.prevHash = null + this.merkleRoot = null + this.timestamp = 0 + this.bits = 0 + this.nonce = 0 +} - "OP_1ADD": 139, - "OP_1SUB": 140, - "OP_2MUL": 141, - "OP_2DIV": 142, - "OP_NEGATE": 143, - "OP_ABS": 144, - "OP_NOT": 145, - "OP_0NOTEQUAL": 146, - "OP_ADD": 147, - "OP_SUB": 148, - "OP_MUL": 149, - "OP_DIV": 150, - "OP_MOD": 151, - "OP_LSHIFT": 152, - "OP_RSHIFT": 153, +Block.fromBuffer = function (buffer) { + if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)') - "OP_BOOLAND": 154, - "OP_BOOLOR": 155, - "OP_NUMEQUAL": 156, - "OP_NUMEQUALVERIFY": 157, - "OP_NUMNOTEQUAL": 158, - "OP_LESSTHAN": 159, - "OP_GREATERTHAN": 160, - "OP_LESSTHANOREQUAL": 161, - "OP_GREATERTHANOREQUAL": 162, - "OP_MIN": 163, - "OP_MAX": 164, + var offset = 0 + function readSlice (n) { + offset += n + return buffer.slice(offset - n, offset) + } - "OP_WITHIN": 165, + function readUInt32 () { + var i = buffer.readUInt32LE(offset) + offset += 4 + return i + } - "OP_RIPEMD160": 166, - "OP_SHA1": 167, - "OP_SHA256": 168, - "OP_HASH160": 169, - "OP_HASH256": 170, - "OP_CODESEPARATOR": 171, - "OP_CHECKSIG": 172, - "OP_CHECKSIGVERIFY": 173, - "OP_CHECKMULTISIG": 174, - "OP_CHECKMULTISIGVERIFY": 175, + var block = new Block() + block.version = readUInt32() + block.prevHash = readSlice(32) + block.merkleRoot = readSlice(32) + block.timestamp = readUInt32() + block.bits = readUInt32() + block.nonce = readUInt32() - "OP_NOP1": 176, - "OP_NOP2": 177, - "OP_NOP3": 178, - "OP_NOP4": 179, - "OP_NOP5": 180, - "OP_NOP6": 181, - "OP_NOP7": 182, - "OP_NOP8": 183, - "OP_NOP9": 184, - "OP_NOP10": 185, + if (buffer.length === 80) return block - "OP_PUBKEYHASH": 253, - "OP_PUBKEY": 254, - "OP_INVALIDOPCODE": 255 -} + function readVarInt () { + var vi = bufferutils.readVarInt(buffer, offset) + offset += vi.size + return vi.number + } -},{}],48:[function(require,module,exports){ -(function (Buffer){ -var bip66 = require('bip66') -var bufferutils = require('./bufferutils') -var typeforce = require('typeforce') -var types = require('./types') + function readTransaction () { + var tx = Transaction.fromBuffer(buffer.slice(offset), true) -var OPS = require('./opcodes') -var REVERSE_OPS = (function () { - var result = {} - for (var op in OPS) { - var code = OPS[op] - result[code] = op + offset += tx.byteLength() + return tx } - return result -})() -var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1 + var nTransactions = readVarInt() + block.transactions = [] -function toASM (chunks) { - if (types.Buffer(chunks)) { - chunks = decompile(chunks) + for (var i = 0; i < nTransactions; ++i) { + var tx = readTransaction() + block.transactions.push(tx) } - return chunks.map(function (chunk) { - // data? - if (Buffer.isBuffer(chunk)) return chunk.toString('hex') - - // opcode! - return REVERSE_OPS[chunk] - }).join(' ') + return block } -function fromASM (asm) { - typeforce(types.String, asm) - - return compile(asm.split(' ').map(function (chunkStr) { - // opcode? - if (OPS[chunkStr] !== undefined) return OPS[chunkStr] +Block.fromHex = function (hex) { + return Block.fromBuffer(new Buffer(hex, 'hex')) +} - // data! - return new Buffer(chunkStr, 'hex') - })) +Block.prototype.getHash = function () { + return bcrypto.hash256(this.toBuffer(true)) } -function compile (chunks) { - // TODO: remove me - if (types.Buffer(chunks)) return chunks +Block.prototype.getId = function () { + return [].reverse.call(this.getHash()).toString('hex') +} - typeforce(types.Array, chunks) +Block.prototype.getUTCDate = function () { + var date = new Date(0) // epoch + date.setUTCSeconds(this.timestamp) - var bufferSize = chunks.reduce(function (accum, chunk) { - // data chunk - if (Buffer.isBuffer(chunk)) { - return accum + bufferutils.pushDataSize(chunk.length) + chunk.length - } + return date +} - // opcode - return accum + 1 - }, 0.0) +Block.prototype.toBuffer = function (headersOnly) { + var buffer = new Buffer(80) - var buffer = new Buffer(bufferSize) var offset = 0 + function writeSlice (slice) { + slice.copy(buffer, offset) + offset += slice.length + } - chunks.forEach(function (chunk) { - // data chunk - if (Buffer.isBuffer(chunk)) { - offset += bufferutils.writePushDataInt(buffer, chunk.length, offset) + function writeUInt32 (i) { + buffer.writeUInt32LE(i, offset) + offset += 4 + } - chunk.copy(buffer, offset) - offset += chunk.length + writeUInt32(this.version) + writeSlice(this.prevHash) + writeSlice(this.merkleRoot) + writeUInt32(this.timestamp) + writeUInt32(this.bits) + writeUInt32(this.nonce) - // opcode - } else { - buffer.writeUInt8(chunk, offset) - offset += 1 - } + if (headersOnly || !this.transactions) return buffer + + var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length) + var txBuffers = this.transactions.map(function (tx) { + return tx.toBuffer() }) - if (offset !== buffer.length) throw new Error('Could not decode chunks') - return buffer + return Buffer.concat([buffer, txLenBuffer].concat(txBuffers)) } -function decompile (buffer) { - // TODO: remove me - if (types.Array(buffer)) return buffer +Block.prototype.toHex = function (headersOnly) { + return this.toBuffer(headersOnly).toString('hex') +} - typeforce(types.Buffer, buffer) +module.exports = Block - var chunks = [] - var i = 0 +}).call(this,require("buffer").Buffer) +},{"./bufferutils":84,"./crypto":85,"./transaction":95,"buffer":223}],84:[function(require,module,exports){ +(function (Buffer){ +var opcodes = require('./opcodes') - while (i < buffer.length) { - var opcode = buffer[i] +// https://github.com/feross/buffer/blob/master/index.js#L1127 +function verifuint (value, max) { + if (typeof value !== 'number') throw new Error('cannot write a non-number as a number') + if (value < 0) throw new Error('specified a negative value for writing an unsigned value') + if (value > max) throw new Error('value is larger than maximum value for type') + if (Math.floor(value) !== value) throw new Error('value has a fractional component') +} - // data chunk - if ((opcode > OPS.OP_0) && (opcode <= OPS.OP_PUSHDATA4)) { - var d = bufferutils.readPushDataInt(buffer, i) +function pushDataSize (i) { + return i < opcodes.OP_PUSHDATA1 ? 1 + : i < 0xff ? 2 + : i < 0xffff ? 3 + : 5 +} - // did reading a pushDataInt fail? empty script - if (d === null) return [] - i += d.size +function readPushDataInt (buffer, offset) { + var opcode = buffer.readUInt8(offset) + var number, size - // attempt to read too much data? empty script - if (i + d.number > buffer.length) return [] + // ~6 bit + if (opcode < opcodes.OP_PUSHDATA1) { + number = opcode + size = 1 - var data = buffer.slice(i, i + d.number) - i += d.number + // 8 bit + } else if (opcode === opcodes.OP_PUSHDATA1) { + if (offset + 2 > buffer.length) return null + number = buffer.readUInt8(offset + 1) + size = 2 - chunks.push(data) + // 16 bit + } else if (opcode === opcodes.OP_PUSHDATA2) { + if (offset + 3 > buffer.length) return null + number = buffer.readUInt16LE(offset + 1) + size = 3 - // opcode - } else { - chunks.push(opcode) + // 32 bit + } else { + if (offset + 5 > buffer.length) return null + if (opcode !== opcodes.OP_PUSHDATA4) throw new Error('Unexpected opcode') - i += 1 - } + number = buffer.readUInt32LE(offset + 1) + size = 5 } - return chunks + return { + opcode: opcode, + number: number, + size: size + } } -function isCanonicalPubKey (buffer) { - if (!Buffer.isBuffer(buffer)) return false - if (buffer.length < 33) return false +function readUInt64LE (buffer, offset) { + var a = buffer.readUInt32LE(offset) + var b = buffer.readUInt32LE(offset + 4) + b *= 0x100000000 - switch (buffer[0]) { - case 0x02: - case 0x03: - return buffer.length === 33 - case 0x04: - return buffer.length === 65 - } + verifuint(b + a, 0x001fffffffffffff) - return false + return b + a } -function isCanonicalSignature (buffer) { - if (!Buffer.isBuffer(buffer)) return false - if (!isDefinedHashType(buffer[buffer.length - 1])) return false +function readVarInt (buffer, offset) { + var t = buffer.readUInt8(offset) + var number, size - return bip66.check(buffer.slice(0, -1)) -} + // 8 bit + if (t < 253) { + number = t + size = 1 -function isDefinedHashType (hashType) { - var hashTypeMod = hashType & ~0x80 + // 16 bit + } else if (t < 254) { + number = buffer.readUInt16LE(offset + 1) + size = 3 -// return hashTypeMod > SIGHASH_ALL && hashTypeMod < SIGHASH_SINGLE - return hashTypeMod > 0x00 && hashTypeMod < 0x04 -} + // 32 bit + } else if (t < 255) { + number = buffer.readUInt32LE(offset + 1) + size = 5 -function isPubKeyHashInput (script) { - var chunks = decompile(script) + // 64 bit + } else { + number = readUInt64LE(buffer, offset + 1) + size = 9 + } - return chunks.length === 2 && - isCanonicalSignature(chunks[0]) && - isCanonicalPubKey(chunks[1]) + return { + number: number, + size: size + } } -function isPubKeyHashOutput (script) { - var buffer = compile(script) +function writePushDataInt (buffer, number, offset) { + var size = pushDataSize(number) - return buffer.length === 25 && - buffer[0] === OPS.OP_DUP && - buffer[1] === OPS.OP_HASH160 && - buffer[2] === 0x14 && - buffer[23] === OPS.OP_EQUALVERIFY && - buffer[24] === OPS.OP_CHECKSIG -} + // ~6 bit + if (size === 1) { + buffer.writeUInt8(number, offset) -function isPubKeyInput (script) { - var chunks = decompile(script) + // 8 bit + } else if (size === 2) { + buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset) + buffer.writeUInt8(number, offset + 1) - return chunks.length === 1 && - isCanonicalSignature(chunks[0]) -} + // 16 bit + } else if (size === 3) { + buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset) + buffer.writeUInt16LE(number, offset + 1) -function isPubKeyOutput (script) { - var chunks = decompile(script) + // 32 bit + } else { + buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset) + buffer.writeUInt32LE(number, offset + 1) + } - return chunks.length === 2 && - isCanonicalPubKey(chunks[0]) && - chunks[1] === OPS.OP_CHECKSIG + return size } -function isScriptHashInput (script, allowIncomplete) { - var chunks = decompile(script) - if (chunks.length < 2) return false - - var lastChunk = chunks[chunks.length - 1] - if (!Buffer.isBuffer(lastChunk)) return false - - var scriptSigChunks = chunks.slice(0, -1) - var redeemScriptChunks = decompile(lastChunk) - - // is redeemScript a valid script? - if (redeemScriptChunks.length === 0) return false +function writeUInt64LE (buffer, value, offset) { + verifuint(value, 0x001fffffffffffff) - return classifyInput(scriptSigChunks, allowIncomplete) === classifyOutput(redeemScriptChunks) + buffer.writeInt32LE(value & -1, offset) + buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4) } -function isScriptHashOutput (script) { - var buffer = compile(script) - - return buffer.length === 23 && - buffer[0] === OPS.OP_HASH160 && - buffer[1] === 0x14 && - buffer[22] === OPS.OP_EQUAL +function varIntSize (i) { + return i < 253 ? 1 + : i < 0x10000 ? 3 + : i < 0x100000000 ? 5 + : 9 } -// allowIncomplete is to account for combining signatures -// See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197 -function isMultisigInput (script, allowIncomplete) { - var chunks = decompile(script) - if (chunks.length < 2) return false - if (chunks[0] !== OPS.OP_0) return false - - if (allowIncomplete) { - return chunks.slice(1).every(function (chunk) { - return chunk === OPS.OP_0 || isCanonicalSignature(chunk) - }) - } +function writeVarInt (buffer, number, offset) { + var size = varIntSize(number) - return chunks.slice(1).every(isCanonicalSignature) -} + // 8 bit + if (size === 1) { + buffer.writeUInt8(number, offset) -function isMultisigOutput (script) { - var chunks = decompile(script) - if (chunks.length < 4) return false - if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG) return false + // 16 bit + } else if (size === 3) { + buffer.writeUInt8(253, offset) + buffer.writeUInt16LE(number, offset + 1) - var mOp = chunks[0] - var nOp = chunks[chunks.length - 2] + // 32 bit + } else if (size === 5) { + buffer.writeUInt8(254, offset) + buffer.writeUInt32LE(number, offset + 1) - if (!types.Number(mOp)) return false - if (!types.Number(nOp)) return false + // 64 bit + } else { + buffer.writeUInt8(255, offset) + writeUInt64LE(buffer, number, offset + 1) + } - var m = mOp - OP_INT_BASE - var n = nOp - OP_INT_BASE + return size +} - // 0 < m <= n <= 16 - if (m <= 0) return false - if (m > n) return false - if (n > 16) return false - if (n !== chunks.length - 3) return false +function varIntBuffer (i) { + var size = varIntSize(i) + var buffer = new Buffer(size) + writeVarInt(buffer, i, 0) - return chunks.slice(1, -2).every(isCanonicalPubKey) + return buffer } -function isNullDataOutput (script) { - var chunks = decompile(script) - return chunks[0] === OPS.OP_RETURN +module.exports = { + equal: require('buffer-equals'), + pushDataSize: pushDataSize, + readPushDataInt: readPushDataInt, + readUInt64LE: readUInt64LE, + readVarInt: readVarInt, + reverse: require('buffer-reverse'), + varIntBuffer: varIntBuffer, + varIntSize: varIntSize, + writePushDataInt: writePushDataInt, + writeUInt64LE: writeUInt64LE, + writeVarInt: writeVarInt } -function classifyOutput (script) { - var chunks = decompile(script) - - if (isPubKeyHashOutput(chunks)) { - return 'pubkeyhash' - } else if (isScriptHashOutput(chunks)) { - return 'scripthash' - } else if (isMultisigOutput(chunks)) { - return 'multisig' - } else if (isPubKeyOutput(chunks)) { - return 'pubkey' - } else if (isNullDataOutput(chunks)) { - return 'nulldata' - } +}).call(this,require("buffer").Buffer) +},{"./opcodes":93,"buffer":223,"buffer-equals":58,"buffer-reverse":59}],85:[function(require,module,exports){ +var createHash = require('create-hash') - return 'nonstandard' +function hash160 (buffer) { + return ripemd160(sha256(buffer)) } -function classifyInput (script, allowIncomplete) { - var chunks = decompile(script) - - if (isPubKeyHashInput(chunks)) { - return 'pubkeyhash' - } else if (isMultisigInput(chunks, allowIncomplete)) { - return 'multisig' - } else if (isScriptHashInput(chunks, allowIncomplete)) { - return 'scripthash' - } else if (isPubKeyInput(chunks)) { - return 'pubkey' - } - - return 'nonstandard' +function hash256 (buffer) { + return sha256(sha256(buffer)) } -// Standard Script Templates -// {pubKey} OP_CHECKSIG -function pubKeyOutput (pubKey) { - return compile([pubKey, OPS.OP_CHECKSIG]) +function ripemd160 (buffer) { + return createHash('rmd160').update(buffer).digest() } -// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG -function pubKeyHashOutput (pubKeyHash) { - typeforce(types.Hash160bit, pubKeyHash) - - return compile([OPS.OP_DUP, OPS.OP_HASH160, pubKeyHash, OPS.OP_EQUALVERIFY, OPS.OP_CHECKSIG]) +function sha1 (buffer) { + return createHash('sha1').update(buffer).digest() } -// OP_HASH160 {scriptHash} OP_EQUAL -function scriptHashOutput (scriptHash) { - typeforce(types.Hash160bit, scriptHash) - - return compile([OPS.OP_HASH160, scriptHash, OPS.OP_EQUAL]) +function sha256 (buffer) { + return createHash('sha256').update(buffer).digest() } -// m [pubKeys ...] n OP_CHECKMULTISIG -function multisigOutput (m, pubKeys) { - typeforce(types.tuple(types.Number, [types.Buffer]), arguments) - - var n = pubKeys.length - if (n < m) throw new Error('Not enough pubKeys provided') - - return compile([].concat( - OP_INT_BASE + m, - pubKeys, - OP_INT_BASE + n, - OPS.OP_CHECKMULTISIG - )) +module.exports = { + hash160: hash160, + hash256: hash256, + ripemd160: ripemd160, + sha1: sha1, + sha256: sha256 } -// {signature} -function pubKeyInput (signature) { - typeforce(types.Buffer, signature) - - return compile([signature]) -} +},{"create-hash":60}],86:[function(require,module,exports){ +(function (Buffer){ +var createHmac = require('create-hmac') +var typeforce = require('typeforce') +var types = require('./types') -// {signature} {pubKey} -function pubKeyHashInput (signature, pubKey) { - typeforce(types.tuple(types.Buffer, types.Buffer), arguments) +var BigInteger = require('bigi') +var ECSignature = require('./ecsignature') - return compile([signature, pubKey]) -} +var ZERO = new Buffer([0]) +var ONE = new Buffer([1]) -// {serialized scriptPubKey script} -function scriptHashInput (scriptSig, scriptPubKey) { - var scriptSigChunks = decompile(scriptSig) - var serializedScriptPubKey = compile(scriptPubKey) +var ecurve = require('ecurve') +var secp256k1 = ecurve.getCurveByName('secp256k1') - return compile([].concat( - scriptSigChunks, - serializedScriptPubKey - )) -} +// https://tools.ietf.org/html/rfc6979#section-3.2 +function deterministicGenerateK (hash, x, checkSig) { + typeforce(types.tuple( + types.Hash256bit, + types.Buffer256bit, + types.Function + ), arguments) -// OP_0 [signatures ...] -function multisigInput (signatures, scriptPubKey) { - if (scriptPubKey) { - var chunks = decompile(scriptPubKey) - if (!isMultisigOutput(chunks)) throw new Error('Expected multisig scriptPubKey') + var k = new Buffer(32) + var v = new Buffer(32) - var mOp = chunks[0] - var nOp = chunks[chunks.length - 2] - var m = mOp - OP_INT_BASE - var n = nOp - OP_INT_BASE + // Step A, ignored as hash already provided + // Step B + v.fill(1) - if (signatures.length < m) throw new Error('Not enough signatures provided') - if (signatures.length > n) throw new Error('Too many signatures provided') - } + // Step C + k.fill(0) - return compile([].concat(OPS.OP_0, signatures)) -} + // Step D + k = createHmac('sha256', k) + .update(v) + .update(ZERO) + .update(x) + .update(hash) + .digest() -function nullDataOutput (data) { - return compile([OPS.OP_RETURN, data]) -} + // Step E + v = createHmac('sha256', k).update(v).digest() -module.exports = { - compile: compile, - decompile: decompile, - fromASM: fromASM, - toASM: toASM, + // Step F + k = createHmac('sha256', k) + .update(v) + .update(ONE) + .update(x) + .update(hash) + .digest() - isCanonicalPubKey: isCanonicalPubKey, - isCanonicalSignature: isCanonicalSignature, - isDefinedHashType: isDefinedHashType, - isPubKeyHashInput: isPubKeyHashInput, - isPubKeyHashOutput: isPubKeyHashOutput, - isPubKeyInput: isPubKeyInput, - isPubKeyOutput: isPubKeyOutput, - isScriptHashInput: isScriptHashInput, - isScriptHashOutput: isScriptHashOutput, - isMultisigInput: isMultisigInput, - isMultisigOutput: isMultisigOutput, - isNullDataOutput: isNullDataOutput, - classifyOutput: classifyOutput, - classifyInput: classifyInput, - pubKeyOutput: pubKeyOutput, - pubKeyHashOutput: pubKeyHashOutput, - scriptHashOutput: scriptHashOutput, - multisigOutput: multisigOutput, - pubKeyInput: pubKeyInput, - pubKeyHashInput: pubKeyHashInput, - scriptHashInput: scriptHashInput, - multisigInput: multisigInput, - nullDataOutput: nullDataOutput -} + // Step G + v = createHmac('sha256', k).update(v).digest() -}).call(this,require("buffer").Buffer) -},{"./bufferutils":38,"./opcodes":47,"./types":51,"bip66":9,"buffer":177,"typeforce":34}],49:[function(require,module,exports){ -(function (Buffer){ -var bcrypto = require('./crypto') -var bscript = require('./script') -var bufferutils = require('./bufferutils') -var opcodes = require('./opcodes') -var typeforce = require('typeforce') -var types = require('./types') + // Step H1/H2a, ignored as tlen === qlen (256 bit) + // Step H2b + v = createHmac('sha256', k).update(v).digest() -function Transaction () { - this.version = 1 - this.locktime = 0 - this.ins = [] - this.outs = [] -} + var T = BigInteger.fromBuffer(v) -Transaction.DEFAULT_SEQUENCE = 0xffffffff -Transaction.SIGHASH_ALL = 0x01 -Transaction.SIGHASH_NONE = 0x02 -Transaction.SIGHASH_SINGLE = 0x03 -Transaction.SIGHASH_ANYONECANPAY = 0x80 + // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA + while (T.signum() <= 0 || T.compareTo(secp256k1.n) >= 0 || !checkSig(T)) { + k = createHmac('sha256', k) + .update(v) + .update(ZERO) + .digest() -Transaction.fromBuffer = function (buffer, __noStrict) { - var offset = 0 - function readSlice (n) { - offset += n - return buffer.slice(offset - n, offset) - } + v = createHmac('sha256', k).update(v).digest() - function readUInt32 () { - var i = buffer.readUInt32LE(offset) - offset += 4 - return i + // Step H1/H2a, again, ignored as tlen === qlen (256 bit) + // Step H2b again + v = createHmac('sha256', k).update(v).digest() + T = BigInteger.fromBuffer(v) } - function readUInt64 () { - var i = bufferutils.readUInt64LE(buffer, offset) - offset += 8 - return i - } + return T +} - function readVarInt () { - var vi = bufferutils.readVarInt(buffer, offset) - offset += vi.size - return vi.number - } +var N_OVER_TWO = secp256k1.n.shiftRight(1) - function readScript () { - return readSlice(readVarInt()) - } +function sign (hash, d) { + typeforce(types.tuple(types.Hash256bit, types.BigInt), arguments) - var tx = new Transaction() - tx.version = readUInt32() + var x = d.toBuffer(32) + var e = BigInteger.fromBuffer(hash) + var n = secp256k1.n + var G = secp256k1.G - var vinLen = readVarInt() - for (var i = 0; i < vinLen; ++i) { - tx.ins.push({ - hash: readSlice(32), - index: readUInt32(), - script: readScript(), - sequence: readUInt32() - }) - } + var r, s + deterministicGenerateK(hash, x, function (k) { + var Q = G.multiply(k) - var voutLen = readVarInt() - for (i = 0; i < voutLen; ++i) { - tx.outs.push({ - value: readUInt64(), - script: readScript() - }) - } + if (secp256k1.isInfinity(Q)) return false - tx.locktime = readUInt32() + r = Q.affineX.mod(n) + if (r.signum() === 0) return false - if (__noStrict) return tx - if (offset !== buffer.length) throw new Error('Transaction has unexpected data') + s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n) + if (s.signum() === 0) return false - return tx -} + return true + }) -Transaction.fromHex = function (hex) { - return Transaction.fromBuffer(new Buffer(hex, 'hex')) -} + // enforce low S values, see bip62: 'low s values in signatures' + if (s.compareTo(N_OVER_TWO) > 0) { + s = n.subtract(s) + } -Transaction.isCoinbaseHash = function (buffer) { - return Array.prototype.every.call(buffer, function (x) { - return x === 0 - }) + return new ECSignature(r, s) } -var EMPTY_SCRIPT = new Buffer(0) - -Transaction.prototype.addInput = function (hash, index, sequence, scriptSig) { +function verify (hash, signature, Q) { typeforce(types.tuple( types.Hash256bit, - types.UInt32, - types.maybe(types.UInt32), - types.maybe(types.Buffer) + types.ECSignature, + types.ECPoint ), arguments) - if (types.Null(sequence)) { - sequence = Transaction.DEFAULT_SEQUENCE - } + var n = secp256k1.n + var G = secp256k1.G - // Add the input and return the input's index - return (this.ins.push({ - hash: hash, - index: index, - script: scriptSig || EMPTY_SCRIPT, - sequence: sequence - }) - 1) -} + var r = signature.r + var s = signature.s -Transaction.prototype.addOutput = function (scriptPubKey, value) { - typeforce(types.tuple(types.Buffer, types.UInt53), arguments) + // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1] + if (r.signum() <= 0 || r.compareTo(n) >= 0) return false + if (s.signum() <= 0 || s.compareTo(n) >= 0) return false - // Add the output and return the output's index - return (this.outs.push({ - script: scriptPubKey, - value: value - }) - 1) -} + // 1.4.2 H = Hash(M), already done by the user + // 1.4.3 e = H + var e = BigInteger.fromBuffer(hash) -Transaction.prototype.byteLength = function () { - function scriptSize (someScript) { - var length = someScript.length + // Compute s^-1 + var sInv = s.modInverse(n) - return bufferutils.varIntSize(length) + length - } + // 1.4.4 Compute u1 = es^−1 mod n + // u2 = rs^−1 mod n + var u1 = e.multiply(sInv).mod(n) + var u2 = r.multiply(sInv).mod(n) - return ( - 8 + - bufferutils.varIntSize(this.ins.length) + - bufferutils.varIntSize(this.outs.length) + - this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) + - this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0) - ) -} + // 1.4.5 Compute R = (xR, yR) + // R = u1G + u2Q + var R = G.multiplyTwo(u1, Q, u2) -Transaction.prototype.clone = function () { - var newTx = new Transaction() - newTx.version = this.version - newTx.locktime = this.locktime + // 1.4.5 (cont.) Enforce R is not at infinity + if (secp256k1.isInfinity(R)) return false - newTx.ins = this.ins.map(function (txIn) { - return { - hash: txIn.hash, - index: txIn.index, - script: txIn.script, - sequence: txIn.sequence - } - }) + // 1.4.6 Convert the field element R.x to an integer + var xR = R.affineX - newTx.outs = this.outs.map(function (txOut) { - return { - script: txOut.script, - value: txOut.value - } - }) + // 1.4.7 Set v = xR mod n + var v = xR.mod(n) - return newTx + // 1.4.8 If v = r, output "valid", and if v != r, output "invalid" + return v.equals(r) } -var ONE = new Buffer('0000000000000000000000000000000000000000000000000000000000000001', 'hex') -var VALUE_UINT64_MAX = new Buffer('ffffffffffffffff', 'hex') - /** - * Hash transaction for signing a specific input. - * - * Bitcoin uses a different hash for each signed transaction input. - * This method copies the transaction, makes the necessary changes based on the - * hashType, and then hashes the result. - * This hash can then be used to sign the provided transaction input. - */ -Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) { - typeforce(types.tuple(types.UInt32, types.Buffer, /* types.UInt8 */ types.Number), arguments) + * Recover a public key from a signature. + * + * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public + * Key Recovery Operation". + * + * http://www.secg.org/download/aid-780/sec1-v2.pdf + */ +function recoverPubKey (e, signature, i) { + typeforce(types.tuple( + types.BigInt, + types.ECSignature, + types.UInt2 + ), arguments) - // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L29 - if (inIndex >= this.ins.length) return ONE + var n = secp256k1.n + var G = secp256k1.G + var r = signature.r + var s = signature.s - var txTmp = this.clone() + if (r.signum() <= 0 || r.compareTo(n) >= 0) throw new Error('Invalid r value') + if (s.signum() <= 0 || s.compareTo(n) >= 0) throw new Error('Invalid s value') - // in case concatenating two scripts ends up with two codeseparators, - // or an extra one at the end, this prevents all those possible incompatibilities. - var hashScript = bscript.compile(bscript.decompile(prevOutScript).filter(function (x) { - return x !== opcodes.OP_CODESEPARATOR - })) - var i + // A set LSB signifies that the y-coordinate is odd + var isYOdd = i & 1 - // blank out other inputs' signatures - txTmp.ins.forEach(function (input) { input.script = EMPTY_SCRIPT }) - txTmp.ins[inIndex].script = hashScript + // The more significant bit specifies whether we should use the + // first or second candidate key. + var isSecondKey = i >> 1 - // blank out some of the inputs - if ((hashType & 0x1f) === Transaction.SIGHASH_NONE) { - // wildcard payee - txTmp.outs = [] + // 1.1 Let x = r + jn + var x = isSecondKey ? r.add(n) : r + var R = secp256k1.pointFromX(isYOdd, x) - // let the others update at will - txTmp.ins.forEach(function (input, i) { - if (i !== inIndex) { - input.sequence = 0 - } - }) - } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE) { - var nOut = inIndex + // 1.4 Check that nR is at infinity + var nR = R.multiply(n) + if (!secp256k1.isInfinity(nR)) throw new Error('nR is not a valid curve point') - // only lock-in the txOut payee at same index as txIn - // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L60 - if (nOut >= this.outs.length) return ONE + // Compute r^-1 + var rInv = r.modInverse(n) - txTmp.outs = txTmp.outs.slice(0, nOut + 1) + // Compute -e from e + var eNeg = e.negate().mod(n) - // blank all other outputs (clear scriptPubKey, value === -1) - var stubOut = { - script: EMPTY_SCRIPT, - valueBuffer: VALUE_UINT64_MAX - } + // 1.6.1 Compute Q = r^-1 (sR - eG) + // Q = r^-1 (sR + -eG) + var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv) - for (i = 0; i < nOut; i++) { - txTmp.outs[i] = stubOut - } + secp256k1.validate(Q) - // let the others update at will - txTmp.ins.forEach(function (input, i) { - if (i !== inIndex) { - input.sequence = 0 - } - }) - } + return Q +} - // blank out other inputs completely, not recommended for open transactions - if (hashType & Transaction.SIGHASH_ANYONECANPAY) { - txTmp.ins[0] = txTmp.ins[inIndex] - txTmp.ins = txTmp.ins.slice(0, 1) - } +/** + * Calculate pubkey extraction parameter. + * + * When extracting a pubkey from a signature, we have to + * distinguish four different cases. Rather than putting this + * burden on the verifier, Bitcoin includes a 2-bit value with the + * signature. + * + * This function simply tries all four cases and returns the value + * that resulted in a successful pubkey recovery. + */ +function calcPubKeyRecoveryParam (e, signature, Q) { + typeforce(types.tuple( + types.BigInt, + types.ECSignature, + types.ECPoint + ), arguments) - // serialize and hash - var buffer = new Buffer(txTmp.byteLength() + 4) - buffer.writeInt32LE(hashType, buffer.length - 4) - txTmp.toBuffer().copy(buffer, 0) + for (var i = 0; i < 4; i++) { + var Qprime = recoverPubKey(e, signature, i) - return bcrypto.hash256(buffer) -} + // 1.6.2 Verify Q + if (Qprime.equals(Q)) { + return i + } + } -Transaction.prototype.getHash = function () { - return bcrypto.hash256(this.toBuffer()) + throw new Error('Unable to find valid recovery factor') } -Transaction.prototype.getId = function () { - // transaction hash's are displayed in reverse order - return [].reverse.call(this.getHash()).toString('hex') -} +module.exports = { + calcPubKeyRecoveryParam: calcPubKeyRecoveryParam, + deterministicGenerateK: deterministicGenerateK, + recoverPubKey: recoverPubKey, + sign: sign, + verify: verify, -Transaction.prototype.toBuffer = function () { - var buffer = new Buffer(this.byteLength()) + // TODO: remove + __curve: secp256k1 +} - var offset = 0 - function writeSlice (slice) { - slice.copy(buffer, offset) - offset += slice.length - } +}).call(this,require("buffer").Buffer) +},{"./ecsignature":88,"./types":97,"bigi":53,"buffer":223,"create-hmac":73,"ecurve":76,"typeforce":80}],87:[function(require,module,exports){ +(function (Buffer){ +var bcrypto = require('./crypto') +var bs58check = require('bs58check') +var ecdsa = require('./ecdsa') +var randomBytes = require('randombytes') +var typeforce = require('typeforce') +var types = require('./types') +var wif = require('wif') - function writeUInt32 (i) { - buffer.writeUInt32LE(i, offset) - offset += 4 - } +var NETWORKS = require('./networks') +var BigInteger = require('bigi') - function writeUInt64 (i) { - bufferutils.writeUInt64LE(buffer, i, offset) - offset += 8 - } +var ecurve = require('ecurve') +var secp256k1 = ecdsa.__curve - function writeVarInt (i) { - var n = bufferutils.writeVarInt(buffer, i, offset) - offset += n +function ECPair (d, Q, options) { + if (options) { + typeforce({ + compressed: types.maybe(types.Boolean), + network: types.maybe(types.Network) + }, options) } - writeUInt32(this.version) - writeVarInt(this.ins.length) - - this.ins.forEach(function (txIn) { - writeSlice(txIn.hash) - writeUInt32(txIn.index) - writeVarInt(txIn.script.length) - writeSlice(txIn.script) - writeUInt32(txIn.sequence) - }) + options = options || {} - writeVarInt(this.outs.length) - this.outs.forEach(function (txOut) { - if (!txOut.valueBuffer) { - writeUInt64(txOut.value) - } else { - writeSlice(txOut.valueBuffer) - } + if (d) { + if (d.signum() <= 0) throw new Error('Private key must be greater than 0') + if (d.compareTo(secp256k1.n) >= 0) throw new Error('Private key must be less than the curve order') + if (Q) throw new TypeError('Unexpected publicKey parameter') - writeVarInt(txOut.script.length) - writeSlice(txOut.script) - }) + this.d = d + } else { + typeforce(types.ECPoint, Q) - writeUInt32(this.locktime) + this.__Q = Q + } - return buffer + this.compressed = options.compressed === undefined ? true : options.compressed + this.network = options.network || NETWORKS.bitcoin } -Transaction.prototype.toHex = function () { - return this.toBuffer().toString('hex') -} +Object.defineProperty(ECPair.prototype, 'Q', { + get: function () { + if (!this.__Q && this.d) { + this.__Q = secp256k1.G.multiply(this.d) + } -Transaction.prototype.setInputScript = function (index, scriptSig) { - typeforce(types.tuple(types.Number, types.Buffer), arguments) + return this.__Q + } +}) - this.ins[index].script = scriptSig -} +ECPair.fromPublicKeyBuffer = function (buffer, network) { + var Q = ecurve.Point.decodeFrom(secp256k1, buffer) -module.exports = Transaction + return new ECPair(null, Q, { + compressed: Q.compressed, + network: network + }) +} -}).call(this,require("buffer").Buffer) -},{"./bufferutils":38,"./crypto":39,"./opcodes":47,"./script":48,"./types":51,"buffer":177,"typeforce":34}],50:[function(require,module,exports){ -(function (Buffer){ -var baddress = require('./address') -var bcrypto = require('./crypto') -var bscript = require('./script') -var bufferEquals = require('buffer-equals') -var networks = require('./networks') -var ops = require('./opcodes') +ECPair.fromWIF = function (string, network) { + network = network || NETWORKS.bitcoin + var buffer = bs58check.decode(string) -var ECPair = require('./ecpair') -var ECSignature = require('./ecsignature') -var Transaction = require('./transaction') + if (types.Array(network)) { + var version = buffer[0] -// re-orders signatures to match pubKeys, fills undefined otherwise -function fixMSSignatures (transaction, vin, pubKeys, signatures, prevOutScript, hashType, skipPubKey) { - // maintain a local copy of unmatched signatures - var unmatched = signatures.slice() - var cache = {} + network = network.filter(function (network) { + return version === network.wif + }).pop() || {} + } - return pubKeys.map(function (pubKey) { - // skip optionally provided pubKey - if (skipPubKey && bufferEquals(skipPubKey, pubKey)) return undefined + var decoded = wif.decodeRaw(network.wif, buffer) + var d = BigInteger.fromBuffer(decoded.d) - var matched - var keyPair2 = ECPair.fromPublicKeyBuffer(pubKey) + return new ECPair(d, null, { + compressed: decoded.compressed, + network: network + }) +} - // check for a matching signature - unmatched.some(function (signature, i) { - // skip if undefined || OP_0 - if (!signature) return false +ECPair.makeRandom = function (options) { + options = options || {} - var signatureHash = cache[hashType] = cache[hashType] || transaction.hashForSignature(vin, prevOutScript, hashType) - if (!keyPair2.verify(signatureHash, signature)) return false + var rng = options.rng || randomBytes - // remove matched signature from unmatched - unmatched[i] = undefined - matched = signature + var d + do { + var buffer = rng(32) + typeforce(types.Buffer256bit, buffer) - return true - }) + d = BigInteger.fromBuffer(buffer) + } while (d.signum() <= 0 || d.compareTo(secp256k1.n) >= 0) - return matched || undefined - }) + return new ECPair(d, null, options) } -function extractInput (transaction, txIn, vin) { - var redeemScript - var scriptSig = txIn.script - var scriptSigChunks = bscript.decompile(scriptSig) +ECPair.prototype.getAddress = function () { + var pubKey = this.getPublicKeyBuffer() + var pubKeyHash = bcrypto.hash160(pubKey) - var prevOutScript - var prevOutType = bscript.classifyInput(scriptSig, true) - var scriptType + var payload = new Buffer(21) + payload.writeUInt8(this.network.pubKeyHash, 0) + pubKeyHash.copy(payload, 1) - // Re-classify if scriptHash - if (prevOutType === 'scripthash') { - redeemScript = scriptSigChunks.slice(-1)[0] - prevOutScript = bscript.scriptHashOutput(bcrypto.hash160(redeemScript)) + return bs58check.encode(payload) +} - scriptSig = bscript.compile(scriptSigChunks.slice(0, -1)) - scriptSigChunks = scriptSigChunks.slice(0, -1) +ECPair.prototype.getNetwork = function () { + return this.network +} - scriptType = bscript.classifyInput(scriptSig, true) - } else { - scriptType = prevOutType - } +ECPair.prototype.getPublicKeyBuffer = function () { + return this.Q.getEncoded(this.compressed) +} - // pre-empt redeemScript decompilation - var redeemScriptChunks - if (redeemScript) { - redeemScriptChunks = bscript.decompile(redeemScript) - } +ECPair.prototype.sign = function (hash) { + if (!this.d) throw new Error('Missing private key') - // Extract hashType, pubKeys and signatures - var hashType, parsed, pubKeys, signatures + return ecdsa.sign(hash, this.d) +} - switch (scriptType) { - case 'pubkeyhash': - parsed = ECSignature.parseScriptSignature(scriptSigChunks[0]) - hashType = parsed.hashType - pubKeys = scriptSigChunks.slice(1) - signatures = [parsed.signature] - prevOutScript = bscript.pubKeyHashOutput(bcrypto.hash160(pubKeys[0])) +ECPair.prototype.toWIF = function () { + if (!this.d) throw new Error('Missing private key') - break + return wif.encode(this.network.wif, this.d.toBuffer(32), this.compressed) +} - case 'pubkey': - parsed = ECSignature.parseScriptSignature(scriptSigChunks[0]) - hashType = parsed.hashType - signatures = [parsed.signature] +ECPair.prototype.verify = function (hash, signature) { + return ecdsa.verify(hash, signature, this.Q) +} - if (redeemScript) { - pubKeys = redeemScriptChunks.slice(0, 1) - } +module.exports = ECPair - break +}).call(this,require("buffer").Buffer) +},{"./crypto":85,"./ecdsa":86,"./networks":92,"./types":97,"bigi":53,"bs58check":56,"buffer":223,"ecurve":76,"randombytes":79,"typeforce":80,"wif":81}],88:[function(require,module,exports){ +(function (Buffer){ +var bip66 = require('bip66') +var typeforce = require('typeforce') +var types = require('./types') - case 'multisig': - signatures = scriptSigChunks.slice(1).map(function (chunk) { - if (chunk === ops.OP_0) return undefined +var BigInteger = require('bigi') - var parsed = ECSignature.parseScriptSignature(chunk) - hashType = parsed.hashType +function ECSignature (r, s) { + typeforce(types.tuple(types.BigInt, types.BigInt), arguments) - return parsed.signature - }) + this.r = r + this.s = s +} - if (redeemScript) { - pubKeys = redeemScriptChunks.slice(1, -2) +ECSignature.parseCompact = function (buffer) { + if (buffer.length !== 65) throw new Error('Invalid signature length') - if (pubKeys.length !== signatures.length) { - signatures = fixMSSignatures(transaction, vin, pubKeys, signatures, redeemScript, hashType, redeemScript) - } - } + var flagByte = buffer.readUInt8(0) - 27 + if (flagByte !== (flagByte & 7)) throw new Error('Invalid signature parameter') - break - } + var compressed = !!(flagByte & 4) + var recoveryParam = flagByte & 3 + + var r = BigInteger.fromBuffer(buffer.slice(1, 33)) + var s = BigInteger.fromBuffer(buffer.slice(33)) return { - hashType: hashType, - prevOutScript: prevOutScript, - prevOutType: prevOutType, - pubKeys: pubKeys, - redeemScript: redeemScript, - scriptType: scriptType, - signatures: signatures + compressed: compressed, + i: recoveryParam, + signature: new ECSignature(r, s) } } -function TransactionBuilder (network) { - this.prevTxMap = {} - this.prevOutScripts = {} - this.prevOutTypes = {} - this.network = network || networks.bitcoin +ECSignature.fromDER = function (buffer) { + var decode = bip66.decode(buffer) + var r = BigInteger.fromDERInteger(decode.r) + var s = BigInteger.fromDERInteger(decode.s) - this.inputs = [] - this.tx = new Transaction() + return new ECSignature(r, s) } -TransactionBuilder.fromTransaction = function (transaction, network) { - var txb = new TransactionBuilder(network) +// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed) +ECSignature.parseScriptSignature = function (buffer) { + var hashType = buffer.readUInt8(buffer.length - 1) + var hashTypeMod = hashType & ~0x80 - // Copy other transaction fields - txb.tx.version = transaction.version - txb.tx.locktime = transaction.locktime + if (hashTypeMod <= 0x00 || hashTypeMod >= 0x04) throw new Error('Invalid hashType ' + hashType) - // Extract/add inputs - transaction.ins.forEach(function (txIn) { - txb.addInput(txIn.hash, txIn.index, txIn.sequence) - }) + return { + signature: ECSignature.fromDER(buffer.slice(0, -1)), + hashType: hashType + } +} - // Extract/add outputs - transaction.outs.forEach(function (txOut) { - txb.addOutput(txOut.script, txOut.value) - }) +ECSignature.prototype.toCompact = function (i, compressed) { + if (compressed) { + i += 4 + } - // Extract/add signatures - txb.inputs = transaction.ins.map(function (txIn, vin) { - // TODO: verify whether extractInput is sane with coinbase scripts - if (Transaction.isCoinbaseHash(txIn.hash)) { - throw new Error('coinbase inputs not supported') - } + i += 27 - // Ignore empty scripts - if (txIn.script.length === 0) return {} + var buffer = new Buffer(65) + buffer.writeUInt8(i, 0) - return extractInput(transaction, txIn, vin) - }) + this.r.toBuffer(32).copy(buffer, 1) + this.s.toBuffer(32).copy(buffer, 33) - return txb + return buffer } -TransactionBuilder.prototype.addInput = function (txHash, vout, sequence, prevOutScript) { - // is it a hex string? - if (typeof txHash === 'string') { - // transaction hashs's are displayed in reverse order, un-reverse it - txHash = [].reverse.call(new Buffer(txHash, 'hex')) +ECSignature.prototype.toDER = function () { + var r = new Buffer(this.r.toDERInteger()) + var s = new Buffer(this.s.toDERInteger()) - // is it a Transaction object? - } else if (txHash instanceof Transaction) { - prevOutScript = txHash.outs[vout].script - txHash = txHash.getHash() - } + return bip66.encode(r, s) +} - var input = {} - if (prevOutScript) { - var prevOutScriptChunks = bscript.decompile(prevOutScript) - var prevOutType = bscript.classifyOutput(prevOutScriptChunks) +ECSignature.prototype.toScriptSignature = function (hashType) { + var hashTypeMod = hashType & ~0x80 + if (hashTypeMod <= 0 || hashTypeMod >= 4) throw new Error('Invalid hashType ' + hashType) - // if we can, extract pubKey information - switch (prevOutType) { - case 'multisig': - input.pubKeys = prevOutScriptChunks.slice(1, -2) - input.signatures = input.pubKeys.map(function () { return undefined }) + var hashTypeBuffer = new Buffer(1) + hashTypeBuffer.writeUInt8(hashType, 0) - break + return Buffer.concat([this.toDER(), hashTypeBuffer]) +} - case 'pubkey': - input.pubKeys = prevOutScriptChunks.slice(0, 1) - input.signatures = [undefined] +module.exports = ECSignature - break - } +}).call(this,require("buffer").Buffer) +},{"./types":97,"bigi":53,"bip66":55,"buffer":223,"typeforce":80}],89:[function(require,module,exports){ +(function (Buffer){ +var base58check = require('bs58check') +var bcrypto = require('./crypto') +var createHmac = require('create-hmac') +var typeforce = require('typeforce') +var types = require('./types') +var NETWORKS = require('./networks') - if (prevOutType !== 'scripthash') { - input.scriptType = prevOutType - } +var BigInteger = require('bigi') +var ECPair = require('./ecpair') - input.prevOutScript = prevOutScript - input.prevOutType = prevOutType - } +var ecurve = require('ecurve') +var curve = ecurve.getCurveByName('secp256k1') - var valid = this.inputs.every(function (input2) { - if (input2.hashType === undefined) return true +function HDNode (keyPair, chainCode) { + typeforce(types.tuple('ECPair', types.Buffer256bit), arguments) - return input2.hashType & Transaction.SIGHASH_ANYONECANPAY - }) + if (!keyPair.compressed) throw new TypeError('BIP32 only allows compressed keyPairs') - if (!valid) throw new Error('No, this would invalidate signatures') + this.keyPair = keyPair + this.chainCode = chainCode + this.depth = 0 + this.index = 0 + this.parentFingerprint = 0x00000000 +} - var prevOut = txHash.toString('hex') + ':' + vout - if (this.prevTxMap[prevOut]) throw new Error('Transaction is already an input') +HDNode.HIGHEST_BIT = 0x80000000 +HDNode.LENGTH = 78 +HDNode.MASTER_SECRET = new Buffer('Bitcoin seed') - var vin = this.tx.addInput(txHash, vout, sequence) - this.inputs[vin] = input - this.prevTxMap[prevOut] = vin +HDNode.fromSeedBuffer = function (seed, network) { + typeforce(types.tuple(types.Buffer, types.maybe(types.Network)), arguments) - return vin -} + if (seed.length < 16) throw new TypeError('Seed should be at least 128 bits') + if (seed.length > 64) throw new TypeError('Seed should be at most 512 bits') -TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) { - var tx = this.tx - var valid = this.inputs.every(function (input, index) { - if (input.hashType === undefined) return true + var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest() + var IL = I.slice(0, 32) + var IR = I.slice(32) - var hashType = input.hashType & 0x1f - return hashType === Transaction.SIGHASH_NONE || - (hashType === Transaction.SIGHASH_SINGLE && index < tx.outs.length) + // In case IL is 0 or >= n, the master key is invalid + // This is handled by the ECPair constructor + var pIL = BigInteger.fromBuffer(IL) + var keyPair = new ECPair(pIL, null, { + network: network }) - if (!valid) throw new Error('No, this would invalidate signatures') - - // Attempt to get a script if it's a base58 address string - if (typeof scriptPubKey === 'string') { - scriptPubKey = baddress.toOutputScript(scriptPubKey, this.network) - } - - return tx.addOutput(scriptPubKey, value) + return new HDNode(keyPair, IR) } -TransactionBuilder.prototype.build = function () { - return this.__build(false) -} -TransactionBuilder.prototype.buildIncomplete = function () { - return this.__build(true) +HDNode.fromSeedHex = function (hex, network) { + return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network) } -var canBuildTypes = { - 'multisig': true, - 'pubkey': true, - 'pubkeyhash': true -} +HDNode.fromBase58 = function (string, networks) { + var buffer = base58check.decode(string) + if (buffer.length !== 78) throw new Error('Invalid buffer length') -TransactionBuilder.prototype.__build = function (allowIncomplete) { - if (!allowIncomplete) { - if (!this.tx.ins.length) throw new Error('Transaction has no inputs') - if (!this.tx.outs.length) throw new Error('Transaction has no outputs') + // 4 bytes: version bytes + var version = buffer.readUInt32BE(0) + var network + + // list of networks? + if (Array.isArray(networks)) { + network = networks.filter(function (network) { + return version === network.bip32.private || + version === network.bip32.public + }).pop() || {} + + // otherwise, assume a network object (or default to bitcoin) + } else { + network = networks || NETWORKS.bitcoin } - var tx = this.tx.clone() + if (version !== network.bip32.private && + version !== network.bip32.public) throw new Error('Invalid network') - // Create script signatures from inputs - this.inputs.forEach(function (input, index) { - var scriptType = input.scriptType - var scriptSig + // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ... + var depth = buffer[4] - if (!allowIncomplete) { - if (!scriptType) throw new Error('Transaction is not complete') - if (!canBuildTypes[scriptType]) throw new Error(scriptType + ' not supported') + // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key) + var parentFingerprint = buffer.readUInt32BE(5) + if (depth === 0) { + if (parentFingerprint !== 0x00000000) throw new Error('Invalid parent fingerprint') + } - // XXX: only relevant to types that need signatures - if (!input.signatures) throw new Error('Transaction is missing signatures') - } + // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized. + // This is encoded in MSB order. (0x00000000 if master key) + var index = buffer.readUInt32BE(9) + if (depth === 0 && index !== 0) throw new Error('Invalid index') - if (input.signatures) { - switch (scriptType) { - case 'pubkeyhash': - var pkhSignature = input.signatures[0].toScriptSignature(input.hashType) - scriptSig = bscript.pubKeyHashInput(pkhSignature, input.pubKeys[0]) - break + // 32 bytes: the chain code + var chainCode = buffer.slice(13, 45) + var keyPair - case 'multisig': - var msSignatures = input.signatures.map(function (signature) { - return signature && signature.toScriptSignature(input.hashType) - }) + // 33 bytes: private key data (0x00 + k) + if (version === network.bip32.private) { + if (buffer.readUInt8(45) !== 0x00) throw new Error('Invalid private key') - // fill in blanks with OP_0 - if (allowIncomplete) { - for (var i = 0; i < msSignatures.length; ++i) { - msSignatures[i] = msSignatures[i] || ops.OP_0 - } + var d = BigInteger.fromBuffer(buffer.slice(46, 78)) - // remove blank signatures - } else { - msSignatures = msSignatures.filter(function (x) { return x }) - } + keyPair = new ECPair(d, null, { + network: network + }) - var redeemScript = allowIncomplete ? undefined : input.redeemScript - scriptSig = bscript.multisigInput(msSignatures, redeemScript) - break + // 33 bytes: public key data (0x02 + X or 0x03 + X) + } else { + var Q = ecurve.Point.decodeFrom(curve, buffer.slice(45, 78)) + if (!Q.compressed) throw new Error('Invalid public key') - case 'pubkey': - var pkSignature = input.signatures[0].toScriptSignature(input.hashType) - scriptSig = bscript.pubKeyInput(pkSignature) - break - } - } + // Verify that the X coordinate in the public point corresponds to a point on the curve. + // If not, the extended public key is invalid. + curve.validate(Q) - // did we build a scriptSig? - if (scriptSig) { - // wrap as scriptHash if necessary - if (input.prevOutType === 'scripthash') { - scriptSig = bscript.scriptHashInput(scriptSig, input.redeemScript) - } + keyPair = new ECPair(null, Q, { + network: network + }) + } - tx.setInputScript(index, scriptSig) - } - }) + var hd = new HDNode(keyPair, chainCode) + hd.depth = depth + hd.index = index + hd.parentFingerprint = parentFingerprint - return tx + return hd } -TransactionBuilder.prototype.sign = function (index, keyPair, redeemScript, hashType) { - if (keyPair.network !== this.network) throw new Error('Inconsistent network') - if (!this.inputs[index]) throw new Error('No input at index: ' + index) - hashType = hashType || Transaction.SIGHASH_ALL - - var input = this.inputs[index] - var canSign = input.hashType && - input.prevOutScript && - input.prevOutType && - input.pubKeys && - input.scriptType && - input.signatures && - input.signatures.length === input.pubKeys.length +HDNode.prototype.getAddress = function () { + return this.keyPair.getAddress() +} - var kpPubKey = keyPair.getPublicKeyBuffer() +HDNode.prototype.getIdentifier = function () { + return bcrypto.hash160(this.keyPair.getPublicKeyBuffer()) +} - // are we ready to sign? - if (canSign) { - // if redeemScript was provided, enforce consistency - if (redeemScript) { - if (!bufferEquals(input.redeemScript, redeemScript)) throw new Error('Inconsistent redeemScript') - } +HDNode.prototype.getFingerprint = function () { + return this.getIdentifier().slice(0, 4) +} - if (input.hashType !== hashType) throw new Error('Inconsistent hashType') +HDNode.prototype.getNetwork = function () { + return this.keyPair.getNetwork() +} - // no? prepare - } else { - // must be pay-to-scriptHash? - if (redeemScript) { - // if we have a prevOutScript, enforce scriptHash equality to the redeemScript - if (input.prevOutScript) { - if (input.prevOutType !== 'scripthash') throw new Error('PrevOutScript must be P2SH') +HDNode.prototype.getPublicKeyBuffer = function () { + return this.keyPair.getPublicKeyBuffer() +} - var scriptHash = bscript.decompile(input.prevOutScript)[1] - if (!bufferEquals(scriptHash, bcrypto.hash160(redeemScript))) throw new Error('RedeemScript does not match ' + scriptHash.toString('hex')) - } +HDNode.prototype.neutered = function () { + var neuteredKeyPair = new ECPair(null, this.keyPair.Q, { + network: this.keyPair.network + }) - var scriptType = bscript.classifyOutput(redeemScript) - var redeemScriptChunks = bscript.decompile(redeemScript) - var pubKeys + var neutered = new HDNode(neuteredKeyPair, this.chainCode) + neutered.depth = this.depth + neutered.index = this.index + neutered.parentFingerprint = this.parentFingerprint - switch (scriptType) { - case 'multisig': - pubKeys = redeemScriptChunks.slice(1, -2) + return neutered +} - break +HDNode.prototype.sign = function (hash) { + return this.keyPair.sign(hash) +} - case 'pubkeyhash': - var pkh1 = redeemScriptChunks[2] - var pkh2 = bcrypto.hash160(keyPair.getPublicKeyBuffer()) +HDNode.prototype.verify = function (hash, signature) { + return this.keyPair.verify(hash, signature) +} - if (!bufferEquals(pkh1, pkh2)) throw new Error('privateKey cannot sign for this input') - pubKeys = [kpPubKey] +HDNode.prototype.toBase58 = function (__isPrivate) { + if (__isPrivate !== undefined) throw new TypeError('Unsupported argument in 2.0.0') - break + // Version + var network = this.keyPair.network + var version = this.keyPair.d ? network.bip32.private : network.bip32.public + var buffer = new Buffer(78) - case 'pubkey': - pubKeys = redeemScriptChunks.slice(0, 1) + // 4 bytes: version bytes + buffer.writeUInt32BE(version, 0) - break + // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, .... + buffer.writeUInt8(this.depth, 4) - default: - throw new Error('RedeemScript not supported (' + scriptType + ')') - } + // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key) + buffer.writeUInt32BE(this.parentFingerprint, 5) - // if we don't have a prevOutScript, generate a P2SH script - if (!input.prevOutScript) { - input.prevOutScript = bscript.scriptHashOutput(bcrypto.hash160(redeemScript)) - input.prevOutType = 'scripthash' - } + // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized. + // This is encoded in big endian. (0x00000000 if master key) + buffer.writeUInt32BE(this.index, 9) - input.pubKeys = pubKeys - input.redeemScript = redeemScript - input.scriptType = scriptType - input.signatures = pubKeys.map(function () { return undefined }) - } else { - // pay-to-scriptHash is not possible without a redeemScript - if (input.prevOutType === 'scripthash') throw new Error('PrevOutScript is P2SH, missing redeemScript') + // 32 bytes: the chain code + this.chainCode.copy(buffer, 13) - // if we don't have a scriptType, assume pubKeyHash otherwise - if (!input.scriptType) { - input.prevOutScript = bscript.pubKeyHashOutput(bcrypto.hash160(keyPair.getPublicKeyBuffer())) - input.prevOutType = 'pubkeyhash' - input.pubKeys = [kpPubKey] - input.scriptType = input.prevOutType - input.signatures = [undefined] - } else { - // throw if we can't sign with it - if (!input.pubKeys || !input.signatures) throw new Error(input.scriptType + ' not supported') - } - } + // 33 bytes: the public key or private key data + if (this.keyPair.d) { + // 0x00 + k for private keys + buffer.writeUInt8(0, 45) + this.keyPair.d.toBuffer(32).copy(buffer, 46) - input.hashType = hashType + // 33 bytes: the public key + } else { + // X9.62 encoding for public keys + this.keyPair.getPublicKeyBuffer().copy(buffer, 45) } - // ready to sign? - var signatureScript = input.redeemScript || input.prevOutScript - var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType) + return base58check.encode(buffer) +} - // enforce in order signing of public keys - var valid = input.pubKeys.some(function (pubKey, i) { - if (!bufferEquals(kpPubKey, pubKey)) return false - if (input.signatures[i]) throw new Error('Signature already exists') +// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions +HDNode.prototype.derive = function (index) { + var isHardened = index >= HDNode.HIGHEST_BIT + var data = new Buffer(37) - var signature = keyPair.sign(signatureHash) - input.signatures[i] = signature + // Hardened child + if (isHardened) { + if (!this.keyPair.d) throw new TypeError('Could not derive hardened child key') - return true - }) + // data = 0x00 || ser256(kpar) || ser32(index) + data[0] = 0x00 + this.keyPair.d.toBuffer(32).copy(data, 1) + data.writeUInt32BE(index, 33) - if (!valid) throw new Error('Key pair cannot sign for this input') -} + // Normal child + } else { + // data = serP(point(kpar)) || ser32(index) + // = serP(Kpar) || ser32(index) + this.keyPair.getPublicKeyBuffer().copy(data, 0) + data.writeUInt32BE(index, 33) + } -module.exports = TransactionBuilder + var I = createHmac('sha512', this.chainCode).update(data).digest() + var IL = I.slice(0, 32) + var IR = I.slice(32) -}).call(this,require("buffer").Buffer) -},{"./address":36,"./crypto":39,"./ecpair":41,"./ecsignature":42,"./networks":46,"./opcodes":47,"./script":48,"./transaction":49,"buffer":177,"buffer-equals":12}],51:[function(require,module,exports){ -var typeforce = require('typeforce') + var pIL = BigInteger.fromBuffer(IL) -function nBuffer (value, n) { - typeforce(types.Buffer, value) - if (value.length !== n) throw new Error('Expected ' + (n * 8) + '-bit Buffer, got ' + (value.length * 8) + '-bit Buffer') - return true -} + // In case parse256(IL) >= n, proceed with the next value for i + if (pIL.compareTo(curve.n) >= 0) { + return this.derive(index + 1) + } -function Hash160bit (value) { return nBuffer(value, 20) } -function Hash256bit (value) { return nBuffer(value, 32) } -function Buffer256bit (value) { return nBuffer(value, 32) } + // Private parent key -> private child key + var derivedKeyPair + if (this.keyPair.d) { + // ki = parse256(IL) + kpar (mod n) + var ki = pIL.add(this.keyPair.d).mod(curve.n) -var UINT53_MAX = Math.pow(2, 53) - 1 -function UInt2 (value) { return (value & 3) === value } -function UInt8 (value) { return (value & 0xff) === value } -function UInt32 (value) { return (value >>> 0) === value } -function UInt53 (value) { - return typeforce.Number(value) && - value >= 0 && - value <= UINT53_MAX && - Math.floor(value) === value -} + // In case ki == 0, proceed with the next value for i + if (ki.signum() === 0) { + return this.derive(index + 1) + } -// external dependent types -var BigInt = typeforce.quacksLike('BigInteger') -var ECPoint = typeforce.quacksLike('Point') + derivedKeyPair = new ECPair(ki, null, { + network: this.keyPair.network + }) -// exposed, external API -var ECSignature = typeforce.compile({ r: BigInt, s: BigInt }) -var Network = typeforce.compile({ - messagePrefix: typeforce.oneOf(typeforce.Buffer, typeforce.String), - bip32: { - public: UInt32, - private: UInt32 - }, - pubKeyHash: UInt8, - scriptHash: UInt8, - wif: UInt8, - dustThreshold: UInt53 -}) + // Public parent key -> public child key + } else { + // Ki = point(parse256(IL)) + Kpar + // = G*IL + Kpar + var Ki = curve.G.multiply(pIL).add(this.keyPair.Q) -// extend typeforce types with ours -var types = { - BigInt: BigInt, - Buffer256bit: Buffer256bit, - ECPoint: ECPoint, - ECSignature: ECSignature, - Hash160bit: Hash160bit, - Hash256bit: Hash256bit, - Network: Network, - UInt2: UInt2, - UInt8: UInt8, - UInt32: UInt32, - UInt53: UInt53 + // In case Ki is the point at infinity, proceed with the next value for i + if (curve.isInfinity(Ki)) { + return this.derive(index + 1) + } + + derivedKeyPair = new ECPair(null, Ki, { + network: this.keyPair.network + }) + } + + var hd = new HDNode(derivedKeyPair, IR) + hd.depth = this.depth + 1 + hd.index = index + hd.parentFingerprint = this.getFingerprint().readUInt32BE(0) + + return hd } -for (var typeName in typeforce) { - types[typeName] = typeforce[typeName] +HDNode.prototype.deriveHardened = function (index) { + // Only derives hardened private keys by default + return this.derive(index + HDNode.HIGHEST_BIT) } -module.exports = types +HDNode.prototype.toString = HDNode.prototype.toBase58 -},{"typeforce":34}],52:[function(require,module,exports){ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - 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 { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } -} +module.exports = HDNode -},{}],53:[function(require,module,exports){ -// Copyright 2010-2012 Mikeal Rogers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +}).call(this,require("buffer").Buffer) +},{"./crypto":85,"./ecpair":87,"./networks":92,"./types":97,"bigi":53,"bs58check":56,"buffer":223,"create-hmac":73,"ecurve":76,"typeforce":80}],90:[function(require,module,exports){ +module.exports = { + Block: require('./block'), + ECPair: require('./ecpair'), + ECSignature: require('./ecsignature'), + HDNode: require('./hdnode'), + Transaction: require('./transaction'), + TransactionBuilder: require('./transaction_builder'), -'use strict' + address: require('./address'), + bufferutils: require('./bufferutils'), + crypto: require('./crypto'), + message: require('./message'), + networks: require('./networks'), + opcodes: require('./opcodes'), + script: require('./script') +} -var extend = require('util')._extend - , cookies = require('./lib/cookies') - , helpers = require('./lib/helpers') +},{"./address":82,"./block":83,"./bufferutils":84,"./crypto":85,"./ecpair":87,"./ecsignature":88,"./hdnode":89,"./message":91,"./networks":92,"./opcodes":93,"./script":94,"./transaction":95,"./transaction_builder":96}],91:[function(require,module,exports){ +(function (Buffer){ +var bufferutils = require('./bufferutils') +var bcrypto = require('./crypto') +var ecdsa = require('./ecdsa') +var networks = require('./networks') -var isFunction = helpers.isFunction - , paramsHaveRequestBody = helpers.paramsHaveRequestBody +var BigInteger = require('bigi') +var ECPair = require('./ecpair') +var ECSignature = require('./ecsignature') +function magicHash (message, network) { + var messagePrefix = new Buffer(network.messagePrefix) + var messageBuffer = new Buffer(message) + var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length) -// organize params for patch, post, put, head, del -function initParams(uri, options, callback) { - if (typeof options === 'function') { - callback = options - } + var buffer = Buffer.concat([messagePrefix, lengthBuffer, messageBuffer]) + return bcrypto.hash256(buffer) +} - var params = {} - if (typeof options === 'object') { - params = extend({}, options) - params = extend(params, {uri: uri}) - } else if (typeof uri === 'string') { - params = extend({}, {uri: uri}) - } else { - params = extend({}, uri) - } +function sign (keyPair, message, network) { + network = network || networks.bitcoin - params.callback = callback - return params + var hash = magicHash(message, network) + var signature = keyPair.sign(hash) + var e = BigInteger.fromBuffer(hash) + var i = ecdsa.calcPubKeyRecoveryParam(e, signature, keyPair.Q) + + return signature.toCompact(i, keyPair.compressed) } -function request (uri, options, callback) { - if (typeof uri === 'undefined') { - throw new Error('undefined is not a valid uri or options object.') +function verify (address, signature, message, network) { + if (!Buffer.isBuffer(signature)) { + signature = new Buffer(signature, 'base64') } - var params = initParams(uri, options, callback) + network = network || networks.bitcoin - if (params.method === 'HEAD' && paramsHaveRequestBody(params)) { - throw new Error('HTTP HEAD requests MUST NOT include a request body.') - } + var hash = magicHash(message, network) + var parsed = ECSignature.parseCompact(signature) + var e = BigInteger.fromBuffer(hash) + var Q = ecdsa.recoverPubKey(e, parsed.signature, parsed.i) - return new request.Request(params) + var keyPair = new ECPair(null, Q, { + compressed: parsed.compressed, + network: network + }) + + return keyPair.getAddress() === address } -var verbs = ['get', 'head', 'post', 'put', 'patch', 'del'] +module.exports = { + magicHash: magicHash, + sign: sign, + verify: verify +} -verbs.forEach(function(verb) { - var method = verb === 'del' ? 'DELETE' : verb.toUpperCase() - request[verb] = function (uri, options, callback) { - var params = initParams(uri, options, callback) - params.method = method - return request(params, params.callback) - } -}) +}).call(this,require("buffer").Buffer) +},{"./bufferutils":84,"./crypto":85,"./ecdsa":86,"./ecpair":87,"./ecsignature":88,"./networks":92,"bigi":53,"buffer":223}],92:[function(require,module,exports){ +// https://en.bitcoin.it/wiki/List_of_address_prefixes +// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731 -request.jar = function (store) { - return cookies.jar(store) +module.exports = { + bitcoin: { + messagePrefix: '\x18Bitcoin Signed Message:\n', + bip32: { + public: 0x0488b21e, + private: 0x0488ade4 + }, + pubKeyHash: 0x00, + scriptHash: 0x05, + wif: 0x80, + dustThreshold: 546 // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162 + }, + testnet: { + messagePrefix: '\x18Bitcoin Signed Message:\n', + bip32: { + public: 0x043587cf, + private: 0x04358394 + }, + pubKeyHash: 0x6f, + scriptHash: 0xc4, + wif: 0xef, + dustThreshold: 546 + }, + litecoin: { + messagePrefix: '\x19Litecoin Signed Message:\n', + bip32: { + public: 0x019da462, + private: 0x019d9cfe + }, + pubKeyHash: 0x30, + scriptHash: 0x05, + wif: 0xb0, + dustThreshold: 0 // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365 + }, + dogecoin: { + messagePrefix: '\x19Dogecoin Signed Message:\n', + bip32: { + public: 0x02facafd, + private: 0x02fac398 + }, + pubKeyHash: 0x1e, + scriptHash: 0x16, + wif: 0x9e, + dustThreshold: 0 // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160 + } } -request.cookie = function (str) { - return cookies.parse(str) -} +},{}],93:[function(require,module,exports){ +module.exports={ + "OP_FALSE": 0, + "OP_0": 0, + "OP_PUSHDATA1": 76, + "OP_PUSHDATA2": 77, + "OP_PUSHDATA4": 78, + "OP_1NEGATE": 79, + "OP_RESERVED": 80, + "OP_1": 81, + "OP_TRUE": 81, + "OP_2": 82, + "OP_3": 83, + "OP_4": 84, + "OP_5": 85, + "OP_6": 86, + "OP_7": 87, + "OP_8": 88, + "OP_9": 89, + "OP_10": 90, + "OP_11": 91, + "OP_12": 92, + "OP_13": 93, + "OP_14": 94, + "OP_15": 95, + "OP_16": 96, -function wrapRequestMethod (method, options, requester) { + "OP_NOP": 97, + "OP_VER": 98, + "OP_IF": 99, + "OP_NOTIF": 100, + "OP_VERIF": 101, + "OP_VERNOTIF": 102, + "OP_ELSE": 103, + "OP_ENDIF": 104, + "OP_VERIFY": 105, + "OP_RETURN": 106, - return function (uri, opts, callback) { - var params = initParams(uri, opts, callback) + "OP_TOALTSTACK": 107, + "OP_FROMALTSTACK": 108, + "OP_2DROP": 109, + "OP_2DUP": 110, + "OP_3DUP": 111, + "OP_2OVER": 112, + "OP_2ROT": 113, + "OP_2SWAP": 114, + "OP_IFDUP": 115, + "OP_DEPTH": 116, + "OP_DROP": 117, + "OP_DUP": 118, + "OP_NIP": 119, + "OP_OVER": 120, + "OP_PICK": 121, + "OP_ROLL": 122, + "OP_ROT": 123, + "OP_SWAP": 124, + "OP_TUCK": 125, - var headerlessOptions = extend({}, options) - delete headerlessOptions.headers - params = extend(headerlessOptions, params) + "OP_CAT": 126, + "OP_SUBSTR": 127, + "OP_LEFT": 128, + "OP_RIGHT": 129, + "OP_SIZE": 130, - if (options.headers) { - var headers = extend({}, options.headers) - params.headers = extend(headers, params.headers) - } + "OP_INVERT": 131, + "OP_AND": 132, + "OP_OR": 133, + "OP_XOR": 134, + "OP_EQUAL": 135, + "OP_EQUALVERIFY": 136, + "OP_RESERVED1": 137, + "OP_RESERVED2": 138, - if (typeof method === 'string') { - params.method = (method === 'del' ? 'DELETE' : method.toUpperCase()) - method = request[method] - } + "OP_1ADD": 139, + "OP_1SUB": 140, + "OP_2MUL": 141, + "OP_2DIV": 142, + "OP_NEGATE": 143, + "OP_ABS": 144, + "OP_NOT": 145, + "OP_0NOTEQUAL": 146, + "OP_ADD": 147, + "OP_SUB": 148, + "OP_MUL": 149, + "OP_DIV": 150, + "OP_MOD": 151, + "OP_LSHIFT": 152, + "OP_RSHIFT": 153, - if (isFunction(requester)) { - method = requester - } + "OP_BOOLAND": 154, + "OP_BOOLOR": 155, + "OP_NUMEQUAL": 156, + "OP_NUMEQUALVERIFY": 157, + "OP_NUMNOTEQUAL": 158, + "OP_LESSTHAN": 159, + "OP_GREATERTHAN": 160, + "OP_LESSTHANOREQUAL": 161, + "OP_GREATERTHANOREQUAL": 162, + "OP_MIN": 163, + "OP_MAX": 164, - return method(params, params.callback) - } + "OP_WITHIN": 165, + + "OP_RIPEMD160": 166, + "OP_SHA1": 167, + "OP_SHA256": 168, + "OP_HASH160": 169, + "OP_HASH256": 170, + "OP_CODESEPARATOR": 171, + "OP_CHECKSIG": 172, + "OP_CHECKSIGVERIFY": 173, + "OP_CHECKMULTISIG": 174, + "OP_CHECKMULTISIGVERIFY": 175, + + "OP_NOP1": 176, + "OP_NOP2": 177, + "OP_NOP3": 178, + "OP_NOP4": 179, + "OP_NOP5": 180, + "OP_NOP6": 181, + "OP_NOP7": 182, + "OP_NOP8": 183, + "OP_NOP9": 184, + "OP_NOP10": 185, + + "OP_PUBKEYHASH": 253, + "OP_PUBKEY": 254, + "OP_INVALIDOPCODE": 255 } -request.defaults = function (options, requester) { - var self = this +},{}],94:[function(require,module,exports){ +(function (Buffer){ +var bip66 = require('bip66') +var bufferutils = require('./bufferutils') +var typeforce = require('typeforce') +var types = require('./types') - if (typeof options === 'function') { - requester = options - options = {} +var OPS = require('./opcodes') +var REVERSE_OPS = (function () { + var result = {} + for (var op in OPS) { + var code = OPS[op] + result[code] = op } + return result +})() - var defaults = wrapRequestMethod(self, options, requester) +var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1 - var verbs = ['get', 'head', 'post', 'put', 'patch', 'del'] - verbs.forEach(function(verb) { - defaults[verb] = wrapRequestMethod(verb, options, requester) - }) +function toASM (chunks) { + if (types.Buffer(chunks)) { + chunks = decompile(chunks) + } - defaults.cookie = wrapRequestMethod(self.cookie, options, requester) - defaults.jar = self.jar - defaults.defaults = self.defaults - return defaults + return chunks.map(function (chunk) { + // data? + if (Buffer.isBuffer(chunk)) return chunk.toString('hex') + + // opcode! + return REVERSE_OPS[chunk] + }).join(' ') } -request.forever = function (agentOptions, optionsArg) { - var options = {} - if (optionsArg) { - options = extend({}, optionsArg) - } - if (agentOptions) { - options.agentOptions = agentOptions - } +function fromASM (asm) { + typeforce(types.String, asm) - options.forever = true - return request.defaults(options) + return compile(asm.split(' ').map(function (chunkStr) { + // opcode? + if (OPS[chunkStr] !== undefined) return OPS[chunkStr] + + // data! + return new Buffer(chunkStr, 'hex') + })) } -// Exports +function compile (chunks) { + // TODO: remove me + if (types.Buffer(chunks)) return chunks -module.exports = request -request.Request = require('./request') -request.initParams = initParams + typeforce(types.Array, chunks) -// Backwards compatibility for request.debug -Object.defineProperty(request, 'debug', { - enumerable : true, - get : function() { - return request.Request.debug - }, - set : function(debug) { - request.Request.debug = debug - } -}) + var bufferSize = chunks.reduce(function (accum, chunk) { + // data chunk + if (Buffer.isBuffer(chunk)) { + return accum + bufferutils.pushDataSize(chunk.length) + chunk.length + } -},{"./lib/cookies":55,"./lib/helpers":59,"./request":138,"util":410}],54:[function(require,module,exports){ -'use strict' + // opcode + return accum + 1 + }, 0.0) -var caseless = require('caseless') - , uuid = require('node-uuid') - , helpers = require('./helpers') + var buffer = new Buffer(bufferSize) + var offset = 0 -var md5 = helpers.md5 - , toBase64 = helpers.toBase64 + chunks.forEach(function (chunk) { + // data chunk + if (Buffer.isBuffer(chunk)) { + offset += bufferutils.writePushDataInt(buffer, chunk.length, offset) + chunk.copy(buffer, offset) + offset += chunk.length -function Auth (request) { - // define all public properties here - this.request = request - this.hasAuth = false - this.sentAuth = false - this.bearerToken = null - this.user = null - this.pass = null -} + // opcode + } else { + buffer.writeUInt8(chunk, offset) + offset += 1 + } + }) -Auth.prototype.basic = function (user, pass, sendImmediately) { - var self = this - if (typeof user !== 'string' || (pass !== undefined && typeof pass !== 'string')) { - throw new Error('auth() received invalid user or password') - } - self.user = user - self.pass = pass - self.hasAuth = true - var header = user + ':' + (pass || '') - if (sendImmediately || typeof sendImmediately === 'undefined') { - var authHeader = 'Basic ' + toBase64(header) - self.sentAuth = true - return authHeader - } + if (offset !== buffer.length) throw new Error('Could not decode chunks') + return buffer } -Auth.prototype.bearer = function (bearer, sendImmediately) { - var self = this - self.bearerToken = bearer - self.hasAuth = true - if (sendImmediately || typeof sendImmediately === 'undefined') { - if (typeof bearer === 'function') { - bearer = bearer() +function decompile (buffer) { + // TODO: remove me + if (types.Array(buffer)) return buffer + + typeforce(types.Buffer, buffer) + + var chunks = [] + var i = 0 + + while (i < buffer.length) { + var opcode = buffer[i] + + // data chunk + if ((opcode > OPS.OP_0) && (opcode <= OPS.OP_PUSHDATA4)) { + var d = bufferutils.readPushDataInt(buffer, i) + + // did reading a pushDataInt fail? empty script + if (d === null) return [] + i += d.size + + // attempt to read too much data? empty script + if (i + d.number > buffer.length) return [] + + var data = buffer.slice(i, i + d.number) + i += d.number + + chunks.push(data) + + // opcode + } else { + chunks.push(opcode) + + i += 1 } - var authHeader = 'Bearer ' + (bearer || '') - self.sentAuth = true - return authHeader } -} -Auth.prototype.digest = function (method, path, authHeader) { - // TODO: More complete implementation of RFC 2617. - // - check challenge.algorithm - // - support algorithm="MD5-sess" - // - handle challenge.domain - // - support qop="auth-int" only - // - handle Authentication-Info (not necessarily?) - // - check challenge.stale (not necessarily?) - // - increase nc (not necessarily?) - // For reference: - // http://tools.ietf.org/html/rfc2617#section-3 - // https://github.com/bagder/curl/blob/master/lib/http_digest.c + return chunks +} - var self = this +function isCanonicalPubKey (buffer) { + if (!Buffer.isBuffer(buffer)) return false + if (buffer.length < 33) return false - var challenge = {} - var re = /([a-z0-9_-]+)=(?:"([^"]+)"|([a-z0-9_-]+))/gi - for (;;) { - var match = re.exec(authHeader) - if (!match) { - break - } - challenge[match[1]] = match[2] || match[3] + switch (buffer[0]) { + case 0x02: + case 0x03: + return buffer.length === 33 + case 0x04: + return buffer.length === 65 } - var ha1 = md5(self.user + ':' + challenge.realm + ':' + self.pass) - var ha2 = md5(method + ':' + path) - var qop = /(^|,)\s*auth\s*($|,)/.test(challenge.qop) && 'auth' - var nc = qop && '00000001' - var cnonce = qop && uuid().replace(/-/g, '') - var digestResponse = qop - ? md5(ha1 + ':' + challenge.nonce + ':' + nc + ':' + cnonce + ':' + qop + ':' + ha2) - : md5(ha1 + ':' + challenge.nonce + ':' + ha2) - var authValues = { - username: self.user, - realm: challenge.realm, - nonce: challenge.nonce, - uri: path, - qop: qop, - response: digestResponse, - nc: nc, - cnonce: cnonce, - algorithm: challenge.algorithm, - opaque: challenge.opaque - } - - authHeader = [] - for (var k in authValues) { - if (authValues[k]) { - if (k === 'qop' || k === 'nc' || k === 'algorithm') { - authHeader.push(k + '=' + authValues[k]) - } else { - authHeader.push(k + '="' + authValues[k] + '"') - } - } - } - authHeader = 'Digest ' + authHeader.join(', ') - self.sentAuth = true - return authHeader + return false } -Auth.prototype.onRequest = function (user, pass, sendImmediately, bearer) { - var self = this - , request = self.request +function isCanonicalSignature (buffer) { + if (!Buffer.isBuffer(buffer)) return false + if (!isDefinedHashType(buffer[buffer.length - 1])) return false - var authHeader - if (bearer === undefined && user === undefined) { - throw new Error('no auth mechanism defined') - } else if (bearer !== undefined) { - authHeader = self.bearer(bearer, sendImmediately) - } else { - authHeader = self.basic(user, pass, sendImmediately) - } - if (authHeader) { - request.setHeader('authorization', authHeader) - } + return bip66.check(buffer.slice(0, -1)) } -Auth.prototype.onResponse = function (response) { - var self = this - , request = self.request - - if (!self.hasAuth || self.sentAuth) { return null } - - var c = caseless(response.headers) - - var authHeader = c.get('www-authenticate') - var authVerb = authHeader && authHeader.split(' ')[0].toLowerCase() - // debug('reauth', authVerb) +function isDefinedHashType (hashType) { + var hashTypeMod = hashType & ~0x80 - switch (authVerb) { - case 'basic': - return self.basic(self.user, self.pass, true) +// return hashTypeMod > SIGHASH_ALL && hashTypeMod < SIGHASH_SINGLE + return hashTypeMod > 0x00 && hashTypeMod < 0x04 +} - case 'bearer': - return self.bearer(self.bearerToken, true) +function isPubKeyHashInput (script) { + var chunks = decompile(script) - case 'digest': - return self.digest(request.method, request.path, authHeader) - } + return chunks.length === 2 && + isCanonicalSignature(chunks[0]) && + isCanonicalPubKey(chunks[1]) } -exports.Auth = Auth +function isPubKeyHashOutput (script) { + var buffer = compile(script) -},{"./helpers":59,"caseless":73,"node-uuid":125}],55:[function(require,module,exports){ -'use strict' + return buffer.length === 25 && + buffer[0] === OPS.OP_DUP && + buffer[1] === OPS.OP_HASH160 && + buffer[2] === 0x14 && + buffer[23] === OPS.OP_EQUALVERIFY && + buffer[24] === OPS.OP_CHECKSIG +} -var tough = require('tough-cookie') +function isPubKeyInput (script) { + var chunks = decompile(script) -var Cookie = tough.Cookie - , CookieJar = tough.CookieJar + return chunks.length === 1 && + isCanonicalSignature(chunks[0]) +} +function isPubKeyOutput (script) { + var chunks = decompile(script) -exports.parse = function(str) { - if (str && str.uri) { - str = str.uri - } - if (typeof str !== 'string') { - throw new Error('The cookie function only accepts STRING as param') - } - return Cookie.parse(str) + return chunks.length === 2 && + isCanonicalPubKey(chunks[0]) && + chunks[1] === OPS.OP_CHECKSIG } -// Adapt the sometimes-Async api of tough.CookieJar to our requirements -function RequestJar(store) { - var self = this - self._jar = new CookieJar(store) -} -RequestJar.prototype.setCookie = function(cookieOrStr, uri, options) { - var self = this - return self._jar.setCookieSync(cookieOrStr, uri, options || {}) -} -RequestJar.prototype.getCookieString = function(uri) { - var self = this - return self._jar.getCookieStringSync(uri) -} -RequestJar.prototype.getCookies = function(uri) { - var self = this - return self._jar.getCookiesSync(uri) -} +function isScriptHashInput (script, allowIncomplete) { + var chunks = decompile(script) + if (chunks.length < 2) return false -exports.jar = function(store) { - return new RequestJar(store) -} + var lastChunk = chunks[chunks.length - 1] + if (!Buffer.isBuffer(lastChunk)) return false -},{"tough-cookie":133}],56:[function(require,module,exports){ -'use strict' + var scriptSigChunks = chunks.slice(0, -1) + var redeemScriptChunks = decompile(lastChunk) -module.exports = -function copy (obj) { - var o = {} - Object.keys(obj).forEach(function (i) { - o[i] = obj[i] - }) - return o + // is redeemScript a valid script? + if (redeemScriptChunks.length === 0) return false + + return classifyInput(scriptSigChunks, allowIncomplete) === classifyOutput(redeemScriptChunks) } -},{}],57:[function(require,module,exports){ -(function (process){ -'use strict' +function isScriptHashOutput (script) { + var buffer = compile(script) -function formatHostname(hostname) { - // canonicalize the hostname, so that 'oogle.com' won't match 'google.com' - return hostname.replace(/^\.*/, '.').toLowerCase() + return buffer.length === 23 && + buffer[0] === OPS.OP_HASH160 && + buffer[1] === 0x14 && + buffer[22] === OPS.OP_EQUAL } -function parseNoProxyZone(zone) { - zone = zone.trim().toLowerCase() +// allowIncomplete is to account for combining signatures +// See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197 +function isMultisigInput (script, allowIncomplete) { + var chunks = decompile(script) + if (chunks.length < 2) return false + if (chunks[0] !== OPS.OP_0) return false - var zoneParts = zone.split(':', 2) - , zoneHost = formatHostname(zoneParts[0]) - , zonePort = zoneParts[1] - , hasPort = zone.indexOf(':') > -1 + if (allowIncomplete) { + return chunks.slice(1).every(function (chunk) { + return chunk === OPS.OP_0 || isCanonicalSignature(chunk) + }) + } - return {hostname: zoneHost, port: zonePort, hasPort: hasPort} + return chunks.slice(1).every(isCanonicalSignature) } -function uriInNoProxy(uri, noProxy) { - var port = uri.port || (uri.protocol === 'https:' ? '443' : '80') - , hostname = formatHostname(uri.hostname) - , noProxyList = noProxy.split(',') - - // iterate through the noProxyList until it finds a match. - return noProxyList.map(parseNoProxyZone).some(function(noProxyZone) { - var isMatchedAt = hostname.indexOf(noProxyZone.hostname) - , hostnameMatched = ( - isMatchedAt > -1 && - (isMatchedAt === hostname.length - noProxyZone.hostname.length) - ) +function isMultisigOutput (script) { + var chunks = decompile(script) + if (chunks.length < 4) return false + if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG) return false - if (noProxyZone.hasPort) { - return (port === noProxyZone.port) && hostnameMatched - } + var mOp = chunks[0] + var nOp = chunks[chunks.length - 2] - return hostnameMatched - }) -} + if (!types.Number(mOp)) return false + if (!types.Number(nOp)) return false -function getProxyFromURI(uri) { - // Decide the proper request proxy to use based on the request URI object and the - // environmental variables (NO_PROXY, HTTP_PROXY, etc.) - // respect NO_PROXY environment variables (see: http://lynx.isc.org/current/breakout/lynx_help/keystrokes/environments.html) + var m = mOp - OP_INT_BASE + var n = nOp - OP_INT_BASE - var noProxy = process.env.NO_PROXY || process.env.no_proxy || '' + // 0 < m <= n <= 16 + if (m <= 0) return false + if (m > n) return false + if (n > 16) return false + if (n !== chunks.length - 3) return false - // if the noProxy is a wildcard then return null + return chunks.slice(1, -2).every(isCanonicalPubKey) +} - if (noProxy === '*') { - return null - } +function isNullDataOutput (script) { + var chunks = decompile(script) + return chunks[0] === OPS.OP_RETURN +} - // if the noProxy is not empty and the uri is found return null +function classifyOutput (script) { + var chunks = decompile(script) - if (noProxy !== '' && uriInNoProxy(uri, noProxy)) { - return null + if (isPubKeyHashOutput(chunks)) { + return 'pubkeyhash' + } else if (isScriptHashOutput(chunks)) { + return 'scripthash' + } else if (isMultisigOutput(chunks)) { + return 'multisig' + } else if (isPubKeyOutput(chunks)) { + return 'pubkey' + } else if (isNullDataOutput(chunks)) { + return 'nulldata' } - // Check for HTTP or HTTPS Proxy in environment Else default to null + return 'nonstandard' +} - if (uri.protocol === 'http:') { - return process.env.HTTP_PROXY || - process.env.http_proxy || null - } +function classifyInput (script, allowIncomplete) { + var chunks = decompile(script) - if (uri.protocol === 'https:') { - return process.env.HTTPS_PROXY || - process.env.https_proxy || - process.env.HTTP_PROXY || - process.env.http_proxy || null + if (isPubKeyHashInput(chunks)) { + return 'pubkeyhash' + } else if (isMultisigInput(chunks, allowIncomplete)) { + return 'multisig' + } else if (isScriptHashInput(chunks, allowIncomplete)) { + return 'scripthash' + } else if (isPubKeyInput(chunks)) { + return 'pubkey' } - // if none of that works, return null - // (What uri protocol are you using then?) + return 'nonstandard' +} - return null +// Standard Script Templates +// {pubKey} OP_CHECKSIG +function pubKeyOutput (pubKey) { + return compile([pubKey, OPS.OP_CHECKSIG]) } -module.exports = getProxyFromURI +// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG +function pubKeyHashOutput (pubKeyHash) { + typeforce(types.Hash160bit, pubKeyHash) -}).call(this,require('_process')) -},{"_process":381}],58:[function(require,module,exports){ -'use strict' + return compile([OPS.OP_DUP, OPS.OP_HASH160, pubKeyHash, OPS.OP_EQUALVERIFY, OPS.OP_CHECKSIG]) +} -var fs = require('fs') -var qs = require('querystring') -var validate = require('har-validator') -var util = require('util') +// OP_HASH160 {scriptHash} OP_EQUAL +function scriptHashOutput (scriptHash) { + typeforce(types.Hash160bit, scriptHash) -function Har (request) { - this.request = request + return compile([OPS.OP_HASH160, scriptHash, OPS.OP_EQUAL]) } -Har.prototype.reducer = function (obj, pair) { - // new property ? - if (obj[pair.name] === undefined) { - obj[pair.name] = pair.value - return obj - } - - // existing? convert to array - var arr = [ - obj[pair.name], - pair.value - ] +// m [pubKeys ...] n OP_CHECKMULTISIG +function multisigOutput (m, pubKeys) { + typeforce(types.tuple(types.Number, [types.Buffer]), arguments) - obj[pair.name] = arr + var n = pubKeys.length + if (n < m) throw new Error('Not enough pubKeys provided') - return obj + return compile([].concat( + OP_INT_BASE + m, + pubKeys, + OP_INT_BASE + n, + OPS.OP_CHECKMULTISIG + )) } -Har.prototype.prep = function (data) { - // construct utility properties - data.queryObj = {} - data.headersObj = {} - data.postData.jsonObj = false - data.postData.paramsObj = false - - // construct query objects - if (data.queryString && data.queryString.length) { - data.queryObj = data.queryString.reduce(this.reducer, {}) - } - - // construct headers objects - if (data.headers && data.headers.length) { - // loweCase header keys - data.headersObj = data.headers.reduceRight(function (headers, header) { - headers[header.name] = header.value - return headers - }, {}) - } +// {signature} +function pubKeyInput (signature) { + typeforce(types.Buffer, signature) - // construct Cookie header - if (data.cookies && data.cookies.length) { - var cookies = data.cookies.map(function (cookie) { - return cookie.name + '=' + cookie.value - }) + return compile([signature]) +} - if (cookies.length) { - data.headersObj.cookie = cookies.join('; ') - } - } +// {signature} {pubKey} +function pubKeyHashInput (signature, pubKey) { + typeforce(types.tuple(types.Buffer, types.Buffer), arguments) - // prep body - switch (data.postData.mimeType) { - case 'multipart/mixed': - case 'multipart/related': - case 'multipart/form-data': - case 'multipart/alternative': - // reset values - data.postData.mimeType = 'multipart/form-data' - break + return compile([signature, pubKey]) +} - case 'application/x-www-form-urlencoded': - if (!data.postData.params) { - data.postData.text = '' - } else { - data.postData.paramsObj = data.postData.params.reduce(this.reducer, {}) +// {serialized scriptPubKey script} +function scriptHashInput (scriptSig, scriptPubKey) { + var scriptSigChunks = decompile(scriptSig) + var serializedScriptPubKey = compile(scriptPubKey) - // always overwrite - data.postData.text = qs.stringify(data.postData.paramsObj) - } - break + return compile([].concat( + scriptSigChunks, + serializedScriptPubKey + )) +} - case 'text/json': - case 'text/x-json': - case 'application/json': - case 'application/x-json': - data.postData.mimeType = 'application/json' +// OP_0 [signatures ...] +function multisigInput (signatures, scriptPubKey) { + if (scriptPubKey) { + var chunks = decompile(scriptPubKey) + if (!isMultisigOutput(chunks)) throw new Error('Expected multisig scriptPubKey') - if (data.postData.text) { - try { - data.postData.jsonObj = JSON.parse(data.postData.text) - } catch (e) { - this.request.debug(e) + var mOp = chunks[0] + var nOp = chunks[chunks.length - 2] + var m = mOp - OP_INT_BASE + var n = nOp - OP_INT_BASE - // force back to text/plain - data.postData.mimeType = 'text/plain' - } - } - break + if (signatures.length < m) throw new Error('Not enough signatures provided') + if (signatures.length > n) throw new Error('Too many signatures provided') } - return data + return compile([].concat(OPS.OP_0, signatures)) } -Har.prototype.options = function (options) { - // skip if no har property defined - if (!options.har) { - return options - } - - var har = util._extend({}, options.har) +function nullDataOutput (data) { + return compile([OPS.OP_RETURN, data]) +} - // only process the first entry - if (har.log && har.log.entries) { - har = har.log.entries[0] - } +module.exports = { + compile: compile, + decompile: decompile, + fromASM: fromASM, + toASM: toASM, - // add optional properties to make validation successful - har.url = har.url || options.url || options.uri || options.baseUrl || '/' - har.httpVersion = har.httpVersion || 'HTTP/1.1' - har.queryString = har.queryString || [] - har.headers = har.headers || [] - har.cookies = har.cookies || [] - har.postData = har.postData || {} - har.postData.mimeType = har.postData.mimeType || 'application/octet-stream' + isCanonicalPubKey: isCanonicalPubKey, + isCanonicalSignature: isCanonicalSignature, + isDefinedHashType: isDefinedHashType, + isPubKeyHashInput: isPubKeyHashInput, + isPubKeyHashOutput: isPubKeyHashOutput, + isPubKeyInput: isPubKeyInput, + isPubKeyOutput: isPubKeyOutput, + isScriptHashInput: isScriptHashInput, + isScriptHashOutput: isScriptHashOutput, + isMultisigInput: isMultisigInput, + isMultisigOutput: isMultisigOutput, + isNullDataOutput: isNullDataOutput, + classifyOutput: classifyOutput, + classifyInput: classifyInput, + pubKeyOutput: pubKeyOutput, + pubKeyHashOutput: pubKeyHashOutput, + scriptHashOutput: scriptHashOutput, + multisigOutput: multisigOutput, + pubKeyInput: pubKeyInput, + pubKeyHashInput: pubKeyHashInput, + scriptHashInput: scriptHashInput, + multisigInput: multisigInput, + nullDataOutput: nullDataOutput +} - har.bodySize = 0 - har.headersSize = 0 - har.postData.size = 0 +}).call(this,require("buffer").Buffer) +},{"./bufferutils":84,"./opcodes":93,"./types":97,"bip66":55,"buffer":223,"typeforce":80}],95:[function(require,module,exports){ +(function (Buffer){ +var bcrypto = require('./crypto') +var bscript = require('./script') +var bufferutils = require('./bufferutils') +var opcodes = require('./opcodes') +var typeforce = require('typeforce') +var types = require('./types') - if (!validate.request(har)) { - return options - } +function Transaction () { + this.version = 1 + this.locktime = 0 + this.ins = [] + this.outs = [] +} - // clean up and get some utility properties - var req = this.prep(har) +Transaction.DEFAULT_SEQUENCE = 0xffffffff +Transaction.SIGHASH_ALL = 0x01 +Transaction.SIGHASH_NONE = 0x02 +Transaction.SIGHASH_SINGLE = 0x03 +Transaction.SIGHASH_ANYONECANPAY = 0x80 - // construct new options - if (req.url) { - options.url = req.url +Transaction.fromBuffer = function (buffer, __noStrict) { + var offset = 0 + function readSlice (n) { + offset += n + return buffer.slice(offset - n, offset) } - if (req.method) { - options.method = req.method + function readUInt32 () { + var i = buffer.readUInt32LE(offset) + offset += 4 + return i } - if (Object.keys(req.queryObj).length) { - options.qs = req.queryObj + function readUInt64 () { + var i = bufferutils.readUInt64LE(buffer, offset) + offset += 8 + return i } - if (Object.keys(req.headersObj).length) { - options.headers = req.headersObj + function readVarInt () { + var vi = bufferutils.readVarInt(buffer, offset) + offset += vi.size + return vi.number } - switch (req.postData.mimeType) { - case 'application/x-www-form-urlencoded': - options.form = req.postData.paramsObj - break - - case 'application/json': - if (req.postData.jsonObj) { - options.body = req.postData.jsonObj - options.json = true - } - break - - case 'multipart/form-data': - options.formData = {} + function readScript () { + return readSlice(readVarInt()) + } - req.postData.params.forEach(function (param) { - var attachment = {} + var tx = new Transaction() + tx.version = readUInt32() - if (!param.fileName && !param.fileName && !param.contentType) { - options.formData[param.name] = param.value - return - } + var vinLen = readVarInt() + for (var i = 0; i < vinLen; ++i) { + tx.ins.push({ + hash: readSlice(32), + index: readUInt32(), + script: readScript(), + sequence: readUInt32() + }) + } - // attempt to read from disk! - if (param.fileName && !param.value) { - attachment.value = fs.createReadStream(param.fileName) - } else if (param.value) { - attachment.value = param.value - } + var voutLen = readVarInt() + for (i = 0; i < voutLen; ++i) { + tx.outs.push({ + value: readUInt64(), + script: readScript() + }) + } - if (param.fileName) { - attachment.options = { - filename: param.fileName, - contentType: param.contentType ? param.contentType : null - } - } + tx.locktime = readUInt32() - options.formData[param.name] = attachment - }) - break + if (__noStrict) return tx + if (offset !== buffer.length) throw new Error('Transaction has unexpected data') - default: - if (req.postData.text) { - options.body = req.postData.text - } - } + return tx +} - return options +Transaction.fromHex = function (hex) { + return Transaction.fromBuffer(new Buffer(hex, 'hex')) } -exports.Har = Har +Transaction.isCoinbaseHash = function (buffer) { + return Array.prototype.every.call(buffer, function (x) { + return x === 0 + }) +} -},{"fs":161,"har-validator":87,"querystring":385,"util":410}],59:[function(require,module,exports){ -(function (process,Buffer){ -'use strict' +var EMPTY_SCRIPT = new Buffer(0) -var jsonSafeStringify = require('json-stringify-safe') - , crypto = require('crypto') +Transaction.prototype.addInput = function (hash, index, sequence, scriptSig) { + typeforce(types.tuple( + types.Hash256bit, + types.UInt32, + types.maybe(types.UInt32), + types.maybe(types.Buffer) + ), arguments) -function deferMethod() { - if(typeof setImmediate === 'undefined') { - return process.nextTick + if (types.Null(sequence)) { + sequence = Transaction.DEFAULT_SEQUENCE } - return setImmediate + // Add the input and return the input's index + return (this.ins.push({ + hash: hash, + index: index, + script: scriptSig || EMPTY_SCRIPT, + sequence: sequence + }) - 1) } -function isFunction(value) { - return typeof value === 'function' +Transaction.prototype.addOutput = function (scriptPubKey, value) { + typeforce(types.tuple(types.Buffer, types.UInt53), arguments) + + // Add the output and return the output's index + return (this.outs.push({ + script: scriptPubKey, + value: value + }) - 1) } -function paramsHaveRequestBody(params) { +Transaction.prototype.byteLength = function () { + function scriptSize (someScript) { + var length = someScript.length + + return bufferutils.varIntSize(length) + length + } + return ( - params.body || - params.requestBodyStream || - (params.json && typeof params.json !== 'boolean') || - params.multipart + 8 + + bufferutils.varIntSize(this.ins.length) + + bufferutils.varIntSize(this.outs.length) + + this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) + + this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0) ) } -function safeStringify (obj) { - var ret - try { - ret = JSON.stringify(obj) - } catch (e) { - ret = jsonSafeStringify(obj) - } - return ret -} +Transaction.prototype.clone = function () { + var newTx = new Transaction() + newTx.version = this.version + newTx.locktime = this.locktime -function md5 (str) { - return crypto.createHash('md5').update(str).digest('hex') -} + newTx.ins = this.ins.map(function (txIn) { + return { + hash: txIn.hash, + index: txIn.index, + script: txIn.script, + sequence: txIn.sequence + } + }) -function isReadStream (rs) { - return rs.readable && rs.path && rs.mode -} + newTx.outs = this.outs.map(function (txOut) { + return { + script: txOut.script, + value: txOut.value + } + }) -function toBase64 (str) { - return (new Buffer(str || '', 'utf8')).toString('base64') + return newTx } -exports.isFunction = isFunction -exports.paramsHaveRequestBody = paramsHaveRequestBody -exports.safeStringify = safeStringify -exports.md5 = md5 -exports.isReadStream = isReadStream -exports.toBase64 = toBase64 -exports.defer = deferMethod() +var ONE = new Buffer('0000000000000000000000000000000000000000000000000000000000000001', 'hex') +var VALUE_UINT64_MAX = new Buffer('ffffffffffffffff', 'hex') -}).call(this,require('_process'),require("buffer").Buffer) -},{"_process":381,"buffer":177,"crypto":183,"json-stringify-safe":121}],60:[function(require,module,exports){ -(function (Buffer){ -'use strict' +/** + * Hash transaction for signing a specific input. + * + * Bitcoin uses a different hash for each signed transaction input. + * This method copies the transaction, makes the necessary changes based on the + * hashType, and then hashes the result. + * This hash can then be used to sign the provided transaction input. + */ +Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) { + typeforce(types.tuple(types.UInt32, types.Buffer, /* types.UInt8 */ types.Number), arguments) -var uuid = require('node-uuid') - , CombinedStream = require('combined-stream') - , isstream = require('isstream') + // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L29 + if (inIndex >= this.ins.length) return ONE + var txTmp = this.clone() -function Multipart (request) { - this.request = request - this.boundary = uuid() - this.chunked = false - this.body = null -} + // in case concatenating two scripts ends up with two codeseparators, + // or an extra one at the end, this prevents all those possible incompatibilities. + var hashScript = bscript.compile(bscript.decompile(prevOutScript).filter(function (x) { + return x !== opcodes.OP_CODESEPARATOR + })) + var i -Multipart.prototype.isChunked = function (options) { - var self = this - , chunked = false - , parts = options.data || options + // blank out other inputs' signatures + txTmp.ins.forEach(function (input) { input.script = EMPTY_SCRIPT }) + txTmp.ins[inIndex].script = hashScript - if (!parts.forEach) { - throw new Error('Argument error, options.multipart.') - } + // blank out some of the inputs + if ((hashType & 0x1f) === Transaction.SIGHASH_NONE) { + // wildcard payee + txTmp.outs = [] - if (options.chunked !== undefined) { - chunked = options.chunked - } + // let the others update at will + txTmp.ins.forEach(function (input, i) { + if (i !== inIndex) { + input.sequence = 0 + } + }) + } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE) { + var nOut = inIndex - if (self.request.getHeader('transfer-encoding') === 'chunked') { - chunked = true - } + // only lock-in the txOut payee at same index as txIn + // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L60 + if (nOut >= this.outs.length) return ONE - if (!chunked) { - parts.forEach(function (part) { - if(typeof part.body === 'undefined') { - throw new Error('Body attribute missing in multipart.') - } - if (isstream(part.body)) { - chunked = true + txTmp.outs = txTmp.outs.slice(0, nOut + 1) + + // blank all other outputs (clear scriptPubKey, value === -1) + var stubOut = { + script: EMPTY_SCRIPT, + valueBuffer: VALUE_UINT64_MAX + } + + for (i = 0; i < nOut; i++) { + txTmp.outs[i] = stubOut + } + + // let the others update at will + txTmp.ins.forEach(function (input, i) { + if (i !== inIndex) { + input.sequence = 0 } }) } - return chunked -} + // blank out other inputs completely, not recommended for open transactions + if (hashType & Transaction.SIGHASH_ANYONECANPAY) { + txTmp.ins[0] = txTmp.ins[inIndex] + txTmp.ins = txTmp.ins.slice(0, 1) + } -Multipart.prototype.setHeaders = function (chunked) { - var self = this + // serialize and hash + var buffer = new Buffer(txTmp.byteLength() + 4) + buffer.writeInt32LE(hashType, buffer.length - 4) + txTmp.toBuffer().copy(buffer, 0) - if (chunked && !self.request.hasHeader('transfer-encoding')) { - self.request.setHeader('transfer-encoding', 'chunked') - } + return bcrypto.hash256(buffer) +} - var header = self.request.getHeader('content-type') +Transaction.prototype.getHash = function () { + return bcrypto.hash256(this.toBuffer()) +} - if (!header || header.indexOf('multipart') === -1) { - self.request.setHeader('content-type', 'multipart/related; boundary=' + self.boundary) - } else { - if (header.indexOf('boundary') !== -1) { - self.boundary = header.replace(/.*boundary=([^\s;]+).*/, '$1') - } else { - self.request.setHeader('content-type', header + '; boundary=' + self.boundary) - } - } +Transaction.prototype.getId = function () { + // transaction hash's are displayed in reverse order + return [].reverse.call(this.getHash()).toString('hex') } -Multipart.prototype.build = function (parts, chunked) { - var self = this - var body = chunked ? new CombinedStream() : [] +Transaction.prototype.toBuffer = function () { + var buffer = new Buffer(this.byteLength()) - function add (part) { - return chunked ? body.append(part) : body.push(new Buffer(part)) + var offset = 0 + function writeSlice (slice) { + slice.copy(buffer, offset) + offset += slice.length } - if (self.request.preambleCRLF) { - add('\r\n') + function writeUInt32 (i) { + buffer.writeUInt32LE(i, offset) + offset += 4 } - parts.forEach(function (part) { - var preamble = '--' + self.boundary + '\r\n' - Object.keys(part).forEach(function (key) { - if (key === 'body') { return } - preamble += key + ': ' + part[key] + '\r\n' - }) - preamble += '\r\n' - add(preamble) - add(part.body) - add('\r\n') - }) - add('--' + self.boundary + '--') + function writeUInt64 (i) { + bufferutils.writeUInt64LE(buffer, i, offset) + offset += 8 + } - if (self.request.postambleCRLF) { - add('\r\n') + function writeVarInt (i) { + var n = bufferutils.writeVarInt(buffer, i, offset) + offset += n } - return body -} + writeUInt32(this.version) + writeVarInt(this.ins.length) -Multipart.prototype.onRequest = function (options) { - var self = this + this.ins.forEach(function (txIn) { + writeSlice(txIn.hash) + writeUInt32(txIn.index) + writeVarInt(txIn.script.length) + writeSlice(txIn.script) + writeUInt32(txIn.sequence) + }) - var chunked = self.isChunked(options) - , parts = options.data || options + writeVarInt(this.outs.length) + this.outs.forEach(function (txOut) { + if (!txOut.valueBuffer) { + writeUInt64(txOut.value) + } else { + writeSlice(txOut.valueBuffer) + } - self.setHeaders(chunked) - self.chunked = chunked - self.body = self.build(parts, chunked) -} + writeVarInt(txOut.script.length) + writeSlice(txOut.script) + }) -exports.Multipart = Multipart + writeUInt32(this.locktime) -}).call(this,require("buffer").Buffer) -},{"buffer":177,"combined-stream":74,"isstream":120,"node-uuid":125}],61:[function(require,module,exports){ -'use strict' + return buffer +} -var qs = require('qs') - , caseless = require('caseless') - , uuid = require('node-uuid') - , oauth = require('oauth-sign') +Transaction.prototype.toHex = function () { + return this.toBuffer().toString('hex') +} +Transaction.prototype.setInputScript = function (index, scriptSig) { + typeforce(types.tuple(types.Number, types.Buffer), arguments) -function OAuth (request) { - this.request = request + this.ins[index].script = scriptSig } -OAuth.prototype.buildParams = function (_oauth, uri, method, query, form, qsLib) { - var oa = {} - for (var i in _oauth) { - oa['oauth_' + i] = _oauth[i] - } - if (!oa.oauth_version) { - oa.oauth_version = '1.0' - } - if (!oa.oauth_timestamp) { - oa.oauth_timestamp = Math.floor( Date.now() / 1000 ).toString() - } - if (!oa.oauth_nonce) { - oa.oauth_nonce = uuid().replace(/-/g, '') - } - if (!oa.oauth_signature_method) { - oa.oauth_signature_method = 'HMAC-SHA1' - } - - var consumer_secret_or_private_key = oa.oauth_consumer_secret || oa.oauth_private_key - delete oa.oauth_consumer_secret - delete oa.oauth_private_key +module.exports = Transaction - var token_secret = oa.oauth_token_secret - delete oa.oauth_token_secret +}).call(this,require("buffer").Buffer) +},{"./bufferutils":84,"./crypto":85,"./opcodes":93,"./script":94,"./types":97,"buffer":223,"typeforce":80}],96:[function(require,module,exports){ +(function (Buffer){ +var baddress = require('./address') +var bcrypto = require('./crypto') +var bscript = require('./script') +var bufferEquals = require('buffer-equals') +var networks = require('./networks') +var ops = require('./opcodes') - var realm = oa.oauth_realm - delete oa.oauth_realm - delete oa.oauth_transport_method +var ECPair = require('./ecpair') +var ECSignature = require('./ecsignature') +var Transaction = require('./transaction') - var baseurl = uri.protocol + '//' + uri.host + uri.pathname - var params = qsLib.parse([].concat(query, form, qsLib.stringify(oa)).join('&')) +// re-orders signatures to match pubKeys, fills undefined otherwise +function fixMSSignatures (transaction, vin, pubKeys, signatures, prevOutScript, hashType, skipPubKey) { + // maintain a local copy of unmatched signatures + var unmatched = signatures.slice() + var cache = {} - oa.oauth_signature = oauth.sign( - oa.oauth_signature_method, - method, - baseurl, - params, - consumer_secret_or_private_key, - token_secret) + return pubKeys.map(function (pubKey) { + // skip optionally provided pubKey + if (skipPubKey && bufferEquals(skipPubKey, pubKey)) return undefined - if (realm) { - oa.realm = realm - } + var matched + var keyPair2 = ECPair.fromPublicKeyBuffer(pubKey) - return oa -} + // check for a matching signature + unmatched.some(function (signature, i) { + // skip if undefined || OP_0 + if (!signature) return false -OAuth.prototype.concatParams = function (oa, sep, wrap) { - wrap = wrap || '' + var signatureHash = cache[hashType] = cache[hashType] || transaction.hashForSignature(vin, prevOutScript, hashType) + if (!keyPair2.verify(signatureHash, signature)) return false - var params = Object.keys(oa).filter(function (i) { - return i !== 'realm' && i !== 'oauth_signature' - }).sort() + // remove matched signature from unmatched + unmatched[i] = undefined + matched = signature - if (oa.realm) { - params.splice(0, 1, 'realm') - } - params.push('oauth_signature') + return true + }) - return params.map(function (i) { - return i + '=' + wrap + oauth.rfc3986(oa[i]) + wrap - }).join(sep) + return matched || undefined + }) } -OAuth.prototype.onRequest = function (_oauth) { - var self = this - , request = self.request +function extractInput (transaction, txIn, vin) { + var redeemScript + var scriptSig = txIn.script + var scriptSigChunks = bscript.decompile(scriptSig) - var uri = request.uri || {} - , method = request.method || '' - , headers = caseless(request.headers) - , body = request.body || '' - , qsLib = request.qsLib || qs + var prevOutScript + var prevOutType = bscript.classifyInput(scriptSig, true) + var scriptType - var form - , query - , contentType = headers.get('content-type') || '' - , formContentType = 'application/x-www-form-urlencoded' - , transport = _oauth.transport_method || 'header' + // Re-classify if scriptHash + if (prevOutType === 'scripthash') { + redeemScript = scriptSigChunks.slice(-1)[0] + prevOutScript = bscript.scriptHashOutput(bcrypto.hash160(redeemScript)) - if (contentType.slice(0, formContentType.length) === formContentType) { - contentType = formContentType - form = body - } - if (uri.query) { - query = uri.query + scriptSig = bscript.compile(scriptSigChunks.slice(0, -1)) + scriptSigChunks = scriptSigChunks.slice(0, -1) + + scriptType = bscript.classifyInput(scriptSig, true) + } else { + scriptType = prevOutType } - if (transport === 'body' && (method !== 'POST' || contentType !== formContentType)) { - throw new Error('oauth: transport_method of \'body\' requires \'POST\' ' + - 'and content-type \'' + formContentType + '\'') + + // pre-empt redeemScript decompilation + var redeemScriptChunks + if (redeemScript) { + redeemScriptChunks = bscript.decompile(redeemScript) } - var oa = this.buildParams(_oauth, uri, method, query, form, qsLib) + // Extract hashType, pubKeys and signatures + var hashType, parsed, pubKeys, signatures - switch (transport) { - case 'header': - request.setHeader('Authorization', 'OAuth ' + this.concatParams(oa, ',', '"')) - break + switch (scriptType) { + case 'pubkeyhash': + parsed = ECSignature.parseScriptSignature(scriptSigChunks[0]) + hashType = parsed.hashType + pubKeys = scriptSigChunks.slice(1) + signatures = [parsed.signature] + prevOutScript = bscript.pubKeyHashOutput(bcrypto.hash160(pubKeys[0])) - case 'query': - request.path = (query ? '&' : '?') + this.concatParams(oa, '&') break - case 'body': - request.body = (form ? form + '&' : '') + this.concatParams(oa, '&') - break + case 'pubkey': + parsed = ECSignature.parseScriptSignature(scriptSigChunks[0]) + hashType = parsed.hashType + signatures = [parsed.signature] - default: - throw new Error('oauth: transport_method invalid') - } -} + if (redeemScript) { + pubKeys = redeemScriptChunks.slice(0, 1) + } -exports.OAuth = OAuth + break -},{"caseless":73,"node-uuid":125,"oauth-sign":126,"qs":127}],62:[function(require,module,exports){ -'use strict' + case 'multisig': + signatures = scriptSigChunks.slice(1).map(function (chunk) { + if (chunk === ops.OP_0) return undefined -var url = require('url') -var isUrl = /^https?:/ + var parsed = ECSignature.parseScriptSignature(chunk) + hashType = parsed.hashType -function Redirect (request) { - this.request = request - this.followRedirect = true - this.followRedirects = true - this.followAllRedirects = false - this.allowRedirect = function () {return true} - this.maxRedirects = 10 - this.redirects = [] - this.redirectsFollowed = 0 - this.removeRefererHeader = false -} + return parsed.signature + }) -Redirect.prototype.onRequest = function () { - var self = this - , request = self.request + if (redeemScript) { + pubKeys = redeemScriptChunks.slice(1, -2) - if (request.maxRedirects !== undefined) { - self.maxRedirects = request.maxRedirects - } - if (typeof request.followRedirect === 'function') { - self.allowRedirect = request.followRedirect - } - if (request.followRedirect !== undefined) { - self.followRedirects = !!request.followRedirect - } - if (request.followAllRedirects !== undefined) { - self.followAllRedirects = request.followAllRedirects - } - if (self.followRedirects || self.followAllRedirects) { - self.redirects = self.redirects || [] + if (pubKeys.length !== signatures.length) { + signatures = fixMSSignatures(transaction, vin, pubKeys, signatures, redeemScript, hashType, redeemScript) + } + } + + break } - if (request.removeRefererHeader !== undefined) { - self.removeRefererHeader = request.removeRefererHeader + + return { + hashType: hashType, + prevOutScript: prevOutScript, + prevOutType: prevOutType, + pubKeys: pubKeys, + redeemScript: redeemScript, + scriptType: scriptType, + signatures: signatures } } -Redirect.prototype.redirectTo = function (response) { - var self = this - , request = self.request - - var redirectTo = null - if (response.statusCode >= 300 && response.statusCode < 400 && response.caseless.has('location')) { - var location = response.caseless.get('location') - // debug('redirect', location) +function TransactionBuilder (network) { + this.prevTxMap = {} + this.prevOutScripts = {} + this.prevOutTypes = {} + this.network = network || networks.bitcoin - if (self.followAllRedirects) { - redirectTo = location - } else if (self.followRedirects) { - switch (request.method) { - case 'PATCH': - case 'PUT': - case 'POST': - case 'DELETE': - // Do not follow redirects - break - default: - redirectTo = location - break - } - } - } else if (response.statusCode === 401) { - var authHeader = request._auth.onResponse(response) - if (authHeader) { - request.setHeader('authorization', authHeader) - redirectTo = request.uri - } - } - return redirectTo + this.inputs = [] + this.tx = new Transaction() } -Redirect.prototype.onResponse = function (response) { - var self = this - , request = self.request +TransactionBuilder.fromTransaction = function (transaction, network) { + var txb = new TransactionBuilder(network) - var redirectTo = self.redirectTo(response) - if (!redirectTo || !self.allowRedirect.call(request, response)) { - return false - } + // Copy other transaction fields + txb.tx.version = transaction.version + txb.tx.locktime = transaction.locktime + // Extract/add inputs + transaction.ins.forEach(function (txIn) { + txb.addInput(txIn.hash, txIn.index, txIn.sequence) + }) - // debug('redirect to', redirectTo) + // Extract/add outputs + transaction.outs.forEach(function (txOut) { + txb.addOutput(txOut.script, txOut.value) + }) - // ignore any potential response body. it cannot possibly be useful - // to us at this point. - if (request._paused) { - response.resume() - } + // Extract/add signatures + txb.inputs = transaction.ins.map(function (txIn, vin) { + // TODO: verify whether extractInput is sane with coinbase scripts + if (Transaction.isCoinbaseHash(txIn.hash)) { + throw new Error('coinbase inputs not supported') + } - if (self.redirectsFollowed >= self.maxRedirects) { - request.emit('error', new Error('Exceeded maxRedirects. Probably stuck in a redirect loop ' + request.uri.href)) - return false - } - self.redirectsFollowed += 1 + // Ignore empty scripts + if (txIn.script.length === 0) return {} - if (!isUrl.test(redirectTo)) { - redirectTo = url.resolve(request.uri.href, redirectTo) - } + return extractInput(transaction, txIn, vin) + }) - var uriPrev = request.uri - request.uri = url.parse(redirectTo) + return txb +} - // handle the case where we change protocol from https to http or vice versa - if (request.uri.protocol !== uriPrev.protocol) { - request._updateProtocol() - } +TransactionBuilder.prototype.addInput = function (txHash, vout, sequence, prevOutScript) { + // is it a hex string? + if (typeof txHash === 'string') { + // transaction hashs's are displayed in reverse order, un-reverse it + txHash = [].reverse.call(new Buffer(txHash, 'hex')) - self.redirects.push( - { statusCode : response.statusCode - , redirectUri: redirectTo - } - ) - if (self.followAllRedirects && response.statusCode !== 401 && response.statusCode !== 307) { - request.method = 'GET' - } - // request.method = 'GET' // Force all redirects to use GET || commented out fixes #215 - delete request.src - delete request.req - delete request.agent - delete request._started - if (response.statusCode !== 401 && response.statusCode !== 307) { - // Remove parameters from the previous response, unless this is the second request - // for a server that requires digest authentication. - delete request.body - delete request._form - if (request.headers) { - request.removeHeader('host') - request.removeHeader('content-type') - request.removeHeader('content-length') - if (request.uri.hostname !== request.originalHost.split(':')[0]) { - // Remove authorization if changing hostnames (but not if just - // changing ports or protocols). This matches the behavior of curl: - // https://github.com/bagder/curl/blob/6beb0eee/lib/http.c#L710 - request.removeHeader('authorization') - } - } + // is it a Transaction object? + } else if (txHash instanceof Transaction) { + prevOutScript = txHash.outs[vout].script + txHash = txHash.getHash() } - if (!self.removeRefererHeader) { - request.setHeader('referer', request.uri.href) - } + var input = {} + if (prevOutScript) { + var prevOutScriptChunks = bscript.decompile(prevOutScript) + var prevOutType = bscript.classifyOutput(prevOutScriptChunks) - request.emit('redirect') + // if we can, extract pubKey information + switch (prevOutType) { + case 'multisig': + input.pubKeys = prevOutScriptChunks.slice(1, -2) + input.signatures = input.pubKeys.map(function () { return undefined }) - request.init() + break - return true -} + case 'pubkey': + input.pubKeys = prevOutScriptChunks.slice(0, 1) + input.signatures = [undefined] -exports.Redirect = Redirect + break + } -},{"url":407}],63:[function(require,module,exports){ + if (prevOutType !== 'scripthash') { + input.scriptType = prevOutType + } -/*! - * knox - auth - * Copyright(c) 2010 LearnBoost - * MIT Licensed - */ + input.prevOutScript = prevOutScript + input.prevOutType = prevOutType + } -/** - * Module dependencies. - */ + var valid = this.inputs.every(function (input2) { + if (input2.hashType === undefined) return true -var crypto = require('crypto') - , parse = require('url').parse - ; + return input2.hashType & Transaction.SIGHASH_ANYONECANPAY + }) -/** - * Valid keys. - */ + if (!valid) throw new Error('No, this would invalidate signatures') -var keys = - [ 'acl' - , 'location' - , 'logging' - , 'notification' - , 'partNumber' - , 'policy' - , 'requestPayment' - , 'torrent' - , 'uploadId' - , 'uploads' - , 'versionId' - , 'versioning' - , 'versions' - , 'website' - ] + var prevOut = txHash.toString('hex') + ':' + vout + if (this.prevTxMap[prevOut]) throw new Error('Transaction is already an input') -/** - * Return an "Authorization" header value with the given `options` - * in the form of "AWS :" - * - * @param {Object} options - * @return {String} - * @api private - */ + var vin = this.tx.addInput(txHash, vout, sequence) + this.inputs[vin] = input + this.prevTxMap[prevOut] = vin -function authorization (options) { - return 'AWS ' + options.key + ':' + sign(options) + return vin } -module.exports = authorization -module.exports.authorization = authorization - -/** - * Simple HMAC-SHA1 Wrapper - * - * @param {Object} options - * @return {String} - * @api private - */ +TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) { + var tx = this.tx + var valid = this.inputs.every(function (input, index) { + if (input.hashType === undefined) return true -function hmacSha1 (options) { - return crypto.createHmac('sha1', options.secret).update(options.message).digest('base64') -} + var hashType = input.hashType & 0x1f + return hashType === Transaction.SIGHASH_NONE || + (hashType === Transaction.SIGHASH_SINGLE && index < tx.outs.length) + }) -module.exports.hmacSha1 = hmacSha1 + if (!valid) throw new Error('No, this would invalidate signatures') -/** - * Create a base64 sha1 HMAC for `options`. - * - * @param {Object} options - * @return {String} - * @api private - */ + // Attempt to get a script if it's a base58 address string + if (typeof scriptPubKey === 'string') { + scriptPubKey = baddress.toOutputScript(scriptPubKey, this.network) + } -function sign (options) { - options.message = stringToSign(options) - return hmacSha1(options) + return tx.addOutput(scriptPubKey, value) } -module.exports.sign = sign - -/** - * Create a base64 sha1 HMAC for `options`. - * - * Specifically to be used with S3 presigned URLs - * - * @param {Object} options - * @return {String} - * @api private - */ -function signQuery (options) { - options.message = queryStringToSign(options) - return hmacSha1(options) +TransactionBuilder.prototype.build = function () { + return this.__build(false) } -module.exports.signQuery= signQuery - -/** - * Return a string for sign() with the given `options`. - * - * Spec: - * - * \n - * \n - * \n - * \n - * [headers\n] - * - * - * @param {Object} options - * @return {String} - * @api private - */ - -function stringToSign (options) { - var headers = options.amazonHeaders || '' - if (headers) headers += '\n' - var r = - [ options.verb - , options.md5 - , options.contentType - , options.date ? options.date.toUTCString() : '' - , headers + options.resource - ] - return r.join('\n') +TransactionBuilder.prototype.buildIncomplete = function () { + return this.__build(true) } -module.exports.queryStringToSign = stringToSign - -/** - * Return a string for sign() with the given `options`, but is meant exclusively - * for S3 presigned URLs - * - * Spec: - * - * \n - * - * - * @param {Object} options - * @return {String} - * @api private - */ -function queryStringToSign (options){ - return 'GET\n\n\n' + options.date + '\n' + options.resource +var canBuildTypes = { + 'multisig': true, + 'pubkey': true, + 'pubkeyhash': true } -module.exports.queryStringToSign = queryStringToSign - -/** - * Perform the following: - * - * - ignore non-amazon headers - * - lowercase fields - * - sort lexicographically - * - trim whitespace between ":" - * - join with newline - * - * @param {Object} headers - * @return {String} - * @api private - */ -function canonicalizeHeaders (headers) { - var buf = [] - , fields = Object.keys(headers) - ; - for (var i = 0, len = fields.length; i < len; ++i) { - var field = fields[i] - , val = headers[field] - , field = field.toLowerCase() - ; - if (0 !== field.indexOf('x-amz')) continue - buf.push(field + ':' + val) +TransactionBuilder.prototype.__build = function (allowIncomplete) { + if (!allowIncomplete) { + if (!this.tx.ins.length) throw new Error('Transaction has no inputs') + if (!this.tx.outs.length) throw new Error('Transaction has no outputs') } - return buf.sort().join('\n') -} -module.exports.canonicalizeHeaders = canonicalizeHeaders -/** - * Perform the following: - * - * - ignore non sub-resources - * - sort lexicographically - * - * @param {String} resource - * @return {String} - * @api private - */ + var tx = this.tx.clone() -function canonicalizeResource (resource) { - var url = parse(resource, true) - , path = url.pathname - , buf = [] - ; + // Create script signatures from inputs + this.inputs.forEach(function (input, index) { + var scriptType = input.scriptType + var scriptSig - Object.keys(url.query).forEach(function(key){ - if (!~keys.indexOf(key)) return - var val = '' == url.query[key] ? '' : '=' + encodeURIComponent(url.query[key]) - buf.push(key + val) - }) + if (!allowIncomplete) { + if (!scriptType) throw new Error('Transaction is not complete') + if (!canBuildTypes[scriptType]) throw new Error(scriptType + ' not supported') - return path + (buf.length ? '?' + buf.sort().join('&') : '') -} -module.exports.canonicalizeResource = canonicalizeResource + // XXX: only relevant to types that need signatures + if (!input.signatures) throw new Error('Transaction is missing signatures') + } -},{"crypto":183,"url":407}],64:[function(require,module,exports){ -(function (Buffer){ -var DuplexStream = require('readable-stream/duplex') - , util = require('util') + if (input.signatures) { + switch (scriptType) { + case 'pubkeyhash': + var pkhSignature = input.signatures[0].toScriptSignature(input.hashType) + scriptSig = bscript.pubKeyHashInput(pkhSignature, input.pubKeys[0]) + break -function BufferList (callback) { - if (!(this instanceof BufferList)) - return new BufferList(callback) + case 'multisig': + var msSignatures = input.signatures.map(function (signature) { + return signature && signature.toScriptSignature(input.hashType) + }) - this._bufs = [] - this.length = 0 + // fill in blanks with OP_0 + if (allowIncomplete) { + for (var i = 0; i < msSignatures.length; ++i) { + msSignatures[i] = msSignatures[i] || ops.OP_0 + } - if (typeof callback == 'function') { - this._callback = callback + // remove blank signatures + } else { + msSignatures = msSignatures.filter(function (x) { return x }) + } - var piper = function (err) { - if (this._callback) { - this._callback(err) - this._callback = null + var redeemScript = allowIncomplete ? undefined : input.redeemScript + scriptSig = bscript.multisigInput(msSignatures, redeemScript) + break + + case 'pubkey': + var pkSignature = input.signatures[0].toScriptSignature(input.hashType) + scriptSig = bscript.pubKeyInput(pkSignature) + break } - }.bind(this) + } - this.on('pipe', function (src) { - src.on('error', piper) - }) - this.on('unpipe', function (src) { - src.removeListener('error', piper) - }) - } - else if (Buffer.isBuffer(callback)) - this.append(callback) - else if (Array.isArray(callback)) { - callback.forEach(function (b) { - Buffer.isBuffer(b) && this.append(b) - }.bind(this)) - } - - DuplexStream.call(this) -} + // did we build a scriptSig? + if (scriptSig) { + // wrap as scriptHash if necessary + if (input.prevOutType === 'scripthash') { + scriptSig = bscript.scriptHashInput(scriptSig, input.redeemScript) + } -util.inherits(BufferList, DuplexStream) + tx.setInputScript(index, scriptSig) + } + }) -BufferList.prototype._offset = function (offset) { - var tot = 0, i = 0, _t - for (; i < this._bufs.length; i++) { - _t = tot + this._bufs[i].length - if (offset < _t) - return [ i, offset - tot ] - tot = _t - } + return tx } -BufferList.prototype.append = function (buf) { - var isBuffer = Buffer.isBuffer(buf) || - buf instanceof BufferList +TransactionBuilder.prototype.sign = function (index, keyPair, redeemScript, hashType) { + if (keyPair.network !== this.network) throw new Error('Inconsistent network') + if (!this.inputs[index]) throw new Error('No input at index: ' + index) + hashType = hashType || Transaction.SIGHASH_ALL - this._bufs.push(isBuffer ? buf : new Buffer(buf)) - this.length += buf.length - return this -} + var input = this.inputs[index] + var canSign = input.hashType && + input.prevOutScript && + input.prevOutType && + input.pubKeys && + input.scriptType && + input.signatures && + input.signatures.length === input.pubKeys.length -BufferList.prototype._write = function (buf, encoding, callback) { - this.append(buf) - if (callback) - callback() -} + var kpPubKey = keyPair.getPublicKeyBuffer() -BufferList.prototype._read = function (size) { - if (!this.length) - return this.push(null) - size = Math.min(size, this.length) - this.push(this.slice(0, size)) - this.consume(size) -} + // are we ready to sign? + if (canSign) { + // if redeemScript was provided, enforce consistency + if (redeemScript) { + if (!bufferEquals(input.redeemScript, redeemScript)) throw new Error('Inconsistent redeemScript') + } -BufferList.prototype.end = function (chunk) { - DuplexStream.prototype.end.call(this, chunk) + if (input.hashType !== hashType) throw new Error('Inconsistent hashType') - if (this._callback) { - this._callback(null, this.slice()) - this._callback = null - } -} + // no? prepare + } else { + // must be pay-to-scriptHash? + if (redeemScript) { + // if we have a prevOutScript, enforce scriptHash equality to the redeemScript + if (input.prevOutScript) { + if (input.prevOutType !== 'scripthash') throw new Error('PrevOutScript must be P2SH') -BufferList.prototype.get = function (index) { - return this.slice(index, index + 1)[0] -} + var scriptHash = bscript.decompile(input.prevOutScript)[1] + if (!bufferEquals(scriptHash, bcrypto.hash160(redeemScript))) throw new Error('RedeemScript does not match ' + scriptHash.toString('hex')) + } -BufferList.prototype.slice = function (start, end) { - return this.copy(null, 0, start, end) -} + var scriptType = bscript.classifyOutput(redeemScript) + var redeemScriptChunks = bscript.decompile(redeemScript) + var pubKeys -BufferList.prototype.copy = function (dst, dstStart, srcStart, srcEnd) { - if (typeof srcStart != 'number' || srcStart < 0) - srcStart = 0 - if (typeof srcEnd != 'number' || srcEnd > this.length) - srcEnd = this.length - if (srcStart >= this.length) - return dst || new Buffer(0) - if (srcEnd <= 0) - return dst || new Buffer(0) + switch (scriptType) { + case 'multisig': + pubKeys = redeemScriptChunks.slice(1, -2) - var copy = !!dst - , off = this._offset(srcStart) - , len = srcEnd - srcStart - , bytes = len - , bufoff = (copy && dstStart) || 0 - , start = off[1] - , l - , i + break - // copy/slice everything - if (srcStart === 0 && srcEnd == this.length) { - if (!copy) // slice, just return a full concat - return Buffer.concat(this._bufs) + case 'pubkeyhash': + var pkh1 = redeemScriptChunks[2] + var pkh2 = bcrypto.hash160(keyPair.getPublicKeyBuffer()) - // copy, need to copy individual buffers - for (i = 0; i < this._bufs.length; i++) { - this._bufs[i].copy(dst, bufoff) - bufoff += this._bufs[i].length - } + if (!bufferEquals(pkh1, pkh2)) throw new Error('privateKey cannot sign for this input') + pubKeys = [kpPubKey] - return dst - } + break - // easy, cheap case where it's a subset of one of the buffers - if (bytes <= this._bufs[off[0]].length - start) { - return copy - ? this._bufs[off[0]].copy(dst, dstStart, start, start + bytes) - : this._bufs[off[0]].slice(start, start + bytes) - } + case 'pubkey': + pubKeys = redeemScriptChunks.slice(0, 1) - if (!copy) // a slice, we need something to copy in to - dst = new Buffer(len) + break - for (i = off[0]; i < this._bufs.length; i++) { - l = this._bufs[i].length - start + default: + throw new Error('RedeemScript not supported (' + scriptType + ')') + } - if (bytes > l) { - this._bufs[i].copy(dst, bufoff, start) + // if we don't have a prevOutScript, generate a P2SH script + if (!input.prevOutScript) { + input.prevOutScript = bscript.scriptHashOutput(bcrypto.hash160(redeemScript)) + input.prevOutType = 'scripthash' + } + + input.pubKeys = pubKeys + input.redeemScript = redeemScript + input.scriptType = scriptType + input.signatures = pubKeys.map(function () { return undefined }) } else { - this._bufs[i].copy(dst, bufoff, start, start + bytes) - break - } + // pay-to-scriptHash is not possible without a redeemScript + if (input.prevOutType === 'scripthash') throw new Error('PrevOutScript is P2SH, missing redeemScript') - bufoff += l - bytes -= l + // if we don't have a scriptType, assume pubKeyHash otherwise + if (!input.scriptType) { + input.prevOutScript = bscript.pubKeyHashOutput(bcrypto.hash160(keyPair.getPublicKeyBuffer())) + input.prevOutType = 'pubkeyhash' + input.pubKeys = [kpPubKey] + input.scriptType = input.prevOutType + input.signatures = [undefined] + } else { + // throw if we can't sign with it + if (!input.pubKeys || !input.signatures) throw new Error(input.scriptType + ' not supported') + } + } - if (start) - start = 0 + input.hashType = hashType } - return dst + // ready to sign? + var signatureScript = input.redeemScript || input.prevOutScript + var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType) + + // enforce in order signing of public keys + var valid = input.pubKeys.some(function (pubKey, i) { + if (!bufferEquals(kpPubKey, pubKey)) return false + if (input.signatures[i]) throw new Error('Signature already exists') + + var signature = keyPair.sign(signatureHash) + input.signatures[i] = signature + + return true + }) + + if (!valid) throw new Error('Key pair cannot sign for this input') } -BufferList.prototype.toString = function (encoding, start, end) { - return this.slice(start, end).toString(encoding) +module.exports = TransactionBuilder + +}).call(this,require("buffer").Buffer) +},{"./address":82,"./crypto":85,"./ecpair":87,"./ecsignature":88,"./networks":92,"./opcodes":93,"./script":94,"./transaction":95,"buffer":223,"buffer-equals":58}],97:[function(require,module,exports){ +var typeforce = require('typeforce') + +function nBuffer (value, n) { + typeforce(types.Buffer, value) + if (value.length !== n) throw new Error('Expected ' + (n * 8) + '-bit Buffer, got ' + (value.length * 8) + '-bit Buffer') + return true } -BufferList.prototype.consume = function (bytes) { - while (this._bufs.length) { - if (bytes > this._bufs[0].length) { - bytes -= this._bufs[0].length - this.length -= this._bufs[0].length - this._bufs.shift() - } else { - this._bufs[0] = this._bufs[0].slice(bytes) - this.length -= bytes - break - } - } - return this +function Hash160bit (value) { return nBuffer(value, 20) } +function Hash256bit (value) { return nBuffer(value, 32) } +function Buffer256bit (value) { return nBuffer(value, 32) } + +var UINT53_MAX = Math.pow(2, 53) - 1 +function UInt2 (value) { return (value & 3) === value } +function UInt8 (value) { return (value & 0xff) === value } +function UInt32 (value) { return (value >>> 0) === value } +function UInt53 (value) { + return typeforce.Number(value) && + value >= 0 && + value <= UINT53_MAX && + Math.floor(value) === value } -BufferList.prototype.duplicate = function () { - var i = 0 - , copy = new BufferList() +// external dependent types +var BigInt = typeforce.quacksLike('BigInteger') +var ECPoint = typeforce.quacksLike('Point') - for (; i < this._bufs.length; i++) - copy.append(this._bufs[i]) +// exposed, external API +var ECSignature = typeforce.compile({ r: BigInt, s: BigInt }) +var Network = typeforce.compile({ + messagePrefix: typeforce.oneOf(typeforce.Buffer, typeforce.String), + bip32: { + public: UInt32, + private: UInt32 + }, + pubKeyHash: UInt8, + scriptHash: UInt8, + wif: UInt8, + dustThreshold: UInt53 +}) - return copy +// extend typeforce types with ours +var types = { + BigInt: BigInt, + Buffer256bit: Buffer256bit, + ECPoint: ECPoint, + ECSignature: ECSignature, + Hash160bit: Hash160bit, + Hash256bit: Hash256bit, + Network: Network, + UInt2: UInt2, + UInt8: UInt8, + UInt32: UInt32, + UInt53: UInt53 } -BufferList.prototype.destroy = function () { - this._bufs.length = 0; - this.length = 0; - this.push(null); +for (var typeName in typeforce) { + types[typeName] = typeforce[typeName] } -;(function () { - var methods = { - 'readDoubleBE' : 8 - , 'readDoubleLE' : 8 - , 'readFloatBE' : 4 - , 'readFloatLE' : 4 - , 'readInt32BE' : 4 - , 'readInt32LE' : 4 - , 'readUInt32BE' : 4 - , 'readUInt32LE' : 4 - , 'readInt16BE' : 2 - , 'readInt16LE' : 2 - , 'readUInt16BE' : 2 - , 'readUInt16LE' : 2 - , 'readInt8' : 1 - , 'readUInt8' : 1 - } +module.exports = types - for (var m in methods) { - (function (m) { - BufferList.prototype[m] = function (offset) { - return this.slice(offset, offset + methods[m])[m](0) +},{"typeforce":80}],98:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true } - }(m)) + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor } -}()) - -module.exports = BufferList - -}).call(this,require("buffer").Buffer) -},{"buffer":177,"readable-stream/duplex":65,"util":410}],65:[function(require,module,exports){ -module.exports = require("./lib/_stream_duplex.js") +} -},{"./lib/_stream_duplex.js":66}],66:[function(require,module,exports){ -(function (process){ -// Copyright Joyent, Inc. and other Node contributors. +},{}],99:[function(require,module,exports){ +// Copyright 2010-2012 Mikeal Rogers // -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. +// http://www.apache.org/licenses/LICENSE-2.0 // -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. -// a duplex stream is just a stream that is both readable and writable. -// Since JS doesn't have multiple prototypal inheritance, this class -// prototypally inherits from Readable, and then parasitically from -// Writable. +'use strict' -module.exports = Duplex; +var extend = require('util')._extend + , cookies = require('./lib/cookies') + , helpers = require('./lib/helpers') -/**/ -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) keys.push(key); - return keys; -} -/**/ +var isFunction = helpers.isFunction + , paramsHaveRequestBody = helpers.paramsHaveRequestBody -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ +// organize params for patch, post, put, head, del +function initParams(uri, options, callback) { + if (typeof options === 'function') { + callback = options + } -var Readable = require('./_stream_readable'); -var Writable = require('./_stream_writable'); + var params = {} + if (typeof options === 'object') { + params = extend({}, options) + params = extend(params, {uri: uri}) + } else if (typeof uri === 'string') { + params = extend({}, {uri: uri}) + } else { + params = extend({}, uri) + } -util.inherits(Duplex, Readable); + params.callback = callback + return params +} -forEach(objectKeys(Writable.prototype), function(method) { - if (!Duplex.prototype[method]) - Duplex.prototype[method] = Writable.prototype[method]; -}); +function request (uri, options, callback) { + if (typeof uri === 'undefined') { + throw new Error('undefined is not a valid uri or options object.') + } -function Duplex(options) { - if (!(this instanceof Duplex)) - return new Duplex(options); + var params = initParams(uri, options, callback) - Readable.call(this, options); - Writable.call(this, options); + if (params.method === 'HEAD' && paramsHaveRequestBody(params)) { + throw new Error('HTTP HEAD requests MUST NOT include a request body.') + } - if (options && options.readable === false) - this.readable = false; + return new request.Request(params) +} - if (options && options.writable === false) - this.writable = false; +var verbs = ['get', 'head', 'post', 'put', 'patch', 'del'] - this.allowHalfOpen = true; - if (options && options.allowHalfOpen === false) - this.allowHalfOpen = false; +verbs.forEach(function(verb) { + var method = verb === 'del' ? 'DELETE' : verb.toUpperCase() + request[verb] = function (uri, options, callback) { + var params = initParams(uri, options, callback) + params.method = method + return request(params, params.callback) + } +}) - this.once('end', onend); +request.jar = function (store) { + return cookies.jar(store) } -// the no-half-open enforcer -function onend() { - // if we allow half-open state, or if the writable side ended, - // then we're ok. - if (this.allowHalfOpen || this._writableState.ended) - return; - - // no more data can be written. - // But allow more writes to happen in this tick. - process.nextTick(this.end.bind(this)); +request.cookie = function (str) { + return cookies.parse(str) } -function forEach (xs, f) { - for (var i = 0, l = xs.length; i < l; i++) { - f(xs[i], i); - } -} +function wrapRequestMethod (method, options, requester) { -}).call(this,require('_process')) -},{"./_stream_readable":67,"./_stream_writable":68,"_process":381,"core-util-is":69,"inherits":70}],67:[function(require,module,exports){ -(function (process){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. + return function (uri, opts, callback) { + var params = initParams(uri, opts, callback) -module.exports = Readable; + var headerlessOptions = extend({}, options) + delete headerlessOptions.headers + params = extend(headerlessOptions, params) -/**/ -var isArray = require('isarray'); -/**/ + if (options.headers) { + var headers = extend({}, options.headers) + params.headers = extend(headers, params.headers) + } + if (typeof method === 'string') { + params.method = (method === 'del' ? 'DELETE' : method.toUpperCase()) + method = request[method] + } -/**/ -var Buffer = require('buffer').Buffer; -/**/ + if (isFunction(requester)) { + method = requester + } -Readable.ReadableState = ReadableState; + return method(params, params.callback) + } +} -var EE = require('events').EventEmitter; +request.defaults = function (options, requester) { + var self = this -/**/ -if (!EE.listenerCount) EE.listenerCount = function(emitter, type) { - return emitter.listeners(type).length; -}; -/**/ + if (typeof options === 'function') { + requester = options + options = {} + } -var Stream = require('stream'); + var defaults = wrapRequestMethod(self, options, requester) -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ + var verbs = ['get', 'head', 'post', 'put', 'patch', 'del'] + verbs.forEach(function(verb) { + defaults[verb] = wrapRequestMethod(verb, options, requester) + }) -var StringDecoder; + defaults.cookie = wrapRequestMethod(self.cookie, options, requester) + defaults.jar = self.jar + defaults.defaults = self.defaults + return defaults +} -util.inherits(Readable, Stream); +request.forever = function (agentOptions, optionsArg) { + var options = {} + if (optionsArg) { + options = extend({}, optionsArg) + } + if (agentOptions) { + options.agentOptions = agentOptions + } -function ReadableState(options, stream) { - options = options || {}; + options.forever = true + return request.defaults(options) +} - // the point at which it stops calling _read() to fill the buffer - // Note: 0 is a valid value, means "don't call _read preemptively ever" - var hwm = options.highWaterMark; - this.highWaterMark = (hwm || hwm === 0) ? hwm : 16 * 1024; +// Exports - // cast to ints. - this.highWaterMark = ~~this.highWaterMark; +module.exports = request +request.Request = require('./request') +request.initParams = initParams - this.buffer = []; - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = false; - this.ended = false; - this.endEmitted = false; - this.reading = false; +// Backwards compatibility for request.debug +Object.defineProperty(request, 'debug', { + enumerable : true, + get : function() { + return request.Request.debug + }, + set : function(debug) { + request.Request.debug = debug + } +}) - // In streams that never have any data, and do push(null) right away, - // the consumer can miss the 'end' event if they do some I/O before - // consuming the stream. So, we don't emit('end') until some reading - // happens. - this.calledRead = false; +},{"./lib/cookies":101,"./lib/helpers":105,"./request":184,"util":456}],100:[function(require,module,exports){ +'use strict' - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, becuase any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; +var caseless = require('caseless') + , uuid = require('node-uuid') + , helpers = require('./helpers') - // whenever we return null, then we set a flag to say - // that we're awaiting a 'readable' event emission. - this.needReadable = false; - this.emittedReadable = false; - this.readableListening = false; +var md5 = helpers.md5 + , toBase64 = helpers.toBase64 - // object stream flag. Used to make read(n) ignore n and to - // make all the buffer merging and length checks go away - this.objectMode = !!options.objectMode; +function Auth (request) { + // define all public properties here + this.request = request + this.hasAuth = false + this.sentAuth = false + this.bearerToken = null + this.user = null + this.pass = null +} - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; +Auth.prototype.basic = function (user, pass, sendImmediately) { + var self = this + if (typeof user !== 'string' || (pass !== undefined && typeof pass !== 'string')) { + throw new Error('auth() received invalid user or password') + } + self.user = user + self.pass = pass + self.hasAuth = true + var header = user + ':' + (pass || '') + if (sendImmediately || typeof sendImmediately === 'undefined') { + var authHeader = 'Basic ' + toBase64(header) + self.sentAuth = true + return authHeader + } +} - // when piping, we only care about 'readable' events that happen - // after read()ing all the bytes and not getting any pushback. - this.ranOut = false; +Auth.prototype.bearer = function (bearer, sendImmediately) { + var self = this + self.bearerToken = bearer + self.hasAuth = true + if (sendImmediately || typeof sendImmediately === 'undefined') { + if (typeof bearer === 'function') { + bearer = bearer() + } + var authHeader = 'Bearer ' + (bearer || '') + self.sentAuth = true + return authHeader + } +} - // the number of writers that are awaiting a drain event in .pipe()s - this.awaitDrain = 0; +Auth.prototype.digest = function (method, path, authHeader) { + // TODO: More complete implementation of RFC 2617. + // - check challenge.algorithm + // - support algorithm="MD5-sess" + // - handle challenge.domain + // - support qop="auth-int" only + // - handle Authentication-Info (not necessarily?) + // - check challenge.stale (not necessarily?) + // - increase nc (not necessarily?) + // For reference: + // http://tools.ietf.org/html/rfc2617#section-3 + // https://github.com/bagder/curl/blob/master/lib/http_digest.c - // if true, a maybeReadMore has been scheduled - this.readingMore = false; + var self = this - this.decoder = null; - this.encoding = null; - if (options.encoding) { - if (!StringDecoder) - StringDecoder = require('string_decoder/').StringDecoder; - this.decoder = new StringDecoder(options.encoding); - this.encoding = options.encoding; + var challenge = {} + var re = /([a-z0-9_-]+)=(?:"([^"]+)"|([a-z0-9_-]+))/gi + for (;;) { + var match = re.exec(authHeader) + if (!match) { + break + } + challenge[match[1]] = match[2] || match[3] } -} -function Readable(options) { - if (!(this instanceof Readable)) - return new Readable(options); + var ha1 = md5(self.user + ':' + challenge.realm + ':' + self.pass) + var ha2 = md5(method + ':' + path) + var qop = /(^|,)\s*auth\s*($|,)/.test(challenge.qop) && 'auth' + var nc = qop && '00000001' + var cnonce = qop && uuid().replace(/-/g, '') + var digestResponse = qop + ? md5(ha1 + ':' + challenge.nonce + ':' + nc + ':' + cnonce + ':' + qop + ':' + ha2) + : md5(ha1 + ':' + challenge.nonce + ':' + ha2) + var authValues = { + username: self.user, + realm: challenge.realm, + nonce: challenge.nonce, + uri: path, + qop: qop, + response: digestResponse, + nc: nc, + cnonce: cnonce, + algorithm: challenge.algorithm, + opaque: challenge.opaque + } - this._readableState = new ReadableState(options, this); + authHeader = [] + for (var k in authValues) { + if (authValues[k]) { + if (k === 'qop' || k === 'nc' || k === 'algorithm') { + authHeader.push(k + '=' + authValues[k]) + } else { + authHeader.push(k + '="' + authValues[k] + '"') + } + } + } + authHeader = 'Digest ' + authHeader.join(', ') + self.sentAuth = true + return authHeader +} - // legacy - this.readable = true; +Auth.prototype.onRequest = function (user, pass, sendImmediately, bearer) { + var self = this + , request = self.request - Stream.call(this); + var authHeader + if (bearer === undefined && user === undefined) { + throw new Error('no auth mechanism defined') + } else if (bearer !== undefined) { + authHeader = self.bearer(bearer, sendImmediately) + } else { + authHeader = self.basic(user, pass, sendImmediately) + } + if (authHeader) { + request.setHeader('authorization', authHeader) + } } -// Manually shove something into the read() buffer. -// This returns true if the highWaterMark has not been hit yet, -// similar to how Writable.write() returns true if you should -// write() some more. -Readable.prototype.push = function(chunk, encoding) { - var state = this._readableState; +Auth.prototype.onResponse = function (response) { + var self = this + , request = self.request - if (typeof chunk === 'string' && !state.objectMode) { - encoding = encoding || state.defaultEncoding; - if (encoding !== state.encoding) { - chunk = new Buffer(chunk, encoding); - encoding = ''; - } + if (!self.hasAuth || self.sentAuth) { return null } + + var c = caseless(response.headers) + + var authHeader = c.get('www-authenticate') + var authVerb = authHeader && authHeader.split(' ')[0].toLowerCase() + // debug('reauth', authVerb) + + switch (authVerb) { + case 'basic': + return self.basic(self.user, self.pass, true) + + case 'bearer': + return self.bearer(self.bearerToken, true) + + case 'digest': + return self.digest(request.method, request.path, authHeader) } +} - return readableAddChunk(this, state, chunk, encoding, false); -}; +exports.Auth = Auth -// Unshift should *always* be something directly out of read() -Readable.prototype.unshift = function(chunk) { - var state = this._readableState; - return readableAddChunk(this, state, chunk, '', true); -}; +},{"./helpers":105,"caseless":119,"node-uuid":171}],101:[function(require,module,exports){ +'use strict' -function readableAddChunk(stream, state, chunk, encoding, addToFront) { - var er = chunkInvalid(state, chunk); - if (er) { - stream.emit('error', er); - } else if (chunk === null || chunk === undefined) { - state.reading = false; - if (!state.ended) - onEofChunk(stream, state); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (state.ended && !addToFront) { - var e = new Error('stream.push() after EOF'); - stream.emit('error', e); - } else if (state.endEmitted && addToFront) { - var e = new Error('stream.unshift() after end event'); - stream.emit('error', e); - } else { - if (state.decoder && !addToFront && !encoding) - chunk = state.decoder.write(chunk); +var tough = require('tough-cookie') - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) { - state.buffer.unshift(chunk); - } else { - state.reading = false; - state.buffer.push(chunk); - } +var Cookie = tough.Cookie + , CookieJar = tough.CookieJar - if (state.needReadable) - emitReadable(stream); - maybeReadMore(stream, state); - } - } else if (!addToFront) { - state.reading = false; +exports.parse = function(str) { + if (str && str.uri) { + str = str.uri + } + if (typeof str !== 'string') { + throw new Error('The cookie function only accepts STRING as param') } + return Cookie.parse(str) +} - return needMoreData(state); +// Adapt the sometimes-Async api of tough.CookieJar to our requirements +function RequestJar(store) { + var self = this + self._jar = new CookieJar(store) +} +RequestJar.prototype.setCookie = function(cookieOrStr, uri, options) { + var self = this + return self._jar.setCookieSync(cookieOrStr, uri, options || {}) +} +RequestJar.prototype.getCookieString = function(uri) { + var self = this + return self._jar.getCookieStringSync(uri) +} +RequestJar.prototype.getCookies = function(uri) { + var self = this + return self._jar.getCookiesSync(uri) } +exports.jar = function(store) { + return new RequestJar(store) +} +},{"tough-cookie":179}],102:[function(require,module,exports){ +'use strict' -// if it's past the high water mark, we can push in some more. -// Also, if we have no data yet, we can stand some -// more bytes. This is to work around cases where hwm=0, -// such as the repl. Also, if the push() triggered a -// readable event, and the user called read(largeNumber) such that -// needReadable was set, then we ought to push more, so that another -// 'readable' event will be triggered. -function needMoreData(state) { - return !state.ended && - (state.needReadable || - state.length < state.highWaterMark || - state.length === 0); +module.exports = +function copy (obj) { + var o = {} + Object.keys(obj).forEach(function (i) { + o[i] = obj[i] + }) + return o } -// backwards compatibility. -Readable.prototype.setEncoding = function(enc) { - if (!StringDecoder) - StringDecoder = require('string_decoder/').StringDecoder; - this._readableState.decoder = new StringDecoder(enc); - this._readableState.encoding = enc; -}; +},{}],103:[function(require,module,exports){ +(function (process){ +'use strict' -// Don't raise the hwm > 128MB -var MAX_HWM = 0x800000; -function roundUpToNextPowerOf2(n) { - if (n >= MAX_HWM) { - n = MAX_HWM; - } else { - // Get the next highest power of 2 - n--; - for (var p = 1; p < 32; p <<= 1) n |= n >> p; - n++; - } - return n; +function formatHostname(hostname) { + // canonicalize the hostname, so that 'oogle.com' won't match 'google.com' + return hostname.replace(/^\.*/, '.').toLowerCase() } -function howMuchToRead(n, state) { - if (state.length === 0 && state.ended) - return 0; +function parseNoProxyZone(zone) { + zone = zone.trim().toLowerCase() - if (state.objectMode) - return n === 0 ? 0 : 1; + var zoneParts = zone.split(':', 2) + , zoneHost = formatHostname(zoneParts[0]) + , zonePort = zoneParts[1] + , hasPort = zone.indexOf(':') > -1 - if (n === null || isNaN(n)) { - // only flow one buffer at a time - if (state.flowing && state.buffer.length) - return state.buffer[0].length; - else - return state.length; - } + return {hostname: zoneHost, port: zonePort, hasPort: hasPort} +} - if (n <= 0) - return 0; +function uriInNoProxy(uri, noProxy) { + var port = uri.port || (uri.protocol === 'https:' ? '443' : '80') + , hostname = formatHostname(uri.hostname) + , noProxyList = noProxy.split(',') - // If we're asking for more than the target buffer level, - // then raise the water mark. Bump up to the next highest - // power of 2, to prevent increasing it excessively in tiny - // amounts. - if (n > state.highWaterMark) - state.highWaterMark = roundUpToNextPowerOf2(n); + // iterate through the noProxyList until it finds a match. + return noProxyList.map(parseNoProxyZone).some(function(noProxyZone) { + var isMatchedAt = hostname.indexOf(noProxyZone.hostname) + , hostnameMatched = ( + isMatchedAt > -1 && + (isMatchedAt === hostname.length - noProxyZone.hostname.length) + ) - // don't have that much. return null, unless we've ended. - if (n > state.length) { - if (!state.ended) { - state.needReadable = true; - return 0; - } else - return state.length; - } + if (noProxyZone.hasPort) { + return (port === noProxyZone.port) && hostnameMatched + } - return n; + return hostnameMatched + }) } -// you can override either this method, or the async _read(n) below. -Readable.prototype.read = function(n) { - var state = this._readableState; - state.calledRead = true; - var nOrig = n; - var ret; +function getProxyFromURI(uri) { + // Decide the proper request proxy to use based on the request URI object and the + // environmental variables (NO_PROXY, HTTP_PROXY, etc.) + // respect NO_PROXY environment variables (see: http://lynx.isc.org/current/breakout/lynx_help/keystrokes/environments.html) - if (typeof n !== 'number' || n > 0) - state.emittedReadable = false; + var noProxy = process.env.NO_PROXY || process.env.no_proxy || '' - // if we're doing read(0) to trigger a readable event, but we - // already have a bunch of data in the buffer, then just trigger - // the 'readable' event and move on. - if (n === 0 && - state.needReadable && - (state.length >= state.highWaterMark || state.ended)) { - emitReadable(this); - return null; + // if the noProxy is a wildcard then return null + + if (noProxy === '*') { + return null } - n = howMuchToRead(n, state); + // if the noProxy is not empty and the uri is found return null - // if we've ended, and we're now clear, then finish it up. - if (n === 0 && state.ended) { - ret = null; + if (noProxy !== '' && uriInNoProxy(uri, noProxy)) { + return null + } - // In cases where the decoder did not receive enough data - // to produce a full chunk, then immediately received an - // EOF, state.buffer will contain [, ]. - // howMuchToRead will see this and coerce the amount to - // read to zero (because it's looking at the length of the - // first in state.buffer), and we'll end up here. - // - // This can only happen via state.decoder -- no other venue - // exists for pushing a zero-length chunk into state.buffer - // and triggering this behavior. In this case, we return our - // remaining data and end the stream, if appropriate. - if (state.length > 0 && state.decoder) { - ret = fromList(n, state); - state.length -= ret.length; - } + // Check for HTTP or HTTPS Proxy in environment Else default to null - if (state.length === 0) - endReadable(this); + if (uri.protocol === 'http:') { + return process.env.HTTP_PROXY || + process.env.http_proxy || null + } - return ret; + if (uri.protocol === 'https:') { + return process.env.HTTPS_PROXY || + process.env.https_proxy || + process.env.HTTP_PROXY || + process.env.http_proxy || null } - // All the actual chunk generation logic needs to be - // *below* the call to _read. The reason is that in certain - // synthetic stream cases, such as passthrough streams, _read - // may be a completely synchronous operation which may change - // the state of the read buffer, providing enough data when - // before there was *not* enough. - // - // So, the steps are: - // 1. Figure out what the state of things will be after we do - // a read from the buffer. - // - // 2. If that resulting state will trigger a _read, then call _read. - // Note that this may be asynchronous, or synchronous. Yes, it is - // deeply ugly to write APIs this way, but that still doesn't mean - // that the Readable class should behave improperly, as streams are - // designed to be sync/async agnostic. - // Take note if the _read call is sync or async (ie, if the read call - // has returned yet), so that we know whether or not it's safe to emit - // 'readable' etc. - // - // 3. Actually pull the requested chunks out of the buffer and return. + // if none of that works, return null + // (What uri protocol are you using then?) - // if we need a readable event, then we need to do some reading. - var doRead = state.needReadable; + return null +} - // if we currently have less than the highWaterMark, then also read some - if (state.length - n <= state.highWaterMark) - doRead = true; - - // however, if we've ended, then there's no point, and if we're already - // reading, then it's unnecessary. - if (state.ended || state.reading) - doRead = false; +module.exports = getProxyFromURI - if (doRead) { - state.reading = true; - state.sync = true; - // if the length is currently zero, then we *need* a readable event. - if (state.length === 0) - state.needReadable = true; - // call internal read method - this._read(state.highWaterMark); - state.sync = false; - } +}).call(this,require('_process')) +},{"_process":427}],104:[function(require,module,exports){ +'use strict' - // If _read called its callback synchronously, then `reading` - // will be false, and we need to re-evaluate how much data we - // can return to the user. - if (doRead && !state.reading) - n = howMuchToRead(nOrig, state); +var fs = require('fs') +var qs = require('querystring') +var validate = require('har-validator') +var util = require('util') - if (n > 0) - ret = fromList(n, state); - else - ret = null; +function Har (request) { + this.request = request +} - if (ret === null) { - state.needReadable = true; - n = 0; +Har.prototype.reducer = function (obj, pair) { + // new property ? + if (obj[pair.name] === undefined) { + obj[pair.name] = pair.value + return obj } - state.length -= n; + // existing? convert to array + var arr = [ + obj[pair.name], + pair.value + ] - // If we have nothing in the buffer, then we want to know - // as soon as we *do* get something into the buffer. - if (state.length === 0 && !state.ended) - state.needReadable = true; + obj[pair.name] = arr - // If we happened to read() exactly the remaining amount in the - // buffer, and the EOF has been seen at this point, then make sure - // that we emit 'end' on the very next tick. - if (state.ended && !state.endEmitted && state.length === 0) - endReadable(this); + return obj +} - return ret; -}; +Har.prototype.prep = function (data) { + // construct utility properties + data.queryObj = {} + data.headersObj = {} + data.postData.jsonObj = false + data.postData.paramsObj = false -function chunkInvalid(state, chunk) { - var er = null; - if (!Buffer.isBuffer(chunk) && - 'string' !== typeof chunk && - chunk !== null && - chunk !== undefined && - !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); + // construct query objects + if (data.queryString && data.queryString.length) { + data.queryObj = data.queryString.reduce(this.reducer, {}) } - return er; -} + // construct headers objects + if (data.headers && data.headers.length) { + // loweCase header keys + data.headersObj = data.headers.reduceRight(function (headers, header) { + headers[header.name] = header.value + return headers + }, {}) + } -function onEofChunk(stream, state) { - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; + // construct Cookie header + if (data.cookies && data.cookies.length) { + var cookies = data.cookies.map(function (cookie) { + return cookie.name + '=' + cookie.value + }) + + if (cookies.length) { + data.headersObj.cookie = cookies.join('; ') } } - state.ended = true; - // if we've ended and we have some data left, then emit - // 'readable' now to make sure it gets picked up. - if (state.length > 0) - emitReadable(stream); - else - endReadable(stream); -} + // prep body + switch (data.postData.mimeType) { + case 'multipart/mixed': + case 'multipart/related': + case 'multipart/form-data': + case 'multipart/alternative': + // reset values + data.postData.mimeType = 'multipart/form-data' + break -// Don't emit readable right away in sync mode, because this can trigger -// another read() call => stack overflow. This way, it might trigger -// a nextTick recursion warning, but that's not so bad. -function emitReadable(stream) { - var state = stream._readableState; - state.needReadable = false; - if (state.emittedReadable) - return; + case 'application/x-www-form-urlencoded': + if (!data.postData.params) { + data.postData.text = '' + } else { + data.postData.paramsObj = data.postData.params.reduce(this.reducer, {}) - state.emittedReadable = true; - if (state.sync) - process.nextTick(function() { - emitReadable_(stream); - }); - else - emitReadable_(stream); -} + // always overwrite + data.postData.text = qs.stringify(data.postData.paramsObj) + } + break -function emitReadable_(stream) { - stream.emit('readable'); -} + case 'text/json': + case 'text/x-json': + case 'application/json': + case 'application/x-json': + data.postData.mimeType = 'application/json' + if (data.postData.text) { + try { + data.postData.jsonObj = JSON.parse(data.postData.text) + } catch (e) { + this.request.debug(e) -// at this point, the user has presumably seen the 'readable' event, -// and called read() to consume some data. that may have triggered -// in turn another _read(n) call, in which case reading = true if -// it's in progress. -// However, if we're not ended, or reading, and the length < hwm, -// then go ahead and try to read some more preemptively. -function maybeReadMore(stream, state) { - if (!state.readingMore) { - state.readingMore = true; - process.nextTick(function() { - maybeReadMore_(stream, state); - }); + // force back to text/plain + data.postData.mimeType = 'text/plain' + } + } + break } -} -function maybeReadMore_(stream, state) { - var len = state.length; - while (!state.reading && !state.flowing && !state.ended && - state.length < state.highWaterMark) { - stream.read(0); - if (len === state.length) - // didn't get any data, stop spinning. - break; - else - len = state.length; - } - state.readingMore = false; + return data } -// abstract method. to be overridden in specific implementation classes. -// call cb(er, data) where data is <= n in length. -// for virtual (non-string, non-buffer) streams, "length" is somewhat -// arbitrary, and perhaps not very meaningful. -Readable.prototype._read = function(n) { - this.emit('error', new Error('not implemented')); -}; +Har.prototype.options = function (options) { + // skip if no har property defined + if (!options.har) { + return options + } -Readable.prototype.pipe = function(dest, pipeOpts) { - var src = this; - var state = this._readableState; + var har = util._extend({}, options.har) - switch (state.pipesCount) { - case 0: - state.pipes = dest; - break; - case 1: - state.pipes = [state.pipes, dest]; - break; - default: - state.pipes.push(dest); - break; + // only process the first entry + if (har.log && har.log.entries) { + har = har.log.entries[0] } - state.pipesCount += 1; - var doEnd = (!pipeOpts || pipeOpts.end !== false) && - dest !== process.stdout && - dest !== process.stderr; + // add optional properties to make validation successful + har.url = har.url || options.url || options.uri || options.baseUrl || '/' + har.httpVersion = har.httpVersion || 'HTTP/1.1' + har.queryString = har.queryString || [] + har.headers = har.headers || [] + har.cookies = har.cookies || [] + har.postData = har.postData || {} + har.postData.mimeType = har.postData.mimeType || 'application/octet-stream' - var endFn = doEnd ? onend : cleanup; - if (state.endEmitted) - process.nextTick(endFn); - else - src.once('end', endFn); + har.bodySize = 0 + har.headersSize = 0 + har.postData.size = 0 - dest.on('unpipe', onunpipe); - function onunpipe(readable) { - if (readable !== src) return; - cleanup(); + if (!validate.request(har)) { + return options } - function onend() { - dest.end(); - } + // clean up and get some utility properties + var req = this.prep(har) - // when the dest drains, it reduces the awaitDrain counter - // on the source. This would be more elegant with a .once() - // handler in flow(), but adding and removing repeatedly is - // too slow. - var ondrain = pipeOnDrain(src); - dest.on('drain', ondrain); + // construct new options + if (req.url) { + options.url = req.url + } - function cleanup() { - // cleanup event handlers once the pipe is broken - 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', cleanup); + if (req.method) { + options.method = req.method + } - // if the reader is waiting for a drain event from this - // specific writer, then it would cause it to never start - // flowing again. - // So, if this is awaiting a drain, then we just call it now. - // If we don't know, then assume that we are waiting for one. - if (!dest._writableState || dest._writableState.needDrain) - ondrain(); + if (Object.keys(req.queryObj).length) { + options.qs = req.queryObj } - // if the dest has an error, then stop piping into it. - // however, don't suppress the throwing behavior for this. - function onerror(er) { - unpipe(); - dest.removeListener('error', onerror); - if (EE.listenerCount(dest, 'error') === 0) - dest.emit('error', er); + if (Object.keys(req.headersObj).length) { + options.headers = req.headersObj } - // This is a brutally ugly hack to make sure that our error handler - // is attached before any userland ones. NEVER DO THIS. - if (!dest._events || !dest._events.error) - dest.on('error', onerror); - else if (isArray(dest._events.error)) - dest._events.error.unshift(onerror); - else - dest._events.error = [onerror, dest._events.error]; + switch (req.postData.mimeType) { + case 'application/x-www-form-urlencoded': + options.form = req.postData.paramsObj + break + case 'application/json': + if (req.postData.jsonObj) { + options.body = req.postData.jsonObj + options.json = true + } + break - // Both close and finish should trigger unpipe, but only once. - function onclose() { - dest.removeListener('finish', onfinish); - unpipe(); - } - dest.once('close', onclose); - function onfinish() { - dest.removeListener('close', onclose); - unpipe(); - } - dest.once('finish', onfinish); + case 'multipart/form-data': + options.formData = {} - function unpipe() { - src.unpipe(dest); - } + req.postData.params.forEach(function (param) { + var attachment = {} - // tell the dest that it's being piped to - dest.emit('pipe', src); + if (!param.fileName && !param.fileName && !param.contentType) { + options.formData[param.name] = param.value + return + } - // start the flow if it hasn't been started already. - if (!state.flowing) { - // the handler that waits for readable events after all - // the data gets sucked out in flow. - // This would be easier to follow with a .once() handler - // in flow(), but that is too slow. - this.on('readable', pipeOnReadable); + // attempt to read from disk! + if (param.fileName && !param.value) { + attachment.value = fs.createReadStream(param.fileName) + } else if (param.value) { + attachment.value = param.value + } - state.flowing = true; - process.nextTick(function() { - flow(src); - }); - } + if (param.fileName) { + attachment.options = { + filename: param.fileName, + contentType: param.contentType ? param.contentType : null + } + } - return dest; -}; + options.formData[param.name] = attachment + }) + break -function pipeOnDrain(src) { - return function() { - var dest = this; - var state = src._readableState; - state.awaitDrain--; - if (state.awaitDrain === 0) - flow(src); - }; + default: + if (req.postData.text) { + options.body = req.postData.text + } + } + + return options } -function flow(src) { - var state = src._readableState; - var chunk; - state.awaitDrain = 0; +exports.Har = Har - function write(dest, i, list) { - var written = dest.write(chunk); - if (false === written) { - state.awaitDrain++; - } - } +},{"fs":207,"har-validator":133,"querystring":431,"util":456}],105:[function(require,module,exports){ +(function (process,Buffer){ +'use strict' - while (state.pipesCount && null !== (chunk = src.read())) { +var jsonSafeStringify = require('json-stringify-safe') + , crypto = require('crypto') - if (state.pipesCount === 1) - write(state.pipes, 0, null); - else - forEach(state.pipes, write); +function deferMethod() { + if(typeof setImmediate === 'undefined') { + return process.nextTick + } - src.emit('data', chunk); + return setImmediate +} - // if anyone needs a drain, then we have to wait for that. - if (state.awaitDrain > 0) - return; - } +function isFunction(value) { + return typeof value === 'function' +} - // if every destination was unpiped, either before entering this - // function, or in the while loop, then stop flowing. - // - // NB: This is a pretty rare edge case. - if (state.pipesCount === 0) { - state.flowing = false; +function paramsHaveRequestBody(params) { + return ( + params.body || + params.requestBodyStream || + (params.json && typeof params.json !== 'boolean') || + params.multipart + ) +} - // if there were data event listeners added, then switch to old mode. - if (EE.listenerCount(src, 'data') > 0) - emitDataEvents(src); - return; +function safeStringify (obj) { + var ret + try { + ret = JSON.stringify(obj) + } catch (e) { + ret = jsonSafeStringify(obj) } + return ret +} - // at this point, no one needed a drain, so we just ran out of data - // on the next readable event, start it over again. - state.ranOut = true; +function md5 (str) { + return crypto.createHash('md5').update(str).digest('hex') } -function pipeOnReadable() { - if (this._readableState.ranOut) { - this._readableState.ranOut = false; - flow(this); - } +function isReadStream (rs) { + return rs.readable && rs.path && rs.mode } +function toBase64 (str) { + return (new Buffer(str || '', 'utf8')).toString('base64') +} -Readable.prototype.unpipe = function(dest) { - var state = this._readableState; +exports.isFunction = isFunction +exports.paramsHaveRequestBody = paramsHaveRequestBody +exports.safeStringify = safeStringify +exports.md5 = md5 +exports.isReadStream = isReadStream +exports.toBase64 = toBase64 +exports.defer = deferMethod() - // if we're not piping anywhere, then do nothing. - if (state.pipesCount === 0) - return this; +}).call(this,require('_process'),require("buffer").Buffer) +},{"_process":427,"buffer":223,"crypto":229,"json-stringify-safe":167}],106:[function(require,module,exports){ +(function (Buffer){ +'use strict' - // just one destination. most common case. - if (state.pipesCount === 1) { - // passed in one, but it's not the right one. - if (dest && dest !== state.pipes) - return this; +var uuid = require('node-uuid') + , CombinedStream = require('combined-stream') + , isstream = require('isstream') - if (!dest) - dest = state.pipes; - // got a match. - state.pipes = null; - state.pipesCount = 0; - this.removeListener('readable', pipeOnReadable); - state.flowing = false; - if (dest) - dest.emit('unpipe', this); - return this; - } +function Multipart (request) { + this.request = request + this.boundary = uuid() + this.chunked = false + this.body = null +} - // slow case. multiple pipe destinations. +Multipart.prototype.isChunked = function (options) { + var self = this + , chunked = false + , parts = options.data || options - if (!dest) { - // remove all. - var dests = state.pipes; - var len = state.pipesCount; - state.pipes = null; - state.pipesCount = 0; - this.removeListener('readable', pipeOnReadable); - state.flowing = false; + if (!parts.forEach) { + throw new Error('Argument error, options.multipart.') + } - for (var i = 0; i < len; i++) - dests[i].emit('unpipe', this); - return this; + if (options.chunked !== undefined) { + chunked = options.chunked } - // try to find the right one. - var i = indexOf(state.pipes, dest); - if (i === -1) - return this; + if (self.request.getHeader('transfer-encoding') === 'chunked') { + chunked = true + } - state.pipes.splice(i, 1); - state.pipesCount -= 1; - if (state.pipesCount === 1) - state.pipes = state.pipes[0]; + if (!chunked) { + parts.forEach(function (part) { + if(typeof part.body === 'undefined') { + throw new Error('Body attribute missing in multipart.') + } + if (isstream(part.body)) { + chunked = true + } + }) + } - dest.emit('unpipe', this); + return chunked +} - return this; -}; +Multipart.prototype.setHeaders = function (chunked) { + var self = this -// set up data events if they are asked for -// Ensure readable listeners eventually get something -Readable.prototype.on = function(ev, fn) { - var res = Stream.prototype.on.call(this, ev, fn); + if (chunked && !self.request.hasHeader('transfer-encoding')) { + self.request.setHeader('transfer-encoding', 'chunked') + } - if (ev === 'data' && !this._readableState.flowing) - emitDataEvents(this); + var header = self.request.getHeader('content-type') - if (ev === 'readable' && this.readable) { - var state = this._readableState; - if (!state.readableListening) { - state.readableListening = true; - state.emittedReadable = false; - state.needReadable = true; - if (!state.reading) { - this.read(0); - } else if (state.length) { - emitReadable(this, state); - } + if (!header || header.indexOf('multipart') === -1) { + self.request.setHeader('content-type', 'multipart/related; boundary=' + self.boundary) + } else { + if (header.indexOf('boundary') !== -1) { + self.boundary = header.replace(/.*boundary=([^\s;]+).*/, '$1') + } else { + self.request.setHeader('content-type', header + '; boundary=' + self.boundary) } } +} - return res; -}; -Readable.prototype.addListener = Readable.prototype.on; +Multipart.prototype.build = function (parts, chunked) { + var self = this + var body = chunked ? new CombinedStream() : [] -// pause() and resume() are remnants of the legacy readable stream API -// If the user uses them, then switch into old mode. -Readable.prototype.resume = function() { - emitDataEvents(this); - this.read(0); - this.emit('resume'); -}; + function add (part) { + return chunked ? body.append(part) : body.push(new Buffer(part)) + } -Readable.prototype.pause = function() { - emitDataEvents(this, true); - this.emit('pause'); -}; + if (self.request.preambleCRLF) { + add('\r\n') + } -function emitDataEvents(stream, startPaused) { - var state = stream._readableState; + parts.forEach(function (part) { + var preamble = '--' + self.boundary + '\r\n' + Object.keys(part).forEach(function (key) { + if (key === 'body') { return } + preamble += key + ': ' + part[key] + '\r\n' + }) + preamble += '\r\n' + add(preamble) + add(part.body) + add('\r\n') + }) + add('--' + self.boundary + '--') - if (state.flowing) { - // https://github.com/isaacs/readable-stream/issues/16 - throw new Error('Cannot switch to old mode now.'); + if (self.request.postambleCRLF) { + add('\r\n') } - var paused = startPaused || false; - var readable = false; + return body +} - // convert to an old-style stream. - stream.readable = true; - stream.pipe = Stream.prototype.pipe; - stream.on = stream.addListener = Stream.prototype.on; +Multipart.prototype.onRequest = function (options) { + var self = this - stream.on('readable', function() { - readable = true; + var chunked = self.isChunked(options) + , parts = options.data || options - var c; - while (!paused && (null !== (c = stream.read()))) - stream.emit('data', c); + self.setHeaders(chunked) + self.chunked = chunked + self.body = self.build(parts, chunked) +} - if (c === null) { - readable = false; - stream._readableState.needReadable = true; - } - }); +exports.Multipart = Multipart - stream.pause = function() { - paused = true; - this.emit('pause'); - }; +}).call(this,require("buffer").Buffer) +},{"buffer":223,"combined-stream":120,"isstream":166,"node-uuid":171}],107:[function(require,module,exports){ +'use strict' - stream.resume = function() { - paused = false; - if (readable) - process.nextTick(function() { - stream.emit('readable'); - }); - else - this.read(0); - this.emit('resume'); - }; +var qs = require('qs') + , caseless = require('caseless') + , uuid = require('node-uuid') + , oauth = require('oauth-sign') - // now make it start, just in case it hadn't already. - stream.emit('readable'); + +function OAuth (request) { + this.request = request } -// wrap an old-style stream as the async data source. -// This is *not* part of the readable stream interface. -// It is an ugly unfortunate mess of history. -Readable.prototype.wrap = function(stream) { - var state = this._readableState; - var paused = false; +OAuth.prototype.buildParams = function (_oauth, uri, method, query, form, qsLib) { + var oa = {} + for (var i in _oauth) { + oa['oauth_' + i] = _oauth[i] + } + if (!oa.oauth_version) { + oa.oauth_version = '1.0' + } + if (!oa.oauth_timestamp) { + oa.oauth_timestamp = Math.floor( Date.now() / 1000 ).toString() + } + if (!oa.oauth_nonce) { + oa.oauth_nonce = uuid().replace(/-/g, '') + } + if (!oa.oauth_signature_method) { + oa.oauth_signature_method = 'HMAC-SHA1' + } - var self = this; - stream.on('end', function() { - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) - self.push(chunk); - } + var consumer_secret_or_private_key = oa.oauth_consumer_secret || oa.oauth_private_key + delete oa.oauth_consumer_secret + delete oa.oauth_private_key - self.push(null); - }); + var token_secret = oa.oauth_token_secret + delete oa.oauth_token_secret - stream.on('data', function(chunk) { - if (state.decoder) - chunk = state.decoder.write(chunk); + var realm = oa.oauth_realm + delete oa.oauth_realm + delete oa.oauth_transport_method - // don't skip over falsy values in objectMode - //if (state.objectMode && util.isNullOrUndefined(chunk)) - if (state.objectMode && (chunk === null || chunk === undefined)) - return; - else if (!state.objectMode && (!chunk || !chunk.length)) - return; + var baseurl = uri.protocol + '//' + uri.host + uri.pathname + var params = qsLib.parse([].concat(query, form, qsLib.stringify(oa)).join('&')) - var ret = self.push(chunk); - if (!ret) { - paused = true; - stream.pause(); - } - }); + oa.oauth_signature = oauth.sign( + oa.oauth_signature_method, + method, + baseurl, + params, + consumer_secret_or_private_key, + token_secret) - // proxy all the other methods. - // important when wrapping filters and duplexes. - for (var i in stream) { - if (typeof stream[i] === 'function' && - typeof this[i] === 'undefined') { - this[i] = function(method) { return function() { - return stream[method].apply(stream, arguments); - }}(i); - } + if (realm) { + oa.realm = realm } - // proxy certain important events. - var events = ['error', 'close', 'destroy', 'pause', 'resume']; - forEach(events, function(ev) { - stream.on(ev, self.emit.bind(self, ev)); - }); + return oa +} - // when we try to consume some more bytes, simply unpause the - // underlying stream. - self._read = function(n) { - if (paused) { - paused = false; - stream.resume(); - } - }; +OAuth.prototype.concatParams = function (oa, sep, wrap) { + wrap = wrap || '' - return self; -}; + var params = Object.keys(oa).filter(function (i) { + return i !== 'realm' && i !== 'oauth_signature' + }).sort() + if (oa.realm) { + params.splice(0, 1, 'realm') + } + params.push('oauth_signature') + + return params.map(function (i) { + return i + '=' + wrap + oauth.rfc3986(oa[i]) + wrap + }).join(sep) +} +OAuth.prototype.onRequest = function (_oauth) { + var self = this + , request = self.request -// exposed for testing purposes only. -Readable._fromList = fromList; + var uri = request.uri || {} + , method = request.method || '' + , headers = caseless(request.headers) + , body = request.body || '' + , qsLib = request.qsLib || qs -// Pluck off n bytes from an array of buffers. -// Length is the combined lengths of all the buffers in the list. -function fromList(n, state) { - var list = state.buffer; - var length = state.length; - var stringMode = !!state.decoder; - var objectMode = !!state.objectMode; - var ret; + var form + , query + , contentType = headers.get('content-type') || '' + , formContentType = 'application/x-www-form-urlencoded' + , transport = _oauth.transport_method || 'header' - // nothing in the list, definitely empty. - if (list.length === 0) - return null; + if (contentType.slice(0, formContentType.length) === formContentType) { + contentType = formContentType + form = body + } + if (uri.query) { + query = uri.query + } + if (transport === 'body' && (method !== 'POST' || contentType !== formContentType)) { + throw new Error('oauth: transport_method of \'body\' requires \'POST\' ' + + 'and content-type \'' + formContentType + '\'') + } - if (length === 0) - ret = null; - else if (objectMode) - ret = list.shift(); - else if (!n || n >= length) { - // read it all, truncate the array. - if (stringMode) - ret = list.join(''); - else - ret = Buffer.concat(list, length); - list.length = 0; - } else { - // read just some of it. - if (n < list[0].length) { - // just take a part of the first list item. - // slice is the same for buffers and strings. - var buf = list[0]; - ret = buf.slice(0, n); - list[0] = buf.slice(n); - } else if (n === list[0].length) { - // first list is a perfect match - ret = list.shift(); - } else { - // complex case. - // we have enough to cover it, but it spans past the first buffer. - if (stringMode) - ret = ''; - else - ret = new Buffer(n); + var oa = this.buildParams(_oauth, uri, method, query, form, qsLib) - var c = 0; - for (var i = 0, l = list.length; i < l && c < n; i++) { - var buf = list[0]; - var cpy = Math.min(n - c, buf.length); + switch (transport) { + case 'header': + request.setHeader('Authorization', 'OAuth ' + this.concatParams(oa, ',', '"')) + break - if (stringMode) - ret += buf.slice(0, cpy); - else - buf.copy(ret, c, 0, cpy); + case 'query': + request.path = (query ? '&' : '?') + this.concatParams(oa, '&') + break - if (cpy < buf.length) - list[0] = buf.slice(cpy); - else - list.shift(); + case 'body': + request.body = (form ? form + '&' : '') + this.concatParams(oa, '&') + break - c += cpy; - } - } + default: + throw new Error('oauth: transport_method invalid') } - - return ret; } -function endReadable(stream) { - var state = stream._readableState; +exports.OAuth = OAuth - // If we get here before consuming all the bytes, then that is a - // bug in node. Should never happen. - if (state.length > 0) - throw new Error('endReadable called on non-empty stream'); +},{"caseless":119,"node-uuid":171,"oauth-sign":172,"qs":173}],108:[function(require,module,exports){ +'use strict' - if (!state.endEmitted && state.calledRead) { - state.ended = true; - process.nextTick(function() { - // Check that we didn't get one last unshift. - if (!state.endEmitted && state.length === 0) { - state.endEmitted = true; - stream.readable = false; - stream.emit('end'); - } - }); - } -} +var url = require('url') +var isUrl = /^https?:/ -function forEach (xs, f) { - for (var i = 0, l = xs.length; i < l; i++) { - f(xs[i], i); - } +function Redirect (request) { + this.request = request + this.followRedirect = true + this.followRedirects = true + this.followAllRedirects = false + this.allowRedirect = function () {return true} + this.maxRedirects = 10 + this.redirects = [] + this.redirectsFollowed = 0 + this.removeRefererHeader = false } -function indexOf (xs, x) { - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) return i; +Redirect.prototype.onRequest = function () { + var self = this + , request = self.request + + if (request.maxRedirects !== undefined) { + self.maxRedirects = request.maxRedirects + } + if (typeof request.followRedirect === 'function') { + self.allowRedirect = request.followRedirect + } + if (request.followRedirect !== undefined) { + self.followRedirects = !!request.followRedirect + } + if (request.followAllRedirects !== undefined) { + self.followAllRedirects = request.followAllRedirects + } + if (self.followRedirects || self.followAllRedirects) { + self.redirects = self.redirects || [] + } + if (request.removeRefererHeader !== undefined) { + self.removeRefererHeader = request.removeRefererHeader } - return -1; } -}).call(this,require('_process')) -},{"_process":381,"buffer":177,"core-util-is":69,"events":375,"inherits":70,"isarray":71,"stream":399,"string_decoder/":72}],68:[function(require,module,exports){ -(function (process){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. +Redirect.prototype.redirectTo = function (response) { + var self = this + , request = self.request -// A bit simpler than readable streams. -// Implement an async ._write(chunk, cb), and it'll handle all -// the drain event emission and buffering. + var redirectTo = null + if (response.statusCode >= 300 && response.statusCode < 400 && response.caseless.has('location')) { + var location = response.caseless.get('location') + // debug('redirect', location) -module.exports = Writable; + if (self.followAllRedirects) { + redirectTo = location + } else if (self.followRedirects) { + switch (request.method) { + case 'PATCH': + case 'PUT': + case 'POST': + case 'DELETE': + // Do not follow redirects + break + default: + redirectTo = location + break + } + } + } else if (response.statusCode === 401) { + var authHeader = request._auth.onResponse(response) + if (authHeader) { + request.setHeader('authorization', authHeader) + redirectTo = request.uri + } + } + return redirectTo +} -/**/ -var Buffer = require('buffer').Buffer; -/**/ +Redirect.prototype.onResponse = function (response) { + var self = this + , request = self.request -Writable.WritableState = WritableState; + var redirectTo = self.redirectTo(response) + if (!redirectTo || !self.allowRedirect.call(request, response)) { + return false + } -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ + // debug('redirect to', redirectTo) -var Stream = require('stream'); + // ignore any potential response body. it cannot possibly be useful + // to us at this point. + if (request._paused) { + response.resume() + } -util.inherits(Writable, Stream); + if (self.redirectsFollowed >= self.maxRedirects) { + request.emit('error', new Error('Exceeded maxRedirects. Probably stuck in a redirect loop ' + request.uri.href)) + return false + } + self.redirectsFollowed += 1 -function WriteReq(chunk, encoding, cb) { - this.chunk = chunk; - this.encoding = encoding; - this.callback = cb; -} + if (!isUrl.test(redirectTo)) { + redirectTo = url.resolve(request.uri.href, redirectTo) + } -function WritableState(options, stream) { - options = options || {}; + var uriPrev = request.uri + request.uri = url.parse(redirectTo) - // the point at which write() starts returning false - // Note: 0 is a valid value, means that we always return false if - // the entire buffer is not flushed immediately on write() - var hwm = options.highWaterMark; - this.highWaterMark = (hwm || hwm === 0) ? hwm : 16 * 1024; + // handle the case where we change protocol from https to http or vice versa + if (request.uri.protocol !== uriPrev.protocol) { + request._updateProtocol() + } - // object stream flag to indicate whether or not this stream - // contains buffers or objects. - this.objectMode = !!options.objectMode; + self.redirects.push( + { statusCode : response.statusCode + , redirectUri: redirectTo + } + ) + if (self.followAllRedirects && response.statusCode !== 401 && response.statusCode !== 307) { + request.method = 'GET' + } + // request.method = 'GET' // Force all redirects to use GET || commented out fixes #215 + delete request.src + delete request.req + delete request.agent + delete request._started + if (response.statusCode !== 401 && response.statusCode !== 307) { + // Remove parameters from the previous response, unless this is the second request + // for a server that requires digest authentication. + delete request.body + delete request._form + if (request.headers) { + request.removeHeader('host') + request.removeHeader('content-type') + request.removeHeader('content-length') + if (request.uri.hostname !== request.originalHost.split(':')[0]) { + // Remove authorization if changing hostnames (but not if just + // changing ports or protocols). This matches the behavior of curl: + // https://github.com/bagder/curl/blob/6beb0eee/lib/http.c#L710 + request.removeHeader('authorization') + } + } + } - // cast to ints. - this.highWaterMark = ~~this.highWaterMark; + if (!self.removeRefererHeader) { + request.setHeader('referer', request.uri.href) + } - this.needDrain = false; - // at the start of calling end() - this.ending = false; - // when end() has been called, and returned - this.ended = false; - // when 'finish' is emitted - this.finished = false; + request.emit('redirect') - // should we decode strings into buffers before passing to _write? - // this is here so that some node-core streams can optimize string - // handling at a lower level. - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; + request.init() - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; + return true +} - // not an actual buffer we keep track of, but a measurement - // of how much we're waiting to get pushed to some underlying - // socket or file. - this.length = 0; +exports.Redirect = Redirect - // a flag to see when we're in the middle of a write. - this.writing = false; +},{"url":453}],109:[function(require,module,exports){ - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, becuase any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; +/*! + * knox - auth + * Copyright(c) 2010 LearnBoost + * MIT Licensed + */ - // a flag to know if we're processing previously buffered items, which - // may call the _write() callback in the same tick, so that we don't - // end up in an overlapped onwrite situation. - this.bufferProcessing = false; +/** + * Module dependencies. + */ - // the callback that's passed to _write(chunk,cb) - this.onwrite = function(er) { - onwrite(stream, er); - }; +var crypto = require('crypto') + , parse = require('url').parse + ; - // the callback that the user supplies to write(chunk,encoding,cb) - this.writecb = null; +/** + * Valid keys. + */ - // the amount that is being written when _write is called. - this.writelen = 0; +var keys = + [ 'acl' + , 'location' + , 'logging' + , 'notification' + , 'partNumber' + , 'policy' + , 'requestPayment' + , 'torrent' + , 'uploadId' + , 'uploads' + , 'versionId' + , 'versioning' + , 'versions' + , 'website' + ] - this.buffer = []; +/** + * Return an "Authorization" header value with the given `options` + * in the form of "AWS :" + * + * @param {Object} options + * @return {String} + * @api private + */ - // True if the error was already emitted and should not be thrown again - this.errorEmitted = false; +function authorization (options) { + return 'AWS ' + options.key + ':' + sign(options) } -function Writable(options) { - var Duplex = require('./_stream_duplex'); - - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. - if (!(this instanceof Writable) && !(this instanceof Duplex)) - return new Writable(options); - - this._writableState = new WritableState(options, this); +module.exports = authorization +module.exports.authorization = authorization - // legacy. - this.writable = true; +/** + * Simple HMAC-SHA1 Wrapper + * + * @param {Object} options + * @return {String} + * @api private + */ - Stream.call(this); +function hmacSha1 (options) { + return crypto.createHmac('sha1', options.secret).update(options.message).digest('base64') } -// Otherwise people can pipe Writable streams, which is just wrong. -Writable.prototype.pipe = function() { - this.emit('error', new Error('Cannot pipe. Not readable.')); -}; +module.exports.hmacSha1 = hmacSha1 +/** + * Create a base64 sha1 HMAC for `options`. + * + * @param {Object} options + * @return {String} + * @api private + */ -function writeAfterEnd(stream, state, cb) { - var er = new Error('write after end'); - // TODO: defer error events consistently everywhere, not just the cb - stream.emit('error', er); - process.nextTick(function() { - cb(er); - }); +function sign (options) { + options.message = stringToSign(options) + return hmacSha1(options) } +module.exports.sign = sign -// If we get something that is not a buffer, string, null, or undefined, -// and we're not in objectMode, then that's an error. -// Otherwise stream chunks are all considered to be of length=1, and the -// watermarks determine how many objects to keep in the buffer, rather than -// how many bytes or characters. -function validChunk(stream, state, chunk, cb) { - var valid = true; - if (!Buffer.isBuffer(chunk) && - 'string' !== typeof chunk && - chunk !== null && - chunk !== undefined && - !state.objectMode) { - var er = new TypeError('Invalid non-string/buffer chunk'); - stream.emit('error', er); - process.nextTick(function() { - cb(er); - }); - valid = false; - } - return valid; -} +/** + * Create a base64 sha1 HMAC for `options`. + * + * Specifically to be used with S3 presigned URLs + * + * @param {Object} options + * @return {String} + * @api private + */ -Writable.prototype.write = function(chunk, encoding, cb) { - var state = this._writableState; - var ret = false; +function signQuery (options) { + options.message = queryStringToSign(options) + return hmacSha1(options) +} +module.exports.signQuery= signQuery - if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } +/** + * Return a string for sign() with the given `options`. + * + * Spec: + * + * \n + * \n + * \n + * \n + * [headers\n] + * + * + * @param {Object} options + * @return {String} + * @api private + */ - if (Buffer.isBuffer(chunk)) - encoding = 'buffer'; - else if (!encoding) - encoding = state.defaultEncoding; +function stringToSign (options) { + var headers = options.amazonHeaders || '' + if (headers) headers += '\n' + var r = + [ options.verb + , options.md5 + , options.contentType + , options.date ? options.date.toUTCString() : '' + , headers + options.resource + ] + return r.join('\n') +} +module.exports.queryStringToSign = stringToSign - if (typeof cb !== 'function') - cb = function() {}; +/** + * Return a string for sign() with the given `options`, but is meant exclusively + * for S3 presigned URLs + * + * Spec: + * + * \n + * + * + * @param {Object} options + * @return {String} + * @api private + */ - if (state.ended) - writeAfterEnd(this, state, cb); - else if (validChunk(this, state, chunk, cb)) - ret = writeOrBuffer(this, state, chunk, encoding, cb); +function queryStringToSign (options){ + return 'GET\n\n\n' + options.date + '\n' + options.resource +} +module.exports.queryStringToSign = queryStringToSign - return ret; -}; +/** + * Perform the following: + * + * - ignore non-amazon headers + * - lowercase fields + * - sort lexicographically + * - trim whitespace between ":" + * - join with newline + * + * @param {Object} headers + * @return {String} + * @api private + */ -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && - state.decodeStrings !== false && - typeof chunk === 'string') { - chunk = new Buffer(chunk, encoding); +function canonicalizeHeaders (headers) { + var buf = [] + , fields = Object.keys(headers) + ; + for (var i = 0, len = fields.length; i < len; ++i) { + var field = fields[i] + , val = headers[field] + , field = field.toLowerCase() + ; + if (0 !== field.indexOf('x-amz')) continue + buf.push(field + ':' + val) } - return chunk; + return buf.sort().join('\n') } +module.exports.canonicalizeHeaders = canonicalizeHeaders -// if we're already writing something, then just put this -// in the queue, and wait our turn. Otherwise, call _write -// If we return false, then we need a drain event, so set that flag. -function writeOrBuffer(stream, state, chunk, encoding, cb) { - chunk = decodeChunk(state, chunk, encoding); - if (Buffer.isBuffer(chunk)) - encoding = 'buffer'; - var len = state.objectMode ? 1 : chunk.length; - - state.length += len; +/** + * Perform the following: + * + * - ignore non sub-resources + * - sort lexicographically + * + * @param {String} resource + * @return {String} + * @api private + */ - var ret = state.length < state.highWaterMark; - // we must ensure that previous needDrain will not be reset to false. - if (!ret) - state.needDrain = true; +function canonicalizeResource (resource) { + var url = parse(resource, true) + , path = url.pathname + , buf = [] + ; - if (state.writing) - state.buffer.push(new WriteReq(chunk, encoding, cb)); - else - doWrite(stream, state, len, chunk, encoding, cb); + Object.keys(url.query).forEach(function(key){ + if (!~keys.indexOf(key)) return + var val = '' == url.query[key] ? '' : '=' + encodeURIComponent(url.query[key]) + buf.push(key + val) + }) - return ret; + return path + (buf.length ? '?' + buf.sort().join('&') : '') } +module.exports.canonicalizeResource = canonicalizeResource -function doWrite(stream, state, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - stream._write(chunk, encoding, state.onwrite); - state.sync = false; -} +},{"crypto":229,"url":453}],110:[function(require,module,exports){ +(function (Buffer){ +var DuplexStream = require('readable-stream/duplex') + , util = require('util') -function onwriteError(stream, state, sync, er, cb) { - if (sync) - process.nextTick(function() { - cb(er); - }); - else - cb(er); +function BufferList (callback) { + if (!(this instanceof BufferList)) + return new BufferList(callback) - stream._writableState.errorEmitted = true; - stream.emit('error', er); -} + this._bufs = [] + this.length = 0 -function onwriteStateUpdate(state) { - state.writing = false; - state.writecb = null; - state.length -= state.writelen; - state.writelen = 0; -} + if (typeof callback == 'function') { + this._callback = callback -function onwrite(stream, er) { - var state = stream._writableState; - var sync = state.sync; - var cb = state.writecb; + var piper = function (err) { + if (this._callback) { + this._callback(err) + this._callback = null + } + }.bind(this) - onwriteStateUpdate(state); + this.on('pipe', function (src) { + src.on('error', piper) + }) + this.on('unpipe', function (src) { + src.removeListener('error', piper) + }) + } + else if (Buffer.isBuffer(callback)) + this.append(callback) + else if (Array.isArray(callback)) { + callback.forEach(function (b) { + Buffer.isBuffer(b) && this.append(b) + }.bind(this)) + } - if (er) - onwriteError(stream, state, sync, er, cb); - else { - // Check if we're actually ready to finish, but don't emit yet - var finished = needFinish(stream, state); + DuplexStream.call(this) +} - if (!finished && !state.bufferProcessing && state.buffer.length) - clearBuffer(stream, state); +util.inherits(BufferList, DuplexStream) - if (sync) { - process.nextTick(function() { - afterWrite(stream, state, finished, cb); - }); - } else { - afterWrite(stream, state, finished, cb); - } +BufferList.prototype._offset = function (offset) { + var tot = 0, i = 0, _t + for (; i < this._bufs.length; i++) { + _t = tot + this._bufs[i].length + if (offset < _t) + return [ i, offset - tot ] + tot = _t } } -function afterWrite(stream, state, finished, cb) { - if (!finished) - onwriteDrain(stream, state); - cb(); - if (finished) - finishMaybe(stream, state); -} +BufferList.prototype.append = function (buf) { + var isBuffer = Buffer.isBuffer(buf) || + buf instanceof BufferList -// Must force callback to be called on nextTick, so that we don't -// emit 'drain' before the write() consumer gets the 'false' return -// value, and has a chance to attach a 'drain' listener. -function onwriteDrain(stream, state) { - if (state.length === 0 && state.needDrain) { - state.needDrain = false; - stream.emit('drain'); - } + this._bufs.push(isBuffer ? buf : new Buffer(buf)) + this.length += buf.length + return this } +BufferList.prototype._write = function (buf, encoding, callback) { + this.append(buf) + if (callback) + callback() +} -// if there's something in the buffer waiting, then process it -function clearBuffer(stream, state) { - state.bufferProcessing = true; - - for (var c = 0; c < state.buffer.length; c++) { - var entry = state.buffer[c]; - var chunk = entry.chunk; - var encoding = entry.encoding; - var cb = entry.callback; - var len = state.objectMode ? 1 : chunk.length; +BufferList.prototype._read = function (size) { + if (!this.length) + return this.push(null) + size = Math.min(size, this.length) + this.push(this.slice(0, size)) + this.consume(size) +} - doWrite(stream, state, len, chunk, encoding, cb); +BufferList.prototype.end = function (chunk) { + DuplexStream.prototype.end.call(this, chunk) - // if we didn't call the onwrite immediately, then - // it means that we need to wait until it does. - // also, that means that the chunk and cb are currently - // being processed, so move the buffer counter past them. - if (state.writing) { - c++; - break; - } + if (this._callback) { + this._callback(null, this.slice()) + this._callback = null } - - state.bufferProcessing = false; - if (c < state.buffer.length) - state.buffer = state.buffer.slice(c); - else - state.buffer.length = 0; } -Writable.prototype._write = function(chunk, encoding, cb) { - cb(new Error('not implemented')); -}; +BufferList.prototype.get = function (index) { + return this.slice(index, index + 1)[0] +} -Writable.prototype.end = function(chunk, encoding, cb) { - var state = this._writableState; +BufferList.prototype.slice = function (start, end) { + return this.copy(null, 0, start, end) +} - if (typeof chunk === 'function') { - cb = chunk; - chunk = null; - encoding = null; - } else if (typeof encoding === 'function') { - cb = encoding; - encoding = null; +BufferList.prototype.copy = function (dst, dstStart, srcStart, srcEnd) { + if (typeof srcStart != 'number' || srcStart < 0) + srcStart = 0 + if (typeof srcEnd != 'number' || srcEnd > this.length) + srcEnd = this.length + if (srcStart >= this.length) + return dst || new Buffer(0) + if (srcEnd <= 0) + return dst || new Buffer(0) + + var copy = !!dst + , off = this._offset(srcStart) + , len = srcEnd - srcStart + , bytes = len + , bufoff = (copy && dstStart) || 0 + , start = off[1] + , l + , i + + // copy/slice everything + if (srcStart === 0 && srcEnd == this.length) { + if (!copy) // slice, just return a full concat + return Buffer.concat(this._bufs) + + // copy, need to copy individual buffers + for (i = 0; i < this._bufs.length; i++) { + this._bufs[i].copy(dst, bufoff) + bufoff += this._bufs[i].length + } + + return dst } - if (typeof chunk !== 'undefined' && chunk !== null) - this.write(chunk, encoding); + // easy, cheap case where it's a subset of one of the buffers + if (bytes <= this._bufs[off[0]].length - start) { + return copy + ? this._bufs[off[0]].copy(dst, dstStart, start, start + bytes) + : this._bufs[off[0]].slice(start, start + bytes) + } - // ignore unnecessary end() calls. - if (!state.ending && !state.finished) - endWritable(this, state, cb); -}; + if (!copy) // a slice, we need something to copy in to + dst = new Buffer(len) + for (i = off[0]; i < this._bufs.length; i++) { + l = this._bufs[i].length - start -function needFinish(stream, state) { - return (state.ending && - state.length === 0 && - !state.finished && - !state.writing); -} + if (bytes > l) { + this._bufs[i].copy(dst, bufoff, start) + } else { + this._bufs[i].copy(dst, bufoff, start, start + bytes) + break + } -function finishMaybe(stream, state) { - var need = needFinish(stream, state); - if (need) { - state.finished = true; - stream.emit('finish'); + bufoff += l + bytes -= l + + if (start) + start = 0 } - return need; + + return dst } -function endWritable(stream, state, cb) { - state.ending = true; - finishMaybe(stream, state); - if (cb) { - if (state.finished) - process.nextTick(cb); - else - stream.once('finish', cb); +BufferList.prototype.toString = function (encoding, start, end) { + return this.slice(start, end).toString(encoding) +} + +BufferList.prototype.consume = function (bytes) { + while (this._bufs.length) { + if (bytes > this._bufs[0].length) { + bytes -= this._bufs[0].length + this.length -= this._bufs[0].length + this._bufs.shift() + } else { + this._bufs[0] = this._bufs[0].slice(bytes) + this.length -= bytes + break + } } - state.ended = true; + return this } -}).call(this,require('_process')) -},{"./_stream_duplex":66,"_process":381,"buffer":177,"core-util-is":69,"inherits":70,"stream":399}],69:[function(require,module,exports){ -(function (Buffer){ +BufferList.prototype.duplicate = function () { + var i = 0 + , copy = new BufferList() + + for (; i < this._bufs.length; i++) + copy.append(this._bufs[i]) + + return copy +} + +BufferList.prototype.destroy = function () { + this._bufs.length = 0; + this.length = 0; + this.push(null); +} + +;(function () { + var methods = { + 'readDoubleBE' : 8 + , 'readDoubleLE' : 8 + , 'readFloatBE' : 4 + , 'readFloatLE' : 4 + , 'readInt32BE' : 4 + , 'readInt32LE' : 4 + , 'readUInt32BE' : 4 + , 'readUInt32LE' : 4 + , 'readInt16BE' : 2 + , 'readInt16LE' : 2 + , 'readUInt16BE' : 2 + , 'readUInt16LE' : 2 + , 'readInt8' : 1 + , 'readUInt8' : 1 + } + + for (var m in methods) { + (function (m) { + BufferList.prototype[m] = function (offset) { + return this.slice(offset, offset + methods[m])[m](0) + } + }(m)) + } +}()) + +module.exports = BufferList + +}).call(this,require("buffer").Buffer) +},{"buffer":223,"readable-stream/duplex":111,"util":456}],111:[function(require,module,exports){ +module.exports = require("./lib/_stream_duplex.js") + +},{"./lib/_stream_duplex.js":112}],112:[function(require,module,exports){ +(function (process){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -10244,101 +10654,78 @@ function endWritable(stream, state, cb) { // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. -function isArray(ar) { - return Array.isArray(ar); -} -exports.isArray = isArray; +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. -function isBoolean(arg) { - return typeof arg === 'boolean'; -} -exports.isBoolean = isBoolean; +module.exports = Duplex; -function isNull(arg) { - return arg === null; +/**/ +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) keys.push(key); + return keys; } -exports.isNull = isNull; +/**/ -function isNullOrUndefined(arg) { - return arg == null; -} -exports.isNullOrUndefined = isNullOrUndefined; -function isNumber(arg) { - return typeof arg === 'number'; -} -exports.isNumber = isNumber; +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ -function isString(arg) { - return typeof arg === 'string'; -} -exports.isString = isString; +var Readable = require('./_stream_readable'); +var Writable = require('./_stream_writable'); -function isSymbol(arg) { - return typeof arg === 'symbol'; -} -exports.isSymbol = isSymbol; +util.inherits(Duplex, Readable); -function isUndefined(arg) { - return arg === void 0; -} -exports.isUndefined = isUndefined; +forEach(objectKeys(Writable.prototype), function(method) { + if (!Duplex.prototype[method]) + Duplex.prototype[method] = Writable.prototype[method]; +}); -function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; -} -exports.isRegExp = isRegExp; +function Duplex(options) { + if (!(this instanceof Duplex)) + return new Duplex(options); -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} -exports.isObject = isObject; + Readable.call(this, options); + Writable.call(this, options); -function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; -} -exports.isDate = isDate; + if (options && options.readable === false) + this.readable = false; -function isError(e) { - return isObject(e) && - (objectToString(e) === '[object Error]' || e instanceof Error); -} -exports.isError = isError; + if (options && options.writable === false) + this.writable = false; -function isFunction(arg) { - return typeof arg === 'function'; -} -exports.isFunction = isFunction; + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) + this.allowHalfOpen = false; -function isPrimitive(arg) { - return arg === null || - typeof arg === 'boolean' || - typeof arg === 'number' || - typeof arg === 'string' || - typeof arg === 'symbol' || // ES6 symbol - typeof arg === 'undefined'; + this.once('end', onend); } -exports.isPrimitive = isPrimitive; -function isBuffer(arg) { - return Buffer.isBuffer(arg); +// the no-half-open enforcer +function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) + return; + + // no more data can be written. + // But allow more writes to happen in this tick. + process.nextTick(this.end.bind(this)); } -exports.isBuffer = isBuffer; -function objectToString(o) { - return Object.prototype.toString.call(o); +function forEach (xs, f) { + for (var i = 0, l = xs.length; i < l; i++) { + f(xs[i], i); + } } -}).call(this,{"isBuffer":require("../../../../../../../../../../twister-react/node_modules/browserify/node_modules/insert-module-globals/node_modules/is-buffer/index.js")}) -},{"../../../../../../../../../../twister-react/node_modules/browserify/node_modules/insert-module-globals/node_modules/is-buffer/index.js":378}],70:[function(require,module,exports){ -arguments[4][52][0].apply(exports,arguments) -},{"dup":52}],71:[function(require,module,exports){ -module.exports = Array.isArray || function (arr) { - return Object.prototype.toString.call(arr) == '[object Array]'; -}; -},{}],72:[function(require,module,exports){ +}).call(this,require('_process')) +},{"./_stream_readable":113,"./_stream_writable":114,"_process":427,"core-util-is":115,"inherits":116}],113:[function(require,module,exports){ +(function (process){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a @@ -10360,8829 +10747,10321 @@ module.exports = Array.isArray || function (arr) { // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. -var Buffer = require('buffer').Buffer; +module.exports = Readable; -var isBufferEncoding = Buffer.isEncoding - || function(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; - } - } +/**/ +var isArray = require('isarray'); +/**/ -function assertEncoding(encoding) { - if (encoding && !isBufferEncoding(encoding)) { - throw new Error('Unknown encoding: ' + encoding); - } -} +/**/ +var Buffer = require('buffer').Buffer; +/**/ -// StringDecoder provides an interface for efficiently splitting a series of -// buffers into a series of JS strings without breaking apart multi-byte -// characters. CESU-8 is handled as part of the UTF-8 encoding. -// -// @TODO Handling all encodings inside a single object makes it very difficult -// to reason about this code, so it should be split up in the future. -// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code -// points as used by CESU-8. -var StringDecoder = exports.StringDecoder = function(encoding) { - this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, ''); - assertEncoding(encoding); - switch (this.encoding) { - case 'utf8': - // CESU-8 represents each of Surrogate Pair by 3-bytes - this.surrogateSize = 3; - break; - case 'ucs2': - case 'utf16le': - // UTF-16 represents each of Surrogate Pair by 2-bytes - this.surrogateSize = 2; - this.detectIncompleteChar = utf16DetectIncompleteChar; - break; - case 'base64': - // Base-64 stores 3 bytes in 4 chars, and pads the remainder. - this.surrogateSize = 3; - this.detectIncompleteChar = base64DetectIncompleteChar; - break; - default: - this.write = passThroughWrite; - return; - } +Readable.ReadableState = ReadableState; - // Enough space to store all bytes of a single character. UTF-8 needs 4 - // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate). - this.charBuffer = new Buffer(6); - // Number of bytes received for the current incomplete multi-byte character. - this.charReceived = 0; - // Number of bytes expected for the current incomplete multi-byte character. - this.charLength = 0; -}; +var EE = require('events').EventEmitter; +/**/ +if (!EE.listenerCount) EE.listenerCount = function(emitter, type) { + return emitter.listeners(type).length; +}; +/**/ -// write decodes the given buffer and returns it as JS string that is -// guaranteed to not contain any partial multi-byte characters. Any partial -// character found at the end of the buffer is buffered up, and will be -// returned when calling write again with the remaining bytes. -// -// Note: Converting a Buffer containing an orphan surrogate to a String -// currently works, but converting a String to a Buffer (via `new Buffer`, or -// Buffer#write) will replace incomplete surrogates with the unicode -// replacement character. See https://codereview.chromium.org/121173009/ . -StringDecoder.prototype.write = function(buffer) { - var charStr = ''; - // if our last write ended with an incomplete multibyte character - while (this.charLength) { - // determine how many remaining bytes this buffer has to offer for this char - var available = (buffer.length >= this.charLength - this.charReceived) ? - this.charLength - this.charReceived : - buffer.length; +var Stream = require('stream'); - // add the new bytes to the char buffer - buffer.copy(this.charBuffer, this.charReceived, 0, available); - this.charReceived += available; +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ - if (this.charReceived < this.charLength) { - // still not enough chars in this buffer? wait for more ... - return ''; - } +var StringDecoder; - // remove bytes belonging to the current character from the buffer - buffer = buffer.slice(available, buffer.length); +util.inherits(Readable, Stream); - // get the character that was split - charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding); +function ReadableState(options, stream) { + options = options || {}; - // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character - var charCode = charStr.charCodeAt(charStr.length - 1); - if (charCode >= 0xD800 && charCode <= 0xDBFF) { - this.charLength += this.surrogateSize; - charStr = ''; - continue; - } - this.charReceived = this.charLength = 0; + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + var hwm = options.highWaterMark; + this.highWaterMark = (hwm || hwm === 0) ? hwm : 16 * 1024; - // if there are no more bytes in this buffer, just emit our char - if (buffer.length === 0) { - return charStr; - } - break; - } + // cast to ints. + this.highWaterMark = ~~this.highWaterMark; - // determine and set charLength / charReceived - this.detectIncompleteChar(buffer); + this.buffer = []; + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = false; + this.ended = false; + this.endEmitted = false; + this.reading = false; - var end = buffer.length; - if (this.charLength) { - // buffer the incomplete character bytes we got - buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end); - end -= this.charReceived; - } + // In streams that never have any data, and do push(null) right away, + // the consumer can miss the 'end' event if they do some I/O before + // consuming the stream. So, we don't emit('end') until some reading + // happens. + this.calledRead = false; - charStr += buffer.toString(this.encoding, 0, end); + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, becuase any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; - var end = charStr.length - 1; - var charCode = charStr.charCodeAt(end); - // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character - if (charCode >= 0xD800 && charCode <= 0xDBFF) { - var size = this.surrogateSize; - this.charLength += size; - this.charReceived += size; - this.charBuffer.copy(this.charBuffer, size, 0, size); - buffer.copy(this.charBuffer, 0, 0, size); - return charStr.substring(0, end); - } + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; - // or just emit the charStr - return charStr; -}; -// detectIncompleteChar determines if there is an incomplete UTF-8 character at -// the end of the given buffer. If so, it sets this.charLength to the byte -// length that character, and sets this.charReceived to the number of bytes -// that are available for this character. -StringDecoder.prototype.detectIncompleteChar = function(buffer) { - // determine how many bytes we have to check at the end of this buffer - var i = (buffer.length >= 3) ? 3 : buffer.length; + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; - // Figure out if one of the last i bytes of our buffer announces an - // incomplete char. - for (; i > 0; i--) { - var c = buffer[buffer.length - i]; + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; - // See http://en.wikipedia.org/wiki/UTF-8#Description + // when piping, we only care about 'readable' events that happen + // after read()ing all the bytes and not getting any pushback. + this.ranOut = false; - // 110XXXXX - if (i == 1 && c >> 5 == 0x06) { - this.charLength = 2; - break; - } + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; - // 1110XXXX - if (i <= 2 && c >> 4 == 0x0E) { - this.charLength = 3; - break; - } + // if true, a maybeReadMore has been scheduled + this.readingMore = false; - // 11110XXX - if (i <= 3 && c >> 3 == 0x1E) { - this.charLength = 4; - break; - } + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) + StringDecoder = require('string_decoder/').StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; } - this.charReceived = i; -}; +} -StringDecoder.prototype.end = function(buffer) { - var res = ''; - if (buffer && buffer.length) - res = this.write(buffer); +function Readable(options) { + if (!(this instanceof Readable)) + return new Readable(options); - if (this.charReceived) { - var cr = this.charReceived; - var buf = this.charBuffer; - var enc = this.encoding; - res += buf.slice(0, cr).toString(enc); - } + this._readableState = new ReadableState(options, this); - return res; -}; + // legacy + this.readable = true; -function passThroughWrite(buffer) { - return buffer.toString(this.encoding); -} - -function utf16DetectIncompleteChar(buffer) { - this.charReceived = buffer.length % 2; - this.charLength = this.charReceived ? 2 : 0; + Stream.call(this); } -function base64DetectIncompleteChar(buffer) { - this.charReceived = buffer.length % 3; - this.charLength = this.charReceived ? 3 : 0; -} +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function(chunk, encoding) { + var state = this._readableState; -},{"buffer":177}],73:[function(require,module,exports){ -function Caseless (dict) { - this.dict = dict || {} -} -Caseless.prototype.set = function (name, value, clobber) { - if (typeof name === 'object') { - for (var i in name) { - this.set(i, name[i], value) + if (typeof chunk === 'string' && !state.objectMode) { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = new Buffer(chunk, encoding); + encoding = ''; } - } else { - if (typeof clobber === 'undefined') clobber = true - var has = this.has(name) - - if (!clobber && has) this.dict[has] = this.dict[has] + ',' + value - else this.dict[has || name] = value - return has - } -} -Caseless.prototype.has = function (name) { - var keys = Object.keys(this.dict) - , name = name.toLowerCase() - ; - for (var i=0;i 0) { + if (state.ended && !addToFront) { + var e = new Error('stream.push() after EOF'); + stream.emit('error', e); + } else if (state.endEmitted && addToFront) { + var e = new Error('stream.unshift() after end event'); + stream.emit('error', e); + } else { + if (state.decoder && !addToFront && !encoding) + chunk = state.decoder.write(chunk); - if (isStreamLike) { - if (!(stream instanceof DelayedStream)) { - var newStream = DelayedStream.create(stream, { - maxDataSize: Infinity, - pauseStream: this.pauseStreams, - }); - stream.on('data', this._checkDataSize.bind(this)); - stream = newStream; - } + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) { + state.buffer.unshift(chunk); + } else { + state.reading = false; + state.buffer.push(chunk); + } - this._handleErrors(stream); + if (state.needReadable) + emitReadable(stream); - if (this.pauseStreams) { - stream.pause(); + maybeReadMore(stream, state); } + } else if (!addToFront) { + state.reading = false; } - this._streams.push(stream); - return this; -}; - -CombinedStream.prototype.pipe = function(dest, options) { - Stream.prototype.pipe.call(this, dest, options); - this.resume(); - return dest; -}; - -CombinedStream.prototype._getNext = function() { - this._currentStream = null; - var stream = this._streams.shift(); - + return needMoreData(state); +} - if (typeof stream == 'undefined') { - this.end(); - return; - } - if (typeof stream !== 'function') { - this._pipeNext(stream); - return; - } - var getStream = stream; - getStream(function(stream) { - var isStreamLike = CombinedStream.isStreamLike(stream); - if (isStreamLike) { - stream.on('data', this._checkDataSize.bind(this)); - this._handleErrors(stream); - } +// if it's past the high water mark, we can push in some more. +// Also, if we have no data yet, we can stand some +// more bytes. This is to work around cases where hwm=0, +// such as the repl. Also, if the push() triggered a +// readable event, and the user called read(largeNumber) such that +// needReadable was set, then we ought to push more, so that another +// 'readable' event will be triggered. +function needMoreData(state) { + return !state.ended && + (state.needReadable || + state.length < state.highWaterMark || + state.length === 0); +} - this._pipeNext(stream); - }.bind(this)); +// backwards compatibility. +Readable.prototype.setEncoding = function(enc) { + if (!StringDecoder) + StringDecoder = require('string_decoder/').StringDecoder; + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; }; -CombinedStream.prototype._pipeNext = function(stream) { - this._currentStream = stream; - - var isStreamLike = CombinedStream.isStreamLike(stream); - if (isStreamLike) { - stream.on('end', this._getNext.bind(this)); - stream.pipe(this, {end: false}); - return; +// Don't raise the hwm > 128MB +var MAX_HWM = 0x800000; +function roundUpToNextPowerOf2(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 + n--; + for (var p = 1; p < 32; p <<= 1) n |= n >> p; + n++; } + return n; +} - var value = stream; - this.write(value); - this._getNext(); -}; - -CombinedStream.prototype._handleErrors = function(stream) { - var self = this; - stream.on('error', function(err) { - self._emitError(err); - }); -}; +function howMuchToRead(n, state) { + if (state.length === 0 && state.ended) + return 0; -CombinedStream.prototype.write = function(data) { - this.emit('data', data); -}; + if (state.objectMode) + return n === 0 ? 0 : 1; -CombinedStream.prototype.pause = function() { - if (!this.pauseStreams) { - return; + if (n === null || isNaN(n)) { + // only flow one buffer at a time + if (state.flowing && state.buffer.length) + return state.buffer[0].length; + else + return state.length; } - if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause(); - this.emit('pause'); -}; + if (n <= 0) + return 0; -CombinedStream.prototype.resume = function() { - if (!this._released) { - this._released = true; - this.writable = true; - this._getNext(); - } + // If we're asking for more than the target buffer level, + // then raise the water mark. Bump up to the next highest + // power of 2, to prevent increasing it excessively in tiny + // amounts. + if (n > state.highWaterMark) + state.highWaterMark = roundUpToNextPowerOf2(n); - if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume(); - this.emit('resume'); -}; + // don't have that much. return null, unless we've ended. + if (n > state.length) { + if (!state.ended) { + state.needReadable = true; + return 0; + } else + return state.length; + } -CombinedStream.prototype.end = function() { - this._reset(); - this.emit('end'); -}; + return n; +} -CombinedStream.prototype.destroy = function() { - this._reset(); - this.emit('close'); -}; +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function(n) { + var state = this._readableState; + state.calledRead = true; + var nOrig = n; + var ret; -CombinedStream.prototype._reset = function() { - this.writable = false; - this._streams = []; - this._currentStream = null; -}; + if (typeof n !== 'number' || n > 0) + state.emittedReadable = false; -CombinedStream.prototype._checkDataSize = function() { - this._updateDataSize(); - if (this.dataSize <= this.maxDataSize) { - return; + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && + state.needReadable && + (state.length >= state.highWaterMark || state.ended)) { + emitReadable(this); + return null; } - var message = - 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'; - this._emitError(new Error(message)); -}; + n = howMuchToRead(n, state); -CombinedStream.prototype._updateDataSize = function() { - this.dataSize = 0; + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + ret = null; - var self = this; - this._streams.forEach(function(stream) { - if (!stream.dataSize) { - return; + // In cases where the decoder did not receive enough data + // to produce a full chunk, then immediately received an + // EOF, state.buffer will contain [, ]. + // howMuchToRead will see this and coerce the amount to + // read to zero (because it's looking at the length of the + // first in state.buffer), and we'll end up here. + // + // This can only happen via state.decoder -- no other venue + // exists for pushing a zero-length chunk into state.buffer + // and triggering this behavior. In this case, we return our + // remaining data and end the stream, if appropriate. + if (state.length > 0 && state.decoder) { + ret = fromList(n, state); + state.length -= ret.length; } - self.dataSize += stream.dataSize; - }); + if (state.length === 0) + endReadable(this); - if (this._currentStream && this._currentStream.dataSize) { - this.dataSize += this._currentStream.dataSize; + return ret; } -}; - -CombinedStream.prototype._emitError = function(err) { - this._reset(); - this.emit('error', err); -}; - -}).call(this,{"isBuffer":require("../../../../../../twister-react/node_modules/browserify/node_modules/insert-module-globals/node_modules/is-buffer/index.js")}) -},{"../../../../../../twister-react/node_modules/browserify/node_modules/insert-module-globals/node_modules/is-buffer/index.js":378,"delayed-stream":75,"stream":399,"util":410}],75:[function(require,module,exports){ -var Stream = require('stream').Stream; -var util = require('util'); - -module.exports = DelayedStream; -function DelayedStream() { - this.source = null; - this.dataSize = 0; - this.maxDataSize = 1024 * 1024; - this.pauseStream = true; - - this._maxDataSizeExceeded = false; - this._released = false; - this._bufferedEvents = []; -} -util.inherits(DelayedStream, Stream); -DelayedStream.create = function(source, options) { - var delayedStream = new this(); + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. - options = options || {}; - for (var option in options) { - delayedStream[option] = options[option]; - } + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; - delayedStream.source = source; + // if we currently have less than the highWaterMark, then also read some + if (state.length - n <= state.highWaterMark) + doRead = true; - var realEmit = source.emit; - source.emit = function() { - delayedStream._handleEmit(arguments); - return realEmit.apply(source, arguments); - }; + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) + doRead = false; - source.on('error', function() {}); - if (delayedStream.pauseStream) { - source.pause(); + if (doRead) { + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) + state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; } - return delayedStream; -}; + // If _read called its callback synchronously, then `reading` + // will be false, and we need to re-evaluate how much data we + // can return to the user. + if (doRead && !state.reading) + n = howMuchToRead(nOrig, state); -DelayedStream.prototype.__defineGetter__('readable', function() { - return this.source.readable; -}); + if (n > 0) + ret = fromList(n, state); + else + ret = null; -DelayedStream.prototype.resume = function() { - if (!this._released) { - this.release(); + if (ret === null) { + state.needReadable = true; + n = 0; } - this.source.resume(); -}; - -DelayedStream.prototype.pause = function() { - this.source.pause(); -}; + state.length -= n; -DelayedStream.prototype.release = function() { - this._released = true; + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (state.length === 0 && !state.ended) + state.needReadable = true; - this._bufferedEvents.forEach(function(args) { - this.emit.apply(this, args); - }.bind(this)); - this._bufferedEvents = []; -}; + // If we happened to read() exactly the remaining amount in the + // buffer, and the EOF has been seen at this point, then make sure + // that we emit 'end' on the very next tick. + if (state.ended && !state.endEmitted && state.length === 0) + endReadable(this); -DelayedStream.prototype.pipe = function() { - var r = Stream.prototype.pipe.apply(this, arguments); - this.resume(); - return r; + return ret; }; -DelayedStream.prototype._handleEmit = function(args) { - if (this._released) { - this.emit.apply(this, args); - return; +function chunkInvalid(state, chunk) { + var er = null; + if (!Buffer.isBuffer(chunk) && + 'string' !== typeof chunk && + chunk !== null && + chunk !== undefined && + !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); } + return er; +} - if (args[0] === 'data') { - this.dataSize += args[1].length; - this._checkIfMaxDataSizeExceeded(); - } - this._bufferedEvents.push(args); -}; +function onEofChunk(stream, state) { + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; -DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() { - if (this._maxDataSizeExceeded) { + // if we've ended and we have some data left, then emit + // 'readable' now to make sure it gets picked up. + if (state.length > 0) + emitReadable(stream); + else + endReadable(stream); +} + +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + if (state.emittedReadable) return; + + state.emittedReadable = true; + if (state.sync) + process.nextTick(function() { + emitReadable_(stream); + }); + else + emitReadable_(stream); +} + +function emitReadable_(stream) { + stream.emit('readable'); +} + + +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + process.nextTick(function() { + maybeReadMore_(stream, state); + }); } +} - if (this.dataSize <= this.maxDataSize) { - return; +function maybeReadMore_(stream, state) { + var len = state.length; + while (!state.reading && !state.flowing && !state.ended && + state.length < state.highWaterMark) { + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break; + else + len = state.length; } + state.readingMore = false; +} - this._maxDataSizeExceeded = true; - var message = - 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.' - this.emit('error', new Error(message)); +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function(n) { + this.emit('error', new Error('not implemented')); }; -},{"stream":399,"util":410}],76:[function(require,module,exports){ -module.exports = ForeverAgent -ForeverAgent.SSL = ForeverAgentSSL +Readable.prototype.pipe = function(dest, pipeOpts) { + var src = this; + var state = this._readableState; -var util = require('util') - , Agent = require('http').Agent - , net = require('net') - , tls = require('tls') - , AgentSSL = require('https').Agent - -function getConnectionName(host, port) { - var name = '' - if (typeof host === 'string') { - name = host + ':' + port - } else { - // For node.js v012.0 and iojs-v1.5.1, host is an object. And any existing localAddress is part of the connection name. - name = host.host + ':' + host.port + ':' + (host.localAddress ? (host.localAddress + ':') : ':') + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; } - return name -} + state.pipesCount += 1; -function ForeverAgent(options) { - var self = this - self.options = options || {} - self.requests = {} - self.sockets = {} - self.freeSockets = {} - self.maxSockets = self.options.maxSockets || Agent.defaultMaxSockets - self.minSockets = self.options.minSockets || ForeverAgent.defaultMinSockets - self.on('free', function(socket, host, port) { - var name = getConnectionName(host, port) + var doEnd = (!pipeOpts || pipeOpts.end !== false) && + dest !== process.stdout && + dest !== process.stderr; - if (self.requests[name] && self.requests[name].length) { - self.requests[name].shift().onSocket(socket) - } else if (self.sockets[name].length < self.minSockets) { - if (!self.freeSockets[name]) self.freeSockets[name] = [] - self.freeSockets[name].push(socket) - - // if an error happens while we don't use the socket anyway, meh, throw the socket away - var onIdleError = function() { - socket.destroy() - } - socket._onIdleError = onIdleError - socket.on('error', onIdleError) - } else { - // If there are no pending requests just destroy the - // socket and it will get removed from the pool. This - // gets us out of timeout issues and allows us to - // default to Connection:keep-alive. - socket.destroy() - } - }) + var endFn = doEnd ? onend : cleanup; + if (state.endEmitted) + process.nextTick(endFn); + else + src.once('end', endFn); -} -util.inherits(ForeverAgent, Agent) + dest.on('unpipe', onunpipe); + function onunpipe(readable) { + if (readable !== src) return; + cleanup(); + } -ForeverAgent.defaultMinSockets = 5 + function onend() { + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + function cleanup() { + // cleanup event handlers once the pipe is broken + 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', cleanup); -ForeverAgent.prototype.createConnection = net.createConnection -ForeverAgent.prototype.addRequestNoreuse = Agent.prototype.addRequest -ForeverAgent.prototype.addRequest = function(req, host, port) { - var name = getConnectionName(host, port) - - if (typeof host !== 'string') { - var options = host - port = options.port - host = options.host + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (!dest._writableState || dest._writableState.needDrain) + ondrain(); } - if (this.freeSockets[name] && this.freeSockets[name].length > 0 && !req.useChunkedEncodingByDefault) { - var idleSocket = this.freeSockets[name].pop() - idleSocket.removeListener('error', idleSocket._onIdleError) - delete idleSocket._onIdleError - req._reusedSocket = true - req.onSocket(idleSocket) - } else { - this.addRequestNoreuse(req, host, port) + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + unpipe(); + dest.removeListener('error', onerror); + if (EE.listenerCount(dest, 'error') === 0) + dest.emit('error', er); } -} + // This is a brutally ugly hack to make sure that our error handler + // is attached before any userland ones. NEVER DO THIS. + if (!dest._events || !dest._events.error) + dest.on('error', onerror); + else if (isArray(dest._events.error)) + dest._events.error.unshift(onerror); + else + dest._events.error = [onerror, dest._events.error]; -ForeverAgent.prototype.removeSocket = function(s, name, host, port) { - if (this.sockets[name]) { - var index = this.sockets[name].indexOf(s) - if (index !== -1) { - this.sockets[name].splice(index, 1) - } - } else if (this.sockets[name] && this.sockets[name].length === 0) { - // don't leak - delete this.sockets[name] - delete this.requests[name] + + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); } - - if (this.freeSockets[name]) { - var index = this.freeSockets[name].indexOf(s) - if (index !== -1) { - this.freeSockets[name].splice(index, 1) - if (this.freeSockets[name].length === 0) { - delete this.freeSockets[name] - } - } + dest.once('close', onclose); + function onfinish() { + dest.removeListener('close', onclose); + unpipe(); } + dest.once('finish', onfinish); - if (this.requests[name] && this.requests[name].length) { - // If we have pending requests and a socket gets closed a new one - // needs to be created to take over in the pool for the one that closed. - this.createSocket(name, host, port).emit('free') + function unpipe() { + src.unpipe(dest); } -} - -function ForeverAgentSSL (options) { - ForeverAgent.call(this, options) -} -util.inherits(ForeverAgentSSL, ForeverAgent) -ForeverAgentSSL.prototype.createConnection = createConnectionSSL -ForeverAgentSSL.prototype.addRequestNoreuse = AgentSSL.prototype.addRequest + // tell the dest that it's being piped to + dest.emit('pipe', src); -function createConnectionSSL (port, host, options) { - if (typeof port === 'object') { - options = port; - } else if (typeof host === 'object') { - options = host; - } else if (typeof options === 'object') { - options = options; - } else { - options = {}; - } + // start the flow if it hasn't been started already. + if (!state.flowing) { + // the handler that waits for readable events after all + // the data gets sucked out in flow. + // This would be easier to follow with a .once() handler + // in flow(), but that is too slow. + this.on('readable', pipeOnReadable); - if (typeof port === 'number') { - options.port = port; + state.flowing = true; + process.nextTick(function() { + flow(src); + }); } - if (typeof host === 'string') { - options.host = host; - } + return dest; +}; - return tls.connect(options); +function pipeOnDrain(src) { + return function() { + var dest = this; + var state = src._readableState; + state.awaitDrain--; + if (state.awaitDrain === 0) + flow(src); + }; } -},{"http":400,"https":376,"net":161,"tls":161,"util":410}],77:[function(require,module,exports){ -(function (process,Buffer){ -var CombinedStream = require('combined-stream'); -var util = require('util'); -var path = require('path'); -var http = require('http'); -var https = require('https'); -var parseUrl = require('url').parse; -var fs = require('fs'); -var mime = require('mime-types'); -var async = require('async'); +function flow(src) { + var state = src._readableState; + var chunk; + state.awaitDrain = 0; -module.exports = FormData; -function FormData() { - this._overheadLength = 0; - this._valueLength = 0; - this._lengthRetrievers = []; + function write(dest, i, list) { + var written = dest.write(chunk); + if (false === written) { + state.awaitDrain++; + } + } - CombinedStream.call(this); -} -util.inherits(FormData, CombinedStream); + while (state.pipesCount && null !== (chunk = src.read())) { -FormData.LINE_BREAK = '\r\n'; + if (state.pipesCount === 1) + write(state.pipes, 0, null); + else + forEach(state.pipes, write); -FormData.prototype.append = function(field, value, options) { - options = options || {}; + src.emit('data', chunk); - var append = CombinedStream.prototype.append.bind(this); + // if anyone needs a drain, then we have to wait for that. + if (state.awaitDrain > 0) + return; + } - // all that streamy business can't handle numbers - if (typeof value == 'number') value = ''+value; + // if every destination was unpiped, either before entering this + // function, or in the while loop, then stop flowing. + // + // NB: This is a pretty rare edge case. + if (state.pipesCount === 0) { + state.flowing = false; - // https://github.com/felixge/node-form-data/issues/38 - if (util.isArray(value)) { - // Please convert your array into string - // the way web server expects it - this._error(new Error('Arrays are not supported.')); + // if there were data event listeners added, then switch to old mode. + if (EE.listenerCount(src, 'data') > 0) + emitDataEvents(src); return; } - var header = this._multiPartHeader(field, value, options); - var footer = this._multiPartFooter(field, value, options); + // at this point, no one needed a drain, so we just ran out of data + // on the next readable event, start it over again. + state.ranOut = true; +} - append(header); - append(value); - append(footer); +function pipeOnReadable() { + if (this._readableState.ranOut) { + this._readableState.ranOut = false; + flow(this); + } +} - // pass along options.knownLength - this._trackLength(header, value, options); -}; -FormData.prototype._trackLength = function(header, value, options) { - var valueLength = 0; +Readable.prototype.unpipe = function(dest) { + var state = this._readableState; - // used w/ getLengthSync(), when length is known. - // e.g. for streaming directly from a remote server, - // w/ a known file a size, and not wanting to wait for - // incoming file to finish to get its size. - if (options.knownLength != null) { - valueLength += +options.knownLength; - } else if (Buffer.isBuffer(value)) { - valueLength = value.length; - } else if (typeof value === 'string') { - valueLength = Buffer.byteLength(value); - } + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) + return this; - this._valueLength += valueLength; + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) + return this; - // @check why add CRLF? does this account for custom/multiple CRLFs? - this._overheadLength += - Buffer.byteLength(header) + - + FormData.LINE_BREAK.length; + if (!dest) + dest = state.pipes; - // empty or either doesn't have path or not an http response - if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) )) { - return; + // got a match. + state.pipes = null; + state.pipesCount = 0; + this.removeListener('readable', pipeOnReadable); + state.flowing = false; + if (dest) + dest.emit('unpipe', this); + return this; } - // no need to bother with the length - if (!options.knownLength) - this._lengthRetrievers.push(function(next) { - - if (value.hasOwnProperty('fd')) { + // slow case. multiple pipe destinations. - // take read range into a account - // `end` = Infinity –> read file till the end - // - // TODO: Looks like there is bug in Node fs.createReadStream - // it doesn't respect `end` options without `start` options - // Fix it when node fixes it. - // https://github.com/joyent/node/issues/7819 - if (value.end != undefined && value.end != Infinity && value.start != undefined) { + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + this.removeListener('readable', pipeOnReadable); + state.flowing = false; - // when end specified - // no need to calculate range - // inclusive, starts with 0 - next(null, value.end+1 - (value.start ? value.start : 0)); + for (var i = 0; i < len; i++) + dests[i].emit('unpipe', this); + return this; + } - // not that fast snoopy - } else { - // still need to fetch file size from fs - fs.stat(value.path, function(err, stat) { + // try to find the right one. + var i = indexOf(state.pipes, dest); + if (i === -1) + return this; - var fileSize; + state.pipes.splice(i, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) + state.pipes = state.pipes[0]; - if (err) { - next(err); - return; - } + dest.emit('unpipe', this); - // update final size based on the range options - fileSize = stat.size - (value.start ? value.start : 0); - next(null, fileSize); - }); - } + return this; +}; - // or http response - } else if (value.hasOwnProperty('httpVersion')) { - next(null, +value.headers['content-length']); +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function(ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); - // or request stream http://github.com/mikeal/request - } else if (value.hasOwnProperty('httpModule')) { - // wait till response come back - value.on('response', function(response) { - value.pause(); - next(null, +response.headers['content-length']); - }); - value.resume(); + if (ev === 'data' && !this._readableState.flowing) + emitDataEvents(this); - // something else - } else { - next('Unknown stream'); + if (ev === 'readable' && this.readable) { + var state = this._readableState; + if (!state.readableListening) { + state.readableListening = true; + state.emittedReadable = false; + state.needReadable = true; + if (!state.reading) { + this.read(0); + } else if (state.length) { + emitReadable(this, state); + } } - }); -}; + } -FormData.prototype._multiPartHeader = function(field, value, options) { - var boundary = this.getBoundary(); - var header = ''; + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; - // custom header specified (as string)? - // it becomes responsible for boundary - // (e.g. to handle extra CRLFs on .NET servers) - if (options.header != null) { - header = options.header; - } else { - header += '--' + boundary + FormData.LINE_BREAK + - 'Content-Disposition: form-data; name="' + field + '"'; +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function() { + emitDataEvents(this); + this.read(0); + this.emit('resume'); +}; - // fs- and request- streams have path property - // or use custom filename and/or contentType - // TODO: Use request's response mime-type - if (options.filename || value.path) { - header += - '; filename="' + path.basename(options.filename || value.path) + '"' + FormData.LINE_BREAK + - 'Content-Type: ' + (options.contentType || mime.lookup(options.filename || value.path)); +Readable.prototype.pause = function() { + emitDataEvents(this, true); + this.emit('pause'); +}; - // http response has not - } else if (value.readable && value.hasOwnProperty('httpVersion')) { - header += - '; filename="' + path.basename(value.client._httpMessage.path) + '"' + FormData.LINE_BREAK + - 'Content-Type: ' + value.headers['content-type']; - } +function emitDataEvents(stream, startPaused) { + var state = stream._readableState; - header += FormData.LINE_BREAK + FormData.LINE_BREAK; + if (state.flowing) { + // https://github.com/isaacs/readable-stream/issues/16 + throw new Error('Cannot switch to old mode now.'); } - return header; -}; + var paused = startPaused || false; + var readable = false; -FormData.prototype._multiPartFooter = function(field, value, options) { - return function(next) { - var footer = FormData.LINE_BREAK; + // convert to an old-style stream. + stream.readable = true; + stream.pipe = Stream.prototype.pipe; + stream.on = stream.addListener = Stream.prototype.on; - var lastPart = (this._streams.length === 0); - if (lastPart) { - footer += this._lastBoundary(); - } + stream.on('readable', function() { + readable = true; - next(footer); - }.bind(this); -}; + var c; + while (!paused && (null !== (c = stream.read()))) + stream.emit('data', c); -FormData.prototype._lastBoundary = function() { - return '--' + this.getBoundary() + '--'; -}; + if (c === null) { + readable = false; + stream._readableState.needReadable = true; + } + }); -FormData.prototype.getHeaders = function(userHeaders) { - var formHeaders = { - 'content-type': 'multipart/form-data; boundary=' + this.getBoundary() + stream.pause = function() { + paused = true; + this.emit('pause'); }; - for (var header in userHeaders) { - formHeaders[header.toLowerCase()] = userHeaders[header]; - } + stream.resume = function() { + paused = false; + if (readable) + process.nextTick(function() { + stream.emit('readable'); + }); + else + this.read(0); + this.emit('resume'); + }; - return formHeaders; + // now make it start, just in case it hadn't already. + stream.emit('readable'); } -FormData.prototype.getCustomHeaders = function(contentType) { - contentType = contentType ? contentType : 'multipart/form-data'; - - var formHeaders = { - 'content-type': contentType + '; boundary=' + this.getBoundary(), - 'content-length': this.getLengthSync() - }; - - return formHeaders; -} +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function(stream) { + var state = this._readableState; + var paused = false; -FormData.prototype.getBoundary = function() { - if (!this._boundary) { - this._generateBoundary(); - } + var self = this; + stream.on('end', function() { + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) + self.push(chunk); + } - return this._boundary; -}; + self.push(null); + }); -FormData.prototype._generateBoundary = function() { - // This generates a 50 character boundary similar to those used by Firefox. - // They are optimized for boyer-moore parsing. - var boundary = '--------------------------'; - for (var i = 0; i < 24; i++) { - boundary += Math.floor(Math.random() * 10).toString(16); - } + stream.on('data', function(chunk) { + if (state.decoder) + chunk = state.decoder.write(chunk); - this._boundary = boundary; -}; + // don't skip over falsy values in objectMode + //if (state.objectMode && util.isNullOrUndefined(chunk)) + if (state.objectMode && (chunk === null || chunk === undefined)) + return; + else if (!state.objectMode && (!chunk || !chunk.length)) + return; -// Note: getLengthSync DOESN'T calculate streams length -// As workaround one can calculate file size manually -// and add it as knownLength option -FormData.prototype.getLengthSync = function(debug) { - var knownLength = this._overheadLength + this._valueLength; + var ret = self.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); - // Don't get confused, there are 3 "internal" streams for each keyval pair - // so it basically checks if there is any value added to the form - if (this._streams.length) { - knownLength += this._lastBoundary().length; + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (typeof stream[i] === 'function' && + typeof this[i] === 'undefined') { + this[i] = function(method) { return function() { + return stream[method].apply(stream, arguments); + }}(i); + } } - // https://github.com/felixge/node-form-data/issues/40 - if (this._lengthRetrievers.length) { - // Some async length retrivers are present - // therefore synchronous length calculation is false. - // Please use getLength(callback) to get proper length - this._error(new Error('Cannot calculate proper length in synchronous way.')); - } + // proxy certain important events. + var events = ['error', 'close', 'destroy', 'pause', 'resume']; + forEach(events, function(ev) { + stream.on(ev, self.emit.bind(self, ev)); + }); - return knownLength; + // when we try to consume some more bytes, simply unpause the + // underlying stream. + self._read = function(n) { + if (paused) { + paused = false; + stream.resume(); + } + }; + + return self; }; -FormData.prototype.getLength = function(cb) { - var knownLength = this._overheadLength + this._valueLength; - if (this._streams.length) { - knownLength += this._lastBoundary().length; - } - if (!this._lengthRetrievers.length) { - process.nextTick(cb.bind(this, null, knownLength)); - return; - } +// exposed for testing purposes only. +Readable._fromList = fromList; - async.parallel(this._lengthRetrievers, function(err, values) { - if (err) { - cb(err); - return; - } +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +function fromList(n, state) { + var list = state.buffer; + var length = state.length; + var stringMode = !!state.decoder; + var objectMode = !!state.objectMode; + var ret; - values.forEach(function(length) { - knownLength += length; - }); + // nothing in the list, definitely empty. + if (list.length === 0) + return null; - cb(null, knownLength); - }); -}; + if (length === 0) + ret = null; + else if (objectMode) + ret = list.shift(); + else if (!n || n >= length) { + // read it all, truncate the array. + if (stringMode) + ret = list.join(''); + else + ret = Buffer.concat(list, length); + list.length = 0; + } else { + // read just some of it. + if (n < list[0].length) { + // just take a part of the first list item. + // slice is the same for buffers and strings. + var buf = list[0]; + ret = buf.slice(0, n); + list[0] = buf.slice(n); + } else if (n === list[0].length) { + // first list is a perfect match + ret = list.shift(); + } else { + // complex case. + // we have enough to cover it, but it spans past the first buffer. + if (stringMode) + ret = ''; + else + ret = new Buffer(n); -FormData.prototype.submit = function(params, cb) { + var c = 0; + for (var i = 0, l = list.length; i < l && c < n; i++) { + var buf = list[0]; + var cpy = Math.min(n - c, buf.length); - var request - , options - , defaults = { - method : 'post' - }; + if (stringMode) + ret += buf.slice(0, cpy); + else + buf.copy(ret, c, 0, cpy); - // parse provided url if it's string - // or treat it as options object - if (typeof params == 'string') { - params = parseUrl(params); + if (cpy < buf.length) + list[0] = buf.slice(cpy); + else + list.shift(); - options = populate({ - port: params.port, - path: params.pathname, - host: params.hostname - }, defaults); - } - else // use custom params - { - options = populate(params, defaults); - // if no port provided use default one - if (!options.port) { - options.port = options.protocol == 'https:' ? 443 : 80; + c += cpy; + } } } - // put that good code in getHeaders to some use - options.headers = this.getHeaders(params.headers); + return ret; +} - // https if specified, fallback to http in any other case - if (params.protocol == 'https:') { - request = https.request(options); - } else { - request = http.request(options); +function endReadable(stream) { + var state = stream._readableState; + + // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + if (state.length > 0) + throw new Error('endReadable called on non-empty stream'); + + if (!state.endEmitted && state.calledRead) { + state.ended = true; + process.nextTick(function() { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } + }); } +} - // get content length and fire away - this.getLength(function(err, length) { +function forEach (xs, f) { + for (var i = 0, l = xs.length; i < l; i++) { + f(xs[i], i); + } +} - // TODO: Add chunked encoding when no length (if err) +function indexOf (xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + return -1; +} - // add content length - request.setHeader('Content-Length', length); +}).call(this,require('_process')) +},{"_process":427,"buffer":223,"core-util-is":115,"events":421,"inherits":116,"isarray":117,"stream":445,"string_decoder/":118}],114:[function(require,module,exports){ +(function (process){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. - this.pipe(request); - if (cb) { - request.on('error', cb); - request.on('response', cb.bind(this, null)); - } - }.bind(this)); +// A bit simpler than readable streams. +// Implement an async ._write(chunk, cb), and it'll handle all +// the drain event emission and buffering. - return request; -}; +module.exports = Writable; -FormData.prototype._error = function(err) { - if (this.error) return; +/**/ +var Buffer = require('buffer').Buffer; +/**/ - this.error = err; - this.pause(); - this.emit('error', err); -}; +Writable.WritableState = WritableState; -/* - * Santa's little helpers - */ -// populates missing values -function populate(dst, src) { - for (var prop in src) { - if (!dst[prop]) dst[prop] = src[prop]; - } - return dst; -} +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ -}).call(this,require('_process'),require("buffer").Buffer) -},{"_process":381,"async":78,"buffer":177,"combined-stream":74,"fs":161,"http":400,"https":376,"mime-types":122,"path":380,"url":407,"util":410}],78:[function(require,module,exports){ -(function (process){ -/*! - * async - * https://github.com/caolan/async - * - * Copyright 2010-2014 Caolan McMahon - * Released under the MIT license - */ -/*jshint onevar: false, indent:4 */ -/*global setImmediate: false, setTimeout: false, console: false */ -(function () { +var Stream = require('stream'); - var async = {}; +util.inherits(Writable, Stream); - // global on the server, window in the browser - var root, previous_async; +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; +} - root = this; - if (root != null) { - previous_async = root.async; - } +function WritableState(options, stream) { + options = options || {}; - async.noConflict = function () { - root.async = previous_async; - return async; - }; + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + var hwm = options.highWaterMark; + this.highWaterMark = (hwm || hwm === 0) ? hwm : 16 * 1024; - function only_once(fn) { - var called = false; - return function() { - if (called) throw new Error("Callback was already called."); - called = true; - fn.apply(root, arguments); - } - } + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; - //// cross-browser compatiblity functions //// + // cast to ints. + this.highWaterMark = ~~this.highWaterMark; - var _toString = Object.prototype.toString; + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; - var _isArray = Array.isArray || function (obj) { - return _toString.call(obj) === '[object Array]'; - }; + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; - var _each = function (arr, iterator) { - if (arr.forEach) { - return arr.forEach(iterator); - } - for (var i = 0; i < arr.length; i += 1) { - iterator(arr[i], i, arr); - } - }; + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; - var _map = function (arr, iterator) { - if (arr.map) { - return arr.map(iterator); - } - var results = []; - _each(arr, function (x, i, a) { - results.push(iterator(x, i, a)); - }); - return results; - }; + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; - var _reduce = function (arr, iterator, memo) { - if (arr.reduce) { - return arr.reduce(iterator, memo); - } - _each(arr, function (x, i, a) { - memo = iterator(memo, x, i, a); - }); - return memo; - }; + // a flag to see when we're in the middle of a write. + this.writing = false; - var _keys = function (obj) { - if (Object.keys) { - return Object.keys(obj); - } - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; - }; + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, becuase any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; - //// exported async module functions //// + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; - //// nextTick implementation with browser-compatible fallback //// - if (typeof process === 'undefined' || !(process.nextTick)) { - if (typeof setImmediate === 'function') { - async.nextTick = function (fn) { - // not a direct alias for IE10 compatibility - setImmediate(fn); - }; - async.setImmediate = async.nextTick; - } - else { - async.nextTick = function (fn) { - setTimeout(fn, 0); - }; - async.setImmediate = async.nextTick; - } - } - else { - async.nextTick = process.nextTick; - if (typeof setImmediate !== 'undefined') { - async.setImmediate = function (fn) { - // not a direct alias for IE10 compatibility - setImmediate(fn); - }; - } - else { - async.setImmediate = async.nextTick; - } - } + // the callback that's passed to _write(chunk,cb) + this.onwrite = function(er) { + onwrite(stream, er); + }; - async.each = function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length) { - return callback(); - } - var completed = 0; - _each(arr, function (x) { - iterator(x, only_once(done) ); - }); - function done(err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed >= arr.length) { - callback(); - } - } - } - }; - async.forEach = async.each; + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; - async.eachSeries = function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length) { - return callback(); - } - var completed = 0; - var iterate = function () { - iterator(arr[completed], function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed >= arr.length) { - callback(); - } - else { - iterate(); - } - } - }); - }; - iterate(); - }; - async.forEachSeries = async.eachSeries; + // the amount that is being written when _write is called. + this.writelen = 0; - async.eachLimit = function (arr, limit, iterator, callback) { - var fn = _eachLimit(limit); - fn.apply(null, [arr, iterator, callback]); - }; - async.forEachLimit = async.eachLimit; + this.buffer = []; - var _eachLimit = function (limit) { + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; +} - return function (arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length || limit <= 0) { - return callback(); - } - var completed = 0; - var started = 0; - var running = 0; +function Writable(options) { + var Duplex = require('./_stream_duplex'); - (function replenish () { - if (completed >= arr.length) { - return callback(); - } + // Writable ctor is applied to Duplexes, though they're not + // instanceof Writable, they're instanceof Readable. + if (!(this instanceof Writable) && !(this instanceof Duplex)) + return new Writable(options); - while (running < limit && started < arr.length) { - started += 1; - running += 1; - iterator(arr[started - 1], function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - running -= 1; - if (completed >= arr.length) { - callback(); - } - else { - replenish(); - } - } - }); - } - })(); - }; - }; + this._writableState = new WritableState(options, this); + // legacy. + this.writable = true; - var doParallel = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.each].concat(args)); - }; - }; - var doParallelLimit = function(limit, fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [_eachLimit(limit)].concat(args)); - }; - }; - var doSeries = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.eachSeries].concat(args)); - }; - }; + Stream.call(this); +} +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function() { + this.emit('error', new Error('Cannot pipe. Not readable.')); +}; - var _asyncMap = function (eachfn, arr, iterator, callback) { - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - if (!callback) { - eachfn(arr, function (x, callback) { - iterator(x.value, function (err) { - callback(err); - }); - }); - } else { - var results = []; - eachfn(arr, function (x, callback) { - iterator(x.value, function (err, v) { - results[x.index] = v; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - async.map = doParallel(_asyncMap); - async.mapSeries = doSeries(_asyncMap); - async.mapLimit = function (arr, limit, iterator, callback) { - return _mapLimit(limit)(arr, iterator, callback); - }; - var _mapLimit = function(limit) { - return doParallelLimit(limit, _asyncMap); - }; +function writeAfterEnd(stream, state, cb) { + var er = new Error('write after end'); + // TODO: defer error events consistently everywhere, not just the cb + stream.emit('error', er); + process.nextTick(function() { + cb(er); + }); +} - // reduce only has a series version, as doing reduce in parallel won't - // work in many situations. - async.reduce = function (arr, memo, iterator, callback) { - async.eachSeries(arr, function (x, callback) { - iterator(memo, x, function (err, v) { - memo = v; - callback(err); - }); - }, function (err) { - callback(err, memo); - }); - }; - // inject alias - async.inject = async.reduce; - // foldl alias - async.foldl = async.reduce; +// If we get something that is not a buffer, string, null, or undefined, +// and we're not in objectMode, then that's an error. +// Otherwise stream chunks are all considered to be of length=1, and the +// watermarks determine how many objects to keep in the buffer, rather than +// how many bytes or characters. +function validChunk(stream, state, chunk, cb) { + var valid = true; + if (!Buffer.isBuffer(chunk) && + 'string' !== typeof chunk && + chunk !== null && + chunk !== undefined && + !state.objectMode) { + var er = new TypeError('Invalid non-string/buffer chunk'); + stream.emit('error', er); + process.nextTick(function() { + cb(er); + }); + valid = false; + } + return valid; +} - async.reduceRight = function (arr, memo, iterator, callback) { - var reversed = _map(arr, function (x) { - return x; - }).reverse(); - async.reduce(reversed, memo, iterator, callback); - }; - // foldr alias - async.foldr = async.reduceRight; +Writable.prototype.write = function(chunk, encoding, cb) { + var state = this._writableState; + var ret = false; - var _filter = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.filter = doParallel(_filter); - async.filterSeries = doSeries(_filter); - // select alias - async.select = async.filter; - async.selectSeries = async.filterSeries; + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } - var _reject = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (!v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.reject = doParallel(_reject); - async.rejectSeries = doSeries(_reject); + if (Buffer.isBuffer(chunk)) + encoding = 'buffer'; + else if (!encoding) + encoding = state.defaultEncoding; - var _detect = function (eachfn, arr, iterator, main_callback) { - eachfn(arr, function (x, callback) { - iterator(x, function (result) { - if (result) { - main_callback(x); - main_callback = function () {}; - } - else { - callback(); - } - }); - }, function (err) { - main_callback(); - }); - }; - async.detect = doParallel(_detect); - async.detectSeries = doSeries(_detect); + if (typeof cb !== 'function') + cb = function() {}; - async.some = function (arr, iterator, main_callback) { - async.each(arr, function (x, callback) { - iterator(x, function (v) { - if (v) { - main_callback(true); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(false); - }); - }; - // any alias - async.any = async.some; + if (state.ended) + writeAfterEnd(this, state, cb); + else if (validChunk(this, state, chunk, cb)) + ret = writeOrBuffer(this, state, chunk, encoding, cb); - async.every = function (arr, iterator, main_callback) { - async.each(arr, function (x, callback) { - iterator(x, function (v) { - if (!v) { - main_callback(false); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(true); - }); - }; - // all alias - async.all = async.every; + return ret; +}; - async.sortBy = function (arr, iterator, callback) { - async.map(arr, function (x, callback) { - iterator(x, function (err, criteria) { - if (err) { - callback(err); - } - else { - callback(null, {value: x, criteria: criteria}); - } - }); - }, function (err, results) { - if (err) { - return callback(err); - } - else { - var fn = function (left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - }; - callback(null, _map(results.sort(fn), function (x) { - return x.value; - })); - } - }); - }; +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && + state.decodeStrings !== false && + typeof chunk === 'string') { + chunk = new Buffer(chunk, encoding); + } + return chunk; +} - async.auto = function (tasks, callback) { - callback = callback || function () {}; - var keys = _keys(tasks); - var remainingTasks = keys.length - if (!remainingTasks) { - return callback(); - } +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, chunk, encoding, cb) { + chunk = decodeChunk(state, chunk, encoding); + if (Buffer.isBuffer(chunk)) + encoding = 'buffer'; + var len = state.objectMode ? 1 : chunk.length; - var results = {}; + state.length += len; - var listeners = []; - var addListener = function (fn) { - listeners.unshift(fn); - }; - var removeListener = function (fn) { - for (var i = 0; i < listeners.length; i += 1) { - if (listeners[i] === fn) { - listeners.splice(i, 1); - return; - } - } - }; - var taskComplete = function () { - remainingTasks-- - _each(listeners.slice(0), function (fn) { - fn(); - }); - }; + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) + state.needDrain = true; - addListener(function () { - if (!remainingTasks) { - var theCallback = callback; - // prevent final callback from calling itself if it errors - callback = function () {}; + if (state.writing) + state.buffer.push(new WriteReq(chunk, encoding, cb)); + else + doWrite(stream, state, len, chunk, encoding, cb); - theCallback(null, results); - } - }); + return ret; +} - _each(keys, function (k) { - var task = _isArray(tasks[k]) ? tasks[k]: [tasks[k]]; - var taskCallback = function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - if (err) { - var safeResults = {}; - _each(_keys(results), function(rkey) { - safeResults[rkey] = results[rkey]; - }); - safeResults[k] = args; - callback(err, safeResults); - // stop subsequent errors hitting callback multiple times - callback = function () {}; - } - else { - results[k] = args; - async.setImmediate(taskComplete); - } - }; - var requires = task.slice(0, Math.abs(task.length - 1)) || []; - var ready = function () { - return _reduce(requires, function (a, x) { - return (a && results.hasOwnProperty(x)); - }, true) && !results.hasOwnProperty(k); - }; - if (ready()) { - task[task.length - 1](taskCallback, results); - } - else { - var listener = function () { - if (ready()) { - removeListener(listener); - task[task.length - 1](taskCallback, results); - } - }; - addListener(listener); - } - }); - }; +function doWrite(stream, state, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} - async.retry = function(times, task, callback) { - var DEFAULT_TIMES = 5; - var attempts = []; - // Use defaults if times not passed - if (typeof times === 'function') { - callback = task; - task = times; - times = DEFAULT_TIMES; - } - // Make sure times is a number - times = parseInt(times, 10) || DEFAULT_TIMES; - var wrappedTask = function(wrappedCallback, wrappedResults) { - var retryAttempt = function(task, finalAttempt) { - return function(seriesCallback) { - task(function(err, result){ - seriesCallback(!err || finalAttempt, {err: err, result: result}); - }, wrappedResults); - }; - }; - while (times) { - attempts.push(retryAttempt(task, !(times-=1))); - } - async.series(attempts, function(done, data){ - data = data[data.length - 1]; - (wrappedCallback || callback)(data.err, data.result); - }); - } - // If a callback is passed, run this as a controll flow - return callback ? wrappedTask() : wrappedTask - }; - - async.waterfall = function (tasks, callback) { - callback = callback || function () {}; - if (!_isArray(tasks)) { - var err = new Error('First argument to waterfall must be an array of functions'); - return callback(err); - } - if (!tasks.length) { - return callback(); - } - var wrapIterator = function (iterator) { - return function (err) { - if (err) { - callback.apply(null, arguments); - callback = function () {}; - } - else { - var args = Array.prototype.slice.call(arguments, 1); - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } - else { - args.push(callback); - } - async.setImmediate(function () { - iterator.apply(null, args); - }); - } - }; - }; - wrapIterator(async.iterator(tasks))(); - }; +function onwriteError(stream, state, sync, er, cb) { + if (sync) + process.nextTick(function() { + cb(er); + }); + else + cb(er); - var _parallel = function(eachfn, tasks, callback) { - callback = callback || function () {}; - if (_isArray(tasks)) { - eachfn.map(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args); - }); - } - }, callback); - } - else { - var results = {}; - eachfn.each(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; + stream._writableState.errorEmitted = true; + stream.emit('error', er); +} - async.parallel = function (tasks, callback) { - _parallel({ map: async.map, each: async.each }, tasks, callback); - }; +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} - async.parallelLimit = function(tasks, limit, callback) { - _parallel({ map: _mapLimit(limit), each: _eachLimit(limit) }, tasks, callback); - }; +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; - async.series = function (tasks, callback) { - callback = callback || function () {}; - if (_isArray(tasks)) { - async.mapSeries(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args); - }); - } - }, callback); - } - else { - var results = {}; - async.eachSeries(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; + onwriteStateUpdate(state); - async.iterator = function (tasks) { - var makeCallback = function (index) { - var fn = function () { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - }; - fn.next = function () { - return (index < tasks.length - 1) ? makeCallback(index + 1): null; - }; - return fn; - }; - return makeCallback(0); - }; + if (er) + onwriteError(stream, state, sync, er, cb); + else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(stream, state); - async.apply = function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - return function () { - return fn.apply( - null, args.concat(Array.prototype.slice.call(arguments)) - ); - }; - }; + if (!finished && !state.bufferProcessing && state.buffer.length) + clearBuffer(stream, state); - var _concat = function (eachfn, arr, fn, callback) { - var r = []; - eachfn(arr, function (x, cb) { - fn(x, function (err, y) { - r = r.concat(y || []); - cb(err); - }); - }, function (err) { - callback(err, r); - }); - }; - async.concat = doParallel(_concat); - async.concatSeries = doSeries(_concat); + if (sync) { + process.nextTick(function() { + afterWrite(stream, state, finished, cb); + }); + } else { + afterWrite(stream, state, finished, cb); + } + } +} - async.whilst = function (test, iterator, callback) { - if (test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.whilst(test, iterator, callback); - }); - } - else { - callback(); - } - }; +function afterWrite(stream, state, finished, cb) { + if (!finished) + onwriteDrain(stream, state); + cb(); + if (finished) + finishMaybe(stream, state); +} - async.doWhilst = function (iterator, test, callback) { - iterator(function (err) { - if (err) { - return callback(err); - } - var args = Array.prototype.slice.call(arguments, 1); - if (test.apply(null, args)) { - async.doWhilst(iterator, test, callback); - } - else { - callback(); - } - }); - }; +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} - async.until = function (test, iterator, callback) { - if (!test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.until(test, iterator, callback); - }); - } - else { - callback(); - } - }; - async.doUntil = function (iterator, test, callback) { - iterator(function (err) { - if (err) { - return callback(err); - } - var args = Array.prototype.slice.call(arguments, 1); - if (!test.apply(null, args)) { - async.doUntil(iterator, test, callback); - } - else { - callback(); - } - }); - }; +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; - async.queue = function (worker, concurrency) { - if (concurrency === undefined) { - concurrency = 1; - } - function _insert(q, data, pos, callback) { - if (!q.started){ - q.started = true; - } - if (!_isArray(data)) { - data = [data]; - } - if(data.length == 0) { - // call drain immediately if there are no tasks - return async.setImmediate(function() { - if (q.drain) { - q.drain(); - } - }); - } - _each(data, function(task) { - var item = { - data: task, - callback: typeof callback === 'function' ? callback : null - }; + for (var c = 0; c < state.buffer.length; c++) { + var entry = state.buffer[c]; + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; - if (pos) { - q.tasks.unshift(item); - } else { - q.tasks.push(item); - } + doWrite(stream, state, len, chunk, encoding, cb); - if (q.saturated && q.tasks.length === q.concurrency) { - q.saturated(); - } - async.setImmediate(q.process); - }); - } + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + c++; + break; + } + } - var workers = 0; - var q = { - tasks: [], - concurrency: concurrency, - saturated: null, - empty: null, - drain: null, - started: false, - paused: false, - push: function (data, callback) { - _insert(q, data, false, callback); - }, - kill: function () { - q.drain = null; - q.tasks = []; - }, - unshift: function (data, callback) { - _insert(q, data, true, callback); - }, - process: function () { - if (!q.paused && workers < q.concurrency && q.tasks.length) { - var task = q.tasks.shift(); - if (q.empty && q.tasks.length === 0) { - q.empty(); - } - workers += 1; - var next = function () { - workers -= 1; - if (task.callback) { - task.callback.apply(task, arguments); - } - if (q.drain && q.tasks.length + workers === 0) { - q.drain(); - } - q.process(); - }; - var cb = only_once(next); - worker(task.data, cb); - } - }, - length: function () { - return q.tasks.length; - }, - running: function () { - return workers; - }, - idle: function() { - return q.tasks.length + workers === 0; - }, - pause: function () { - if (q.paused === true) { return; } - q.paused = true; - q.process(); - }, - resume: function () { - if (q.paused === false) { return; } - q.paused = false; - q.process(); - } - }; - return q; - }; - - async.priorityQueue = function (worker, concurrency) { - - function _compareTasks(a, b){ - return a.priority - b.priority; - }; - - function _binarySearch(sequence, item, compare) { - var beg = -1, - end = sequence.length - 1; - while (beg < end) { - var mid = beg + ((end - beg + 1) >>> 1); - if (compare(item, sequence[mid]) >= 0) { - beg = mid; - } else { - end = mid - 1; - } - } - return beg; - } - - function _insert(q, data, priority, callback) { - if (!q.started){ - q.started = true; - } - if (!_isArray(data)) { - data = [data]; - } - if(data.length == 0) { - // call drain immediately if there are no tasks - return async.setImmediate(function() { - if (q.drain) { - q.drain(); - } - }); - } - _each(data, function(task) { - var item = { - data: task, - priority: priority, - callback: typeof callback === 'function' ? callback : null - }; - - q.tasks.splice(_binarySearch(q.tasks, item, _compareTasks) + 1, 0, item); + state.bufferProcessing = false; + if (c < state.buffer.length) + state.buffer = state.buffer.slice(c); + else + state.buffer.length = 0; +} - if (q.saturated && q.tasks.length === q.concurrency) { - q.saturated(); - } - async.setImmediate(q.process); - }); - } - - // Start with a normal queue - var q = async.queue(worker, concurrency); - - // Override push to accept second parameter representing priority - q.push = function (data, priority, callback) { - _insert(q, data, priority, callback); - }; - - // Remove unshift function - delete q.unshift; +Writable.prototype._write = function(chunk, encoding, cb) { + cb(new Error('not implemented')); +}; - return q; - }; +Writable.prototype.end = function(chunk, encoding, cb) { + var state = this._writableState; - async.cargo = function (worker, payload) { - var working = false, - tasks = []; + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } - var cargo = { - tasks: tasks, - payload: payload, - saturated: null, - empty: null, - drain: null, - drained: true, - push: function (data, callback) { - if (!_isArray(data)) { - data = [data]; - } - _each(data, function(task) { - tasks.push({ - data: task, - callback: typeof callback === 'function' ? callback : null - }); - cargo.drained = false; - if (cargo.saturated && tasks.length === payload) { - cargo.saturated(); - } - }); - async.setImmediate(cargo.process); - }, - process: function process() { - if (working) return; - if (tasks.length === 0) { - if(cargo.drain && !cargo.drained) cargo.drain(); - cargo.drained = true; - return; - } + if (typeof chunk !== 'undefined' && chunk !== null) + this.write(chunk, encoding); - var ts = typeof payload === 'number' - ? tasks.splice(0, payload) - : tasks.splice(0, tasks.length); + // ignore unnecessary end() calls. + if (!state.ending && !state.finished) + endWritable(this, state, cb); +}; - var ds = _map(ts, function (task) { - return task.data; - }); - if(cargo.empty) cargo.empty(); - working = true; - worker(ds, function () { - working = false; +function needFinish(stream, state) { + return (state.ending && + state.length === 0 && + !state.finished && + !state.writing); +} - var args = arguments; - _each(ts, function (data) { - if (data.callback) { - data.callback.apply(null, args); - } - }); - - process(); - }); - }, - length: function () { - return tasks.length; - }, - running: function () { - return working; - } - }; - return cargo; - }; - - var _console_fn = function (name) { - return function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - fn.apply(null, args.concat([function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (typeof console !== 'undefined') { - if (err) { - if (console.error) { - console.error(err); - } - } - else if (console[name]) { - _each(args, function (x) { - console[name](x); - }); - } - } - }])); - }; - }; - async.log = _console_fn('log'); - async.dir = _console_fn('dir'); - /*async.info = _console_fn('info'); - async.warn = _console_fn('warn'); - async.error = _console_fn('error');*/ - - async.memoize = function (fn, hasher) { - var memo = {}; - var queues = {}; - hasher = hasher || function (x) { - return x; - }; - var memoized = function () { - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - var key = hasher.apply(null, args); - if (key in memo) { - async.nextTick(function () { - callback.apply(null, memo[key]); - }); - } - else if (key in queues) { - queues[key].push(callback); - } - else { - queues[key] = [callback]; - fn.apply(null, args.concat([function () { - memo[key] = arguments; - var q = queues[key]; - delete queues[key]; - for (var i = 0, l = q.length; i < l; i++) { - q[i].apply(null, arguments); - } - }])); - } - }; - memoized.memo = memo; - memoized.unmemoized = fn; - return memoized; - }; - - async.unmemoize = function (fn) { - return function () { - return (fn.unmemoized || fn).apply(null, arguments); - }; - }; - - async.times = function (count, iterator, callback) { - var counter = []; - for (var i = 0; i < count; i++) { - counter.push(i); - } - return async.map(counter, iterator, callback); - }; - - async.timesSeries = function (count, iterator, callback) { - var counter = []; - for (var i = 0; i < count; i++) { - counter.push(i); - } - return async.mapSeries(counter, iterator, callback); - }; - - async.seq = function (/* functions... */) { - var fns = arguments; - return function () { - var that = this; - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - async.reduce(fns, args, function (newargs, fn, cb) { - fn.apply(that, newargs.concat([function () { - var err = arguments[0]; - var nextargs = Array.prototype.slice.call(arguments, 1); - cb(err, nextargs); - }])) - }, - function (err, results) { - callback.apply(that, [err].concat(results)); - }); - }; - }; - - async.compose = function (/* functions... */) { - return async.seq.apply(null, Array.prototype.reverse.call(arguments)); - }; - - var _applyEach = function (eachfn, fns /*args...*/) { - var go = function () { - var that = this; - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - return eachfn(fns, function (fn, cb) { - fn.apply(that, args.concat([cb])); - }, - callback); - }; - if (arguments.length > 2) { - var args = Array.prototype.slice.call(arguments, 2); - return go.apply(this, args); - } - else { - return go; - } - }; - async.applyEach = doParallel(_applyEach); - async.applyEachSeries = doSeries(_applyEach); - - async.forever = function (fn, callback) { - function next(err) { - if (err) { - if (callback) { - return callback(err); - } - throw err; - } - fn(next); - } - next(); - }; - - // Node.js - if (typeof module !== 'undefined' && module.exports) { - module.exports = async; - } - // AMD / RequireJS - else if (typeof define !== 'undefined' && define.amd) { - define([], function () { - return async; - }); - } - // included directly via